Files
cthulhu/set-version.sh
2025-12-31 13:05:53 -05:00

103 lines
2.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
scriptDir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
dateInput="${1:-}"
branchInput="${2:-}"
if [[ -z "$dateInput" ]]; then
dateInput="$(date +%Y.%m.%d)"
fi
if [[ ! "$dateInput" =~ ^([0-9]{4}\.[0-9]{2}\.[0-9]{2})(-([A-Za-z0-9._-]+))?$ ]]; then
echo "Usage: $(basename "$0") [YYYY.MM.DD[-branch]] [branch]" >&2
echo "Error: version must match YYYY.MM.DD or YYYY.MM.DD-branch" >&2
exit 1
fi
datePart="${BASH_REMATCH[1]}"
suffixPart="${BASH_REMATCH[3]}"
if [[ -n "$suffixPart" && -n "$branchInput" ]]; then
echo "Warning: branch argument ignored because suffix was provided in version." >&2
branchInput=""
fi
if [[ -z "$suffixPart" ]]; then
if [[ -z "$branchInput" ]]; then
branchInput="$(git -C "$scriptDir" branch --show-current 2>/dev/null || true)"
fi
if [[ "$branchInput" == "HEAD" ]]; then
branchInput=""
fi
if [[ -n "$branchInput" ]]; then
branchName="$(printf '%s' "$branchInput" | sed 's/[^A-Za-z0-9._-]/-/g')"
branchName="${branchName#-}"
branchName="${branchName%-}"
suffixPart="$branchName"
fi
fi
pythonVersion="$datePart"
fullVersion="$datePart"
if [[ -n "$suffixPart" ]]; then
fullVersion="${fullVersion}-${suffixPart}"
fi
if [[ ! "$fullVersion" =~ ^[0-9]{4}\.[0-9]{2}\.[0-9]{2}(-[A-Za-z0-9._-]+)?$ ]]; then
echo "Error: generated version '${fullVersion}' is invalid" >&2
exit 1
fi
codeNameValue=""
if [[ -n "$suffixPart" ]]; then
codeNameValue="$suffixPart"
fi
cthulhuVersionFile="${scriptDir}/src/cthulhu/cthulhuVersion.py"
mesonFile="${scriptDir}/meson.build"
pkgbuildFile="${scriptDir}/distro-packages/Arch-Linux/PKGBUILD"
for path in "$cthulhuVersionFile" "$mesonFile" "$pkgbuildFile"; do
if [[ ! -f "$path" ]]; then
echo "Error: Missing file: $path" >&2
exit 1
fi
done
sed -i "s/^version = \".*\"/version = \"${pythonVersion}\"/" "$cthulhuVersionFile"
if [[ -n "$codeNameValue" ]]; then
sed -i "s/^codeName = \".*\"/codeName = \"${codeNameValue}\"/" "$cthulhuVersionFile"
fi
sed -i "s/^ version: '.*',/ version: '${fullVersion}',/" "$mesonFile"
sed -i "s/^pkgver=.*/pkgver=${pythonVersion}/" "$pkgbuildFile"
sed -i "s/^pkgrel=.*/pkgrel=1/" "$pkgbuildFile"
if ! rg -q "^version = \"${pythonVersion}\"" "$cthulhuVersionFile"; then
echo "Error: Failed to update ${cthulhuVersionFile}" >&2
exit 1
fi
if [[ -n "$codeNameValue" ]] && ! rg -q "^codeName = \"${codeNameValue}\"" "$cthulhuVersionFile"; then
echo "Error: Failed to update codeName in ${cthulhuVersionFile}" >&2
exit 1
fi
if ! rg -q "^ version: '${fullVersion}'," "$mesonFile"; then
echo "Error: Failed to update ${mesonFile}" >&2
exit 1
fi
if ! rg -q "^pkgver=${pythonVersion}$" "$pkgbuildFile"; then
echo "Error: Failed to update ${pkgbuildFile}" >&2
exit 1
fi
if ! rg -q "^pkgrel=1$" "$pkgbuildFile"; then
echo "Error: Failed to reset pkgrel in ${pkgbuildFile}" >&2
exit 1
fi
echo "Updated version to ${fullVersion} in:" \
"${cthulhuVersionFile}" \
"${mesonFile}" \
"${pkgbuildFile}"