release.sh: Automate release process.

This commit is contained in:
Justin M. Keyes 2016-04-24 02:00:39 -04:00
parent ab63f5d934
commit 4f5a18237b
3 changed files with 101 additions and 5 deletions

View File

@ -1,6 +1,5 @@
- Neovim version:
- [ ] Vim behaves differently?
- Vim version:
- [ ] Vim behaves differently? Vim version:
- Operating system/version:
- Terminal name/version:
- `$TERM`:
@ -9,7 +8,9 @@
### Expected behaviour
### Steps to reproduce using `nvim -u NONE`
### Steps to reproduce using `nvim -u NORC`
1. `nvim -u NONE`
2.
```
nvim -u NORC
```

32
scripts/git-log-pretty-since.sh Executable file
View File

@ -0,0 +1,32 @@
#!/usr/bin/env bash
# Shows a log with changes grouped next to their merge-commit.
#
# Parameters:
# $1 "since" commit
# $2 "inverse match" regex pattern
set -e
set -u
set -o pipefail
__SINCE=$1
__INVMATCH=$2
is_merge_commit() {
git rev-parse $1 >/dev/null 2>&1 \
|| { echo "ERROR: invalid commit: $1"; exit 1; }
git log $1^2 >/dev/null 2>&1 && return 0 || return 1
}
for commit in $(git log --format='%H' --first-parent --since $__SINCE); do
if is_merge_commit ${commit} ; then
if [ -z "$__INVMATCH" ] || ! git log --oneline ${commit}^1..${commit}^2 \
| grep -E "$__INVMATCH" >/dev/null 2>&1 ; then
git log -1 --oneline ${commit}
git log --format=' %h %s' ${commit}^1..${commit}^2
fi
else
git log -1 --oneline ${commit}
fi
done

63
scripts/release.sh Executable file
View File

@ -0,0 +1,63 @@
#!/usr/bin/env bash
# Performs steps to tag a release.
#
# Steps:
# Create the "release" commit:
# - CMakeLists.txt: Unset NVIM_VERSION_PRERELEASE
# - Tag the commit.
# Create the "version bump" commit:
# - CMakeLists.txt: Set NVIM_VERSION_PRERELEASE to "-dev"
#
# Manual steps:
# - CMakeLists.txt: Bump NVIM_VERSION_* as appropriate.
# - git push --follow-tags
set -e
set -u
set -o pipefail
cd "$(git rev-parse --show-toplevel)"
__LAST_TAG=$(git describe --abbrev=0)
[ -z "$__LAST_TAG" ] && { echo 'ERROR: no tag found'; exit 1; }
__VERSION_MAJOR=$(grep 'set(NVIM_VERSION_MAJOR' CMakeLists.txt\
|sed -r 's/.*NVIM_VERSION_MAJOR ([[:digit:]]).*/\1/')
__VERSION_MINOR=$(grep 'set(NVIM_VERSION_MINOR' CMakeLists.txt\
|sed -r 's/.*NVIM_VERSION_MINOR ([[:digit:]]).*/\1/')
__VERSION_PATCH=$(grep 'set(NVIM_VERSION_PATCH' CMakeLists.txt\
|sed -r 's/.*NVIM_VERSION_PATCH ([[:digit:]]).*/\1/')
__VERSION="${__VERSION_MAJOR}.${__VERSION_MINOR}.${__VERSION_PATCH}"
{ [ -z "$__VERSION_MAJOR" ] || [ -z "$__VERSION_MINOR" ] || [ -z "$__VERSION_PATCH" ]; } \
&& { echo "ERROR: version parse failed: '${__VERSION}'"; exit 1; }
__RELEASE_MSG="NVIM v${__VERSION}
Features:
Fixes:
Changes:
"
__BUMP_MSG="version bump"
echo "Most recent tag: ${__LAST_TAG}"
echo "Release version: ${__VERSION}"
sed -i -r 's/(NVIM_VERSION_PRERELEASE) "-dev"/\1 ""/' CMakeLists.txt
echo "Building changelog since ${__LAST_TAG}..."
__CHANGELOG="$(./scripts/git-log-pretty-since.sh $__LAST_TAG 'vim-patch:\S')"
git add CMakeLists.txt
git commit --edit -m "${__RELEASE_MSG} ${__CHANGELOG}"
git tag -a v${__VERSION} -m "NVIM v${__VERSION}"
sed -i -r 's/(NVIM_VERSION_PRERELEASE) ""/\1 "-dev"/' CMakeLists.txt
nvim -c '/NVIM_VERSION' -c 'echo "Update version numbers"' CMakeLists.txt
git add CMakeLists.txt
git commit -m "$__BUMP_MSG"
echo "
Next steps:
- Double-check NVIM_VERSION_* in CMakeLists.txt
- git push --follow-tags
- update website: index.html"