Skip to content

Commit ac467d1

Browse files
committed
Add rocker build for cuda
1 parent 0db6122 commit ac467d1

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed

.github/workflows/rocker-builds.yaml

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)