diff --git a/bin/cli-version b/bin/cli-version index c8ad62e..e41ca95 100755 --- a/bin/cli-version +++ b/bin/cli-version @@ -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!" diff --git a/bin/lib-version b/bin/lib-version index f36f493..4d94b94 100755 --- a/bin/lib-version +++ b/bin/lib-version @@ -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 $* diff --git a/bin/pre-release-pull b/bin/pre-release-pull new file mode 100755 index 0000000..3e04f40 --- /dev/null +++ b/bin/pre-release-pull @@ -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" diff --git a/cli/release.toml b/cli/release.toml new file mode 100644 index 0000000..61d21ca --- /dev/null +++ b/cli/release.toml @@ -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 diff --git a/lib/release.toml b/lib/release.toml new file mode 100644 index 0000000..0012cb9 --- /dev/null +++ b/lib/release.toml @@ -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 diff --git a/release.toml b/release.toml new file mode 100644 index 0000000..b1c6491 --- /dev/null +++ b/release.toml @@ -0,0 +1,4 @@ +allow-branch = ["main"] +consolidate-pushes = true +push-options = ["--follow-tags"] +push-remote = "git@github.com:watchexec/watchexec.git"