diff --git a/.github/workflows/eessi_targets.toml b/.github/workflows/eessi_targets.toml new file mode 100644 index 0000000000..a328646738 --- /dev/null +++ b/.github/workflows/eessi_targets.toml @@ -0,0 +1,182 @@ +# Supported targets per EESSI version, shared by the CI workflows and scripts. +# +# cpu_targets: should correspond with the table @ https://eessi.io/docs/software_layer/cpu_targets/ +# Per EESSI version, the CPU targets for each CPU family. +# accelerator_targets: should correspond with the table @ https://eessi.io/docs/software_layer/gpu_targets/ +# Per EESSI version, the accelerator targets to build for. 'default' applies to every CPU target, +# unless a CPU target has an entry of its own (which may be empty, i.e. no accelerators). + +[cpu_targets."2023.06"] +aarch64 = [ + "aarch64/a64fx", + "aarch64/generic", + "aarch64/neoverse_n1", + "aarch64/neoverse_v1", + "aarch64/nvidia/grace", +] +x86_64 = [ + "x86_64/amd/zen2", + "x86_64/amd/zen3", + "x86_64/amd/zen4", + "x86_64/generic", + "x86_64/intel/cascadelake", + "x86_64/intel/haswell", + "x86_64/intel/icelake", + "x86_64/intel/sapphirerapids", + "x86_64/intel/skylake_avx512", +] + +[cpu_targets."2025.06"] +aarch64 = [ + "aarch64/a64fx", + "aarch64/generic", + "aarch64/neoverse_n1", + "aarch64/neoverse_v1", + "aarch64/nvidia/grace", +] +x86_64 = [ + "x86_64/amd/zen2", + "x86_64/amd/zen3", + "x86_64/amd/zen4", + "x86_64/amd/zen5", + "x86_64/generic", + "x86_64/intel/cascadelake", + "x86_64/intel/haswell", + "x86_64/intel/icelake", + "x86_64/intel/sapphirerapids", + "x86_64/intel/skylake_avx512", +] + +[cpu_targets."2026.06"] +aarch64 = [ + "aarch64/a64fx", + "aarch64/aws/graviton4", + "aarch64/generic", + "aarch64/neoverse_n1", + "aarch64/neoverse_v1", + "aarch64/nvidia/grace", +] +x86_64 = [ + "x86_64/amd/zen2", + "x86_64/amd/zen3", + "x86_64/amd/zen4", + "x86_64/amd/zen5", + "x86_64/generic", + "x86_64/intel/cascadelake", + "x86_64/intel/graniterapids", + "x86_64/intel/haswell", + "x86_64/intel/icelake", + "x86_64/intel/sapphirerapids", + "x86_64/intel/skylake_avx512", +] + +[accelerator_targets."2023.06"] +# Provide a default set of compute capabilities +default = [ + "nvidia/cc70", + "nvidia/cc80", + "nvidia/cc90", +] +# and then allow for special cases for specific CPU targets +"aarch64/a64fx" = [] +"x86_64/amd/zen2" = [ + "nvidia/cc70", + "nvidia/cc80", + "nvidia/cc90", +] + +[accelerator_targets."2025.06"] +# Provide a default set of compute capabilities +default = [ + "amd/gfx1030", + "amd/gfx1100", + "amd/gfx1101", + "amd/gfx1200", + "amd/gfx1201", + "amd/gfx908", + "amd/gfx90a", + "amd/gfx942", + "nvidia/cc100", + "nvidia/cc120", + "nvidia/cc70", + "nvidia/cc80", + "nvidia/cc90", +] +# and then allow for special cases for specific CPU targets +"aarch64/a64fx" = [] +"aarch64/generic" = [ + "nvidia/cc100", + "nvidia/cc120", + "nvidia/cc70", + "nvidia/cc80", + "nvidia/cc90", +] +"aarch64/neoverse_n1" = [ + "nvidia/cc100", + "nvidia/cc120", + "nvidia/cc70", + "nvidia/cc80", + "nvidia/cc90", +] +"aarch64/neoverse_v1" = [ + "nvidia/cc100", + "nvidia/cc120", + "nvidia/cc70", + "nvidia/cc80", + "nvidia/cc90", +] +"aarch64/nvidia/grace" = [ + "nvidia/cc100", + "nvidia/cc120", + "nvidia/cc70", + "nvidia/cc80", + "nvidia/cc90", +] + +[accelerator_targets."2026.06"] +# Provide a default set of compute capabilities +default = [ + "amd/gfx1030", + "amd/gfx1100", + "amd/gfx1101", + "amd/gfx1200", + "amd/gfx1201", + "amd/gfx908", + "amd/gfx90a", + "amd/gfx942", + "nvidia/cc100", + "nvidia/cc120", + "nvidia/cc75", + "nvidia/cc80", + "nvidia/cc90", +] +# and then allow for special cases for specific CPU targets +"aarch64/a64fx" = [] +"aarch64/generic" = [ + "nvidia/cc100", + "nvidia/cc120", + "nvidia/cc75", + "nvidia/cc80", + "nvidia/cc90", +] +"aarch64/neoverse_n1" = [ + "nvidia/cc100", + "nvidia/cc120", + "nvidia/cc75", + "nvidia/cc80", + "nvidia/cc90", +] +"aarch64/neoverse_v1" = [ + "nvidia/cc100", + "nvidia/cc120", + "nvidia/cc75", + "nvidia/cc80", + "nvidia/cc90", +] +"aarch64/nvidia/grace" = [ + "nvidia/cc100", + "nvidia/cc120", + "nvidia/cc75", + "nvidia/cc80", + "nvidia/cc90", +] diff --git a/.github/workflows/test-software.eessi.io.yml b/.github/workflows/test-software.eessi.io.yml index 4f0fa8ffa2..56832aeb96 100644 --- a/.github/workflows/test-software.eessi.io.yml +++ b/.github/workflows/test-software.eessi.io.yml @@ -9,162 +9,11 @@ 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 - - aarch64/a64fx - - 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 - - 2026.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/graniterapids - - 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 - - aarch64/aws/graviton4 - - # list below should correspond with table @ https://eessi.io/docs/software_layer/gpu_targets/ - EESSI_ACCELERATOR_TARGETS: | - 2023.06: - # Provide a default set of compute capabilities - default: - - nvidia/cc70 - - nvidia/cc80 - - nvidia/cc90 - # and then allow for special cases for specific architectures - x86_64/amd/zen2: - - nvidia/cc70 - - nvidia/cc80 - - nvidia/cc90 - aarch64/a64fx: [] - - 2025.06: - default: - - nvidia/cc70 - - nvidia/cc80 - - nvidia/cc90 - - nvidia/cc100 - - nvidia/cc120 - - amd/gfx908 - - amd/gfx90a - - amd/gfx942 - - amd/gfx1030 - - amd/gfx1100 - - amd/gfx1101 - - amd/gfx1200 - - amd/gfx1201 - aarch64/generic: - - nvidia/cc70 - - nvidia/cc80 - - nvidia/cc90 - - nvidia/cc100 - - nvidia/cc120 - aarch64/neoverse_n1: - - nvidia/cc70 - - nvidia/cc80 - - nvidia/cc90 - - nvidia/cc100 - - nvidia/cc120 - aarch64/neoverse_v1: - - nvidia/cc70 - - nvidia/cc80 - - nvidia/cc90 - - nvidia/cc100 - - nvidia/cc120 - aarch64/nvidia/grace: - - nvidia/cc70 - - nvidia/cc80 - - nvidia/cc90 - - nvidia/cc100 - - nvidia/cc120 - aarch64/a64fx: [] - - 2026.06: - default: - - nvidia/cc75 - - nvidia/cc80 - - nvidia/cc90 - - nvidia/cc100 - - nvidia/cc120 - - amd/gfx908 - - amd/gfx90a - - amd/gfx942 - - amd/gfx1030 - - amd/gfx1100 - - amd/gfx1101 - - amd/gfx1200 - - amd/gfx1201 - aarch64/generic: - - nvidia/cc75 - - nvidia/cc80 - - nvidia/cc90 - - nvidia/cc100 - - nvidia/cc120 - aarch64/neoverse_n1: - - nvidia/cc75 - - nvidia/cc80 - - nvidia/cc90 - - nvidia/cc100 - - nvidia/cc120 - aarch64/neoverse_v1: - - nvidia/cc75 - - nvidia/cc80 - - nvidia/cc90 - - nvidia/cc100 - - nvidia/cc120 - aarch64/nvidia/grace: - - nvidia/cc75 - - nvidia/cc80 - - nvidia/cc90 - - nvidia/cc100 - - nvidia/cc120 - aarch64/a64fx: [] + # Supported CPU and accelerator targets per EESSI version live in a single TOML file, so that + # other workflows/scripts can reuse them. The CPU targets should correspond with the table @ + # https://eessi.io/docs/software_layer/cpu_targets/ and the accelerator targets with the table @ + # https://eessi.io/docs/software_layer/gpu_targets/ + EESSI_TARGETS_FILE: ${{ github.workspace }}/.github/workflows/eessi_targets.toml jobs: # Checks whether this PR modifies any easystack files and, if so, # determines which EESSI versions are affected. @@ -298,7 +147,7 @@ jobs: run: | # From this extract the CPUs we need to loop over - cpu_subdirs=$(echo "${EESSI_CPU_TARGETS}" | yq ".\"${EESSI_VERSION}\".\"${EESSI_CPU_FAMILY}\" | .[]") + cpu_subdirs=$(yq -p toml -o yaml ".cpu_targets.\"${EESSI_VERSION}\".\"${EESSI_CPU_FAMILY}\" | .[]" "${EESSI_TARGETS_FILE}") if [[ -z "${cpu_subdirs}" ]]; then echo "ERROR: No CPU subdirs resolved for ${EESSI_VERSION} / ${EESSI_CPU_FAMILY}" exit 1 @@ -363,7 +212,7 @@ jobs: echo echo "now check accelerator builds for ${cpu}" - accelerators=$(echo "${EESSI_ACCELERATOR_TARGETS}" | yq ".\"${{matrix.EESSI_VERSION}}\".\"${cpu}\" // .\"${{matrix.EESSI_VERSION}}\".default | .[]") + accelerators=$(yq -p toml -o yaml ".accelerator_targets.\"${{matrix.EESSI_VERSION}}\".\"${cpu}\" // .accelerator_targets.\"${{matrix.EESSI_VERSION}}\".default | .[]" "${EESSI_TARGETS_FILE}") if [[ -z "${accelerators}" ]]; then echo "no accelerator targets defined for ${cpu}" @@ -425,6 +274,17 @@ jobs: done + # The per-CPU-target logs are only printed to the job output when a target fails (and then only + # the first failing one), so always keep them as an artifact, also for successful runs + - name: Upload per-CPU-target logs + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: missing-installations-logs-${{ matrix.EESSI_VERSION }}-${{ matrix.runs_on }} + path: log_*.txt + if-no-files-found: ignore + retention-days: 4 + - name: Test check_missing_installations.sh with missing package (GCC/8.3.0) run: | # This is a general check, doesn't need to be run for every CPU, just the host is fine @@ -458,16 +318,14 @@ jobs: echo "::group::EESSI ${EESSI_VERSION} / ${EESSI_CPU_FAMILY}" # Get all CPU targets belonging to this architecture family. - CPU_TARGETS=$(echo "${EESSI_CPU_TARGETS}" \ - | yq -r ".\"${EESSI_VERSION}\".\"${EESSI_CPU_FAMILY}\"[]") + CPU_TARGETS=$(yq -p toml -o yaml ".cpu_targets.\"${EESSI_VERSION}\".\"${EESSI_CPU_FAMILY}\" | .[]" "${EESSI_TARGETS_FILE}") for COMPARISON_ARCH in ${CPU_TARGETS}; do echo "::group::Compare ${EESSI_VERSION} / ${COMPARISON_ARCH}" # Use architecture-specific accelerator targets where defined, # otherwise fall back to the default set. - ALL_ACCELERATOR_TARGETS=$(echo "${EESSI_ACCELERATOR_TARGETS}" \ - | yq ".\"${{ matrix.EESSI_VERSION }}\".\"${COMPARISON_ARCH}\" // .\"${{ matrix.EESSI_VERSION }}\".default | .[]" \ + ALL_ACCELERATOR_TARGETS=$(yq -p toml -o yaml ".accelerator_targets.\"${{ matrix.EESSI_VERSION }}\".\"${COMPARISON_ARCH}\" // .accelerator_targets.\"${{ matrix.EESSI_VERSION }}\".default | .[]" "${EESSI_TARGETS_FILE}" \ | tr '\n' ' ') echo "COMPARISON_ARCH=${COMPARISON_ARCH}"