diff --git a/.forgejo/workflows/build_release.yml b/.forgejo/workflows/build_release.yml index 26ed46418..ba477b01d 100755 --- a/.forgejo/workflows/build_release.yml +++ b/.forgejo/workflows/build_release.yml @@ -112,11 +112,11 @@ jobs: git fetch --no-tags --depth=1 "https://github.com/${upstream_repo}.git" "$upstream_base" || true fi - use_fork_merge_split=0 + # Release notes: only commits since the *previous release tag* (short, correct scope). + # Do not use upstream_base..HEAD here — that lists the whole fork delta and is huge. + changelog_commit_limit=50 log_range="" - if [ -n "$upstream_base" ] && git cat-file -e "${upstream_base}^{commit}" 2>/dev/null; then - use_fork_merge_split=1 - elif [ -n "$previous_tag" ]; then + if [ -n "$previous_tag" ]; then log_range="${previous_tag}..HEAD" fi @@ -209,37 +209,22 @@ jobs: [ "$any" -eq 1 ] } - if [ "$use_fork_merge_split" -eq 1 ]; then - { - printf '%s\n' "#### Fork changes" "" - clear_buckets - fill_buckets_from_git "${upstream_base}..HEAD" --no-merges - if [ ${#new_lines[@]} -eq 0 ] && [ ${#fix_lines[@]} -eq 0 ] && [ ${#improve_lines[@]} -eq 0 ] && [ ${#other_lines[@]} -eq 0 ]; then - printf '%s\n' "_No direct commits in this range._" "" - else - emit_buckets_from_arrays - fi - - clear_buckets - fill_buckets_from_git "${upstream_base}..HEAD" --merges - if [ ${#new_lines[@]} -gt 0 ] || [ ${#fix_lines[@]} -gt 0 ] || [ ${#improve_lines[@]} -gt 0 ] || [ ${#other_lines[@]} -gt 0 ]; then - printf '%s\n' "#### Merge commits" "" - emit_buckets_from_arrays - printf '\n' - fi - } > "${commit_log_file}" - elif [ -n "$log_range" ]; then + if [ -n "$log_range" ]; then + total_in_range="$(git rev-list --count "${log_range}" 2>/dev/null || printf '0')" clear_buckets - fill_buckets_from_git "$log_range" + fill_buckets_from_git "$log_range" "-n${changelog_commit_limit}" { if emit_buckets_from_arrays; then - : + if [ "${total_in_range}" -gt "${changelog_commit_limit}" ] 2>/dev/null; then + printf '%s\n' "" "_Showing the ${changelog_commit_limit} most recent commits since ${previous_tag}._" \ + "_Older commits in this release: use **Full Changelog** below._" "" + fi else - printf '%s\n' "##### Other" "" "- Initial release" "" + printf '%s\n' "##### Other" "" "- No commit messages in this tag range." "" fi } > "${commit_log_file}" else - printf '%s\n' "##### Other" "" "- Initial release" "" > "${commit_log_file}" + printf '%s\n' "##### Other" "" "- First release tag, or no prior \`v*\` tag found — see repository history." "" > "${commit_log_file}" fi # Do not pass multiline commit text via step outputs / env (breaks some Forgejo/act_runner @@ -421,9 +406,6 @@ jobs: VERSION_TAG: ${{ steps.prepare.outputs.VERSION_TAG }} VERSION_DISPLAY: ${{ steps.prepare.outputs.VERSION_DISPLAY }} PREV_TAG_NAME: ${{ steps.prepare.outputs.PREV_TAG_NAME }} - UPSTREAM_REPO: ${{ steps.prepare.outputs.UPSTREAM_REPO }} - UPSTREAM_REF: ${{ steps.prepare.outputs.UPSTREAM_REF }} - UPSTREAM_BASE: ${{ steps.prepare.outputs.UPSTREAM_BASE }} REPO_URL: ${{ github.server_url }}/${{ github.repository }} REPOSITORY_NAME: ${{ github.repository }} FORGEJO_CURL_INSECURE: "true" @@ -522,10 +504,6 @@ jobs: if [ -n "${PREV_TAG_NAME:-}" ]; then full_changelog="**Full Changelog**: [${REPOSITORY_NAME}@${PREV_TAG_NAME}...${VERSION_TAG}](${REPO_URL}/compare/${PREV_TAG_NAME}...${VERSION_TAG})" fi - fork_delta_label="" - if [ -n "${UPSTREAM_BASE:-}" ] && [ -n "${UPSTREAM_REF:-}" ]; then - fork_delta_label="Fork delta vs ${UPSTREAM_REPO}@${UPSTREAM_REF} (${UPSTREAM_BASE})" - fi release_body_file="$(mktemp)" { @@ -533,13 +511,11 @@ jobs: "#### What's Changed" \ "" \ "${commit_logs}" \ - "" \ - "##### Based on" \ - "" \ - "${fork_delta_label}" \ - "" \ - "${full_changelog}" \ - "" \ + "" + if [ -n "${full_changelog}" ]; then + printf '%s\n' "${full_changelog}" "" + fi + printf '%s\n' \ "" \ "> [!TIP]" \ ">" \