@@ -267,3 +267,91 @@ jobs:
267267 push : true
268268 tags : ${{ steps.defs.outputs.rockerintermediateprefix }}-shiny:${{ steps.defs.outputs.rver }}-${{ matrix.build.arch }}
269269 platforms : linux/${{ matrix.build.arch }}
270+
271+ tag-versioned-cuda :
272+ strategy :
273+ matrix :
274+ build :
275+ - { arch: 'amd64', runner: 'ubuntu-latest', cudatag: 'latest' }
276+ - { arch: 'arm64', runner: 'ubuntu-latest-arm64', cudatag: 'arm64' }
277+ runs-on : ${{ matrix.build.runner }}
278+ steps :
279+ - uses : actions/checkout@v4
280+
281+ - name : Free root space
282+ uses : almahmoud/free-root-space@main
283+ with :
284+ verbose : true
285+
286+ - name : Set up Docker Buildx
287+ uses : docker/setup-buildx-action@v3
288+
289+ - name : Login to GHCR
290+ uses : docker/login-action@v3
291+ with :
292+ registry : ghcr.io
293+ username : ${{ github.actor }}
294+ password : ${{ secrets.GITHUB_TOKEN }}
295+
296+ - name : Pull rocker/cuda image
297+ run : |
298+ docker pull rocker/cuda:${{ matrix.build.cudatag }}
299+
300+ - name : Extract R version and CUDA version
301+ id : versions
302+ run : |
303+ # Start container in detached mode to avoid repulling
304+ CONTAINER_ID=$(docker run -d rocker/cuda:${{ matrix.build.cudatag }} sleep infinity)
305+ echo "Started container: $CONTAINER_ID"
306+
307+ # Extract R version by running Rscript in the container
308+ R_VER=$(docker exec "$CONTAINER_ID" Rscript -e 'cat(as.character(getRversion()))' 2>/dev/null || echo "unknown")
309+ echo "r_version=$R_VER" >> $GITHUB_OUTPUT
310+ echo "Detected R version: $R_VER"
311+
312+ # Extract CUDA version by running pytorch in the container
313+ CUDA_VER=$(docker exec "$CONTAINER_ID" python3 -c "import torch; print(torch.version.cuda)" 2>/dev/null || echo "unknown")
314+ echo "cuda_version=$CUDA_VER" >> $GITHUB_OUTPUT
315+ echo "Detected CUDA version: $CUDA_VER"
316+
317+ # Stop and remove the container
318+ docker stop "$CONTAINER_ID"
319+ docker rm "$CONTAINER_ID"
320+
321+ # Get lowercase repository owner
322+ OWNER_LOWER=$(echo "${{ github.repository_owner }}" | awk '{print tolower($0)}')
323+ echo "owner=$OWNER_LOWER" >> $GITHUB_OUTPUT
324+
325+ - name : Tag and push to GHCR with versioned tags
326+ run : |
327+ SOURCE_IMAGE="rocker/cuda:${{ matrix.build.cudatag }}"
328+ BASE_TAG="ghcr.io/${{ steps.versions.outputs.owner }}/rocker-cuda"
329+ ARCH="${{ matrix.build.arch }}"
330+ R_VER="${{ steps.versions.outputs.r_version }}"
331+ CUDA_VER="${{ steps.versions.outputs.cuda_version }}"
332+
333+ # Tag with architecture
334+ docker tag "$SOURCE_IMAGE" "${BASE_TAG}:${ARCH}"
335+ docker push "${BASE_TAG}:${ARCH}"
336+ echo "Pushed: ${BASE_TAG}:${ARCH}"
337+
338+ # Tag with R version
339+ if [ ! -z "$R_VER" ] && [ "$R_VER" != "unknown" ]; then
340+ docker tag "$SOURCE_IMAGE" "${BASE_TAG}:r-${R_VER}-${ARCH}"
341+ docker push "${BASE_TAG}:r-${R_VER}-${ARCH}"
342+ echo "Pushed: ${BASE_TAG}:r-${R_VER}-${ARCH}"
343+ fi
344+
345+ # Tag with CUDA version
346+ if [ ! -z "$CUDA_VER" ] && [ "$CUDA_VER" != "unknown" ]; then
347+ docker tag "$SOURCE_IMAGE" "${BASE_TAG}:cuda-${CUDA_VER}-${ARCH}"
348+ docker push "${BASE_TAG}:cuda-${CUDA_VER}-${ARCH}"
349+ echo "Pushed: ${BASE_TAG}:cuda-${CUDA_VER}-${ARCH}"
350+ fi
351+
352+ # Tag with both R and CUDA versions
353+ if [ ! -z "$R_VER" ] && [ "$R_VER" != "unknown" ] && [ ! -z "$CUDA_VER" ] && [ "$CUDA_VER" != "unknown" ]; then
354+ docker tag "$SOURCE_IMAGE" "${BASE_TAG}:r-${R_VER}-cuda-${CUDA_VER}-${ARCH}"
355+ docker push "${BASE_TAG}:r-${R_VER}-cuda-${CUDA_VER}-${ARCH}"
356+ echo "Pushed: ${BASE_TAG}:r-${R_VER}-cuda-${CUDA_VER}-${ARCH}"
357+ fi
0 commit comments