-
Notifications
You must be signed in to change notification settings - Fork 64
Expand file tree
/
Copy pathaudit-chromium-schedule-dates.yml
More file actions
131 lines (109 loc) · 5.05 KB
/
Copy pathaudit-chromium-schedule-dates.yml
File metadata and controls
131 lines (109 loc) · 5.05 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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
name: Audit Chromium Schedule Dates
on:
workflow_dispatch:
schedule:
- cron: '0 18 * * *'
permissions:
actions: read
jobs:
audit_chromium_schdule_dates:
name: Audit Chromium Schedule Dates
runs-on: ubuntu-latest
steps:
- name: Setup Node
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: '22.15.0'
- name: Restore previous run data
run: |
RUN_ID=$(gh run list --workflow audit-chromium-schedule-dates.yml --branch main --status completed --limit 1 --json databaseId --jq '.[0].databaseId')
if [ -n "$RUN_ID" ]; then
gh run download "$RUN_ID" --name data
fi
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
- run: npm install @electron/fiddle-core@2.0.1
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
id: audit-chromium-schedule
with:
script: |
const fs = require('node:fs/promises');
const { ElectronVersions } = require('@electron/fiddle-core');
const PRETTY_NAMES = {
'earliest_beta': 'Earliest Beta',
'latest_beta': 'Latest Beta',
'final_beta': 'Final Beta',
'stable_date': 'Stable Date',
};
const filename = 'milestone-data.json';
let prevData = null;
try {
prevData = JSON.parse(await fs.readFile(filename));
} catch (err) {
if (err.code !== 'ENOENT') {
throw err;
} else {
core.debug('Previous data not found');
}
}
const checkMilestone = async (milestone) => {
let changesFound = false;
const res = await fetch(`https://chromiumdash.appspot.com/fetch_milestone_schedule?mstone=${milestone}`);
const keys = ['earliest_beta', 'latest_beta', 'final_beta', 'stable_date'];
const { earliest_beta, latest_beta, final_beta, stable_date } = (await res.json()).mstones[0];
const data = { earliest_beta, latest_beta, final_beta, stable_date };
core.summary.addHeading(`M${milestone}`, 2);
const headers = [{ data: 'Name', header: true }];
if (prevData !== null && milestone in prevData && keys.some((key) => data[key] !== prevData[milestone][key])) {
// Set this as failed so it's easy to scan runs to find failures
process.exitCode = 1;
core.setOutput('changesDetected', true);
core.summary.addEOL();
core.summary.addRaw('> [!WARNING]\n> Changes to milestone dates detected', true);
headers.push({ data: 'Old Date', header: true }),
headers.push({ data: 'New Date', header: true }),
core.summary.addTable([
headers,
...keys.map((key) => {
const oldDate = prevData[milestone][key].split('T')[0];
const newDate = data[key].split('T')[0];
return [PRETTY_NAMES[key], oldDate, newDate !== oldDate ? newDate : ''];
}),
]);
} else {
headers.push({ data: 'Date', header: true }),
core.summary.addTable([
headers,
...keys.map((key) => [PRETTY_NAMES[key], data[key].split('T')[0]]),
]);
}
return data;
};
const versions = await ElectronVersions.create({ ignoreCache: true });
const release = versions.getReleaseInfo(versions.latest);
const milestone = parseInt(release.chrome.match(/(\d+)\.\d+\.\d+\.\d+/)[1]);
core.summary.addHeading('📅 Chromium Milestone Dates');
// Run these in order rather than parallel so that the output is in order
const milestoneData = {};
milestoneData[milestone] = await checkMilestone(milestone);
milestoneData[milestone +1] = await checkMilestone(milestone + 1);
// Write to file to upload as artifact
await fs.writeFile(filename, JSON.stringify(milestoneData));
await core.summary.write();
- name: Send Slack message if dates changed
if: ${{ always() && steps.audit-chromium-schedule.outputs.changesDetected && github.ref == 'refs/heads/main' }}
uses: slackapi/slack-github-action@dcb1066f776dd043e64d0e8ba94ca15cc7e1875d # v4.0.0
with:
webhook: ${{ secrets.CHROMIUM_DATES_SLACK_WEBHOOK_URL }}
webhook-type: webhook-trigger
payload: |
{
"link": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
}
- name: Persist data
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: ${{ !cancelled() }}
with:
name: data
path: milestone-data.json