117 lines
3.1 KiB
YAML
117 lines
3.1 KiB
YAML
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@v4
|
|
- uses: dominikh/staticcheck-action@v1.3.0
|
|
with:
|
|
version: "2023.1.6"
|
|
|
|
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@v4
|
|
- uses: actions/setup-go@v5
|
|
with:
|
|
go-version: ${{ matrix.go }}
|
|
- uses: shogo82148/actions-setup-mysql@v1
|
|
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 '-race' '-covermode=atomic' '-coverprofile=coverage.out' -parallel 10
|
|
|
|
- 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
|