diff --git a/scripts/update-version.bat b/scripts/update-version.bat new file mode 100644 index 0000000..2f05e4f --- /dev/null +++ b/scripts/update-version.bat @@ -0,0 +1,54 @@ +@echo off +rem Update the project version everywhere: Cargo.toml, Cargo.lock, +rem debian/changelog and packaging/patchsplit.spec. +rem Usage: scripts\update-version.bat [X.Y.Z] (prompts for a version if omitted) + +cd /d "%~dp0.." + +set "VERSION=%~1" +if not defined VERSION set /p "VERSION=Enter new version (e.g. 1.3.0): " + +if not defined VERSION ( + echo Error: no version entered. + exit /b 1 +) + +powershell -NoProfile -Command ^ + "$ErrorActionPreference = 'Stop';" ^ + "$v = $env:VERSION;" ^ + "if ($v -notmatch '^[0-9]+\.[0-9]+\.[0-9]+$') { Write-Host ('Error: invalid version: ' + $v + ' (expected X.Y.Z)'); exit 1 };" ^ + "$debSuffix = '1~ubuntu26.04.1';" ^ + "$debDist = 'resolute';" ^ + "$now = Get-Date;" ^ + "$ci = [Globalization.CultureInfo]::InvariantCulture;" ^ + "$debDate = [regex]::Replace($now.ToString('ddd, dd MMM yyyy HH:mm:ss zzz', $ci), '([+-]\d{2}):(\d{2})$', '$1$2');" ^ + "$specDate = $now.ToString('ddd MMM dd yyyy', $ci);" ^ + "$p = 'Cargo.toml';" ^ + "$t = [IO.File]::ReadAllText($p);" ^ + "$t = $t -replace '(?m)^version = \"[^\"]*\"', ('version = \"' + $v + '\"');" ^ + "[IO.File]::WriteAllText($p, $t);" ^ + "$p = 'Cargo.lock';" ^ + "$t = [IO.File]::ReadAllText($p);" ^ + "$t = $t -replace '(?m)(name = \"patchsplit\"\r?\nversion = \")[^\"]*\"', ('$1' + $v + '\"');" ^ + "[IO.File]::WriteAllText($p, $t);" ^ + "$p = 'debian/changelog';" ^ + "$t = [IO.File]::ReadAllText($p);" ^ + "$eol = if ($t.Contains([char]13)) { \"`r`n\" } else { \"`n\" };" ^ + "$entry = 'patchsplit (' + $v + '-' + $debSuffix + ') ' + $debDist + '; urgency=medium' + $eol + $eol + ' *' + $eol + $eol + ' -- Oliver ' + $debDate + $eol + $eol;" ^ + "[IO.File]::WriteAllText($p, $entry + $t);" ^ + "$p = 'packaging/patchsplit.spec';" ^ + "$t = [IO.File]::ReadAllText($p);" ^ + "$t = $t -replace '(?m)^Version:.*$', ('Version: ' + $v);" ^ + "$t = $t -replace ('(?m)^' + [char]37 + 'changelog\r?\n'), ([char]37 + 'changelog' + $eol + '* ' + $specDate + ' Oliver Lin - ' + $v + '-1' + $eol + $eol);" ^ + "[IO.File]::WriteAllText($p, $t);" + +if errorlevel 1 ( + echo Version update failed. + exit /b 1 +) + +echo Updated to %VERSION%: +echo Cargo.toml +echo Cargo.lock +echo debian/changelog +echo packaging/patchsplit.spec diff --git a/scripts/update-version.sh b/scripts/update-version.sh new file mode 100755 index 0000000..cc21d33 --- /dev/null +++ b/scripts/update-version.sh @@ -0,0 +1,60 @@ +#!/bin/sh +# Update the project version everywhere: Cargo.toml, Cargo.lock, +# debian/changelog and packaging/patchsplit.spec. +# Usage: scripts/update-version.sh [X.Y.Z] (prompts for a version if omitted) +set -eu + +cd "$(dirname "$0")/.." + +if [ $# -ge 1 ]; then + version="$1" +else + printf 'Enter new version (e.g. 1.3.0): ' + read -r version +fi + +printf '%s' "$version" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+$' || { + printf 'Error: invalid version: %s (expected X.Y.Z)\n' "$version" >&2 + exit 1 +} + +deb_suffix="1~ubuntu26.04.1" +deb_dist="resolute" +deb_maintainer="Oliver " +rpm_maintainer="Oliver Lin " + +deb_date="$(LC_ALL=C date -R)" +rpm_date="$(LC_ALL=C date '+%a %b %d %Y')" + +# Cargo.toml +sed -i "s/^version = .*/version = \"$version\"/" Cargo.toml + +# Cargo.lock (version line right after the patchsplit package entry) +sed -i "/^name = \"patchsplit\"\$/{n;s/^version = .*/version = \"$version\"/;}" Cargo.lock + +tmp="$(mktemp)" +trap 'rm -f "$tmp"' EXIT + +# debian/changelog: new entry on top, content left empty +{ + printf 'patchsplit (%s-%s) %s; urgency=medium\n\n *\n\n -- %s %s\n\n' \ + "$version" "$deb_suffix" "$deb_dist" "$deb_maintainer" "$deb_date" + cat debian/changelog +} > "$tmp" +mv "$tmp" debian/changelog + +# packaging/patchsplit.spec: Version field + new %changelog entry (content left empty) +sed -i "s/^Version:.*/Version: $version/" packaging/patchsplit.spec +awk -v v="$version" -v d="$rpm_date" -v m="$rpm_maintainer" ' + /^%changelog$/ && !done { + print + printf "* %s %s - %s-1\n", d, m, v + print "" + done = 1 + next + } + { print } +' packaging/patchsplit.spec > "$tmp" +mv "$tmp" packaging/patchsplit.spec + +printf 'Updated to %s:\n Cargo.toml\n Cargo.lock\n debian/changelog\n packaging/patchsplit.spec\n' "$version"