From 02de7b2715b7b1b44b578d336f16194f1ec02729 Mon Sep 17 00:00:00 2001 From: Matt Hook Date: Wed, 11 Jan 2023 14:07:18 +1300 Subject: [PATCH] feat(version): add version setting script bump version EE-2529 (#6820) * version bumper * tell the user to check update --- bump_version.sh | 139 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100755 bump_version.sh diff --git a/bump_version.sh b/bump_version.sh new file mode 100755 index 000000000..81de1be34 --- /dev/null +++ b/bump_version.sh @@ -0,0 +1,139 @@ +#!/bin/bash + +# For reference see: https://portainer.atlassian.net/wiki/spaces/TECH/pages/570589194/Code+Freeze+Preparation + +# Portainer (CE + EE) +# Change version in package.json +# Change APIVersion in portainer.go +# Change @version in handler/handler.go + +# This script requires jq +# sudo apt-get install jq + +if ! [ -x "$(command -v sed)" ]; then + echo 'Error: sed is not installed.' >&2 + exit 1 +fi + +if ! [ -x "$(command -v jq)" ]; then + echo 'Error: jq is not installed. Get it here: https://stedolan.github.io/jq/download/' >&2 + exit 1 +fi + +CURRENT_VERSION=$(jq -r '.version' package.json) +PROMPT=true + +# Parse the major, minor and patch versions +# out. +# You use it like this: +# semver="3.4.5+xyz" +# a=($(ParseSemVer "$semver")) +# major=${a[0]} +# minor=${a[1]} +# patch=${a[2]} +# printf "%-32s %4d %4d %4d\n" "$semver" $major $minor $patch +function ParseSemVer() { + local token="$1" + local major=0 + local minor=0 + local patch=0 + + if [[ "$token" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+) ]]; then + major=${BASH_REMATCH[1]} + minor=${BASH_REMATCH[2]} + patch=${BASH_REMATCH[3]} + fi + + echo "$major $minor $patch" +} + +Help() +{ + echo "*** Bump Portainer version ***" + echo + echo "The Portainer version is in the semantic version format:" + echo " X.Y.Z (Major.Minor.Patch)" + echo + echo "The current version is defined in multiple files." + echo "This script will update the version in the following files:" + echo " package.json" + echo " api/portainer.go" + echo " api/http/handler/handler.go" + echo + echo "Usage: bump-version.sh [-s|-h]" + echo "options:" + echo " -h Print this Help." + echo " -s Silently bump minor version without prompting." + echo +} + +case "$1" in + -s) + # automatically bump minor version with no prompting + PROMPT=false + ;; + + -h | --help) # display Help + Help + exit +esac + + +[ $PROMPT == true ] && { + echo "Current Portainer version: ${CURRENT_VERSION}" +} + +a=($(ParseSemVer "$CURRENT_VERSION")) +major=${a[0]} +minor=${a[1]} +patch=${a[2]} + +minor=$(($minor+1)) +NEW_VERSION="${major}.${minor}.${patch}" + +[ $PROMPT == true ] && { + echo -n "New Portainer version: [${NEW_VERSION}]: " + read -r inp + + [[ ! -z "$inp" ]] && NEW_VERSION="$inp" + + a=($(ParseSemVer "$NEW_VERSION")) + major=${a[0]} + minor=${a[1]} + patch=${a[2]} + + if [ "$major" == 0 ] && [ "$minor" == 0 ] && [ "$patch" = 0 ]; then + echo "Invalid version format, must be major.minor.patch" + exit 1 + fi + + echo "Version will be changed to: ${NEW_VERSION}" + echo -n "Continue? [y/N]: " + read -r inp + + if [ "$inp" != "y" ]; then + echo "Version left unchanged" + exit 1 + fi +} + + +tmp=$(mktemp) + +# Change version in package.json +filename="package.json" +jq --arg a "$NEW_VERSION" '.version = $a' package.json > "$tmp" && mv "$tmp" "$filename" +echo "Updated $filename." + +# Update portainer.go +filename="api/portainer.go" +sed -E "s/^([[:blank:]]*APIVersion[[:blank:]]*=[[:blank:]]*).*/\1\"$NEW_VERSION\"/" "$filename" > "$tmp" && mv "$tmp" "$filename" +echo "Updated $filename." + +# Change @version in handler/handler.go +filename="api/http/handler/handler.go" +sed -E "s|// @version .*|// @version $NEW_VERSION|" "$filename" > "$tmp" && mv "$tmp" "$filename" +echo "Updated $filename." +echo +echo "IMPORTANT! Before committing, please ensure the files have updated correctly with `git diff`" +