introduce runTestsParallel #330
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/[email protected] | |
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/[email protected] | |
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 |