From 2cceb6e6054ba5c73413cefbf9ae8613bba57aef Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Wed, 20 May 2026 09:41:05 +0200 Subject: [PATCH 01/14] Only run missing installations check once deploy is triggered --- .github/workflows/test-software.eessi.io.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index d4f35d6dd5..6189b537d6 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -110,6 +110,7 @@ jobs: echo "EOF" >> "$GITHUB_OUTPUT" check_missing: + if: contains(github.event.pull_request.labels.*.name, 'bot:deploy') needs: check_EESSI_version_changed_files strategy: fail-fast: false @@ -230,7 +231,15 @@ jobs: cvmfs_repositories: software.eessi.io - name: Check for missing installlations - if: contains(needs.check_EESSI_version_changed_files.outputs.EESSI_VERSIONS, matrix.EESSI_VERSION) + if: > + ( + contains(github.event.pull_request.labels.*.name, 'bot:deploy') + || contains(github.event.pull_request.labels.*.name, 'force-ci-checks') + ) + && contains( + needs.check_EESSI_version_changed_files.outputs.EESSI_VERSIONS, + matrix.EESSI_VERSION + ) run: | export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${{matrix.EESSI_SOFTWARE_SUBDIR_OVERRIDE}} source /cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}}/init/bash From 0ef7040d4a599d7edc5ebcc3e92c540fe69b8c01 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Wed, 20 May 2026 17:08:30 +0200 Subject: [PATCH 02/14] Only restrict the step where we need to --- .github/workflows/test-software.eessi.io.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index 6189b537d6..b0d68484fb 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -110,7 +110,6 @@ jobs: echo "EOF" >> "$GITHUB_OUTPUT" check_missing: - if: contains(github.event.pull_request.labels.*.name, 'bot:deploy') needs: check_EESSI_version_changed_files strategy: fail-fast: false From 63c9184e83cd80dda03fdd0d99aa58c27b6c6886 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Wed, 20 May 2026 17:29:21 +0200 Subject: [PATCH 03/14] Delay the entire check until we have deploy label --- .github/workflows/test-software.eessi.io.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index b0d68484fb..a76eef0d65 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -110,6 +110,11 @@ jobs: echo "EOF" >> "$GITHUB_OUTPUT" check_missing: + if: > + ( + contains(github.event.pull_request.labels.*.name, 'bot:deploy') + || contains(github.event.pull_request.labels.*.name, 'force-ci-checks') + ) needs: check_EESSI_version_changed_files strategy: fail-fast: false @@ -231,11 +236,7 @@ jobs: - name: Check for missing installlations if: > - ( - contains(github.event.pull_request.labels.*.name, 'bot:deploy') - || contains(github.event.pull_request.labels.*.name, 'force-ci-checks') - ) - && contains( + contains( needs.check_EESSI_version_changed_files.outputs.EESSI_VERSIONS, matrix.EESSI_VERSION ) From 7191df41b12d52195f2630caa3210afd27fce792 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Mon, 25 May 2026 13:03:00 +0200 Subject: [PATCH 04/14] Reduce the matrix sizes to CPU families only --- .github/workflows/test-software.eessi.io.yml | 179 +++++++++---------- 1 file changed, 83 insertions(+), 96 deletions(-) diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index a76eef0d65..e0c57c95ce 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -8,6 +8,42 @@ on: permissions: contents: read # to fetch code (actions/checkout) env: + # list below should correspond with table @ https://eessi.io/docs/software_layer/cpu_targets/ + EESSI_CPU_TARGETS: | + 2023.06: + x86_64: + - x86_64/amd/zen2 + - x86_64/amd/zen3 + - x86_64/amd/zen4 + - x86_64/intel/haswell + - x86_64/intel/sapphirerapids + - x86_64/intel/skylake_avx512 + - x86_64/intel/icelake + - x86_64/intel/cascadelake + - x86_64/generic + aarch64: + - aarch64/generic + - aarch64/neoverse_n1 + - aarch64/neoverse_v1 + - aarch64/nvidia/grace + 2025.06: + x86_64: + - x86_64/amd/zen2 + - x86_64/amd/zen3 + - x86_64/amd/zen4 + - x86_64/amd/zen5 + - x86_64/intel/haswell + - x86_64/intel/sapphirerapids + - x86_64/intel/skylake_avx512 + - x86_64/intel/icelake + - x86_64/intel/cascadelake + - x86_64/generic + aarch64: + - aarch64/generic + - aarch64/neoverse_n1 + - aarch64/neoverse_v1 + - aarch64/nvidia/grace + - aarch64/a64fx # list below should correspond with table @ https://eessi.io/docs/software_layer/gpu_targets/ EESSI_ACCELERATOR_TARGETS: | 2023.06: @@ -123,91 +159,16 @@ jobs: # Arm CPU targets (EESSI 2023.06) - runs_on: ubuntu-24.04-arm EESSI_VERSION: 2023.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: aarch64/generic - - runs_on: ubuntu-24.04-arm - EESSI_VERSION: 2023.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: aarch64/neoverse_n1 - - runs_on: ubuntu-24.04-arm - EESSI_VERSION: 2023.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: aarch64/neoverse_v1 - - runs_on: ubuntu-24.04-arm - EESSI_VERSION: 2023.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: aarch64/nvidia/grace # Arm CPU targets (EESSI 2025.06) - runs_on: ubuntu-24.04-arm EESSI_VERSION: 2025.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: aarch64/a64fx - - runs_on: ubuntu-24.04-arm - EESSI_VERSION: 2025.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: aarch64/generic - - runs_on: ubuntu-24.04-arm - EESSI_VERSION: 2025.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: aarch64/neoverse_n1 - - runs_on: ubuntu-24.04-arm - EESSI_VERSION: 2025.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: aarch64/neoverse_v1 - - runs_on: ubuntu-24.04-arm - EESSI_VERSION: 2025.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: aarch64/nvidia/grace # x86_64 CPU targets (EESSI 2023.06) - runs_on: ubuntu-24.04 EESSI_VERSION: 2023.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: x86_64/amd/zen2 - - runs_on: ubuntu-24.04 - EESSI_VERSION: 2023.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: x86_64/amd/zen3 - - runs_on: ubuntu-24.04 - EESSI_VERSION: 2023.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: x86_64/amd/zen4 - - runs_on: ubuntu-24.04 - EESSI_VERSION: 2023.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: x86_64/intel/haswell - - runs_on: ubuntu-24.04 - EESSI_VERSION: 2023.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: x86_64/intel/sapphirerapids - - runs_on: ubuntu-24.04 - EESSI_VERSION: 2023.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: x86_64/intel/skylake_avx512 - - runs_on: ubuntu-24.04 - EESSI_VERSION: 2023.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: x86_64/intel/icelake - - runs_on: ubuntu-24.04 - EESSI_VERSION: 2023.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: x86_64/intel/cascadelake - - runs_on: ubuntu-24.04 - EESSI_VERSION: 2023.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: x86_64/generic # x86_64 CPU targets (EESSI 2025.06) - runs_on: ubuntu-24.04 EESSI_VERSION: 2025.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: x86_64/amd/zen2 - - runs_on: ubuntu-24.04 - EESSI_VERSION: 2025.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: x86_64/amd/zen3 - - runs_on: ubuntu-24.04 - EESSI_VERSION: 2025.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: x86_64/amd/zen4 - - runs_on: ubuntu-24.04 - EESSI_VERSION: 2025.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: x86_64/amd/zen5 - - runs_on: ubuntu-24.04 - EESSI_VERSION: 2025.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: x86_64/intel/haswell - - runs_on: ubuntu-24.04 - EESSI_VERSION: 2025.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: x86_64/intel/sapphirerapids - - runs_on: ubuntu-24.04 - EESSI_VERSION: 2025.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: x86_64/intel/skylake_avx512 - - runs_on: ubuntu-24.04 - EESSI_VERSION: 2025.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: x86_64/intel/icelake - - runs_on: ubuntu-24.04 - EESSI_VERSION: 2025.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: x86_64/intel/cascadelake - - runs_on: ubuntu-24.04 - EESSI_VERSION: 2025.06 - EESSI_SOFTWARE_SUBDIR_OVERRIDE: x86_64/generic + runs-on: ${{ matrix.runs_on }} steps: - name: Check out software-layer repository @@ -241,18 +202,46 @@ jobs: matrix.EESSI_VERSION ) run: | - export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${{matrix.EESSI_SOFTWARE_SUBDIR_OVERRIDE}} - source /cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}}/init/bash - # set $EESSI_CPU_FAMILY to the CPU architecture that corresponds to $EESSI_SOFTWARE_SUBDIR_OVERRIDE (part before the first slash), - # to prevent issues with checks in the Easybuild configuration that use this variable - export EESSI_CPU_FAMILY=${EESSI_SOFTWARE_SUBDIR_OVERRIDE%%/*} - export EESSI_PREFIX=/cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}} - export EESSI_OS_TYPE=linux - env | grep ^EESSI | sort + # Do a basic initialisation to set up Lmod and EESSI modules + export EESSI_MODULE_STICKY=1 + source /cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}}/init/lmod/bash - # first check the CPU-only builds for this CPU target - echo "first run check_missing_installations.sh for CPU-only builds" - for easystack_file in $(EESSI_VERSION=${{matrix.EESSI_VERSION}} .github/workflows/scripts/only_latest_easystacks.sh); do + # From this extract the CPUs we need to loop over + cpu_subdirs=$(echo "${EESSI_CPU_TARGETS}" | yq ".\"${EESSI_VERSION}\".\"${EESSI_CPU_FAMILY}\" | .[]") + if [[ -z "${cpu_subdirs}" ]]; then + echo "ERROR: No CPU subdirs resolved for ${EESSI_VERSION} / ${EESSI_CPU_FAMILY}" + exit 1 + fi + + for EESSI_SOFTWARE_SUBDIR_OVERRIDE in $cpu_subdirs; do + # purge before we begin so the environment is clean (including EESSI itself) + module --force purge + # now set the CPU arch + export EESSI_SOFTWARE_SUBDIR_OVERRIDE + module load EESSI//${{matrix.EESSI_VERSION}} + echo "" + echo "---------------- CPU TARGET ----------------" + echo "$EESSI_SOFTWARE_SUBDIR_OVERRIDE" + echo "-------------------------------------------" + env | grep ^EESSI | sort + + # make sure that Lmod cache file is present for the CPU target + cache_file="${EESSI_SOFTWARE_PATH}/.lmod/cache/spiderT.lua" + if [[ -f "$cache_file" ]]; then + ls -l "$cache_file" + else + echo "ERROR: Lmod cache file is missing for CPU target" + echo "Expected file: $cache_file" + echo "This usually means:" + echo " - Lmod spider cache was not generated for this architecture" + echo " - module environment was not fully initialized" + echo " - CVMFS mount is incomplete or stale" + exit 1 + fi + + # first check the CPU-only builds for this CPU target + echo "first run check_missing_installations.sh for CPU-only builds" + for easystack_file in $(EESSI_VERSION=${{matrix.EESSI_VERSION}} .github/workflows/scripts/only_latest_easystacks.sh); do eb_version=$(echo ${easystack_file} | sed 's/.*eb-\([0-9.]*\).*.yml/\1/g') echo "check missing installations for ${easystack_file} with EasyBuild ${eb_version}..." module purge @@ -262,13 +251,13 @@ jobs: software-layer-scripts/check_missing_installations.sh ${easystack_file} ec=$? if [[ ${ec} -ne 0 ]]; then echo "missing installations found for ${easystack_file}!" >&2; exit ${ec}; fi - done + done - # now check the accelerator builds for this CPU target - accelerators=$(echo "${EESSI_ACCELERATOR_TARGETS}" | yq ".\"${{matrix.EESSI_VERSION}}\".\"${EESSI_SOFTWARE_SUBDIR_OVERRIDE}\" // .\"${{matrix.EESSI_VERSION}}\".default | .[]") - if [ -z "${accelerators}" ]; then + # now check the accelerator builds for this CPU target + accelerators=$(echo "${EESSI_ACCELERATOR_TARGETS}" | yq ".\"${{matrix.EESSI_VERSION}}\".\"${EESSI_SOFTWARE_SUBDIR_OVERRIDE}\" // .\"${{matrix.EESSI_VERSION}}\".default | .[]") + if [ -z "${accelerators}" ]; then echo "no accelerator targets defined for ${EESSI_SOFTWARE_SUBDIR_OVERRIDE}" - else + else for accel in ${accelerators}; do module use ${EESSI_SOFTWARE_PATH}/accel/${accel}/modules/all echo "checking missing installations for accelerator ${accel} using modulepath: ${MODULEPATH}" @@ -296,10 +285,8 @@ jobs: done module unuse ${EESSI_SOFTWARE_PATH}/accel/${accel}/modules/all done - fi - - # make sure that Lmod cache file is present - ls -l ${EESSI_SOFTWARE_PATH}/.lmod/cache/spiderT.lua + fi + done - name: Test check_missing_installations.sh with missing package (GCC/8.3.0) run: | From 8df9cd814c70d2c9317dc64823b81353d5712205 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Mon, 25 May 2026 13:11:21 +0200 Subject: [PATCH 05/14] Force missing installations cehcl --- .github/workflows/test-software.eessi.io.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index e0c57c95ce..ecf237d8df 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -196,11 +196,11 @@ jobs: cvmfs_repositories: software.eessi.io - name: Check for missing installlations - if: > - contains( - needs.check_EESSI_version_changed_files.outputs.EESSI_VERSIONS, - matrix.EESSI_VERSION - ) + # if: > + # contains( + # needs.check_EESSI_version_changed_files.outputs.EESSI_VERSIONS, + # matrix.EESSI_VERSION + # ) run: | # Do a basic initialisation to set up Lmod and EESSI modules export EESSI_MODULE_STICKY=1 From 9e5e415fb0c449b5bf2e987634af52c337cae2b8 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Mon, 25 May 2026 14:48:32 +0200 Subject: [PATCH 06/14] Try to force the CI --- .github/workflows/test-software.eessi.io.yml | 22 ++++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index ecf237d8df..ff16b89beb 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -142,15 +142,15 @@ jobs: # Use GITHUB_OUTPUT heredoc correctly echo "EESSI_VERSIONS<> "$GITHUB_OUTPUT" - echo "$EESSI_VERSIONS" >> "$GITHUB_OUTPUT" + echo "2025.06" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" check_missing: - if: > - ( - contains(github.event.pull_request.labels.*.name, 'bot:deploy') - || contains(github.event.pull_request.labels.*.name, 'force-ci-checks') - ) + #if: > + # ( + # contains(github.event.pull_request.labels.*.name, 'bot:deploy') + # || contains(github.event.pull_request.labels.*.name, 'force-ci-checks') + # ) needs: check_EESSI_version_changed_files strategy: fail-fast: false @@ -196,11 +196,11 @@ jobs: cvmfs_repositories: software.eessi.io - name: Check for missing installlations - # if: > - # contains( - # needs.check_EESSI_version_changed_files.outputs.EESSI_VERSIONS, - # matrix.EESSI_VERSION - # ) + if: > + contains( + needs.check_EESSI_version_changed_files.outputs.EESSI_VERSIONS, + matrix.EESSI_VERSION + ) run: | # Do a basic initialisation to set up Lmod and EESSI modules export EESSI_MODULE_STICKY=1 From 0264de2fdae56764bc2d4647bde960bd87c5bcd9 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Mon, 25 May 2026 15:10:01 +0200 Subject: [PATCH 07/14] Add back the trigger --- .github/workflows/test-software.eessi.io.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index ff16b89beb..5ccb68bc27 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -26,6 +26,7 @@ env: - aarch64/neoverse_n1 - aarch64/neoverse_v1 - aarch64/nvidia/grace + - aarch64/a64fx 2025.06: x86_64: - x86_64/amd/zen2 @@ -146,11 +147,11 @@ jobs: echo "EOF" >> "$GITHUB_OUTPUT" check_missing: - #if: > - # ( - # contains(github.event.pull_request.labels.*.name, 'bot:deploy') - # || contains(github.event.pull_request.labels.*.name, 'force-ci-checks') - # ) + if: > + ( + contains(github.event.pull_request.labels.*.name, 'bot:deploy') + || contains(github.event.pull_request.labels.*.name, 'force-ci-checks') + ) needs: check_EESSI_version_changed_files strategy: fail-fast: false From 42eb8f3042502a1dc0101dfda16f5544ace3eb31 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Mon, 25 May 2026 15:38:54 +0200 Subject: [PATCH 08/14] Remove the trigger again --- .github/workflows/test-software.eessi.io.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index 5ccb68bc27..fc5901a2fe 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -147,11 +147,11 @@ jobs: echo "EOF" >> "$GITHUB_OUTPUT" check_missing: - if: > - ( - contains(github.event.pull_request.labels.*.name, 'bot:deploy') - || contains(github.event.pull_request.labels.*.name, 'force-ci-checks') - ) + # if: > + # ( + # contains(github.event.pull_request.labels.*.name, 'bot:deploy') + # || contains(github.event.pull_request.labels.*.name, 'force-ci-checks') + # ) needs: check_EESSI_version_changed_files strategy: fail-fast: false From dd4ffd5eb9a8f3d653b76091979d99cdd404728c Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Mon, 25 May 2026 22:20:31 +0200 Subject: [PATCH 09/14] Make sure the workflow retriggers on the right label --- .github/workflows/test-software.eessi.io.yml | 284 ++++++++++--------- 1 file changed, 144 insertions(+), 140 deletions(-) diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index fc5901a2fe..a972967a70 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -4,6 +4,10 @@ on: push: branches: [ "main" ] pull_request: + types: + - opened + - synchronize + - labeled workflow_dispatch: permissions: contents: read # to fetch code (actions/checkout) @@ -147,11 +151,11 @@ jobs: echo "EOF" >> "$GITHUB_OUTPUT" check_missing: - # if: > - # ( - # contains(github.event.pull_request.labels.*.name, 'bot:deploy') - # || contains(github.event.pull_request.labels.*.name, 'force-ci-checks') - # ) + if: > + ( + contains(github.event.pull_request.labels.*.name, 'bot:deploy') + || contains(github.event.pull_request.labels.*.name, 'force-ci-checks') + ) needs: check_EESSI_version_changed_files strategy: fail-fast: false @@ -172,151 +176,151 @@ jobs: runs-on: ${{ matrix.runs_on }} steps: - - name: Check out software-layer repository - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - with: - fetch-depth: 0 # Fetch all history for all branches and tags + - name: Check out software-layer repository + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + fetch-depth: 0 # Fetch all history for all branches and tags - - name: Clone EESSI/software-layer-scripts repository - run: | - git clone https://github.com/EESSI/software-layer-scripts + - name: Clone EESSI/software-layer-scripts repository + run: | + git clone https://github.com/EESSI/software-layer-scripts - - name: Show host system info - run: | - echo "/proc/cpuinfo:" - cat /proc/cpuinfo - echo - echo "lscpu:" - lscpu + - name: Show host system info + run: | + echo "/proc/cpuinfo:" + cat /proc/cpuinfo + echo + echo "lscpu:" + lscpu + + - name: Mount EESSI CernVM-FS pilot repository + uses: cvmfs-contrib/github-action-cvmfs@55899ca74cf78ab874bdf47f5a804e47c198743c # v4.0 + with: + cvmfs_config_package: https://github.com/EESSI/filesystem-layer/releases/download/latest/cvmfs-config-eessi_latest_all.deb + cvmfs_http_proxy: DIRECT + cvmfs_repositories: software.eessi.io - - name: Mount EESSI CernVM-FS pilot repository - uses: cvmfs-contrib/github-action-cvmfs@55899ca74cf78ab874bdf47f5a804e47c198743c # v4.0 - with: - cvmfs_config_package: https://github.com/EESSI/filesystem-layer/releases/download/latest/cvmfs-config-eessi_latest_all.deb - cvmfs_http_proxy: DIRECT - cvmfs_repositories: software.eessi.io + - name: Check for missing installlations + if: > + contains( + needs.check_EESSI_version_changed_files.outputs.EESSI_VERSIONS, + matrix.EESSI_VERSION + ) + run: | + # Do a basic initialisation to set up Lmod and EESSI modules + export EESSI_MODULE_STICKY=1 + source /cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}}/init/lmod/bash - - name: Check for missing installlations - if: > - contains( - needs.check_EESSI_version_changed_files.outputs.EESSI_VERSIONS, - matrix.EESSI_VERSION - ) - run: | - # Do a basic initialisation to set up Lmod and EESSI modules - export EESSI_MODULE_STICKY=1 - source /cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}}/init/lmod/bash + # From this extract the CPUs we need to loop over + cpu_subdirs=$(echo "${EESSI_CPU_TARGETS}" | yq ".\"${EESSI_VERSION}\".\"${EESSI_CPU_FAMILY}\" | .[]") + if [[ -z "${cpu_subdirs}" ]]; then + echo "ERROR: No CPU subdirs resolved for ${EESSI_VERSION} / ${EESSI_CPU_FAMILY}" + exit 1 + fi - # From this extract the CPUs we need to loop over - cpu_subdirs=$(echo "${EESSI_CPU_TARGETS}" | yq ".\"${EESSI_VERSION}\".\"${EESSI_CPU_FAMILY}\" | .[]") - if [[ -z "${cpu_subdirs}" ]]; then - echo "ERROR: No CPU subdirs resolved for ${EESSI_VERSION} / ${EESSI_CPU_FAMILY}" - exit 1 - fi + for EESSI_SOFTWARE_SUBDIR_OVERRIDE in $cpu_subdirs; do + # purge before we begin so the environment is clean (including EESSI itself) + module --force purge + # now set the CPU arch + export EESSI_SOFTWARE_SUBDIR_OVERRIDE + module load EESSI//${{matrix.EESSI_VERSION}} + echo "" + echo "---------------- CPU TARGET ----------------" + echo "$EESSI_SOFTWARE_SUBDIR_OVERRIDE" + echo "-------------------------------------------" + env | grep ^EESSI | sort - for EESSI_SOFTWARE_SUBDIR_OVERRIDE in $cpu_subdirs; do - # purge before we begin so the environment is clean (including EESSI itself) - module --force purge - # now set the CPU arch - export EESSI_SOFTWARE_SUBDIR_OVERRIDE - module load EESSI//${{matrix.EESSI_VERSION}} - echo "" - echo "---------------- CPU TARGET ----------------" - echo "$EESSI_SOFTWARE_SUBDIR_OVERRIDE" - echo "-------------------------------------------" - env | grep ^EESSI | sort + # make sure that Lmod cache file is present for the CPU target + cache_file="${EESSI_SOFTWARE_PATH}/.lmod/cache/spiderT.lua" + if [[ -f "$cache_file" ]]; then + ls -l "$cache_file" + else + echo "ERROR: Lmod cache file is missing for CPU target" + echo "Expected file: $cache_file" + echo "This usually means:" + echo " - Lmod spider cache was not generated for this architecture" + echo " - module environment was not fully initialized" + echo " - CVMFS mount is incomplete or stale" + exit 1 + fi - # make sure that Lmod cache file is present for the CPU target - cache_file="${EESSI_SOFTWARE_PATH}/.lmod/cache/spiderT.lua" - if [[ -f "$cache_file" ]]; then - ls -l "$cache_file" - else - echo "ERROR: Lmod cache file is missing for CPU target" - echo "Expected file: $cache_file" - echo "This usually means:" - echo " - Lmod spider cache was not generated for this architecture" - echo " - module environment was not fully initialized" - echo " - CVMFS mount is incomplete or stale" - exit 1 - fi + # first check the CPU-only builds for this CPU target + echo "first run check_missing_installations.sh for CPU-only builds" + for easystack_file in $(EESSI_VERSION=${{matrix.EESSI_VERSION}} .github/workflows/scripts/only_latest_easystacks.sh); do + eb_version=$(echo ${easystack_file} | sed 's/.*eb-\([0-9.]*\).*.yml/\1/g') + echo "check missing installations for ${easystack_file} with EasyBuild ${eb_version}..." + module purge + module load EasyBuild/${eb_version} + which eb + eb --version + software-layer-scripts/check_missing_installations.sh ${easystack_file} + ec=$? + if [[ ${ec} -ne 0 ]]; then echo "missing installations found for ${easystack_file}!" >&2; exit ${ec}; fi + done - # first check the CPU-only builds for this CPU target - echo "first run check_missing_installations.sh for CPU-only builds" - for easystack_file in $(EESSI_VERSION=${{matrix.EESSI_VERSION}} .github/workflows/scripts/only_latest_easystacks.sh); do - eb_version=$(echo ${easystack_file} | sed 's/.*eb-\([0-9.]*\).*.yml/\1/g') - echo "check missing installations for ${easystack_file} with EasyBuild ${eb_version}..." - module purge - module load EasyBuild/${eb_version} - which eb - eb --version - software-layer-scripts/check_missing_installations.sh ${easystack_file} - ec=$? - if [[ ${ec} -ne 0 ]]; then echo "missing installations found for ${easystack_file}!" >&2; exit ${ec}; fi + # now check the accelerator builds for this CPU target + accelerators=$(echo "${EESSI_ACCELERATOR_TARGETS}" | yq ".\"${{matrix.EESSI_VERSION}}\".\"${EESSI_SOFTWARE_SUBDIR_OVERRIDE}\" // .\"${{matrix.EESSI_VERSION}}\".default | .[]") + if [ -z "${accelerators}" ]; then + echo "no accelerator targets defined for ${EESSI_SOFTWARE_SUBDIR_OVERRIDE}" + else + for accel in ${accelerators}; do + module use ${EESSI_SOFTWARE_PATH}/accel/${accel}/modules/all + echo "checking missing installations for accelerator ${accel} using modulepath: ${MODULEPATH}" + for easystack_file in $(EESSI_VERSION=${{matrix.EESSI_VERSION}} ACCEL_EASYSTACKS=1 .github/workflows/scripts/only_latest_easystacks.sh); do + # Check that the vendor of the accelerator ($accel) matches the vendor name in the easystack filepath + # Only then, do the missing install check + # This avoids e.g. that we're checking for missing AMD GPU installations in an NVIDIA GPU prefix + vendor="${accel%%/*}" # Remove everything after the first / + echo "Checking if easystack file '${easystack_file}' contains '*accel/${vendor}*'" + if [[ "${easystack_file}" == *"accel/${vendor}"* ]]; then + eb_version=$(echo ${easystack_file} | sed 's/.*eb-\([0-9.]*\).*.yml/\1/g') + echo "check missing installations for ${easystack_file} with EasyBuild ${eb_version}..." + module purge + module load EasyBuild/${eb_version} + which eb + eb --version + software-layer-scripts/check_missing_installations.sh ${easystack_file} + ec=$? + if [[ ${ec} -ne 0 ]]; then echo "missing installations found for ${easystack_file}!" >&2; exit ${ec}; fi + else + msg="Not checking easystack file '${easystack_file}', for accelerator target ${accel}:" + msg="${msg} this easystack file targets a different vendor" + echo "${msg}" + fi done - - # now check the accelerator builds for this CPU target - accelerators=$(echo "${EESSI_ACCELERATOR_TARGETS}" | yq ".\"${{matrix.EESSI_VERSION}}\".\"${EESSI_SOFTWARE_SUBDIR_OVERRIDE}\" // .\"${{matrix.EESSI_VERSION}}\".default | .[]") - if [ -z "${accelerators}" ]; then - echo "no accelerator targets defined for ${EESSI_SOFTWARE_SUBDIR_OVERRIDE}" - else - for accel in ${accelerators}; do - module use ${EESSI_SOFTWARE_PATH}/accel/${accel}/modules/all - echo "checking missing installations for accelerator ${accel} using modulepath: ${MODULEPATH}" - for easystack_file in $(EESSI_VERSION=${{matrix.EESSI_VERSION}} ACCEL_EASYSTACKS=1 .github/workflows/scripts/only_latest_easystacks.sh); do - # Check that the vendor of the accelerator ($accel) matches the vendor name in the easystack filepath - # Only then, do the missing install check - # This avoids e.g. that we're checking for missing AMD GPU installations in an NVIDIA GPU prefix - vendor="${accel%%/*}" # Remove everything after the first / - echo "Checking if easystack file '${easystack_file}' contains '*accel/${vendor}*'" - if [[ "${easystack_file}" == *"accel/${vendor}"* ]]; then - eb_version=$(echo ${easystack_file} | sed 's/.*eb-\([0-9.]*\).*.yml/\1/g') - echo "check missing installations for ${easystack_file} with EasyBuild ${eb_version}..." - module purge - module load EasyBuild/${eb_version} - which eb - eb --version - software-layer-scripts/check_missing_installations.sh ${easystack_file} - ec=$? - if [[ ${ec} -ne 0 ]]; then echo "missing installations found for ${easystack_file}!" >&2; exit ${ec}; fi - else - msg="Not checking easystack file '${easystack_file}', for accelerator target ${accel}:" - msg="${msg} this easystack file targets a different vendor" - echo "${msg}" - fi - done - module unuse ${EESSI_SOFTWARE_PATH}/accel/${accel}/modules/all - done - fi + module unuse ${EESSI_SOFTWARE_PATH}/accel/${accel}/modules/all done + fi + done - name: Test check_missing_installations.sh with missing package (GCC/8.3.0) run: | - export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${{matrix.EESSI_SOFTWARE_SUBDIR_OVERRIDE}} - source /cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}}/init/bash - # set $EESSI_CPU_FAMILY to the CPU architecture that corresponds to $EESSI_SOFTWARE_SUBDIR_OVERRIDE (part before the first slash), - # to prevent issues with checks in the Easybuild configuration that use this variable - export EESSI_CPU_FAMILY=${EESSI_SOFTWARE_SUBDIR_OVERRIDE%%/*} - module load EasyBuild - which eb - eb --version - export EESSI_PREFIX=/cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}} - export EESSI_OS_TYPE=linux - env | grep ^EESSI | sort - # create dummy easystack file with a single entry (something that is not installed in EESSI) - easystack_file="test.yml" - echo "easyconfigs:" > ${easystack_file} - echo " - GCC-8.3.0:" >> ${easystack_file} - echo "created easystack file '${easystack_file}' with a missing installation (GCC/8.3.0):" - cat ${easystack_file} - # note, check_missing_installations.sh exits 1 if a package was - # missing, which is intepreted as false (exit code based, not - # boolean logic), hence when the script exits 0 if no package was - # missing it is interpreted as true, thus the test did not capture - # the missing package - if software-layer-scripts/check_missing_installations.sh ${easystack_file}; then - echo "did NOT capture missing package; test FAILED" - exit 1 - else - echo "captured missing package; test PASSED" - exit 0 - fi + export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${{matrix.EESSI_SOFTWARE_SUBDIR_OVERRIDE}} + source /cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}}/init/bash + # set $EESSI_CPU_FAMILY to the CPU architecture that corresponds to $EESSI_SOFTWARE_SUBDIR_OVERRIDE (part before the first slash), + # to prevent issues with checks in the Easybuild configuration that use this variable + export EESSI_CPU_FAMILY=${EESSI_SOFTWARE_SUBDIR_OVERRIDE%%/*} + module load EasyBuild + which eb + eb --version + export EESSI_PREFIX=/cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}} + export EESSI_OS_TYPE=linux + env | grep ^EESSI | sort + # create dummy easystack file with a single entry (something that is not installed in EESSI) + easystack_file="test.yml" + echo "easyconfigs:" > ${easystack_file} + echo " - GCC-8.3.0:" >> ${easystack_file} + echo "created easystack file '${easystack_file}' with a missing installation (GCC/8.3.0):" + cat ${easystack_file} + # note, check_missing_installations.sh exits 1 if a package was + # missing, which is intepreted as false (exit code based, not + # boolean logic), hence when the script exits 0 if no package was + # missing it is interpreted as true, thus the test did not capture + # the missing package + if software-layer-scripts/check_missing_installations.sh ${easystack_file}; then + echo "did NOT capture missing package; test FAILED" + exit 1 + else + echo "captured missing package; test PASSED" + exit 0 + fi From daaa525bbaf97f76952bfbcdb1dc9d79b2e31c4c Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Mon, 25 May 2026 22:29:18 +0200 Subject: [PATCH 10/14] Bad indentation --- .github/workflows/test-software.eessi.io.yml | 64 ++++++++++---------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index a972967a70..67b1485916 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -200,7 +200,7 @@ jobs: cvmfs_http_proxy: DIRECT cvmfs_repositories: software.eessi.io - - name: Check for missing installlations + - name: Check for missing installations if: > contains( needs.check_EESSI_version_changed_files.outputs.EESSI_VERSIONS, @@ -293,34 +293,34 @@ jobs: fi done - - name: Test check_missing_installations.sh with missing package (GCC/8.3.0) - run: | - export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${{matrix.EESSI_SOFTWARE_SUBDIR_OVERRIDE}} - source /cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}}/init/bash - # set $EESSI_CPU_FAMILY to the CPU architecture that corresponds to $EESSI_SOFTWARE_SUBDIR_OVERRIDE (part before the first slash), - # to prevent issues with checks in the Easybuild configuration that use this variable - export EESSI_CPU_FAMILY=${EESSI_SOFTWARE_SUBDIR_OVERRIDE%%/*} - module load EasyBuild - which eb - eb --version - export EESSI_PREFIX=/cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}} - export EESSI_OS_TYPE=linux - env | grep ^EESSI | sort - # create dummy easystack file with a single entry (something that is not installed in EESSI) - easystack_file="test.yml" - echo "easyconfigs:" > ${easystack_file} - echo " - GCC-8.3.0:" >> ${easystack_file} - echo "created easystack file '${easystack_file}' with a missing installation (GCC/8.3.0):" - cat ${easystack_file} - # note, check_missing_installations.sh exits 1 if a package was - # missing, which is intepreted as false (exit code based, not - # boolean logic), hence when the script exits 0 if no package was - # missing it is interpreted as true, thus the test did not capture - # the missing package - if software-layer-scripts/check_missing_installations.sh ${easystack_file}; then - echo "did NOT capture missing package; test FAILED" - exit 1 - else - echo "captured missing package; test PASSED" - exit 0 - fi + - name: Test check_missing_installations.sh with missing package (GCC/8.3.0) + run: | + export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${{matrix.EESSI_SOFTWARE_SUBDIR_OVERRIDE}} + source /cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}}/init/bash + # set $EESSI_CPU_FAMILY to the CPU architecture that corresponds to $EESSI_SOFTWARE_SUBDIR_OVERRIDE (part before the first slash), + # to prevent issues with checks in the Easybuild configuration that use this variable + export EESSI_CPU_FAMILY=${EESSI_SOFTWARE_SUBDIR_OVERRIDE%%/*} + module load EasyBuild + which eb + eb --version + export EESSI_PREFIX=/cvmfs/software.eessi.io/versions/${{matrix.EESSI_VERSION}} + export EESSI_OS_TYPE=linux + env | grep ^EESSI | sort + # create dummy easystack file with a single entry (something that is not installed in EESSI) + easystack_file="test.yml" + echo "easyconfigs:" > ${easystack_file} + echo " - GCC-8.3.0:" >> ${easystack_file} + echo "created easystack file '${easystack_file}' with a missing installation (GCC/8.3.0):" + cat ${easystack_file} + # note, check_missing_installations.sh exits 1 if a package was + # missing, which is intepreted as false (exit code based, not + # boolean logic), hence when the script exits 0 if no package was + # missing it is interpreted as true, thus the test did not capture + # the missing package + if software-layer-scripts/check_missing_installations.sh ${easystack_file}; then + echo "did NOT capture missing package; test FAILED" + exit 1 + else + echo "captured missing package; test PASSED" + exit 0 + fi From 1e483c4484de8078ea0845e4d4d6ba35c926a750 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Tue, 26 May 2026 16:24:46 +0200 Subject: [PATCH 11/14] Add parallelism over CPUs --- .github/workflows/test-software.eessi.io.yml | 178 +++++++++++-------- 1 file changed, 107 insertions(+), 71 deletions(-) diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index 67b1485916..0e6e9d7a8f 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -218,79 +218,115 @@ jobs: exit 1 fi - for EESSI_SOFTWARE_SUBDIR_OVERRIDE in $cpu_subdirs; do - # purge before we begin so the environment is clean (including EESSI itself) - module --force purge - # now set the CPU arch - export EESSI_SOFTWARE_SUBDIR_OVERRIDE - module load EESSI//${{matrix.EESSI_VERSION}} - echo "" - echo "---------------- CPU TARGET ----------------" - echo "$EESSI_SOFTWARE_SUBDIR_OVERRIDE" - echo "-------------------------------------------" - env | grep ^EESSI | sort - - # make sure that Lmod cache file is present for the CPU target - cache_file="${EESSI_SOFTWARE_PATH}/.lmod/cache/spiderT.lua" - if [[ -f "$cache_file" ]]; then - ls -l "$cache_file" - else - echo "ERROR: Lmod cache file is missing for CPU target" - echo "Expected file: $cache_file" - echo "This usually means:" - echo " - Lmod spider cache was not generated for this architecture" - echo " - module environment was not fully initialized" - echo " - CVMFS mount is incomplete or stale" - exit 1 - fi - - # first check the CPU-only builds for this CPU target - echo "first run check_missing_installations.sh for CPU-only builds" - for easystack_file in $(EESSI_VERSION=${{matrix.EESSI_VERSION}} .github/workflows/scripts/only_latest_easystacks.sh); do - eb_version=$(echo ${easystack_file} | sed 's/.*eb-\([0-9.]*\).*.yml/\1/g') - echo "check missing installations for ${easystack_file} with EasyBuild ${eb_version}..." - module purge - module load EasyBuild/${eb_version} - which eb - eb --version - software-layer-scripts/check_missing_installations.sh ${easystack_file} - ec=$? - if [[ ${ec} -ne 0 ]]; then echo "missing installations found for ${easystack_file}!" >&2; exit ${ec}; fi - done + cpu_array=($cpu_subdirs) + + for ((i=0; i<${#cpu_array[@]}; i+=2)); do + pids=() + labels=() + logs=() + + for ((j=i; j&2; exit ${ec}; fi - else - msg="Not checking easystack file '${easystack_file}', for accelerator target ${accel}:" - msg="${msg} this easystack file targets a different vendor" - echo "${msg}" - fi + cache_file="${EESSI_SOFTWARE_PATH}/.lmod/cache/spiderT.lua" + if [[ -f "$cache_file" ]]; then + ls -l "$cache_file" + else + echo "ERROR: Lmod cache file is missing for CPU target" + echo "Expected file: $cache_file" + exit 1 + fi + + echo "first run check_missing_installations.sh for CPU-only builds" + for easystack_file in $(EESSI_VERSION=${{matrix.EESSI_VERSION}} .github/workflows/scripts/only_latest_easystacks.sh); do + eb_version=$(echo ${easystack_file} | sed 's/.*eb-\([0-9.]*\).*.yml/\1/g') + echo "checking ${easystack_file} with EasyBuild ${eb_version}..." + + module purge + module load EasyBuild/${eb_version} + + which eb + eb --version + + software-layer-scripts/check_missing_installations.sh ${easystack_file} done - module unuse ${EESSI_SOFTWARE_PATH}/accel/${accel}/modules/all - done - fi + + echo + echo "now check accelerator builds for ${cpu}" + accelerators=$(echo "${EESSI_ACCELERATOR_TARGETS}" | yq ".\"${{matrix.EESSI_VERSION}}\".\"${cpu}\" // .\"${{matrix.EESSI_VERSION}}\".default | .[]") + + if [[ -z "${accelerators}" ]]; then + echo "no accelerator targets defined for ${cpu}" + else + for accel in ${accelerators}; do + module use ${EESSI_SOFTWARE_PATH}/accel/${accel}/modules/all + + echo "checking accelerator ${accel}" + + for easystack_file in $(EESSI_VERSION=${{matrix.EESSI_VERSION}} ACCEL_EASYSTACKS=1 .github/workflows/scripts/only_latest_easystacks.sh); do + + vendor="${accel%%/*}" + + if [[ "${easystack_file}" == *"accel/${vendor}"* ]]; then + eb_version=$(echo ${easystack_file} | sed 's/.*eb-\([0-9.]*\).*.yml/\1/g') + + module purge + module load EasyBuild/${eb_version} + + which eb + eb --version + + software-layer-scripts/check_missing_installations.sh ${easystack_file} + else + echo "Skipping ${easystack_file} (vendor mismatch for ${accel})" + fi + done + + module unuse ${EESSI_SOFTWARE_PATH}/accel/${accel}/modules/all + done + fi + + ) >"$log" 2>&1 & + + pids+=($!) + labels+=("$cpu") + logs+=("$log") + done + + # wait + report results for this batch of 2 + for ((k=0; k<${#pids[@]}; k++)); do + pid="${pids[k]}" + cpu="${labels[k]}" + log="${logs[k]}" + + if ! wait "$pid"; then + echo "========================================" + echo "FAILED CPU TARGET: $cpu" + echo "LOG FILE: $log" + echo "========================================" + cat "$log" + exit 1 + else + echo "SUCCESS: $cpu" + fi + done + done - name: Test check_missing_installations.sh with missing package (GCC/8.3.0) From 6ef32d028585c5744dc5a6eee494336c27733674 Mon Sep 17 00:00:00 2001 From: Alan O'Cais Date: Tue, 26 May 2026 16:37:07 +0200 Subject: [PATCH 12/14] Make safe_cpu for log files --- .github/workflows/test-software.eessi.io.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index 0e6e9d7a8f..e4fc7c31df 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -227,7 +227,8 @@ jobs: for ((j=i; j Date: Tue, 26 May 2026 21:19:10 +0200 Subject: [PATCH 13/14] Try 3 processes and see if that gives more speedup --- .github/workflows/test-software.eessi.io.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index e4fc7c31df..5435ebd386 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -220,12 +220,12 @@ jobs: cpu_array=($cpu_subdirs) - for ((i=0; i<${#cpu_array[@]}; i+=2)); do + for ((i=0; i<${#cpu_array[@]}; i+=3)); do pids=() labels=() logs=() - for ((j=i; j Date: Tue, 26 May 2026 21:39:38 +0200 Subject: [PATCH 14/14] Revert to two processes --- .github/workflows/test-software.eessi.io.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index 5435ebd386..e4fc7c31df 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -220,12 +220,12 @@ jobs: cpu_array=($cpu_subdirs) - for ((i=0; i<${#cpu_array[@]}; i+=3)); do + for ((i=0; i<${#cpu_array[@]}; i+=2)); do pids=() labels=() logs=() - for ((j=i; j