diff --git a/generate-stackbrew-library.sh b/generate-stackbrew-library.sh index 22ab96db27..1a7c8413bb 100755 --- a/generate-stackbrew-library.sh +++ b/generate-stackbrew-library.sh @@ -1,25 +1,75 @@ #!/bin/bash -set -e +set -eu declare -A aliases=( [9.5]='9 latest' ) +self="$(basename "$BASH_SOURCE")" cd "$(dirname "$(readlink -f "$BASH_SOURCE")")" versions=( */ ) versions=( "${versions[@]%/}" ) -url='git://github.com/docker-library/postgres' -echo '# maintainer: InfoSiftr (@infosiftr)' +# 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 -- "$@" +} + +# 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/postgres/blob/$(fileCommit "$self")/$self + +Maintainers: Tianon Gravi (@tianon), + Joseph Ferguson (@yosifkit) +GitRepo: https://github.com/docker-library/postgres.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 PG_VERSION ' "$version/Dockerfile" | cut -d' ' -f3 | cut -d- -f1 | sed 's/~/-/g')" - versionAliases=( $fullVersion $version ${aliases[$version]} ) - - echo - for va in "${versionAliases[@]}"; do - echo "$va: ${url}@${commit} $version" + commit="$(dirCommit "$version")" + + fullVersion="$(git show "$commit":"$version/Dockerfile" | awk '$1 == "ENV" && $2 == "PG_VERSION" { gsub(/-.*$/, "", $3); gsub(/~/, "-", $3); print $3; exit }')" + + versionAliases=() + while [ "$fullVersion" != "$version" -a "${fullVersion%[.-]*}" != "$fullVersion" ]; do + versionAliases+=( $fullVersion ) + fullVersion="${fullVersion%[.-]*}" done + versionAliases+=( + $version + ${aliases[$version]:-} + ) + + echo + cat <<-EOE + Tags: $(join ', ' "${versionAliases[@]}") + GitCommit: $commit + Directory: $version + EOE done