Spaces:
Paused
Paused
File size: 1,826 Bytes
a161ae7 fcd7cd4 a161ae7 5959aee a161ae7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | #!/usr/bin/env bash
set -euo pipefail
case "${1:-}" in
repair)
TAG=$(gh release list --limit 1 --json tagName --jq '.[0].tagName')
echo "Re-triggering release for $TAG..."
gh release delete "$TAG" --yes
git tag -f "$TAG"
git push origin "$TAG" --force
gh release create "$TAG" --generate-notes
echo "Re-created release $TAG"
exit 0
;;
""|--help|-h)
echo "Usage: $0 <version> Create a new release" >&2
echo " $0 repair Re-trigger the last release workflow" >&2
echo "Example: $0 1.0.0" >&2
exit 1
;;
esac
VERSION="${1#v}"
TAG="v$VERSION"
# Ensure working tree is clean
if ! git diff --quiet || ! git diff --cached --quiet; then
echo "Error: working tree is not clean. Commit or stash changes first." >&2
exit 1
fi
REPO_ROOT="$(git rev-parse --show-toplevel)"
# Update Cargo.toml version — rewrite the first `version = "..."` line (the
# [package] version; dependency versions are inline and don't start a line).
# Uses awk for portability: BSD/macOS sed rejects `sed -i` without a suffix and
# the GNU-only `0,/re/` address form.
cargo_toml="$REPO_ROOT/api/Cargo.toml"
tmp="$(mktemp)"
awk -v ver="$VERSION" '
!done && /^version = "/ { sub(/"[^"]*"/, "\"" ver "\""); done = 1 }
{ print }
' "$cargo_toml" > "$tmp" && mv "$tmp" "$cargo_toml"
# Update Cargo.lock
(cd "$REPO_ROOT/api" && cargo update --workspace)
# Update package.json version
cd "$REPO_ROOT/web" && npm version "$VERSION" --no-git-tag-version
cd "$REPO_ROOT"
git add "$REPO_ROOT/api/Cargo.toml" "$REPO_ROOT/api/Cargo.lock" "$REPO_ROOT/web/package.json" "$REPO_ROOT/web/package-lock.json"
git commit -m "release: $TAG"
git push origin main
gh release create "$TAG" --generate-notes
echo "Released $TAG"
|