Skip to content

Tests

Tests #228

Workflow file for this run

name: Tests
on:
pull_request:
branches: ['**']
merge_group:
branches: ['main']
push:
branches: ['main']
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup go
uses: actions/setup-go@v5
with:
go-version: 'stable'
cache-dependency-path: "**/*.sum"
- name: golangci-lint
uses: golangci/golangci-lint-action@v4
with:
version: v1.52.2
skip-cache: true # actions/setup-go has already done this
- name: Verify license headers
run: go run tools/headercheck/header_check.go
- name: vet
run: go vet ./...
- name: Verify LICENSE-3rdparty.csv
run: ./tools/verify-licenses.sh
env:
TMPDIR: ${{ runner.temp }}
unit-tests:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
go-version: ['1.21', '1.22', '1.23.0-rc.1']
name: Unit tests (go${{ matrix.go-version }})
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Checkout Go
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
cache-dependency-path: "**/*.sum"
- name: Run unit tests
run: |-
mkdir -p ./coverage
go test -cover -covermode=atomic -coverpkg=./... -coverprofile=coverage/unit.out -race ./...
- name: Determine simple go version
if: always() && github.event_name != 'merge_group'
id: simple-go-version
run: echo "::set-output name=version::${COMPLETE_VERSION:0:4}"
shell: bash
env:
COMPLETE_VERSION: ${{ matrix.go-version }}
- name: Upload coverage report
# We want this even if the tests failed
if: always() && github.event_name != 'merge_group'
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
flags: go${{ steps.simple-go-version.outputs.version }},${{ runner.os }},${{ runner.arch }},unit
file: ./coverage/unit.out
name: Unit Tests (go${{ matrix.go-version }})
integration-tests:
strategy:
fail-fast: false
matrix:
runs-on: [macos, ubuntu, windows]
go-version: ['1.21', '1.22', '1.23.0-rc.1']
build-mode: [DRIVER]
include:
# Alternate build modes (only on ubuntu, latest go; to save CI time)
- runs-on: ubuntu
go-version: '1.22'
build-mode: TOOLEXEC
- runs-on: ubuntu
go-version: '1.22'
build-mode: GOFLAGS
runs-on: ${{ matrix.runs-on }}-latest
name: Integration tests (go${{ matrix.go-version }}, ${{ matrix.runs-on }}, ${{ matrix.build-mode }})
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup go
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
cache-dependency-path: "**/*.sum"
- name: Setup python
uses: actions/setup-python@v5
with:
python-version: '>=3.9 <3.13'
- name: Run Integration Tests
run: ./integration-tests.ps1
env:
TESTCASE_BUILD_MODE: ${{ matrix.build-mode }}
- name: Consolidate coverage report
if: always() && github.event_name != 'merge_group'
shell: bash # PowerShell mkdir -p fails if the directory already exists...
run: |-
mkdir -p ./coverage
go tool covdata textfmt -i ./_integration-tests/outputs/coverage -o ./coverage/integration.out
- name: Determine simple go version
if: always() && github.event_name != 'merge_group'
id: simple-go-version
run: echo "::set-output name=version::${COMPLETE_VERSION:0:4}"
shell: bash
env:
COMPLETE_VERSION: ${{ matrix.go-version }}
- name: Upload coverage report
# We want this even if the tests failed
if: always() && github.event_name != 'merge_group'
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
flags: go${{ steps.simple-go-version.outputs.version }},${{ runner.os }},${{ runner.arch }},integration
file: ./coverage/integration.out
name: Integration Tests (go${{ matrix.go-version }}, ${{ matrix.runs-on }}, ${{ matrix.build-mode }})
- name: Upload artifact
# We want this even if the tests failed
if: always()
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.runs-on }}-tests-${{ matrix.go-version }}-${{ matrix.build-mode }}-output
path: _integration-tests/outputs
if-no-files-found: error # That would be very unexpected
# This is just a join point intended to simplify branch protection settings
complete:
runs-on: ubuntu-latest
needs:
- lint
- unit-tests
- integration-tests
if: '!cancelled()'
steps:
- name: Done
if: needs.lint.result == 'success' && needs.unit-tests.result == 'success' && needs.integration-tests.result == 'success'
run: echo "OK"
- name: Done
if: needs.lint.result != 'success' || needs.unit-tests.result != 'success' || needs.integration-tests.result != 'success'
run: |-
echo "Failed!"
exit 1