mirror of
https://github.com/SoPat712/videospeed.git
synced 2026-04-21 04:42:35 -04:00
105 lines
2.6 KiB
Bash
Executable File
105 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Merge dev → beta, push beta, and push an annotated beta tag (v*-beta*).
|
|
# Triggers .github/workflows/deploy.yml: unlisted AMO sign + GitHub prerelease.
|
|
|
|
set -euo pipefail
|
|
|
|
ROOT="$(git rev-parse --show-toplevel)"
|
|
cd "$ROOT"
|
|
|
|
manifest_version() {
|
|
python3 -c 'import json; print(json.load(open("manifest.json"))["version"])'
|
|
}
|
|
|
|
bump_manifest() {
|
|
local ver="$1"
|
|
VER="$ver" python3 <<'PY'
|
|
import json
|
|
import os
|
|
|
|
ver = os.environ["VER"]
|
|
path = "manifest.json"
|
|
with open(path, encoding="utf-8") as f:
|
|
data = json.load(f)
|
|
data["version"] = ver
|
|
with open(path, "w", encoding="utf-8") as f:
|
|
json.dump(data, f, indent=2)
|
|
f.write("\n")
|
|
PY
|
|
}
|
|
|
|
normalize_semver() {
|
|
local s="$1"
|
|
s="${s#"${s%%[![:space:]]*}"}"
|
|
s="${s%"${s##*[![:space:]]}"}"
|
|
s="${s#v}"
|
|
s="${s#V}"
|
|
printf '%s' "$s"
|
|
}
|
|
|
|
validate_semver() {
|
|
local s="$1"
|
|
if [[ -z "$s" ]]; then
|
|
echo "Error: empty version." >&2
|
|
return 1
|
|
fi
|
|
if [[ ! "$s" =~ ^[0-9]+(\.[0-9]+){0,3}(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?$ ]]; then
|
|
echo "Error: invalid version (use something like 5.0.4 or 5.0.4-beta.1)." >&2
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
if [[ -n "$(git status --porcelain)" ]]; then
|
|
echo "Error: working tree is not clean. Commit or stash before releasing." >&2
|
|
exit 1
|
|
fi
|
|
|
|
git checkout dev
|
|
git pull origin dev
|
|
|
|
echo "Current version in manifest.json: $(manifest_version)"
|
|
read -r -p "New version for manifest.json (e.g. 5.0.4): " SEMVER_IN
|
|
SEMVER="$(normalize_semver "$SEMVER_IN")"
|
|
validate_semver "$SEMVER"
|
|
|
|
echo "Beta git tag will include '-beta' (required by deploy.yml)."
|
|
read -r -p "Beta tag suffix [beta.1]: " SUFFIX_IN
|
|
SUFFIX="${SUFFIX_IN#"${SUFFIX_IN%%[![:space:]]*}"}"
|
|
SUFFIX="${SUFFIX%"${SUFFIX##*[![:space:]]}"}"
|
|
SUFFIX="${SUFFIX:-beta.1}"
|
|
|
|
TAG="v${SEMVER}-${SUFFIX}"
|
|
if [[ "$TAG" != *-beta* ]]; then
|
|
echo "Error: beta tag must contain '-beta' for the workflow (got $TAG). Try suffix like beta.1." >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo
|
|
echo "This will:"
|
|
echo " 1. set manifest.json version to $SEMVER, commit on dev, push origin dev"
|
|
echo " 2. checkout beta, merge dev (no-ff), push origin beta"
|
|
echo " 3. create tag $TAG and push it (triggers beta AMO + prerelease)"
|
|
echo " 4. checkout dev (main is not modified)"
|
|
read -r -p "Continue? [y/N] " confirm
|
|
[[ "${confirm:-}" =~ ^[yY](es)?$ ]] || { echo "Aborted."; exit 1; }
|
|
|
|
echo "🚀 Releasing beta $TAG"
|
|
|
|
bump_manifest "$SEMVER"
|
|
git add manifest.json
|
|
git commit -m "Bump version to $SEMVER"
|
|
git push origin dev
|
|
|
|
git checkout beta
|
|
git pull origin beta
|
|
git merge dev --no-ff -m "$TAG"
|
|
git push origin beta
|
|
|
|
git tag -a "$TAG" -m "$TAG"
|
|
git push origin "$TAG"
|
|
|
|
git checkout dev
|
|
git pull origin dev
|
|
|
|
echo "✅ Done: beta $TAG (manifest $SEMVER; dev + beta + tag pushed)"
|