Skip to content
This repository was archived by the owner on Jul 7, 2025. It is now read-only.

Commit acf3218

Browse files
committed
fixup! Add support for organization and user installation retrieval and repository scoping
1 parent 59f20c9 commit acf3218

File tree

3 files changed

+38
-26
lines changed

3 files changed

+38
-26
lines changed

src/fetch-installation-token.ts

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { getOctokit } from "@actions/github";
22
import { createAppAuth } from "@octokit/auth-app";
33
import { request } from "@octokit/request";
44

5-
import {InstallationRetrievalDetails} from "./installation-retrieval-details.js";
5+
import { InstallationRetrievalDetails } from "./installation-retrieval-details.js";
66

77
export const fetchInstallationToken = async ({
88
appId,
@@ -38,21 +38,21 @@ export const fetchInstallationToken = async ({
3838
try {
3939
switch (installationRetrievalDetails.mode) {
4040
case "id":
41-
({id: installationId} = installationRetrievalDetails);
41+
({ id: installationId } = installationRetrievalDetails);
4242
break;
4343
case "organization":
4444
({
4545
data: { id: installationId },
4646
} = await octokit.request("GET /orgs/{org}/installation", {
47-
org: installationRetrievalDetails.org
47+
org: installationRetrievalDetails.org,
4848
}));
4949
break;
5050
case "repository":
5151
({
5252
data: { id: installationId },
5353
} = await octokit.request("GET /repos/{owner}/{repo}/installation", {
5454
owner: installationRetrievalDetails.owner,
55-
repo: installationRetrievalDetails.repo
55+
repo: installationRetrievalDetails.repo,
5656
}));
5757
break;
5858
case "user":
@@ -64,18 +64,16 @@ export const fetchInstallationToken = async ({
6464
break;
6565
}
6666
} catch (error: unknown) {
67-
throw new Error(
68-
"Could not get retrieve installation.",
69-
{ cause: error },
70-
);
67+
throw new Error("Could not get retrieve installation.", { cause: error });
7168
}
7269

7370
try {
74-
const { data: {token} } =
75-
await octokit.rest.apps.createInstallationAccessToken({
76-
installation_id: installationId,
77-
permissions,
78-
});
71+
const {
72+
data: { token },
73+
} = await octokit.rest.apps.createInstallationAccessToken({
74+
installation_id: installationId,
75+
permissions,
76+
});
7977
return token;
8078
} catch (error: unknown) {
8179
throw new Error("Could not create installation access token.", {

src/index.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,25 @@ import ensureError from "ensure-error";
55
import isBase64 from "is-base64";
66

77
import { fetchInstallationToken } from "./fetch-installation-token.js";
8-
import {getInstallationRetrievalDetails} from "./installation-retrieval-details.js"
8+
import { getInstallationRetrievalDetails } from "./installation-retrieval-details.js";
99

1010
try {
1111
const appId = getInput("app_id", { required: true });
1212

1313
const githubApiUrlInput = getInput("github_api_url", { required: true });
1414
const githubApiUrl = new URL(githubApiUrlInput);
1515

16-
const installationRetrievalMode = getInput("installation_retrieval_mode", { required: true });
17-
const installationRetrievalPayload = getInput("installation_retrieval_payload", { required: true });
18-
const installationRetrievalDetails = getInstallationRetrievalDetails({mode: installationRetrievalMode, payload: installationRetrievalPayload});
16+
const installationRetrievalMode = getInput("installation_retrieval_mode", {
17+
required: true,
18+
});
19+
const installationRetrievalPayload = getInput(
20+
"installation_retrieval_payload",
21+
{ required: true },
22+
);
23+
const installationRetrievalDetails = getInstallationRetrievalDetails({
24+
mode: installationRetrievalMode,
25+
payload: installationRetrievalPayload,
26+
});
1927

2028
const permissionsInput = getInput("permissions");
2129
const permissions = permissionsInput

src/installation-retrieval-details.ts

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,24 @@ export type InstallationRetrievalDetails = Readonly<
55
| { mode: "user"; username: string }
66
>;
77

8-
export const getInstallationRetrievalDetails = ({mode, payload}: Readonly<{mode: string, payload: string}>): InstallationRetrievalDetails => {
9-
switch (mode) {
8+
export const getInstallationRetrievalDetails = ({
9+
mode,
10+
payload,
11+
}: Readonly<{
12+
mode: string;
13+
payload: string;
14+
}>): InstallationRetrievalDetails => {
15+
switch (mode) {
1016
case "id":
11-
return {mode, id: Number(payload)};
17+
return { mode, id: Number(payload) };
1218
case "organization":
13-
return {mode, org: payload};
19+
return { mode, org: payload };
1420
case "repository":
15-
const [owner, repo] = payload.split("/");
16-
return {mode, owner, repo};
21+
const [owner, repo] = payload.split("/");
22+
return { mode, owner, repo };
1723
case "user":
18-
return {mode, username: payload};
24+
return { mode, username: payload };
1925
default:
20-
throw new Error(`Unsupported retrieval mode: "${mode}".`)
21-
}
26+
throw new Error(`Unsupported retrieval mode: "${mode}".`);
27+
}
2228
};

0 commit comments

Comments
 (0)