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