mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-07-28 15:23:01 +00:00
218 lines
5.4 KiB
Bash
Executable file
218 lines
5.4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
BASE_VERSION_FILE="$ROOT_DIR/iosApp/Configuration/Version.xcconfig"
|
|
DESKTOP_VERSION_FILE="$ROOT_DIR/composeApp/Configuration/DesktopVersion.properties"
|
|
|
|
BASE_VERSION=""
|
|
BASE_CODE=""
|
|
DESKTOP_VERSION=""
|
|
DESKTOP_CODE=""
|
|
DRY_RUN=false
|
|
SHOW=false
|
|
|
|
usage() {
|
|
cat <<'EOF'
|
|
Usage:
|
|
./scripts/set-version.sh --desktop 0.1.0 --desktop-code 1
|
|
./scripts/set-version.sh --base 0.2.4 --base-code 75
|
|
./scripts/set-version.sh --base 0.2.4 --base-code 75 --desktop 0.1.0 --desktop-code 1
|
|
./scripts/set-version.sh --show
|
|
|
|
Options:
|
|
--base VERSION Set the upstream/mobile Nuvio version.
|
|
--base-code CODE Set the upstream/mobile build code.
|
|
--desktop VERSION Set the desktop app release version.
|
|
--desktop-code CODE Set the desktop app build code.
|
|
--dry-run Print changes without writing files.
|
|
--show Print current configured versions.
|
|
-h, --help Show this help.
|
|
|
|
The base version is stored in iosApp/Configuration/Version.xcconfig.
|
|
The desktop version is stored in composeApp/Configuration/DesktopVersion.properties.
|
|
EOF
|
|
}
|
|
|
|
die() {
|
|
echo "error: $*" >&2
|
|
exit 1
|
|
}
|
|
|
|
read_key() {
|
|
local file="$1"
|
|
local key="$2"
|
|
|
|
[[ -f "$file" ]] || return 0
|
|
awk -F '=' -v target="$key" '
|
|
{
|
|
raw_key = $1
|
|
gsub(/^[[:space:]]+|[[:space:]]+$/, "", raw_key)
|
|
if (raw_key == target) {
|
|
sub(/^[^=]*=/, "", $0)
|
|
gsub(/^[[:space:]]+|[[:space:]]+$/, "", $0)
|
|
print $0
|
|
exit
|
|
}
|
|
}
|
|
' "$file"
|
|
}
|
|
|
|
validate_version() {
|
|
local label="$1"
|
|
local value="$2"
|
|
|
|
[[ "$value" =~ ^[0-9]+(\.[0-9]+){1,3}([._-][0-9A-Za-z][0-9A-Za-z._-]*)?$ ]] ||
|
|
die "$label must look like 0.1.0 or 0.1.0-alpha.1"
|
|
}
|
|
|
|
validate_code() {
|
|
local label="$1"
|
|
local value="$2"
|
|
|
|
[[ "$value" =~ ^[0-9]+$ ]] || die "$label must be a positive integer"
|
|
(( 10#$value > 0 )) || die "$label must be greater than 0"
|
|
}
|
|
|
|
write_key() {
|
|
local file="$1"
|
|
local key="$2"
|
|
local value="$3"
|
|
|
|
mkdir -p "$(dirname "$file")"
|
|
local tmp
|
|
tmp="$(mktemp "${TMPDIR:-/tmp}/nuvio-version.XXXXXX")"
|
|
|
|
if [[ -f "$file" ]]; then
|
|
awk -v key="$key" -v value="$value" '
|
|
BEGIN { seen = 0 }
|
|
{
|
|
raw_key = $0
|
|
sub(/[[:space:]]*=.*/, "", raw_key)
|
|
gsub(/^[[:space:]]+|[[:space:]]+$/, "", raw_key)
|
|
if (raw_key == key) {
|
|
print key "=" value
|
|
seen = 1
|
|
next
|
|
}
|
|
print
|
|
}
|
|
END {
|
|
if (!seen) print key "=" value
|
|
}
|
|
' "$file" > "$tmp"
|
|
else
|
|
printf '%s=%s\n' "$key" "$value" > "$tmp"
|
|
fi
|
|
|
|
mv "$tmp" "$file"
|
|
}
|
|
|
|
print_current_versions() {
|
|
local base_version base_code desktop_version desktop_code
|
|
base_version="$(read_key "$BASE_VERSION_FILE" "MARKETING_VERSION")"
|
|
base_code="$(read_key "$BASE_VERSION_FILE" "CURRENT_PROJECT_VERSION")"
|
|
desktop_version="$(read_key "$DESKTOP_VERSION_FILE" "VERSION_NAME")"
|
|
desktop_code="$(read_key "$DESKTOP_VERSION_FILE" "VERSION_CODE")"
|
|
|
|
echo "Base/mobile: ${base_version:-unset} (${base_code:-unset})"
|
|
echo "Desktop: ${desktop_version:-unset} (${desktop_code:-unset})"
|
|
}
|
|
|
|
queue_change() {
|
|
local file="$1"
|
|
local key="$2"
|
|
local value="$3"
|
|
local current
|
|
current="$(read_key "$file" "$key")"
|
|
|
|
if [[ "$current" == "$value" ]]; then
|
|
echo "unchanged: $key=$value"
|
|
return 0
|
|
fi
|
|
|
|
echo "set: $key ${current:-unset} -> $value"
|
|
if [[ "$DRY_RUN" == false ]]; then
|
|
write_key "$file" "$key" "$value"
|
|
fi
|
|
}
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--base)
|
|
[[ $# -ge 2 ]] || die "--base requires a value"
|
|
BASE_VERSION="$2"
|
|
shift 2
|
|
;;
|
|
--base-code)
|
|
[[ $# -ge 2 ]] || die "--base-code requires a value"
|
|
BASE_CODE="$2"
|
|
shift 2
|
|
;;
|
|
--desktop)
|
|
[[ $# -ge 2 ]] || die "--desktop requires a value"
|
|
DESKTOP_VERSION="$2"
|
|
shift 2
|
|
;;
|
|
--desktop-code)
|
|
[[ $# -ge 2 ]] || die "--desktop-code requires a value"
|
|
DESKTOP_CODE="$2"
|
|
shift 2
|
|
;;
|
|
--dry-run)
|
|
DRY_RUN=true
|
|
shift
|
|
;;
|
|
--show)
|
|
SHOW=true
|
|
shift
|
|
;;
|
|
-h|--help)
|
|
usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
die "unknown argument: $1"
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ "$SHOW" == true ]]; then
|
|
print_current_versions
|
|
if [[ -z "$BASE_VERSION$BASE_CODE$DESKTOP_VERSION$DESKTOP_CODE" ]]; then
|
|
exit 0
|
|
fi
|
|
echo
|
|
fi
|
|
|
|
[[ -n "$BASE_VERSION$BASE_CODE$DESKTOP_VERSION$DESKTOP_CODE" ]] ||
|
|
die "nothing to change; pass --base/--base-code/--desktop/--desktop-code or --show"
|
|
|
|
if [[ -n "$BASE_VERSION" ]]; then
|
|
validate_version "base version" "$BASE_VERSION"
|
|
fi
|
|
if [[ -n "$BASE_CODE" ]]; then
|
|
validate_code "base code" "$BASE_CODE"
|
|
fi
|
|
if [[ -n "$DESKTOP_VERSION" ]]; then
|
|
validate_version "desktop version" "$DESKTOP_VERSION"
|
|
fi
|
|
if [[ -n "$DESKTOP_CODE" ]]; then
|
|
validate_code "desktop code" "$DESKTOP_CODE"
|
|
fi
|
|
|
|
if [[ -n "$BASE_VERSION$BASE_CODE" ]]; then
|
|
echo "Base/mobile version file: $BASE_VERSION_FILE"
|
|
[[ -z "$BASE_VERSION" ]] || queue_change "$BASE_VERSION_FILE" "MARKETING_VERSION" "$BASE_VERSION"
|
|
[[ -z "$BASE_CODE" ]] || queue_change "$BASE_VERSION_FILE" "CURRENT_PROJECT_VERSION" "$BASE_CODE"
|
|
fi
|
|
|
|
if [[ -n "$DESKTOP_VERSION$DESKTOP_CODE" ]]; then
|
|
echo "Desktop version file: $DESKTOP_VERSION_FILE"
|
|
[[ -z "$DESKTOP_VERSION" ]] || queue_change "$DESKTOP_VERSION_FILE" "VERSION_NAME" "$DESKTOP_VERSION"
|
|
[[ -z "$DESKTOP_CODE" ]] || queue_change "$DESKTOP_VERSION_FILE" "VERSION_CODE" "$DESKTOP_CODE"
|
|
fi
|
|
|
|
echo
|
|
print_current_versions
|