Skip to content

Commit f145fac

Browse files
authored
ci: generate release calendar events for an Electron major (#39)
1 parent b39c021 commit f145fac

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
name: Release Calendar Events
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
major:
7+
description: Electron major (e.g. 30)
8+
required: true
9+
type: string
10+
11+
permissions: {}
12+
13+
jobs:
14+
generate-calendar-events:
15+
name: Generate Calendar Events
16+
runs-on: ubuntu-latest
17+
steps:
18+
- uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
19+
with:
20+
script: |
21+
const fs = require('node:fs/promises');
22+
23+
const INITIAL_MILESTONE = 64;
24+
const major = ${{ github.event.inputs.major }};
25+
const milestone = INITIAL_MILESTONE + major*2;
26+
27+
const events = [['Subject', 'Start Date', 'End Date', 'All Day Event']];
28+
29+
// Events for the beta milestone
30+
{
31+
const res = await fetch(`https://chromiumdash.appspot.com/fetch_milestone_schedule?mstone=${milestone - 1}`);
32+
const stableDate = new Date((await res.json()).mstones[0].stable_date);
33+
34+
if (stableDate.getDay() !== 2) {
35+
throw new Error(`Expected stable date to be a Tuesday: ${stableDate}`);
36+
}
37+
38+
let date = stableDate.toISOString().split('T')[0];
39+
events.push([`${major}.0.0-beta.1 (M${milestone - 1})`, date, date, 'True']);
40+
41+
const kickOffDate = new Date(stableDate);
42+
kickOffDate.setDate(kickOffDate.getDate() - 1);
43+
date = kickOffDate.toISOString().split('T')[0];
44+
events.push([`Action: Kick Off ${major}.0.0-beta.1`, date, date, 'True']);
45+
}
46+
47+
// Events for the main milestone
48+
{
49+
const res = await fetch(`https://chromiumdash.appspot.com/fetch_milestone_schedule?mstone=${milestone}`);
50+
const stableDate = new Date((await res.json()).mstones[0].stable_date);
51+
52+
if (stableDate.getDay() !== 2) {
53+
throw new Error(`Expected stable date to be a Tuesday: ${stableDate}`);
54+
}
55+
56+
let date = stableDate.toISOString().split('T')[0];
57+
events.push([`✨${major}.0.0 Stable✨ (M${milestone})`, date, date, 'True']);
58+
59+
const kickOffStableDate = new Date(stableDate);
60+
kickOffStableDate.setDate(kickOffStableDate.getDate() - 1);
61+
date = kickOffStableDate.toISOString().split('T')[0];
62+
events.push([`Action: Kick Off ${major}.0.0`, date, date, 'True']);
63+
64+
const kickOffAlphaDate = new Date(stableDate);
65+
kickOffAlphaDate.setDate(kickOffAlphaDate.getDate() + 1);
66+
date = kickOffAlphaDate.toISOString().split('T')[0];
67+
events.push([`Action: Kick Off ${major + 1}.0.0-alpha.1`, date, date, 'True']);
68+
69+
const alphaDate = new Date(kickOffAlphaDate);
70+
alphaDate.setDate(alphaDate.getDate() + 1);
71+
date = alphaDate.toISOString().split('T')[0];
72+
events.push([`${major + 1}.0.0-alpha.1`, date, date, 'True']);
73+
74+
const stableWeekDate = new Date(kickOffStableDate);
75+
stableWeekDate.setDate(stableWeekDate.getDate() - 7);
76+
const startDate = stableWeekDate.toISOString().split('T')[0];
77+
stableWeekDate.setDate(stableWeekDate.getDate() + 5);
78+
const endDate = stableWeekDate.toISOString().split('T')[0];
79+
events.push(['Stable Prep Week', startDate, endDate, 'True']);
80+
81+
const stablePrepAssign = new Date(kickOffAlphaDate);
82+
stablePrepAssign.setDate(stablePrepAssign.getDate() - 14);
83+
date = stablePrepAssign.toISOString().split('T')[0];
84+
events.push(['Action: Stable Prep Assignment', date, date, 'True']);
85+
}
86+
87+
await fs.writeFile(`e${major}-calendar-events.csv`, events.flatMap((row) => row.join(',')).join('\n'));
88+
- uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
89+
with:
90+
name: Calendar Events E${{ github.event.inputs.major }}
91+
path: e${{ github.event.inputs.major }}-calendar-events.csv

0 commit comments

Comments
 (0)