Skip to content

fix(footer): footer shows "for issue #N" when triggered by PR — should say "for PR #N" #41172

Description

@jaroslawgajewski

Bug report

When a workflow is triggered by a pull request, the footer comment reads:

Generated by Workflow Name for issue #

It should read:

Generated by Workflow Name for PR #

Reproduction

Trigger any safe-outputs workflow (e.g. add-comment) from a pull request. The appended footer line always says "for issue #N" regardless of whether the trigger was an issue, a PR, or a discussion.

Root cause

In actions/setup/js/messages_footer.cjs, function generateFooterWithMessages (around the "Determine triggering number" comment):

let triggeringNumber;
if (triggeringIssueNumber) {
  triggeringNumber = triggeringIssueNumber;
} else if (triggeringPRNumber) {
  triggeringNumber = triggeringPRNumber;          // ← type info lost
} else if (triggeringDiscussionNumber) {
  triggeringNumber = `discussion #${triggeringDiscussionNumber}`;  // ← mangled
}

The type information (issue vs. PR vs. discussion) is discarded. Then getFooterMessage unconditionally appends:

footer += ` for issue #{triggering_number}`.replace();

…emitting "for issue #N" for every trigger type.

The discussion branch tried to encode the type as a string ("discussion #N"), but this produces the double-prefix "for issue #discussion #N".

Proposed fix

Introduce a triggeringLabel field alongside triggeringNumber. The label carries the full human-readable reference:

let triggeringNumber;
let triggeringLabel;
if (triggeringIssueNumber) {
  triggeringNumber = triggeringIssueNumber;
  triggeringLabel = `issue #${triggeringIssueNumber}`;
} else if (triggeringPRNumber) {
  triggeringNumber = triggeringPRNumber;
  triggeringLabel = `PR #${triggeringPRNumber}`;
} else if (triggeringDiscussionNumber) {
  triggeringNumber = triggeringDiscussionNumber;
  triggeringLabel = `discussion #${triggeringDiscussionNumber}`;
}

const ctx = {, triggeringNumber, triggeringLabel };

In getFooterMessage, use the label when present and fall back to the old form (backwards-compatible for callers that supply triggeringNumber directly):

if (ctx.triggeringNumber) {
  footer += ctx.triggeringLabel
    ? ` for ${ctx.triggeringLabel}`
    : ` for issue #{triggering_number}`.replace("{triggering_number}", String(ctx.triggeringNumber));
}

Two test assertions in messages.test.cjs must also be updated:

  • "for issue #99""for PR #99" (PR-triggered test)
  • "for issue #discussion #7""for discussion #7" (discussion-triggered test)

Metadata

Metadata

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions