From 08ff13c46a0f7e4a0c78ce6d3245100322b5baeb Mon Sep 17 00:00:00 2001 From: Christian Guinard <28689358+christiangnrd@users.noreply.github.com> Date: Mon, 21 Sep 2026 17:25:53 -0300 Subject: [PATCH 1/3] [CI] Julia 1.13 --- .buildkite/pipeline.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index b0690075..9db467c8 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -26,6 +26,7 @@ steps: - "1.10" - "1.11" - "1.12" + - "1.13" - "nightly" adjustments: - with: @@ -39,7 +40,7 @@ steps: - label: "Validation" plugins: - JuliaCI/julia#v1: - version: "1.11" + version: "1.13" - JuliaCI/julia-test#v1: julia_args: "-g2" - JuliaCI/julia-coverage#v1: From db9cffb2dc82de404dd85c05310ce86c83d41c65 Mon Sep 17 00:00:00 2001 From: Michel Schanen Date: Tue, 22 Sep 2026 13:41:16 +0000 Subject: [PATCH 2/3] [CI] Test Julia 1.10 and 1.13 on the ALCF LTS pipeline The Aurora pipeline took the site's default julia module (1.12). Run the build/test/coverage chain once per Julia version instead: the latest LTS release (1.10) and the latest stable release (1.13), each with its own depot and resource group. Jobs are spelled out per version because GitLab does not expand variables in needs:parallel:matrix, so a matrix test job could not be tied to its own version's build artifacts. --- .gitlab-ci.yml | 64 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 54 insertions(+), 10 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 765826e3..f45a20d3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,7 +8,9 @@ # Layout: the Aurora PBS `debug` queue caps walltime at 1 h (the only 1-node queue), so # everything that doesn't need a GPU — the support-library build and package # instantiation/precompilation — runs on the login-node shell runner into a persistent -# depot on flare, and only the test run itself goes through PBS. +# depot on flare, and only the test run itself goes through PBS. The whole chain runs +# once per Julia version (latest LTS release and latest stable release), each with its +# own depot. include: - project: 'anl/ci-resources/defaults' @@ -31,6 +33,8 @@ variables: # from qsub; and the CPU target must be identical in every job or the batch job rebuilds # the package images the build job precompiled (icelake = login nodes, sapphirerapids = # compute nodes, -avx512fp16 = host Float16 miscompile workaround, see ci.yml). + # The depot only needs to be *set* here for the .bashrc guard; every job overrides it + # with its per-version depot (see the .julia-* templates). JULIA_DEPOT_PATH: /lus/flare/projects/Julia/mschanen/ci/julia_depot JULIA_CPU_TARGET: "generic;icelake-server;sapphirerapids,-avx512fp16" # Single-target variant for the runtime JIT (-C): multi-target strings are image-only @@ -40,11 +44,32 @@ variables: stages: [build, test, coverage] +# One template per tested Julia version: the latest LTS release and the latest stable +# release. Each gets its own depot (two Pkg/precompile runs on one depot are not safe, and +# the LocalPreferences.toml / test/Manifest.toml artifacts are version-specific anyway) +# and its own resource group, which serializes build vs. test on that depot while letting +# the two versions proceed independently. The jobs below are spelled out per version +# rather than using `parallel: matrix` because GitLab does not expand variables in +# `needs:parallel:matrix`, so a matrix test job cannot be tied to its own version's build +# artifacts (verified with the CI lint API on GitLab 19.3). +.julia-1.10: + variables: + JULIA_VERSION: "1.10" + JULIA_DEPOT_PATH: /lus/flare/projects/Julia/mschanen/ci/julia_depot-1.10 + resource_group: aurora-ci-depot-1.10 + +.julia-1.13: + variables: + JULIA_VERSION: "1.13" + JULIA_DEPOT_PATH: /lus/flare/projects/Julia/mschanen/ci/julia_depot-1.13 + resource_group: aurora-ci-depot-1.13 + .aurora-env: script: - # Site profile supplies julia 1.12, ONEAPI_LTS=1 and the ZE_* settings. errexit off + # The site julia modules supply ONEAPI_LTS=1 and the ZE_* settings; the version is + # loaded explicitly since the default `julia` module is still 1.12. errexit off # across it — profile.d scripts reference unset variables and return non-zero freely. - - set +eu; source /etc/profile >/dev/null 2>&1; module load julia >/dev/null 2>&1; set -eu + - set +eu; source /etc/profile >/dev/null 2>&1; module load julia/$JULIA_VERSION >/dev/null 2>&1; set -eu - command -v julia || { echo "ERROR no julia on PATH after site profile" >&2; exit 1; } - julia --version; echo "depot=$JULIA_DEPOT_PATH" @@ -53,11 +78,10 @@ stages: [build, test, coverage] # depot's scratch space, so with the depot on flare the products persist across jobs at a # stable absolute path; the LocalPreferences.toml files it writes into the checkout just # point there and travel to the test job as artifacts. -build:support: +.build:support: stage: build extends: .aurora-shell-runner timeout: 3h - resource_group: aurora-ci-depot # pipelines share the depot; serialize against test:lts script: - !reference [.aurora-env, script] - julia --color=yes --project=deps deps/build_local.jl @@ -86,11 +110,10 @@ build:support: - test/Manifest.toml expire_in: 1 week -test:lts: +.test:lts: stage: test extends: .aurora-batch-runner timeout: 5h # must cover PBS queue wait, not just the 1 h walltime - resource_group: aurora-ci-depot variables: ANL_AURORA_SCHEDULER_PARAMETERS: "-A Julia -q debug -l select=1,walltime=01:00:00,filesystems=home:flare,place=scatter" script: @@ -125,12 +148,12 @@ test:lts: expire_in: 1 week # Coverage reporting must not be able to fail the build (parity with ci.yml). Only -# created when the CODECOV_TOKEN CI/CD variable is set on the GitLab project. -coverage:upload: +# created when the CODECOV_TOKEN CI/CD variable is set on the GitLab project. Both +# versions upload for the same commit; codecov merges the reports. +.coverage:upload: stage: coverage extends: .aurora-shell-runner timeout: 30m - needs: [test:lts] rules: - if: $CODECOV_TOKEN allow_failure: true @@ -138,3 +161,24 @@ coverage:upload: - curl -sSf -o codecov https://cli.codecov.io/latest/linux/codecov && chmod +x codecov - ./codecov upload-process -t "$CODECOV_TOKEN" --git-service github --slug JuliaGPU/oneAPI.jl --commit-sha "$CI_COMMIT_SHA" -f lcov.info + +# Concrete jobs. `needs` ties every job to its own version's artifacts and lets each +# version's chain advance as soon as its predecessor is done. +build:support:1.10: + extends: [.build:support, .julia-1.10] +build:support:1.13: + extends: [.build:support, .julia-1.13] + +test:lts:1.10: + extends: [.test:lts, .julia-1.10] + needs: ["build:support:1.10"] +test:lts:1.13: + extends: [.test:lts, .julia-1.13] + needs: ["build:support:1.13"] + +coverage:upload:1.10: + extends: [.coverage:upload, .julia-1.10] + needs: ["test:lts:1.10"] +coverage:upload:1.13: + extends: [.coverage:upload, .julia-1.13] + needs: ["test:lts:1.13"] From 094512969aa16c5d0bb932109862e5d9eb20d8f4 Mon Sep 17 00:00:00 2001 From: Michel Schanen Date: Tue, 22 Sep 2026 14:05:50 +0000 Subject: [PATCH 3/3] [CI] Serialize the ALCF pipeline on one resource group The per-version resource groups let both batch test jobs reach qsub at the same time, and the Aurora debug queue allows a single queued job per user, so the second submission was refused ("would exceed queue generic's per-user limit of jobs in 'Q' state"). Share one resource group across all jobs again, which also keeps builds off a depot while a test job reads it. --- .gitlab-ci.yml | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f45a20d3..6c514708 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -46,23 +46,27 @@ stages: [build, test, coverage] # One template per tested Julia version: the latest LTS release and the latest stable # release. Each gets its own depot (two Pkg/precompile runs on one depot are not safe, and -# the LocalPreferences.toml / test/Manifest.toml artifacts are version-specific anyway) -# and its own resource group, which serializes build vs. test on that depot while letting -# the two versions proceed independently. The jobs below are spelled out per version -# rather than using `parallel: matrix` because GitLab does not expand variables in -# `needs:parallel:matrix`, so a matrix test job cannot be tied to its own version's build -# artifacts (verified with the CI lint API on GitLab 19.3). +# the LocalPreferences.toml / test/Manifest.toml artifacts are version-specific anyway). +# The jobs below are spelled out per version rather than using `parallel: matrix` because +# GitLab does not expand variables in `needs:parallel:matrix`, so a matrix test job cannot +# be tied to its own version's build artifacts (verified with the CI lint API on GitLab +# 19.3). +# +# All jobs share ONE resource group, i.e. the whole pipeline is serialized, also across +# pipelines. Two reasons: a build must not touch a depot while a test job reads it, and +# the Aurora debug queue allows a single queued job per user — a second `qsub` is +# refused outright ("would exceed queue generic's per-user limit of jobs in 'Q' state"), +# which Jacamar reports as a plain script failure. Per-version resource groups would let +# both batch jobs submit at once. .julia-1.10: variables: JULIA_VERSION: "1.10" JULIA_DEPOT_PATH: /lus/flare/projects/Julia/mschanen/ci/julia_depot-1.10 - resource_group: aurora-ci-depot-1.10 .julia-1.13: variables: JULIA_VERSION: "1.13" JULIA_DEPOT_PATH: /lus/flare/projects/Julia/mschanen/ci/julia_depot-1.13 - resource_group: aurora-ci-depot-1.13 .aurora-env: script: @@ -82,6 +86,7 @@ stages: [build, test, coverage] stage: build extends: .aurora-shell-runner timeout: 3h + resource_group: aurora-ci script: - !reference [.aurora-env, script] - julia --color=yes --project=deps deps/build_local.jl @@ -114,6 +119,7 @@ stages: [build, test, coverage] stage: test extends: .aurora-batch-runner timeout: 5h # must cover PBS queue wait, not just the 1 h walltime + resource_group: aurora-ci variables: ANL_AURORA_SCHEDULER_PARAMETERS: "-A Julia -q debug -l select=1,walltime=01:00:00,filesystems=home:flare,place=scatter" script: @@ -162,8 +168,7 @@ stages: [build, test, coverage] - ./codecov upload-process -t "$CODECOV_TOKEN" --git-service github --slug JuliaGPU/oneAPI.jl --commit-sha "$CI_COMMIT_SHA" -f lcov.info -# Concrete jobs. `needs` ties every job to its own version's artifacts and lets each -# version's chain advance as soon as its predecessor is done. +# Concrete jobs. `needs` ties every job to its own version's artifacts. build:support:1.10: extends: [.build:support, .julia-1.10] build:support:1.13: