From 8a5a252463b75a38cc26113de724c5558199cbc1 Mon Sep 17 00:00:00 2001 From: Nick Schonning Date: Wed, 15 Jul 2026 16:17:44 -0400 Subject: [PATCH] feat: only include the architectures supported in version.json --- Dockerfile-alpine.template | 8 +---- Dockerfile-debian.template | 7 +--- Dockerfile-slim.template | 7 +--- update.sh | 65 +++++++++++++++++++++++++++++++++++++- 4 files changed, 67 insertions(+), 20 deletions(-) diff --git a/Dockerfile-alpine.template b/Dockerfile-alpine.template index 7ccaab1a1..94be2c144 100644 --- a/Dockerfile-alpine.template +++ b/Dockerfile-alpine.template @@ -10,13 +10,7 @@ RUN addgroup -g 1000 node \ curl \ && ARCH= OPENSSL_ARCH='linux*' && alpineArch="$(apk --print-arch)" \ && case "${alpineArch##*-}" in \ - x86_64) ARCH='x64' CHECKSUM=CHECKSUM_x64 OPENSSL_ARCH=linux-x86_64;; \ - x86) OPENSSL_ARCH=linux-elf;; \ - aarch64) OPENSSL_ARCH=linux-aarch64;; \ - arm*) OPENSSL_ARCH=linux-armv4;; \ - ppc64le) OPENSSL_ARCH=linux-ppc64le;; \ - s390x) OPENSSL_ARCH=linux-s390x;; \ - *) ;; \ + "${ALPINE_ARCH[@]}" esac \ && if [ -n "${CHECKSUM}" ]; then \ set -eu; \ diff --git a/Dockerfile-debian.template b/Dockerfile-debian.template index 5f00f8f08..23a503dc8 100644 --- a/Dockerfile-debian.template +++ b/Dockerfile-debian.template @@ -7,12 +7,7 @@ ENV NODE_VERSION=0.0.0 RUN ARCH= && dpkgArch="$(dpkg --print-architecture)" \ && case "${dpkgArch##*-}" in \ - amd64) ARCH='x64';; \ - ppc64el) ARCH='ppc64le';; \ - s390x) ARCH='s390x';; \ - arm64) ARCH='arm64';; \ - armhf) ARCH='armv7l';; \ - *) echo "unsupported architecture"; exit 1 ;; \ + "${DEB_ARCH[@]}" esac \ # use pre-existing gpg directory, see https://github.com/nodejs/docker-node/pull/1895#issuecomment-1550389150 && export GNUPGHOME="$(mktemp -d)" \ diff --git a/Dockerfile-slim.template b/Dockerfile-slim.template index 5a643ebde..b2d858ceb 100644 --- a/Dockerfile-slim.template +++ b/Dockerfile-slim.template @@ -7,12 +7,7 @@ ENV NODE_VERSION=0.0.0 RUN ARCH= OPENSSL_ARCH= && dpkgArch="$(dpkg --print-architecture)" \ && case "${dpkgArch##*-}" in \ - amd64) ARCH='x64' OPENSSL_ARCH='linux-x86_64';; \ - ppc64el) ARCH='ppc64le' OPENSSL_ARCH='linux-ppc64le';; \ - s390x) ARCH='s390x' OPENSSL_ARCH='linux*-s390x';; \ - arm64) ARCH='arm64' OPENSSL_ARCH='linux-aarch64';; \ - armhf) ARCH='armv7l' OPENSSL_ARCH='linux-armv4';; \ - *) echo "unsupported architecture"; exit 1 ;; \ + "${DEB_ARCH[@]}" esac \ && set -ex \ # libatomic1 for arm diff --git a/update.sh b/update.sh index fe25202ab..8fbed0adf 100755 --- a/update.sh +++ b/update.sh @@ -153,12 +153,75 @@ function update_node_version() { fi else sed -Ei -e "s/(alpine:)0.0/\\1${alpine_version}/" "${dockerfile}-tmp" - sed -Ei -e "s/CHECKSUM=CHECKSUM_x64/CHECKSUM=\"${checksum}\"/" "${dockerfile}-tmp" + + alpine_arch='' + local -a arches + arches=$(jq -r ".\"${version}\".variants.\"alpine${alpine_version}\" | @sh" "versions.json") + if [[ "${arches[0]}" == *"amd64"* ]]; then + alpine_arch+='x86_64) ARCH='"'"'x64'"'"' CHECKSUM="'${checksum}'" OPENSSL_ARCH=linux-x86_64;; \\\n ' + fi + if [[ "${arches[0]}" == *"arm64v8"* ]]; then + alpine_arch+='aarch64) OPENSSL_ARCH=linux-aarch64;; \\\n ' + fi + if [[ "${arches[0]}" == *"arm32"* ]]; then + alpine_arch+='arm*) OPENSSL_ARCH=linux-armv4;; \\\n ' + fi + if [[ "${arches[0]}" == *"ppc64le"* ]]; then + alpine_arch+='ppc64le) OPENSSL_ARCH=linux-ppc64le;; \\\n ' + fi + if [[ "${arches[0]}" == *"s390x"* ]]; then + alpine_arch+='s390x) OPENSSL_ARCH=linux-s390x;; \\\n ' + fi + # shellcheck disable=SC1003 + alpine_arch+='*) ;; \\' + sed -Ei -e "s/\"\\$\{ALPINE_ARCH\[@\]\}\"/${alpine_arch}/" "${dockerfile}-tmp" fi elif is_debian "${variant}"; then sed -Ei -e "s/(buildpack-deps:)name/\\1${variant}/" "${dockerfile}-tmp" + deb_arch='' + local -a arches + arches=$(jq -r ".\"${version}\".variants.\"${variant}\" | @sh" "versions.json") + if [[ "${arches[0]}" == *"amd64"* ]]; then + deb_arch+='amd64) ARCH='"'"'x64'"'"';; \\\n ' + fi + if [[ "${arches[0]}" == *"ppc64le"* ]]; then + deb_arch+='ppc64el) ARCH='"'"'ppc64le'"'"';; \\\n ' + fi + if [[ "${arches[0]}" == *"s390x"* ]]; then + deb_arch+='s390x) ARCH='"'"'s390x'"'"';; \\\n ' + fi + if [[ "${arches[0]}" == *"arm64v8"* ]]; then + deb_arch+='arm64) ARCH='"'"'arm64'"'"';; \\\n ' + fi + if [[ "${arches[0]}" == *"arm32v7"* ]]; then + deb_arch+='armhf) ARCH='"'"'armv7l'"'"';; \\\n ' + fi + # shellcheck disable=SC1003 + deb_arch+='*) echo "unsupported architecture"; exit 1 ;; \\' + sed -Ei -e "s/\"\\$\{DEB_ARCH\[@\]\}\"/${deb_arch}/" "${dockerfile}-tmp" elif is_debian_slim "${variant}"; then sed -Ei -e "s/(debian:)name-slim/\\1${variant}/" "${dockerfile}-tmp" + deb_arch='' + local -a arches + arches=$(jq -r ".\"${version}\".variants.\"${variant}\" | @sh" "versions.json") + if [[ "${arches[0]}" == *"amd64"* ]]; then + deb_arch+='amd64) ARCH='"'"'x64'"'"' OPENSSL_ARCH='"'"'linux-x86_64'"'"';; \\\n ' + fi + if [[ "${arches[0]}" == *"ppc64le"* ]]; then + deb_arch+='ppc64el) ARCH='"'"'ppc64le'"'"' OPENSSL_ARCH='"'"'linux-ppc64le'"'"';; \\\n ' + fi + if [[ "${arches[0]}" == *"s390x"* ]]; then + deb_arch+='s390x) ARCH='"'"'s390x'"'"' OPENSSL_ARCH='"'"'linux*-s390x'"'"';; \\\n ' + fi + if [[ "${arches[0]}" == *"arm64v8"* ]]; then + deb_arch+='arm64) ARCH='"'"'arm64'"'"' OPENSSL_ARCH='"'"'linux-aarch64'"'"';; \\\n ' + fi + if [[ "${arches[0]}" == *"arm32v7"* ]]; then + deb_arch+='armhf) ARCH='"'"'armv7l'"'"' OPENSSL_ARCH='"'"'linux-armv4'"'"';; \\\n ' + fi + # shellcheck disable=SC1003 + deb_arch+='*) echo "unsupported architecture"; exit 1 ;; \\' + sed -Ei -e "s/\"\\$\{DEB_ARCH\[@\]\}\"/${deb_arch}/" "${dockerfile}-tmp" fi # Strip out Yarn v1 from Node 26+ images https://github.com/nodejs/docker-node/issues/2407