From 5e43361782515736e0525caf2971b98c43d61c0e Mon Sep 17 00:00:00 2001 From: girst Date: Sat, 16 Nov 2019 13:35:55 +0100 Subject: [PATCH] new release script inspired by https://blog.danslimmon.com/2019/07/15/do-nothing-scripting-the-key-to-gradual-automation/ and https://drewdevault.com/2019/10/12/how-to-fuck-up-releases.html care has been taken to make it posix compliant. however, it does by default depend on my fairly unusual setup to be present, which can however be easily overridden (see script for details). --- release.sh | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100755 release.sh diff --git a/release.sh b/release.sh new file mode 100755 index 0000000..5781397 --- /dev/null +++ b/release.sh @@ -0,0 +1,116 @@ +#!/bin/sh + +:<<'DOCS' +(helps to) prepare a new VimFx release. + +note: by default, my (@girst's) pretty idiosyncratic development environment is +assumed to be present (i'm pushing unstable commits to a second git-remote and +only push 'release-quality' commits to upstream). these are easily overwritten +by passing them in the calling environment. alternatively, changes to can be +temporarily ignored by git with `git update-index --assume-unchanged FILE`. + +inspired by https://drewdevault.com/2019/10/12/how-to-fuck-up-releases.html +DOCS + +# shadowable defaults: +: "${devel=origin/master}" +: "${release=upstream/master}" +: "${git_user=girst}" +: "${git_email=girst@users.noreply.github.com}" +: "${devel_url=https://github.com/girst/VimFx}" +: "${release_url=https://github.com/akhodakivskiy/VimFx}" + +set -e +export LC_ALL=C + +die() { + echo "$@" >&2 + exit 1 +} + +last_version=$(awk -F\" '$2 == "version" { print $4 ; exit }' package.json) +inc_version() { + echo "$last_version" | + awk -F. -vOFS=. '{ $ver++; while(ver++&2 + die "uncommited changes found, aborting.";} + +# make sure local repo is up to date (push to devel and pull from release first) +git remote update +git rev-list "HEAD...$devel" | grep -q . && # rebased? + die "local out of date (v. $devel), aborting. consider git push --force-with-lease ${devel%%/*}" +git rev-list "HEAD..$release" | grep -q . && # pulled? + die "local out of date (v. $release), aborting. consider issuing git pull --rebase ${release%%/*}" + +# at this point, we should save the current HEAD, so we can restore later on +old_head=$(git rev-parse HEAD) + +# lint coffee files +npm --silent run -- gulp --silent lint coffee || + die "linting errors detected, aborting." + +# update CHANGELOG.md and ask user to confirm changes +cat <&2 +read -r confirm +case "$confirm" in +[!yY]) git reset --hard "$old_head" + die "ok, aborting and resetting." +esac + +# push commits and tags to upstream repo +git push --follow-tags + +# open prepopulated release form (don't forget to upload xpi!) +tmpdir=$(mktemp -d) && cp build/VimFx.xpi "$tmpdir" && xdg-open "$tmpdir" & +firefox --new-window "https://github.com/akhodakivskiy/VimFx/releases/new?tag=v${next_version}&title=VimFx+v${next_version}&body=" & -- 2.39.3