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.
|
|
#!/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=$(date "+%Y-%m-%d")
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}"
cargo update
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
|