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