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