diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2018-09-05 00:24:57 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2018-09-05 00:28:53 -0400 |
commit | a901af702443970a23768e8bf5af2ce8d8a9d627 (patch) | |
tree | dce07f28d0a5f2549791183130d86730ee276734 | |
parent | 1abc491c413010093c48e108d24f91e15080682e (diff) |
Add a `make-release` script
-rwxr-xr-x | make-release | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/make-release b/make-release new file mode 100755 index 0000000..8646bc1 --- /dev/null +++ b/make-release @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +# Copyright 2016-2018 Luke Shumaker +set -e + +branch=$(git name-rev --name-only HEAD) +if [[ $branch == master ]]; then + gitdir="$(git rev-parse --git-dir)" + workdir="${gitdir}/release" + exec 8>"${workdir}.lock" + flock 8 + + rm -rf -- "$workdir" + git worktree prune + git branch -D release.tmp &>/dev/null || true + + unset GIT_INDEX_FILE + git worktree add -b release.tmp "${gitdir}/release" master + ( + unset GIT_DIR GIT_WORK_TREE + cd "$workdir" + + go generate ./... + git ls-files -z '*/.gitignore' | xargs -0r rm -f -- + + git add . + git commit -m "Generate artifacts" + + git checkout release # Ensure it exists locally + git pull --no-edit -s ours # Avoid conflicts + + # What we want is + # + # git merge --no-edit -s theirs release.tmp + # + # Unfortunately, there is no 'theirs' strategy; so we + # have to switch branches and do it backward with the + # 'ours' strategry, switch back, then merge the merge + # commit. + git checkout release.tmp + git merge --no-edit -s ours release + git checkout release + git merge release.tmp + + git branch -d release.tmp + ) + rm -rf -- "$workdir" + git worktree prune +fi |