Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 32 additions & 23 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,42 +2,51 @@ language: bash
services: docker

env:
- VERSION=3.6 VARIANT=
- VERSION=3.6 VARIANT=slim
- VERSION=3.6 VARIANT=alpine
- VERSION=3.6 VARIANT=alpine3.6
- VERSION=3.6 VARIANT=stretch
- VERSION=3.5 VARIANT=
- VERSION=3.5 VARIANT=slim
- VERSION=3.5 VARIANT=alpine
- VERSION=3.4 VARIANT=
- VERSION=3.4 VARIANT=slim
- VERSION=3.4 VARIANT=alpine
- VERSION=3.6 VARIANT=jessie
- VERSION=3.6 VARIANT=jessie/slim
- VERSION=3.6 VARIANT=alpine3.6
- VERSION=3.6 VARIANT=alpine3.4
- VERSION=3.5 VARIANT=jessie
- VERSION=3.5 VARIANT=jessie/slim
- VERSION=3.5 VARIANT=alpine3.4
- VERSION=3.4 VARIANT=jessie
- VERSION=3.4 VARIANT=jessie/slim
- VERSION=3.4 VARIANT=wheezy
- VERSION=3.3 VARIANT=
- VERSION=3.3 VARIANT=slim
- VERSION=3.3 VARIANT=alpine
- VERSION=3.4 VARIANT=alpine3.4
- VERSION=3.3 VARIANT=jessie
- VERSION=3.3 VARIANT=jessie/slim
- VERSION=3.3 VARIANT=wheezy
- VERSION=2.7 VARIANT=
- VERSION=2.7 VARIANT=slim
- VERSION=2.7 VARIANT=alpine
- VERSION=2.7 VARIANT=alpine3.6
- VERSION=3.3 VARIANT=alpine3.4
- VERSION=2.7 VARIANT=stretch
- VERSION=2.7 VARIANT=jessie
- VERSION=2.7 VARIANT=jessie/slim
- VERSION=2.7 VARIANT=wheezy
- VERSION=2.7 VARIANT=alpine3.6
- VERSION=2.7 VARIANT=alpine3.4

install:
- git clone 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="python:${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
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
10 changes: 5 additions & 5 deletions Dockerfile-alpine.template
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM alpine:3.4
FROM alpine:%%PLACEHOLDER%%

# ensure local python is preferred over distribution python
ENV PATH /usr/local/bin:$PATH
Expand All @@ -17,7 +17,7 @@ ENV PYTHON_VERSION %%PLACEHOLDER%%
RUN set -ex \
&& apk add --no-cache --virtual .fetch-deps \
gnupg \
openssl \
libressl \
tar \
xz \
\
Expand All @@ -43,8 +43,8 @@ RUN set -ex \
linux-headers \
make \
ncurses-dev \
openssl \
openssl-dev \
libressl \
libressl-dev \
pax-utils \
readline-dev \
sqlite-dev \
Expand Down Expand Up @@ -98,7 +98,7 @@ ENV PYTHON_PIP_VERSION %%PLACEHOLDER%%

RUN set -ex; \
\
apk add --no-cache --virtual .fetch-deps openssl; \
apk add --no-cache --virtual .fetch-deps libressl; \
\
wget -O get-pip.py 'https://bootstrap.pypa.io/get-pip.py'; \
\
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile-debian.template
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM buildpack-deps:jessie
FROM buildpack-deps:%%PLACEHOLDER%%

# ensure local python is preferred over distribution python
ENV PATH /usr/local/bin:$PATH
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile-slim.template
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM debian:jessie
FROM debian:%%PLACEHOLDER%%

# ensure local python is preferred over distribution python
ENV PATH /usr/local/bin:$PATH
Expand Down
77 changes: 50 additions & 27 deletions generate-stackbrew-library.sh
Original file line number Diff line number Diff line change
@@ -1,18 +1,38 @@
#!/bin/bash
set -eu
#!/usr/bin/env bash
set -Eeuo pipefail

declare -A aliases=(
[3.6-rc]='rc'
[3.6]='3 latest'
[2.7]='2'
)

defaultDebianSuite='stretch'
declare -A debianSuites=(
[2.7]='jessie'
[3.3]='jessie'
[3.4]='jessie'
[3.5]='jessie'
[3.6]='jessie'
)
defaultAlpineVersion='3.6'
declare -A alpineVersions=(
[2.7]='3.4'
[3.3]='3.4'
[3.4]='3.4'
[3.5]='3.4'
[3.6]='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 -- "$@"
Expand All @@ -39,7 +59,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
Expand Down Expand Up @@ -67,29 +87,12 @@ join() {
}

for version in "${versions[@]}"; do
commit="$(dirCommit "$version")"

parent="$(awk 'toupper($1) == "FROM" { print $2 }' "$version/Dockerfile")"
arches="${parentRepoToArches[$parent]}"

fullVersion="$(git show "$commit":"$version/Dockerfile" | awk '$1 == "ENV" && $2 == "PYTHON_VERSION" { print $3; exit }')"

versionAliases=(
$fullVersion
$version
${aliases[$version]:-}
)

echo
cat <<-EOE
Tags: $(join ', ' "${versionAliases[@]}")
Architectures: $(join ', ' $arches)
GitCommit: $commit
Directory: $version
EOE
debianSuite="${debianSuites[$version]:-$defaultDebianSuite}"
alpineVersion="${alpineVersions[$version]:-$defaultAlpineVersion}"

for v in \
slim alpine alpine3.6 wheezy onbuild \
{stretch,jessie,wheezy}{,/slim,/onbuild} \
alpine{3.6,3.4} \
windows/windowsservercore windows/nanoserver \
; do
dir="$version/$v"
Expand All @@ -99,14 +102,34 @@ for version in "${versions[@]}"; do

commit="$(dirCommit "$dir")"

versionDockerfile="$dir/Dockerfile"
if [ "$variant" = 'onbuild' ]; then
versionDockerfile="$(dirname "$dir")/Dockerfile"
fi
fullVersion="$(git show "$commit":"$versionDockerfile" | awk '$1 == "ENV" && $2 == "PYTHON_VERSION" { print $3; exit }')"

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 "$v" in
windows/*) variantArches='windows-amd64' ;;
onbuild) variantArches="$arches" ;;
*/onbuild)
variantParent="$(awk 'toupper($1) == "FROM" { print $2 }' "$(dirname "$dir")/Dockerfile")"
variantArches="${parentRepoToArches[$variantParent]}"
;;
*)
variantParent="$(awk 'toupper($1) == "FROM" { print $2 }' "$version/$v/Dockerfile")"
variantParent="$(awk 'toupper($1) == "FROM" { print $2 }' "$dir/Dockerfile")"
variantArches="${parentRepoToArches[$variantParent]}"
;;
esac
Expand All @@ -118,6 +141,6 @@ for version in "${versions[@]}"; do
GitCommit: $commit
Directory: $dir
EOE
[ "$variant" = "$v" ] || echo "Constraints: $variant"
[[ "$v" == windows/* ]] && echo "Constraints: $variant"
done
done
98 changes: 45 additions & 53 deletions update.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
set -Eeuo pipefail
shopt -s nullglob

Expand Down Expand Up @@ -80,64 +80,56 @@ for version in "${versions[@]}"; do
echo
} >&2
exit 1
else
if [[ "$version" != 2.* ]]; then
for variant in \
debian \
alpine \
slim \
onbuild \
windows/windowsservercore \
; do
if [ "$variant" = 'debian' ]; then
dir="$version"
else
dir="$version/$variant"
variant="$(basename "$variant")"
fi
[ -d "$dir" ] || continue
template="Dockerfile-$variant.template"
{ generated_warning; cat "$template"; } > "$dir/Dockerfile"
done
fi
(
set -x
sed -ri \
-e 's/^(ENV GPG_KEY) .*/\1 '"${gpgKeys[$rcVersion]}"'/' \
-e 's/^(ENV PYTHON_VERSION) .*/\1 '"$fullVersion"'/' \
-e 's/^(ENV PYTHON_RELEASE) .*/\1 '"${fullVersion%%[a-z]*}"'/' \
-e 's/^(ENV PYTHON_PIP_VERSION) .*/\1 '"$pipVersion"'/' \
-e 's/^(FROM python):.*/\1:'"$version"'/' \
"$version"/{,*/,*/*/}Dockerfile
)
fi
for variant in wheezy stretch alpine3.6 alpine slim ''; do
[ -d "$version/$variant" ] || continue

case "$variant" in
alpine3.6)
sed -r \
-e 's!(alpine):3.4!\1:3.6!g' \
-e 's!openssl!libressl!g' \
"$version/alpine/Dockerfile" > "$version/$variant/Dockerfile"
;;
echo "$version: $fullVersion"

wheezy|stretch)
sed -r \
-e "s!(buildpack-deps|debian):jessie!\1:${variant}!g" \
"$version/Dockerfile" > "$version/$variant/Dockerfile"
if [ "$variant" = 'wheezy' ]; then
sed -ri -e 's/dpkg-architecture --query /dpkg-architecture -q/g' "$version/$variant/Dockerfile"
fi
;;
for v in \
alpine{3.4,3.6} \
{wheezy,jessie,stretch}{/slim,/onbuild,} \
windows/{windowsservercore,nanoserver} \
; 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"

travisEnv='\n - VERSION='"$version VARIANT=$variant$travisEnv"
done
for winVariant in windowsservercore nanoserver; do
if [ -d "$version/windows/$winVariant" ]; then
appveyorEnv='\n - version: '"$version"'\n variant: '"$winVariant$appveyorEnv"
if [[ "$version" == 2.* ]]; then
echo " TODO: vimdiff ${versions[-1]}/$v/Dockerfile $version/$v/Dockerfile"
else
{ generated_warning; cat "$template"; } > "$dir/Dockerfile"
fi

sed -ri \
-e 's/^(ENV GPG_KEY) .*/\1 '"${gpgKeys[$rcVersion]}"'/' \
-e 's/^(ENV PYTHON_VERSION) .*/\1 '"$fullVersion"'/' \
-e 's/^(ENV PYTHON_RELEASE) .*/\1 '"${fullVersion%%[a-z]*}"'/' \
-e 's/^(ENV PYTHON_PIP_VERSION) .*/\1 '"$pipVersion"'/' \
-e 's/^(FROM python):.*/\1:'"$version"'/' \
-e 's/^(FROM (debian|buildpack-deps|alpine)):.*/\1:'"$tag"'/' \
"$dir/Dockerfile"

case "$variant" in
alpine3.4) sed -ri -e 's/libressl/openssl/g' "$dir/Dockerfile" ;;
wheezy) sed -ri -e 's/dpkg-architecture --query /dpkg-architecture -q/g' "$dir/Dockerfile" ;;
esac

case "$v" in
*/onbuild) ;;
windows/*)
appveyorEnv='\n - version: '"$version"'\n variant: '"$variant$appveyorEnv"
;;
*)
travisEnv='\n - VERSION='"$version VARIANT=$v$travisEnv"
;;
esac
done
done

Expand Down