| 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-[email protected] |
| 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.22', |
| # Older production releases |
| '1.21', |
| '1.20', |
| ] |
| mysql = [ |
| '8.0', |
| '8.3', |
| '5.7', |
| 'mariadb-11.3', |
| 'mariadb-11.1', |
| 'mariadb-10.11', # LTS |
| 'mariadb-10.6', # LTS |
| 'mariadb-10.5', |
| ] |
| |
| 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@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 |