mirror of https://github.com/breard-r/acmed.git
Browse Source
Add a release script
Add a release script
Creating releases by hand is error-prone, which is why I already messed up several time (no big deal, just some comment or annotations with the wrong date or version number). I already had a look at some automation tools, mostly cargo-release, but it failed to convince me.pull/62/head
Rodolphe Bréard
3 years ago
1 changed files with 136 additions and 0 deletions
-
136release.sh
@ -0,0 +1,136 @@ |
|||||
|
#!/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}" |
||||
|
} |
||||
|
|
||||
|
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}" |
||||
|
|
||||
|
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 |
Write
Preview
Loading…
Cancel
Save
Reference in new issue