From c885a6432518ad6d4886b5038c1d3c7f34c5b496 Mon Sep 17 00:00:00 2001 From: Anna Rift Date: Wed, 29 Jul 2026 11:22:49 -0700 Subject: [PATCH 01/14] Add apptainer portability testing job Signed-off-by: Anna Rift --- .github/workflows/CI.yml | 67 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 3ccfcf9833e5..89289d88fa6c 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -418,6 +418,72 @@ jobs: rm ~/.ssh/id_rsa rm ~/.ssh/known_hosts + define-portability-test-configs: + runs-on: ubuntu-slim + outputs: + apptainer_configs: ${{ steps.configs.outputs.apptainer_configs }} + vagrant_configs: ${{ steps.configs.outputs.vagrant_configs }} + env: + PORTABILITY_TEST_DIR: "util/devel/test/portability" + steps: + - name: sparse check out ${{ env.PORTABILITY_TEST_DIR }} + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + persist-credentials: false + sparse-checkout: ${{ env.PORTABILITY_TEST_DIR }} + - name: get list of current Apptainer and Vagrant configs + id: configs + run: | + cd ${{ env.PORTABILITY_TEST_DIR }} + + pushd apptainer/current + apptainer_configs=$(find . -type d -mindepth 1 -maxdepth 1 -exec basename {} \; | awk '{ printf "%s%s", sep, "\""$0"\"", sep=", "}') + echo "apptainer_configs=$apptainer_configs" >> "$GITHUB_OUTPUT" + popd + + pushd vagrant/current + vagrant_configs=$(find . -type d -mindepth 1 -maxdepth 1 -exec basename {} \; | awk '{ printf "%s%s", sep, "\""$0"\"", sep=", "}') + echo "vagrant_configs=$vagrant_configs" >> "$GITHUB_OUTPUT" + popd + + portability-tests-apptainer: + runs-on: ubuntu-latest + needs: define-portability-test-configs + strategy: + fail-fast: false + matrix: + apptainer_config: ${{ fromJSON(needs.define-portability-test-configs.outputs.apptainer_configs) }} + with_llvm: ["llvm", "nollvm"] + steps: + - name: install Apptainer + run: | + sudo apt update && sudo apt install -y \ + apptainer + - name: print Apptainer version + run: | + apptainer --version + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + persist-credentials: false + - name: test Apptainer config ${{ matrix.apptainer_config }} + run: | + distro_name=${{ matrix.apptainer_config }} + with_llvm=${{ matrix.with_llvm }} + + nollvm="" + if [[ "$with_llvm" == "nollvm" ]]; then + nollvm="-nollvm" + fi + export APPTAINER_IMAGE="$distro_name$nollvm" + + cd ./util/devel/test/portability/apptainer + + ./chapel-quickstart-fresh.sh + # Default config requires LLVM, so only run when nollvm is not set + if [ -z "$nollvm" ]; then + ./chapel-default-fresh.sh + fi + run-shellcheck: runs-on: ubuntu-slim steps: @@ -805,6 +871,7 @@ jobs: - check_large_files - check-release-files - publish-docs + - portability-tests-apptainer - run-shellcheck - check-format - test_chpl_language_server_chplcheck From 5796b8ce5d89bce24e92f38d134c2b81cddd0ec3 Mon Sep 17 00:00:00 2001 From: Anna Rift Date: Wed, 29 Jul 2026 11:26:59 -0700 Subject: [PATCH 02/14] Refactor config setting Signed-off-by: Anna Rift --- .github/workflows/CI.yml | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 89289d88fa6c..cfa1d3e101ab 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -454,7 +454,20 @@ jobs: matrix: apptainer_config: ${{ fromJSON(needs.define-portability-test-configs.outputs.apptainer_configs) }} with_llvm: ["llvm", "nollvm"] + env: + apptainer_config: ${{ matrix.apptainer_config }} + with_llvm: ${{ matrix.with_llvm }} steps: + - name: determine Apptainer config to run + run: | + nollvm="" + if [[ "$with_llvm" == "nollvm" ]]; then + nollvm="-nollvm" + fi + { + echo "nollvm=$nollvm" + echo "APPTAINER_IMAGE="$distro_name$nollvm" + } >> "$GITHUB_ENV" - name: install Apptainer run: | sudo apt update && sudo apt install -y \ @@ -465,17 +478,8 @@ jobs: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: persist-credentials: false - - name: test Apptainer config ${{ matrix.apptainer_config }} + - name: test Apptainer config ${{ env.APPTAINER_IMAGE }} run: | - distro_name=${{ matrix.apptainer_config }} - with_llvm=${{ matrix.with_llvm }} - - nollvm="" - if [[ "$with_llvm" == "nollvm" ]]; then - nollvm="-nollvm" - fi - export APPTAINER_IMAGE="$distro_name$nollvm" - cd ./util/devel/test/portability/apptainer ./chapel-quickstart-fresh.sh From 58627891e9d85194f3b9fad629d843f2cc75cb6c Mon Sep 17 00:00:00 2001 From: Anna Rift Date: Wed, 29 Jul 2026 11:29:32 -0700 Subject: [PATCH 03/14] Fix extra double quote Signed-off-by: Anna Rift --- .github/workflows/CI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index cfa1d3e101ab..9446f5dcfe8d 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -466,7 +466,7 @@ jobs: fi { echo "nollvm=$nollvm" - echo "APPTAINER_IMAGE="$distro_name$nollvm" + echo "APPTAINER_IMAGE=$distro_name$nollvm" } >> "$GITHUB_ENV" - name: install Apptainer run: | From 40067cb1d9175c0f1e376995dccfd7c09fa2a910 Mon Sep 17 00:00:00 2001 From: Anna Rift Date: Wed, 29 Jul 2026 11:31:56 -0700 Subject: [PATCH 04/14] Put missing square braces on JSON array Signed-off-by: Anna Rift --- .github/workflows/CI.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 9446f5dcfe8d..c57c893356c1 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -438,12 +438,12 @@ jobs: pushd apptainer/current apptainer_configs=$(find . -type d -mindepth 1 -maxdepth 1 -exec basename {} \; | awk '{ printf "%s%s", sep, "\""$0"\"", sep=", "}') - echo "apptainer_configs=$apptainer_configs" >> "$GITHUB_OUTPUT" + echo "apptainer_configs=[$apptainer_configs]" >> "$GITHUB_OUTPUT" popd pushd vagrant/current vagrant_configs=$(find . -type d -mindepth 1 -maxdepth 1 -exec basename {} \; | awk '{ printf "%s%s", sep, "\""$0"\"", sep=", "}') - echo "vagrant_configs=$vagrant_configs" >> "$GITHUB_OUTPUT" + echo "vagrant_configs=[$vagrant_configs]" >> "$GITHUB_OUTPUT" popd portability-tests-apptainer: From 16b079dd9b248d10356277363779610d6903c45e Mon Sep 17 00:00:00 2001 From: Anna Rift Date: Wed, 29 Jul 2026 11:33:18 -0700 Subject: [PATCH 05/14] Fix variable name Signed-off-by: Anna Rift --- .github/workflows/CI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index c57c893356c1..da2c194c537c 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -466,7 +466,7 @@ jobs: fi { echo "nollvm=$nollvm" - echo "APPTAINER_IMAGE=$distro_name$nollvm" + echo "APPTAINER_IMAGE=$apptainer_config$nollvm" } >> "$GITHUB_ENV" - name: install Apptainer run: | From bd04335bb5274a206e81c312ebad349883713611 Mon Sep 17 00:00:00 2001 From: Anna Rift Date: Wed, 29 Jul 2026 11:36:52 -0700 Subject: [PATCH 06/14] Remove nollvm axis Signed-off-by: Anna Rift --- .github/workflows/CI.yml | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index da2c194c537c..8aa753465937 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -453,21 +453,9 @@ jobs: fail-fast: false matrix: apptainer_config: ${{ fromJSON(needs.define-portability-test-configs.outputs.apptainer_configs) }} - with_llvm: ["llvm", "nollvm"] env: apptainer_config: ${{ matrix.apptainer_config }} - with_llvm: ${{ matrix.with_llvm }} steps: - - name: determine Apptainer config to run - run: | - nollvm="" - if [[ "$with_llvm" == "nollvm" ]]; then - nollvm="-nollvm" - fi - { - echo "nollvm=$nollvm" - echo "APPTAINER_IMAGE=$apptainer_config$nollvm" - } >> "$GITHUB_ENV" - name: install Apptainer run: | sudo apt update && sudo apt install -y \ @@ -482,9 +470,11 @@ jobs: run: | cd ./util/devel/test/portability/apptainer + export APPTAINER_IMAGE=$apptainer_config + ./chapel-quickstart-fresh.sh - # Default config requires LLVM, so only run when nollvm is not set - if [ -z "$nollvm" ]; then + # Default config requires LLVM + if [[ "$APPTAINER_IMAGE" != *"nollvm" ]]; then ./chapel-default-fresh.sh fi From c87047ce8133f3313c88a3ea51c039ad73b098c9 Mon Sep 17 00:00:00 2001 From: Anna Rift Date: Wed, 29 Jul 2026 11:37:25 -0700 Subject: [PATCH 07/14] Fix apptainer install steps Signed-off-by: Anna Rift --- .github/workflows/CI.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 8aa753465937..906bd52f889d 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -458,8 +458,9 @@ jobs: steps: - name: install Apptainer run: | - sudo apt update && sudo apt install -y \ - apptainer + sudo add-apt-repository -y ppa:apptainer/ppa + sudo apt update + sudo apt install -y apptainer - name: print Apptainer version run: | apptainer --version From e972ffed7e4cf07f5877b34c55814629c1cb1db1 Mon Sep 17 00:00:00 2001 From: Anna Rift Date: Wed, 29 Jul 2026 11:40:36 -0700 Subject: [PATCH 08/14] Set MAKEJ var Signed-off-by: Anna Rift --- .github/workflows/CI.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 906bd52f889d..f960f8814f53 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -472,6 +472,7 @@ jobs: cd ./util/devel/test/portability/apptainer export APPTAINER_IMAGE=$apptainer_config + export MAKEJ=$(./util/buildRelease/chpl-make-cpu_count) ./chapel-quickstart-fresh.sh # Default config requires LLVM From 573b547a94de7c94ac8ce854196c42cccd3e5681 Mon Sep 17 00:00:00 2001 From: Anna Rift Date: Wed, 29 Jul 2026 11:46:20 -0700 Subject: [PATCH 09/14] Adjust to test off of current repo and ref Signed-off-by: Anna Rift --- .github/workflows/CI.yml | 6 ++++++ .../test/portability/provision-scripts/chapel-update.sh | 5 +++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index f960f8814f53..31ae880ff001 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -467,6 +467,12 @@ jobs: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: persist-credentials: false + - name: set vars to work from correct branch + run: | + { + echo "CHPL_HOME_REPOSITORY=$PWD" + echo "CHPL_GEN_RELEASE_COMMIT=${{ github.sha }}" + } >> "$GITHUB_ENV" - name: test Apptainer config ${{ env.APPTAINER_IMAGE }} run: | cd ./util/devel/test/portability/apptainer diff --git a/util/devel/test/portability/provision-scripts/chapel-update.sh b/util/devel/test/portability/provision-scripts/chapel-update.sh index d9f053f7b586..3b1d7a5f1380 100755 --- a/util/devel/test/portability/provision-scripts/chapel-update.sh +++ b/util/devel/test/portability/provision-scripts/chapel-update.sh @@ -8,8 +8,9 @@ do echo chapel directory already exists - updating cd chapel && git checkout main && git pull --ff-only && cd .. && echo UPDATED else - echo cloning chapel - git clone --reference-if-able "${REPO_CACHE_PATH:-/missing}/chapel.git" --depth 1 https://github.com/chapel-lang/chapel && echo CLONED + ref="${CHPL_GEN_RELEASE_COMMIT:-HEAD}" + echo "cloning chapel and checking out ref $ref" + git clone --reference-if-able "${REPO_CACHE_PATH:-/missing}/chapel.git" --depth 1 "${CHPL_HOME_REPOSITORY:-https://github.com/chapel-lang/chapel}" && git reset --hard "$ref" && echo CLONED fi if [ $? -eq 0 ] From 59bdaa8c06f610e615b0bda939345ae9f21dc255 Mon Sep 17 00:00:00 2001 From: Anna Rift Date: Wed, 29 Jul 2026 11:46:56 -0700 Subject: [PATCH 10/14] Declare and assign MAKEJ separately Signed-off-by: Anna Rift --- .github/workflows/CI.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 31ae880ff001..98f6bd7bc549 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -478,7 +478,8 @@ jobs: cd ./util/devel/test/portability/apptainer export APPTAINER_IMAGE=$apptainer_config - export MAKEJ=$(./util/buildRelease/chpl-make-cpu_count) + MAKEJ=$(./util/buildRelease/chpl-make-cpu_count) + export MAKEJ ./chapel-quickstart-fresh.sh # Default config requires LLVM From 06525a50e57f05b62c01e1048b1bf483a93e12ea Mon Sep 17 00:00:00 2001 From: Anna Rift Date: Wed, 29 Jul 2026 11:49:50 -0700 Subject: [PATCH 11/14] Set MAKEJ before moving to apptainer dir Signed-off-by: Anna Rift --- .github/workflows/CI.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 98f6bd7bc549..cd6046df2f8f 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -475,12 +475,12 @@ jobs: } >> "$GITHUB_ENV" - name: test Apptainer config ${{ env.APPTAINER_IMAGE }} run: | - cd ./util/devel/test/portability/apptainer - export APPTAINER_IMAGE=$apptainer_config MAKEJ=$(./util/buildRelease/chpl-make-cpu_count) export MAKEJ + cd ./util/devel/test/portability/apptainer + ./chapel-quickstart-fresh.sh # Default config requires LLVM if [[ "$APPTAINER_IMAGE" != *"nollvm" ]]; then From 52a3aa58e43c1ea73e893ea5b716fa836f50c324 Mon Sep 17 00:00:00 2001 From: Anna Rift Date: Wed, 29 Jul 2026 11:53:06 -0700 Subject: [PATCH 12/14] Fix MAKEJ flag var Signed-off-by: Anna Rift --- .github/workflows/CI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index cd6046df2f8f..c0f644d22790 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -476,7 +476,7 @@ jobs: - name: test Apptainer config ${{ env.APPTAINER_IMAGE }} run: | export APPTAINER_IMAGE=$apptainer_config - MAKEJ=$(./util/buildRelease/chpl-make-cpu_count) + MAKEJ="-j$(./util/buildRelease/chpl-make-cpu_count)" export MAKEJ cd ./util/devel/test/portability/apptainer From a5cdf56d2217dabb86a1d59a41aeb37016851268 Mon Sep 17 00:00:00 2001 From: Anna Rift Date: Wed, 29 Jul 2026 13:09:40 -0700 Subject: [PATCH 13/14] Use more generic git repo and ref var names Signed-off-by: Anna Rift --- .github/workflows/CI.yml | 4 ++-- .../devel/test/portability/provision-scripts/chapel-update.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index c0f644d22790..5aad92a5bd59 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -470,8 +470,8 @@ jobs: - name: set vars to work from correct branch run: | { - echo "CHPL_HOME_REPOSITORY=$PWD" - echo "CHPL_GEN_RELEASE_COMMIT=${{ github.sha }}" + echo "GIT_REPO_URL=$PWD" + echo "GIT_COMMIT=${{ github.sha }}" } >> "$GITHUB_ENV" - name: test Apptainer config ${{ env.APPTAINER_IMAGE }} run: | diff --git a/util/devel/test/portability/provision-scripts/chapel-update.sh b/util/devel/test/portability/provision-scripts/chapel-update.sh index 3b1d7a5f1380..339eb13abc5e 100755 --- a/util/devel/test/portability/provision-scripts/chapel-update.sh +++ b/util/devel/test/portability/provision-scripts/chapel-update.sh @@ -8,9 +8,9 @@ do echo chapel directory already exists - updating cd chapel && git checkout main && git pull --ff-only && cd .. && echo UPDATED else - ref="${CHPL_GEN_RELEASE_COMMIT:-HEAD}" + ref="${GIT_COMMIT:-HEAD}" echo "cloning chapel and checking out ref $ref" - git clone --reference-if-able "${REPO_CACHE_PATH:-/missing}/chapel.git" --depth 1 "${CHPL_HOME_REPOSITORY:-https://github.com/chapel-lang/chapel}" && git reset --hard "$ref" && echo CLONED + git clone --reference-if-able "${REPO_CACHE_PATH:-/missing}/chapel.git" --depth 1 "${GIT_REPO_URL:-https://github.com/chapel-lang/chapel}" && git reset --hard "$ref" && echo CLONED fi if [ $? -eq 0 ] From 30c54182c654a3318da7604c8362b8d463a8020f Mon Sep 17 00:00:00 2001 From: Anna Rift Date: Wed, 29 Jul 2026 14:23:30 -0700 Subject: [PATCH 14/14] Make this an 'extended' check Signed-off-by: Anna Rift --- .github/workflows/CI.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index b552bf7c9ae1..cebf29d3a007 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -463,8 +463,11 @@ jobs: popd portability-tests-apptainer: + needs: + - should-run-extended-checks + - define-portability-test-configs + if: needs.should-run-extended-checks.outputs.run-all == 'true' runs-on: ubuntu-latest - needs: define-portability-test-configs strategy: fail-fast: false matrix: