mirror of https://github.com/portainer/portainer
140 lines
3.4 KiB
Bash
Executable File
140 lines
3.4 KiB
Bash
Executable File
#!/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'"
|
|
|