MySQL.jl 2.0: native Julia wire-protocol client (Connector/C removed) #108
This file contains hidden or 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: CI | |
| on: | |
| push: | |
| branches: [main] | |
| tags: ["*"] | |
| pull_request: | |
| schedule: | |
| # nightly deterministic fuzz budget (plan §8.4); the smoke batch runs in every test job | |
| - cron: "17 6 * * *" | |
| workflow_dispatch: | |
| jobs: | |
| cleanroom: | |
| name: Native clean-room source check | |
| if: github.event_name != 'schedule' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - uses: julia-actions/setup-julia@v2 | |
| with: | |
| version: "1.10" | |
| - run: julia --startup-file=no scripts/check_native_cleanroom.jl | |
| test: | |
| name: Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ github.event_name }} | |
| if: github.event_name != 'schedule' | |
| runs-on: ${{ matrix.os }} | |
| timeout-minutes: 60 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: | |
| - "1.10" | |
| - 1 # automatically expands to the latest stable 1.x release of Julia | |
| - nightly | |
| os: | |
| - ubuntu-latest | |
| - macOS-latest | |
| - windows-latest | |
| arch: | |
| - x64 | |
| exclude: | |
| - os: macOS-latest | |
| arch: x64 | |
| include: | |
| - os: macOS-latest | |
| arch: aarch64 | |
| version: "1.10" | |
| - os: macOS-latest | |
| arch: aarch64 | |
| version: 1 | |
| - os: macOS-latest | |
| arch: aarch64 | |
| version: nightly | |
| steps: | |
| - uses: actions/checkout@v5 | |
| # The native wire-protocol tests need no server; the Connector/C integration tests | |
| # run only where Docker is available (Linux runners). | |
| - run: docker info | |
| if: runner.os == 'Linux' | |
| - uses: julia-actions/setup-julia@v2 | |
| with: | |
| version: ${{ matrix.version }} | |
| arch: ${{ matrix.arch }} | |
| - uses: julia-actions/cache@v2 | |
| - uses: julia-actions/julia-buildpkg@v1 | |
| - uses: julia-actions/julia-runtest@v1 | |
| - uses: julia-actions/julia-processcoverage@v1 | |
| - run: julia --startup-file=no scripts/check_native_coverage.jl lcov.info 0.85 | |
| if: runner.os == 'Linux' && matrix.version == 1 | |
| - uses: codecov/codecov-action@v5 | |
| with: | |
| files: lcov.info | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| fuzz: | |
| # Budgeted mutation fuzzing in isolated worker processes (test/protocol/fuzz.jl via | |
| # scripts/fuzz.jl); scheduled nightly, or run on demand with workflow_dispatch. | |
| name: Nightly fuzz | |
| if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 45 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - uses: julia-actions/setup-julia@v2 | |
| with: | |
| version: "1" | |
| - uses: julia-actions/cache@v2 | |
| - uses: julia-actions/julia-buildpkg@v1 | |
| - run: julia --project=. scripts/fuzz.jl --minutes 30 --seed $(date +%Y%m%d)000000 --out fuzz_failures | |
| - uses: actions/upload-artifact@v4 | |
| if: failure() | |
| with: | |
| name: fuzz-failures | |
| path: fuzz_failures/ | |
| perf: | |
| # §8.9 timing ratios: correctness/limit/allocation gates stay in Docker-capable test jobs. | |
| # Ratios are too tight for shared PR runners, so opt in on the nightly schedule and on | |
| # demand, with coverage off so the pure-Julia backend is not instrumented against C. | |
| name: Performance gates (§8.9) | |
| if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 60 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - run: docker info | |
| - uses: julia-actions/setup-julia@v2 | |
| with: | |
| version: "1" | |
| - uses: julia-actions/cache@v2 | |
| - uses: julia-actions/julia-buildpkg@v1 | |
| - uses: julia-actions/julia-runtest@v1 | |
| with: | |
| coverage: false | |
| env: | |
| MYSQL_PERF_GATES: "1" | |
| docs: | |
| name: Documentation | |
| if: github.event_name != 'schedule' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - uses: julia-actions/setup-julia@v2 | |
| with: | |
| version: '1' | |
| - run: | | |
| julia --project=docs -e ' | |
| using Pkg | |
| Pkg.develop(PackageSpec(path=pwd())) | |
| Pkg.instantiate()' | |
| - run: julia --project=docs docs/make.jl | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| DOCUMENTER_KEY: ${{ secrets.DOCUMENTER_KEY }} |