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
|