Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
db3cdf4098 | ||
|
|
d64d7d7355 | ||
|
|
1b6f53e48e | ||
|
|
061a84d5f5 | ||
|
|
c8f34a61a8 | ||
|
|
4821f52fa7 | ||
|
|
2950cbc446 | ||
|
|
30bf6253fa | ||
|
|
c3c17c79cc | ||
|
|
9ba274d954 | ||
|
|
a3c826a204 | ||
|
|
3ff1caaa28 | ||
|
|
eaef29498f |
@@ -28,6 +28,6 @@ jobs:
|
|||||||
- name: Run permission inputs update script
|
- name: Run permission inputs update script
|
||||||
run: node scripts/update-permission-inputs.js
|
run: node scripts/update-permission-inputs.js
|
||||||
- name: Commit changes
|
- name: Commit changes
|
||||||
uses: stefanzweifel/git-auto-commit-action@e348103e9026cc0eee72ae06630dbe30c8bf7a79 # v5.1.0
|
uses: stefanzweifel/git-auto-commit-action@b863ae1933cb653a53c021fe36dbb774e1fb9403 # v5.2.0
|
||||||
with:
|
with:
|
||||||
commit_message: 'feat: update permission inputs'
|
commit_message: 'feat: update permission inputs'
|
||||||
|
|||||||
@@ -12,4 +12,4 @@ Run tests locally
|
|||||||
npm test
|
npm test
|
||||||
```
|
```
|
||||||
|
|
||||||
Learn more about how the tests work in [test/README.md](test/README.md).
|
Learn more about how the tests work in [tests/README.md](tests/README.md).
|
||||||
|
|||||||
26
README.md
26
README.md
@@ -28,7 +28,7 @@ jobs:
|
|||||||
hello-world:
|
hello-world:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/create-github-app-token@v1
|
- uses: actions/create-github-app-token@v2
|
||||||
id: app-token
|
id: app-token
|
||||||
with:
|
with:
|
||||||
app-id: ${{ vars.APP_ID }}
|
app-id: ${{ vars.APP_ID }}
|
||||||
@@ -47,7 +47,7 @@ jobs:
|
|||||||
auto-format:
|
auto-format:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/create-github-app-token@v1
|
- uses: actions/create-github-app-token@v2
|
||||||
id: app-token
|
id: app-token
|
||||||
with:
|
with:
|
||||||
# required
|
# required
|
||||||
@@ -73,7 +73,7 @@ jobs:
|
|||||||
auto-format:
|
auto-format:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/create-github-app-token@v1
|
- uses: actions/create-github-app-token@v2
|
||||||
id: app-token
|
id: app-token
|
||||||
with:
|
with:
|
||||||
# required
|
# required
|
||||||
@@ -98,7 +98,7 @@ jobs:
|
|||||||
auto-format:
|
auto-format:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/create-github-app-token@v1
|
- uses: actions/create-github-app-token@v2
|
||||||
id: app-token
|
id: app-token
|
||||||
with:
|
with:
|
||||||
# required
|
# required
|
||||||
@@ -135,7 +135,7 @@ jobs:
|
|||||||
hello-world:
|
hello-world:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/create-github-app-token@v1
|
- uses: actions/create-github-app-token@v2
|
||||||
id: app-token
|
id: app-token
|
||||||
with:
|
with:
|
||||||
app-id: ${{ vars.APP_ID }}
|
app-id: ${{ vars.APP_ID }}
|
||||||
@@ -157,7 +157,7 @@ jobs:
|
|||||||
hello-world:
|
hello-world:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/create-github-app-token@v1
|
- uses: actions/create-github-app-token@v2
|
||||||
id: app-token
|
id: app-token
|
||||||
with:
|
with:
|
||||||
app-id: ${{ vars.APP_ID }}
|
app-id: ${{ vars.APP_ID }}
|
||||||
@@ -182,7 +182,7 @@ jobs:
|
|||||||
hello-world:
|
hello-world:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/create-github-app-token@v1
|
- uses: actions/create-github-app-token@v2
|
||||||
id: app-token
|
id: app-token
|
||||||
with:
|
with:
|
||||||
app-id: ${{ vars.APP_ID }}
|
app-id: ${{ vars.APP_ID }}
|
||||||
@@ -207,7 +207,7 @@ jobs:
|
|||||||
hello-world:
|
hello-world:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/create-github-app-token@v1
|
- uses: actions/create-github-app-token@v2
|
||||||
id: app-token
|
id: app-token
|
||||||
with:
|
with:
|
||||||
app-id: ${{ vars.APP_ID }}
|
app-id: ${{ vars.APP_ID }}
|
||||||
@@ -249,7 +249,7 @@ jobs:
|
|||||||
owners-and-repos: ${{ fromJson(needs.set-matrix.outputs.matrix) }}
|
owners-and-repos: ${{ fromJson(needs.set-matrix.outputs.matrix) }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/create-github-app-token@v1
|
- uses: actions/create-github-app-token@v2
|
||||||
id: app-token
|
id: app-token
|
||||||
with:
|
with:
|
||||||
app-id: ${{ vars.APP_ID }}
|
app-id: ${{ vars.APP_ID }}
|
||||||
@@ -279,7 +279,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Create GitHub App token
|
- name: Create GitHub App token
|
||||||
id: create_token
|
id: create_token
|
||||||
uses: actions/create-github-app-token@v1
|
uses: actions/create-github-app-token@v2
|
||||||
with:
|
with:
|
||||||
app-id: ${{ vars.GHES_APP_ID }}
|
app-id: ${{ vars.GHES_APP_ID }}
|
||||||
private-key: ${{ secrets.GHES_APP_PRIVATE_KEY }}
|
private-key: ${{ secrets.GHES_APP_PRIVATE_KEY }}
|
||||||
@@ -318,7 +318,7 @@ steps:
|
|||||||
echo "private-key=$private_key" >> "$GITHUB_OUTPUT"
|
echo "private-key=$private_key" >> "$GITHUB_OUTPUT"
|
||||||
- name: Generate GitHub App Token
|
- name: Generate GitHub App Token
|
||||||
id: app-token
|
id: app-token
|
||||||
uses: actions/create-github-app-token@v1
|
uses: actions/create-github-app-token@v2
|
||||||
with:
|
with:
|
||||||
app-id: ${{ vars.APP_ID }}
|
app-id: ${{ vars.APP_ID }}
|
||||||
private-key: ${{ steps.decode.outputs.private-key }}
|
private-key: ${{ steps.decode.outputs.private-key }}
|
||||||
@@ -343,7 +343,7 @@ The reason we define one `permision-<permission name>` input per permission is t
|
|||||||
|
|
||||||
### `skip-token-revoke`
|
### `skip-token-revoke`
|
||||||
|
|
||||||
**Optional:** If truthy, the token will not be revoked when the current job is complete.
|
**Optional:** If true, the token will not be revoked when the current job is complete.
|
||||||
|
|
||||||
### `github-api-url`
|
### `github-api-url`
|
||||||
|
|
||||||
@@ -370,7 +370,7 @@ The action creates an installation access token using [the `POST /app/installati
|
|||||||
1. The token is scoped to the current repository or `repositories` if set.
|
1. The token is scoped to the current repository or `repositories` if set.
|
||||||
2. The token inherits all the installation's permissions.
|
2. The token inherits all the installation's permissions.
|
||||||
3. The token is set as output `token` which can be used in subsequent steps.
|
3. The token is set as output `token` which can be used in subsequent steps.
|
||||||
4. Unless the `skip-token-revoke` input is set to a truthy value, the token is revoked in the `post` step of the action, which means it cannot be passed to another job.
|
4. Unless the `skip-token-revoke` input is set to true, the token is revoked in the `post` step of the action, which means it cannot be passed to another job.
|
||||||
5. The token is masked, it cannot be logged accidentally.
|
5. The token is masked, it cannot be logged accidentally.
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
|
|||||||
@@ -18,8 +18,9 @@ inputs:
|
|||||||
description: "Comma or newline-separated list of repositories to install the GitHub App on (defaults to current repository if owner is unset)"
|
description: "Comma or newline-separated list of repositories to install the GitHub App on (defaults to current repository if owner is unset)"
|
||||||
required: false
|
required: false
|
||||||
skip-token-revoke:
|
skip-token-revoke:
|
||||||
description: "If truthy, the token will not be revoked when the current job is complete"
|
description: "If true, the token will not be revoked when the current job is complete"
|
||||||
required: false
|
required: false
|
||||||
|
default: "false"
|
||||||
# Make GitHub API configurable to support non-GitHub Cloud use cases
|
# Make GitHub API configurable to support non-GitHub Cloud use cases
|
||||||
# see https://github.com/actions/create-github-app-token/issues/77
|
# see https://github.com/actions/create-github-app-token/issues/77
|
||||||
github-api-url:
|
github-api-url:
|
||||||
|
|||||||
45
dist/main.cjs
vendored
45
dist/main.cjs
vendored
@@ -33638,6 +33638,11 @@ var require_sqlite_cache_store = __commonJS({
|
|||||||
}
|
}
|
||||||
this.#db = new DatabaseSync(opts?.location ?? ":memory:");
|
this.#db = new DatabaseSync(opts?.location ?? ":memory:");
|
||||||
this.#db.exec(`
|
this.#db.exec(`
|
||||||
|
PRAGMA journal_mode = WAL;
|
||||||
|
PRAGMA synchronous = NORMAL;
|
||||||
|
PRAGMA temp_store = memory;
|
||||||
|
PRAGMA optimize;
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS cacheInterceptorV${VERSION7} (
|
CREATE TABLE IF NOT EXISTS cacheInterceptorV${VERSION7} (
|
||||||
-- Data specific to us
|
-- Data specific to us
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
@@ -33657,9 +33662,8 @@ var require_sqlite_cache_store = __commonJS({
|
|||||||
staleAt INTEGER NOT NULL
|
staleAt INTEGER NOT NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV${VERSION7}_url ON cacheInterceptorV${VERSION7}(url);
|
CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV${VERSION7}_getValuesQuery ON cacheInterceptorV${VERSION7}(url, method, deleteAt);
|
||||||
CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV${VERSION7}_method ON cacheInterceptorV${VERSION7}(method);
|
CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV${VERSION7}_deleteByUrlQuery ON cacheInterceptorV${VERSION7}(deleteAt);
|
||||||
CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV${VERSION7}_deleteAt ON cacheInterceptorV${VERSION7}(deleteAt);
|
|
||||||
`);
|
`);
|
||||||
this.#getValuesQuery = this.#db.prepare(`
|
this.#getValuesQuery = this.#db.prepare(`
|
||||||
SELECT
|
SELECT
|
||||||
@@ -33836,7 +33840,7 @@ var require_sqlite_cache_store = __commonJS({
|
|||||||
this.#deleteByUrlQuery.run(this.#makeValueUrl(key));
|
this.#deleteByUrlQuery.run(this.#makeValueUrl(key));
|
||||||
}
|
}
|
||||||
#prune() {
|
#prune() {
|
||||||
if (this.size <= this.#maxCount) {
|
if (Number.isFinite(this.#maxCount) && this.size <= this.#maxCount) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@@ -41375,7 +41379,7 @@ async function waitForAccessToken(request2, clientId, clientType, verification)
|
|||||||
return waitForAccessToken(request2, clientId, clientType, verification);
|
return waitForAccessToken(request2, clientId, clientType, verification);
|
||||||
}
|
}
|
||||||
if (errorType === "slow_down") {
|
if (errorType === "slow_down") {
|
||||||
await wait(verification.interval + 5);
|
await wait(verification.interval + 7);
|
||||||
return waitForAccessToken(request2, clientId, clientType, verification);
|
return waitForAccessToken(request2, clientId, clientType, verification);
|
||||||
}
|
}
|
||||||
throw error;
|
throw error;
|
||||||
@@ -42345,7 +42349,7 @@ async function sendRequestWithRetries(state, request2, options, createdAt, retri
|
|||||||
return sendRequestWithRetries(state, request2, options, createdAt, retries);
|
return sendRequestWithRetries(state, request2, options, createdAt, retries);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var VERSION6 = "7.2.0";
|
var VERSION6 = "7.2.1";
|
||||||
function createAppAuth(options) {
|
function createAppAuth(options) {
|
||||||
if (!options.appId) {
|
if (!options.appId) {
|
||||||
throw new Error("[@octokit/auth-app] appId option is required");
|
throw new Error("[@octokit/auth-app] appId option is required");
|
||||||
@@ -42394,8 +42398,9 @@ function createAppAuth(options) {
|
|||||||
// lib/get-permissions-from-inputs.js
|
// lib/get-permissions-from-inputs.js
|
||||||
function getPermissionsFromInputs(env) {
|
function getPermissionsFromInputs(env) {
|
||||||
return Object.entries(env).reduce((permissions2, [key, value]) => {
|
return Object.entries(env).reduce((permissions2, [key, value]) => {
|
||||||
if (!key.startsWith("INPUT_PERMISSION_")) return permissions2;
|
if (!key.startsWith("INPUT_PERMISSION-")) return permissions2;
|
||||||
const permission = key.slice("INPUT_PERMISSION_".length).toLowerCase();
|
if (!value) return permissions2;
|
||||||
|
const permission = key.slice("INPUT_PERMISSION-".length).toLowerCase();
|
||||||
if (permissions2 === void 0) {
|
if (permissions2 === void 0) {
|
||||||
return { [permission]: value };
|
return { [permission]: value };
|
||||||
}
|
}
|
||||||
@@ -42526,31 +42531,30 @@ async function main(appId2, privateKey2, owner2, repositories2, permissions2, co
|
|||||||
parsedOwner = owner3;
|
parsedOwner = owner3;
|
||||||
parsedRepositoryNames = [repo];
|
parsedRepositoryNames = [repo];
|
||||||
core3.info(
|
core3.info(
|
||||||
`owner and repositories not set, creating token for the current repository ("${repo}")`
|
`Inputs 'owner' and 'repositories' are not set. Creating token for this repository (${owner3}/${repo}).`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (owner2 && repositories2.length === 0) {
|
if (owner2 && repositories2.length === 0) {
|
||||||
parsedOwner = owner2;
|
parsedOwner = owner2;
|
||||||
core3.info(
|
core3.info(
|
||||||
`repositories not set, creating token for all repositories for given owner "${owner2}"`
|
`Input 'repositories' is not set. Creating token for all repositories owned by ${owner2}.`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (!owner2 && repositories2.length > 0) {
|
if (!owner2 && repositories2.length > 0) {
|
||||||
parsedOwner = String(process.env.GITHUB_REPOSITORY_OWNER);
|
parsedOwner = String(process.env.GITHUB_REPOSITORY_OWNER);
|
||||||
parsedRepositoryNames = repositories2;
|
parsedRepositoryNames = repositories2;
|
||||||
core3.info(
|
core3.info(
|
||||||
`owner not set, creating owner for given repositories "${repositories2.join(
|
`No 'owner' input provided. Using default owner '${parsedOwner}' to create token for the following repositories:${repositories2.map((repo) => `
|
||||||
","
|
- ${parsedOwner}/${repo}`).join("")}`
|
||||||
)}" in current owner ("${parsedOwner}")`
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (owner2 && repositories2.length > 0) {
|
if (owner2 && repositories2.length > 0) {
|
||||||
parsedOwner = owner2;
|
parsedOwner = owner2;
|
||||||
parsedRepositoryNames = repositories2;
|
parsedRepositoryNames = repositories2;
|
||||||
core3.info(
|
core3.info(
|
||||||
`owner and repositories set, creating token for repositories "${repositories2.join(
|
`Inputs 'owner' and 'repositories' are set. Creating token for the following repositories:
|
||||||
","
|
${repositories2.map((repo) => `
|
||||||
)}" owned by "${owner2}"`
|
- ${parsedOwner}/${repo}`).join("")}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
const auth5 = createAppAuth2({
|
const auth5 = createAppAuth2({
|
||||||
@@ -42569,6 +42573,7 @@ async function main(appId2, privateKey2, owner2, repositories2, permissions2, co
|
|||||||
permissions2
|
permissions2
|
||||||
),
|
),
|
||||||
{
|
{
|
||||||
|
shouldRetry: (error) => error.status >= 500,
|
||||||
onFailedAttempt: (error) => {
|
onFailedAttempt: (error) => {
|
||||||
core3.info(
|
core3.info(
|
||||||
`Failed to create token for "${parsedRepositoryNames.join(
|
`Failed to create token for "${parsedRepositoryNames.join(
|
||||||
@@ -42674,7 +42679,7 @@ var appId = import_core2.default.getInput("app-id");
|
|||||||
var privateKey = import_core2.default.getInput("private-key");
|
var privateKey = import_core2.default.getInput("private-key");
|
||||||
var owner = import_core2.default.getInput("owner");
|
var owner = import_core2.default.getInput("owner");
|
||||||
var repositories = import_core2.default.getInput("repositories").split(/[\n,]+/).map((s) => s.trim()).filter((x) => x !== "");
|
var repositories = import_core2.default.getInput("repositories").split(/[\n,]+/).map((s) => s.trim()).filter((x) => x !== "");
|
||||||
var skipTokenRevoke = Boolean(import_core2.default.getInput("skip-token-revoke"));
|
var skipTokenRevoke = import_core2.default.getBooleanInput("skip-token-revoke");
|
||||||
var permissions = getPermissionsFromInputs(process.env);
|
var permissions = getPermissionsFromInputs(process.env);
|
||||||
var main_default = main(
|
var main_default = main(
|
||||||
appId,
|
appId,
|
||||||
@@ -42693,14 +42698,10 @@ var main_default = main(
|
|||||||
/*! Bundled license information:
|
/*! Bundled license information:
|
||||||
|
|
||||||
undici/lib/fetch/body.js:
|
undici/lib/fetch/body.js:
|
||||||
(*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> *)
|
|
||||||
|
|
||||||
undici/lib/websocket/frame.js:
|
|
||||||
(*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> *)
|
|
||||||
|
|
||||||
undici/lib/web/fetch/body.js:
|
undici/lib/web/fetch/body.js:
|
||||||
(*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> *)
|
(*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> *)
|
||||||
|
|
||||||
|
undici/lib/websocket/frame.js:
|
||||||
undici/lib/web/websocket/frame.js:
|
undici/lib/web/websocket/frame.js:
|
||||||
(*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> *)
|
(*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> *)
|
||||||
|
|
||||||
|
|||||||
20
dist/post.cjs
vendored
20
dist/post.cjs
vendored
@@ -33404,6 +33404,11 @@ var require_sqlite_cache_store = __commonJS({
|
|||||||
}
|
}
|
||||||
this.#db = new DatabaseSync(opts?.location ?? ":memory:");
|
this.#db = new DatabaseSync(opts?.location ?? ":memory:");
|
||||||
this.#db.exec(`
|
this.#db.exec(`
|
||||||
|
PRAGMA journal_mode = WAL;
|
||||||
|
PRAGMA synchronous = NORMAL;
|
||||||
|
PRAGMA temp_store = memory;
|
||||||
|
PRAGMA optimize;
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS cacheInterceptorV${VERSION3} (
|
CREATE TABLE IF NOT EXISTS cacheInterceptorV${VERSION3} (
|
||||||
-- Data specific to us
|
-- Data specific to us
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
@@ -33423,9 +33428,8 @@ var require_sqlite_cache_store = __commonJS({
|
|||||||
staleAt INTEGER NOT NULL
|
staleAt INTEGER NOT NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV${VERSION3}_url ON cacheInterceptorV${VERSION3}(url);
|
CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV${VERSION3}_getValuesQuery ON cacheInterceptorV${VERSION3}(url, method, deleteAt);
|
||||||
CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV${VERSION3}_method ON cacheInterceptorV${VERSION3}(method);
|
CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV${VERSION3}_deleteByUrlQuery ON cacheInterceptorV${VERSION3}(deleteAt);
|
||||||
CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV${VERSION3}_deleteAt ON cacheInterceptorV${VERSION3}(deleteAt);
|
|
||||||
`);
|
`);
|
||||||
this.#getValuesQuery = this.#db.prepare(`
|
this.#getValuesQuery = this.#db.prepare(`
|
||||||
SELECT
|
SELECT
|
||||||
@@ -33602,7 +33606,7 @@ var require_sqlite_cache_store = __commonJS({
|
|||||||
this.#deleteByUrlQuery.run(this.#makeValueUrl(key));
|
this.#deleteByUrlQuery.run(this.#makeValueUrl(key));
|
||||||
}
|
}
|
||||||
#prune() {
|
#prune() {
|
||||||
if (this.size <= this.#maxCount) {
|
if (Number.isFinite(this.#maxCount) && this.size <= this.#maxCount) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@@ -40308,7 +40312,7 @@ var import_core2 = __toESM(require_core(), 1);
|
|||||||
|
|
||||||
// lib/post.js
|
// lib/post.js
|
||||||
async function post(core3, request2) {
|
async function post(core3, request2) {
|
||||||
const skipTokenRevoke = Boolean(core3.getInput("skip-token-revoke"));
|
const skipTokenRevoke = core3.getBooleanInput("skip-token-revoke");
|
||||||
if (skipTokenRevoke) {
|
if (skipTokenRevoke) {
|
||||||
core3.info("Token revocation was skipped");
|
core3.info("Token revocation was skipped");
|
||||||
return;
|
return;
|
||||||
@@ -40917,14 +40921,10 @@ post(import_core2.default, request_default).catch((error) => {
|
|||||||
/*! Bundled license information:
|
/*! Bundled license information:
|
||||||
|
|
||||||
undici/lib/fetch/body.js:
|
undici/lib/fetch/body.js:
|
||||||
(*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> *)
|
|
||||||
|
|
||||||
undici/lib/websocket/frame.js:
|
|
||||||
(*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> *)
|
|
||||||
|
|
||||||
undici/lib/web/fetch/body.js:
|
undici/lib/web/fetch/body.js:
|
||||||
(*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> *)
|
(*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> *)
|
||||||
|
|
||||||
|
undici/lib/websocket/frame.js:
|
||||||
undici/lib/web/websocket/frame.js:
|
undici/lib/web/websocket/frame.js:
|
||||||
(*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> *)
|
(*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> *)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -7,9 +7,12 @@
|
|||||||
*/
|
*/
|
||||||
export function getPermissionsFromInputs(env) {
|
export function getPermissionsFromInputs(env) {
|
||||||
return Object.entries(env).reduce((permissions, [key, value]) => {
|
return Object.entries(env).reduce((permissions, [key, value]) => {
|
||||||
if (!key.startsWith("INPUT_PERMISSION_")) return permissions;
|
if (!key.startsWith("INPUT_PERMISSION-")) return permissions;
|
||||||
|
if (!value) return permissions;
|
||||||
|
|
||||||
const permission = key.slice("INPUT_PERMISSION_".length).toLowerCase();
|
const permission = key.slice("INPUT_PERMISSION-".length).toLowerCase();
|
||||||
|
|
||||||
|
// Inherit app permissions if no permissions inputs are set
|
||||||
if (permissions === undefined) {
|
if (permissions === undefined) {
|
||||||
return { [permission]: value };
|
return { [permission]: value };
|
||||||
}
|
}
|
||||||
|
|||||||
32
lib/main.js
32
lib/main.js
@@ -21,7 +21,7 @@ export async function main(
|
|||||||
core,
|
core,
|
||||||
createAppAuth,
|
createAppAuth,
|
||||||
request,
|
request,
|
||||||
skipTokenRevoke,
|
skipTokenRevoke
|
||||||
) {
|
) {
|
||||||
let parsedOwner = "";
|
let parsedOwner = "";
|
||||||
let parsedRepositoryNames = [];
|
let parsedRepositoryNames = [];
|
||||||
@@ -33,7 +33,7 @@ export async function main(
|
|||||||
parsedRepositoryNames = [repo];
|
parsedRepositoryNames = [repo];
|
||||||
|
|
||||||
core.info(
|
core.info(
|
||||||
`owner and repositories not set, creating token for the current repository ("${repo}")`,
|
`Inputs 'owner' and 'repositories' are not set. Creating token for this repository (${owner}/${repo}).`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@ export async function main(
|
|||||||
parsedOwner = owner;
|
parsedOwner = owner;
|
||||||
|
|
||||||
core.info(
|
core.info(
|
||||||
`repositories not set, creating token for all repositories for given owner "${owner}"`,
|
`Input 'repositories' is not set. Creating token for all repositories owned by ${owner}.`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,9 +52,9 @@ export async function main(
|
|||||||
parsedRepositoryNames = repositories;
|
parsedRepositoryNames = repositories;
|
||||||
|
|
||||||
core.info(
|
core.info(
|
||||||
`owner not set, creating owner for given repositories "${repositories.join(
|
`No 'owner' input provided. Using default owner '${parsedOwner}' to create token for the following repositories:${repositories
|
||||||
",",
|
.map((repo) => `\n- ${parsedOwner}/${repo}`)
|
||||||
)}" in current owner ("${parsedOwner}")`,
|
.join("")}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,9 +64,8 @@ export async function main(
|
|||||||
parsedRepositoryNames = repositories;
|
parsedRepositoryNames = repositories;
|
||||||
|
|
||||||
core.info(
|
core.info(
|
||||||
`owner and repositories set, creating token for repositories "${repositories.join(
|
`Inputs 'owner' and 'repositories' are set. Creating token for the following repositories:
|
||||||
",",
|
${repositories.map((repo) => `\n- ${parsedOwner}/${repo}`).join("")}`
|
||||||
)}" owned by "${owner}"`,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,18 +86,19 @@ export async function main(
|
|||||||
auth,
|
auth,
|
||||||
parsedOwner,
|
parsedOwner,
|
||||||
parsedRepositoryNames,
|
parsedRepositoryNames,
|
||||||
permissions,
|
permissions
|
||||||
),
|
),
|
||||||
{
|
{
|
||||||
|
shouldRetry: (error) => error.status >= 500,
|
||||||
onFailedAttempt: (error) => {
|
onFailedAttempt: (error) => {
|
||||||
core.info(
|
core.info(
|
||||||
`Failed to create token for "${parsedRepositoryNames.join(
|
`Failed to create token for "${parsedRepositoryNames.join(
|
||||||
",",
|
","
|
||||||
)}" (attempt ${error.attemptNumber}): ${error.message}`,
|
)}" (attempt ${error.attemptNumber}): ${error.message}`
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
retries: 3,
|
retries: 3,
|
||||||
},
|
}
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
// Otherwise get the installation for the owner, which can either be an organization or a user account
|
// Otherwise get the installation for the owner, which can either be an organization or a user account
|
||||||
@@ -107,11 +107,11 @@ export async function main(
|
|||||||
{
|
{
|
||||||
onFailedAttempt: (error) => {
|
onFailedAttempt: (error) => {
|
||||||
core.info(
|
core.info(
|
||||||
`Failed to create token for "${parsedOwner}" (attempt ${error.attemptNumber}): ${error.message}`,
|
`Failed to create token for "${parsedOwner}" (attempt ${error.attemptNumber}): ${error.message}`
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
retries: 3,
|
retries: 3,
|
||||||
},
|
}
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -157,7 +157,7 @@ async function getTokenFromRepository(
|
|||||||
auth,
|
auth,
|
||||||
parsedOwner,
|
parsedOwner,
|
||||||
parsedRepositoryNames,
|
parsedRepositoryNames,
|
||||||
permissions,
|
permissions
|
||||||
) {
|
) {
|
||||||
// https://docs.github.com/rest/apps/apps?apiVersion=2022-11-28#get-a-repository-installation-for-the-authenticated-app
|
// https://docs.github.com/rest/apps/apps?apiVersion=2022-11-28#get-a-repository-installation-for-the-authenticated-app
|
||||||
const response = await request("GET /repos/{owner}/{repo}/installation", {
|
const response = await request("GET /repos/{owner}/{repo}/installation", {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
* @param {import("@octokit/request").request} request
|
* @param {import("@octokit/request").request} request
|
||||||
*/
|
*/
|
||||||
export async function post(core, request) {
|
export async function post(core, request) {
|
||||||
const skipTokenRevoke = Boolean(core.getInput("skip-token-revoke"));
|
const skipTokenRevoke = core.getBooleanInput("skip-token-revoke");
|
||||||
|
|
||||||
if (skipTokenRevoke) {
|
if (skipTokenRevoke) {
|
||||||
core.info("Token revocation was skipped");
|
core.info("Token revocation was skipped");
|
||||||
|
|||||||
2
main.js
2
main.js
@@ -24,7 +24,7 @@ const repositories = core
|
|||||||
.map((s) => s.trim())
|
.map((s) => s.trim())
|
||||||
.filter((x) => x !== "");
|
.filter((x) => x !== "");
|
||||||
|
|
||||||
const skipTokenRevoke = Boolean(core.getInput("skip-token-revoke"));
|
const skipTokenRevoke = core.getBooleanInput("skip-token-revoke");
|
||||||
|
|
||||||
const permissions = getPermissionsFromInputs(process.env);
|
const permissions = getPermissionsFromInputs(process.env);
|
||||||
|
|
||||||
|
|||||||
840
package-lock.json
generated
840
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
14
package.json
14
package.json
@@ -2,7 +2,7 @@
|
|||||||
"name": "create-github-app-token",
|
"name": "create-github-app-token",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "2.0.1",
|
"version": "2.0.5",
|
||||||
"description": "GitHub Action for creating a GitHub App Installation Access Token",
|
"description": "GitHub Action for creating a GitHub App Installation Access Token",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "esbuild main.js post.js --bundle --outdir=dist --out-extension:.js=.cjs --platform=node --target=node20.0.0 --packages=bundle",
|
"build": "esbuild main.js post.js --bundle --outdir=dist --out-extension:.js=.cjs --platform=node --target=node20.0.0 --packages=bundle",
|
||||||
@@ -13,18 +13,18 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.11.1",
|
"@actions/core": "^1.11.1",
|
||||||
"@octokit/auth-app": "^7.2.0",
|
"@octokit/auth-app": "^7.2.1",
|
||||||
"@octokit/request": "^9.2.2",
|
"@octokit/request": "^9.2.2",
|
||||||
"p-retry": "^6.2.1",
|
"p-retry": "^6.2.1",
|
||||||
"undici": "^7.7.0"
|
"undici": "^7.8.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@octokit/openapi": "^18.2.0",
|
"@octokit/openapi": "^19.0.0",
|
||||||
"@sinonjs/fake-timers": "^14.0.0",
|
"@sinonjs/fake-timers": "^14.0.0",
|
||||||
"ava": "^6.2.0",
|
"ava": "^6.3.0",
|
||||||
"c8": "^10.1.3",
|
"c8": "^10.1.3",
|
||||||
"dotenv": "^16.4.7",
|
"dotenv": "^16.5.0",
|
||||||
"esbuild": "^0.25.2",
|
"esbuild": "^0.25.3",
|
||||||
"execa": "^9.5.2",
|
"execa": "^9.5.2",
|
||||||
"open-cli": "^8.0.0",
|
"open-cli": "^8.0.0",
|
||||||
"yaml": "^2.7.1"
|
"yaml": "^2.7.1"
|
||||||
|
|||||||
@@ -2,6 +2,6 @@ import { test } from "./main.js";
|
|||||||
|
|
||||||
// Verify `main` successfully sets permissions
|
// Verify `main` successfully sets permissions
|
||||||
await test(() => {
|
await test(() => {
|
||||||
process.env.INPUT_PERMISSION_ISSUES = `write`;
|
process.env["INPUT_PERMISSION-ISSUES"] = `write`;
|
||||||
process.env.INPUT_PERMISSION_PULL_REQUESTS = `read`;
|
process.env["INPUT_PERMISSION-PULL-REQUESTS"] = `read`;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ export const DEFAULT_ENV = {
|
|||||||
// inputs are set as environment variables with the prefix INPUT_
|
// inputs are set as environment variables with the prefix INPUT_
|
||||||
// https://docs.github.com/actions/creating-actions/metadata-syntax-for-github-actions#example-specifying-inputs
|
// https://docs.github.com/actions/creating-actions/metadata-syntax-for-github-actions#example-specifying-inputs
|
||||||
"INPUT_GITHUB-API-URL": "https://api.github.com",
|
"INPUT_GITHUB-API-URL": "https://api.github.com",
|
||||||
|
"INPUT_SKIP-TOKEN-REVOKE": "false",
|
||||||
"INPUT_APP-ID": "123456",
|
"INPUT_APP-ID": "123456",
|
||||||
// This key is invalidated. It’s from https://github.com/octokit/auth-app.js/issues/465#issuecomment-1564998327.
|
// This key is invalidated. It’s from https://github.com/octokit/auth-app.js/issues/465#issuecomment-1564998327.
|
||||||
"INPUT_PRIVATE-KEY": `-----BEGIN RSA PRIVATE KEY-----
|
"INPUT_PRIVATE-KEY": `-----BEGIN RSA PRIVATE KEY-----
|
||||||
@@ -37,6 +38,8 @@ so0tiQKBgGQXZaxaXhYUcxYHuCkQ3V4Vsj3ezlM92xXlP32SGFm3KgFhYy9kATxw
|
|||||||
Cax1ytZzvlrKLQyQFVK1COs2rHt7W4cJ7op7C8zXfsigXCiejnS664oAuX8sQZID
|
Cax1ytZzvlrKLQyQFVK1COs2rHt7W4cJ7op7C8zXfsigXCiejnS664oAuX8sQZID
|
||||||
x3WQZRiXlWejSMUAHuMwXrhGlltF3lw83+xAjnqsVp75kGS6OH61
|
x3WQZRiXlWejSMUAHuMwXrhGlltF3lw83+xAjnqsVp75kGS6OH61
|
||||||
-----END RSA PRIVATE KEY-----`,
|
-----END RSA PRIVATE KEY-----`,
|
||||||
|
// The Actions runner sets all inputs to empty strings if not set.
|
||||||
|
"INPUT_PERMISSION-ADMINISTRATION": "",
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function test(cb = (_mockPool) => {}, env = DEFAULT_ENV) {
|
export async function test(cb = (_mockPool) => {}, env = DEFAULT_ENV) {
|
||||||
@@ -60,7 +63,7 @@ export async function test(cb = (_mockPool) => {}, env = DEFAULT_ENV) {
|
|||||||
const owner = env.INPUT_OWNER ?? env.GITHUB_REPOSITORY_OWNER;
|
const owner = env.INPUT_OWNER ?? env.GITHUB_REPOSITORY_OWNER;
|
||||||
const currentRepoName = env.GITHUB_REPOSITORY.split("/")[1];
|
const currentRepoName = env.GITHUB_REPOSITORY.split("/")[1];
|
||||||
const repo = encodeURIComponent(
|
const repo = encodeURIComponent(
|
||||||
(env.INPUT_REPOSITORIES ?? currentRepoName).split(",")[0],
|
(env.INPUT_REPOSITORIES ?? currentRepoName).split(",")[0]
|
||||||
);
|
);
|
||||||
|
|
||||||
mockPool
|
mockPool
|
||||||
@@ -76,7 +79,7 @@ export async function test(cb = (_mockPool) => {}, env = DEFAULT_ENV) {
|
|||||||
.reply(
|
.reply(
|
||||||
200,
|
200,
|
||||||
{ id: mockInstallationId, app_slug: mockAppSlug },
|
{ id: mockInstallationId, app_slug: mockAppSlug },
|
||||||
{ headers: { "content-type": "application/json" } },
|
{ headers: { "content-type": "application/json" } }
|
||||||
);
|
);
|
||||||
|
|
||||||
// Mock installation access token request
|
// Mock installation access token request
|
||||||
@@ -97,7 +100,7 @@ export async function test(cb = (_mockPool) => {}, env = DEFAULT_ENV) {
|
|||||||
.reply(
|
.reply(
|
||||||
201,
|
201,
|
||||||
{ token: mockInstallationAccessToken, expires_at: mockExpiresAt },
|
{ token: mockInstallationAccessToken, expires_at: mockExpiresAt },
|
||||||
{ headers: { "content-type": "application/json" } },
|
{ headers: { "content-type": "application/json" } }
|
||||||
);
|
);
|
||||||
|
|
||||||
// Run the callback
|
// Run the callback
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ process.env.STATE_token = "secret123";
|
|||||||
// inputs are set as environment variables with the prefix INPUT_
|
// inputs are set as environment variables with the prefix INPUT_
|
||||||
// https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions#example-specifying-inputs
|
// https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions#example-specifying-inputs
|
||||||
process.env["INPUT_GITHUB-API-URL"] = "https://api.github.com";
|
process.env["INPUT_GITHUB-API-URL"] = "https://api.github.com";
|
||||||
|
process.env["INPUT_SKIP-TOKEN-REVOKE"] = "false";
|
||||||
|
|
||||||
// 1 hour in the future, not expired
|
// 1 hour in the future, not expired
|
||||||
process.env.STATE_expiresAt = new Date(
|
process.env.STATE_expiresAt = new Date(
|
||||||
|
|||||||
@@ -7,6 +7,10 @@ process.env.STATE_token = "secret123";
|
|||||||
// 1 hour in the past, expired
|
// 1 hour in the past, expired
|
||||||
process.env.STATE_expiresAt = new Date(Date.now() - 1000 * 60 * 60).toISOString();
|
process.env.STATE_expiresAt = new Date(Date.now() - 1000 * 60 * 60).toISOString();
|
||||||
|
|
||||||
|
// inputs are set as environment variables with the prefix INPUT_
|
||||||
|
// https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions#example-specifying-inputs
|
||||||
|
process.env["INPUT_SKIP-TOKEN-REVOKE"] = "false";
|
||||||
|
|
||||||
const mockAgent = new MockAgent();
|
const mockAgent = new MockAgent();
|
||||||
|
|
||||||
setGlobalDispatcher(mockAgent);
|
setGlobalDispatcher(mockAgent);
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ process.env.STATE_token = "secret123";
|
|||||||
// inputs are set as environment variables with the prefix INPUT_
|
// inputs are set as environment variables with the prefix INPUT_
|
||||||
// https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions#example-specifying-inputs
|
// https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions#example-specifying-inputs
|
||||||
process.env["INPUT_GITHUB-API-URL"] = "https://api.github.com";
|
process.env["INPUT_GITHUB-API-URL"] = "https://api.github.com";
|
||||||
|
process.env["INPUT_SKIP-TOKEN-REVOKE"] = "false";
|
||||||
|
|
||||||
// 1 hour in the future, not expired
|
// 1 hour in the future, not expired
|
||||||
process.env.STATE_expiresAt = new Date(Date.now() + 1000 * 60 * 60).toISOString();
|
process.env.STATE_expiresAt = new Date(Date.now() + 1000 * 60 * 60).toISOString();
|
||||||
|
|||||||
@@ -2,4 +2,8 @@
|
|||||||
// https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#sending-values-to-the-pre-and-post-actions
|
// https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#sending-values-to-the-pre-and-post-actions
|
||||||
delete process.env.STATE_token;
|
delete process.env.STATE_token;
|
||||||
|
|
||||||
|
// inputs are set as environment variables with the prefix INPUT_
|
||||||
|
// https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions#example-specifying-inputs
|
||||||
|
process.env["INPUT_SKIP-TOKEN-REVOKE"] = "false";
|
||||||
|
|
||||||
await import("../post.js");
|
await import("../post.js");
|
||||||
|
|||||||
@@ -22,7 +22,9 @@ Generated by [AVA](https://avajs.dev).
|
|||||||
|
|
||||||
> stdout
|
> stdout
|
||||||
|
|
||||||
`owner and repositories set, creating token for repositories "create-github-app-token" owned by "actions"␊
|
`Inputs 'owner' and 'repositories' are set. Creating token for the following repositories:␊
|
||||||
|
␊
|
||||||
|
- actions/create-github-app-token␊
|
||||||
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
␊
|
␊
|
||||||
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
@@ -65,7 +67,7 @@ Generated by [AVA](https://avajs.dev).
|
|||||||
|
|
||||||
> stdout
|
> stdout
|
||||||
|
|
||||||
`owner and repositories not set, creating token for the current repository ("create-github-app-token")␊
|
`Inputs 'owner' and 'repositories' are not set. Creating token for this repository (actions/create-github-app-token).␊
|
||||||
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
␊
|
␊
|
||||||
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
@@ -89,7 +91,9 @@ Generated by [AVA](https://avajs.dev).
|
|||||||
|
|
||||||
> stdout
|
> stdout
|
||||||
|
|
||||||
`owner and repositories set, creating token for repositories "failed-repo" owned by "actions"␊
|
`Inputs 'owner' and 'repositories' are set. Creating token for the following repositories:␊
|
||||||
|
␊
|
||||||
|
- actions/failed-repo␊
|
||||||
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
␊
|
␊
|
||||||
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
@@ -113,7 +117,7 @@ Generated by [AVA](https://avajs.dev).
|
|||||||
|
|
||||||
> stdout
|
> stdout
|
||||||
|
|
||||||
`repositories not set, creating token for all repositories for given owner "smockle"␊
|
`Input 'repositories' is not set. Creating token for all repositories owned by smockle.␊
|
||||||
Failed to create token for "smockle" (attempt 1): GitHub API not available␊
|
Failed to create token for "smockle" (attempt 1): GitHub API not available␊
|
||||||
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
␊
|
␊
|
||||||
@@ -138,7 +142,9 @@ Generated by [AVA](https://avajs.dev).
|
|||||||
|
|
||||||
> stdout
|
> stdout
|
||||||
|
|
||||||
`owner and repositories set, creating token for repositories "failed-repo" owned by "actions"␊
|
`Inputs 'owner' and 'repositories' are set. Creating token for the following repositories:␊
|
||||||
|
␊
|
||||||
|
- actions/failed-repo␊
|
||||||
Failed to create token for "failed-repo" (attempt 1): GitHub API not available␊
|
Failed to create token for "failed-repo" (attempt 1): GitHub API not available␊
|
||||||
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
␊
|
␊
|
||||||
@@ -163,7 +169,11 @@ Generated by [AVA](https://avajs.dev).
|
|||||||
|
|
||||||
> stdout
|
> stdout
|
||||||
|
|
||||||
`owner and repositories set, creating token for repositories "create-github-app-token,toolkit,checkout" owned by "actions"␊
|
`Inputs 'owner' and 'repositories' are set. Creating token for the following repositories:␊
|
||||||
|
␊
|
||||||
|
- actions/create-github-app-token␊
|
||||||
|
- actions/toolkit␊
|
||||||
|
- actions/checkout␊
|
||||||
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
␊
|
␊
|
||||||
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
@@ -186,7 +196,11 @@ Generated by [AVA](https://avajs.dev).
|
|||||||
|
|
||||||
> stdout
|
> stdout
|
||||||
|
|
||||||
`owner and repositories set, creating token for repositories "create-github-app-token,toolkit,checkout" owned by "actions"␊
|
`Inputs 'owner' and 'repositories' are set. Creating token for the following repositories:␊
|
||||||
|
␊
|
||||||
|
- actions/create-github-app-token␊
|
||||||
|
- actions/toolkit␊
|
||||||
|
- actions/checkout␊
|
||||||
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
␊
|
␊
|
||||||
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
@@ -209,7 +223,9 @@ Generated by [AVA](https://avajs.dev).
|
|||||||
|
|
||||||
> stdout
|
> stdout
|
||||||
|
|
||||||
`owner and repositories set, creating token for repositories "create-github-app-token" owned by "actions"␊
|
`Inputs 'owner' and 'repositories' are set. Creating token for the following repositories:␊
|
||||||
|
␊
|
||||||
|
- actions/create-github-app-token␊
|
||||||
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
␊
|
␊
|
||||||
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
@@ -232,7 +248,7 @@ Generated by [AVA](https://avajs.dev).
|
|||||||
|
|
||||||
> stdout
|
> stdout
|
||||||
|
|
||||||
`repositories not set, creating token for all repositories for given owner "actions"␊
|
`Input 'repositories' is not set. Creating token for all repositories owned by actions.␊
|
||||||
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
␊
|
␊
|
||||||
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
@@ -255,7 +271,8 @@ Generated by [AVA](https://avajs.dev).
|
|||||||
|
|
||||||
> stdout
|
> stdout
|
||||||
|
|
||||||
`owner not set, creating owner for given repositories "create-github-app-token" in current owner ("actions")␊
|
`No 'owner' input provided. Using default owner 'actions' to create token for the following repositories:␊
|
||||||
|
- actions/create-github-app-token␊
|
||||||
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
␊
|
␊
|
||||||
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
@@ -278,7 +295,7 @@ Generated by [AVA](https://avajs.dev).
|
|||||||
|
|
||||||
> stdout
|
> stdout
|
||||||
|
|
||||||
`owner and repositories not set, creating token for the current repository ("create-github-app-token")␊
|
`Inputs 'owner' and 'repositories' are not set. Creating token for this repository (actions/create-github-app-token).␊
|
||||||
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
␊
|
␊
|
||||||
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
@@ -301,7 +318,7 @@ Generated by [AVA](https://avajs.dev).
|
|||||||
|
|
||||||
> stdout
|
> stdout
|
||||||
|
|
||||||
`owner and repositories not set, creating token for the current repository ("create-github-app-token")␊
|
`Inputs 'owner' and 'repositories' are not set. Creating token for this repository (actions/create-github-app-token).␊
|
||||||
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
␊
|
␊
|
||||||
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
@@ -314,7 +331,7 @@ Generated by [AVA](https://avajs.dev).
|
|||||||
--- REQUESTS ---␊
|
--- REQUESTS ---␊
|
||||||
GET /repos/actions/create-github-app-token/installation␊
|
GET /repos/actions/create-github-app-token/installation␊
|
||||||
POST /app/installations/123456/access_tokens␊
|
POST /app/installations/123456/access_tokens␊
|
||||||
{"repositories":["create-github-app-token"],"permissions":{"issues":"write","pull_requests":"read"}}`
|
{"repositories":["create-github-app-token"],"permissions":{"issues":"write","pull-requests":"read"}}`
|
||||||
|
|
||||||
## post-revoke-token-fail-response.test.js
|
## post-revoke-token-fail-response.test.js
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user