From a6918175fd506b46bf2d8f899f4faa40e72296fb Mon Sep 17 00:00:00 2001 From: Tianon Gravi Date: Mon, 31 Jul 2017 16:48:09 -0700 Subject: [PATCH] Add explicit "jessie" and "alpine3.4" aliases --- .travis.yml | 39 ++++++---- 2.2/{alpine => alpine3.4}/Dockerfile | 0 2.2/{ => jessie}/Dockerfile | 0 2.2/{ => jessie}/onbuild/Dockerfile | 0 2.2/{ => jessie}/slim/Dockerfile | 0 2.3/{alpine => alpine3.4}/Dockerfile | 0 2.3/{ => jessie}/Dockerfile | 0 2.3/{ => jessie}/onbuild/Dockerfile | 0 2.3/{ => jessie}/slim/Dockerfile | 0 2.4/{alpine => alpine3.4}/Dockerfile | 0 2.4/{ => jessie}/Dockerfile | 0 2.4/{ => jessie}/onbuild/Dockerfile | 0 2.4/{ => jessie}/slim/Dockerfile | 0 Dockerfile-alpine.template | 2 +- ...ile.template => Dockerfile-debian.template | 2 +- Dockerfile-slim.template | 2 +- generate-stackbrew-library.sh | 78 ++++++++++++------- update.sh | 51 ++++++++---- 18 files changed, 113 insertions(+), 61 deletions(-) rename 2.2/{alpine => alpine3.4}/Dockerfile (100%) rename 2.2/{ => jessie}/Dockerfile (100%) rename 2.2/{ => jessie}/onbuild/Dockerfile (100%) rename 2.2/{ => jessie}/slim/Dockerfile (100%) rename 2.3/{alpine => alpine3.4}/Dockerfile (100%) rename 2.3/{ => jessie}/Dockerfile (100%) rename 2.3/{ => jessie}/onbuild/Dockerfile (100%) rename 2.3/{ => jessie}/slim/Dockerfile (100%) rename 2.4/{alpine => alpine3.4}/Dockerfile (100%) rename 2.4/{ => jessie}/Dockerfile (100%) rename 2.4/{ => jessie}/onbuild/Dockerfile (100%) rename 2.4/{ => jessie}/slim/Dockerfile (100%) rename Dockerfile.template => Dockerfile-debian.template (98%) diff --git a/.travis.yml b/.travis.yml index c163b2ce7..c9ca295a5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,29 +2,38 @@ language: bash services: docker env: - - VERSION=2.4 VARIANT= - - VERSION=2.4 VARIANT=slim - - VERSION=2.4 VARIANT=alpine - - VERSION=2.3 VARIANT= - - VERSION=2.3 VARIANT=slim - - VERSION=2.3 VARIANT=alpine - - VERSION=2.2 VARIANT= - - VERSION=2.2 VARIANT=slim - - VERSION=2.2 VARIANT=alpine + - VERSION=2.4 VARIANT=jessie + - VERSION=2.4 VARIANT=jessie/slim + - VERSION=2.4 VARIANT=alpine3.4 + - VERSION=2.3 VARIANT=jessie + - VERSION=2.3 VARIANT=jessie/slim + - VERSION=2.3 VARIANT=alpine3.4 + - VERSION=2.2 VARIANT=jessie + - VERSION=2.2 VARIANT=jessie/slim + - VERSION=2.2 VARIANT=alpine3.4 install: - git clone --depth 1 https://github.com/docker-library/official-images.git ~/official-images before_script: - env | sort - - cd "$VERSION" - - image="$(awk '$1 == "FROM" { print $2; exit }' onbuild/Dockerfile)${VARIANT:+-$VARIANT}" + - cd "$VERSION/$VARIANT" + - slash='/'; image="ruby:${VERSION}-${VARIANT//$slash/-}" script: - - travis_retry docker build -t "$image" "${VARIANT:-.}" - - ~/official-images/test/run.sh "$image" -# the "onbuild" variant has to happen with the base variant because it's FROM it - - true && [ "$VARIANT" ] || travis_retry docker build -t "${image}-onbuild" onbuild + - | + ( + set -Eeuo pipefail + set -x + travis_retry docker build -t "$image" . + ~/official-images/test/run.sh "$image" + if [ -d onbuild ]; then + onbuildFrom="$(awk 'toupper($1) == "FROM" { print $2; exit }' onbuild/Dockerfile)" + docker tag "$image" "$onbuildFrom" + docker build -t "$image-onbuild" onbuild + ~/official-images/test/run.sh "$image-onbuild" + fi + ) after_script: - docker images diff --git a/2.2/alpine/Dockerfile b/2.2/alpine3.4/Dockerfile similarity index 100% rename from 2.2/alpine/Dockerfile rename to 2.2/alpine3.4/Dockerfile diff --git a/2.2/Dockerfile b/2.2/jessie/Dockerfile similarity index 100% rename from 2.2/Dockerfile rename to 2.2/jessie/Dockerfile diff --git a/2.2/onbuild/Dockerfile b/2.2/jessie/onbuild/Dockerfile similarity index 100% rename from 2.2/onbuild/Dockerfile rename to 2.2/jessie/onbuild/Dockerfile diff --git a/2.2/slim/Dockerfile b/2.2/jessie/slim/Dockerfile similarity index 100% rename from 2.2/slim/Dockerfile rename to 2.2/jessie/slim/Dockerfile diff --git a/2.3/alpine/Dockerfile b/2.3/alpine3.4/Dockerfile similarity index 100% rename from 2.3/alpine/Dockerfile rename to 2.3/alpine3.4/Dockerfile diff --git a/2.3/Dockerfile b/2.3/jessie/Dockerfile similarity index 100% rename from 2.3/Dockerfile rename to 2.3/jessie/Dockerfile diff --git a/2.3/onbuild/Dockerfile b/2.3/jessie/onbuild/Dockerfile similarity index 100% rename from 2.3/onbuild/Dockerfile rename to 2.3/jessie/onbuild/Dockerfile diff --git a/2.3/slim/Dockerfile b/2.3/jessie/slim/Dockerfile similarity index 100% rename from 2.3/slim/Dockerfile rename to 2.3/jessie/slim/Dockerfile diff --git a/2.4/alpine/Dockerfile b/2.4/alpine3.4/Dockerfile similarity index 100% rename from 2.4/alpine/Dockerfile rename to 2.4/alpine3.4/Dockerfile diff --git a/2.4/Dockerfile b/2.4/jessie/Dockerfile similarity index 100% rename from 2.4/Dockerfile rename to 2.4/jessie/Dockerfile diff --git a/2.4/onbuild/Dockerfile b/2.4/jessie/onbuild/Dockerfile similarity index 100% rename from 2.4/onbuild/Dockerfile rename to 2.4/jessie/onbuild/Dockerfile diff --git a/2.4/slim/Dockerfile b/2.4/jessie/slim/Dockerfile similarity index 100% rename from 2.4/slim/Dockerfile rename to 2.4/jessie/slim/Dockerfile diff --git a/Dockerfile-alpine.template b/Dockerfile-alpine.template index cf4ff8e2f..da8df8a20 100644 --- a/Dockerfile-alpine.template +++ b/Dockerfile-alpine.template @@ -1,4 +1,4 @@ -FROM alpine:3.4 +FROM alpine:%%PLACEHOLDER%% # skip installing gem documentation RUN mkdir -p /usr/local/etc \ diff --git a/Dockerfile.template b/Dockerfile-debian.template similarity index 98% rename from Dockerfile.template rename to Dockerfile-debian.template index c43a4acdb..977840296 100644 --- a/Dockerfile.template +++ b/Dockerfile-debian.template @@ -1,4 +1,4 @@ -FROM buildpack-deps:jessie +FROM buildpack-deps:%%PLACEHOLDER%% # skip installing gem documentation RUN mkdir -p /usr/local/etc \ diff --git a/Dockerfile-slim.template b/Dockerfile-slim.template index 5f8d03694..3f3249182 100644 --- a/Dockerfile-slim.template +++ b/Dockerfile-slim.template @@ -1,4 +1,4 @@ -FROM debian:jessie +FROM debian:%%PLACEHOLDER%% RUN apt-get update \ && apt-get install -y --no-install-recommends \ diff --git a/generate-stackbrew-library.sh b/generate-stackbrew-library.sh index e94e9e081..b7265a3e9 100755 --- a/generate-stackbrew-library.sh +++ b/generate-stackbrew-library.sh @@ -1,16 +1,32 @@ -#!/bin/bash -set -eu +#!/usr/bin/env bash +set -Eeuo pipefail declare -A aliases=( [2.4]='2 latest' ) +defaultDebianSuite='stretch' +declare -A debianSuites=( + [2.2]='jessie' + [2.3]='jessie' + [2.4]='jessie' +) +defaultAlpineVersion='3.6' +declare -A alpineVersions=( + [2.2]='3.4' + [2.3]='3.4' + [2.4]='3.4' +) + self="$(basename "$BASH_SOURCE")" cd "$(dirname "$(readlink -f "$BASH_SOURCE")")" versions=( */ ) versions=( "${versions[@]%/}" ) +# sort version numbers with highest first +IFS=$'\n'; versions=( $(echo "${versions[*]}" | sort -rV) ); unset IFS + # get the most recent commit which modified any of "$@" fileCommit() { git log -1 --format='format:%H' HEAD -- "$@" @@ -37,7 +53,7 @@ getArches() { local repo="$1"; shift local officialImagesUrl='https://github.com/docker-library/official-images/raw/master/library/' - eval "declare -A -g parentRepoToArches=( $( + eval "declare -g -A parentRepoToArches=( $( find -name 'Dockerfile' -exec awk ' toupper($1) == "FROM" && $2 !~ /^('"$repo"'|scratch|microsoft\/[^:]+)(:|$)/ { print "'"$officialImagesUrl"'" $2 @@ -65,39 +81,47 @@ join() { } for version in "${versions[@]}"; do - commit="$(dirCommit "$version")" + debianSuite="${debianSuites[$version]:-$defaultDebianSuite}" + alpineVersion="${alpineVersions[$version]:-$defaultAlpineVersion}" - parent="$(awk 'toupper($1) == "FROM" { print $2 }' "$version/Dockerfile")" - arches="${parentRepoToArches[$parent]}" + for v in \ + {stretch,jessie}{,/slim,/onbuild} \ + alpine{3.6,3.4} \ + ; do + dir="$version/$v" + variant="$(basename "$v")" - fullVersion="$(git show "$commit":"$version/Dockerfile" | awk '$1 == "ENV" && $2 == "RUBY_VERSION" { print $3; exit }')" + [ -f "$dir/Dockerfile" ] || continue - versionAliases=( - $fullVersion - $version - ${aliases[$version]:-} - ) + commit="$(dirCommit "$dir")" - echo - cat <<-EOE - Tags: $(join ', ' "${versionAliases[@]}") - Architectures: $(join ', ' $arches) - GitCommit: $commit - Directory: $version - EOE + versionDockerfile="$dir/Dockerfile" + if [ "$variant" = 'onbuild' ]; then + versionDockerfile="$(dirname "$dir")/Dockerfile" + fi + fullVersion="$(git show "$commit":"$versionDockerfile" | awk '$1 == "ENV" && $2 == "RUBY_VERSION" { print $3; exit }')" - for variant in slim alpine onbuild; do - [ -f "$version/$variant/Dockerfile" ] || continue - - commit="$(dirCommit "$version/$variant")" + versionAliases=( + $fullVersion + $version + ${aliases[$version]:-} + ) variantAliases=( "${versionAliases[@]/%/-$variant}" ) + if [ "$variant" = "$debianSuite" ]; then + variantAliases+=( "${versionAliases[@]}" ) + elif [ "$variant" = "alpine${alpineVersion}" ]; then + variantAliases+=( "${versionAliases[@]/%/-alpine}" ) + fi variantAliases=( "${variantAliases[@]//latest-/}" ) - case "$variant" in - onbuild) variantArches="$arches" ;; + case "$v" in + */onbuild) + variantParent="$(awk 'toupper($1) == "FROM" { print $2 }' "$(dirname "$dir")/Dockerfile")" + variantArches="${parentRepoToArches[$variantParent]}" + ;; *) - variantParent="$(awk 'toupper($1) == "FROM" { print $2 }' "$version/$variant/Dockerfile")" + variantParent="$(awk 'toupper($1) == "FROM" { print $2 }' "$dir/Dockerfile")" variantArches="${parentRepoToArches[$variantParent]}" ;; esac @@ -107,7 +131,7 @@ for version in "${versions[@]}"; do Tags: $(join ', ' "${variantAliases[@]}") Architectures: $(join ', ' $variantArches) GitCommit: $commit - Directory: $version/$variant + Directory: $dir EOE done done diff --git a/update.sh b/update.sh index 65330bfc8..3333becfd 100755 --- a/update.sh +++ b/update.sh @@ -1,5 +1,5 @@ -#!/bin/bash -set -eo pipefail +#!/usr/bin/env bash +set -Eeuo pipefail cd "$(dirname "$(readlink -f "$BASH_SOURCE")")" @@ -24,7 +24,7 @@ for version in "${versions[@]}"; do if [ "$rcVersion" != "$version" ]; then rcGrepV= fi - + IFS=$'\n'; allVersions=( $(curl -fsSL --compressed "https://cache.ruby-lang.org/pub/ruby/$rcVersion/" \ | grep -E 'Ruby $fullVersion" -A 2 | awk -F '"' '$1 == " "$version/$variant/Dockerfile" - if [ "$variant" != 'onbuild' ]; then - travisEnv='\n - VERSION='"$version VARIANT=$variant$travisEnv" - fi + + for v in \ + alpine{3.4,3.6} \ + {jessie,stretch}{/slim,/onbuild,} \ + ; do + dir="$version/$v" + variant="$(basename "$v")" + + [ -d "$dir" ] || continue + + case "$variant" in + slim|onbuild|windowsservercore) template="$variant"; tag="$(basename "$(dirname "$dir")")" ;; + alpine*) template='alpine'; tag="${variant#alpine}" ;; + *) template='debian'; tag="$variant" ;; + esac + template="Dockerfile-${template}.template" + + sed -r \ + -e 's!%%VERSION%%!'"$version"'!g' \ + -e 's!%%FULL_VERSION%%!'"$fullVersion"'!g' \ + -e 's!%%SHA256%%!'"$shaVal"'!g' \ + -e 's!%%RUBYGEMS%%!'"$rubygems"'!g' \ + -e 's!%%BUNDLER%%!'"$bundler"'!g' \ + -e 's/^(FROM (debian|buildpack-deps|alpine)):.*/\1:'"$tag"'/' \ + "$template" > "$dir/Dockerfile" + + case "$v" in + */onbuild) ;; + *) + travisEnv='\n - VERSION='"$version VARIANT=$v$travisEnv" + ;; + esac done done