mirror of https://github.com/breard-r/acmed.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
3.2 KiB
146 lines
3.2 KiB
#!/usr/bin/env bash
|
|
#
|
|
# This script creates a new release and is therefore not meant to be
|
|
# used by anyone but the project manager. It will therefore remain
|
|
# undocumented and may assume some specific environment.
|
|
|
|
abort_release()
|
|
{
|
|
echo "Aborting."
|
|
exit 1
|
|
}
|
|
|
|
display_crate_version()
|
|
{
|
|
local crate_name="$1"
|
|
local crate_version
|
|
|
|
crate_version=$(grep "^version" "${crate_name}/Cargo.toml" | cut -d '"' -f2)
|
|
echo "Current version for crate ${crate_name}: ${crate_version}"
|
|
}
|
|
|
|
update_crate_version()
|
|
{
|
|
local crate_name="$1"
|
|
local new_version="$2"
|
|
|
|
sed -i "s/^version = .*/version = \"${new_version}\"/" "${crate_name}/Cargo.toml"
|
|
}
|
|
|
|
display_man_date()
|
|
{
|
|
local man_name="$1"
|
|
local man_date
|
|
|
|
man_date=$(grep ".Dd" "man/en/${man_name}" | sed "s/\.Dd //")
|
|
echo "Current date for ${man_name}: ${man_date}"
|
|
}
|
|
|
|
update_man_date()
|
|
{
|
|
local man_name="$1"
|
|
local new_date="$2"
|
|
|
|
sed -i "s/\.Dd .*/\.Dd ${new_date}/" "man/en/${man_name}"
|
|
}
|
|
|
|
update_changelog()
|
|
{
|
|
local new_version="$1"
|
|
local new_date="$2"
|
|
|
|
sed -i "s/\[Unreleased\]/\[${new_version}\] - ${new_date}/" "CHANGELOG.md"
|
|
}
|
|
|
|
check_working_directory()
|
|
{
|
|
local status
|
|
|
|
status=$(git status --untracked-files="no" --porcelain="2")
|
|
if [[ "$status" != "" ]]; then
|
|
echo "Unable to create a new release while the working directory is not clean."
|
|
abort_release
|
|
fi
|
|
}
|
|
|
|
commit_new_version()
|
|
{
|
|
local new_version="$1"
|
|
|
|
git add --update
|
|
git commit -m "ACMEd v${new_version}"
|
|
git tag -m "ACMEd v${new_version}" "v${new_version}"
|
|
|
|
echo
|
|
echo "Version ${new_version} has been committed and tagged."
|
|
echo "If everything is correct, you can publish if using:"
|
|
echo " git push"
|
|
echo " git push origin v${new_version}"
|
|
}
|
|
|
|
release_new_version()
|
|
{
|
|
local new_version="$1"
|
|
local current_date="$2"
|
|
local confirm_git_diff
|
|
|
|
update_crate_version "acme_common" "${new_version}"
|
|
update_crate_version "acmed" "${new_version}"
|
|
update_crate_version "tacd" "${new_version}"
|
|
|
|
update_man_date "acmed.8" "${current_date}"
|
|
update_man_date "acmed.toml.5" "${current_date}"
|
|
update_man_date "tacd.8" "${current_date}"
|
|
|
|
update_changelog "${new_version}" "${current_date}"
|
|
|
|
git diff
|
|
|
|
echo
|
|
echo -n "Does everything seems ok? [y|N] "
|
|
read -r confirm_git_diff
|
|
|
|
case "${confirm_git_diff}" in
|
|
y|Y) commit_new_version "${new_version}";;
|
|
*)
|
|
git restore "."
|
|
abort_release
|
|
;;
|
|
esac
|
|
}
|
|
|
|
main()
|
|
{
|
|
local new_version
|
|
local confirm_release
|
|
|
|
check_working_directory
|
|
|
|
display_crate_version "acme_common"
|
|
display_crate_version "acmed"
|
|
display_crate_version "tacd"
|
|
|
|
echo
|
|
display_man_date "acmed.8"
|
|
display_man_date "acmed.toml.5"
|
|
display_man_date "tacd.8"
|
|
|
|
echo
|
|
echo -n "Enter the new version: "
|
|
read -r new_version
|
|
|
|
export LC_TIME="en_US.UTF-8"
|
|
current_date=$(date "+%b %d, %Y")
|
|
|
|
echo
|
|
echo "You are about to release version ${new_version} on ${current_date}"
|
|
echo -n "Are you sure? [y/N] "
|
|
read -r confirm_release
|
|
|
|
case "${confirm_release}" in
|
|
y|Y) release_new_version "${new_version}" "${current_date}";;
|
|
*) abort_release;;
|
|
esac
|
|
}
|
|
|
|
main
|