Files
dropshell-templates/bump-version.sh
Your Name bedc68373d
Some checks failed
Test and Publish Templates / test-and-publish (push) Failing after 14s
Add 7 and update 2 files
2025-08-24 20:50:58 +12:00

162 lines
3.9 KiB
Bash
Executable File

#!/bin/bash
set -e
SCRIPT_DIR=$(dirname "$0")
cd "$SCRIPT_DIR"
function die() {
echo "ERROR: $1" >&2
exit 1
}
function info() {
echo "INFO: $1"
}
function usage() {
cat << EOF
Usage: $0 <template> <version-type|version>
Arguments:
template Name of the template to version
version-type One of: major, minor, patch
version Specific version number (e.g., 2.1.0)
Examples:
$0 caddy patch # Bump patch version (1.0.0 -> 1.0.1)
$0 caddy minor # Bump minor version (1.0.0 -> 1.1.0)
$0 caddy major # Bump major version (1.0.0 -> 2.0.0)
$0 caddy 2.5.3 # Set specific version
Options:
--all <version-type> Bump all templates
Examples with --all:
$0 --all patch # Bump patch version for all templates
$0 --all 2.0.0 # Set all templates to version 2.0.0
EOF
exit 1
}
function get_current_version() {
local template="$1"
if [ -f "versions.json" ]; then
if which jq >/dev/null 2>&1; then
jq -r ".\"$template\" // \"1.0.0\"" versions.json
elif which python3 >/dev/null 2>&1; then
python3 -c "import json; data=json.load(open('versions.json')); print(data.get('$template', '1.0.0'))"
else
echo "1.0.0"
fi
else
echo "1.0.0"
fi
}
function bump_version() {
local current="$1"
local bump_type="$2"
# Split version into components
IFS='.' read -r major minor patch <<< "$current"
case "$bump_type" in
major)
echo "$((major + 1)).0.0"
;;
minor)
echo "${major}.$((minor + 1)).0"
;;
patch)
echo "${major}.${minor}.$((patch + 1))"
;;
*)
# Assume it's a specific version
echo "$bump_type"
;;
esac
}
function update_version() {
local template="$1"
local new_version="$2"
# Check if template exists
if [ ! -d "$template" ]; then
die "Template '$template' does not exist"
fi
# Update versions.json
if which jq >/dev/null 2>&1; then
# Use jq to update
jq ".\"$template\" = \"$new_version\"" versions.json > versions.json.tmp && mv versions.json.tmp versions.json
elif which python3 >/dev/null 2>&1; then
# Use python to update
python3 << EOF
import json
with open('versions.json', 'r') as f:
data = json.load(f)
data['$template'] = '$new_version'
with open('versions.json', 'w') as f:
json.dump(data, f, indent=2)
EOF
else
die "Neither jq nor python3 is available for JSON manipulation"
fi
info "Updated $template from $(get_current_version "$template") to $new_version"
}
# Parse arguments
if [ $# -lt 2 ]; then
usage
fi
if [ "$1" == "--all" ]; then
# Bump all templates
VERSION_TYPE="$2"
if [ -z "$VERSION_TYPE" ]; then
usage
fi
# Get all templates
TEMPLATES=$(find . -maxdepth 1 -type d ! -name ".*" ! -name "." | sed 's|^\./||' | grep -v ".gitea")
for TEMPLATE in $TEMPLATES; do
if [ ! -f "$TEMPLATE/install.sh" ]; then
continue
fi
CURRENT_VERSION=$(get_current_version "$TEMPLATE")
NEW_VERSION=$(bump_version "$CURRENT_VERSION" "$VERSION_TYPE")
update_version "$TEMPLATE" "$NEW_VERSION"
done
info "All templates updated"
else
# Bump specific template
TEMPLATE="$1"
VERSION_ARG="$2"
CURRENT_VERSION=$(get_current_version "$TEMPLATE")
NEW_VERSION=$(bump_version "$CURRENT_VERSION" "$VERSION_ARG")
update_version "$TEMPLATE" "$NEW_VERSION"
fi
# Show the updated versions
echo ""
echo "Current versions:"
if which jq >/dev/null 2>&1; then
jq . versions.json
else
cat versions.json
fi
echo ""
echo "To commit these changes:"
echo " git add versions.json"
echo " git commit -m 'Bump version(s)'"
echo ""
echo "After committing and pushing, the CI will automatically publish the updated templates."