Skip to content

Commit 9f8d8a3

Browse files
committed
Better extraction of version number
1 parent a44ed80 commit 9f8d8a3

File tree

1 file changed

+53
-28
lines changed

1 file changed

+53
-28
lines changed

.github/workflows/build_containers.yaml

Lines changed: 53 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,9 @@ jobs:
2929
- {image: 'rocker/rstudio', amdtag: 'devel', outname: 'bioconductor_docker'}
3030
- {image: 'rocker/tidyverse', amdtag: 'devel', outname: 'tidyverse'}
3131
- {image: 'ghcr.io/bioconductor/rocker-shiny', amdtag: 'devel-amd64', outname: 'shiny'}
32-
# - {image: 'ghcr.io/bioconductor/rocker-cuda', amdtag: 'devel-amd64', outname: 'cuda'}
33-
# - {image: 'ghcr.io/bioconductor/rocker-ml', amdtag: 'devel-amd64', outname: 'ml'}
34-
# - {image: 'ghcr.io/bioconductor/rocker-ml-verse', amdtag: 'devel-amd64', outname: 'ml-verse'}
3532
steps:
3633
- uses: actions/checkout@v4
37-
34+
3835
- name: Free root space
3936
uses: almahmoud/free-root-space@main
4037
with:
@@ -180,13 +177,10 @@ jobs:
180177
fail-fast: false
181178
matrix:
182179
base:
183-
- {image: 'rocker/r-ver', amdtag: 'devel', outname: 'r-ver', platforms: 'amd64,arm64'}
184-
- {image: 'rocker/rstudio', amdtag: 'devel', outname: 'bioconductor_docker', platforms: 'amd64,arm64'}
185-
- {image: 'rocker/tidyverse', amdtag: 'devel', outname: 'tidyverse', platforms: 'amd64'}
186-
- {image: 'ghcr.io/bioconductor/rocker-shiny', amdtag: 'devel-amd64', outname: 'shiny', platforms: 'amd64'}
187-
#- {image: 'ghcr.io/bioconductor/rocker-cuda', amdtag: 'devel-amd64', outname: 'cuda', platforms: 'amd64'}
188-
#- {image: 'ghcr.io/bioconductor/rocker-ml', amdtag: 'devel-amd64', outname: 'ml', platforms: 'amd64'}
189-
#- {image: 'ghcr.io/bioconductor/rocker-ml-verse', amdtag: 'devel-amd64', outname: 'ml-verse', platforms: 'amd64'}
180+
- {outname: 'r-ver', platforms: 'amd64,arm64'}
181+
- {outname: 'bioconductor_docker', platforms: 'amd64,arm64'}
182+
- {outname: 'tidyverse', platforms: 'amd64'}
183+
- {outname: 'shiny', platforms: 'amd64'}
190184
steps:
191185
- name: Set up Docker Buildx
192186
uses: docker/setup-buildx-action@v3
@@ -258,7 +252,7 @@ jobs:
258252
cat /tmp/tags | xargs -i bash -c 'printf "%s" "-t {} " >> /tmp/tagargs'
259253
TAG_ARGS="$(cat /tmp/tagargs)"
260254
TAGS="$(cat /tmp/tags)"
261-
255+
262256
# Add version tags for RELEASE branches (e.g., RELEASE_3_21 -> 3.21)
263257
for tag in $TAGS; do
264258
if [[ "$tag" == *"RELEASE_"* ]]; then
@@ -271,14 +265,45 @@ jobs:
271265
fi
272266
fi
273267
done
274-
275-
R_VER=$(docker pull ${{ matrix.base.image }}:${{ matrix.base.amdtag }} 2>&1 > /dev/null && \
276-
docker inspect ${{ matrix.base.image }}:${{ matrix.base.amdtag }} | \
277-
jq -r '.[].Config.Env[]|select(match("^R_VERSION"))|.[index("=")+1:]')
268+
269+
# Extract R version by running Rscript in containers from all architectures
270+
BASE_REGISTRY=$(echo '${{ steps.meta1.outputs.tags }}' | awk -F':' '{print $1}')
271+
BRANCH=$(echo '${{ steps.meta1.outputs.tags }}' | awk -F':' '{print $2}')
272+
273+
# Extract R version from each architecture
274+
R_VER=""
275+
for archdir in $(cd /tmp/digests && find . -type d -mindepth 1 -maxdepth 1 | sort); do
276+
ARCH_NAME=$(basename "$archdir")
277+
DIGEST_FILE=$(cd /tmp/digests/$archdir && ls | head -1)
278+
279+
if [ ! -z "$DIGEST_FILE" ]; then
280+
echo "Extracting R version from $ARCH_NAME architecture..."
281+
CONTAINER_ID=$(docker run -d "${BASE_REGISTRY}@sha256:${DIGEST_FILE}" sleep infinity 2>/dev/null || echo "")
282+
283+
if [ ! -z "$CONTAINER_ID" ]; then
284+
ARCH_R_VER=$(docker exec "$CONTAINER_ID" Rscript -e 'cat(as.character(getRversion()))' 2>/dev/null || echo "")
285+
docker stop "$CONTAINER_ID" >/dev/null 2>&1
286+
docker rm "$CONTAINER_ID" >/dev/null 2>&1
287+
288+
echo "R version for $ARCH_NAME: $ARCH_R_VER"
289+
290+
# Set R_VER from first successful extraction
291+
if [ -z "$R_VER" ]; then
292+
R_VER="$ARCH_R_VER"
293+
elif [ "$R_VER" != "$ARCH_R_VER" ]; then
294+
echo "ERROR: R version mismatch! $ARCH_NAME has $ARCH_R_VER but expected $R_VER"
295+
exit 1
296+
fi
297+
fi
298+
fi
299+
done
300+
301+
echo "Verified R version across all architectures: $R_VER"
302+
278303
if [ ! -z "$R_VER" ]; then
279304
for tag in $TAGS; do
280305
TAG_ARGS="$TAG_ARGS -t ${tag}-R-${R_VER} -t ${tag}-r-${R_VER}"
281-
306+
282307
# For RELEASE branches, also add version-R tags
283308
if [[ "$tag" == *"RELEASE_"* ]]; then
284309
VERSION=$(echo "$tag" | sed -E 's/.*RELEASE_([0-9]+)_([0-9]+).*/\1.\2/')
@@ -289,32 +314,32 @@ jobs:
289314
fi
290315
done
291316
fi
292-
317+
293318
# Add alternative tags without _docker in name
294319
if [[ "${{ matrix.base.outname }}" == *"_docker"* ]]; then
295320
for tag in $TAGS; do
296321
# Extract registry and branch/version from tag
297322
REGISTRY=$(echo "$tag" | cut -d':' -f1)
298323
VERSION=$(echo "$tag" | cut -d':' -f2)
299-
324+
300325
# Create new registry without _docker suffix
301326
NEW_REGISTRY=$(echo "$REGISTRY" | sed 's/_docker//g')
302-
327+
303328
# Add tag without _docker in name
304329
TAG_ARGS="$TAG_ARGS -t ${NEW_REGISTRY}:${VERSION}"
305-
330+
306331
# If it's a release branch, also add the numeric version tag
307332
if [[ "$VERSION" == RELEASE_* ]]; then
308333
NUM_VERSION=$(echo "$VERSION" | sed -E 's/RELEASE_([0-9]+)_([0-9]+).*/\1.\2/')
309334
if [ ! -z "$NUM_VERSION" ]; then
310335
TAG_ARGS="$TAG_ARGS -t ${NEW_REGISTRY}:${NUM_VERSION}"
311336
fi
312337
fi
313-
338+
314339
# If R_VER exists, add R version tags for the non-_docker version
315340
if [ ! -z "$R_VER" ]; then
316341
TAG_ARGS="$TAG_ARGS -t ${NEW_REGISTRY}:${VERSION}-R-${R_VER} -t ${NEW_REGISTRY}:${VERSION}-r-${R_VER}"
317-
342+
318343
# If it's a release branch, also add R version tags for numeric version
319344
if [[ "$VERSION" == RELEASE_* ]]; then
320345
NUM_VERSION=$(echo "$VERSION" | sed -E 's/RELEASE_([0-9]+)_([0-9]+).*/\1.\2/')
@@ -325,7 +350,7 @@ jobs:
325350
fi
326351
done
327352
fi
328-
353+
329354
# Create manifest list
330355
DIGESTS=""
331356
BASE_REGISTRY=$(echo '${{ steps.meta1.outputs.tags }}' | awk -F':' '{print $1}')
@@ -342,27 +367,27 @@ jobs:
342367
# Get registry prefixes
343368
REGISTRY_PREFIXES=$(cat /tmp/tags | awk -F':' '{print $1}' | sort -u)
344369
BRANCH=$(cat /tmp/tags | head -1 | awk -F':' '{print $2}')
345-
370+
346371
# Inspect all created tags
347372
for prefix in $REGISTRY_PREFIXES; do
348373
# Base tag
349374
echo "Inspecting: $prefix:$BRANCH"
350375
docker buildx imagetools inspect "$prefix:$BRANCH"
351-
376+
352377
# Without _docker suffix if applicable
353378
if [[ "${{ matrix.base.outname }}" == *"_docker"* ]]; then
354379
NO_DOCKER_PREFIX=$(echo "$prefix" | sed 's/_docker//g')
355380
echo "Inspecting: $NO_DOCKER_PREFIX:$BRANCH"
356381
docker buildx imagetools inspect "$NO_DOCKER_PREFIX:$BRANCH"
357382
fi
358-
383+
359384
# Version tag for release branches
360385
if [[ "$BRANCH" == RELEASE_* ]]; then
361386
VERSION=$(echo "$BRANCH" | sed -E 's/RELEASE_([0-9]+)_([0-9]+).*/\1.\2/')
362387
if [ ! -z "$VERSION" ]; then
363388
echo "Inspecting: $prefix:$VERSION"
364389
docker buildx imagetools inspect "$prefix:$VERSION"
365-
390+
366391
# Without _docker suffix if applicable
367392
if [[ "${{ matrix.base.outname }}" == *"_docker"* ]]; then
368393
echo "Inspecting: $NO_DOCKER_PREFIX:$VERSION"

0 commit comments

Comments
 (0)