123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- ---
- # Ci code for building release artifacts.
- name: Go Tests
- on:
- push: # Master branch checks only validate the build and generate artifacts for testing.
- branches:
- - master
- pull_request: null # PR checks only validate the build and generate artifacts for testing.
- concurrency: # This keeps multiple instances of the job from running concurrently for the same ref and event type.
- group: go-test-${{ github.ref }}-${{ github.event_name }}
- cancel-in-progress: true
- jobs:
- file-check: # Check what files changed if we’re being run in a PR or on a push.
- name: Check Modified Files
- runs-on: ubuntu-latest
- outputs:
- run: ${{ steps.check-run.outputs.run }}
- steps:
- - name: Checkout
- id: checkout
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
- submodules: recursive
- - name: Check files
- id: check-files
- uses: tj-actions/changed-files@v45
- with:
- since_last_remote_commit: ${{ github.event_name != 'pull_request' }}
- files: |
- **/*.cmake
- CMakeLists.txt
- .github/workflows/go-tests.yml
- packaging/cmake/
- src/go/**
- files_ignore: |
- **/*.md
- src/go/**/metadata.yaml
- packaging/repoconfig/
- - name: List all changed files in pattern
- continue-on-error: true
- env:
- ALL_CHANGED_FILES: ${{ steps.check-files.outputs.all_changed_files }}
- run: |
- for file in ${ALL_CHANGED_FILES}; do
- echo "$file was changed"
- done
- - name: Check Run
- id: check-run
- run: |
- if [ "${{ steps.check-files.outputs.any_modified }}" == "true" ] || [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
- echo 'run=true' >> "${GITHUB_OUTPUT}"
- else
- echo 'run=false' >> "${GITHUB_OUTPUT}"
- fi
- matrix:
- name: Generate Build Matrix
- runs-on: ubuntu-latest
- outputs:
- matrix: ${{ steps.get-version.outputs.matrix }}
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Install dependencies
- run: |
- sudo apt-get update || true
- sudo apt-get install -y python3-packaging
- - name: Get Go version and modules
- id: get-version
- run: .github/scripts/get-go-version.py
- tests:
- name: Go toolchain tests
- runs-on: ubuntu-latest
- needs:
- - file-check
- - matrix
- strategy:
- fail-fast: false
- matrix:
- include: ${{ fromJson(needs.matrix.outputs.matrix) }}
- steps:
- - name: Skip Check
- id: skip
- if: needs.file-check.outputs.run != 'true'
- run: echo "SKIPPED"
- - name: Install Go
- uses: actions/setup-go@v5
- with:
- go-version: ${{ matrix.version }}
- - name: Checkout
- if: needs.file-check.outputs.run == 'true'
- uses: actions/checkout@v4
- with:
- submodules: recursive
- - name: Go mod download
- if: needs.file-check.outputs.run == 'true'
- run: go mod download
- working-directory: ${{ matrix.module }}
- - name: Compile
- if: needs.file-check.outputs.run == 'true'
- run: |
- CGO_ENABLED=0 go build -o /tmp/go-test-build ${{ matrix.build_target }}
- /tmp/go-test-build --help || true
- working-directory: ${{ matrix.module }}
- - name: Go fmt
- if: needs.file-check.outputs.run == 'true'
- run: |
- go fmt ./... | tee modified-files
- [ "$(wc -l modified-files | cut -f 1 -d ' ')" -eq 0 ] || exit 1
- working-directory: ${{ matrix.module }}
- - name: Go vet
- if: needs.file-check.outputs.run == 'true'
- run: go vet ./...
- working-directory: ${{ matrix.module }}
- - name: Set up gotestfmt
- if: needs.file-check.outputs.run == 'true'
- uses: GoTestTools/gotestfmt-action@v2
- with:
- token: ${{ secrets.GITHUB_TOKEN }}
- version: v2.0.0
- - name: Go test
- if: needs.file-check.outputs.run == 'true'
- run: |
- set -euo pipefail
- go test -json ./... -race -count=1 2>&1 | gotestfmt -hide all
- working-directory: ${{ matrix.module }}
- build-tests:
- name: Go build tests
- runs-on: ubuntu-latest
- needs:
- - file-check
- - matrix
- strategy:
- fail-fast: false
- matrix:
- platforms:
- - linux/386
- - linux/amd64
- - linux/arm
- - linux/arm64
- - linux/ppc64le
- - windows/amd64
- include: ${{ fromJson(needs.matrix.outputs.matrix) }}
- steps:
- - name: Skip Check
- id: skip
- if: needs.file-check.outputs.run != 'true'
- run: echo "SKIPPED"
- - name: Install Go
- uses: actions/setup-go@v5
- with:
- go-version: ${{ matrix.version }}
- - name: Checkout
- if: needs.file-check.outputs.run == 'true'
- uses: actions/checkout@v4
- with:
- submodules: recursive
- - name: Set GOOS and GOARCH
- run: |
- echo "GOOS=$(echo "${{ matrix.platform }}" | cut -f 1 -d '/')" >> "${GITHUB_ENV}"
- echo "GOARCH=$(echo "${{ matrix.platform }}" | cut -f 2 -d '/')" >> "${GITHUB_ENV}"
- - name: Go mod download
- if: needs.file-check.outputs.run == 'true'
- run: go mod download
- working-directory: ${{ matrix.module }}
- - name: Compile
- if: needs.file-check.outputs.run == 'true'
- run: |
- CGO_ENABLED=0 go build -o /tmp/go-test-build ${{ matrix.build_target }}
- working-directory: ${{ matrix.module }}
|