mirror of
https://github.com/asdf-vm/asdf.git
synced 2024-11-15 01:28:17 -07:00
84 lines
2.2 KiB
Bash
Executable File
84 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Unoffical Bash "strict mode"
|
|
# http://redsymbol.net/articles/unofficial-bash-strict-mode/
|
|
set -euo pipefail
|
|
#ORIGINAL_IFS=$IFS
|
|
IFS=$'\t\n' # Stricter IFS settings
|
|
|
|
usage() {
|
|
cat <<EOF
|
|
|
|
Usage: release.sh [new version]
|
|
|
|
This script is only intended for use by asdf maintainers when releasing new
|
|
versions of asdf. Plugin developers and asdf users do not need this script.
|
|
|
|
This script updates the hardcoded versions in the source code and README and
|
|
then commits them on the current branch. It then tags that commit with the
|
|
specified version.
|
|
|
|
EOF
|
|
}
|
|
|
|
error_exit() {
|
|
usage
|
|
exit 1
|
|
}
|
|
|
|
new_version="${1:-}"
|
|
new_tag_name="v$new_version"
|
|
|
|
# Make sure the user provides a version
|
|
if [[ -z "$new_version" ]]
|
|
then
|
|
echo "ERROR: no new version specified"
|
|
error_exit
|
|
fi
|
|
|
|
# Make sure version passed in is a plain semantic version to guard against
|
|
# leading 'v'.
|
|
if ! [[ "${new_version:0:1}" =~ ^[0-9]+$ ]]; then
|
|
echo >&2 "ERROR: semantic version should not start with a letter"
|
|
error_exit
|
|
fi
|
|
|
|
# Make sure the version the user provided hasn't already been tagged
|
|
if git tag | grep "$new_tag_name" > /dev/null; then
|
|
echo >&2 "ERROR: git tag with that version already exists"
|
|
exit 1
|
|
fi
|
|
|
|
echo "INFO: Checking that all changes are commited and pushed"
|
|
git pull
|
|
|
|
# Disallow unstaged changes in the working tree
|
|
if ! git diff-files --check --exit-code --ignore-submodules -- >&2; then
|
|
echo >&2 "ERROR: You have unstaged changes."
|
|
exit 1
|
|
fi
|
|
|
|
# Disallow uncommitted changes in the index
|
|
if ! git diff-index --cached --exit-code -r --ignore-submodules HEAD -- >&2; then
|
|
echo >&2 "ERROR: Your index contains uncommitted changes."
|
|
exit 1
|
|
fi
|
|
|
|
# Update version in README
|
|
sed -i.bak "s|^\(git clone.*--branch \).*$|\1$new_tag_name|" README.md
|
|
|
|
# Update version in utils.sh
|
|
# TODO: Hardcode version until.sh since not all asdf will include the Git repo
|
|
|
|
echo "INFO: Committing and tagging new version"
|
|
|
|
# Commit the changed files before tagging the new release
|
|
git add README.md
|
|
git add lib/utils.sh
|
|
git commit -m "Update version to $new_version"
|
|
|
|
git tag -a "$new_tag_name" -m "Version ${new_version}"
|
|
|
|
echo "INFO: done."
|
|
echo "INFO: Now you can push this local branch to the GitHub repository."
|