Skip to content

Commit 2804fe1

Browse files
committed
WIP script to update action.yml with permissions based on https://github.com/octokit/app-permissions/blob/main/generated/api.github.com.json
1 parent 9ccc6db commit 2804fe1

File tree

2 files changed

+86
-0
lines changed

2 files changed

+86
-0
lines changed

action.yml

+42
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,48 @@ inputs:
3737
github-api-url:
3838
description: The URL of the GitHub REST API.
3939
default: ${{ github.api_url }}
40+
# <START GENERATED PERMISSIONS INPUTS>
41+
permission-metadata:
42+
description: "Can be set to 'read'. Learn more at https://docs.github.com/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps/#metadata"
43+
permission-actions:
44+
description: "Can be set to 'read' or 'write'. Learn more at https://docs.github.com/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps/#actions"
45+
permission-administration:
46+
description: "Can be set to 'read' or 'write'. Learn more at https://docs.github.com/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps/#administration"
47+
permission-organization-user-blocking:
48+
description: "Can be set to 'read' or 'write'. Learn more at https://docs.github.com/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps/#organization-user-blocking"
49+
permission-checks:
50+
description: "Can be set to 'read' or 'write'. Learn more at https://docs.github.com/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps/#checks"
51+
permission-security-events:
52+
description: "Can be set to 'read' or 'write'. Learn more at https://docs.github.com/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps/#code-scanning-alerts"
53+
permission-statuses:
54+
description: "Can be set to 'read' or 'write'. Learn more at https://docs.github.com/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps/#commit-statuses"
55+
permission-contents:
56+
description: "Can be set to 'read' or 'write'. Learn more at https://docs.github.com/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps/#contents"
57+
permission-vulnerability-alerts:
58+
description: "Can be set to 'read' or 'write'. Learn more at https://docs.github.com/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps/#dependabot-alerts"
59+
permission-deployments:
60+
description: "Can be set to 'read' or 'write'. Learn more at https://docs.github.com/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps/#deployments"
61+
permission-issues:
62+
description: "Can be set to 'read' or 'write'. Learn more at https://docs.github.com/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps/#issues"
63+
permission-members:
64+
description: "Can be set to 'read' or 'write'. Learn more at https://docs.github.com/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps/#members"
65+
permission-organization-administration:
66+
description: "Can be set to 'read' or 'write'. Learn more at https://docs.github.com/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps/#organization-administration"
67+
permission-organization-projects:
68+
description: "Can be set to 'read' or 'write'. Learn more at https://docs.github.com/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps/#organization-projects"
69+
permission-pages:
70+
description: "Can be set to 'read' or 'write'. Learn more at https://docs.github.com/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps/#pages"
71+
permission-pull-requests:
72+
description: "Can be set to 'read' or 'write'. Learn more at https://docs.github.com/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps/#pull-requests"
73+
permission-repository-projects:
74+
description: "Can be set to 'read' or 'write'. Learn more at https://docs.github.com/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps/#repository-projects"
75+
permission-secrets:
76+
description: "Can be set to 'read' or 'write'. Learn more at https://docs.github.com/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps/#secrets"
77+
permission-single-file:
78+
description: "Can be set to 'read' or 'write'. Learn more at https://docs.github.com/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps/#single-file"
79+
permission-team-discussions:
80+
description: "Can be set to 'read' or 'write'. Learn more at https://docs.github.com/en/free-pro-team@latest/rest/reference/permissions-required-for-github-apps/#team-discussions"
81+
# <END GENERATED PERMISSIONS INPUTS>
4082
outputs:
4183
token:
4284
description: "GitHub installation access token"

scripts/update-permission-inputs.js

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { readFile, writeFile } from "node:fs/promises";
2+
3+
import { request } from "@octokit/request";
4+
5+
const { data: permissionsSchemaString } = await request(
6+
"GET /repos/{owner}/{repo}/contents/{path}",
7+
{
8+
owner: "octokit",
9+
repo: "app-permissions",
10+
path: "generated/api.github.com.json",
11+
mediaType: {
12+
format: "raw",
13+
},
14+
headers: {
15+
authorization: `token ${process.env.GITHUB_TOKEN}`,
16+
},
17+
},
18+
);
19+
20+
const permissionsSchema = JSON.parse(permissionsSchemaString);
21+
22+
const permissionsInputs = Object.entries(permissionsSchema.permissions).reduce(
23+
(result, [key, value]) => {
24+
const supportsWrite = value.write.length > 0;
25+
const description = supportsWrite
26+
? `Can be set to 'read' or 'write'. Learn more at ${value.url}`
27+
: `Can be set to 'read'. Learn more at ${value.url}`;
28+
return `${result}
29+
permission-${key.replace(/_/g, "-")}:
30+
description: "${description}"`;
31+
},
32+
"",
33+
);
34+
35+
const actionsYamlContent = await readFile("action.yml", "utf8");
36+
37+
// In the action.yml file, replace the content between the `<START GENERATED PERMISSIONS INPUTS>` and `<END GENERATED PERMISSIONS INPUTS>` comments with the new content
38+
const updatedActionsYamlContent = actionsYamlContent.replace(
39+
/(?<=# <START GENERATED PERMISSIONS INPUTS>)(.|\n)*(?=# <END GENERATED PERMISSIONS INPUTS>)/,
40+
permissionsInputs + "\n ",
41+
);
42+
43+
await writeFile("action.yml", updatedActionsYamlContent, "utf8");
44+
console.log("Updated action.yml with new permissions inputs");

0 commit comments

Comments
 (0)