3737 - self-hosted
3838 - ${{ matrix.runner_label }}
3939
40+ outputs :
41+ unique : ${{ steps.uniquetag.outputs.unique }}
42+
4043 strategy :
4144 fail-fast : false
4245 matrix :
5255 test_drive_cmd : " nvidia-smi"
5356 # Respect CUDA_VISIBLE_DEVICES and also hard-limit Docker to that device.
5457 # NOTE: CUDA_VISIBLE_DEVICES must be set by the runner (systemd drop-in etc.).
55- flags : >-
58+ dockerflags : >-
5659 --init --rm -t
5760 --name ${CONTAINER_BASENAME}
5861 --gpus "device=${CUDA_VISIBLE_DEVICES:-all}"
6467 base : " devitocodes/bases:amd"
6568 test_drive_cmd : " rocm-smi"
6669 # Unchanged, still passes through required /dev nodes etc.
67- flags : >-
70+ dockerflags : >-
6871 --init --network=host
6972 --device=/dev/kfd --device=/dev/dri
7073 --ipc=host
7780 - name : Checkout devito
7881 uses : actions/checkout@v6
7982
83+ - name : Generate unique CI tag
84+ id : uniquetag
85+ run : |
86+ UNIQUE=$(echo "${GITHUB_RUN_ID}_${GITHUB_RUN_ATTEMPT}" | cksum | cut -f 1 -d " ")
87+ echo "Unique ID: ${UNIQUE}"
88+ echo "unique=${UNIQUE}" >> "$GITHUB_OUTPUT"
89+
8090 - name : Set per-runner tags
91+ env :
92+ UNIQUE : ${{ steps.uniquetag.outputs.unique }}
8193 run : |
82- echo "DOCKER_IMAGE=${{ matrix.name }}-${RUNNER_NAME// /_}" >> "$GITHUB_ENV"
94+ echo "DOCKER_IMAGE=${{ matrix.name }}-${RUNNER_NAME// /_}-${UNIQUE} " >> "$GITHUB_ENV"
8395 echo "CONTAINER_BASENAME=testrun-${{ matrix.name }}-${RUNNER_NAME// /_}-${{ github.sha }}" >> "$GITHUB_ENV"
8496
8597 - name : Ensure buildx builder
@@ -112,7 +124,7 @@ jobs:
112124
113125 # Run a simple driver-probe command (nvidia-smi / rocm-smi)
114126 docker rm -f "${CONTAINER_BASENAME}" 2>/dev/null || true
115- docker run ${{ matrix.flags }} "${DOCKER_IMAGE}" ${{ matrix.test_drive_cmd }}
127+ docker run ${{ matrix.dockerflags }} "${DOCKER_IMAGE}" ${{ matrix.test_drive_cmd }}
116128
117129 - name : Test with pytest
118130 env :
@@ -123,12 +135,13 @@ jobs:
123135 ci_env=$(bash <(curl -s https://codecov.io/env))
124136
125137 # Run the test suite using the matrix-defined flags
126- docker run ${{ matrix.flags }} \
138+ docker run \
139+ ${{ matrix.dockerflags }} \
127140 "${ci_env}" \
128- -e CI=true \
129- -e PYTHONFAULTHANDLER=1 \
130- -e DEVITO_LOGGING=DEBUG \
131- -e CODECOV_TOKEN \
141+ --env CI=true \
142+ --env PYTHONFAULTHANDLER=1 \
143+ --env DEVITO_LOGGING=DEBUG \
144+ --env CODECOV_TOKEN \
132145 "${DOCKER_IMAGE}" \
133146 pytest -vvv --capture=no --showlocals \
134147 --log-cli-level=DEBUG -o log_cli=true \
@@ -138,11 +151,17 @@ jobs:
138151
139152 - name : Test examples
140153 run : |
141- docker run ${{ matrix.flags }} "${DOCKER_IMAGE}" pytest ${{ matrix.test_examples }}
154+ docker run \
155+ ${{ matrix.dockerflags }} \
156+ "${DOCKER_IMAGE}" \
157+ pytest ${{ matrix.test_examples }}
142158
143159 - name : Test examples with MPI
144160 run : |
145- docker run ${{ matrix.flags }} --env DEVITO_MPI=1 "${DOCKER_IMAGE}" \
161+ docker run \
162+ ${{ matrix.dockerflags }} \
163+ --env DEVITO_MPI=1 \
164+ "${DOCKER_IMAGE}" \
146165 mpiexec -n 2 pytest ${{ matrix.test_examples }}
147166
148167 - name : Builder & image cleanup (keep 3 days of cache)
0 commit comments