chatai/docker-kong_v2.8.1/submit.sh

258 lines
5.5 KiB
Bash

#!/usr/bin/env bash
set -e
gawk --version &> /dev/null || {
echo "gawk is required to run this script."
exit 1
}
mode=
version=
force=
function usage() {
echo "usage: $0 <-p|-m> <version>"
echo " -p for patch release (x.y.Z)"
echo " -m for minor release (x.Y.0)"
echo " -r for release candidate (x.Y.0rcZ)"
echo "example: $0 -p 1.1.2"
}
while [ "$1" ]
do
case "$1" in
--help)
usage
exit 0
;;
-p)
mode=patch
;;
-r)
mode=rc
;;
-m)
mode=minor
;;
-f)
force=yes
;;
[0-9]*)
version=$1
;;
esac
shift
done
function red() {
echo -e "\033[1;31m$@\033[0m"
}
function die() {
red "*** $@"
echo "See also: $0 --help"
echo
exit 1
}
hub --version &> /dev/null || die "hub is not in PATH. Get it from https://github.com/github/hub"
if [ "$mode" = "" ]
then
die "Error: mode flag is mandatory"
fi
if ! [ "$version" ]
then
die "Error: missing version"
fi
git checkout master
git pull
if ! grep -q "$version" alpine/Dockerfile
then
if [[ "$force" = "yes" ]]
then
echo "Forcing to use the tag even though it is not in master."
git checkout "$version"
if ! grep -q "$version$" alpine/Dockerfile
then
die "Error: version in build script doesn't match required version."
fi
else
echo "****************************************"
echo "Error: this script should be run only after the"
echo "desired release is merged in master of docker-kong."
echo ""
echo "For making releases based on old versions,"
echo "Use -f to override and submit from the tag anyway."
echo "****************************************"
die "Failed."
fi
fi
xy=${version%.*}
z=${version#$xy.}
if [ "$mode" = "rc" ]
then
rc=${version#*rc}
z=${z%rc*}
fi
commit=$(git show "$version" | grep "^commit" | head -n 1 | cut -b8-48)
if [ "$mode" = "patch" ]
then
prev="$xy.$[z-1]"
prevcommit=$(git show "$prev" | grep "^commit" | head -n 1 | cut -b8-48)
elif [ "$mode" = "rc" -a "$rc" -gt 1 ]
then
prev="$xy.${z}rc$[rc-1]"
prevcommit=$(git show "$prev" | grep "^commit" | head -n 1 | cut -b8-48)
fi
rm -rf submit
mkdir submit
cd submit
git clone https://github.com/kong/official-images
cd official-images
git remote add upstream http://github.com/docker-library/official-images
git fetch upstream
git checkout master
git merge upstream/master
git checkout -b release/$version
if [ "$mode" = "patch" ]
then
sed "s|$prev-alpine|$version-alpine|;
s|$prev-ubuntu|$version-ubuntu|;
s|$prev,|$version,|;
s|$prevcommit|$commit|;
s|refs/tags/$prev|refs/tags/$version|" library/kong > library/kong.new
mv library/kong.new library/kong
elif [ "$mode" = "rc" -a "$rc" -gt 1 ]
then
sed "s|$prev-alpine|$version-alpine|;
s|$prev-ubuntu|$version-ubuntu|;
s|, ${xy}rc$[rc-1]|, ${xy}rc${rc}|;
s|$prev,|$version,|;
s|$prevcommit|$commit|;
s|refs/tags/$prev|refs/tags/$version|" library/kong > library/kong.new
mv library/kong.new library/kong
elif [ "$mode" = "rc" -a "$rc" -eq 1 ]
then
gawk '
BEGIN {
reset = 0
not_yet_first = 1
}
/^Tags/ {
if (not_yet_first == 1) {
not_yet_first = 0
before_first = 1
}
}
{
if (before_first == 1) {
v = "'$version'"
xy = "'$xy'"
commit = "'$commit'"
print "Tags: " v "-alpine, " v ", " xy ", alpine"
print "GitCommit: " commit
print "GitFetch: refs/tags/" v
print "Directory: alpine"
print "Architectures: amd64"
print ""
print "Tags: " v "-ubuntu"
print "GitCommit: " commit
print "GitFetch: refs/tags/" v
print "Directory: ubuntu"
print "Architectures: amd64, arm64v8"
print ""
before_first = 0
} else {
print
}
}
' library/kong > library/kong.new
mv library/kong.new library/kong
elif [ "$mode" = "minor" ]
then
gawk '
BEGIN {
reset = 0
not_yet_first = 1
}
/^Tags/ {
if (not_yet_first == 1) {
not_yet_first = 0
before_first = 1
}
}
/Tags: .*[0-9]rc[0-9].*/ {
in_rc_tag = 1
}
/^ *$/ {
if (in_rc_tag == 1) {
reset = 1
}
}
{
if (before_first == 1) {
v = "'$version'"
xy = "'$xy'"
commit = "'$commit'"
print "Tags: " v "-alpine, " v ", " xy ", alpine, latest"
print "GitCommit: " commit
print "GitFetch: refs/tags/" v
print "Directory: alpine"
print "Architectures: amd64, arm64v8"
print ""
print "Tags: " v "-ubuntu, " xy "-ubuntu, ubuntu"
print "GitCommit: " commit
print "GitFetch: refs/tags/" v
print "Directory: ubuntu"
print "Architectures: amd64, arm64v8"
print ""
before_first = 0
}
if (!(in_rc_tag == 1)) {
gsub(", latest", "")
gsub(", alpine", "")
gsub(", ubuntu", "")
print
}
if (reset == 1) {
in_rc_tag = 0
reset = 0
}
}
' library/kong > library/kong.new
mv library/kong.new library/kong
fi
echo "****************************************"
git diff
echo "****************************************"
echo "Everything looks all right? (y/n)"
echo "(Answering y will commit, push the branch, and submit the PR)"
read
if ! [ "$REPLY" == "y" ]
then
exit 1
fi
git commit -av -m "kong $version"
git push --set-upstream origin release/$version
hub pull-request -b docker-library:master -h "release/$version" -m "bump Kong to $version"