summaryrefslogtreecommitdiffstats
path: root/generate-stackbrew-library.sh
diff options
context:
space:
mode:
authorAleksa Sarai <cyphar@cyphar.com>2017-01-13 20:31:57 +1100
committerAleksa Sarai <cyphar@cyphar.com>2017-01-13 20:33:06 +1100
commitc34d30fb49679a5bca90d2d3d37a6ce1dd6116e9 (patch)
treea9abe1333c74c47bf4ad6057fc48f1a7ee664b4c /generate-stackbrew-library.sh
parentff52578e4ffc04a591a04b390520211a29ec6985 (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-xgenerate-stackbrew-library.sh83
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