diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 33cdfaf..4bc7268 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -49,16 +49,29 @@ jobs: echo "pr_number=$PR_NUMBER" >> "$GITHUB_OUTPUT" + # Write PR body to a temp file to reliably preserve multiline content + PR_BODY_FILE=$(mktemp) + printf '%s\n' "$PR_BODY" > "$PR_BODY_FILE" + DELIM="EOF_$(uuidgen 2>/dev/null || echo "${RANDOM}${RANDOM}")" printf 'pr_body<<%s\n' "$DELIM" >> "$GITHUB_OUTPUT" - printf '%s\n' "$PR_BODY" >> "$GITHUB_OUTPUT" + cat "$PR_BODY_FILE" >> "$GITHUB_OUTPUT" printf '%s\n' "$DELIM" >> "$GITHUB_OUTPUT" + + # Extract only the checkbox lines between version-bump markers + CHECKBOX_LINES=$(awk '//, //' "$PR_BODY_FILE") + if [ -z "$CHECKBOX_LINES" ]; then + echo "::warning::Version-bump markers not found in PR body; scanning full body." + CHECKBOX_LINES=$(cat "$PR_BODY_FILE") + fi + rm -f "$PR_BODY_FILE" + # Detect checked version-bump checkbox - if echo "$PR_BODY" | grep -qE '^[[:space:]]*\- \[xX\] \*\*Major\*\*'; then + if grep -qE '\- \[[xX]\] \*\*Major\*\*' <<< "$CHECKBOX_LINES"; then echo "bump_type=major" >> "$GITHUB_OUTPUT" - elif echo "$PR_BODY" | grep -qE '^[[:space:]]*\- \[xX\] \*\*Minor\*\*'; then + elif grep -qE '\- \[[xX]\] \*\*Minor\*\*' <<< "$CHECKBOX_LINES"; then echo "bump_type=minor" >> "$GITHUB_OUTPUT" - elif echo "$PR_BODY" | grep -qE '^[[:space:]]*\- \[xX\] \*\*Patch\*\*'; then + elif grep -qE '\- \[[xX]\] \*\*Patch\*\*' <<< "$CHECKBOX_LINES"; then echo "bump_type=patch" >> "$GITHUB_OUTPUT" else echo "::error::No version bump checkbox selected in PR #$PR_NUMBER."