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.
		
		
		
		
		
			
		
			
				
					
					
						
							148 lines
						
					
					
						
							3.2 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							148 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=$(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
							 |