introduce runTestsParallel #333
Workflow file for this run
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: test | |
on: | |
pull_request: | |
push: | |
workflow_dispatch: | |
env: | |
MYSQL_TEST_USER: gotest | |
MYSQL_TEST_PASS: secret | |
MYSQL_TEST_ADDR: 127.0.0.1:3306 | |
MYSQL_TEST_CONCURRENT: 1 | |
jobs: | |
lint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dominikh/staticcheck-action@v1.3.0 | |
with: | |
version: "2023.1.3" | |
list: | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- name: list | |
id: set-matrix | |
run: | | |
import json | |
import os | |
go = [ | |
# Keep the most recent production release at the top | |
'1.21', | |
# Older production releases | |
'1.20', | |
'1.19', | |
'1.18', | |
] | |
mysql = [ | |
'8.1', | |
'8.0', | |
'5.7', | |
'5.6', | |
'mariadb-10.11', | |
'mariadb-10.6', | |
'mariadb-10.5', | |
'mariadb-10.4', | |
'mariadb-10.3', | |
] | |
includes = [] | |
# Go versions compatibility check | |
for v in go[1:]: | |
includes.append({'os': 'ubuntu-latest', 'go': v, 'mysql': mysql[0]}) | |
matrix = { | |
# OS vs MySQL versions | |
'os': [ 'ubuntu-latest', 'macos-latest', 'windows-latest' ], | |
'go': [ go[0] ], | |
'mysql': mysql, | |
'include': includes | |
} | |
output = json.dumps(matrix, separators=(',', ':')) | |
with open(os.environ["GITHUB_OUTPUT"], 'a', encoding="utf-8") as f: | |
f.write('matrix={0}\n'.format(output)) | |
shell: python | |
test: | |
needs: list | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: ${{ fromJSON(needs.list.outputs.matrix) }} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-go@v4 | |
with: | |
go-version: ${{ matrix.go }} | |
- uses: shogo82148/actions-setup-mysql@v1.21.0 | |
with: | |
mysql-version: ${{ matrix.mysql }} | |
user: ${{ env.MYSQL_TEST_USER }} | |
password: ${{ env.MYSQL_TEST_PASS }} | |
my-cnf: | | |
innodb_log_file_size=256MB | |
innodb_buffer_pool_size=512MB | |
max_allowed_packet=16MB | |
; TestConcurrent fails if max_connections is too large | |
max_connections=50 | |
local_infile=1 | |
performance_schema=on | |
- name: setup database | |
run: | | |
mysql --user 'root' --host '127.0.0.1' -e 'create database gotest;' | |
- name: test | |
run: | | |
go test -v '-covermode=count' '-coverprofile=coverage.out' | |
- name: Send coverage | |
uses: shogo82148/actions-goveralls@v1 | |
with: | |
path-to-profile: coverage.out | |
flag-name: ${{ runner.os }}-Go-${{ matrix.go }}-DB-${{ matrix.mysql }} | |
parallel: true | |
# notifies that all test jobs are finished. | |
finish: | |
needs: test | |
if: always() | |
runs-on: ubuntu-latest | |
steps: | |
- uses: shogo82148/actions-goveralls@v1 | |
with: | |
parallel-finished: true |