-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathaction.yml
More file actions
101 lines (92 loc) · 3.49 KB
/
action.yml
File metadata and controls
101 lines (92 loc) · 3.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
name: "triage-issue"
description: "Composite action to create monthly triage issue and optionally close previous month"
inputs:
close-previous:
description: "Whether to close last month’s triage issue (true/false)"
required: false
default: "true"
label:
description: "Label to apply to triage issue"
required: false
default: "triage"
body-template:
description: "Custom body template (supports {{MONTH}} placeholder)"
required: false
default: |
### Monthly GitHub Triage – {{MONTH}}
This automatically generated issue tracks triage activities for {{MONTH}}.
**Purpose**
- Collect new issues for classification.
- Track placeholders.
- Consolidate duplicates.
**Automation**
- Weekly summary comments (companion workflow).
- Future enhancements: stale detection, cross-links.
:octocat: :copilot: Created automatically.
runs:
using: "composite"
steps:
- name: Compute dates
id: dates
shell: bash
run: |
CURR=$(date -u +'%Y-%m')
PREV=$(date -u -d "$(date -u +%Y-%m-01) -1 month" +'%Y-%m')
echo "curr=$CURR" >> $GITHUB_OUTPUT
echo "prev=$PREV" >> $GITHUB_OUTPUT
- name: Ensure triage issue
uses: actions/github-script@v7
with:
script: |
const closePrev = (process.env.INPUT_CLOSE_PREVIOUS || 'true').toLowerCase() === 'true';
const label = process.env.INPUT_LABEL || 'triage';
const bodyTemplate = process.env.INPUT_BODY_TEMPLATE;
const curr = '${{ steps.dates.outputs.curr }}';
const prev = '${{ steps.dates.outputs.prev }}';
const currTitle = `GitHub Triage: ${curr}`;
const prevTitle = `GitHub Triage: ${prev}`;
async function findIssue(title) {
const perPage = 100;
for (let page = 1; page < 50; page++) {
const { data } = await github.rest.issues.listForRepo({
owner: context.repo.owner,
repo: context.repo.repo,
state: 'all',
per_page: perPage,
page
});
if (!data.length) break;
const hit = data.find(i => i.title === title);
if (hit) return hit;
if (data.length < perPage) break;
}
return null;
}
if (closePrev) {
const prevIssue = await findIssue(prevTitle);
if (prevIssue && prevIssue.state === 'open') {
await github.rest.issues.update({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prevIssue.number,
state: 'closed'
});
core.info(`Closed previous triage issue #${prevIssue.number} (${prevTitle})`);
} else {
core.info(`Previous triage issue not open or not found (${prevTitle}).`);
}
}
const currIssue = await findIssue(currTitle);
if (currIssue) {
core.info(`Current triage issue already exists: #${currIssue.number}`);
return;
}
const body = bodyTemplate.replace(/{{MONTH}}/g, curr);
const created = await github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: currTitle,
body,
labels: [label]
});
core.notice(`Created triage issue #${created.data.number} (${currTitle}).`);