diff options
author | Aleksa Sarai <cyphar@cyphar.com> | 2017-01-13 20:31:57 +1100 |
---|---|---|
committer | Aleksa Sarai <cyphar@cyphar.com> | 2017-01-13 20:33:06 +1100 |
commit | c34d30fb49679a5bca90d2d3d37a6ce1dd6116e9 (patch) | |
tree | a9abe1333c74c47bf4ad6057fc48f1a7ee664b4c /generate-stackbrew-library.sh | |
parent | ff52578e4ffc04a591a04b390520211a29ec6985 (diff) |
*: rework update and generation scripts
This is necessary in order to have proper generation of variant and
version-based Dockerfiles from a single template.
Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
Diffstat (limited to 'generate-stackbrew-library.sh')
-rwxr-xr-x | generate-stackbrew-library.sh | 83 |
1 files changed, 74 insertions, 9 deletions
diff --git a/generate-stackbrew-library.sh b/generate-stackbrew-library.sh index bf54f977..e85a34ae 100755 --- a/generate-stackbrew-library.sh +++ b/generate-stackbrew-library.sh @@ -1,16 +1,81 @@ #!/bin/bash set -e +self="$(basename "$BASH_SOURCE")" cd "$(dirname "$(readlink -f "$BASH_SOURCE")")" -url='git://github.com/nextcloud/docker' +# Get the most recent commit which modified any of "$@". +fileCommit() { + git log -1 --format='format:%H' HEAD -- "$@" +} -commit="$(git log -1 --format='format:%H' -- Dockerfile $(awk 'toupper($1) == "COPY" { for (i = 2; i < NF; i++) { print $i } }' Dockerfile))" -fullVersion="$(grep -m1 'ENV NEXTCLOUD_VERSION ' ./Dockerfile | cut -d' ' -f3)" +# Get the most recent commit which modified "$1/Dockerfile" or any file that +# the Dockerfile copies into the rootfs (with COPY). +dockerfileCommit() { + local dir="$1"; shift + ( + cd "$dir"; + fileCommit Dockerfile \ + $(git show HEAD:./Dockerfile | awk ' + toupper($1) == "COPY" { + for (i = 2; i < NF; i++) + print $i; + } + ') + ) +} -echo '# maintainer: docker@nextcloud.com' -echo -echo "$fullVersion: ${url}@${commit}" -echo "${fullVersion%.*}: ${url}@${commit}" -echo "${fullVersion%.*.*}: ${url}@${commit}" -echo "latest: ${url}@${commit}" +# Header. +cat <<-EOH +# This file is generated via https://github.com/nextcloud/docker/blob/$(fileCommit "$self")/$self + +Maintainers: Nextcloud <docker@nextcloud.com> (@nextcloud), + Pierre Ozoux <pierre@ozoux.net> (@pierreozoux) +GitRepo: https://github.com/nextcloud/docker.git +EOH + +# prints "$2$1$3$1...$N" +join() { + local sep="$1"; shift + local out; printf -v out "${sep//%/%%}%s" "$@" + echo "${out#$sep}" +} + +latest=$(curl -sSL 'https://nextcloud.com/changelog/' |tac|tac \ + | grep -o "\(Version\|Release\)\s\+[[:digit:]]\+\(.[[:digit:]]\+\)\+" \ + | awk '{ print $2 }' \ + | sort -uV \ + | tail -1) + +# Generate each of the tags. +versions=( */ ) +versions=( "${versions[@]%/}" ) +for version in "${versions[@]}"; do + variants=( $version/*/ ) + variants=( $(for variant in "${variants[@]%/}"; do + echo "$(basename "$variant")" + done) ) + for variant in "${variants[@]}"; do + commit="$(dockerfileCommit "$version/$variant")" + fullversion="$(git show "$commit":"$version/$variant/Dockerfile" | awk '$1 == "ENV" && $2 == "NEXTCLOUD_VERSION" { print $3; exit }')" + + versionAliases=( "$fullversion" "${fullversion%.*}" "${fullversion%.*.*}" ) + if [ "$fullversion" = "$latest" ]; then + versionAliases+=( "latest" ) + fi + + variantAliases=( "${versionAliases[@]/%/-$variant}" ) + variantAliases=( "${variantAliases[@]//latest-}" ) + + if [ "$variant" = "apache" ]; then + variantAliases+=( "${versionAliases[@]}" ) + fi + + cat <<-EOE + + Tags: $(join ', ' "${variantAliases[@]}") + GitCommit: $commit + Directory: $version/$variant + EOE + done +done |