Add new top level toolchain for 2026.06 #1345
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # documentation: https://help.github.com/en/articles/workflow-syntax-for-github-actions | |
| name: Run checks on EasyBuild hooks script | |
| on: | |
| push: | |
| pull_request: | |
| workflow_dispatch: | |
| permissions: | |
| contents: read # to fetch code (actions/checkout) | |
| jobs: | |
| check_eb_hooks_uptodate: | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| matrix: | |
| EESSI_VERSION: | |
| - '2023.06' | |
| - '2025.06' | |
| 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: Mount EESSI CernVM-FS repository | |
| uses: eessi/github-action-eessi@v3 | |
| with: | |
| eessi_stack_version: ${{matrix.EESSI_VERSION}} | |
| use_eessi_module: true | |
| - name: Check whether eb_hooks.py script is up-to-date | |
| if: ${{ github.event_name == 'pull_request' }} | |
| run: | | |
| FILE="eb_hooks.py" | |
| TEMP_FILE="$(mktemp)" | |
| # Fetch base branch | |
| git fetch origin ${{ github.base_ref }} | |
| # Check if the hooks has changed in the PR | |
| if git diff --name-only origin/${{ github.base_ref }}...HEAD | grep -q "^$FILE$"; then | |
| echo "Hooks changed in PR. Using PR version." | |
| cp "$FILE" "$TEMP_FILE" | |
| else | |
| echo "File not changed in PR. Using default branch version." | |
| git show origin/${{ github.base_ref }}:$FILE > "$TEMP_FILE" | |
| fi | |
| # replace <EESSI_VERSION> placeholder (as is also done in install_scripts.sh) | |
| sed -i "s/<EESSI_VERSION>/${{matrix.EESSI_VERSION}}/g" "${TEMP_FILE}" | |
| # Compare the hooks to what is shipped in the repository | |
| module load EESSI-extend | |
| diff "$TEMP_FILE" "$EASYBUILD_HOOKS" | |
| check_eb_hooks_functionality: | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| matrix: | |
| EESSI_VERSION: | |
| - '2023.06' | |
| - '2025.06' | |
| include: | |
| # For each EESSI version we need to test different modules | |
| - EESSI_VERSION: '2023.06' | |
| COMPATIBLE_EASYCONFIG: 'M4-1.4.19-GCCcore-13.2.0.eb' | |
| INCOMPATIBLE_EASYCONFIG: 'M4-1.4.19-GCCcore-14.2.0.eb' | |
| # Pick a site toolchain that will allow the incompatible easyconfig | |
| # (the name will be modified when exported) | |
| SITE_TOP_LEVEL_TOOLCHAINS: '[{"name": "GCCcore", "version": "14.2.0"}]' | |
| - EESSI_VERSION: '2025.06' | |
| COMPATIBLE_EASYCONFIG: 'M4-1.4.19-GCCcore-14.2.0.eb' | |
| INCOMPATIBLE_EASYCONFIG: 'M4-1.4.19-GCCcore-13.2.0.eb' | |
| # Pick a site toolchain that will allow the incompatible easyconfig | |
| # (the name will be modified when exported) | |
| SITE_TOP_LEVEL_TOOLCHAINS: '[{"name": "GCCcore", "version": "13.2.0"}]' | |
| steps: | |
| - name: Check out software-layer repository | |
| uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
| - name: Mount EESSI CernVM-FS repository | |
| uses: eessi/github-action-eessi@v3 | |
| with: | |
| eessi_stack_version: ${{matrix.EESSI_VERSION}} | |
| use_eessi_module: true | |
| - name: Test that hook toolchain verification check works | |
| if: ${{ github.event_name == 'pull_request' }} | |
| run: | | |
| # Set up some environment variables | |
| export COMPATIBLE_EASYCONFIG=${{matrix.COMPATIBLE_EASYCONFIG}} | |
| export INCOMPATIBLE_EASYCONFIG=${{matrix.INCOMPATIBLE_EASYCONFIG}} | |
| # Load specific EESSI-extend vertsion (proxies a version check) | |
| module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild | |
| # Test an easyconfig that should work | |
| eb --hooks=$PWD/eb_hooks.py "$COMPATIBLE_EASYCONFIG" --stop fetch | |
| echo "Success for hook with easyconfig $COMPATIBLE_EASYCONFIG with EESSI/${{matrix.EESSI_VERSION}}" | |
| # Now ensure an incompatible easyconfig does not work | |
| eb --hooks=$PWD/eb_hooks.py "$INCOMPATIBLE_EASYCONFIG" --stop fetch 2>&1 1>/dev/null | grep -q "not supported in EESSI" | |
| echo "Found expected failure for hook with easyconfig $INCOMPATIBLE_EASYCONFIG and EESSI/${{matrix.EESSI_VERSION}}" | |
| # Check the override works | |
| EESSI_OVERRIDE_TOOLCHAIN_CHECK=1 eb --hooks=$PWD/eb_hooks.py "$INCOMPATIBLE_EASYCONFIG" --stop fetch | |
| echo "Hook ignored via EESSI_OVERRIDE_TOOLCHAIN_CHECK with easyconfig $INCOMPATIBLE_EASYCONFIG and EESSI/${{matrix.EESSI_VERSION}}" | |
| # Now check if we can set a site list of supported toolchains | |
| export SANITIZED_EESSI_VERSION=$(echo "${{ matrix.EESSI_VERSION }}" | sed 's/\./_/g') | |
| export EESSI_SITE_TOP_LEVEL_TOOLCHAINS_"$SANITIZED_EESSI_VERSION"='${{matrix.SITE_TOP_LEVEL_TOOLCHAINS}}' | |
| eb --hooks=$PWD/eb_hooks.py "$INCOMPATIBLE_EASYCONFIG" --stop fetch | |
| echo "Site supported toolchain from $EESSI_SITE_TOP_LEVEL_TOOLCHAINS successfully used with easyconfig $INCOMPATIBLE_EASYCONFIG and EESSI/${{matrix.EESSI_VERSION}}" | |
| # Make sure an invalid list of dicts fails | |
| export EESSI_SITE_TOP_LEVEL_TOOLCHAINS_"$SANITIZED_EESSI_VERSION"="Not a list of dicts" | |
| eb --hooks=$PWD/eb_hooks.py "$INCOMPATIBLE_EASYCONFIG" --stop fetch 2>&1 1>/dev/null | grep -q "does not contain a valid list of dictionaries" | |
| echo "Incorrect format for EESSI_SITE_TOP_LEVEL_TOOLCHAINS caught" | |
| check_inject_gpu_property: | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| matrix: | |
| # ROCm-LLVM / rocm-compilers / rompi only exist in the 2025.06 stack | |
| EESSI_VERSION: | |
| - '2025.06' | |
| steps: | |
| - name: Check out software-layer repository | |
| uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
| - name: Mount EESSI CernVM-FS repository | |
| uses: eessi/github-action-eessi@v3 | |
| with: | |
| eessi_stack_version: ${{matrix.EESSI_VERSION}} | |
| use_eessi_module: true | |
| - name: Test that inject_gpu_property tags GPU software correctly | |
| if: ${{ github.event_name == 'pull_request' }} | |
| run: | | |
| module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild | |
| echo "Running inject_gpu_property tests for EESSI/${{matrix.EESSI_VERSION}}..." | |
| # Control: a non-GPU easyconfig must not receive the gpu property | |
| eb --hooks=$PWD/eb_hooks.py --extended-dry-run M4-1.4.19-GCCcore-14.2.0.eb 2>&1 | grep -qiF 'add_property("arch","gpu")' && exit 1 | |
| echo "Non-GPU easyconfig untouched" | |
| # ROCm-LLVM as a direct dependency (rocm-compilers bundle) | |
| echo "Testing ROCm-LLVM as a direct dependency" | |
| OUT=$(eb --hooks=$PWD/eb_hooks.py --extended-dry-run rocm-compilers-19.0.0-ROCm-6.4.1.eb 2>&1) | |
| echo "$OUT" | grep -qiF 'add_property("arch","gpu")' | |
| echo "$OUT" | grep -qiF 'setenv("EESSIROCMVERSION","6.4.1")' | |
| echo "Direct ROCm-LLVM dependency detected" | |
| # rocm-compilers as the toolchain | |
| echo "Testing ROCm-LLVM in a rocm-compilers toolchain" | |
| OUT=$(eb --hooks=$PWD/eb_hooks.py --extended-dry-run rocBLAS-4.4.0-rocm-compilers-19.0.0-ROCm-6.4.1.eb 2>&1) | |
| echo "$OUT" | grep -qiF 'add_property("arch","gpu")' | |
| echo "$OUT" | grep -qiF 'setenv("EESSIROCMVERSION","6.4.1")' | |
| echo "rocm-compilers toolchain handled" | |
| # TODO: rompi test to be brought back once rompi/2025a is available in EESSI | |
| # # rompi as the toolchain (ROCm-LLVM nested inside rocm-compilers bundle) | |
| # echo "Testing ROCm-LLVM in a rompi toolchain (rocm-compilers bundle)" | |
| # # added --disable-cleanup-tmpdir to ignore irrelevant EasyBuild cleanup error | |
| # OUT=$(eb --hooks=$PWD/eb_hooks.py --extended-dry-run OSU-Micro-Benchmarks-7.5-rompi-2025a.eb 2>&1) | |
| # echo "$OUT" | grep -qiF 'add_property("arch","gpu")' | |
| # echo "$OUT" | grep -qiF 'setenv("EESSIROCMVERSION","6.4.1")' | |
| # echo "rompi toolchain handled" |