Skip to content

Commit

Permalink
build: reorder release commits
Browse files Browse the repository at this point in the history
Previously, we updated the docs after the commit so that any version
string in the docs are correct. But there are none, thus we can update
the docs before doing the release. This makes the release look a bit
more natural.

Signed-off-by: Daniel Wagner <[email protected]>
  • Loading branch information
igaw committed Jun 14, 2024
1 parent 227706c commit d502fa8
Showing 1 changed file with 53 additions and 33 deletions.
86 changes: 53 additions & 33 deletions scripts/release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ usage() {
echo "The script does all necessary steps to create a new release."
echo ""
echo " -d: no documentation update"
echo " -n: dry run"
echo " -f: disable all sanity checks and just do the release"
echo " -l: do not update library dependency"
echo ""
echo "Note: The version number needs to be exactly"
echo " '^v[\d]+.[\d]+(.[\d\]+(-rc[0-9]+)?$'"
Expand All @@ -17,15 +18,19 @@ usage() {
}

build_doc=true
dry_run=false
update_lib_dep=true
force=false

while getopts "dn" o; do
while getopts "dfl" o; do
case "${o}" in
d)
build_doc=false
;;
n)
dry_run=true
f)
force=true
;;
l)
update_lib_dep=false
;;
*)
usage
Expand All @@ -41,6 +46,26 @@ if [ -z "$VERSION" ] ; then
exit 1
fi

cleanup() {
if [ -z "${OLD_HEAD}" ] ; then
exit
fi
git tag -d "Release $VERSION" "$VERSION"
git reset --hard "${OLD_HEAD}"
}

register_cleanup() {
OLD_HEAD="$(git rev-parse HEAD)"
}

unregister_cleanup() {
OLD_HEAD=""
}

trap cleanup EXIT

register_cleanup

# expected version regex
re='^v([0-9]+\.[0-9]+(\.[0-9]+)?)(-rc[0-9]+)?$'

Expand All @@ -57,10 +82,10 @@ fi

cd "$(git rev-parse --show-toplevel)" || exit 1

if [[ -f subprojects/libnvme.wrap ]]; then
if [ "$update_lib_dep" = true ] && [[ -f subprojects/libnvme.wrap ]]; then
git -C subprojects/libnvme fetch --all

# extract the vesion string from libnvme by using the ref
# extract the version string from libnvme by using the ref
# defined in libnvme.wrap.
libnvme_ref=$(sed -n "s/revision = \([0-9a-z]\+\)/\1/p" subprojects/libnvme.wrap)
libnvme_VERSION=$(git -C subprojects/libnvme describe "${libnvme_ref}")
Expand All @@ -75,16 +100,18 @@ if [[ -f subprojects/libnvme.wrap ]]; then
fi
fi

if [[ -n $(git status -s) ]]; then
echo "tree is dirty."
if [[ "${dry_run}" = false ]]; then
exit 1
if [ "$force" = false ] ; then
if [[ -n $(git status -s) ]]; then
echo "tree is dirty."
if [[ "${dry_run}" = false ]]; then
exit 1
fi
fi
fi

if [ "$(git rev-parse --abbrev-ref HEAD)" != "master" ] ; then
echo "currently not on master branch. abort."
exit 1
if [ "$(git rev-parse --abbrev-ref HEAD)" != "master" ] ; then
echo "currently not on master branch. abort."
exit 1
fi
fi

# update all docs
Expand All @@ -94,39 +121,32 @@ if [ -d "Documentation" ]; then
elif [ -d "doc" ]; then
doc_dir="doc"
else
echo "documenation directory not found"
echo "documentation directory not found"
exit 1
fi

# update meson.build
sed -i -e "0,/[ \t]version: /s/\([ \t]version: \).*/\1\'$ver\',/" meson.build
if [[ -f subprojects/libnvme.wrap ]]; then
sed -i -e "s/\(dependency('libnvme', version: '>=\)\([\.1-9]\+\)/\1$libnvme_ver/" meson.build
fi

if [[ "${dry_run}" = false ]]; then
git add meson.build
git commit -s -m "build: Update version to $VERSION"
fi

if [ "$build_doc" = true ]; then
# update documentation
./scripts/update-docs.sh
if [[ "${dry_run}" = false ]]; then
git add $doc_dir
git commit -s -m "doc: Regenerate all docs for $VERSION"
fi
git add $doc_dir
git commit -s -m "doc: Regenerate all docs for $VERSION"
fi

if [[ "${dry_run}" = true ]]; then
exit 0
# update meson.build
sed -i -e "0,/[ \t]version: /s/\([ \t]version: \).*/\1\'$ver\',/" meson.build
if [[ -n "$libnvme_VERSION" ]] && [[ -f subprojects/libnvme.wrap ]]; then
sed -i -e "s/\(dependency('libnvme', version: '>=\)\([\.1-9]\+\)/\1$libnvme_ver/" meson.build
fi

git add meson.build
git commit -s -m "Release $VERSION"

git tag -s -m "Release $VERSION" "$VERSION"
git push --dry-run origin "$VERSION"^{}:master tag "$VERSION"

read -p "All good? Ready to push changes to remote? [Yy]" -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
git push origin "$VERSION"^{}:master tag "$VERSION"
unregister_cleanup
fi

0 comments on commit d502fa8

Please sign in to comment.