From e07910fe923b64d2a73be7dddd9b92665b0665f9 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Sat, 23 Dec 2017 11:57:50 +0100 Subject: [PATCH] add a script for creating release tags Signed-off-by: Jo-Philipp Wich --- maketag.sh | 177 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100755 maketag.sh diff --git a/maketag.sh b/maketag.sh new file mode 100755 index 0000000..30435a9 --- /dev/null +++ b/maketag.sh @@ -0,0 +1,177 @@ +#!/usr/bin/env bash + +git_author="$(git config user.name)" +git_email="$(git config user.email)" +gpg_keyid="" + +base_url="http://downloads.lede-project.org/releases" + +[ -f "./feeds.conf.default" ] || { + echo "Please execute as ./${0##*/}" >&2 + exit 1 +} + +usage() { + { + echo "" + echo "Usage: $0 [-i] [-a ] [-e ] \\" + echo " [-k ] [-p ] \\" + echo " [-u ] -v " + echo "" + echo "-i" + echo "Exit successfully if tag already exists" + echo "" + echo "-a Git author [$git_author]" + echo "Override the author name used for automated Git commits" + echo "" + echo "-e Git email [$git_email]" + echo "Override the email used for automated Git commits" + echo "" + echo "-k GPG key id [${gpg_keyid:-none}]" + echo "Enable GPG signing of tags with given GPG key id" + echo "" + echo "-p GPG passphrase file [none]" + echo "Use the passphrase stored in the given file for signing" + echo "" + echo "-u Download base url [$base_url]" + echo "Use the given URL as base for download repositories" + echo "" + exit 1 + } >&2 +} + +while getopts "a:e:ik:p:u:v:" opt; do + case "$opt" in + a) git_author="$OPTARG" ;; + e) git_email="$OPTARG" ;; + i) ignore_existing=1 ;; + k) gpg_keyid="${OPTARG#0x}" ;; + p) gpg_passfile="${OPTARG}" ;; + u) base_url="${OPTARG%/}" ;; + v) + case "$OPTARG" in + [0-9]*.[0-9]*.[0-9]*) + version="$OPTARG" + basever="$(echo "$version" | cut -d. -f1-2)" + ;; + *) + echo "Unexpected version format: $OPTARG" >&2 + exit 1 + ;; + esac + ;; + \?) + echo "Unexpected option: -$OPTARG" >&2 + usage + ;; + :) + echo "Missing argument for option: -$OPTARG" >&2 + usage + ;; + esac +done + +[ -n "$version" ] || usage + +if git rev-parse "v${version}^{tag}" >/dev/null 2>/dev/null; then + if [ -z "$ignore_existing" ]; then + echo "Tag v${version} already exists!" >&2 + exit 1 + fi + + exit 0 +fi + +revnum="$(./scripts/getver.sh)" +epoch="$(./scripts/get_source_date_epoch.sh)" + +branch="$(git symbolic-ref -q HEAD)" + +case "$branch" in + *-$basever) : ;; + *) + echo "Expecting current branch name to end in \"-$basever\"," \ + "but it is \"${branch#refs/heads/}\" - aborting." + + exit 1 + ;; +esac + +export GIT_AUTHOR_NAME="$git_author" +export GIT_AUTHOR_EMAIL="$git_email" +export GIT_COMMITTER_NAME="$git_author" +export GIT_COMMITTER_EMAIL="$git_email" + +while read type name url; do + case "$type" in + src-git) + case "$url" in + *^*) sha1="${url##*^}" ;; + *\;*) sha1="$(git ls-remote "${url%;*}" "${url##*;}")" ;; + *) sha1="$(git ls-remote "$url" "master")" ;; + esac + echo "$type $name ${url%[;^]*}${sha1:+^${sha1:0:40}}" + ;; + src-svn) + case "$url" in + *\;*) rev="${url##*;}" ;; + *) rev="$(svn log -l 1 "$url" | sed -ne '2s/ .*$//p')" ;; + esac + echo "$type $name ${url%;*}${rev:+;$rev}" + ;; + src-*) + echo "$type $name $url" + ;; + esac +done < feeds.conf.default > feeds.conf.tagged && \ + mv feeds.conf.tagged feeds.conf.default + +sed -e 's!\(VERSION_NUMBER:=\$(if .*\),[^,]*)!\1,'"$version"')!g' \ + -e 's!\(VERSION_CODE:=\$(if .*\),[^,]*)!\1,'"$revnum"')!g' \ + -e 's!\(VERSION_REPO:=\$(if .*\),[^,]*)!\1,'"$base_url/$version"')!g' \ + include/version.mk > include/version.tagged && \ + mv include/version.tagged include/version.mk + +sed -e 's!http://downloads.lede-project.org/[^"]*!'"$base_url/$version"'!g' \ + -e '/config VERSION_CODE_FILENAMES/ { :next; n; s!default y!default n!; t end; b next }; :end' \ + package/base-files/image-config.in > package/base-files/image-config.tagged && \ + mv package/base-files/image-config.tagged package/base-files/image-config.in + +echo "$revnum" > version && git add version +echo "$epoch" > version.date && git add version.date + +git commit -sm "LEDE v$version: adjust config defaults" \ + feeds.conf.default \ + include/version.mk \ + package/base-files/image-config.in \ + version version.date + + +if [ -n "$gpg_keyid" -a -n "$gpg_passfile" ]; then + gpg_script="$(tempfile)" + + cat <<-EOT > "$gpg_script" + #!/usr/bin/env bash + exec $(which gpg) --batch --passphrase-file $gpg_passfile "\$@" + EOT + + chmod 0700 "$gpg_script" +fi + +git ${gpg_script:+-c "gpg.program=$gpg_script"} tag \ + -a "v$version" \ + -m "LEDE v$version Release" \ + ${gpg_keyid:+-s -u "$gpg_keyid"} + +[ -n "$gpg_script" ] && rm -f "$gpg_script" + +git revert --no-edit HEAD +git commit --amend -sm "LEDE v$version: revert to branch defaults" + +git --no-pager show "v$version" + +cat <