feat: permissions (#168)

- Load `app-permissions` from schema exported by `@octokit/openapi`
- Update documentation in README.md
- Implement the `permissions_*` inputs in the action code

---------

Co-authored-by: Parker Brown <[email protected]>
This commit is contained in:
Gregor Martynus
2025-03-27 19:00:54 +00:00
committed by GitHub
co-authored by Parker Brown
parent f577941506
commit 0e0aa99a86
21 changed files with 821 additions and 80 deletions
+18 -14
View File
@@ -4,10 +4,10 @@ import { install } from "@sinonjs/fake-timers";
// Verify `main` retry when the clock has drifted.
await test((mockPool) => {
process.env.INPUT_OWNER = 'actions'
process.env.INPUT_REPOSITORIES = 'failed-repo';
const owner = process.env.INPUT_OWNER
const repo = process.env.INPUT_REPOSITORIES
process.env.INPUT_OWNER = "actions";
process.env.INPUT_REPOSITORIES = "failed-repo";
const owner = process.env.INPUT_OWNER;
const repo = process.env.INPUT_REPOSITORIES;
const mockInstallationId = "123456";
const mockAppSlug = "github-actions";
@@ -25,20 +25,23 @@ await test((mockPool) => {
})
.reply(({ headers }) => {
const [_, jwt] = (headers.authorization || "").split(" ");
const payload = JSON.parse(Buffer.from(jwt.split(".")[1], "base64").toString());
const payload = JSON.parse(
Buffer.from(jwt.split(".")[1], "base64").toString(),
);
if (payload.iat < 0) {
return {
statusCode: 401,
data: {
message: "'Issued at' claim ('iat') must be an Integer representing the time that the assertion was issued."
message:
"'Issued at' claim ('iat') must be an Integer representing the time that the assertion was issued.",
},
responseOptions: {
headers: {
"content-type": "application/json",
"date": new Date(Date.now() + 30000).toUTCString()
}
}
date: new Date(Date.now() + 30000).toUTCString(),
},
},
};
}
@@ -46,13 +49,14 @@ await test((mockPool) => {
statusCode: 200,
data: {
id: mockInstallationId,
"app_slug": mockAppSlug
app_slug: mockAppSlug,
},
responseOptions: {
headers: {
"content-type": "application/json"
}
}
"content-type": "application/json",
},
},
};
}).times(2);
})
.times(2);
});