Setup cargo-release

This commit is contained in:
Félix Saparelli 2022-02-10 00:28:53 +13:00
parent e5bb99a60b
commit 797a7fc708
6 changed files with 97 additions and 103 deletions

View File

@ -1,55 +1,7 @@
#!/usr/bin/env bash
set -euo pipefail
app="watchexec"
mainbranch="main"
upstream_rx="watchexec/"
curbranch=$(git rev-parse --abbrev-ref HEAD)
if [[ "$curbranch" != "$mainbranch" ]]; then
echo "Current branch is not $mainbranch, abort!"
exit 1
fi
gitstatus=$(git status --untracked-files=no --porcelain)
if [[ ! -z "$gitstatus" ]]; then
echo "Uncommited files and changes, abort!"
exit 2
fi
upstream=$(git remote -v | grep -i "$upstream_rx" -m1 | awk '{print $1}')
echo "Upstream remote discovered as: $upstream"
echo "Pulling from upstream"
git pull --rebase --autostash $upstream $mainbranch
echo "Fetching tags from upstream"
git fetch --tags "$upstream"
extver=$(grep -P '^version =' cli/Cargo.toml | head -n1 | cut -d'"' -f2)
echo "(Version from cli/Cargo.toml: $extver)"
newver="$1"
if [[ "$newver" == "$extver" ]]; then
echo "New and existing versions are the same, abort!"
exit 3
fi
date=$(date +%Y-%m-%d)
echo "Next version to be $newver ($date), creating..."
sed -E -i "s/version=\"$extver.0\"/version=\"$newver.0\"/1" cli/watchexec.exe.manifest
sed -E -i "s/watchexec(.exe)? $extver/watchexec\1 $newver/" cli/tests/snapshots/help__*
sed -E -i "s/^version = \"$extver\"/version = \"$newver\"/1" cli/Cargo.toml
sed -E -i "s/^version: \"?$extver\"?/version: \"$newver\"/1" CITATION.cff
sed -E -i "s/^date-released: .+$/date-released: $date/1" CITATION.cff
cargo check
git commit -am "cli: v$newver"
git tag -sam "watchexec-cli $newver" "cli-v$newver"
echo "Pushing to upstream"
git push --follow-tags $upstream $mainbranch
bin/manpage
bin/pre-release-pull
cargo release -v -p watchexec-cli $*
echo "REMEMBER to do a 'cargo publish' once CI is done!"

View File

@ -1,54 +1,5 @@
#!/usr/bin/env bash
set -euo pipefail
app="watchexec"
mainbranch="main"
upstream_rx="watchexec/"
curbranch=$(git rev-parse --abbrev-ref HEAD)
if [[ "$curbranch" != "$mainbranch" ]]; then
echo "Current branch is not $mainbranch, abort!"
exit 1
fi
gitstatus=$(git status --untracked-files=no --porcelain)
if [[ ! -z "$gitstatus" ]]; then
echo "Uncommited files and changes, abort!"
exit 2
fi
upstream=$(git remote -v | grep -i "$upstream_rx" -m1 | awk '{print $1}')
echo "Upstream remote discovered as: $upstream"
echo "Pulling from upstream"
git pull --rebase --autostash $upstream $mainbranch
echo "Fetching tags from upstream"
git fetch --tags "$upstream"
extver=$(grep -P '^version =' lib/Cargo.toml | head -n1 | cut -d'"' -f2)
echo "(Version from lib/Cargo.toml: $extver)"
newver="$1"
if [[ "$newver" == "$extver" ]]; then
echo "New and existing versions are the same, abort!"
exit 3
fi
date=$(date +%Y-%m-%d)
echo "Next version to be $newver ($date), creating..."
sed -E -i "s/^version = \"$extver\"/version = \"$newver\"/1" lib/Cargo.toml
sed -E -i "s/^version: \"?$extver\"?/version: \"$newver\"/1" lib/CITATION.cff
sed -E -i "s/^date-released: .+$/date-released: $date/1" lib/CITATION.cff
sed -E -i "s/^watchexec = \{ version = \"$extver\"/watchexec = { version = \"$newver\"/1" cli/Cargo.toml
cargo check
git commit -am "lib: v$newver"
git tag -sam "watchexec $newver" "lib-v$newver"
echo "Pushing to upstream"
git push --follow-tags $upstream $mainbranch
bin/pre-release-pull
cargo release -v -p watchexec $*

16
bin/pre-release-pull Executable file
View File

@ -0,0 +1,16 @@
#!/usr/bin/env bash
[[ ! -z "$WORKSPACE_ROOT" ]] && cd "$WORKSPACE_ROOT"
set -euo pipefail
mainbranch="main"
upstream_rx="watchexec/"
upstream=$(git remote -v | grep -i "$upstream_rx" -m1 | awk '{print $1}')
echo "Upstream remote discovered as: $upstream"
echo "Pulling from upstream"
git pull --rebase --autostash "$upstream" "$mainbranch"
echo "Fetching tags from upstream"
git fetch --tags "$upstream"

46
cli/release.toml Normal file
View File

@ -0,0 +1,46 @@
pre-release-hook = ["../bin/pre-release-pull"]
pre-release-commit-message = "cli: v{{version}}"
tag-prefix = "cli-"
tag-message = "watchexec {{version}}"
# We wait until the release CI is done before publishing,
# because publishing is irreversible, but a release can be
# reverted a lot more easily.
publish = false
[[pre-release-replacements]]
file = "../CITATION.cff"
search = "^version: \"?[\\d.]+(-.+)?\"?"
replace = "version: \"{{version}}\""
prerelease = true
max = 1
[[pre-release-replacements]]
file = "../CITATION.cff"
search = "^date-released: .+(-.+)?"
replace = "date-released: {{date}}"
prerelease = true
max = 1
[[pre-release-replacements]]
file = "watchexec.exe.manifest"
search = "^ version=\"[\\d.]+[.]0\""
replace = " version=\"{{version}}.0\""
prerelease = false
max = 1
[[pre-release-replacements]]
file = "tests/snapshots/help__help_windows.snap"
search = "watchexec.exe [\\d.]+(-.+)?"
replace = "watchexec.exe {{version}}"
prerelease = true
min = 0
max = 1
[[pre-release-replacements]]
file = "tests/snapshots/help__help_unix.snap"
search = "watchexec [\\d.]+(-.+)?"
replace = "watchexec {{version}}"
prerelease = true
min = 0
max = 1

25
lib/release.toml Normal file
View File

@ -0,0 +1,25 @@
pre-release-hook = ["../bin/pre-release-pull"]
pre-release-commit-message = "lib: v{{version}}"
tag-prefix = "lib-"
tag-message = "watchexec-lib {{version}}"
[[pre-release-replacements]]
file = "CITATION.cff"
search = "^version: \"?[\\d.]+(-.+)?\"?"
replace = "version: \"{{version}}\""
prerelease = true
max = 1
[[pre-release-replacements]]
file = "CITATION.cff"
search = "^date-released: .+"
replace = "date-released: {{date}}"
prerelease = true
max = 1
[[pre-release-replacements]]
file = "../cli/Cargo.toml"
search = "^watchexec = \\{ version = \"[\\d.]+(-.+)?\", path = \"../lib\" \\}"
replace = "watchexec = { version = \"{{version}}\", path = \"../lib\" }"
prerelease = true
min = 0

4
release.toml Normal file
View File

@ -0,0 +1,4 @@
allow-branch = ["main"]
consolidate-pushes = true
push-options = ["--follow-tags"]
push-remote = "git@github.com:watchexec/watchexec.git"