diff --git a/images/runtime/node/18/bullseye.Dockerfile b/images/runtime/node/18/bullseye.Dockerfile index 9a9694a064..4442497d9e 100644 --- a/images/runtime/node/18/bullseye.Dockerfile +++ b/images/runtime/node/18/bullseye.Dockerfile @@ -14,6 +14,17 @@ ENV GIT_COMMIT=${GIT_COMMIT} ENV BUILD_NUMBER=${BUILD_NUMBER} RUN chmod +x build.sh && ./build.sh node /opt/startupcmdgen/startupcmdgen +# Download Node.js via nvm in a disposable stage +FROM ${BASE_IMAGE} AS nodeDownloader +ARG NODE18_VERSION +ENV NVM_DIR /usr/local/nvm +RUN apt-get update \ + && apt-get install -y --no-install-recommends curl ca-certificates \ + && mkdir -p $NVM_DIR \ + && curl -sL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash \ + && . $NVM_DIR/nvm.sh \ + && nvm install ${NODE18_VERSION} + #FROM oryxdevmcr.azurecr.io/private/oryx/oryx-node-run-base-bullseye:${BUILD_NUMBER} FROM ${BASE_IMAGE} @@ -36,12 +47,9 @@ ENV NODE_VERSION ${NODE18_VERSION} ENV NPM_CONFIG_LOGLEVEL info ARG BUILD_DIR=/tmp/oryx/build ARG IMAGES_DIR=/tmp/oryx/images -COPY nodejs-bullseye-${NODE18_VERSION}.tar.gz . -RUN set -e \ - && mkdir -p /opt/nodejs/${NODE18_VERSION} \ - && tar -xzf nodejs-bullseye-${NODE18_VERSION}.tar.gz -C /usr/local \ - && rm nodejs-bullseye-${NODE18_VERSION}.tar.gz \ - && ln -s /usr/local/bin/node /usr/local/bin/nodejs + +COPY --from=nodeDownloader /usr/local/nvm/versions/node/v${NODE18_VERSION}/ /usr/local/ +RUN ln -s /usr/local/bin/node /usr/local/bin/nodejs ARG NPM_VERSION ARG PM2_VERSION diff --git a/images/runtime/node/20/bookworm.Dockerfile b/images/runtime/node/20/bookworm.Dockerfile index e5ef800044..69da640f4b 100644 --- a/images/runtime/node/20/bookworm.Dockerfile +++ b/images/runtime/node/20/bookworm.Dockerfile @@ -14,6 +14,17 @@ ENV GIT_COMMIT=${GIT_COMMIT} ENV BUILD_NUMBER=${BUILD_NUMBER} RUN chmod +x build.sh && ./build.sh node /opt/startupcmdgen/startupcmdgen +# Download Node.js via nvm in a disposable stage +FROM ${BASE_IMAGE} AS nodeDownloader +ARG NODE20_VERSION +ENV NVM_DIR /usr/local/nvm +RUN apt-get update \ + && apt-get install -y --no-install-recommends curl ca-certificates \ + && mkdir -p $NVM_DIR \ + && curl -sL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash \ + && . $NVM_DIR/nvm.sh \ + && nvm install ${NODE20_VERSION} + #FROM oryxdevmcr.azurecr.io/private/oryx/oryx-node-run-base-bookworm:${BUILD_NUMBER} FROM ${BASE_IMAGE} @@ -37,12 +48,8 @@ ENV NPM_CONFIG_LOGLEVEL info ARG BUILD_DIR=/tmp/oryx/build ARG IMAGES_DIR=/tmp/oryx/images -COPY nodejs-bookworm-${NODE20_VERSION}.tar.gz . -RUN set -e \ - && mkdir -p /opt/nodejs/${NODE20_VERSION} \ - && tar -xzf nodejs-bookworm-${NODE20_VERSION}.tar.gz -C /usr/local \ - && rm nodejs-bookworm-${NODE20_VERSION}.tar.gz \ - && ln -s /usr/local/bin/node /usr/local/bin/nodejs +COPY --from=nodeDownloader /usr/local/nvm/versions/node/v${NODE20_VERSION}/ /usr/local/ +RUN ln -s /usr/local/bin/node /usr/local/bin/nodejs ARG NPM_VERSION ARG PM2_VERSION diff --git a/images/runtime/node/20/bullseye.Dockerfile b/images/runtime/node/20/bullseye.Dockerfile index 63249d40c8..8608d8b75c 100644 --- a/images/runtime/node/20/bullseye.Dockerfile +++ b/images/runtime/node/20/bullseye.Dockerfile @@ -14,6 +14,17 @@ ENV GIT_COMMIT=${GIT_COMMIT} ENV BUILD_NUMBER=${BUILD_NUMBER} RUN chmod +x build.sh && ./build.sh node /opt/startupcmdgen/startupcmdgen +# Download Node.js via nvm in a disposable stage +FROM ${BASE_IMAGE} AS nodeDownloader +ARG NODE20_VERSION +ENV NVM_DIR /usr/local/nvm +RUN apt-get update \ + && apt-get install -y --no-install-recommends curl ca-certificates \ + && mkdir -p $NVM_DIR \ + && curl -sL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash \ + && . $NVM_DIR/nvm.sh \ + && nvm install ${NODE20_VERSION} + #FROM oryxdevmcr.azurecr.io/private/oryx/oryx-node-run-base-bullseye:${BUILD_NUMBER} FROM ${BASE_IMAGE} @@ -37,12 +48,8 @@ ENV NPM_CONFIG_LOGLEVEL info ARG BUILD_DIR=/tmp/oryx/build ARG IMAGES_DIR=/tmp/oryx/images -COPY nodejs-bullseye-${NODE20_VERSION}.tar.gz . -RUN set -e \ - && mkdir -p /opt/nodejs/${NODE20_VERSION} \ - && tar -xzf nodejs-bullseye-${NODE20_VERSION}.tar.gz -C /usr/local \ - && rm nodejs-bullseye-${NODE20_VERSION}.tar.gz \ - && ln -s /usr/local/bin/node /usr/local/bin/nodejs +COPY --from=nodeDownloader /usr/local/nvm/versions/node/v${NODE20_VERSION}/ /usr/local/ +RUN ln -s /usr/local/bin/node /usr/local/bin/nodejs ARG NPM_VERSION ARG PM2_VERSION diff --git a/images/runtime/node/22/bookworm.Dockerfile b/images/runtime/node/22/bookworm.Dockerfile index f9caf7350b..5f827792c4 100644 --- a/images/runtime/node/22/bookworm.Dockerfile +++ b/images/runtime/node/22/bookworm.Dockerfile @@ -14,6 +14,17 @@ ENV GIT_COMMIT=${GIT_COMMIT} ENV BUILD_NUMBER=${BUILD_NUMBER} RUN chmod +x build.sh && ./build.sh node /opt/startupcmdgen/startupcmdgen +# Download Node.js via nvm in a disposable stage +FROM ${BASE_IMAGE} AS nodeDownloader +ARG NODE22_VERSION +ENV NVM_DIR /usr/local/nvm +RUN apt-get update \ + && apt-get install -y --no-install-recommends curl ca-certificates \ + && mkdir -p $NVM_DIR \ + && curl -sL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash \ + && . $NVM_DIR/nvm.sh \ + && nvm install ${NODE22_VERSION} + #FROM oryxdevmcr.azurecr.io/private/oryx/oryx-node-run-base-bookworm:${BUILD_NUMBER} FROM ${BASE_IMAGE} @@ -37,12 +48,8 @@ ENV NPM_CONFIG_LOGLEVEL info ARG BUILD_DIR=/tmp/oryx/build ARG IMAGES_DIR=/tmp/oryx/images -COPY nodejs-bookworm-${NODE22_VERSION}.tar.gz . -RUN set -e \ - && mkdir -p /opt/nodejs/${NODE22_VERSION} \ - && tar -xzf nodejs-bookworm-${NODE22_VERSION}.tar.gz -C /usr/local \ - && rm nodejs-bookworm-${NODE22_VERSION}.tar.gz \ - && ln -s /usr/local/bin/node /usr/local/bin/nodejs +COPY --from=nodeDownloader /usr/local/nvm/versions/node/v${NODE22_VERSION}/ /usr/local/ +RUN ln -s /usr/local/bin/node /usr/local/bin/nodejs ARG NPM_VERSION ARG PM2_VERSION diff --git a/images/runtime/node/22/bullseye.Dockerfile b/images/runtime/node/22/bullseye.Dockerfile index d0582ea238..c0b3689295 100644 --- a/images/runtime/node/22/bullseye.Dockerfile +++ b/images/runtime/node/22/bullseye.Dockerfile @@ -14,6 +14,17 @@ ENV GIT_COMMIT=${GIT_COMMIT} ENV BUILD_NUMBER=${BUILD_NUMBER} RUN chmod +x build.sh && ./build.sh node /opt/startupcmdgen/startupcmdgen +# Download Node.js via nvm in a disposable stage +FROM ${BASE_IMAGE} AS nodeDownloader +ARG NODE22_VERSION +ENV NVM_DIR /usr/local/nvm +RUN apt-get update \ + && apt-get install -y --no-install-recommends curl ca-certificates \ + && mkdir -p $NVM_DIR \ + && curl -sL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash \ + && . $NVM_DIR/nvm.sh \ + && nvm install ${NODE22_VERSION} + #FROM oryxdevmcr.azurecr.io/private/oryx/oryx-node-run-base-bullseye:${BUILD_NUMBER} FROM ${BASE_IMAGE} @@ -37,12 +48,8 @@ ENV NPM_CONFIG_LOGLEVEL info ARG BUILD_DIR=/tmp/oryx/build ARG IMAGES_DIR=/tmp/oryx/images -COPY nodejs-bullseye-${NODE22_VERSION}.tar.gz . -RUN set -e \ - && mkdir -p /opt/nodejs/${NODE22_VERSION} \ - && tar -xzf nodejs-bullseye-${NODE22_VERSION}.tar.gz -C /usr/local \ - && rm nodejs-bullseye-${NODE22_VERSION}.tar.gz \ - && ln -s /usr/local/bin/node /usr/local/bin/nodejs +COPY --from=nodeDownloader /usr/local/nvm/versions/node/v${NODE22_VERSION}/ /usr/local/ +RUN ln -s /usr/local/bin/node /usr/local/bin/nodejs ARG NPM_VERSION ARG PM2_VERSION diff --git a/images/runtime/node/24/noble.Dockerfile b/images/runtime/node/24/noble.Dockerfile index eed941ccff..bede45296d 100644 --- a/images/runtime/node/24/noble.Dockerfile +++ b/images/runtime/node/24/noble.Dockerfile @@ -15,6 +15,17 @@ ENV GIT_COMMIT=${GIT_COMMIT} ENV BUILD_NUMBER=${BUILD_NUMBER} RUN chmod +x build.sh && ./build.sh node /opt/startupcmdgen/startupcmdgen +# Download Node.js via nvm in a disposable stage +FROM ${BASE_IMAGE} AS nodeDownloader +ARG NODE24_VERSION +ENV NVM_DIR /usr/local/nvm +RUN apt-get update \ + && apt-get install -y --no-install-recommends curl ca-certificates \ + && mkdir -p $NVM_DIR \ + && curl -sL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash \ + && . $NVM_DIR/nvm.sh \ + && nvm install ${NODE24_VERSION} + #FROM oryxdevmcr.azurecr.io/private/oryx/oryx-node-run-base-bullseye:${BUILD_NUMBER} FROM ${BASE_IMAGE} @@ -38,18 +49,8 @@ ENV NPM_CONFIG_LOGLEVEL=info ARG BUILD_DIR=/tmp/oryx/build ARG IMAGES_DIR=/tmp/oryx/images -RUN set -e \ - && apt-get update \ - && apt-get install -y --no-install-recommends git make \ - && curl -sL https://git.io/n-install | bash -s -- -ny - \ - && ~/n/bin/n -d ${NODE24_VERSION} \ - && cp -r /usr/local/n/versions/node/${NODE24_VERSION}/* /usr/local/ \ - && rm -rf /usr/local/n \ - && rm -rf ~/n \ - && apt-get purge -y git make \ - && apt-get autoremove -y \ - && rm -rf /var/lib/apt/lists/* \ - && ln -s /usr/local/bin/node /usr/local/bin/nodejs +COPY --from=nodeDownloader /usr/local/nvm/versions/node/v${NODE24_VERSION}/ /usr/local/ +RUN ln -s /usr/local/bin/node /usr/local/bin/nodejs ARG NPM_VERSION ARG PM2_VERSION diff --git a/images/runtime/python/noble.Dockerfile b/images/runtime/python/noble.Dockerfile index b09d6b5223..bff6b19b60 100644 --- a/images/runtime/python/noble.Dockerfile +++ b/images/runtime/python/noble.Dockerfile @@ -17,10 +17,27 @@ ENV BUILD_NUMBER=${BUILD_NUMBER} ENV PATH_CA_CERTIFICATE="/etc/ssl/certs/ca-certificate.crt" RUN chmod +x build.sh && ./build.sh python /opt/startupcmdgen/startupcmdgen +# Build Python SDK from source in a disposable stage +FROM ${BASE_IMAGE} AS pythonSdkBuilder +ARG OS_FLAVOR +ARG PYTHON_FULL_VERSION +ARG PYTHON_VERSION +ENV PYTHON_VERSION=${PYTHON_FULL_VERSION} +COPY platforms/python/prereqs/build.sh /tmp/build.sh +COPY platforms/python/versions/${OS_FLAVOR}/versionsToBuild.txt /tmp/versionsToBuild.txt +COPY images/receiveGpgKeys.sh /tmp/receiveGpgKeys.sh +RUN chmod +x /tmp/build.sh /tmp/receiveGpgKeys.sh +RUN set -e \ + && mkdir -p /usr/src/python && cd /usr/src/python \ + && VERSION_LINE=$(grep "^${PYTHON_VERSION}," /tmp/versionsToBuild.txt) \ + && export GPG_KEY=$(echo "$VERSION_LINE" | cut -d',' -f2 | tr -d ' ') \ + && export PYTHON_SHA256=$(echo "$VERSION_LINE" | cut -d',' -f3 | tr -d ' ') \ + && export OS_FLAVOR=${OS_FLAVOR} \ + && /tmp/build.sh + FROM ${BASE_IMAGE} as main ARG IMAGES_DIR=/tmp/oryx/images -ARG BUILD_DIR=/tmp/oryx/build ARG OS_FLAVOR ENV OS_FLAVOR=${OS_FLAVOR} @@ -34,22 +51,15 @@ RUN apt-get update \ && rm -rf /var/lib/apt/lists/* ADD images ${IMAGES_DIR} -ADD build ${BUILD_DIR} RUN find ${IMAGES_DIR} -type f -iname "*.sh" -exec chmod +x {} \; -RUN find ${BUILD_DIR} -type f -iname "*.sh" -exec chmod +x {} \; ARG PYTHON_FULL_VERSION ARG PYTHON_VERSION ARG PYTHON_MAJOR_VERSION ENV PYTHON_VERSION ${PYTHON_FULL_VERSION} -COPY platforms/__common.sh /tmp/ -COPY platforms/python/prereqs/build.sh /tmp/ -COPY platforms/python/versions/${OS_FLAVOR}/versionsToBuild.txt /tmp/ -COPY images/receiveGpgKeys.sh /tmp/receiveGpgKeys.sh -RUN chmod +x /tmp/build.sh -RUN ${BUILD_DIR}/buildPythonSdkByVersion.sh $PYTHON_VERSION $OS_FLAVOR +COPY --from=pythonSdkBuilder /opt/python/${PYTHON_FULL_VERSION} /opt/python/${PYTHON_FULL_VERSION} RUN set -ex \ && cd /opt/python/ \ diff --git a/images/runtime/python/template.Dockerfile b/images/runtime/python/template.Dockerfile index 79d8ead84c..6335f7bf2a 100644 --- a/images/runtime/python/template.Dockerfile +++ b/images/runtime/python/template.Dockerfile @@ -16,10 +16,27 @@ ENV BUILD_NUMBER=${BUILD_NUMBER} ENV PATH_CA_CERTIFICATE="/etc/ssl/certs/ca-certificate.crt" RUN chmod +x build.sh && ./build.sh python /opt/startupcmdgen/startupcmdgen +# Build Python SDK from source in a disposable stage +FROM ${BASE_IMAGE} AS pythonSdkBuilder +ARG DEBIAN_FLAVOR +ARG PYTHON_FULL_VERSION +ARG PYTHON_VERSION +ENV PYTHON_VERSION=${PYTHON_FULL_VERSION} +COPY platforms/python/prereqs/build.sh /tmp/build.sh +COPY platforms/python/versions/${DEBIAN_FLAVOR}/versionsToBuild.txt /tmp/versionsToBuild.txt +COPY images/receiveGpgKeys.sh /tmp/receiveGpgKeys.sh +RUN chmod +x /tmp/build.sh /tmp/receiveGpgKeys.sh +RUN set -e \ + && mkdir -p /usr/src/python && cd /usr/src/python \ + && VERSION_LINE=$(grep "^${PYTHON_VERSION}," /tmp/versionsToBuild.txt) \ + && export GPG_KEY=$(echo "$VERSION_LINE" | cut -d',' -f2 | tr -d ' ') \ + && export PYTHON_SHA256=$(echo "$VERSION_LINE" | cut -d',' -f3 | tr -d ' ') \ + && export OS_FLAVOR=${DEBIAN_FLAVOR} \ + && /tmp/build.sh + FROM ${BASE_IMAGE} as main ARG IMAGES_DIR=/tmp/oryx/images -ARG BUILD_DIR=/tmp/oryx/build ARG SDK_STORAGE_BASE_URL_VALUE ARG DEBIAN_FLAVOR @@ -35,34 +52,15 @@ RUN apt-get update \ && rm -rf /var/lib/apt/lists/* ADD images ${IMAGES_DIR} -ADD build ${BUILD_DIR} RUN find ${IMAGES_DIR} -type f -iname "*.sh" -exec chmod +x {} \; -RUN find ${BUILD_DIR} -type f -iname "*.sh" -exec chmod +x {} \; ARG PYTHON_FULL_VERSION ARG PYTHON_VERSION ARG PYTHON_MAJOR_VERSION ENV PYTHON_VERSION ${PYTHON_FULL_VERSION} -RUN true -# COPY build/__pythonVersions.sh ${BUILD_DIR} -# RUN true -COPY platforms/__common.sh /tmp/ -RUN true -COPY platforms/python/prereqs/build.sh /tmp/ -RUN true -COPY platforms/python/versions/${DEBIAN_FLAVOR}/versionsToBuild.txt /tmp/ -RUN true -COPY images/receiveGpgKeys.sh /tmp/receiveGpgKeys.sh -RUN true - -RUN chmod +x /tmp/receiveGpgKeys.sh -RUN chmod +x /tmp/build.sh -RUN --mount=type=secret,id=oryx_sdk_storage_account_access_token \ - set -e \ - && export ORYX_SDK_STORAGE_ACCOUNT_ACCESS_TOKEN_PATH="/run/secrets/oryx_sdk_storage_account_access_token" \ - && ${BUILD_DIR}/buildPythonSdkByVersion.sh $PYTHON_VERSION $DEBIAN_FLAVOR +COPY --from=pythonSdkBuilder /opt/python/${PYTHON_FULL_VERSION} /opt/python/${PYTHON_FULL_VERSION} RUN set -ex \ && cd /opt/python/ \ diff --git a/platforms/nodejs/Dockerfile b/platforms/nodejs/Dockerfile index 60a02e170f..4929b0aec9 100644 --- a/platforms/nodejs/Dockerfile +++ b/platforms/nodejs/Dockerfile @@ -7,10 +7,11 @@ ENV VERSIONS_TO_BUILD_OVERRIDE=$VERSIONS_TO_BUILD_OVERRIDE RUN apt-get update \ && apt-get install -y --no-install-recommends \ - make \ jq \ && rm -rf /var/lib/apt/lists/* -RUN curl -sL https://git.io/n-install | bash -s -- -ny - +ENV NVM_DIR /usr/local/nvm +RUN mkdir -p $NVM_DIR \ + && curl -sL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash RUN mkdir -p /tmp/scripts COPY platforms/nodejs/build.sh /tmp/scripts diff --git a/platforms/nodejs/build.sh b/platforms/nodejs/build.sh index 94905cf2f3..2e2370a675 100644 --- a/platforms/nodejs/build.sh +++ b/platforms/nodejs/build.sh @@ -16,7 +16,7 @@ tarFileName=nodejs-$osFlavor-$version.tar.gz upgradeNpm() { local node_ver="$1" - local nodeDir="/usr/local/n/versions/node/$node_ver" + local nodeDir="$NVM_DIR/versions/node/v$node_ver" local nodeModulesDir="$nodeDir/lib/node_modules" local npm_ver=`jq -r .version $nodeModulesDir/npm/package.json` IFS='.' read -ra versionParts <<< "$npm_ver" @@ -32,8 +32,10 @@ upgradeNpm() { fi } -~/n/bin/n -d $version +export NVM_DIR="${NVM_DIR:-$HOME/.nvm}" +. "$NVM_DIR/nvm.sh" +nvm install $version upgradeNpm $version -cd /usr/local/n/versions/node/$version +cd $NVM_DIR/versions/node/v$version mkdir -p /tmp/compressedSdk/nodejs tar -zcf /tmp/compressedSdk/nodejs/$tarFileName .