build-and-test #92
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: build-and-test | |
on: | |
push: | |
branches: [ main ] | |
tags: | |
- 'v[0-9]+.[0-9]+.[0-9]+*' | |
merge_group: | |
pull_request: | |
paths-ignore: | |
- '**.md' | |
workflow_dispatch: | |
env: | |
TEST_RESULTS: testbed/tests/results/junit/results.xml | |
# Make sure to exit early if cache segment download times out after 2 minutes. | |
# We limit cache download as a whole to 5 minutes. | |
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 2 | |
# Do not cancel this workflow on main. | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
pr-labeling: | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
issues: write | |
pull-requests: write | |
steps: | |
- uses: amannn/action-semantic-pull-request@v5 | |
if: github.event_name == 'pull_request' | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
disallowScopes: | | |
release | |
setup-environment: | |
timeout-minutes: 30 | |
runs-on: ubuntu-latest | |
if: ${{ github.actor != 'dependabot[bot]' }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: "1.21.9" | |
cache: false | |
- name: Cache Go | |
id: go-cache | |
timeout-minutes: 5 | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/go/bin | |
~/go/pkg/mod | |
key: go-cache-${{ runner.os }}-${{ hashFiles('**/go.sum') }} | |
- name: Install dependencies | |
if: steps.go-cache.outputs.cache-hit != 'true' | |
run: | | |
# go env -w GOPROXY='https://proxy.golang.org,direct' | |
make -j2 gomoddownload | |
- name: Install Tools | |
if: steps.go-cache.outputs.cache-hit != 'true' | |
run: make install-tools | |
lint-matrix: | |
strategy: | |
fail-fast: false | |
matrix: | |
test: | |
# - windows | |
- linux | |
group: | |
# - receiver | |
- processor | |
# - exporter | |
- extension | |
- internal | |
# - pkg | |
- cmd | |
# - other | |
runs-on: ubuntu-latest | |
needs: [setup-environment] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: "1.21.9" | |
cache: false | |
- name: Cache Go | |
id: go-cache | |
timeout-minutes: 5 | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/go/bin | |
~/go/pkg/mod | |
key: go-cache-${{ runner.os }}-${{ hashFiles('**/go.sum') }} | |
- name: Install dependencies | |
if: steps.go-cache.outputs.cache-hit != 'true' | |
run: | | |
# go env -w GOPROXY='https://proxy.golang.org,direct' | |
make -j2 gomoddownload | |
- name: Install Tools | |
if: steps.go-cache.outputs.cache-hit != 'true' | |
run: make install-tools | |
- name: Cache Lint Build | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cache/go-build | |
key: go-lint-build-${{ matrix.group }}-${{ runner.os }}-${{ hashFiles('**/go.sum') }} | |
- name: Lint | |
run: GOOS=${{ matrix.os }} GOARCH=amd64 make -j2 golint GROUP=${{ matrix.group }} | |
lint: | |
if: ${{ github.actor != 'dependabot[bot]' && always() }} | |
runs-on: ubuntu-latest | |
needs: [setup-environment, lint-matrix] | |
steps: | |
- name: Print result | |
run: echo ${{ needs.lint-matrix.result }} | |
- name: Interpret result | |
run: | | |
if [[ success == ${{ needs.lint-matrix.result }} ]] | |
then | |
echo "All matrix jobs passed!" | |
else | |
echo "One or more matrix jobs failed." | |
false | |
fi | |
govulncheck: | |
strategy: | |
fail-fast: false | |
matrix: | |
group: | |
# - receiver | |
- processor | |
# - exporter | |
- extension | |
- internal | |
# - pkg | |
- cmd | |
# - other | |
runs-on: ubuntu-latest | |
timeout-minutes: 30 | |
steps: | |
- name: Checkout Repo | |
uses: actions/checkout@v4 | |
- name: Setup Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: "1.21.9" | |
cache: false | |
- name: Cache Go | |
id: go-cache | |
timeout-minutes: 5 | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/go/bin | |
~/go/pkg/mod | |
key: go-cache-${{ runner.os }}-${{ hashFiles('**/go.sum') }} | |
- name: Install Tools | |
if: steps.go-cache.outputs.cache-hit != 'true' | |
run: make install-tools | |
- name: Run `govulncheck` | |
run: make -j2 gogovulncheck GROUP=${{ matrix.group }} | |
checks: | |
runs-on: ubuntu-latest | |
needs: [setup-environment] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: "1.21.9" | |
cache: false | |
- name: Cache Go | |
id: go-cache | |
timeout-minutes: 5 | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/go/bin | |
~/go/pkg/mod | |
key: go-cache-${{ runner.os }}-${{ hashFiles('**/go.sum') }} | |
- name: Install dependencies | |
if: steps.go-cache.outputs.cache-hit != 'true' | |
run: | | |
# go env -w GOPROXY='https://proxy.golang.org,direct' | |
make -j2 gomoddownload | |
- name: Install Tools | |
if: steps.go-cache.outputs.cache-hit != 'true' | |
run: make install-tools | |
- name: Porto | |
run: | | |
make -j2 goporto | |
git diff --exit-code || (echo 'Porto links are out of date, please run "make goporto" and commit the changes in this PR.' && exit 1) | |
- name: crosslink | |
run: | | |
make crosslink | |
git diff --exit-code || (echo 'Replace statements are out of date, please run "make crosslink" and commit the changes in this PR.' && exit 1) | |
- name: Check for go mod dependency changes | |
run: | | |
make gotidy | |
git diff --exit-code || (echo 'go.mod/go.sum deps changes detected, please run "make gotidy" and commit the changes in this PR.' && exit 1) | |
- name: Gen genotelcontribcol | |
run: | | |
make genotelcontribcol | |
git diff -s --exit-code || (echo 'Generated code is out of date, please run "make genotelcontribcol" and commit the changes in this PR.' && exit 1) | |
- name: MultimodVerify | |
run: make multimod-verify | |
unittest-matrix: | |
strategy: | |
fail-fast: false | |
matrix: | |
go-version: ["1.22.2", "1.21.9"] # 1.20 is interpreted as 1.2 without quotes | |
runner: [ubuntu-latest] | |
group: | |
# - receiver | |
- processor | |
# - exporter | |
- extension | |
- internal | |
# - pkg | |
# Skip cmd for now as otelcontribcol is the only one we have, and it's one that skips testing | |
# - cmd | |
# - other | |
runs-on: ${{ matrix.runner }} | |
needs: [setup-environment] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: ${{ matrix.go-version }} | |
cache: false | |
- name: Cache Go | |
id: go-cache | |
timeout-minutes: 5 | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/go/bin | |
~/go/pkg/mod | |
key: go-cache-${{ runner.os }}-${{ matrix.runner }}-${{ hashFiles('**/go.sum') }} | |
- name: Install dependencies | |
if: steps.go-cache.outputs.cache-hit != 'true' | |
run: | | |
# go env -w GOPROXY='https://proxy.golang.org,direct' | |
make -j2 gomoddownload | |
- name: Install Tools | |
if: steps.go-cache.outputs.cache-hit != 'true' | |
run: make install-tools | |
- name: Cache Test Build | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cache/go-build | |
key: go-test-build-${{ runner.os }}-${{ matrix.go-version }}-${{ matrix.runner }}-${{ hashFiles('**/go.sum') }} | |
- name: Run Unit Tests | |
if: startsWith( matrix.go-version, '1.21' ) != true | |
run: make gotest GROUP=${{ matrix.group }} | |
- name: Run Unit Tests With Coverage | |
if: startsWith( matrix.go-version, '1.21' ) # only run coverage on one version | |
run: make gotest-with-cover GROUP=${{ matrix.group }} | |
- uses: actions/upload-artifact@v4 | |
if: startsWith( matrix.go-version, '1.21' ) # only upload artifact for one version | |
with: | |
name: coverage-artifacts-${{ matrix.go-version }}-${{ matrix.runner }}-${{ matrix.group }} | |
path: ${{ matrix.group }}-coverage.txt | |
retention-days: 15 | |
unittest: | |
if: ${{ github.actor != 'dependabot[bot]' && always() }} | |
runs-on: ubuntu-latest | |
needs: [setup-environment, unittest-matrix] | |
steps: | |
- name: Print result | |
run: echo ${{ needs.unittest-matrix.result }} | |
- name: Interpret result | |
run: | | |
if [[ success == ${{ needs.unittest-matrix.result }} ]] | |
then | |
echo "All matrix jobs passed!" | |
else | |
echo "One or more matrix jobs failed." | |
false | |
fi | |
integration-tests-matrix: | |
strategy: | |
fail-fast: false | |
matrix: | |
group: | |
# - receiver | |
- processor | |
# - exporter | |
- extension | |
- internal | |
# - pkg | |
- cmd | |
# - other | |
runs-on: ubuntu-latest | |
needs: [setup-environment] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: "1.21.9" | |
cache: false | |
- name: Cache Go | |
id: go-cache | |
timeout-minutes: 5 | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/go/bin | |
~/go/pkg/mod | |
key: go-cache-${{ runner.os }}-${{ hashFiles('**/go.sum') }} | |
- name: Run Integration Tests | |
run: make gointegration-test GROUP=${{ matrix.group }} | |
integration-tests: | |
if: ${{ github.actor != 'dependabot[bot]' && always() }} | |
runs-on: ubuntu-latest | |
needs: [ setup-environment, integration-tests-matrix ] | |
steps: | |
- name: Print result | |
run: echo ${{ needs.integration-tests-matrix.result }} | |
- name: Interpret result | |
run: | | |
if [[ success == ${{ needs.integration-tests-matrix.result }} ]] | |
then | |
echo "All matrix jobs passed!" | |
else | |
echo "One or more matrix jobs failed." | |
false | |
fi | |
cross-compile: | |
runs-on: ubuntu-latest | |
needs: [setup-environment] | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- darwin | |
- linux | |
# - windows | |
arch: | |
# - 386 | |
- amd64 | |
# - arm | |
- arm64 | |
# - ppc64le | |
# - s390x | |
include: | |
- os: linux | |
- arch: arm | |
- arm: 7 | |
# exclude: | |
# - os: darwin | |
# arch: 386 | |
# - os: darwin | |
# arch: arm | |
# - os: darwin | |
# arch: ppc64le | |
# - os: darwin | |
# arch: s390x | |
# - os: windows | |
# arch: arm | |
# - os: windows | |
# arch: arm64 | |
# - os: windows | |
# arch: ppc64le | |
# - os: windows | |
# arch: s390x | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: "1.21.9" | |
cache: false | |
- name: Cache Go | |
id: go-cache | |
timeout-minutes: 5 | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/go/bin | |
~/go/pkg/mod | |
key: go-cache-${{ runner.os }}-${{ hashFiles('**/go.sum') }} | |
- name: Install dependencies | |
if: steps.go-cache.outputs.cache-hit != 'true' | |
run: | | |
# go env -w GOPROXY='https://proxy.golang.org,direct' | |
make -j2 gomoddownload | |
- name: Install Tools | |
if: steps.go-cache.outputs.cache-hit != 'true' | |
run: make install-tools | |
- name: Build Collector ${{ matrix.binary }} | |
run: make GOOS=${{ matrix.os }} GOARCH=${{ matrix.arch }} GOARM=${{ matrix.arm }} otelcontribcol | |
- name: Upload Collector Binaries | |
uses: actions/upload-artifact@v4 | |
with: | |
name: collector-binaries-${{ matrix.os }}-${{ matrix.arch }} | |
path: ./bin/* | |
retention-days: 15 | |
publish-stable: | |
runs-on: ubuntu-latest | |
needs: [lint, unittest, integration-tests, cross-compile] | |
if: startsWith(github.ref, 'refs/tags/v') && github.repository == 'lumigo-io/lumigo-otel-collector-contrib' | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Download Collector Binaries | |
uses: actions/download-artifact@v4 | |
with: | |
merge-multiple: true | |
path: ./bin/ | |
pattern: collector-binaries-* | |
- name: Verify Distribution Files Exist | |
id: check | |
run: ./.github/workflows/scripts/verify_dist_files_exist.sh | |
- name: Set Release Tag | |
id: github_tag | |
run: ./.github/workflows/scripts/set_release_tag.sh | |
- name: Create Github Release | |
run: | | |
gh release create $RELEASE_TAG -t $RELEASE_TAG --verify-tag | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
RELEASE_TAG: ${{ steps.github_tag.outputs.tag }} | |
- name: Upload Release Artifacts | |
run: | | |
gh release upload $RELEASE_TAG ./bin/* | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
RELEASE_TAG: ${{ steps.github_tag.outputs.tag }} |