Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions scripts/update-version.bat
Original file line number Diff line number Diff line change
@@ -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 <oliver@liuxiaozhen.dev> ' + $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 <oliver@liuxiaozhen.dev> - ' + $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
60 changes: 60 additions & 0 deletions scripts/update-version.sh
Original file line number Diff line number Diff line change
@@ -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 <oliver@liuxiaozhen.dev>"
rpm_maintainer="Oliver Lin <oliver@liuxiaozhen.dev>"

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"
Loading