diff --git a/README.md b/README.md index f198d8a..84bba69 100644 --- a/README.md +++ b/README.md @@ -209,13 +209,14 @@ steps: run: echo "${{ steps.test-action.outputs.time }}" ``` -## Publishing a new release +## Publishing a New Release -This project includes a helper script designed to streamline the process of -tagging and pushing new releases for GitHub Actions. +This project includes a helper script, [`script/release`](./script/release) +designed to streamline the process of tagging and pushing new releases for +GitHub Actions. GitHub Actions allows users to select a specific version of the action to use, -based on release tags. Our script simplifies this process by performing the +based on release tags. This script simplifies this process by performing the following steps: 1. **Retrieving the latest release tag:** The script starts by fetching the most diff --git a/script/release b/script/release index 0dd6139..d67bfb3 100755 --- a/script/release +++ b/script/release @@ -1,47 +1,59 @@ #!/bin/bash # About: -# This is a helper script to tag and push a new release. -# GitHub Actions use release tags to allow users to select a specific version of the action to use. +# +# This is a helper script to tag and push a new release. GitHub Actions use +# release tags to allow users to select a specific version of the action to use. +# +# See: https://github.com/actions/typescript-action#publishing-a-new-release +# # This script will do the following: +# # 1. Get the latest release tag -# 2. Prompt the user for a new release tag (while displaying the latest release tag, and a regex to validate the new tag) +# 2. Prompt the user for a new release tag # 3. Tag the new release # 4. Push the new tag to the remote - +# # Usage: +# # script/release -# COLORS +# Terminal colors OFF='\033[0m' RED='\033[0;31m' GREEN='\033[0;32m' BLUE='\033[0;34m' +# Get the latest release tag latest_tag=$(git describe --tags "$(git rev-list --tags --max-count=1)") -# if the latest_tag is empty, then there are no tags - let the user know if [[ -z "$latest_tag" ]]; then - echo -e "No tags found (yet) - continue to create your first tag and push it" + # There are no existing release tags + echo -e "No tags found (yet) - Continue to create and push your first tag" latest_tag="[unknown]" fi +# Display the latest release tag echo -e "The latest release tag is: ${BLUE}${latest_tag}${OFF}" -read -r -p 'New Release Tag (vX.X.X format): ' new_tag +# Prompt the user for the new release tag +read -r -p 'Enter a new release tag (vX.X.X format): ' new_tag + +# Validate the new release tag tag_regex='v[0-9]+\.[0-9]+\.[0-9]+$' if echo "$new_tag" | grep -q -E "$tag_regex"; then echo -e "Tag: ${BLUE}$new_tag${OFF} is valid" else + # Release tag is not `vX.X.X` format echo -e "Tag: ${BLUE}$new_tag${OFF} is ${RED}not valid${OFF} (must be in vX.X.X format)" exit 1 fi +# Tag the new release git tag -a "$new_tag" -m "$new_tag Release" +echo -e "${GREEN}Tagged: $new_tag${OFF}" -echo -e "${GREEN}OK${OFF} - Tagged: $new_tag" - +# Push the new tag to the remote git push --tags - -echo -e "${GREEN}OK${OFF} - Tags pushed to remote!" -echo -e "${GREEN}DONE${OFF}" +echo -e "${GREEN}Release tag pushed to remote${OFF}" +echo -e "${GREEN}Done!${OFF}"