diff --git a/tools/changelog.sh b/tools/changelog.sh index cb30b2d7..36fd8f9b 100755 --- a/tools/changelog.sh +++ b/tools/changelog.sh @@ -130,8 +130,9 @@ if [[ -n "$(git status --porcelain -- "$CHANGELOG_FILE")" ]]; then git add "$CHANGELOG_FILE" echo "Staged $CHANGELOG_FILE for commit" else - echo "Changes detected in '$CHANGELOG_FILE', but not staged (no --stage flag)" + echo "Changes not staged (no --stage flag)" fi else - echo "No changes in '$CHANGELOG_FILE', skipping staging" + echo "No changes in '$CHANGELOG_FILE', aborting release." + exit 1 fi diff --git a/tools/release.sh b/tools/release.sh index 41dc2d4a..92257b32 100755 --- a/tools/release.sh +++ b/tools/release.sh @@ -25,6 +25,11 @@ if [[ ! "$LEVEL" =~ ^(patch|minor|major)$ ]]; then echo "Error: invalid level '$LEVEL'. Use: patch, minor, or major" exit 1 fi +if [[ -n "$(git status --porcelain)" ]]; then + echo "Error: uncommitted changes detected. Please commit or stash before releasing." >&2 + git status --short >&2 + exit 1 +fi # Dependencias command -v cargo-release >/dev/null || { @@ -41,6 +46,8 @@ cd "$(dirname "$0")/.." || exit 1 if [[ "$EXECUTE" != "--execute" ]]; then echo "Running dry-run (default mode). Add --execute to publish" cargo release --config "$CONFIG" --package "$CRATE" "$LEVEL" + # El hook puede haber aƱadido el CHANGELOG al staged; lo revertimos + git diff --cached --name-only | grep 'CHANGELOG.md' | xargs -r git reset -- else echo "Releasing $CRATE ($LEVEL)..." cargo release --config "$CONFIG" --package "$CRATE" "$LEVEL" --execute