Skip to content

Commit 279f2e3

Browse files
committed
ci: harden canary workflow startup and permissions
1 parent a7bfa69 commit 279f2e3

1 file changed

Lines changed: 38 additions & 29 deletions

File tree

.github/workflows/canary-reminder.yml

Lines changed: 38 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,12 @@ on:
44
push:
55
branches: [master, main]
66
schedule:
7-
- cron: '0 0 1 * *' # First day of every month at midnight UTC
8-
workflow_dispatch: # Allow manual trigger
7+
- cron: '0 0 1 * *' # First day of every month at midnight UTC
8+
workflow_dispatch:
9+
10+
permissions:
11+
contents: read
12+
issues: write
913

1014
jobs:
1115
noop_on_push:
@@ -19,38 +23,43 @@ jobs:
1923
if: ${{ github.event_name != 'push' }}
2024
runs-on: ubuntu-latest
2125
steps:
22-
- name: Create Issue
26+
- name: Create issue reminder
2327
uses: actions/github-script@v7
2428
with:
2529
script: |
26-
const today = new Date().toISOString().split('T')[0];
27-
const nextMonth = new Date(Date.now() + 30*24*60*60*1000).toISOString().split('T')[0];
30+
const today = new Date().toISOString().slice(0, 10);
31+
const nextMonth = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString().slice(0, 10);
32+
33+
const title = `🔐 Update Warrant Canary - ${today}`;
34+
const body = [
35+
'## Monthly Warrant Canary Update',
36+
'',
37+
'**Action Required:** Update and sign the warrant canary.',
38+
'',
39+
'### Steps:',
40+
'1. Run: `./scripts/sign-canary.sh`',
41+
'2. Review `public/canary.txt`',
42+
'3. Commit: `git add public/canary.txt public/pgp-key.asc`',
43+
`4. Push: \`git commit -m "Update warrant canary ${today}" && git push\``,
44+
'5. Deploy: `npm run deploy`',
45+
'6. Close this issue',
46+
'',
47+
'### Checklist:',
48+
'- [ ] No warrants received',
49+
'- [ ] No subpoenas received',
50+
'- [ ] No NSLs received',
51+
'- [ ] No government requests',
52+
'- [ ] No forced time manipulation',
53+
'- [ ] Infrastructure under control',
54+
'- [ ] No backdoors or compromises',
55+
'',
56+
`**Next update:** ${nextMonth}`,
57+
].join('\n');
2858
2959
await github.rest.issues.create({
3060
owner: context.repo.owner,
3161
repo: context.repo.repo,
32-
title: `🔐 Update Warrant Canary - ${today}`,
33-
body: `## Monthly Warrant Canary Update
34-
35-
**Action Required:** Update and sign the warrant canary.
36-
37-
### Steps:
38-
1. Run: \`./scripts/sign-canary.sh\`
39-
2. Review \`public/canary.txt\`
40-
3. Commit: \`git add public/canary.txt public/pgp-key.asc\`
41-
4. Push: \`git commit -m "Update warrant canary ${today}" && git push\`
42-
5. Deploy: \`npm run deploy\`
43-
6. Close this issue
44-
45-
### Checklist:
46-
- [ ] No warrants received
47-
- [ ] No subpoenas received
48-
- [ ] No NSLs received
49-
- [ ] No government requests
50-
- [ ] No forced time manipulation
51-
- [ ] Infrastructure under control
52-
- [ ] No backdoors or compromises
53-
54-
**Next update:** ${nextMonth}`,
55-
labels: ['security', 'canary', 'monthly']
62+
title,
63+
body,
64+
labels: ['security', 'canary', 'monthly'],
5665
});

0 commit comments

Comments
 (0)