Files
qqq/qqq-dev-tools/bin/end-of-sprint-release.sh
2024-03-08 12:00:42 -06:00

89 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
############################################################################
## Script to run the release process on qqq at the end of a sprint.
## Uses gum for CLI UI.
############################################################################
function gumBanner
{
gum style --foreground "#60A0FF" --border thick --width 80 --align=center "${@}"
}
function gumConfirmProceed
{
prompt=$1
affirmative=$2
negative=$3
gum confirm "$prompt" --prompt.border thick --prompt.width 80 --prompt.align center --affirmative="$affirmative" --negative="$negative"
if [ "$?" == "1" ]; then
echo "OK, exiting."
exit;
fi
}
QQQ_RELEASE_DIR=/tmp/qqq-release
QQQ_DEV_TOOLS_DIR=${QQQ_RELEASE_DIR}/qqq/qqq-dev-tools
mkdir -p $QQQ_RELEASE_DIR/qqq
cd $QQQ_RELEASE_DIR/qqq || exit
gumBanner "Making sure you have a clean git checkout"
git status 2>&1 > /dev/null 2>&1
if [ "$?" != "0" ]; then
gumConfirmProceed "No git checkout found, create a clean checkout at [$QQQ_RELEASE_DIR]?" "Proceed" "No, please quit"
cd $QQQ_RELEASE_DIR || exit
git clone git@github.com:Kingsrook/qqq.git
git clone git@github.com:Kingsrook/qqq-frontend-material-dashboard.git
git clone git@github.com:Kingsrook/qqq-frontend-core.git
else
gumConfirmProceed "Existing git checkouts found at [$QQQ_RELEASE_DIR], continue?" "Yes, use those" "I need to go delete it and start over"
fi
gumBanner "Checking for open PR's..."
gh pr list
gumConfirmProceed "Can we Proceed, or are there open PR's that need merged?" "Proceed" "There are open PR's that need merged"
gumBanner "Getting dev & main branches up to date and ready"
git checkout main && git pull && git checkout dev && git pull
if [ ! -e "qqq-sample-project/.env" ]; then
dir=$(realpath .)
gumBanner "Installing .env file -- for qqq" "Tell it your qqq is at:" "$dir"
setup-environments.sh --qqq --quiet --is-for-release
fi
###################################
## go back to root qqq directory ##
###################################
cd $QQQ_RELEASE_DIR/qqq || exit
MVN_VERIFY_LOG=/tmp/mvn-verify.log
gumBanner "Doing clean build (logging to $MVN_VERIFY_LOG)"
mvn -Duser.timezone=UTC clean verify > $MVN_VERIFY_LOG 2>&1
tail -30 $MVN_VERIFY_LOG
gumConfirmProceed "Can we Proceed, or are there build errors to fix?" "Proceed" "There are build errors to fix"
gumBanner "Running mvn gitflow:release-start"
mvn gitflow:release-start
gumConfirmProceed "Can we Proceed, or were there errors from the gitflow:release-start?" "Proceed" "There were errors..."
gumBanner "Pushing release branch to origin"
git push --set-upstream origin "$(git rev-parse --abbrev-ref HEAD)"
gumBanner "Please wait for a green run in CI on the release branch..."
gumConfirmProceed "Can we Proceed, or did CI not pass on the release branch?" "Proceed" "CI did not pass..."
gumBanner "Running mvn gitflow:release-finish"
mvn gitflow:release-finish
gumBanner "Updating qqq-dev-tools/CURRENT-SNAPSHOT-VERSION"
CURRENT_SNAPSHOT_VERSION=$(grep '<revision>' pom.xml | sed 's/[ \t]*//; s/-SNAPSHOT//g; s/<[^>]*>//g')
echo $CURRENT_SNAPSHOT_VERSION > $QQQ_DEV_TOOLS_DIR/CURRENT-SNAPSHOT-VERSION
cd $QQQ_DEV_TOOLS_DIR || exit
git commit -m "Updating to $CURRENT_SNAPSHOT_VERSION" CURRENT-SNAPSHOT-VERSION
git push
gumBanner "Done!"
echo "(My notes say to delete branches and snapshot tags now... and to update dependent projects)"