#!/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}"