diff --git a/generate-stackbrew-library.sh b/generate-stackbrew-library.sh index 18a9080..8b166f2 100755 --- a/generate-stackbrew-library.sh +++ b/generate-stackbrew-library.sh @@ -1,46 +1,85 @@ #!/bin/bash -set -e +set -eu declare -A aliases=( [3.5]='3 latest' [2.7]='2' ) +self="$(basename "$BASH_SOURCE")" cd "$(dirname "$(readlink -f "$BASH_SOURCE")")" versions=( */ ) versions=( "${versions[@]%/}" ) -url='git://github.com/docker-library/python' -echo '# maintainer: InfoSiftr (@infosiftr)' +# get the most recent commit which modified any of "$@" +fileCommit() { + git log -1 --format='format:%H' HEAD -- "$@" +} + +# get the most recent commit which modified "$1/Dockerfile" or any file COPY'd from "$1/Dockerfile" +dirCommit() { + local dir="$1"; shift + ( + cd "$dir" + fileCommit \ + Dockerfile \ + $(git show HEAD:./Dockerfile | awk ' + toupper($1) == "COPY" { + for (i = 2; i < NF; i++) { + print $i + } + } + ') + ) +} + +cat <<-EOH +# this file is generated via https://github.com/docker-library/python/blob/$(fileCommit "$self")/$self + +Maintainers: Tianon Gravi (@tianon), + Joseph Ferguson (@yosifkit) +GitRepo: https://github.com/docker-library/python.git +EOH + +# prints "$2$1$3$1...$N" +join() { + local sep="$1"; shift + local out; printf -v out "${sep//%/%%}%s" "$@" + echo "${out#$sep}" +} for version in "${versions[@]}"; do - commit="$(cd "$version" && git log -1 --format='format:%H' -- Dockerfile $(awk 'toupper($1) == "COPY" { for (i = 2; i < NF; i++) { print $i } }' Dockerfile))" - fullVersion="$(grep -m1 'ENV PYTHON_VERSION ' "$version/Dockerfile" | cut -d' ' -f3)" - - versionAliases=() - while [ "$fullVersion" != "$version" -a "${fullVersion%[.a-z-]*}" != "$fullVersion" ]; do - versionAliases+=( $fullVersion ) - fullVersion="${fullVersion%[.a-z-]*}" - done - versionAliases+=( $version ${aliases[$version]} ) - + commit="$(dirCommit "$version")" + + fullVersion="$(git show "$commit":"$version/Dockerfile" | awk '$1 == "ENV" && $2 == "PYTHON_VERSION" { print $3; exit }')" + + versionAliases=( + $fullVersion + $version + ${aliases[$version]:-} + ) + echo - for va in "${versionAliases[@]}"; do - echo "$va: ${url}@${commit} $version" - done - - for variant in onbuild slim alpine wheezy; do + cat <<-EOE + Tags: $(join ', ' "${versionAliases[@]}") + GitCommit: $commit + Directory: $version + EOE + + for variant in slim alpine wheezy onbuild; do [ -f "$version/$variant/Dockerfile" ] || continue - commit="$(cd "$version/$variant" && git log -1 --format='format:%H' -- Dockerfile $(awk 'toupper($1) == "COPY" { for (i = 2; i < NF; i++) { print $i } }' Dockerfile))" + + commit="$(dirCommit "$version/$variant")" + + variantAliases=( "${versionAliases[@]/%/-$variant}" ) + variantAliases=( "${variantAliases[@]//latest-/}" ) + echo - for va in "${versionAliases[@]}"; do - if [ "$va" = 'latest' ]; then - va="$variant" - else - va="$va-$variant" - fi - echo "$va: ${url}@${commit} $version/$variant" - done + cat <<-EOE + Tags: $(join ', ' "${variantAliases[@]}") + GitCommit: $commit + Directory: $version/$variant + EOE done done