From 06e58b18bf9506d88cd75f61491beafc953e8c75 Mon Sep 17 00:00:00 2001 From: Laurent Goderre Date: Mon, 27 Aug 2018 16:26:59 -0400 Subject: [PATCH] Added support for multiple slim versions of debian --- .travis.yml | 27 +++++++--- 10/{slim => jessie-slim}/Dockerfile | 8 +++ 10/stretch-slim/Dockerfile | 76 +++++++++++++++++++++++++++++ 6/{slim => jessie-slim}/Dockerfile | 8 +++ 6/stretch-slim/Dockerfile | 76 +++++++++++++++++++++++++++++ 8/{slim => jessie-slim}/Dockerfile | 8 +++ 8/stretch-slim/Dockerfile | 76 +++++++++++++++++++++++++++++ Dockerfile-slim.template | 10 +++- architectures | 12 ++--- functions.sh | 14 ++++++ generate-stackbrew-library.sh | 4 ++ update.sh | 5 +- 12 files changed, 310 insertions(+), 14 deletions(-) rename 10/{slim => jessie-slim}/Dockerfile (93%) create mode 100644 10/stretch-slim/Dockerfile rename 6/{slim => jessie-slim}/Dockerfile (93%) create mode 100644 6/stretch-slim/Dockerfile rename 8/{slim => jessie-slim}/Dockerfile (93%) create mode 100644 8/stretch-slim/Dockerfile diff --git a/.travis.yml b/.travis.yml index dfd43041e2..de1d5d9124 100644 --- a/.travis.yml +++ b/.travis.yml @@ -88,23 +88,33 @@ jobs: - stage: Build env: - NODE_VERSION: "10" - - VARIANT: "alpine" + - VARIANT: "jessie-slim" - stage: Build env: - NODE_VERSION: "10" - - VARIANT: "slim" + - VARIANT: "alpine" - stage: Build env: - NODE_VERSION: "10" - VARIANT: "stretch" + - stage: Build + env: + - NODE_VERSION: "10" + - VARIANT: "stretch-slim" + - stage: Build env: - NODE_VERSION: "6" - VARIANT: "jessie" + - stage: Build + env: + - NODE_VERSION: "6" + - VARIANT: "jessie-slim" + - stage: Build env: - NODE_VERSION: "6" @@ -118,18 +128,23 @@ jobs: - stage: Build env: - NODE_VERSION: "6" - - VARIANT: "slim" + - VARIANT: "stretch" - stage: Build env: - NODE_VERSION: "6" - - VARIANT: "stretch" + - VARIANT: "stretch-slim" - stage: Build env: - NODE_VERSION: "8" - VARIANT: "jessie" + - stage: Build + env: + - NODE_VERSION: "8" + - VARIANT: "jessie-slim" + - stage: Build env: - NODE_VERSION: "8" @@ -143,12 +158,12 @@ jobs: - stage: Build env: - NODE_VERSION: "8" - - VARIANT: "slim" + - VARIANT: "stretch" - stage: Build env: - NODE_VERSION: "8" - - VARIANT: "stretch" + - VARIANT: "stretch-slim" - stage: Build env: diff --git a/10/slim/Dockerfile b/10/jessie-slim/Dockerfile similarity index 93% rename from 10/slim/Dockerfile rename to 10/jessie-slim/Dockerfile index 5bc77da4b6..9922e333a0 100644 --- a/10/slim/Dockerfile +++ b/10/jessie-slim/Dockerfile @@ -1,8 +1,16 @@ FROM debian:jessie-slim +ARG DEBIAN_VERSION=debian:jessie-slim + RUN groupadd --gid 1000 node \ && useradd --uid 1000 --gid node --shell /bin/bash --create-home node +RUN echo "$DEBIAN_VERSION" | grep "jessie" > /dev/null || ( \ + apt-get update \ + && apt-get install -y gpg dirmngr --no-install-recommends \ + && rm -rf /var/lib/apt/lists/* \ +) + # gpg keys listed at https://github.com/nodejs/node#release-team RUN set -ex \ && for key in \ diff --git a/10/stretch-slim/Dockerfile b/10/stretch-slim/Dockerfile new file mode 100644 index 0000000000..a8b2f868b6 --- /dev/null +++ b/10/stretch-slim/Dockerfile @@ -0,0 +1,76 @@ +FROM debian:stretch-slim + +ARG DEBIAN_VERSION=debian:stretch-slim + +RUN groupadd --gid 1000 node \ + && useradd --uid 1000 --gid node --shell /bin/bash --create-home node + +RUN echo "$DEBIAN_VERSION" | grep "jessie" > /dev/null || ( \ + apt-get update \ + && apt-get install -y gpg dirmngr --no-install-recommends \ + && rm -rf /var/lib/apt/lists/* \ +) + +# gpg keys listed at https://github.com/nodejs/node#release-team +RUN set -ex \ + && for key in \ + 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \ + FD3A5288F042B6850C66B31F09FE44734EB7990E \ + 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \ + DD8F2338BAE7501E3DD5AC78C273792F7D83545D \ + C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \ + B9AE9905FFD7803F25714661B63B535A4C206CA9 \ + 56730D5401028683275BD23C23EFEFE93C4CFFFE \ + 77984A986EBC2AA786BC0F66B01FBB92821C587A \ + 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \ + ; do \ + gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \ + gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \ + gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \ + done + +ENV NODE_VERSION 10.9.0 + +RUN buildDeps='xz-utils' \ + && ARCH= && dpkgArch="$(dpkg --print-architecture)" \ + && case "${dpkgArch##*-}" in \ + amd64) ARCH='x64';; \ + ppc64el) ARCH='ppc64le';; \ + s390x) ARCH='s390x';; \ + arm64) ARCH='arm64';; \ + armhf) ARCH='armv7l';; \ + i386) ARCH='x86';; \ + *) echo "unsupported architecture"; exit 1 ;; \ + esac \ + && set -x \ + && apt-get update && apt-get install -y ca-certificates curl wget $buildDeps --no-install-recommends \ + && rm -rf /var/lib/apt/lists/* \ + && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \ + && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \ + && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \ + && grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \ + && tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \ + && rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \ + && apt-get purge -y --auto-remove $buildDeps \ + && ln -s /usr/local/bin/node /usr/local/bin/nodejs + +ENV YARN_VERSION 1.9.2 + +RUN set -ex \ + && for key in \ + 6A010C5166006599AA17F08146C2130DFD2497F5 \ + ; do \ + gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \ + gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \ + gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \ + done \ + && curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \ + && curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" \ + && gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \ + && mkdir -p /opt \ + && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ \ + && ln -s /opt/yarn-v$YARN_VERSION/bin/yarn /usr/local/bin/yarn \ + && ln -s /opt/yarn-v$YARN_VERSION/bin/yarnpkg /usr/local/bin/yarnpkg \ + && rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz + +CMD [ "node" ] diff --git a/6/slim/Dockerfile b/6/jessie-slim/Dockerfile similarity index 93% rename from 6/slim/Dockerfile rename to 6/jessie-slim/Dockerfile index 3e13b9e7f2..7aae392011 100644 --- a/6/slim/Dockerfile +++ b/6/jessie-slim/Dockerfile @@ -1,8 +1,16 @@ FROM debian:jessie-slim +ARG DEBIAN_VERSION=debian:jessie-slim + RUN groupadd --gid 1000 node \ && useradd --uid 1000 --gid node --shell /bin/bash --create-home node +RUN echo "$DEBIAN_VERSION" | grep "jessie" > /dev/null || ( \ + apt-get update \ + && apt-get install -y gpg dirmngr --no-install-recommends \ + && rm -rf /var/lib/apt/lists/* \ +) + # gpg keys listed at https://github.com/nodejs/node#release-team RUN set -ex \ && for key in \ diff --git a/6/stretch-slim/Dockerfile b/6/stretch-slim/Dockerfile new file mode 100644 index 0000000000..83ae430b2e --- /dev/null +++ b/6/stretch-slim/Dockerfile @@ -0,0 +1,76 @@ +FROM debian:stretch-slim + +ARG DEBIAN_VERSION=debian:stretch-slim + +RUN groupadd --gid 1000 node \ + && useradd --uid 1000 --gid node --shell /bin/bash --create-home node + +RUN echo "$DEBIAN_VERSION" | grep "jessie" > /dev/null || ( \ + apt-get update \ + && apt-get install -y gpg dirmngr --no-install-recommends \ + && rm -rf /var/lib/apt/lists/* \ +) + +# gpg keys listed at https://github.com/nodejs/node#release-team +RUN set -ex \ + && for key in \ + 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \ + FD3A5288F042B6850C66B31F09FE44734EB7990E \ + 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \ + DD8F2338BAE7501E3DD5AC78C273792F7D83545D \ + C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \ + B9AE9905FFD7803F25714661B63B535A4C206CA9 \ + 56730D5401028683275BD23C23EFEFE93C4CFFFE \ + 77984A986EBC2AA786BC0F66B01FBB92821C587A \ + 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \ + ; do \ + gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \ + gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \ + gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \ + done + +ENV NODE_VERSION 6.14.4 + +RUN buildDeps='xz-utils' \ + && ARCH= && dpkgArch="$(dpkg --print-architecture)" \ + && case "${dpkgArch##*-}" in \ + amd64) ARCH='x64';; \ + ppc64el) ARCH='ppc64le';; \ + s390x) ARCH='s390x';; \ + arm64) ARCH='arm64';; \ + armhf) ARCH='armv7l';; \ + i386) ARCH='x86';; \ + *) echo "unsupported architecture"; exit 1 ;; \ + esac \ + && set -x \ + && apt-get update && apt-get install -y ca-certificates curl wget $buildDeps --no-install-recommends \ + && rm -rf /var/lib/apt/lists/* \ + && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \ + && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \ + && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \ + && grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \ + && tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \ + && rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \ + && apt-get purge -y --auto-remove $buildDeps \ + && ln -s /usr/local/bin/node /usr/local/bin/nodejs + +ENV YARN_VERSION 1.6.0 + +RUN set -ex \ + && for key in \ + 6A010C5166006599AA17F08146C2130DFD2497F5 \ + ; do \ + gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \ + gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \ + gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \ + done \ + && curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \ + && curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" \ + && gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \ + && mkdir -p /opt \ + && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ \ + && ln -s /opt/yarn-v$YARN_VERSION/bin/yarn /usr/local/bin/yarn \ + && ln -s /opt/yarn-v$YARN_VERSION/bin/yarnpkg /usr/local/bin/yarnpkg \ + && rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz + +CMD [ "node" ] diff --git a/8/slim/Dockerfile b/8/jessie-slim/Dockerfile similarity index 93% rename from 8/slim/Dockerfile rename to 8/jessie-slim/Dockerfile index 5db309bcc5..7a07edf606 100644 --- a/8/slim/Dockerfile +++ b/8/jessie-slim/Dockerfile @@ -1,8 +1,16 @@ FROM debian:jessie-slim +ARG DEBIAN_VERSION=debian:jessie-slim + RUN groupadd --gid 1000 node \ && useradd --uid 1000 --gid node --shell /bin/bash --create-home node +RUN echo "$DEBIAN_VERSION" | grep "jessie" > /dev/null || ( \ + apt-get update \ + && apt-get install -y gpg dirmngr --no-install-recommends \ + && rm -rf /var/lib/apt/lists/* \ +) + # gpg keys listed at https://github.com/nodejs/node#release-team RUN set -ex \ && for key in \ diff --git a/8/stretch-slim/Dockerfile b/8/stretch-slim/Dockerfile new file mode 100644 index 0000000000..ad9931fe58 --- /dev/null +++ b/8/stretch-slim/Dockerfile @@ -0,0 +1,76 @@ +FROM debian:stretch-slim + +ARG DEBIAN_VERSION=debian:stretch-slim + +RUN groupadd --gid 1000 node \ + && useradd --uid 1000 --gid node --shell /bin/bash --create-home node + +RUN echo "$DEBIAN_VERSION" | grep "jessie" > /dev/null || ( \ + apt-get update \ + && apt-get install -y gpg dirmngr --no-install-recommends \ + && rm -rf /var/lib/apt/lists/* \ +) + +# gpg keys listed at https://github.com/nodejs/node#release-team +RUN set -ex \ + && for key in \ + 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \ + FD3A5288F042B6850C66B31F09FE44734EB7990E \ + 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \ + DD8F2338BAE7501E3DD5AC78C273792F7D83545D \ + C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \ + B9AE9905FFD7803F25714661B63B535A4C206CA9 \ + 56730D5401028683275BD23C23EFEFE93C4CFFFE \ + 77984A986EBC2AA786BC0F66B01FBB92821C587A \ + 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \ + ; do \ + gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \ + gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \ + gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \ + done + +ENV NODE_VERSION 8.11.4 + +RUN buildDeps='xz-utils' \ + && ARCH= && dpkgArch="$(dpkg --print-architecture)" \ + && case "${dpkgArch##*-}" in \ + amd64) ARCH='x64';; \ + ppc64el) ARCH='ppc64le';; \ + s390x) ARCH='s390x';; \ + arm64) ARCH='arm64';; \ + armhf) ARCH='armv7l';; \ + i386) ARCH='x86';; \ + *) echo "unsupported architecture"; exit 1 ;; \ + esac \ + && set -x \ + && apt-get update && apt-get install -y ca-certificates curl wget $buildDeps --no-install-recommends \ + && rm -rf /var/lib/apt/lists/* \ + && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \ + && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \ + && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \ + && grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \ + && tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \ + && rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \ + && apt-get purge -y --auto-remove $buildDeps \ + && ln -s /usr/local/bin/node /usr/local/bin/nodejs + +ENV YARN_VERSION 1.6.0 + +RUN set -ex \ + && for key in \ + 6A010C5166006599AA17F08146C2130DFD2497F5 \ + ; do \ + gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \ + gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \ + gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \ + done \ + && curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \ + && curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" \ + && gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \ + && mkdir -p /opt \ + && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ \ + && ln -s /opt/yarn-v$YARN_VERSION/bin/yarn /usr/local/bin/yarn \ + && ln -s /opt/yarn-v$YARN_VERSION/bin/yarnpkg /usr/local/bin/yarnpkg \ + && rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz + +CMD [ "node" ] diff --git a/Dockerfile-slim.template b/Dockerfile-slim.template index 7acdd44b67..bc82e987ae 100644 --- a/Dockerfile-slim.template +++ b/Dockerfile-slim.template @@ -1,8 +1,16 @@ -FROM debian:jessie-slim +FROM debian:name-slim + +ARG DEBIAN_VERSION=debian:name-slim RUN groupadd --gid 1000 node \ && useradd --uid 1000 --gid node --shell /bin/bash --create-home node +RUN echo "$DEBIAN_VERSION" | grep "jessie" > /dev/null || ( \ + apt-get update \ + && apt-get install -y gpg dirmngr --no-install-recommends \ + && rm -rf /var/lib/apt/lists/* \ +) + # gpg keys listed at https://github.com/nodejs/node#release-team RUN set -ex \ && for key in \ diff --git a/architectures b/architectures index 1a9b7a2dd8..a763582d69 100644 --- a/architectures +++ b/architectures @@ -1,8 +1,8 @@ bashbrew-arch variants arm32v6 alpine -arm32v7 jessie,onbuild,slim,stretch -arm64v8 jessie,alpine,onbuild,slim,stretch -amd64 jessie,alpine,onbuild,slim,stretch -i386 jessie,alpine,onbuild,slim,stretch -ppc64le jessie,alpine,onbuild,slim,stretch -s390x jessie,alpine,onbuild,slim,stretch +arm32v7 jessie,jessie-slim,onbuild,stretch,stretch-slim +arm64v8 jessie,jessie-slim,alpine,onbuild,stretch,stretch-slim +amd64 jessie,jessie-slim,alpine,onbuild,stretch,stretch-slim +i386 jessie,jessie-slim,alpine,onbuild,stretch,stretch-slim +ppc64le jessie,jessie-slim,alpine,onbuild,stretch,stretch-slim +s390x jessie,jessie-slim,alpine,onbuild,stretch,stretch-slim diff --git a/functions.sh b/functions.sh index 40de9345c4..203b08a0e8 100755 --- a/functions.sh +++ b/functions.sh @@ -183,6 +183,20 @@ function is_debian() { return 1 } +function is_debian_slim() { + local variant + variant=$1 + shift + + IFS=' ' read -ra debianVersions <<< "$(get_config "./" "debian_versions")" + for d in "${debianVersions[@]}"; do + if [ "${d}-slim" = "${variant}" ]; then + return 0 + fi + done + return 1 +} + function get_fork_name() { local version version=$1 diff --git a/generate-stackbrew-library.sh b/generate-stackbrew-library.sh index b40d7374f2..9e06c97b4f 100755 --- a/generate-stackbrew-library.sh +++ b/generate-stackbrew-library.sh @@ -94,6 +94,10 @@ for version in "${versions[@]}"; do variantAliases+=("${versionAliases[@]}") fi + if [ "${variant}" = "${default_variant}-slim" ]; then + variantAliases+=("slim") + fi + # Get supported architectures for a specific version and variant. # See details in function.sh IFS=' ' read -ra supportedArches <<< "$(get_supported_arches "${version}" "${variant}")" diff --git a/update.sh b/update.sh index 5598293b5e..8dd048ced5 100755 --- a/update.sh +++ b/update.sh @@ -163,6 +163,8 @@ function update_node_version() { sed -Ei -e "s/(alpine:)0.0/\\1${alpine_version}/" "${dockerfile}-tmp" elif is_debian "${variant}"; then sed -Ei -e "s/(buildpack-deps:)name/\\1${variant}/" "${dockerfile}-tmp" + elif is_debian_slim "${variant}"; then + sed -Ei -e "s/(debian:)name-slim/\\1${variant}/" "${dockerfile}-tmp" fi # Required for POSIX sed @@ -219,9 +221,10 @@ for version in "${versions[@]}"; do update_variant=$(in_variants_to_update "${variant}") template_file="${parentpath}/Dockerfile-${variant}.template" - if is_debian "${variant}"; then template_file="${parentpath}/Dockerfile-debian.template" + elif is_debian_slim "${variant}"; then + template_file="${parentpath}/Dockerfile-slim.template" fi if [ "${update_version}" -eq 0 ] && [ "${update_variant}" -eq 0 ]; then