Skip to content

Commit

Permalink
Add release script
Browse files Browse the repository at this point in the history
  • Loading branch information
nea89o committed Dec 31, 2023
1 parent 2243f98 commit a7d8fae
Show file tree
Hide file tree
Showing 2 changed files with 146 additions and 1 deletion.
2 changes: 1 addition & 1 deletion docs/How to release.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ SPDX-License-Identifier: CC0-1.0
- Bump the version on gradle.properties
- Create a tag with that same version (without `v` prefix, please)
- Create a changelog based on
`git log --pretty=' - %s' --grep '[no changelog]' --invert-grep --fixed-strings oldversion..newversion | tac`, while
`git log --pretty='- %s' --grep '[no changelog]' --invert-grep --fixed-strings oldversion..newversion | tac`, while
filtering out commits that should not be in the changelog.
- Upload to [GitHub](https://github.com/romangraef/Firmament/releases/new)
- Upload to [Modrinth](https://modrinth.com/mod/firmament/versions)
Expand Down
145 changes: 145 additions & 0 deletions docs/release_script.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
#!/usr/bin/env bash
# SPDX-FileCopyrightText: 2023 Linnea Gräf <[email protected]>
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
# ARG_OPTIONAL_BOOLEAN([no-check],[n],[Skip checking preconditions, such as a clean git working directory])
# ARG_HELP([Script to help creating releases])
# ARGBASH_GO()
# needed because of Argbash --> m4_ignore([
### START OF CODE GENERATED BY Argbash v2.10.0 one line above ###
# Argbash is a bash code generator used to get arguments parsing right.
# Argbash is FREE SOFTWARE, see https://argbash.io for more info


die()
{
local _ret="${2:-1}"
test "${_PRINT_HELP:-no}" = yes && print_help >&2
echo "$1" >&2
exit "${_ret}"
}


begins_with_short_option()
{
local first_option all_short_options='nh'
first_option="${1:0:1}"
test "$all_short_options" = "${all_short_options/$first_option/}" && return 1 || return 0
}

# THE DEFAULTS INITIALIZATION - OPTIONALS
_arg_no_check="off"


print_help()
{
printf '%s\n' "Script to help creating releases"
printf 'Usage: %s [-n|--(no-)no-check] [-h|--help]\n' "$0"
printf '\t%s\n' "-n, --no-check, --no-no-check: Skip checking preconditions, such as a clean git working directory (off by default)"
printf '\t%s\n' "-h, --help: Prints help"
}


parse_commandline()
{
while test $# -gt 0
do
_key="$1"
case "$_key" in
-n|--no-no-check|--no-check)
_arg_no_check="on"
test "${1:0:5}" = "--no-" && _arg_no_check="off"
;;
-n*)
_arg_no_check="on"
_next="${_key##-n}"
if test -n "$_next" -a "$_next" != "$_key"
then
{ begins_with_short_option "$_next" && shift && set -- "-n" "-${_next}" "$@"; } || die "The short option '$_key' can't be decomposed to ${_key:0:2} and -${_key:2}, because ${_key:0:2} doesn't accept value and '-${_key:2:1}' doesn't correspond to a short option."
fi
;;
-h|--help)
print_help
exit 0
;;
-h*)
print_help
exit 0
;;
*)
_PRINT_HELP=yes die "FATAL ERROR: Got an unexpected argument '$1'" 1
;;
esac
shift
done
}

parse_commandline "$@"

# OTHER STUFF GENERATED BY Argbash

### END OF CODE GENERATED BY Argbash (sortof) ### ])
# [ <-- needed because of Argbash
set -euo pipefail

REMOTE=origin
BRANCH=master

basedir="$(dirname "$(dirname "$(realpath "$0")")")"
echo "Found base directory at $basedir"

if ! [ -d "$basedir/.git" ]; then
echo Could not find git directory.
exit 1
fi

if [ -n "$(git status --porcelain)" ] && [ "$_arg_no_check" == off ]; then
echo Unclean git working environment
exit 1
fi

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

git fetch --tags "$REMOTE"

git tag --list --sort=taggerdate

oldversion="$(git tag --list --sort=taggerdate | tail -n1)"

echo "Choosing old version as $oldversion"

echo -n "Choosing next version as: "
read newversion
echo "Confirming new version as $newversion"

sed -i -E 's/(mod_version *= *).*/\1'"$newversion"'/' "$basedir"/gradle.properties
git add gradle.properties
git commit -m 'Prepare release '"$newversion"'
[no changelog]'
git tag "$newversion"
releasenotes="$basedir/build/releasenotes.md"

echo "**Full Changelog**: https://github.com/nea89o/Firmament/compare/$oldversion...$newversion" > "$releasenotes"
echo >> "$releasenotes"
git log --pretty='- %s' --grep '[no changelog]' --invert-grep --fixed-strings "$oldversion..$newversion" | tac >> "$releasenotes"
echo >> "$releasenotes"

cat "$releasenotes"
"$basedir"/gradlew clean build
git push "$REMOTE" "$BRANCH" "$newversion"

if command -v gh; then
echo Creating github release
gh release create "$newversion" -F "$releasenotes" "$basedir/build/libs/Firmament-$newversion.jar"
else
xdg-open "https://github.com/nea89o/firmament/releases/new"
fi
xdg-open "https://modrinth.com/mod/firmament/versions"


# ] <-- needed because of Argbash

0 comments on commit a7d8fae

Please sign in to comment.