diff --git a/.github/workflows/Tests.yml b/.github/workflows/Tests.yml index 25a0b6c82..1b143b01f 100644 --- a/.github/workflows/Tests.yml +++ b/.github/workflows/Tests.yml @@ -9,33 +9,76 @@ on: paths-ignore: - 'docs/**' pull_request: + types: [opened, synchronize, reopened, ready_for_review, converted_to_draft] workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.ref }} # Cancel intermediate builds: only if it is a pull request build. cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }} - jobs: - tests: - name: "Tests" + setup-matrix: + runs-on: ubuntu-latest + outputs: + groups: ${{ steps.mk.outputs.groups }} + version: ${{ steps.mk.outputs.version }} + os: ${{ steps.mk.outputs.os }} + steps: + - uses: actions/checkout@v6 + - id: mk + shell: bash + run: | + # Auto-discover test groups from all subdirectory names. + groups=$(find test -mindepth 1 -maxdepth 1 -type d \ + | xargs -I{} basename {} | sort \ + | jq -R -s -c '[split("\n")[] | select(length > 0) | select(.!= "testsuite")]') + + echo "groups=${groups}" >> "$GITHUB_OUTPUT" + + # Draft PR: only run ubuntu-latest + version=1 + if [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.pull_request.draft }}" == "true" ]]; then + echo 'version=["1"]' >> "$GITHUB_OUTPUT" + echo 'os=["ubuntu-latest"]' >> "$GITHUB_OUTPUT" + else + echo 'version=["min","1"]' >> "$GITHUB_OUTPUT" + echo 'os=["ubuntu-latest","macOS-latest","windows-latest"]' >> "$GITHUB_OUTPUT" + fi + + test: + name: "Tests (${{ matrix.group }}, ${{ matrix.os }}, Julia ${{ matrix.version }})" + needs: setup-matrix strategy: fail-fast: false matrix: - version: - - 'lts' # minimal supported version - - '1' # latest released Julia version - # group: - os: - - ubuntu-latest - - macOS-latest - - windows-latest - uses: "QuantumKitHub/QuantumKitHubActions/.github/workflows/Tests.yml@main" - with: - group: "${{ matrix.group }}" - nthreads: 4 - julia-version: "${{ matrix.version }}" - os: "${{ matrix.os }}" - timeout-minutes: 120 - secrets: - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + version: ${{ fromJSON(needs.setup-matrix.outputs.version) }} + os: ${{ fromJSON(needs.setup-matrix.outputs.os) }} + group: ${{ fromJSON(needs.setup-matrix.outputs.groups) }} + exclude: + - os: macos-latest + version: 1 + group: enzyme + - os: macos-latest + version: "min" + group: enzyme + runs-on: ${{ matrix.os }} + timeout-minutes: 120 + steps: + - uses: actions/checkout@v6 + - uses: julia-actions/setup-julia@v3 + with: + version: ${{ matrix.version }} + - uses: julia-actions/cache@v3 + - uses: julia-actions/julia-buildpkg@v1 + - uses: julia-actions/julia-runtest@v1 + with: + test_args: '${{ matrix.group }}${{ github.event.pull_request.draft == true && '' --fast'' || '''' }}' + env: + JULIA_NUM_THREADS: "4" + - uses: julia-actions/julia-processcoverage@v1 + with: + directories: 'src,ext' + - uses: codecov/codecov-action@v6 + with: + files: lcov.info + token: ${{ secrets.CODECOV_TOKEN }} + fail_ci_if_error: false diff --git a/test/chainrules.jl b/test/chainrules/chainrules.jl similarity index 88% rename from test/chainrules.jl rename to test/chainrules/chainrules.jl index c0ab618ae..f3b123688 100644 --- a/test/chainrules.jl +++ b/test/chainrules/chainrules.jl @@ -4,7 +4,7 @@ using Test #BLASFloats = (Float32, Float64, ComplexF32, ComplexF64) BLASFloats = (Float32, ComplexF64) # full suite is too expensive on CI -@isdefined(TestSuite) || include("testsuite/TestSuite.jl") +@isdefined(TestSuite) || include("../testsuite/TestSuite.jl") using .TestSuite is_buildkite = get(ENV, "BUILDKITE", "false") == "true" diff --git a/test/algorithms.jl b/test/common/algorithms.jl similarity index 100% rename from test/algorithms.jl rename to test/common/algorithms.jl diff --git a/test/codequality.jl b/test/common/codequality.jl similarity index 100% rename from test/codequality.jl rename to test/common/codequality.jl diff --git a/test/projections.jl b/test/common/projections.jl similarity index 94% rename from test/projections.jl rename to test/common/projections.jl index 16044f639..74f4a6429 100644 --- a/test/projections.jl +++ b/test/common/projections.jl @@ -8,7 +8,7 @@ using CUDA, AMDGPU BLASFloats = (Float32, Float64, ComplexF32, ComplexF64) GenericFloats = (BigFloat, Complex{BigFloat}) -@isdefined(TestSuite) || include("testsuite/TestSuite.jl") +@isdefined(TestSuite) || include("../testsuite/TestSuite.jl") using .TestSuite is_buildkite = get(ENV, "BUILDKITE", "false") == "true" diff --git a/test/truncate.jl b/test/common/truncate.jl similarity index 100% rename from test/truncate.jl rename to test/common/truncate.jl diff --git a/test/eig.jl b/test/decompositions/eig.jl similarity index 96% rename from test/eig.jl rename to test/decompositions/eig.jl index 12aecfbc4..6c6636e6b 100644 --- a/test/eig.jl +++ b/test/decompositions/eig.jl @@ -9,7 +9,7 @@ using CUDA, AMDGPU BLASFloats = (Float32, Float64, ComplexF32, ComplexF64) GenericFloats = (BigFloat, Complex{BigFloat}) -@isdefined(TestSuite) || include("testsuite/TestSuite.jl") +@isdefined(TestSuite) || include("../testsuite/TestSuite.jl") using .TestSuite is_buildkite = get(ENV, "BUILDKITE", "false") == "true" diff --git a/test/eigh.jl b/test/decompositions/eigh.jl similarity index 97% rename from test/eigh.jl rename to test/decompositions/eigh.jl index d9016eca9..0181e481f 100644 --- a/test/eigh.jl +++ b/test/decompositions/eigh.jl @@ -8,7 +8,7 @@ using CUDA, AMDGPU BLASFloats = (Float32, Float64, ComplexF32, ComplexF64) GenericFloats = (BigFloat, Complex{BigFloat}) -@isdefined(TestSuite) || include("testsuite/TestSuite.jl") +@isdefined(TestSuite) || include("../testsuite/TestSuite.jl") using .TestSuite is_buildkite = get(ENV, "BUILDKITE", "false") == "true" diff --git a/test/gen_eig.jl b/test/decompositions/gen_eig.jl similarity index 100% rename from test/gen_eig.jl rename to test/decompositions/gen_eig.jl diff --git a/test/lq.jl b/test/decompositions/lq.jl similarity index 98% rename from test/lq.jl rename to test/decompositions/lq.jl index c4abe15f7..ce38f42f9 100644 --- a/test/lq.jl +++ b/test/decompositions/lq.jl @@ -9,7 +9,7 @@ using CUDA, AMDGPU, GenericLinearAlgebra BLASFloats = (Float32, Float64, ComplexF32, ComplexF64) GenericFloats = (Float16, BigFloat, Complex{BigFloat}) -@isdefined(TestSuite) || include("testsuite/TestSuite.jl") +@isdefined(TestSuite) || include("../testsuite/TestSuite.jl") using .TestSuite is_buildkite = get(ENV, "BUILDKITE", "false") == "true" diff --git a/test/orthnull.jl b/test/decompositions/orthnull.jl similarity index 94% rename from test/orthnull.jl rename to test/decompositions/orthnull.jl index a8aedcb9a..6d37dba15 100644 --- a/test/orthnull.jl +++ b/test/decompositions/orthnull.jl @@ -8,7 +8,7 @@ using CUDA, AMDGPU BLASFloats = (Float32, Float64, ComplexF32, ComplexF64) GenericFloats = (BigFloat, Complex{BigFloat}) -@isdefined(TestSuite) || include("testsuite/TestSuite.jl") +@isdefined(TestSuite) || include("../testsuite/TestSuite.jl") using .TestSuite is_buildkite = get(ENV, "BUILDKITE", "false") == "true" diff --git a/test/polar.jl b/test/decompositions/polar.jl similarity index 96% rename from test/polar.jl rename to test/decompositions/polar.jl index 6fa0e8d97..a259386e3 100644 --- a/test/polar.jl +++ b/test/decompositions/polar.jl @@ -7,7 +7,7 @@ using CUDA, AMDGPU BLASFloats = (Float32, Float64, ComplexF32, ComplexF64) GenericFloats = (BigFloat, Complex{BigFloat}) -@isdefined(TestSuite) || include("testsuite/TestSuite.jl") +@isdefined(TestSuite) || include("../testsuite/TestSuite.jl") using .TestSuite is_buildkite = get(ENV, "BUILDKITE", "false") == "true" diff --git a/test/qr.jl b/test/decompositions/qr.jl similarity index 97% rename from test/qr.jl rename to test/decompositions/qr.jl index b25b4aa74..3a7c2f861 100644 --- a/test/qr.jl +++ b/test/decompositions/qr.jl @@ -8,7 +8,7 @@ using CUDA, AMDGPU, GenericLinearAlgebra BLASFloats = (Float32, Float64, ComplexF32, ComplexF64) GenericFloats = (Float16, BigFloat, Complex{BigFloat}) -@isdefined(TestSuite) || include("testsuite/TestSuite.jl") +@isdefined(TestSuite) || include("../testsuite/TestSuite.jl") using .TestSuite is_buildkite = get(ENV, "BUILDKITE", "false") == "true" diff --git a/test/schur.jl b/test/decompositions/schur.jl similarity index 95% rename from test/schur.jl rename to test/decompositions/schur.jl index cbc02d343..ec879314b 100644 --- a/test/schur.jl +++ b/test/decompositions/schur.jl @@ -7,7 +7,7 @@ using LinearAlgebra: I, Diagonal BLASFloats = (Float32, Float64, ComplexF32, ComplexF64) GenericFloats = (BigFloat, Complex{BigFloat}) -@isdefined(TestSuite) || include("testsuite/TestSuite.jl") +@isdefined(TestSuite) || include("../testsuite/TestSuite.jl") using .TestSuite is_buildkite = get(ENV, "BUILDKITE", "false") == "true" diff --git a/test/svd.jl b/test/decompositions/svd.jl similarity index 97% rename from test/svd.jl rename to test/decompositions/svd.jl index 662346a78..8cf34d834 100644 --- a/test/svd.jl +++ b/test/decompositions/svd.jl @@ -5,7 +5,7 @@ using CUDA, AMDGPU BLASFloats = (Float32, Float64, ComplexF32, ComplexF64) GenericFloats = (BigFloat, Complex{BigFloat}) -@isdefined(TestSuite) || include("testsuite/TestSuite.jl") +@isdefined(TestSuite) || include("../testsuite/TestSuite.jl") using .TestSuite is_buildkite = get(ENV, "BUILDKITE", "false") == "true"