-
Notifications
You must be signed in to change notification settings - Fork 614
178 lines (167 loc) · 6.04 KB
/
dogfood.yml
File metadata and controls
178 lines (167 loc) · 6.04 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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
name: Dogfood
# Dispatches update-supabase-js workflows across all downstream repos
# Can be triggered manually or called from publish.yml after a stable release
on:
workflow_dispatch:
inputs:
version:
description: 'supabase-js version to dogfood (e.g. 2.49.0)'
required: true
type: string
source:
description: 'Source of the trigger'
required: false
type: string
default: 'manual'
workflow_call:
inputs:
version:
description: 'supabase-js version to dogfood'
required: true
type: string
source:
description: 'Source of the trigger'
required: false
type: string
default: 'supabase-js-stable-release'
secrets:
APP_ID:
required: true
PRIVATE_KEY:
required: true
DOGFOOD_APP_ID:
required: true
DOGFOOD_APP_PRIVATE_KEY:
required: true
permissions: {}
jobs:
trigger-downstream:
name: Trigger Downstream Updates
runs-on: ubuntu-latest
steps:
- name: Generate token for member check
id: app-token-member-check
uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.PRIVATE_KEY }}
- name: Generate token for dogfood
id: app-token-dogfood
uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf
with:
app-id: ${{ secrets.DOGFOOD_APP_ID }}
private-key: ${{ secrets.DOGFOOD_APP_PRIVATE_KEY }}
owner: supabase
repositories: supabase,multiplayer.dev,platform,tests,realtime,ssr,helper-scripts,embeddings-generator,dbdev
- name: Check if actor is member of admin or sdk team
id: team-check
if: ${{ github.event_name == 'workflow_dispatch' }}
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
with:
github-token: ${{ steps.app-token-member-check.outputs.token }}
script: |
const org = 'supabase'
const { actor } = context
async function isTeamMember(team_slug) {
try {
const res = await github.rest.teams.getMembershipForUserInOrg({
org,
team_slug,
username: actor,
})
return res && res.status === 200
} catch (_) {
return false
}
}
const isAdmin = await isTeamMember('admin')
const isSdk = await isTeamMember('sdk')
const isMember = isAdmin || isSdk
core.setOutput('is_team_member', isMember ? 'true' : 'false')
- name: Fail if not authorized
if: ${{ github.event_name == 'workflow_dispatch' && steps.team-check.outputs.is_team_member != 'true' }}
run: |
echo "You must be a member of @supabase/admin or @supabase/sdk."
exit 1
- name: Dispatch update workflows
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
env:
VERSION: ${{ inputs.version }}
SOURCE: ${{ inputs.source }}
with:
github-token: ${{ steps.app-token-dogfood.outputs.token }}
script: |
const version = process.env.VERSION;
const source = process.env.SOURCE;
const dispatches = [
{
repo: 'supabase',
workflow: 'update-js-libs.yml',
inputs: { version, source },
},
{
repo: 'multiplayer.dev',
workflow: 'update-supabase-js.yml',
inputs: { package: 'supabase-js', version, source },
},
{
repo: 'platform',
workflow: 'update-supabase-js.yml',
inputs: { version, source },
},
{
repo: 'tests',
workflow: 'update-supabase-js.yml',
inputs: { version, source },
},
{
repo: 'realtime',
workflow: 'update-supabase-js.yml',
inputs: { version, source },
},
{
repo: 'ssr',
workflow: 'update-supabase-js.yml',
inputs: { version, source },
},
{
repo: 'helper-scripts',
workflow: 'update-supabase-js.yml',
inputs: { version, source },
},
{
repo: 'embeddings-generator',
workflow: 'update-supabase-js.yml',
inputs: { version, source },
},
{
repo: 'dbdev',
workflow: 'update-supabase-js.yml',
inputs: { version, source },
},
];
const results = [];
for (const { repo, workflow, inputs } of dispatches) {
try {
const { data: repoData } = await github.rest.repos.get({
owner: 'supabase',
repo,
});
await github.rest.actions.createWorkflowDispatch({
owner: 'supabase',
repo,
workflow_id: workflow,
ref: repoData.default_branch,
inputs,
});
const repoLink = `<a href="https://github.com/supabase/${repo}/pulls">supabase/${repo}</a>`;
results.push(`✅ ${repoLink} — ${workflow}`);
} catch (error) {
const repoLink = `<a href="https://github.com/supabase/${repo}/pulls">supabase/${repo}</a>`;
results.push(`❌ ${repoLink} — ${workflow}: ${error.message}`);
}
}
core.summary.addHeading('Dogfood Dispatch Results', 2);
core.summary.addList(results);
await core.summary.write();
console.log(results.join('\n'));