Skip to content

Commit 3e48bb7

Browse files
committed
Add action typing
1 parent df432ce commit 3e48bb7

File tree

4 files changed

+368
-3
lines changed

4 files changed

+368
-3
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
name: Check Action Typing
2+
3+
on:
4+
- pull_request
5+
6+
permissions:
7+
contents: read
8+
9+
jobs:
10+
check_action_typing:
11+
name: Check Action Typing
12+
runs-on: ubuntu-latest
13+
steps:
14+
- name: Checkout
15+
uses: actions/checkout@v4
16+
17+
- name: Check Action Typing
18+
uses: typesafegithub/github-actions-typing@v2

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
GitHub Action for creating a GitHub App installation access token.
66

7+
Thanks to the provided [typings](action-types.yml), it is possible to use this action in a type-safe way using
8+
https://github.com/typesafegithub/github-workflows-kt which allows writing workflow files using a type-safe Kotlin DSL.
9+
710
## Usage
811

912
In order to use this action, you need to:

action-types.yml

Lines changed: 321 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,321 @@
1+
# See https://github.com/typesafegithub/github-actions-typing
2+
inputs:
3+
app-id:
4+
type: string
5+
6+
private-key:
7+
type: string
8+
9+
owner:
10+
type: string
11+
12+
repositories:
13+
type: list
14+
separator: "\n"
15+
list-item:
16+
type: string
17+
18+
skip-token-revoke:
19+
type: boolean
20+
21+
github-api-url:
22+
type: string
23+
24+
# <START GENERATED PERMISSIONS TYPES>
25+
permission-actions:
26+
type: enum
27+
allowed-values:
28+
- "read"
29+
- "write"
30+
31+
permission-administration:
32+
type: enum
33+
allowed-values:
34+
- "read"
35+
- "write"
36+
37+
permission-checks:
38+
type: enum
39+
allowed-values:
40+
- "read"
41+
- "write"
42+
43+
permission-codespaces:
44+
type: enum
45+
allowed-values:
46+
- "read"
47+
- "write"
48+
49+
permission-contents:
50+
type: enum
51+
allowed-values:
52+
- "read"
53+
- "write"
54+
55+
permission-dependabot-secrets:
56+
type: enum
57+
allowed-values:
58+
- "read"
59+
- "write"
60+
61+
permission-deployments:
62+
type: enum
63+
allowed-values:
64+
- "read"
65+
- "write"
66+
67+
permission-email-addresses:
68+
type: enum
69+
allowed-values:
70+
- "read"
71+
- "write"
72+
73+
permission-environments:
74+
type: enum
75+
allowed-values:
76+
- "read"
77+
- "write"
78+
79+
permission-followers:
80+
type: enum
81+
allowed-values:
82+
- "read"
83+
- "write"
84+
85+
permission-git-ssh-keys:
86+
type: enum
87+
allowed-values:
88+
- "read"
89+
- "write"
90+
91+
permission-gpg-keys:
92+
type: enum
93+
allowed-values:
94+
- "read"
95+
- "write"
96+
97+
permission-interaction-limits:
98+
type: enum
99+
allowed-values:
100+
- "read"
101+
- "write"
102+
103+
permission-issues:
104+
type: enum
105+
allowed-values:
106+
- "read"
107+
- "write"
108+
109+
permission-members:
110+
type: enum
111+
allowed-values:
112+
- "read"
113+
- "write"
114+
115+
permission-metadata:
116+
type: enum
117+
allowed-values:
118+
- "read"
119+
- "write"
120+
121+
permission-organization-administration:
122+
type: enum
123+
allowed-values:
124+
- "read"
125+
- "write"
126+
127+
permission-organization-announcement-banners:
128+
type: enum
129+
allowed-values:
130+
- "read"
131+
- "write"
132+
133+
permission-organization-copilot-seat-management:
134+
type: enum
135+
allowed-values:
136+
- "write"
137+
138+
permission-organization-custom-org-roles:
139+
type: enum
140+
allowed-values:
141+
- "read"
142+
- "write"
143+
144+
permission-organization-custom-properties:
145+
type: enum
146+
allowed-values:
147+
- "read"
148+
- "write"
149+
- "admin"
150+
151+
permission-organization-custom-roles:
152+
type: enum
153+
allowed-values:
154+
- "read"
155+
- "write"
156+
157+
permission-organization-events:
158+
type: enum
159+
allowed-values:
160+
- "read"
161+
162+
permission-organization-hooks:
163+
type: enum
164+
allowed-values:
165+
- "read"
166+
- "write"
167+
168+
permission-organization-packages:
169+
type: enum
170+
allowed-values:
171+
- "read"
172+
- "write"
173+
174+
permission-organization-personal-access-token-requests:
175+
type: enum
176+
allowed-values:
177+
- "read"
178+
- "write"
179+
180+
permission-organization-personal-access-tokens:
181+
type: enum
182+
allowed-values:
183+
- "read"
184+
- "write"
185+
186+
permission-organization-plan:
187+
type: enum
188+
allowed-values:
189+
- "read"
190+
191+
permission-organization-projects:
192+
type: enum
193+
allowed-values:
194+
- "read"
195+
- "write"
196+
- "admin"
197+
198+
permission-organization-secrets:
199+
type: enum
200+
allowed-values:
201+
- "read"
202+
- "write"
203+
204+
permission-organization-self-hosted-runners:
205+
type: enum
206+
allowed-values:
207+
- "read"
208+
- "write"
209+
210+
permission-organization-user-blocking:
211+
type: enum
212+
allowed-values:
213+
- "read"
214+
- "write"
215+
216+
permission-packages:
217+
type: enum
218+
allowed-values:
219+
- "read"
220+
- "write"
221+
222+
permission-pages:
223+
type: enum
224+
allowed-values:
225+
- "read"
226+
- "write"
227+
228+
permission-profile:
229+
type: enum
230+
allowed-values:
231+
- "write"
232+
233+
permission-pull-requests:
234+
type: enum
235+
allowed-values:
236+
- "read"
237+
- "write"
238+
239+
permission-repository-custom-properties:
240+
type: enum
241+
allowed-values:
242+
- "read"
243+
- "write"
244+
245+
permission-repository-hooks:
246+
type: enum
247+
allowed-values:
248+
- "read"
249+
- "write"
250+
251+
permission-repository-projects:
252+
type: enum
253+
allowed-values:
254+
- "read"
255+
- "write"
256+
- "admin"
257+
258+
permission-secret-scanning-alerts:
259+
type: enum
260+
allowed-values:
261+
- "read"
262+
- "write"
263+
264+
permission-secrets:
265+
type: enum
266+
allowed-values:
267+
- "read"
268+
- "write"
269+
270+
permission-security-events:
271+
type: enum
272+
allowed-values:
273+
- "read"
274+
- "write"
275+
276+
permission-single-file:
277+
type: enum
278+
allowed-values:
279+
- "read"
280+
- "write"
281+
282+
permission-starring:
283+
type: enum
284+
allowed-values:
285+
- "read"
286+
- "write"
287+
288+
permission-statuses:
289+
type: enum
290+
allowed-values:
291+
- "read"
292+
- "write"
293+
294+
permission-team-discussions:
295+
type: enum
296+
allowed-values:
297+
- "read"
298+
- "write"
299+
300+
permission-vulnerability-alerts:
301+
type: enum
302+
allowed-values:
303+
- "read"
304+
- "write"
305+
306+
permission-workflows:
307+
type: enum
308+
allowed-values:
309+
- "write"
310+
311+
# <END GENERATED PERMISSIONS TYPES>
312+
313+
outputs:
314+
token:
315+
type: string
316+
317+
installation-id:
318+
type: integer
319+
320+
app-slug:
321+
type: string

scripts/update-permission-inputs.js

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,36 @@ const permissionsInputs = Object.entries(appPermissionsSchema.properties)
3030
description: "${description}"`;
3131
}, "");
3232

33-
const actionsYamlContent = await readFile("action.yml", "utf8");
33+
const actionYamlContent = await readFile("action.yml", "utf8");
3434

3535
// In the action.yml file, replace the content between the `<START GENERATED PERMISSIONS INPUTS>` and `<END GENERATED PERMISSIONS INPUTS>` comments with the new content
36-
const updatedActionsYamlContent = actionsYamlContent.replace(
36+
const updatedActionYamlContent = actionYamlContent.replace(
3737
/(?<=# <START GENERATED PERMISSIONS INPUTS>)(.|\n)*(?=# <END GENERATED PERMISSIONS INPUTS>)/,
3838
permissionsInputs + "\n "
3939
);
4040

41-
await writeFile("action.yml", updatedActionsYamlContent, "utf8");
41+
await writeFile("action.yml", updatedActionYamlContent, "utf8");
4242
console.log("Updated action.yml with new permissions inputs");
43+
44+
const permissionsTypes = Object.entries(appPermissionsSchema.properties)
45+
.sort((a, b) => a[0].localeCompare(b[0]))
46+
.reduce((result, [key, value]) => {
47+
const permissionAccessValues = value.enum.map((p) => ` - "${p}"`).reduce((result, p) => `${result}\n${p}`);
48+
return `${result}
49+
permission-${key.replace(/_/g, "-")}:
50+
type: enum
51+
allowed-values:
52+
${permissionAccessValues}
53+
`;
54+
}, "");
55+
56+
const actionTypesYamlContent = await readFile("action-types.yml", "utf8");
57+
58+
// In the action-types.yml file, replace the content between the `<START GENERATED PERMISSIONS TYPES>` and `<END GENERATED PERMISSIONS TYPES>` comments with the new content
59+
const updatedActionTypesYamlContent = actionTypesYamlContent.replace(
60+
/(?<=# <START GENERATED PERMISSIONS TYPES>)(.|\n)*(?=# <END GENERATED PERMISSIONS TYPES>)/,
61+
permissionsTypes + "\n "
62+
);
63+
64+
await writeFile("action-types.yml", updatedActionTypesYamlContent, "utf8");
65+
console.log("Updated action-types.yml with new permissions types");

0 commit comments

Comments
 (0)