| 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 |
| - uses: dominikh/staticcheck-action@9716614d4101e79b4340dd97b10e54d68234e431 # v1.4.1 |
| |
| 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.26', |
| # Older production releases |
| '1.25', |
| '1.24', |
| ] |
| mysql = [ |
| '9.0', |
| '8.4', # LTS |
| '8.0', |
| '5.7', |
| 'mariadb-12.3', # LTS |
| 'mariadb-11.8', # LTS |
| 'mariadb-11.4', # LTS |
| 'mariadb-10.11', # LTS |
| 'mariadb-10.6', # LTS |
| 'mariadb-10.5', # LTS |
| ] |
| |
| 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: |
| print(f"matrix={output}", file=f) |
| shell: python |
| test: |
| needs: list |
| runs-on: ${{ matrix.os }} |
| strategy: |
| fail-fast: false |
| matrix: ${{ fromJSON(needs.list.outputs.matrix) }} |
| steps: |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 |
| - uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 |
| with: |
| go-version: ${{ matrix.go }} |
| - uses: shogo82148/actions-setup-mysql@076e636c45996ec8cb1a455c65f9f5364aeebd8a # v1.52.1 |
| 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=48MB |
| ; 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: benchmark |
| run: | |
| go test -run '^$' -bench . |
| |
| - name: Send coverage |
| uses: shogo82148/actions-goveralls@9606dbc5ac5cf888a0e9ef901515c3cd516a2790 # v1.11.0 |
| 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@9606dbc5ac5cf888a0e9ef901515c3cd516a2790 # v1.11.0 |
| with: |
| parallel-finished: true |