Skip to content

Commit 0775fc3

Browse files
committed
Better extraction of version number
1 parent 388e4b7 commit 0775fc3

File tree

1 file changed

+53
-25
lines changed

1 file changed

+53
-25
lines changed

.github/workflows/build_containers.yaml

Lines changed: 53 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
# - {image: 'ghcr.io/bioconductor/rocker-ml-verse', amdtag: 'devel-amd64', outname: 'ml-verse'}
2727
steps:
2828
- uses: actions/checkout@v4
29-
29+
3030
- name: Free root space
3131
uses: almahmoud/free-root-space@main
3232
with:
@@ -172,13 +172,10 @@ jobs:
172172
fail-fast: false
173173
matrix:
174174
base:
175-
- {image: 'rocker/r-ver', amdtag: '4.5.2', outname: 'r-ver', platforms: 'amd64,arm64'}
176-
- {image: 'rocker/rstudio', amdtag: '4.5.2', outname: 'bioconductor_docker', platforms: 'amd64,arm64'}
177-
- {image: 'rocker/tidyverse', amdtag: '4.5.2', outname: 'tidyverse', platforms: 'amd64'}
178-
- {image: 'rocker/shiny', amdtag: '4.5.2', outname: 'shiny', platforms: 'amd64'}
179-
#- {image: 'ghcr.io/bioconductor/rocker-cuda', amdtag: 'devel-amd64', outname: 'cuda', platforms: 'amd64'}
180-
#- {image: 'ghcr.io/bioconductor/rocker-ml', amdtag: 'devel-amd64', outname: 'ml', platforms: 'amd64'}
181-
#- {image: 'ghcr.io/bioconductor/rocker-ml-verse', amdtag: 'devel-amd64', outname: 'ml-verse', platforms: 'amd64'}
175+
- {outname: 'r-ver', platforms: 'amd64,arm64'}
176+
- {outname: 'bioconductor_docker', platforms: 'amd64,arm64'}
177+
- {outname: 'tidyverse', platforms: 'amd64'}
178+
- {outname: 'shiny', platforms: 'amd64'}
182179
steps:
183180
- name: Set up Docker Buildx
184181
uses: docker/setup-buildx-action@v3
@@ -250,7 +247,7 @@ jobs:
250247
cat /tmp/tags | xargs -i bash -c 'printf "%s" "-t {} " >> /tmp/tagargs'
251248
TAG_ARGS="$(cat /tmp/tagargs)"
252249
TAGS="$(cat /tmp/tags)"
253-
250+
254251
# Add version tags for RELEASE branches (e.g., RELEASE_3_21 -> 3.21)
255252
for tag in $TAGS; do
256253
if [[ "$tag" == *"RELEASE_"* ]]; then
@@ -263,14 +260,45 @@ jobs:
263260
fi
264261
fi
265262
done
266-
267-
R_VER=$(docker pull ${{ matrix.base.image }}:${{ matrix.base.amdtag }} 2>&1 > /dev/null && \
268-
docker inspect ${{ matrix.base.image }}:${{ matrix.base.amdtag }} | \
269-
jq -r '.[].Config.Env[]|select(match("^R_VERSION"))|.[index("=")+1:]')
263+
264+
# Extract R version by running Rscript in containers from all architectures
265+
BASE_REGISTRY=$(echo '${{ steps.meta1.outputs.tags }}' | awk -F':' '{print $1}')
266+
BRANCH=$(echo '${{ steps.meta1.outputs.tags }}' | awk -F':' '{print $2}')
267+
268+
# Extract R version from each architecture
269+
R_VER=""
270+
for archdir in $(cd /tmp/digests && find . -type d -mindepth 1 -maxdepth 1 | sort); do
271+
ARCH_NAME=$(basename "$archdir")
272+
DIGEST_FILE=$(cd /tmp/digests/$archdir && ls | head -1)
273+
274+
if [ ! -z "$DIGEST_FILE" ]; then
275+
echo "Extracting R version from $ARCH_NAME architecture..."
276+
CONTAINER_ID=$(docker run -d "${BASE_REGISTRY}@sha256:${DIGEST_FILE}" sleep infinity 2>/dev/null || echo "")
277+
278+
if [ ! -z "$CONTAINER_ID" ]; then
279+
ARCH_R_VER=$(docker exec "$CONTAINER_ID" Rscript -e 'cat(as.character(getRversion()))' 2>/dev/null || echo "")
280+
docker stop "$CONTAINER_ID" >/dev/null 2>&1
281+
docker rm "$CONTAINER_ID" >/dev/null 2>&1
282+
283+
echo "R version for $ARCH_NAME: $ARCH_R_VER"
284+
285+
# Set R_VER from first successful extraction
286+
if [ -z "$R_VER" ]; then
287+
R_VER="$ARCH_R_VER"
288+
elif [ "$R_VER" != "$ARCH_R_VER" ]; then
289+
echo "ERROR: R version mismatch! $ARCH_NAME has $ARCH_R_VER but expected $R_VER"
290+
exit 1
291+
fi
292+
fi
293+
fi
294+
done
295+
296+
echo "Verified R version across all architectures: $R_VER"
297+
270298
if [ ! -z "$R_VER" ]; then
271299
for tag in $TAGS; do
272300
TAG_ARGS="$TAG_ARGS -t ${tag}-R-${R_VER} -t ${tag}-r-${R_VER}"
273-
301+
274302
# For RELEASE branches, also add version-R tags
275303
if [[ "$tag" == *"RELEASE_"* ]]; then
276304
VERSION=$(echo "$tag" | sed -E 's/.*RELEASE_([0-9]+)_([0-9]+).*/\1.\2/')
@@ -281,32 +309,32 @@ jobs:
281309
fi
282310
done
283311
fi
284-
312+
285313
# Add alternative tags without _docker in name
286314
if [[ "${{ matrix.base.outname }}" == *"_docker"* ]]; then
287315
for tag in $TAGS; do
288316
# Extract registry and branch/version from tag
289317
REGISTRY=$(echo "$tag" | cut -d':' -f1)
290318
VERSION=$(echo "$tag" | cut -d':' -f2)
291-
319+
292320
# Create new registry without _docker suffix
293321
NEW_REGISTRY=$(echo "$REGISTRY" | sed 's/_docker//g')
294-
322+
295323
# Add tag without _docker in name
296324
TAG_ARGS="$TAG_ARGS -t ${NEW_REGISTRY}:${VERSION}"
297-
325+
298326
# If it's a release branch, also add the numeric version tag
299327
if [[ "$VERSION" == RELEASE_* ]]; then
300328
NUM_VERSION=$(echo "$VERSION" | sed -E 's/RELEASE_([0-9]+)_([0-9]+).*/\1.\2/')
301329
if [ ! -z "$NUM_VERSION" ]; then
302330
TAG_ARGS="$TAG_ARGS -t ${NEW_REGISTRY}:${NUM_VERSION}"
303331
fi
304332
fi
305-
333+
306334
# If R_VER exists, add R version tags for the non-_docker version
307335
if [ ! -z "$R_VER" ]; then
308336
TAG_ARGS="$TAG_ARGS -t ${NEW_REGISTRY}:${VERSION}-R-${R_VER} -t ${NEW_REGISTRY}:${VERSION}-r-${R_VER}"
309-
337+
310338
# If it's a release branch, also add R version tags for numeric version
311339
if [[ "$VERSION" == RELEASE_* ]]; then
312340
NUM_VERSION=$(echo "$VERSION" | sed -E 's/RELEASE_([0-9]+)_([0-9]+).*/\1.\2/')
@@ -317,7 +345,7 @@ jobs:
317345
fi
318346
done
319347
fi
320-
348+
321349
# Create manifest list
322350
DIGESTS=""
323351
BASE_REGISTRY=$(echo '${{ steps.meta1.outputs.tags }}' | awk -F':' '{print $1}')
@@ -334,27 +362,27 @@ jobs:
334362
# Get registry prefixes
335363
REGISTRY_PREFIXES=$(cat /tmp/tags | awk -F':' '{print $1}' | sort -u)
336364
BRANCH=$(cat /tmp/tags | head -1 | awk -F':' '{print $2}')
337-
365+
338366
# Inspect all created tags
339367
for prefix in $REGISTRY_PREFIXES; do
340368
# Base tag
341369
echo "Inspecting: $prefix:$BRANCH"
342370
docker buildx imagetools inspect "$prefix:$BRANCH"
343-
371+
344372
# Without _docker suffix if applicable
345373
if [[ "${{ matrix.base.outname }}" == *"_docker"* ]]; then
346374
NO_DOCKER_PREFIX=$(echo "$prefix" | sed 's/_docker//g')
347375
echo "Inspecting: $NO_DOCKER_PREFIX:$BRANCH"
348376
docker buildx imagetools inspect "$NO_DOCKER_PREFIX:$BRANCH"
349377
fi
350-
378+
351379
# Version tag for release branches
352380
if [[ "$BRANCH" == RELEASE_* ]]; then
353381
VERSION=$(echo "$BRANCH" | sed -E 's/RELEASE_([0-9]+)_([0-9]+).*/\1.\2/')
354382
if [ ! -z "$VERSION" ]; then
355383
echo "Inspecting: $prefix:$VERSION"
356384
docker buildx imagetools inspect "$prefix:$VERSION"
357-
385+
358386
# Without _docker suffix if applicable
359387
if [[ "${{ matrix.base.outname }}" == *"_docker"* ]]; then
360388
echo "Inspecting: $NO_DOCKER_PREFIX:$VERSION"

0 commit comments

Comments
 (0)