Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5804f049e1 | |||
| 84daa2c0f0 | |||
| 6d98b259d9 | |||
| 3629f23f43 | |||
| 4bb2d37925 | |||
| 9f83520638 | |||
| 10f155294b | |||
| 49ce228ea7 | |||
| c08c5ace34 | |||
| c72844caa4 | |||
| ede6c15881 |
@@ -19,7 +19,7 @@ jobs:
|
||||
with:
|
||||
app_id: ${{ vars.RELEASER_APP_ID }}
|
||||
private_key: ${{ secrets.RELEASER_APP_PRIVATE_KEY }}
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
token: ${{ steps.app-token.outputs.token }}
|
||||
- run: npm install --no-save @semantic-release/git semantic-release-plugin-github-breaking-version-tag
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
name: test
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
|
||||
concurrency:
|
||||
@@ -7,13 +10,28 @@ concurrency:
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
test:
|
||||
integration:
|
||||
name: Integration
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: "16.16"
|
||||
node-version: 20
|
||||
cache: "npm"
|
||||
- run: npm ci
|
||||
- run: npm test
|
||||
|
||||
end-to-end:
|
||||
name: End-to-End
|
||||
runs-on: ubuntu-latest
|
||||
# do not run from forks, as forks don’t have access to repository secrets
|
||||
if: github.event.pull_request.head.repo.owner.login == github.event.pull_request.base.repo.owner.login
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 20
|
||||
cache: "npm"
|
||||
- run: npm ci
|
||||
- run: npm run build
|
||||
|
||||
Vendored
+46
-31
@@ -1602,7 +1602,7 @@ var require_oidc_utils = __commonJS({
|
||||
|
||||
Error Code : ${error.statusCode}
|
||||
|
||||
Error Message: ${error.result.message}`);
|
||||
Error Message: ${error.message}`);
|
||||
});
|
||||
const id_token = (_a = res.result) === null || _a === void 0 ? void 0 : _a.value;
|
||||
if (!id_token) {
|
||||
@@ -2793,7 +2793,7 @@ var require_dist_node5 = __commonJS({
|
||||
module2.exports = __toCommonJS2(dist_src_exports);
|
||||
var import_endpoint = require_dist_node2();
|
||||
var import_universal_user_agent = require_dist_node();
|
||||
var VERSION = "8.1.1";
|
||||
var VERSION = "8.1.2";
|
||||
var import_is_plain_object = require_is_plain_object();
|
||||
var import_request_error = require_dist_node4();
|
||||
function getBufferResponse(response) {
|
||||
@@ -3077,7 +3077,7 @@ var require_dist_node7 = __commonJS({
|
||||
module2.exports = __toCommonJS2(dist_src_exports);
|
||||
var VERSION = "4.0.0";
|
||||
var import_oauth_authorization_url = require_dist_node6();
|
||||
var import_request2 = require_dist_node5();
|
||||
var import_request3 = require_dist_node5();
|
||||
var import_request_error = require_dist_node4();
|
||||
function requestToOAuthBaseUrl(request2) {
|
||||
const endpointDefaults = request2.endpoint.DEFAULTS;
|
||||
@@ -3110,7 +3110,7 @@ var require_dist_node7 = __commonJS({
|
||||
return response;
|
||||
}
|
||||
function getWebFlowAuthorizationUrl({
|
||||
request: request2 = import_request2.request,
|
||||
request: request2 = import_request3.request,
|
||||
...options
|
||||
}) {
|
||||
const baseUrl = requestToOAuthBaseUrl(request2);
|
||||
@@ -3158,10 +3158,10 @@ var require_dist_node7 = __commonJS({
|
||||
function toTimestamp(apiTimeInMs, expirationInSeconds) {
|
||||
return new Date(apiTimeInMs + expirationInSeconds * 1e3).toISOString();
|
||||
}
|
||||
var import_request3 = require_dist_node5();
|
||||
var import_request32 = require_dist_node5();
|
||||
async function createDeviceCode(options) {
|
||||
const request2 = options.request || /* istanbul ignore next: we always pass a custom request in tests */
|
||||
import_request3.request;
|
||||
import_request32.request;
|
||||
const parameters = {
|
||||
client_id: options.clientId
|
||||
};
|
||||
@@ -3399,7 +3399,7 @@ var require_dist_node8 = __commonJS({
|
||||
});
|
||||
module2.exports = __toCommonJS2(dist_src_exports);
|
||||
var import_universal_user_agent = require_dist_node();
|
||||
var import_request2 = require_dist_node5();
|
||||
var import_request3 = require_dist_node5();
|
||||
var import_oauth_methods = require_dist_node7();
|
||||
async function getOAuthAccessToken(state, options) {
|
||||
const cachedAuthentication = getCachedAuthentication(state, options.auth);
|
||||
@@ -3496,7 +3496,7 @@ var require_dist_node8 = __commonJS({
|
||||
}
|
||||
var VERSION = "6.0.0";
|
||||
function createOAuthDeviceAuth(options) {
|
||||
const requestWithDefaults = options.request || import_request2.request.defaults({
|
||||
const requestWithDefaults = options.request || import_request3.request.defaults({
|
||||
headers: {
|
||||
"user-agent": `octokit-auth-oauth-device.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`
|
||||
}
|
||||
@@ -3567,7 +3567,7 @@ var require_dist_node9 = __commonJS({
|
||||
});
|
||||
module2.exports = __toCommonJS2(dist_src_exports);
|
||||
var import_universal_user_agent = require_dist_node();
|
||||
var import_request2 = require_dist_node5();
|
||||
var import_request3 = require_dist_node5();
|
||||
var VERSION = "4.0.0";
|
||||
var import_auth_oauth_device = require_dist_node8();
|
||||
var import_oauth_methods = require_dist_node7();
|
||||
@@ -3732,7 +3732,7 @@ var require_dist_node9 = __commonJS({
|
||||
clientId,
|
||||
clientSecret,
|
||||
clientType = "oauth-app",
|
||||
request: request2 = import_request2.request.defaults({
|
||||
request: request2 = import_request3.request.defaults({
|
||||
headers: {
|
||||
"user-agent": `octokit-auth-oauth-app.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`
|
||||
}
|
||||
@@ -3795,7 +3795,7 @@ var require_dist_node10 = __commonJS({
|
||||
});
|
||||
module2.exports = __toCommonJS2(dist_src_exports);
|
||||
var import_universal_user_agent = require_dist_node();
|
||||
var import_request2 = require_dist_node5();
|
||||
var import_request3 = require_dist_node5();
|
||||
var import_btoa_lite = __toESM2(require_btoa_node());
|
||||
var import_auth_oauth_user = require_dist_node9();
|
||||
async function auth(state, authOptions) {
|
||||
@@ -3865,7 +3865,7 @@ var require_dist_node10 = __commonJS({
|
||||
function createOAuthAppAuth(options) {
|
||||
const state = Object.assign(
|
||||
{
|
||||
request: import_request2.request.defaults({
|
||||
request: import_request3.request.defaults({
|
||||
headers: {
|
||||
"user-agent": `octokit-auth-oauth-app.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`
|
||||
}
|
||||
@@ -14610,7 +14610,7 @@ var require_dist_node12 = __commonJS({
|
||||
});
|
||||
module2.exports = __toCommonJS2(dist_src_exports);
|
||||
var import_universal_user_agent = require_dist_node();
|
||||
var import_request2 = require_dist_node5();
|
||||
var import_request3 = require_dist_node5();
|
||||
var import_auth_oauth_app = require_dist_node10();
|
||||
var import_deprecation = require_dist_node3();
|
||||
var OAuthAppAuth = __toESM2(require_dist_node10());
|
||||
@@ -14984,7 +14984,7 @@ var require_dist_node12 = __commonJS({
|
||||
return sendRequestWithRetries(state, request2, options, createdAt, retries);
|
||||
}
|
||||
}
|
||||
var VERSION = "6.0.0";
|
||||
var VERSION = "6.0.1";
|
||||
var import_auth_oauth_user2 = require_dist_node9();
|
||||
function createAppAuth2(options) {
|
||||
if (!options.appId) {
|
||||
@@ -15009,7 +15009,7 @@ var require_dist_node12 = __commonJS({
|
||||
},
|
||||
options.log
|
||||
);
|
||||
const request2 = options.request || import_request2.request.defaults({
|
||||
const request2 = options.request || import_request3.request.defaults({
|
||||
headers: {
|
||||
"user-agent": `octokit-auth-app.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`
|
||||
}
|
||||
@@ -15039,17 +15039,16 @@ var require_dist_node12 = __commonJS({
|
||||
});
|
||||
|
||||
// main.js
|
||||
var import_core2 = __toESM(require_core(), 1);
|
||||
var import_core = __toESM(require_core(), 1);
|
||||
var import_auth_app = __toESM(require_dist_node12(), 1);
|
||||
var import_request = __toESM(require_dist_node5(), 1);
|
||||
|
||||
// lib/main.js
|
||||
var import_core = __toESM(require_core(), 1);
|
||||
async function main(appId2, privateKey2, repository2, core3, createAppAuth2, request2) {
|
||||
async function main(appId2, privateKey2, repository2, core2, createAppAuth2, request2) {
|
||||
const [owner, repo] = repository2.split("/");
|
||||
const auth = createAppAuth2({
|
||||
appId: appId2,
|
||||
privateKey: privateKey2
|
||||
privateKey: privateKey2,
|
||||
request: request2
|
||||
});
|
||||
const appAuthentication = await auth({
|
||||
type: "app"
|
||||
@@ -15069,24 +15068,40 @@ async function main(appId2, privateKey2, repository2, core3, createAppAuth2, req
|
||||
installationId: installation.id,
|
||||
repositoryNames: [repo]
|
||||
});
|
||||
core3.setSecret(authentication.token);
|
||||
core3.setOutput("token", authentication.token);
|
||||
core3.saveState("token", authentication.token);
|
||||
core2.setSecret(authentication.token);
|
||||
core2.setOutput("token", authentication.token);
|
||||
core2.saveState("token", authentication.token);
|
||||
}
|
||||
|
||||
// lib/request.js
|
||||
var import_request = __toESM(require_dist_node5(), 1);
|
||||
var request_default = import_request.request.defaults({
|
||||
baseUrl: process.env["GITHUB_API_URL"],
|
||||
headers: {
|
||||
"user-agent": "actions/create-github-app-token"
|
||||
}
|
||||
});
|
||||
|
||||
// main.js
|
||||
if (!process.env.GITHUB_REPOSITORY) {
|
||||
throw new Error("GITHUB_REPOSITORY missing, must be set to '<owner>/<repo>'");
|
||||
}
|
||||
var appId = import_core2.default.getInput("app_id");
|
||||
var privateKey = import_core2.default.getInput("private_key");
|
||||
var appId = import_core.default.getInput("app_id");
|
||||
var privateKey = import_core.default.getInput("private_key");
|
||||
var repository = process.env.GITHUB_REPOSITORY;
|
||||
main(appId, privateKey, repository, import_core2.default, import_auth_app.createAppAuth, import_request.request).catch(
|
||||
(error) => {
|
||||
console.error(error);
|
||||
import_core2.default.setFailed(error.message);
|
||||
}
|
||||
);
|
||||
main(
|
||||
appId,
|
||||
privateKey,
|
||||
repository,
|
||||
import_core.default,
|
||||
import_auth_app.createAppAuth,
|
||||
request_default.defaults({
|
||||
baseUrl: process.env["GITHUB_API_URL"]
|
||||
})
|
||||
).catch((error) => {
|
||||
console.error(error);
|
||||
import_core.default.setFailed(error.message);
|
||||
});
|
||||
/*! Bundled license information:
|
||||
|
||||
is-plain-object/dist/is-plain-object.js:
|
||||
|
||||
Vendored
+27
-15
@@ -1602,7 +1602,7 @@ var require_oidc_utils = __commonJS({
|
||||
|
||||
Error Code : ${error.statusCode}
|
||||
|
||||
Error Message: ${error.result.message}`);
|
||||
Error Message: ${error.message}`);
|
||||
});
|
||||
const id_token = (_a = res.result) === null || _a === void 0 ? void 0 : _a.value;
|
||||
if (!id_token) {
|
||||
@@ -2793,7 +2793,7 @@ var require_dist_node5 = __commonJS({
|
||||
module2.exports = __toCommonJS2(dist_src_exports);
|
||||
var import_endpoint = require_dist_node2();
|
||||
var import_universal_user_agent = require_dist_node();
|
||||
var VERSION = "8.1.1";
|
||||
var VERSION = "8.1.2";
|
||||
var import_is_plain_object = require_is_plain_object();
|
||||
var import_request_error = require_dist_node4();
|
||||
function getBufferResponse(response) {
|
||||
@@ -2951,30 +2951,42 @@ var require_dist_node5 = __commonJS({
|
||||
});
|
||||
|
||||
// post.js
|
||||
var import_core2 = __toESM(require_core(), 1);
|
||||
var import_request = __toESM(require_dist_node5(), 1);
|
||||
var import_core = __toESM(require_core(), 1);
|
||||
|
||||
// lib/post.js
|
||||
var import_core = __toESM(require_core(), 1);
|
||||
async function post(core3, request2) {
|
||||
const token = core3.getState("token");
|
||||
if (!token)
|
||||
async function post(core2, request2) {
|
||||
const token = core2.getState("token");
|
||||
if (!token) {
|
||||
core2.info("Token is not set");
|
||||
return;
|
||||
}
|
||||
await request2("DELETE /installation/token", {
|
||||
headers: {
|
||||
authorization: `token ${token}`
|
||||
}
|
||||
});
|
||||
core3.info("Token revoked");
|
||||
core2.info("Token revoked");
|
||||
}
|
||||
|
||||
// post.js
|
||||
post(import_core2.default, import_request.request).catch(
|
||||
(error) => {
|
||||
console.error(error);
|
||||
import_core2.default.setFailed(error.message);
|
||||
// lib/request.js
|
||||
var import_request = __toESM(require_dist_node5(), 1);
|
||||
var request_default = import_request.request.defaults({
|
||||
baseUrl: process.env["GITHUB_API_URL"],
|
||||
headers: {
|
||||
"user-agent": "actions/create-github-app-token"
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
// post.js
|
||||
post(
|
||||
import_core.default,
|
||||
request_default.defaults({
|
||||
baseUrl: process.env["GITHUB_API_URL"]
|
||||
})
|
||||
).catch((error) => {
|
||||
console.error(error);
|
||||
import_core.default.setFailed(error.message);
|
||||
});
|
||||
/*! Bundled license information:
|
||||
|
||||
is-plain-object/dist/is-plain-object.js:
|
||||
|
||||
+4
-7
@@ -1,16 +1,12 @@
|
||||
// @ts-check
|
||||
|
||||
import core from "@actions/core";
|
||||
import { createAppAuth } from "@octokit/auth-app";
|
||||
import { request } from "@octokit/request";
|
||||
|
||||
/**
|
||||
* @param {string} appId
|
||||
* @param {string} privateKey
|
||||
* @param {string} repository
|
||||
* @param {core} core
|
||||
* @param {createAppAuth} createAppAuth
|
||||
* @param {request} request
|
||||
* @param {import("@actions/core")} core
|
||||
* @param {import("@octokit/auth-app").createAppAuth} createAppAuth
|
||||
* @param {import("@octokit/request").request} request
|
||||
*/
|
||||
export async function main(
|
||||
appId,
|
||||
@@ -26,6 +22,7 @@ export async function main(
|
||||
const auth = createAppAuth({
|
||||
appId,
|
||||
privateKey,
|
||||
request,
|
||||
});
|
||||
|
||||
const appAuthentication = await auth({
|
||||
|
||||
+7
-7
@@ -1,17 +1,17 @@
|
||||
// @ts-check
|
||||
|
||||
import core from "@actions/core";
|
||||
import { request } from "@octokit/request";
|
||||
|
||||
/**
|
||||
* @param {core} core
|
||||
* @param {request} request
|
||||
* @param {import("@actions/core")} core
|
||||
* @param {import("@octokit/request").request} request
|
||||
*/
|
||||
export async function post(core, request) {
|
||||
const token = core.getState("token");
|
||||
|
||||
if (!token) return;
|
||||
|
||||
if (!token) {
|
||||
core.info("Token is not set");
|
||||
return;
|
||||
}
|
||||
|
||||
await request("DELETE /installation/token", {
|
||||
headers: {
|
||||
authorization: `token ${token}`,
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
import { request } from "@octokit/request";
|
||||
|
||||
export default request.defaults({
|
||||
baseUrl: process.env["GITHUB_API_URL"],
|
||||
headers: {
|
||||
"user-agent": "actions/create-github-app-token",
|
||||
},
|
||||
});
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
import core from "@actions/core";
|
||||
import { createAppAuth } from "@octokit/auth-app";
|
||||
import { request } from "@octokit/request";
|
||||
|
||||
import { main } from "./lib/main.js";
|
||||
import request from "./lib/request.js";
|
||||
|
||||
if (!process.env.GITHUB_REPOSITORY) {
|
||||
throw new Error("GITHUB_REPOSITORY missing, must be set to '<owner>/<repo>'");
|
||||
@@ -15,9 +15,16 @@ const privateKey = core.getInput("private_key");
|
||||
|
||||
const repository = process.env.GITHUB_REPOSITORY;
|
||||
|
||||
main(appId, privateKey, repository, core, createAppAuth, request).catch(
|
||||
(error) => {
|
||||
console.error(error);
|
||||
core.setFailed(error.message);
|
||||
}
|
||||
);
|
||||
main(
|
||||
appId,
|
||||
privateKey,
|
||||
repository,
|
||||
core,
|
||||
createAppAuth,
|
||||
request.defaults({
|
||||
baseUrl: process.env["GITHUB_API_URL"],
|
||||
})
|
||||
).catch((error) => {
|
||||
console.error(error);
|
||||
core.setFailed(error.message);
|
||||
});
|
||||
|
||||
Generated
+2023
-108
File diff suppressed because it is too large
Load Diff
+9
-6
@@ -2,21 +2,24 @@
|
||||
"name": "create-github-app-token",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"version": "1.1.5",
|
||||
"version": "1.2.2",
|
||||
"description": "GitHub Action for creating a GitHub App Installation Access Token",
|
||||
"scripts": {
|
||||
"build": "esbuild main.js post.js --bundle --outdir=dist --out-extension:.js=.cjs --platform=node --target=node16.16",
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
"test": "ava tests/index.js"
|
||||
},
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.10.0",
|
||||
"@octokit/auth-app": "^6.0.0",
|
||||
"@octokit/request": "^8.1.1"
|
||||
"@actions/core": "^1.10.1",
|
||||
"@octokit/auth-app": "^6.0.1",
|
||||
"@octokit/request": "^8.1.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"ava": "^5.3.1",
|
||||
"dotenv": "^16.3.1",
|
||||
"esbuild": "^0.19.2"
|
||||
"esbuild": "^0.19.4",
|
||||
"execa": "^8.0.1",
|
||||
"undici": "^5.25.2"
|
||||
},
|
||||
"release": {
|
||||
"branches": [
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
// @ts-check
|
||||
|
||||
import core from "@actions/core";
|
||||
import { request } from "@octokit/request";
|
||||
|
||||
import { post } from "./lib/post.js";
|
||||
import request from "./lib/request.js";
|
||||
|
||||
post(core, request).catch(
|
||||
(error) => {
|
||||
console.error(error);
|
||||
core.setFailed(error.message);
|
||||
}
|
||||
);
|
||||
post(
|
||||
core,
|
||||
request.defaults({
|
||||
baseUrl: process.env["GITHUB_API_URL"],
|
||||
})
|
||||
).catch((error) => {
|
||||
console.error(error);
|
||||
core.setFailed(error.message);
|
||||
});
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# Tests
|
||||
|
||||
Add one test file per scenario. You can run them in isolation with:
|
||||
|
||||
```bash
|
||||
node tests/post-token-set.test.js
|
||||
```
|
||||
|
||||
All tests are run together in [tests/index.js](index.js), which can be execauted with ava
|
||||
|
||||
```
|
||||
npx ava tests/index.js
|
||||
```
|
||||
|
||||
or with npm
|
||||
|
||||
```
|
||||
npm test
|
||||
```
|
||||
@@ -0,0 +1,14 @@
|
||||
import { readdirSync } from "node:fs";
|
||||
|
||||
import { execa } from "execa";
|
||||
import test from "ava";
|
||||
|
||||
const tests = readdirSync("tests").filter((file) => file.endsWith(".test.js"));
|
||||
|
||||
for (const file of tests) {
|
||||
test(file, async (t) => {
|
||||
const { stderr, stdout } = await execa("node", [`tests/${file}`]);
|
||||
t.snapshot(stderr, "stderr");
|
||||
t.snapshot(stdout, "stdout");
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
import { MockAgent, setGlobalDispatcher } from "undici";
|
||||
|
||||
// state variables are set as environment variables with the prefix STATE_
|
||||
// https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#sending-values-to-the-pre-and-post-actions
|
||||
process.env.STATE_token = "secret123";
|
||||
|
||||
const mockAgent = new MockAgent();
|
||||
|
||||
setGlobalDispatcher(mockAgent);
|
||||
|
||||
// Provide the base url to the request
|
||||
const mockPool = mockAgent.get("https://api.github.com");
|
||||
|
||||
// intercept the request
|
||||
mockPool
|
||||
.intercept({
|
||||
path: "/installation/token",
|
||||
method: "DELETE",
|
||||
headers: {
|
||||
authorization: "token secret123",
|
||||
},
|
||||
})
|
||||
.reply(204);
|
||||
|
||||
await import("../post.js");
|
||||
@@ -0,0 +1,5 @@
|
||||
// state variables are set as environment variables with the prefix STATE_
|
||||
// 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;
|
||||
|
||||
await import("../post.js");
|
||||
@@ -0,0 +1,25 @@
|
||||
# Snapshot report for `tests/index.js`
|
||||
|
||||
The actual snapshot is saved in `index.js.snap`.
|
||||
|
||||
Generated by [AVA](https://avajs.dev).
|
||||
|
||||
## post-token-set.test.js
|
||||
|
||||
> stderr
|
||||
|
||||
''
|
||||
|
||||
> stdout
|
||||
|
||||
'Token revoked'
|
||||
|
||||
## post-token-unset.test.js
|
||||
|
||||
> stderr
|
||||
|
||||
''
|
||||
|
||||
> stdout
|
||||
|
||||
'Token is not set'
|
||||
Binary file not shown.
Reference in New Issue
Block a user