2016-08-21 21:23:48 -07:00
|
|
|
#!/usr/bin/env bash
|
2016-04-23 23:00:39 -07:00
|
|
|
|
2018-06-10 23:58:54 -07:00
|
|
|
# Usage:
|
|
|
|
# ./scripts/release.sh
|
|
|
|
# ./scripts/release.sh --use-current-commit
|
|
|
|
# ./scripts/release.sh --only-bump
|
|
|
|
#
|
2016-04-23 23:00:39 -07:00
|
|
|
# Performs steps to tag a release.
|
|
|
|
#
|
|
|
|
# Steps:
|
|
|
|
# Create the "release" commit:
|
|
|
|
# - CMakeLists.txt: Unset NVIM_VERSION_PRERELEASE
|
api: Nvim version, API level #5386
The API level is disconnected from the NVIM version. The API metadata
holds the current API level, and the lowest backwards-compatible level
supported by this instance.
Release 0.1.6 will be the first release reporting the Nvim version and
API level.
metadata['version'] = {
major: 0,
minor: 1,
patch: 6,
prerelease: true,
api_level: 1,
api_compatible: 0,
}
The API level may remain unchanged across Neovim releases if the API has
not changed.
When changing the API the CMake variable NVIM_API_PRERELEASE is set to
true, and NVIM_API_CURRENT/NVIM_API_COMPATIBILITY are incremented
accordingly.
The functional tests check the API table against fixtures of past
versions of Neovim. It compares all the functions in the old table with
the new one, it does ignore some metadata attributes that do not alter
the function signature or were removed since 0.1.5. Currently the only
fixture is 0.mpack, generated from Neovim 0.1.5 with nvim --api-info.
2016-09-25 10:46:37 -07:00
|
|
|
# - CMakeLists.txt: Unset NVIM_API_PRERELEASE
|
2018-06-10 15:46:49 -07:00
|
|
|
# - Create test/functional/fixtures/api_level_N.mpack
|
2016-04-23 23:00:39 -07:00
|
|
|
# - Tag the commit.
|
|
|
|
# Create the "version bump" commit:
|
|
|
|
# - CMakeLists.txt: Set NVIM_VERSION_PRERELEASE to "-dev"
|
|
|
|
|
|
|
|
set -e
|
|
|
|
set -u
|
|
|
|
set -o pipefail
|
|
|
|
|
2018-06-10 23:58:54 -07:00
|
|
|
ARG1=${1:-no}
|
2017-05-01 12:04:13 -07:00
|
|
|
|
2016-08-25 23:53:07 -07:00
|
|
|
__sed=$( [ "$(uname)" = Darwin ] && echo 'sed -E' || echo 'sed -r' )
|
|
|
|
|
2016-04-23 23:00:39 -07:00
|
|
|
cd "$(git rev-parse --show-toplevel)"
|
|
|
|
|
2019-09-14 17:09:29 -07:00
|
|
|
__DATE=$(date +'%Y-%m-%d')
|
2016-04-23 23:00:39 -07:00
|
|
|
__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\
|
2016-08-25 23:53:07 -07:00
|
|
|
|$__sed 's/.*NVIM_VERSION_MAJOR ([[:digit:]]).*/\1/')
|
2016-04-23 23:00:39 -07:00
|
|
|
__VERSION_MINOR=$(grep 'set(NVIM_VERSION_MINOR' CMakeLists.txt\
|
2016-08-25 23:53:07 -07:00
|
|
|
|$__sed 's/.*NVIM_VERSION_MINOR ([[:digit:]]).*/\1/')
|
2016-04-23 23:00:39 -07:00
|
|
|
__VERSION_PATCH=$(grep 'set(NVIM_VERSION_PATCH' CMakeLists.txt\
|
2016-08-25 23:53:07 -07:00
|
|
|
|$__sed 's/.*NVIM_VERSION_PATCH ([[:digit:]]).*/\1/')
|
2016-04-23 23:00:39 -07:00
|
|
|
__VERSION="${__VERSION_MAJOR}.${__VERSION_MINOR}.${__VERSION_PATCH}"
|
2017-03-04 01:26:16 -07:00
|
|
|
__API_LEVEL=$(grep 'set(NVIM_API_LEVEL ' CMakeLists.txt\
|
|
|
|
|$__sed 's/.*NVIM_API_LEVEL ([[:digit:]]).*/\1/')
|
2016-04-23 23:00:39 -07:00
|
|
|
{ [ -z "$__VERSION_MAJOR" ] || [ -z "$__VERSION_MINOR" ] || [ -z "$__VERSION_PATCH" ]; } \
|
|
|
|
&& { echo "ERROR: version parse failed: '${__VERSION}'"; exit 1; }
|
|
|
|
__RELEASE_MSG="NVIM v${__VERSION}
|
|
|
|
|
2016-10-28 06:01:24 -07:00
|
|
|
FEATURES:
|
2016-04-23 23:00:39 -07:00
|
|
|
|
2016-10-28 06:01:24 -07:00
|
|
|
FIXES:
|
2016-04-23 23:00:39 -07:00
|
|
|
|
2016-10-28 06:01:24 -07:00
|
|
|
CHANGES:
|
2016-04-23 23:00:39 -07:00
|
|
|
|
|
|
|
"
|
|
|
|
__BUMP_MSG="version bump"
|
|
|
|
|
|
|
|
echo "Most recent tag: ${__LAST_TAG}"
|
|
|
|
echo "Release version: ${__VERSION}"
|
2017-03-04 01:26:16 -07:00
|
|
|
|
2018-06-10 23:58:54 -07:00
|
|
|
_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
|
2017-05-01 12:04:13 -07:00
|
|
|
|
2018-06-10 23:58:54 -07:00
|
|
|
if ! test "$ARG1" = '--use-current-commit' ; then
|
|
|
|
echo "Building changelog since ${__LAST_TAG}..."
|
2019-01-03 22:03:38 -07:00
|
|
|
__CHANGELOG="$(./scripts/git-log-pretty-since.sh "$__LAST_TAG" 'vim-patch:[^[:space:]]')"
|
2016-04-23 23:00:39 -07:00
|
|
|
|
2018-06-10 23:58:54 -07:00
|
|
|
git add CMakeLists.txt
|
|
|
|
git commit --edit -m "${__RELEASE_MSG} ${__CHANGELOG}"
|
|
|
|
fi
|
2016-04-23 23:00:39 -07:00
|
|
|
|
2018-06-10 23:58:54 -07:00
|
|
|
git tag --sign -a v"${__VERSION}" -m "NVIM v${__VERSION}"
|
|
|
|
}
|
2016-08-22 01:51:32 -07:00
|
|
|
|
2018-06-10 23:58:54 -07:00
|
|
|
_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
|
2019-09-14 17:09:29 -07:00
|
|
|
$__sed -i.bk 's,(<releases>),\1\
|
|
|
|
<release date="'"${__DATE}"'" version="xxx"/>,' runtime/nvim.appdata.xml
|
|
|
|
rm CMakeLists.txt.bk
|
|
|
|
rm runtime/nvim.appdata.xml.bk
|
2019-09-15 16:34:31 -07:00
|
|
|
nvim +'/NVIM_VERSION' +1new +'exe "norm! iUpdate version numbers!!!"' \
|
2019-09-14 17:09:29 -07:00
|
|
|
-O CMakeLists.txt runtime/nvim.appdata.xml
|
|
|
|
|
|
|
|
git add CMakeLists.txt runtime/nvim.appdata.xml
|
2018-06-10 23:58:54 -07:00
|
|
|
git commit -m "$__BUMP_MSG"
|
|
|
|
}
|
2017-11-18 04:44:03 -07:00
|
|
|
|
2018-06-10 23:58:54 -07:00
|
|
|
if ! test "$ARG1" = '--only-bump' ; then
|
|
|
|
_do_release_commit
|
|
|
|
fi
|
|
|
|
_do_bump_commit
|
2016-04-23 23:00:39 -07:00
|
|
|
echo "
|
|
|
|
Next steps:
|
2019-11-24 18:53:33 -07:00
|
|
|
- Update runtime/nvim.appdata.xml on _master_
|
2019-09-15 23:08:40 -07:00
|
|
|
- Run tests/CI (version_spec.lua)!
|
2019-01-13 07:21:24 -07:00
|
|
|
- Push the tag:
|
|
|
|
git push --follow-tags
|
2019-01-10 17:20:15 -07:00
|
|
|
- Update the 'stable' tag:
|
|
|
|
git push --force upstream HEAD^:refs/tags/stable
|
|
|
|
git fetch --tags
|
2019-01-13 07:21:24 -07:00
|
|
|
- Update website: index.html"
|