@@ -20,6 +20,11 @@ name: Append mailing-list thread link to new Discussion
2020on :
2121 discussion :
2222 types : [created]
23+ workflow_dispatch :
24+ inputs :
25+ discussion_url :
26+ description : ' Discussion URL to backfill mailing list link'
27+ required : true
2328
2429permissions :
2530 discussions : write
@@ -33,12 +38,41 @@ jobs:
3338 uses : actions/github-script@v7
3439 with :
3540 script : |
36- const { context, github, core } = require('@actions/github');
41+ let owner = context.repo.owner;
42+ let repo = context.repo.repo;
43+
44+ const manualUrl = context.payload.inputs && context.payload.inputs.discussion_url
45+ ? context.payload.inputs.discussion_url.trim()
46+ : '';
47+
48+ let discussion = context.payload.discussion || null;
49+ let number = discussion ? discussion.number : null;
50+
51+ if (manualUrl) {
52+ const match = manualUrl.match(/github\.com\/([^/]+)\/([^/]+)\/discussions\/(\d+)/i);
53+ if (!match) {
54+ core.setFailed(`Invalid discussion URL: ${manualUrl}`);
55+ return;
56+ }
57+ owner = match[1];
58+ repo = match[2];
59+ number = Number(match[3]);
60+ if (!number || Number.isNaN(number)) {
61+ core.setFailed(`Invalid discussion number in URL: ${manualUrl}`);
62+ return;
63+ }
64+ const { data } = await github.request(
65+ 'GET /repos/{owner}/{repo}/discussions/{number}',
66+ { owner, repo, number }
67+ );
68+ discussion = data;
69+ }
70+
71+ if (!discussion) {
72+ core.setFailed('Discussion payload missing and no discussion_url input provided');
73+ return;
74+ }
3775
38- const owner = context.repo.owner;
39- const repo = context.repo.repo;
40- const discussion = context.payload.discussion;
41- const number = discussion.number;
4276 const title = discussion.title || '';
4377
4478 const baseUrl = 'https://lists.apache.org/api/stats.lua';
0 commit comments