diff --git a/scripts/release.sh b/scripts/release.sh index 9e1f99bc4..042a6c3a0 100755 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -13,27 +13,138 @@ # See the License for the specific language governing permissions and # limitations under the License. - +# Description: +# This script automates the process of building and releasing OpenIM, +# including tasks like setting up the environment, verifying prerequisites, +# building commands, packaging tarballs, uploading tarballs, creating GitHub +# releases, and generating changelogs. +# +# Usage: +# ./scripts/release.sh [options] +# Options include: +# -h, --help : Show help message +# -se, --setup-env : Execute setup environment +# -vp, --verify-prereqs : Execute prerequisites verification +# -bc, --build-command : Execute build command +# -bi, --build-image : Execute build image (default: not executed) +# -pt, --package-tarballs : Execute package tarballs +# -ut, --upload-tarballs : Execute upload tarballs +# -gr, --github-release : Execute GitHub release +# -gc, --generate-changelog: Execute generate changelog +# +# This script can also be executed via the 'make release' command as an alternative. +# +# Dependencies: +# This script depends on external scripts found in the 'scripts' directory and +# assumes the presence of necessary tools and permissions for building and +# releasing software. +# +# Note: +# The script uses standard bash script practices with error handling, +# and it defaults to executing all steps if no specific option is provided. +# # Build a OpenIM release. This will build the binaries, create the Docker # images and other build artifacts. +# Build a OpenIM release. This script supports various flags for flexible execution control. set -o errexit set -o nounset set -o pipefail - OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. source "${OPENIM_ROOT}/scripts/common.sh" source "${OPENIM_ROOT}/scripts/lib/release.sh" OPENIM_RELEASE_RUN_TESTS=${OPENIM_RELEASE_RUN_TESTS-y} -openim::golang::setup_env -openim::build::verify_prereqs -openim::release::verify_prereqs -#openim::build::build_image -openim::build::build_command -openim::release::package_tarballs -openim::release::updload_tarballs -git push origin ${VERSION} -#openim::release::github_release -#openim::release::generate_changelog +# Function to show help message +show_help() { + echo "Usage: $(basename $0) [options]" + echo "Options:" + echo " -h, --help Show this help message" + echo " -se, --setup-env Execute setup environment" + echo " -vp, --verify-prereqs Execute prerequisites verification" + echo " -bc, --build-command Execute build command" + echo " -bi, --build-image Execute build image (default: not executed)" + echo " -pt, --package-tarballs Execute package tarballs" + echo " -ut, --upload-tarballs Execute upload tarballs" + echo " -gr, --github-release Execute GitHub release" + echo " -gc, --generate-changelog Execute generate changelog" +} + +# Initialize all actions to false +perform_setup_env=false +perform_verify_prereqs=false +perform_build_command=false +perform_build_image=false # New flag for build image +perform_package_tarballs=false +perform_upload_tarballs=false +perform_github_release=false +perform_generate_changelog=false + +# Process command-line arguments +while getopts "hsevpbciptutgrgc-" opt; do + case "${opt}" in + h) show_help; exit 0 ;; + se) perform_setup_env=true ;; + vp) perform_verify_prereqs=true ;; + bc) perform_build_command=true ;; + bi) perform_build_image=true ;; # Handling new option + pt) perform_package_tarballs=true ;; + ut) perform_upload_tarballs=true ;; + gr) perform_github_release=true ;; + gc) perform_generate_changelog=true ;; + --) case "${OPTARG}" in + help) show_help; exit 0 ;; + setup-env) perform_setup_env=true ;; + verify-prereqs) perform_verify_prereqs=true ;; + build-command) perform_build_command=true ;; + build-image) perform_build_image=true ;; # Handling new long option + package-tarballs) perform_package_tarballs=true ;; + upload-tarballs) perform_upload_tarballs=true ;; + github-release) perform_github_release=true ;; + generate-changelog) perform_generate_changelog=true ;; + *) echo "Invalid option: --${OPTARG}"; show_help; exit 1 ;; + esac ;; + *) show_help; exit 1 ;; + esac +done + +# Enable all actions by default if no options are provided +if [ "$#" -eq 0 ]; then + perform_setup_env=true + perform_verify_prereqs=true + perform_build_command=true + perform_package_tarballs=true + perform_upload_tarballs=true + perform_github_release=true + perform_generate_changelog=true + # TODO: Not enabling build_image by default + # perform_build_image=true +fi + +# Function to perform actions +perform_action() { + local flag=$1 + local message=$2 + local command=$3 + + if [ "$flag" == true ]; then + openim::log::info "## $message..." + if ! $command; then + openim::log::errexit "Error in $message" + fi + fi +} + +echo "Starting script execution..." + +perform_action $perform_setup_env "Setting up environment" "openim::golang::setup_env" +perform_action $perform_verify_prereqs "Verifying prerequisites" "openim::build::verify_prereqs && openim::release::verify_prereqs" +perform_action $perform_build_command "Executing build command" "openim::build::build_command" +perform_action $perform_build_image "Building image" "openim::build::build_image" +perform_action $perform_package_tarballs "Packaging tarballs" "openim::release::package_tarballs" +perform_action $perform_upload_tarballs "Uploading tarballs" "openim::release::upload_tarballs" +perform_action $perform_github_release "Creating GitHub release" "openim::release::github_release" +perform_action $perform_generate_changelog "Generating changelog" "openim::release::generate_changelog" + +openim::log::success "OpenIM Relase Script Execution Completed."