aboutsummaryrefslogtreecommitdiff
path: root/scripts/release.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/release.sh')
-rwxr-xr-xscripts/release.sh82
1 files changed, 59 insertions, 23 deletions
diff --git a/scripts/release.sh b/scripts/release.sh
index 67738ccc96..fb266ad154 100755
--- a/scripts/release.sh
+++ b/scripts/release.sh
@@ -1,63 +1,99 @@
-#!/bin/sh
+#!/usr/bin/env bash
+# Usage:
+# ./scripts/release.sh
+# ./scripts/release.sh --use-current-commit
+# ./scripts/release.sh --only-bump
+#
# Performs steps to tag a release.
#
# Steps:
# Create the "release" commit:
# - CMakeLists.txt: Unset NVIM_VERSION_PRERELEASE
+# - CMakeLists.txt: Unset NVIM_API_PRERELEASE
+# - Create test/functional/fixtures/api_level_N.mpack
# - 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
+ARG1=${1:-no}
+
+__sed=$( [ "$(uname)" = Darwin ] && echo 'sed -E' || echo 'sed -r' )
+
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/')
+ |$__sed 's/.*NVIM_VERSION_MAJOR ([[:digit:]]).*/\1/')
__VERSION_MINOR=$(grep 'set(NVIM_VERSION_MINOR' CMakeLists.txt\
- |sed -r 's/.*NVIM_VERSION_MINOR ([[:digit:]]).*/\1/')
+ |$__sed 's/.*NVIM_VERSION_MINOR ([[:digit:]]).*/\1/')
__VERSION_PATCH=$(grep 'set(NVIM_VERSION_PATCH' CMakeLists.txt\
- |sed -r 's/.*NVIM_VERSION_PATCH ([[:digit:]]).*/\1/')
+ |$__sed 's/.*NVIM_VERSION_PATCH ([[:digit:]]).*/\1/')
__VERSION="${__VERSION_MAJOR}.${__VERSION_MINOR}.${__VERSION_PATCH}"
+__API_LEVEL=$(grep 'set(NVIM_API_LEVEL ' CMakeLists.txt\
+ |$__sed 's/.*NVIM_API_LEVEL ([[:digit:]]).*/\1/')
{ [ -z "$__VERSION_MAJOR" ] || [ -z "$__VERSION_MINOR" ] || [ -z "$__VERSION_PATCH" ]; } \
&& { echo "ERROR: version parse failed: '${__VERSION}'"; exit 1; }
__RELEASE_MSG="NVIM v${__VERSION}
-Features:
+FEATURES:
-Fixes:
+FIXES:
-Changes:
+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}"
+_do_release_commit() {
+ $__sed -i.bk 's/(NVIM_VERSION_PRERELEASE) "-dev"/\1 ""/' CMakeLists.txt
+ if grep '(NVIM_API_PRERELEASE true)' CMakeLists.txt > /dev/null; then
+ $__sed -i.bk 's/(NVIM_API_PRERELEASE) true/\1 false/' CMakeLists.txt
+ build/bin/nvim --api-info > test/functional/fixtures/api_level_$__API_LEVEL.mpack
+ git add test/functional/fixtures/api_level_$__API_LEVEL.mpack
+ fi
+
+ if ! test "$ARG1" = '--use-current-commit' ; then
+ echo "Building changelog since ${__LAST_TAG}..."
+ __CHANGELOG="$(./scripts/git-log-pretty-since.sh "$__LAST_TAG" 'vim-patch:[^[:space:]]')"
+
+ git add CMakeLists.txt
+ git commit --edit -m "${__RELEASE_MSG} ${__CHANGELOG}"
+ fi
+
+ git tag --sign -a v"${__VERSION}" -m "NVIM v${__VERSION}"
+}
+
+_do_bump_commit() {
+ $__sed -i.bk 's/(NVIM_VERSION_PRERELEASE) ""/\1 "-dev"/' CMakeLists.txt
+ $__sed -i.bk 's/set\((NVIM_VERSION_PATCH) [[:digit:]]/set(\1 ?/' CMakeLists.txt
+ nvim +'/NVIM_VERSION' +10new +'exe "norm! iUpdate version numbers!!!\<CR>"' \
+ +'norm! 10.' CMakeLists.txt
+
+ git add CMakeLists.txt
+ git commit -m "$__BUMP_MSG"
-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"
+ rm CMakeLists.txt.bk || true
+}
+if ! test "$ARG1" = '--only-bump' ; then
+ _do_release_commit
+fi
+_do_bump_commit
echo "
Next steps:
- Double-check NVIM_VERSION_* in CMakeLists.txt
- - git push --follow-tags
- - update website: index.html"
+ - Push the tag:
+ git push --follow-tags
+ - Empty-merge (if this is a maintenance release):
+ git checkout upstream/master
+ git merge -s ours upstream/release-x.y
+ - Update website: index.html"