Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3378cda945 | ||
|
|
e177c20e0f | ||
|
|
961c2284dc | ||
|
|
15db0371da | ||
|
|
9ccc6dbd71 | ||
|
|
000e2a0d29 | ||
|
|
d0ac2addd1 | ||
|
|
040c2598aa |
1
.github/workflows/test.yml
vendored
1
.github/workflows/test.yml
vendored
@@ -5,6 +5,7 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
pull_request:
|
pull_request:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
|||||||
44
README.md
44
README.md
@@ -79,14 +79,14 @@ jobs:
|
|||||||
# required
|
# required
|
||||||
app-id: ${{ vars.APP_ID }}
|
app-id: ${{ vars.APP_ID }}
|
||||||
private-key: ${{ secrets.PRIVATE_KEY }}
|
private-key: ${{ secrets.PRIVATE_KEY }}
|
||||||
- name: Retrieve GitHub App User ID
|
- name: Get GitHub App User ID
|
||||||
id: get-user-id
|
id: get-user-id
|
||||||
run: echo "user-id=$(gh api "/users/${{ steps.generate-token.outputs.app-slug }}[bot]" --jq .id)" >> "$GITHUB_OUTPUT"
|
run: echo "user-id=$(gh api "/users/${{ steps.app-token.outputs.app-slug }}[bot]" --jq .id)" >> "$GITHUB_OUTPUT"
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
||||||
- id: committer
|
- id: committer
|
||||||
run: echo "string=${{steps.app-token.outputs.app-slug}}[bot] <${{steps.get-user-id.outputs.user-id}}+${{ steps.app-token.outputs.app-slug }}[bot]@users.noreply.github.com>" >> "$GITHUB_OUTPUT"
|
run: echo "string=${{ steps.app-token.outputs.app-slug }}[bot] <${{ steps.get-user-id.outputs.user-id }}+${{ steps.app-token.outputs.app-slug }}[bot]@users.noreply.github.com>" >> "$GITHUB_OUTPUT"
|
||||||
- run: echo "committer string is ${{steps.committer.outputs.string}}"
|
- run: echo "committer string is ${ {steps.committer.outputs.string }}"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Configure git CLI for an app's bot user
|
### Configure git CLI for an app's bot user
|
||||||
@@ -104,14 +104,14 @@ jobs:
|
|||||||
# required
|
# required
|
||||||
app-id: ${{ vars.APP_ID }}
|
app-id: ${{ vars.APP_ID }}
|
||||||
private-key: ${{ secrets.PRIVATE_KEY }}
|
private-key: ${{ secrets.PRIVATE_KEY }}
|
||||||
- name: Retrieve GitHub App User ID
|
- name: Get GitHub App User ID
|
||||||
id: get-user-id
|
id: get-user-id
|
||||||
run: echo "user-id=$(gh api "/users/${{ steps.generate-token.outputs.app-slug }}[bot]" --jq .id)" >> "$GITHUB_OUTPUT"
|
run: echo "user-id=$(gh api "/users/${{ steps.app-token.outputs.app-slug }}[bot]" --jq .id)" >> "$GITHUB_OUTPUT"
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
||||||
- run: |
|
- run: |
|
||||||
git config --global user.name '${{steps.app-token.outputs.app-slug}}[bot]'
|
git config --global user.name '${{ steps.app-token.outputs.app-slug }}[bot]'
|
||||||
git config --global user.email '${{steps.get-user-id.outputs.user-id}}+${{ steps.app-token.outputs.app-slug }}[bot]@users.noreply.github.com>'
|
git config --global user.email '${{ steps.get-user-id.outputs.user-id }}+${{ steps.app-token.outputs.app-slug }}[bot]@users.noreply.github.com>'
|
||||||
# git commands like commit work using the bot user
|
# git commands like commit work using the bot user
|
||||||
- run: |
|
- run: |
|
||||||
git add .
|
git add .
|
||||||
@@ -119,8 +119,12 @@ jobs:
|
|||||||
git push
|
git push
|
||||||
```
|
```
|
||||||
|
|
||||||
The `<BOT USER ID>` is the numeric user ID of the app's bot user, which can be found under `https://api.github.com/users/<app-slug>%5Bbot%5D`.
|
> [!TIP]
|
||||||
For example, we can check at `https://api.github.com/users/dependabot%5Bbot%5D` to see the user ID of dependabot is 49699333.
|
> The `<BOT USER ID>` is the numeric user ID of the app's bot user, which can be found under `https://api.github.com/users/<app-slug>%5Bbot%5D`.
|
||||||
|
>
|
||||||
|
> For example, we can check at `https://api.github.com/users/dependabot[bot]` to see the user ID of Dependabot is 49699333.
|
||||||
|
>
|
||||||
|
> Alternatively, you can use the [octokit/request-action](https://github.com/octokit/request-action) to get the ID.
|
||||||
|
|
||||||
### Create a token for all repositories in the current owner's installation
|
### Create a token for all repositories in the current owner's installation
|
||||||
|
|
||||||
@@ -203,7 +207,7 @@ jobs:
|
|||||||
set-matrix:
|
set-matrix:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
outputs:
|
outputs:
|
||||||
matrix: ${{steps.set.outputs.matrix }}
|
matrix: ${{ steps.set.outputs.matrix }}
|
||||||
steps:
|
steps:
|
||||||
- id: set
|
- id: set
|
||||||
run: echo 'matrix=[{"owner":"owner1"},{"owner":"owner2","repos":["repo1"]}]' >>"$GITHUB_OUTPUT"
|
run: echo 'matrix=[{"owner":"owner1"},{"owner":"owner2","repos":["repo1"]}]' >>"$GITHUB_OUTPUT"
|
||||||
@@ -274,6 +278,24 @@ jobs:
|
|||||||
|
|
||||||
**Required:** GitHub App private key. Escaped newlines (`\\n`) will be automatically replaced with actual newlines.
|
**Required:** GitHub App private key. Escaped newlines (`\\n`) will be automatically replaced with actual newlines.
|
||||||
|
|
||||||
|
Some other actions may require the private key to be Base64 encoded. To avoid recreating a new secret, it can be decoded on the fly, but it needs to be managed securely. Here is an example of how this can be achieved:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
steps:
|
||||||
|
- name: Decode the GitHub App Private Key
|
||||||
|
id: decode
|
||||||
|
run: |
|
||||||
|
private_key=$(echo "${{ secrets.PRIVATE_KEY }}" | base64 -d | awk 'BEGIN {ORS="\\n"} {print}' | head -c -2) &> /dev/null
|
||||||
|
echo "::add-mask::$private_key"
|
||||||
|
echo "private-key=$private_key" >> "$GITHUB_OUTPUT"
|
||||||
|
- name: Generate GitHub App Token
|
||||||
|
id: app-token
|
||||||
|
uses: actions/create-github-app-token@v1
|
||||||
|
with:
|
||||||
|
app-id: ${{ vars.APP_ID }}
|
||||||
|
private-key: ${{ steps.decode.outputs.private-key }}
|
||||||
|
```
|
||||||
|
|
||||||
### `owner`
|
### `owner`
|
||||||
|
|
||||||
**Optional:** The owner of the GitHub App installation. If empty, defaults to the current repository owner.
|
**Optional:** The owner of the GitHub App installation. If empty, defaults to the current repository owner.
|
||||||
|
|||||||
336
dist/main.cjs
vendored
336
dist/main.cjs
vendored
@@ -2239,6 +2239,7 @@ var require_decodeText = __commonJS({
|
|||||||
return decoders.utf8;
|
return decoders.utf8;
|
||||||
case "latin1":
|
case "latin1":
|
||||||
case "ascii":
|
case "ascii":
|
||||||
|
// TODO: Make these a separate, strict decoder?
|
||||||
case "us-ascii":
|
case "us-ascii":
|
||||||
case "iso-8859-1":
|
case "iso-8859-1":
|
||||||
case "iso8859-1":
|
case "iso8859-1":
|
||||||
@@ -2938,6 +2939,7 @@ var require_basename = __commonJS({
|
|||||||
for (var i = path.length - 1; i >= 0; --i) {
|
for (var i = path.length - 1; i >= 0; --i) {
|
||||||
switch (path.charCodeAt(i)) {
|
switch (path.charCodeAt(i)) {
|
||||||
case 47:
|
case 47:
|
||||||
|
// '/'
|
||||||
case 92:
|
case 92:
|
||||||
path = path.slice(i + 1);
|
path = path.slice(i + 1);
|
||||||
return path === ".." || path === "." ? "" : path;
|
return path === ".." || path === "." ? "" : path;
|
||||||
@@ -4172,7 +4174,21 @@ var require_util2 = __commonJS({
|
|||||||
return referrerOrigin;
|
return referrerOrigin;
|
||||||
}
|
}
|
||||||
case "strict-origin":
|
case "strict-origin":
|
||||||
|
// eslint-disable-line
|
||||||
|
/**
|
||||||
|
* 1. If referrerURL is a potentially trustworthy URL and
|
||||||
|
* request’s current URL is not a potentially trustworthy URL,
|
||||||
|
* then return no referrer.
|
||||||
|
* 2. Return referrerOrigin
|
||||||
|
*/
|
||||||
case "no-referrer-when-downgrade":
|
case "no-referrer-when-downgrade":
|
||||||
|
// eslint-disable-line
|
||||||
|
/**
|
||||||
|
* 1. If referrerURL is a potentially trustworthy URL and
|
||||||
|
* request’s current URL is not a potentially trustworthy URL,
|
||||||
|
* then return no referrer.
|
||||||
|
* 2. Return referrerOrigin
|
||||||
|
*/
|
||||||
default:
|
default:
|
||||||
return isNonPotentiallyTrustWorthy ? "no-referrer" : referrerOrigin;
|
return isNonPotentiallyTrustWorthy ? "no-referrer" : referrerOrigin;
|
||||||
}
|
}
|
||||||
@@ -22785,7 +22801,21 @@ var require_util9 = __commonJS({
|
|||||||
return referrerOrigin;
|
return referrerOrigin;
|
||||||
}
|
}
|
||||||
case "strict-origin":
|
case "strict-origin":
|
||||||
|
// eslint-disable-line
|
||||||
|
/**
|
||||||
|
* 1. If referrerURL is a potentially trustworthy URL and
|
||||||
|
* request’s current URL is not a potentially trustworthy URL,
|
||||||
|
* then return no referrer.
|
||||||
|
* 2. Return referrerOrigin
|
||||||
|
*/
|
||||||
case "no-referrer-when-downgrade":
|
case "no-referrer-when-downgrade":
|
||||||
|
// eslint-disable-line
|
||||||
|
/**
|
||||||
|
* 1. If referrerURL is a potentially trustworthy URL and
|
||||||
|
* request’s current URL is not a potentially trustworthy URL,
|
||||||
|
* then return no referrer.
|
||||||
|
* 2. Return referrerOrigin
|
||||||
|
*/
|
||||||
default:
|
default:
|
||||||
return isNonPotentiallyTrustWorthy ? "no-referrer" : referrerOrigin;
|
return isNonPotentiallyTrustWorthy ? "no-referrer" : referrerOrigin;
|
||||||
}
|
}
|
||||||
@@ -23887,11 +23917,23 @@ var require_body2 = __commonJS({
|
|||||||
var { webidl } = require_webidl2();
|
var { webidl } = require_webidl2();
|
||||||
var { Blob: Blob2 } = require("node:buffer");
|
var { Blob: Blob2 } = require("node:buffer");
|
||||||
var assert = require("node:assert");
|
var assert = require("node:assert");
|
||||||
var { isErrored } = require_util8();
|
var { isErrored, isDisturbed } = require("node:stream");
|
||||||
var { isArrayBuffer } = require("node:util/types");
|
var { isArrayBuffer } = require("node:util/types");
|
||||||
var { serializeAMimeType } = require_data_url();
|
var { serializeAMimeType } = require_data_url();
|
||||||
var { multipartFormDataParser } = require_formdata_parser();
|
var { multipartFormDataParser } = require_formdata_parser();
|
||||||
var textEncoder = new TextEncoder();
|
var textEncoder = new TextEncoder();
|
||||||
|
function noop() {
|
||||||
|
}
|
||||||
|
var hasFinalizationRegistry = globalThis.FinalizationRegistry && process.version.indexOf("v18") !== 0;
|
||||||
|
var streamRegistry;
|
||||||
|
if (hasFinalizationRegistry) {
|
||||||
|
streamRegistry = new FinalizationRegistry((weakRef) => {
|
||||||
|
const stream = weakRef.deref();
|
||||||
|
if (stream && !stream.locked && !isDisturbed(stream) && !isErrored(stream)) {
|
||||||
|
stream.cancel("Response object has been garbage collected").catch(noop);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
function extractBody(object, keepalive = false) {
|
function extractBody(object, keepalive = false) {
|
||||||
let stream = null;
|
let stream = null;
|
||||||
if (object instanceof ReadableStream) {
|
if (object instanceof ReadableStream) {
|
||||||
@@ -24034,8 +24076,11 @@ Content-Type: ${value.type || "application/octet-stream"}\r
|
|||||||
}
|
}
|
||||||
return extractBody(object, keepalive);
|
return extractBody(object, keepalive);
|
||||||
}
|
}
|
||||||
function cloneBody(body) {
|
function cloneBody(instance, body) {
|
||||||
const [out1, out2] = body.stream.tee();
|
const [out1, out2] = body.stream.tee();
|
||||||
|
if (hasFinalizationRegistry) {
|
||||||
|
streamRegistry.register(instance, new WeakRef(out1));
|
||||||
|
}
|
||||||
body.stream = out1;
|
body.stream = out1;
|
||||||
return {
|
return {
|
||||||
stream: out2,
|
stream: out2,
|
||||||
@@ -24114,7 +24159,7 @@ Content-Type: ${value.type || "application/octet-stream"}\r
|
|||||||
}
|
}
|
||||||
async function consumeBody(object, convertBytesToJSValue, instance) {
|
async function consumeBody(object, convertBytesToJSValue, instance) {
|
||||||
webidl.brandCheck(object, instance);
|
webidl.brandCheck(object, instance);
|
||||||
if (bodyUnusable(object[kState].body)) {
|
if (bodyUnusable(object)) {
|
||||||
throw new TypeError("Body is unusable: Body has already been read");
|
throw new TypeError("Body is unusable: Body has already been read");
|
||||||
}
|
}
|
||||||
throwIfAborted(object[kState]);
|
throwIfAborted(object[kState]);
|
||||||
@@ -24134,7 +24179,8 @@ Content-Type: ${value.type || "application/octet-stream"}\r
|
|||||||
await fullyReadBody(object[kState].body, successSteps, errorSteps);
|
await fullyReadBody(object[kState].body, successSteps, errorSteps);
|
||||||
return promise.promise;
|
return promise.promise;
|
||||||
}
|
}
|
||||||
function bodyUnusable(body) {
|
function bodyUnusable(object) {
|
||||||
|
const body = object[kState].body;
|
||||||
return body != null && (body.stream.locked || util.isDisturbed(body.stream));
|
return body != null && (body.stream.locked || util.isDisturbed(body.stream));
|
||||||
}
|
}
|
||||||
function parseJSONFromBytes(bytes) {
|
function parseJSONFromBytes(bytes) {
|
||||||
@@ -24152,7 +24198,10 @@ Content-Type: ${value.type || "application/octet-stream"}\r
|
|||||||
extractBody,
|
extractBody,
|
||||||
safelyExtractBody,
|
safelyExtractBody,
|
||||||
cloneBody,
|
cloneBody,
|
||||||
mixinBody
|
mixinBody,
|
||||||
|
streamRegistry,
|
||||||
|
hasFinalizationRegistry,
|
||||||
|
bodyUnusable
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -26706,8 +26755,13 @@ var require_balanced_pool2 = __commonJS({
|
|||||||
var kMaxWeightPerServer = Symbol("kMaxWeightPerServer");
|
var kMaxWeightPerServer = Symbol("kMaxWeightPerServer");
|
||||||
var kErrorPenalty = Symbol("kErrorPenalty");
|
var kErrorPenalty = Symbol("kErrorPenalty");
|
||||||
function getGreatestCommonDivisor(a, b) {
|
function getGreatestCommonDivisor(a, b) {
|
||||||
if (b === 0) return a;
|
if (a === 0) return b;
|
||||||
return getGreatestCommonDivisor(b, a % b);
|
while (b !== 0) {
|
||||||
|
const t = b;
|
||||||
|
b = a % b;
|
||||||
|
a = t;
|
||||||
|
}
|
||||||
|
return a;
|
||||||
}
|
}
|
||||||
function defaultFactory(origin, opts) {
|
function defaultFactory(origin, opts) {
|
||||||
return new Pool(origin, opts);
|
return new Pool(origin, opts);
|
||||||
@@ -26761,7 +26815,11 @@ var require_balanced_pool2 = __commonJS({
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
_updateBalancedPoolStats() {
|
_updateBalancedPoolStats() {
|
||||||
this[kGreatestCommonDivisor] = this[kClients].map((p) => p[kWeight]).reduce(getGreatestCommonDivisor, 0);
|
let result = 0;
|
||||||
|
for (let i = 0; i < this[kClients].length; i++) {
|
||||||
|
result = getGreatestCommonDivisor(this[kClients][i][kWeight], result);
|
||||||
|
}
|
||||||
|
this[kGreatestCommonDivisor] = result;
|
||||||
}
|
}
|
||||||
removeUpstream(upstream) {
|
removeUpstream(upstream) {
|
||||||
const upstreamOrigin = parseOrigin(upstream).origin;
|
const upstreamOrigin = parseOrigin(upstream).origin;
|
||||||
@@ -30146,7 +30204,7 @@ var require_response2 = __commonJS({
|
|||||||
"node_modules/undici/lib/web/fetch/response.js"(exports2, module2) {
|
"node_modules/undici/lib/web/fetch/response.js"(exports2, module2) {
|
||||||
"use strict";
|
"use strict";
|
||||||
var { Headers, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require_headers2();
|
var { Headers, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require_headers2();
|
||||||
var { extractBody, cloneBody, mixinBody } = require_body2();
|
var { extractBody, cloneBody, mixinBody, hasFinalizationRegistry, streamRegistry, bodyUnusable } = require_body2();
|
||||||
var util = require_util8();
|
var util = require_util8();
|
||||||
var nodeUtil = require("node:util");
|
var nodeUtil = require("node:util");
|
||||||
var { kEnumerableProperty } = util;
|
var { kEnumerableProperty } = util;
|
||||||
@@ -30171,19 +30229,7 @@ var require_response2 = __commonJS({
|
|||||||
var { kConstruct } = require_symbols6();
|
var { kConstruct } = require_symbols6();
|
||||||
var assert = require("node:assert");
|
var assert = require("node:assert");
|
||||||
var { types } = require("node:util");
|
var { types } = require("node:util");
|
||||||
var { isDisturbed, isErrored } = require("node:stream");
|
|
||||||
var textEncoder = new TextEncoder("utf-8");
|
var textEncoder = new TextEncoder("utf-8");
|
||||||
var hasFinalizationRegistry = globalThis.FinalizationRegistry && process.version.indexOf("v18") !== 0;
|
|
||||||
var registry;
|
|
||||||
if (hasFinalizationRegistry) {
|
|
||||||
registry = new FinalizationRegistry((stream) => {
|
|
||||||
if (!stream.locked && !isDisturbed(stream) && !isErrored(stream)) {
|
|
||||||
stream.cancel("Response object has been garbage collected").catch(noop);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function noop() {
|
|
||||||
}
|
|
||||||
var Response = class _Response {
|
var Response = class _Response {
|
||||||
// Creates network error Response.
|
// Creates network error Response.
|
||||||
static error() {
|
static error() {
|
||||||
@@ -30295,7 +30341,7 @@ var require_response2 = __commonJS({
|
|||||||
// Returns a clone of response.
|
// Returns a clone of response.
|
||||||
clone() {
|
clone() {
|
||||||
webidl.brandCheck(this, _Response);
|
webidl.brandCheck(this, _Response);
|
||||||
if (this.bodyUsed || this.body?.locked) {
|
if (bodyUnusable(this)) {
|
||||||
throw webidl.errors.exception({
|
throw webidl.errors.exception({
|
||||||
header: "Response.clone",
|
header: "Response.clone",
|
||||||
message: "Body has already been consumed."
|
message: "Body has already been consumed."
|
||||||
@@ -30354,7 +30400,7 @@ var require_response2 = __commonJS({
|
|||||||
}
|
}
|
||||||
const newResponse = makeResponse({ ...response, body: null });
|
const newResponse = makeResponse({ ...response, body: null });
|
||||||
if (response.body != null) {
|
if (response.body != null) {
|
||||||
newResponse.body = cloneBody(response.body);
|
newResponse.body = cloneBody(newResponse, response.body);
|
||||||
}
|
}
|
||||||
return newResponse;
|
return newResponse;
|
||||||
}
|
}
|
||||||
@@ -30479,7 +30525,7 @@ var require_response2 = __commonJS({
|
|||||||
setHeadersList(response[kHeaders], innerResponse.headersList);
|
setHeadersList(response[kHeaders], innerResponse.headersList);
|
||||||
setHeadersGuard(response[kHeaders], guard);
|
setHeadersGuard(response[kHeaders], guard);
|
||||||
if (hasFinalizationRegistry && innerResponse.body?.stream) {
|
if (hasFinalizationRegistry && innerResponse.body?.stream) {
|
||||||
registry.register(response, innerResponse.body.stream);
|
streamRegistry.register(response, new WeakRef(innerResponse.body.stream));
|
||||||
}
|
}
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
@@ -30594,7 +30640,7 @@ var require_dispatcher_weakref2 = __commonJS({
|
|||||||
var require_request4 = __commonJS({
|
var require_request4 = __commonJS({
|
||||||
"node_modules/undici/lib/web/fetch/request.js"(exports2, module2) {
|
"node_modules/undici/lib/web/fetch/request.js"(exports2, module2) {
|
||||||
"use strict";
|
"use strict";
|
||||||
var { extractBody, mixinBody, cloneBody } = require_body2();
|
var { extractBody, mixinBody, cloneBody, bodyUnusable } = require_body2();
|
||||||
var { Headers, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require_headers2();
|
var { Headers, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require_headers2();
|
||||||
var { FinalizationRegistry: FinalizationRegistry2 } = require_dispatcher_weakref2()();
|
var { FinalizationRegistry: FinalizationRegistry2 } = require_dispatcher_weakref2()();
|
||||||
var util = require_util8();
|
var util = require_util8();
|
||||||
@@ -30915,7 +30961,7 @@ var require_request4 = __commonJS({
|
|||||||
}
|
}
|
||||||
let finalBody = inputOrInitBody;
|
let finalBody = inputOrInitBody;
|
||||||
if (initBody == null && inputBody != null) {
|
if (initBody == null && inputBody != null) {
|
||||||
if (util.isDisturbed(inputBody.stream) || inputBody.stream.locked) {
|
if (bodyUnusable(input)) {
|
||||||
throw new TypeError(
|
throw new TypeError(
|
||||||
"Cannot construct a Request with a Request object that has already been used."
|
"Cannot construct a Request with a Request object that has already been used."
|
||||||
);
|
);
|
||||||
@@ -31050,7 +31096,7 @@ var require_request4 = __commonJS({
|
|||||||
// Returns a clone of request.
|
// Returns a clone of request.
|
||||||
clone() {
|
clone() {
|
||||||
webidl.brandCheck(this, _Request);
|
webidl.brandCheck(this, _Request);
|
||||||
if (this.bodyUsed || this.body?.locked) {
|
if (bodyUnusable(this)) {
|
||||||
throw new TypeError("unusable");
|
throw new TypeError("unusable");
|
||||||
}
|
}
|
||||||
const clonedRequest = cloneRequest(this[kState]);
|
const clonedRequest = cloneRequest(this[kState]);
|
||||||
@@ -31143,7 +31189,7 @@ var require_request4 = __commonJS({
|
|||||||
function cloneRequest(request2) {
|
function cloneRequest(request2) {
|
||||||
const newRequest = makeRequest({ ...request2, body: null });
|
const newRequest = makeRequest({ ...request2, body: null });
|
||||||
if (request2.body != null) {
|
if (request2.body != null) {
|
||||||
newRequest.body = cloneBody(request2.body);
|
newRequest.body = cloneBody(newRequest, request2.body);
|
||||||
}
|
}
|
||||||
return newRequest;
|
return newRequest;
|
||||||
}
|
}
|
||||||
@@ -36957,132 +37003,116 @@ var RequestError = class extends Error {
|
|||||||
|
|
||||||
// node_modules/@octokit/request/dist-bundle/index.js
|
// node_modules/@octokit/request/dist-bundle/index.js
|
||||||
var VERSION2 = "0.0.0-development";
|
var VERSION2 = "0.0.0-development";
|
||||||
|
var defaults_default = {
|
||||||
|
headers: {
|
||||||
|
"user-agent": `octokit-request.js/${VERSION2} ${getUserAgent()}`
|
||||||
|
}
|
||||||
|
};
|
||||||
function isPlainObject2(value) {
|
function isPlainObject2(value) {
|
||||||
if (typeof value !== "object" || value === null)
|
if (typeof value !== "object" || value === null) return false;
|
||||||
return false;
|
if (Object.prototype.toString.call(value) !== "[object Object]") return false;
|
||||||
if (Object.prototype.toString.call(value) !== "[object Object]")
|
|
||||||
return false;
|
|
||||||
const proto = Object.getPrototypeOf(value);
|
const proto = Object.getPrototypeOf(value);
|
||||||
if (proto === null)
|
if (proto === null) return true;
|
||||||
return true;
|
|
||||||
const Ctor = Object.prototype.hasOwnProperty.call(proto, "constructor") && proto.constructor;
|
const Ctor = Object.prototype.hasOwnProperty.call(proto, "constructor") && proto.constructor;
|
||||||
return typeof Ctor === "function" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value);
|
return typeof Ctor === "function" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value);
|
||||||
}
|
}
|
||||||
function getBufferResponse(response) {
|
async function fetchWrapper(requestOptions) {
|
||||||
return response.arrayBuffer();
|
const fetch = requestOptions.request?.fetch || globalThis.fetch;
|
||||||
}
|
|
||||||
function fetchWrapper(requestOptions) {
|
|
||||||
const log = requestOptions.request && requestOptions.request.log ? requestOptions.request.log : console;
|
|
||||||
const parseSuccessResponseBody = requestOptions.request?.parseSuccessResponseBody !== false;
|
|
||||||
if (isPlainObject2(requestOptions.body) || Array.isArray(requestOptions.body)) {
|
|
||||||
requestOptions.body = JSON.stringify(requestOptions.body);
|
|
||||||
}
|
|
||||||
let headers = {};
|
|
||||||
let status;
|
|
||||||
let url;
|
|
||||||
let { fetch } = globalThis;
|
|
||||||
if (requestOptions.request?.fetch) {
|
|
||||||
fetch = requestOptions.request.fetch;
|
|
||||||
}
|
|
||||||
if (!fetch) {
|
if (!fetch) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
"fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing"
|
"fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return fetch(requestOptions.url, {
|
const log = requestOptions.request?.log || console;
|
||||||
method: requestOptions.method,
|
const parseSuccessResponseBody = requestOptions.request?.parseSuccessResponseBody !== false;
|
||||||
body: requestOptions.body,
|
const body = isPlainObject2(requestOptions.body) || Array.isArray(requestOptions.body) ? JSON.stringify(requestOptions.body) : requestOptions.body;
|
||||||
redirect: requestOptions.request?.redirect,
|
const requestHeaders = Object.fromEntries(
|
||||||
// Header values must be `string`
|
Object.entries(requestOptions.headers).map(([name, value]) => [
|
||||||
headers: Object.fromEntries(
|
name,
|
||||||
Object.entries(requestOptions.headers).map(([name, value]) => [
|
String(value)
|
||||||
name,
|
])
|
||||||
String(value)
|
);
|
||||||
])
|
let fetchResponse;
|
||||||
),
|
try {
|
||||||
signal: requestOptions.request?.signal,
|
fetchResponse = await fetch(requestOptions.url, {
|
||||||
// duplex must be set if request.body is ReadableStream or Async Iterables.
|
method: requestOptions.method,
|
||||||
// See https://fetch.spec.whatwg.org/#dom-requestinit-duplex.
|
body,
|
||||||
...requestOptions.body && { duplex: "half" }
|
redirect: requestOptions.request?.redirect,
|
||||||
}).then(async (response) => {
|
headers: requestHeaders,
|
||||||
url = response.url;
|
signal: requestOptions.request?.signal,
|
||||||
status = response.status;
|
// duplex must be set if request.body is ReadableStream or Async Iterables.
|
||||||
for (const keyAndValue of response.headers) {
|
// See https://fetch.spec.whatwg.org/#dom-requestinit-duplex.
|
||||||
headers[keyAndValue[0]] = keyAndValue[1];
|
...requestOptions.body && { duplex: "half" }
|
||||||
}
|
});
|
||||||
if ("deprecation" in headers) {
|
} catch (error) {
|
||||||
const matches = headers.link && headers.link.match(/<([^>]+)>; rel="deprecation"/);
|
let message = "Unknown Error";
|
||||||
const deprecationLink = matches && matches.pop();
|
if (error instanceof Error) {
|
||||||
log.warn(
|
if (error.name === "AbortError") {
|
||||||
`[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}`
|
error.status = 500;
|
||||||
);
|
throw error;
|
||||||
}
|
|
||||||
if (status === 204 || status === 205) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (requestOptions.method === "HEAD") {
|
|
||||||
if (status < 400) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
throw new RequestError(response.statusText, status, {
|
message = error.message;
|
||||||
response: {
|
if (error.name === "TypeError" && "cause" in error) {
|
||||||
url,
|
if (error.cause instanceof Error) {
|
||||||
status,
|
message = error.cause.message;
|
||||||
headers,
|
} else if (typeof error.cause === "string") {
|
||||||
data: void 0
|
message = error.cause;
|
||||||
},
|
}
|
||||||
request: requestOptions
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (status === 304) {
|
|
||||||
throw new RequestError("Not modified", status, {
|
|
||||||
response: {
|
|
||||||
url,
|
|
||||||
status,
|
|
||||||
headers,
|
|
||||||
data: await getResponseData(response)
|
|
||||||
},
|
|
||||||
request: requestOptions
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (status >= 400) {
|
|
||||||
const data = await getResponseData(response);
|
|
||||||
const error = new RequestError(toErrorMessage(data), status, {
|
|
||||||
response: {
|
|
||||||
url,
|
|
||||||
status,
|
|
||||||
headers,
|
|
||||||
data
|
|
||||||
},
|
|
||||||
request: requestOptions
|
|
||||||
});
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
return parseSuccessResponseBody ? await getResponseData(response) : response.body;
|
|
||||||
}).then((data) => {
|
|
||||||
return {
|
|
||||||
status,
|
|
||||||
url,
|
|
||||||
headers,
|
|
||||||
data
|
|
||||||
};
|
|
||||||
}).catch((error) => {
|
|
||||||
if (error instanceof RequestError)
|
|
||||||
throw error;
|
|
||||||
else if (error.name === "AbortError")
|
|
||||||
throw error;
|
|
||||||
let message = error.message;
|
|
||||||
if (error.name === "TypeError" && "cause" in error) {
|
|
||||||
if (error.cause instanceof Error) {
|
|
||||||
message = error.cause.message;
|
|
||||||
} else if (typeof error.cause === "string") {
|
|
||||||
message = error.cause;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw new RequestError(message, 500, {
|
const requestError = new RequestError(message, 500, {
|
||||||
request: requestOptions
|
request: requestOptions
|
||||||
});
|
});
|
||||||
});
|
requestError.cause = error;
|
||||||
|
throw requestError;
|
||||||
|
}
|
||||||
|
const status = fetchResponse.status;
|
||||||
|
const url = fetchResponse.url;
|
||||||
|
const responseHeaders = {};
|
||||||
|
for (const [key, value] of fetchResponse.headers) {
|
||||||
|
responseHeaders[key] = value;
|
||||||
|
}
|
||||||
|
const octokitResponse = {
|
||||||
|
url,
|
||||||
|
status,
|
||||||
|
headers: responseHeaders,
|
||||||
|
data: ""
|
||||||
|
};
|
||||||
|
if ("deprecation" in responseHeaders) {
|
||||||
|
const matches = responseHeaders.link && responseHeaders.link.match(/<([^>]+)>; rel="deprecation"/);
|
||||||
|
const deprecationLink = matches && matches.pop();
|
||||||
|
log.warn(
|
||||||
|
`[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${responseHeaders.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (status === 204 || status === 205) {
|
||||||
|
return octokitResponse;
|
||||||
|
}
|
||||||
|
if (requestOptions.method === "HEAD") {
|
||||||
|
if (status < 400) {
|
||||||
|
return octokitResponse;
|
||||||
|
}
|
||||||
|
throw new RequestError(fetchResponse.statusText, status, {
|
||||||
|
response: octokitResponse,
|
||||||
|
request: requestOptions
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (status === 304) {
|
||||||
|
octokitResponse.data = await getResponseData(fetchResponse);
|
||||||
|
throw new RequestError("Not modified", status, {
|
||||||
|
response: octokitResponse,
|
||||||
|
request: requestOptions
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (status >= 400) {
|
||||||
|
octokitResponse.data = await getResponseData(fetchResponse);
|
||||||
|
throw new RequestError(toErrorMessage(octokitResponse.data), status, {
|
||||||
|
response: octokitResponse,
|
||||||
|
request: requestOptions
|
||||||
|
});
|
||||||
|
}
|
||||||
|
octokitResponse.data = parseSuccessResponseBody ? await getResponseData(fetchResponse) : fetchResponse.body;
|
||||||
|
return octokitResponse;
|
||||||
}
|
}
|
||||||
async function getResponseData(response) {
|
async function getResponseData(response) {
|
||||||
const contentType = response.headers.get("content-type");
|
const contentType = response.headers.get("content-type");
|
||||||
@@ -37092,22 +37122,18 @@ async function getResponseData(response) {
|
|||||||
if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) {
|
if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) {
|
||||||
return response.text();
|
return response.text();
|
||||||
}
|
}
|
||||||
return getBufferResponse(response);
|
return response.arrayBuffer();
|
||||||
}
|
}
|
||||||
function toErrorMessage(data) {
|
function toErrorMessage(data) {
|
||||||
if (typeof data === "string")
|
if (typeof data === "string") {
|
||||||
return data;
|
return data;
|
||||||
let suffix;
|
}
|
||||||
if ("documentation_url" in data) {
|
if (data instanceof ArrayBuffer) {
|
||||||
suffix = ` - ${data.documentation_url}`;
|
return "Unknown error";
|
||||||
} else {
|
|
||||||
suffix = "";
|
|
||||||
}
|
}
|
||||||
if ("message" in data) {
|
if ("message" in data) {
|
||||||
if (Array.isArray(data.errors)) {
|
const suffix = "documentation_url" in data ? ` - ${data.documentation_url}` : "";
|
||||||
return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}${suffix}`;
|
return Array.isArray(data.errors) ? `${data.message}: ${data.errors.map((v) => JSON.stringify(v)).join(", ")}${suffix}` : `${data.message}${suffix}`;
|
||||||
}
|
|
||||||
return `${data.message}${suffix}`;
|
|
||||||
}
|
}
|
||||||
return `Unknown error: ${JSON.stringify(data)}`;
|
return `Unknown error: ${JSON.stringify(data)}`;
|
||||||
}
|
}
|
||||||
@@ -37134,11 +37160,7 @@ function withDefaults2(oldEndpoint, newDefaults) {
|
|||||||
defaults: withDefaults2.bind(null, endpoint2)
|
defaults: withDefaults2.bind(null, endpoint2)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
var request = withDefaults2(endpoint, {
|
var request = withDefaults2(endpoint, defaults_default);
|
||||||
headers: {
|
|
||||||
"user-agent": `octokit-request.js/${VERSION2} ${getUserAgent()}`
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// node_modules/@octokit/oauth-methods/dist-bundle/index.js
|
// node_modules/@octokit/oauth-methods/dist-bundle/index.js
|
||||||
function requestToOAuthBaseUrl(request2) {
|
function requestToOAuthBaseUrl(request2) {
|
||||||
@@ -39484,7 +39506,7 @@ async function hook4(state, request2, route, parameters) {
|
|||||||
state,
|
state,
|
||||||
// @ts-expect-error TBD
|
// @ts-expect-error TBD
|
||||||
{},
|
{},
|
||||||
request2
|
request2.defaults({ baseUrl: endpoint2.baseUrl })
|
||||||
);
|
);
|
||||||
endpoint2.headers.authorization = `token ${token}`;
|
endpoint2.headers.authorization = `token ${token}`;
|
||||||
return sendRequestWithRetries(
|
return sendRequestWithRetries(
|
||||||
@@ -39517,7 +39539,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.1.0";
|
var VERSION6 = "7.1.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");
|
||||||
|
|||||||
332
dist/post.cjs
vendored
332
dist/post.cjs
vendored
@@ -2238,6 +2238,7 @@ var require_decodeText = __commonJS({
|
|||||||
return decoders.utf8;
|
return decoders.utf8;
|
||||||
case "latin1":
|
case "latin1":
|
||||||
case "ascii":
|
case "ascii":
|
||||||
|
// TODO: Make these a separate, strict decoder?
|
||||||
case "us-ascii":
|
case "us-ascii":
|
||||||
case "iso-8859-1":
|
case "iso-8859-1":
|
||||||
case "iso8859-1":
|
case "iso8859-1":
|
||||||
@@ -2937,6 +2938,7 @@ var require_basename = __commonJS({
|
|||||||
for (var i = path.length - 1; i >= 0; --i) {
|
for (var i = path.length - 1; i >= 0; --i) {
|
||||||
switch (path.charCodeAt(i)) {
|
switch (path.charCodeAt(i)) {
|
||||||
case 47:
|
case 47:
|
||||||
|
// '/'
|
||||||
case 92:
|
case 92:
|
||||||
path = path.slice(i + 1);
|
path = path.slice(i + 1);
|
||||||
return path === ".." || path === "." ? "" : path;
|
return path === ".." || path === "." ? "" : path;
|
||||||
@@ -4171,7 +4173,21 @@ var require_util2 = __commonJS({
|
|||||||
return referrerOrigin;
|
return referrerOrigin;
|
||||||
}
|
}
|
||||||
case "strict-origin":
|
case "strict-origin":
|
||||||
|
// eslint-disable-line
|
||||||
|
/**
|
||||||
|
* 1. If referrerURL is a potentially trustworthy URL and
|
||||||
|
* request’s current URL is not a potentially trustworthy URL,
|
||||||
|
* then return no referrer.
|
||||||
|
* 2. Return referrerOrigin
|
||||||
|
*/
|
||||||
case "no-referrer-when-downgrade":
|
case "no-referrer-when-downgrade":
|
||||||
|
// eslint-disable-line
|
||||||
|
/**
|
||||||
|
* 1. If referrerURL is a potentially trustworthy URL and
|
||||||
|
* request’s current URL is not a potentially trustworthy URL,
|
||||||
|
* then return no referrer.
|
||||||
|
* 2. Return referrerOrigin
|
||||||
|
*/
|
||||||
default:
|
default:
|
||||||
return isNonPotentiallyTrustWorthy ? "no-referrer" : referrerOrigin;
|
return isNonPotentiallyTrustWorthy ? "no-referrer" : referrerOrigin;
|
||||||
}
|
}
|
||||||
@@ -22556,7 +22572,21 @@ var require_util9 = __commonJS({
|
|||||||
return referrerOrigin;
|
return referrerOrigin;
|
||||||
}
|
}
|
||||||
case "strict-origin":
|
case "strict-origin":
|
||||||
|
// eslint-disable-line
|
||||||
|
/**
|
||||||
|
* 1. If referrerURL is a potentially trustworthy URL and
|
||||||
|
* request’s current URL is not a potentially trustworthy URL,
|
||||||
|
* then return no referrer.
|
||||||
|
* 2. Return referrerOrigin
|
||||||
|
*/
|
||||||
case "no-referrer-when-downgrade":
|
case "no-referrer-when-downgrade":
|
||||||
|
// eslint-disable-line
|
||||||
|
/**
|
||||||
|
* 1. If referrerURL is a potentially trustworthy URL and
|
||||||
|
* request’s current URL is not a potentially trustworthy URL,
|
||||||
|
* then return no referrer.
|
||||||
|
* 2. Return referrerOrigin
|
||||||
|
*/
|
||||||
default:
|
default:
|
||||||
return isNonPotentiallyTrustWorthy ? "no-referrer" : referrerOrigin;
|
return isNonPotentiallyTrustWorthy ? "no-referrer" : referrerOrigin;
|
||||||
}
|
}
|
||||||
@@ -23658,11 +23688,23 @@ var require_body2 = __commonJS({
|
|||||||
var { webidl } = require_webidl2();
|
var { webidl } = require_webidl2();
|
||||||
var { Blob: Blob2 } = require("node:buffer");
|
var { Blob: Blob2 } = require("node:buffer");
|
||||||
var assert = require("node:assert");
|
var assert = require("node:assert");
|
||||||
var { isErrored } = require_util8();
|
var { isErrored, isDisturbed } = require("node:stream");
|
||||||
var { isArrayBuffer } = require("node:util/types");
|
var { isArrayBuffer } = require("node:util/types");
|
||||||
var { serializeAMimeType } = require_data_url();
|
var { serializeAMimeType } = require_data_url();
|
||||||
var { multipartFormDataParser } = require_formdata_parser();
|
var { multipartFormDataParser } = require_formdata_parser();
|
||||||
var textEncoder = new TextEncoder();
|
var textEncoder = new TextEncoder();
|
||||||
|
function noop() {
|
||||||
|
}
|
||||||
|
var hasFinalizationRegistry = globalThis.FinalizationRegistry && process.version.indexOf("v18") !== 0;
|
||||||
|
var streamRegistry;
|
||||||
|
if (hasFinalizationRegistry) {
|
||||||
|
streamRegistry = new FinalizationRegistry((weakRef) => {
|
||||||
|
const stream = weakRef.deref();
|
||||||
|
if (stream && !stream.locked && !isDisturbed(stream) && !isErrored(stream)) {
|
||||||
|
stream.cancel("Response object has been garbage collected").catch(noop);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
function extractBody(object, keepalive = false) {
|
function extractBody(object, keepalive = false) {
|
||||||
let stream = null;
|
let stream = null;
|
||||||
if (object instanceof ReadableStream) {
|
if (object instanceof ReadableStream) {
|
||||||
@@ -23805,8 +23847,11 @@ Content-Type: ${value.type || "application/octet-stream"}\r
|
|||||||
}
|
}
|
||||||
return extractBody(object, keepalive);
|
return extractBody(object, keepalive);
|
||||||
}
|
}
|
||||||
function cloneBody(body) {
|
function cloneBody(instance, body) {
|
||||||
const [out1, out2] = body.stream.tee();
|
const [out1, out2] = body.stream.tee();
|
||||||
|
if (hasFinalizationRegistry) {
|
||||||
|
streamRegistry.register(instance, new WeakRef(out1));
|
||||||
|
}
|
||||||
body.stream = out1;
|
body.stream = out1;
|
||||||
return {
|
return {
|
||||||
stream: out2,
|
stream: out2,
|
||||||
@@ -23885,7 +23930,7 @@ Content-Type: ${value.type || "application/octet-stream"}\r
|
|||||||
}
|
}
|
||||||
async function consumeBody(object, convertBytesToJSValue, instance) {
|
async function consumeBody(object, convertBytesToJSValue, instance) {
|
||||||
webidl.brandCheck(object, instance);
|
webidl.brandCheck(object, instance);
|
||||||
if (bodyUnusable(object[kState].body)) {
|
if (bodyUnusable(object)) {
|
||||||
throw new TypeError("Body is unusable: Body has already been read");
|
throw new TypeError("Body is unusable: Body has already been read");
|
||||||
}
|
}
|
||||||
throwIfAborted(object[kState]);
|
throwIfAborted(object[kState]);
|
||||||
@@ -23905,7 +23950,8 @@ Content-Type: ${value.type || "application/octet-stream"}\r
|
|||||||
await fullyReadBody(object[kState].body, successSteps, errorSteps);
|
await fullyReadBody(object[kState].body, successSteps, errorSteps);
|
||||||
return promise.promise;
|
return promise.promise;
|
||||||
}
|
}
|
||||||
function bodyUnusable(body) {
|
function bodyUnusable(object) {
|
||||||
|
const body = object[kState].body;
|
||||||
return body != null && (body.stream.locked || util.isDisturbed(body.stream));
|
return body != null && (body.stream.locked || util.isDisturbed(body.stream));
|
||||||
}
|
}
|
||||||
function parseJSONFromBytes(bytes) {
|
function parseJSONFromBytes(bytes) {
|
||||||
@@ -23923,7 +23969,10 @@ Content-Type: ${value.type || "application/octet-stream"}\r
|
|||||||
extractBody,
|
extractBody,
|
||||||
safelyExtractBody,
|
safelyExtractBody,
|
||||||
cloneBody,
|
cloneBody,
|
||||||
mixinBody
|
mixinBody,
|
||||||
|
streamRegistry,
|
||||||
|
hasFinalizationRegistry,
|
||||||
|
bodyUnusable
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -26477,8 +26526,13 @@ var require_balanced_pool2 = __commonJS({
|
|||||||
var kMaxWeightPerServer = Symbol("kMaxWeightPerServer");
|
var kMaxWeightPerServer = Symbol("kMaxWeightPerServer");
|
||||||
var kErrorPenalty = Symbol("kErrorPenalty");
|
var kErrorPenalty = Symbol("kErrorPenalty");
|
||||||
function getGreatestCommonDivisor(a, b) {
|
function getGreatestCommonDivisor(a, b) {
|
||||||
if (b === 0) return a;
|
if (a === 0) return b;
|
||||||
return getGreatestCommonDivisor(b, a % b);
|
while (b !== 0) {
|
||||||
|
const t = b;
|
||||||
|
b = a % b;
|
||||||
|
a = t;
|
||||||
|
}
|
||||||
|
return a;
|
||||||
}
|
}
|
||||||
function defaultFactory(origin, opts) {
|
function defaultFactory(origin, opts) {
|
||||||
return new Pool(origin, opts);
|
return new Pool(origin, opts);
|
||||||
@@ -26532,7 +26586,11 @@ var require_balanced_pool2 = __commonJS({
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
_updateBalancedPoolStats() {
|
_updateBalancedPoolStats() {
|
||||||
this[kGreatestCommonDivisor] = this[kClients].map((p) => p[kWeight]).reduce(getGreatestCommonDivisor, 0);
|
let result = 0;
|
||||||
|
for (let i = 0; i < this[kClients].length; i++) {
|
||||||
|
result = getGreatestCommonDivisor(this[kClients][i][kWeight], result);
|
||||||
|
}
|
||||||
|
this[kGreatestCommonDivisor] = result;
|
||||||
}
|
}
|
||||||
removeUpstream(upstream) {
|
removeUpstream(upstream) {
|
||||||
const upstreamOrigin = parseOrigin(upstream).origin;
|
const upstreamOrigin = parseOrigin(upstream).origin;
|
||||||
@@ -29917,7 +29975,7 @@ var require_response2 = __commonJS({
|
|||||||
"node_modules/undici/lib/web/fetch/response.js"(exports2, module2) {
|
"node_modules/undici/lib/web/fetch/response.js"(exports2, module2) {
|
||||||
"use strict";
|
"use strict";
|
||||||
var { Headers, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require_headers2();
|
var { Headers, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require_headers2();
|
||||||
var { extractBody, cloneBody, mixinBody } = require_body2();
|
var { extractBody, cloneBody, mixinBody, hasFinalizationRegistry, streamRegistry, bodyUnusable } = require_body2();
|
||||||
var util = require_util8();
|
var util = require_util8();
|
||||||
var nodeUtil = require("node:util");
|
var nodeUtil = require("node:util");
|
||||||
var { kEnumerableProperty } = util;
|
var { kEnumerableProperty } = util;
|
||||||
@@ -29942,19 +30000,7 @@ var require_response2 = __commonJS({
|
|||||||
var { kConstruct } = require_symbols6();
|
var { kConstruct } = require_symbols6();
|
||||||
var assert = require("node:assert");
|
var assert = require("node:assert");
|
||||||
var { types } = require("node:util");
|
var { types } = require("node:util");
|
||||||
var { isDisturbed, isErrored } = require("node:stream");
|
|
||||||
var textEncoder = new TextEncoder("utf-8");
|
var textEncoder = new TextEncoder("utf-8");
|
||||||
var hasFinalizationRegistry = globalThis.FinalizationRegistry && process.version.indexOf("v18") !== 0;
|
|
||||||
var registry;
|
|
||||||
if (hasFinalizationRegistry) {
|
|
||||||
registry = new FinalizationRegistry((stream) => {
|
|
||||||
if (!stream.locked && !isDisturbed(stream) && !isErrored(stream)) {
|
|
||||||
stream.cancel("Response object has been garbage collected").catch(noop);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function noop() {
|
|
||||||
}
|
|
||||||
var Response = class _Response {
|
var Response = class _Response {
|
||||||
// Creates network error Response.
|
// Creates network error Response.
|
||||||
static error() {
|
static error() {
|
||||||
@@ -30066,7 +30112,7 @@ var require_response2 = __commonJS({
|
|||||||
// Returns a clone of response.
|
// Returns a clone of response.
|
||||||
clone() {
|
clone() {
|
||||||
webidl.brandCheck(this, _Response);
|
webidl.brandCheck(this, _Response);
|
||||||
if (this.bodyUsed || this.body?.locked) {
|
if (bodyUnusable(this)) {
|
||||||
throw webidl.errors.exception({
|
throw webidl.errors.exception({
|
||||||
header: "Response.clone",
|
header: "Response.clone",
|
||||||
message: "Body has already been consumed."
|
message: "Body has already been consumed."
|
||||||
@@ -30125,7 +30171,7 @@ var require_response2 = __commonJS({
|
|||||||
}
|
}
|
||||||
const newResponse = makeResponse({ ...response, body: null });
|
const newResponse = makeResponse({ ...response, body: null });
|
||||||
if (response.body != null) {
|
if (response.body != null) {
|
||||||
newResponse.body = cloneBody(response.body);
|
newResponse.body = cloneBody(newResponse, response.body);
|
||||||
}
|
}
|
||||||
return newResponse;
|
return newResponse;
|
||||||
}
|
}
|
||||||
@@ -30250,7 +30296,7 @@ var require_response2 = __commonJS({
|
|||||||
setHeadersList(response[kHeaders], innerResponse.headersList);
|
setHeadersList(response[kHeaders], innerResponse.headersList);
|
||||||
setHeadersGuard(response[kHeaders], guard);
|
setHeadersGuard(response[kHeaders], guard);
|
||||||
if (hasFinalizationRegistry && innerResponse.body?.stream) {
|
if (hasFinalizationRegistry && innerResponse.body?.stream) {
|
||||||
registry.register(response, innerResponse.body.stream);
|
streamRegistry.register(response, new WeakRef(innerResponse.body.stream));
|
||||||
}
|
}
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
@@ -30365,7 +30411,7 @@ var require_dispatcher_weakref2 = __commonJS({
|
|||||||
var require_request4 = __commonJS({
|
var require_request4 = __commonJS({
|
||||||
"node_modules/undici/lib/web/fetch/request.js"(exports2, module2) {
|
"node_modules/undici/lib/web/fetch/request.js"(exports2, module2) {
|
||||||
"use strict";
|
"use strict";
|
||||||
var { extractBody, mixinBody, cloneBody } = require_body2();
|
var { extractBody, mixinBody, cloneBody, bodyUnusable } = require_body2();
|
||||||
var { Headers, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require_headers2();
|
var { Headers, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require_headers2();
|
||||||
var { FinalizationRegistry: FinalizationRegistry2 } = require_dispatcher_weakref2()();
|
var { FinalizationRegistry: FinalizationRegistry2 } = require_dispatcher_weakref2()();
|
||||||
var util = require_util8();
|
var util = require_util8();
|
||||||
@@ -30686,7 +30732,7 @@ var require_request4 = __commonJS({
|
|||||||
}
|
}
|
||||||
let finalBody = inputOrInitBody;
|
let finalBody = inputOrInitBody;
|
||||||
if (initBody == null && inputBody != null) {
|
if (initBody == null && inputBody != null) {
|
||||||
if (util.isDisturbed(inputBody.stream) || inputBody.stream.locked) {
|
if (bodyUnusable(input)) {
|
||||||
throw new TypeError(
|
throw new TypeError(
|
||||||
"Cannot construct a Request with a Request object that has already been used."
|
"Cannot construct a Request with a Request object that has already been used."
|
||||||
);
|
);
|
||||||
@@ -30821,7 +30867,7 @@ var require_request4 = __commonJS({
|
|||||||
// Returns a clone of request.
|
// Returns a clone of request.
|
||||||
clone() {
|
clone() {
|
||||||
webidl.brandCheck(this, _Request);
|
webidl.brandCheck(this, _Request);
|
||||||
if (this.bodyUsed || this.body?.locked) {
|
if (bodyUnusable(this)) {
|
||||||
throw new TypeError("unusable");
|
throw new TypeError("unusable");
|
||||||
}
|
}
|
||||||
const clonedRequest = cloneRequest(this[kState]);
|
const clonedRequest = cloneRequest(this[kState]);
|
||||||
@@ -30914,7 +30960,7 @@ var require_request4 = __commonJS({
|
|||||||
function cloneRequest(request2) {
|
function cloneRequest(request2) {
|
||||||
const newRequest = makeRequest({ ...request2, body: null });
|
const newRequest = makeRequest({ ...request2, body: null });
|
||||||
if (request2.body != null) {
|
if (request2.body != null) {
|
||||||
newRequest.body = cloneBody(request2.body);
|
newRequest.body = cloneBody(newRequest, request2.body);
|
||||||
}
|
}
|
||||||
return newRequest;
|
return newRequest;
|
||||||
}
|
}
|
||||||
@@ -36769,132 +36815,116 @@ var RequestError = class extends Error {
|
|||||||
|
|
||||||
// node_modules/@octokit/request/dist-bundle/index.js
|
// node_modules/@octokit/request/dist-bundle/index.js
|
||||||
var VERSION2 = "0.0.0-development";
|
var VERSION2 = "0.0.0-development";
|
||||||
|
var defaults_default = {
|
||||||
|
headers: {
|
||||||
|
"user-agent": `octokit-request.js/${VERSION2} ${getUserAgent()}`
|
||||||
|
}
|
||||||
|
};
|
||||||
function isPlainObject2(value) {
|
function isPlainObject2(value) {
|
||||||
if (typeof value !== "object" || value === null)
|
if (typeof value !== "object" || value === null) return false;
|
||||||
return false;
|
if (Object.prototype.toString.call(value) !== "[object Object]") return false;
|
||||||
if (Object.prototype.toString.call(value) !== "[object Object]")
|
|
||||||
return false;
|
|
||||||
const proto = Object.getPrototypeOf(value);
|
const proto = Object.getPrototypeOf(value);
|
||||||
if (proto === null)
|
if (proto === null) return true;
|
||||||
return true;
|
|
||||||
const Ctor = Object.prototype.hasOwnProperty.call(proto, "constructor") && proto.constructor;
|
const Ctor = Object.prototype.hasOwnProperty.call(proto, "constructor") && proto.constructor;
|
||||||
return typeof Ctor === "function" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value);
|
return typeof Ctor === "function" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value);
|
||||||
}
|
}
|
||||||
function getBufferResponse(response) {
|
async function fetchWrapper(requestOptions) {
|
||||||
return response.arrayBuffer();
|
const fetch = requestOptions.request?.fetch || globalThis.fetch;
|
||||||
}
|
|
||||||
function fetchWrapper(requestOptions) {
|
|
||||||
const log = requestOptions.request && requestOptions.request.log ? requestOptions.request.log : console;
|
|
||||||
const parseSuccessResponseBody = requestOptions.request?.parseSuccessResponseBody !== false;
|
|
||||||
if (isPlainObject2(requestOptions.body) || Array.isArray(requestOptions.body)) {
|
|
||||||
requestOptions.body = JSON.stringify(requestOptions.body);
|
|
||||||
}
|
|
||||||
let headers = {};
|
|
||||||
let status;
|
|
||||||
let url;
|
|
||||||
let { fetch } = globalThis;
|
|
||||||
if (requestOptions.request?.fetch) {
|
|
||||||
fetch = requestOptions.request.fetch;
|
|
||||||
}
|
|
||||||
if (!fetch) {
|
if (!fetch) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
"fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing"
|
"fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return fetch(requestOptions.url, {
|
const log = requestOptions.request?.log || console;
|
||||||
method: requestOptions.method,
|
const parseSuccessResponseBody = requestOptions.request?.parseSuccessResponseBody !== false;
|
||||||
body: requestOptions.body,
|
const body = isPlainObject2(requestOptions.body) || Array.isArray(requestOptions.body) ? JSON.stringify(requestOptions.body) : requestOptions.body;
|
||||||
redirect: requestOptions.request?.redirect,
|
const requestHeaders = Object.fromEntries(
|
||||||
// Header values must be `string`
|
Object.entries(requestOptions.headers).map(([name, value]) => [
|
||||||
headers: Object.fromEntries(
|
name,
|
||||||
Object.entries(requestOptions.headers).map(([name, value]) => [
|
String(value)
|
||||||
name,
|
])
|
||||||
String(value)
|
);
|
||||||
])
|
let fetchResponse;
|
||||||
),
|
try {
|
||||||
signal: requestOptions.request?.signal,
|
fetchResponse = await fetch(requestOptions.url, {
|
||||||
// duplex must be set if request.body is ReadableStream or Async Iterables.
|
method: requestOptions.method,
|
||||||
// See https://fetch.spec.whatwg.org/#dom-requestinit-duplex.
|
body,
|
||||||
...requestOptions.body && { duplex: "half" }
|
redirect: requestOptions.request?.redirect,
|
||||||
}).then(async (response) => {
|
headers: requestHeaders,
|
||||||
url = response.url;
|
signal: requestOptions.request?.signal,
|
||||||
status = response.status;
|
// duplex must be set if request.body is ReadableStream or Async Iterables.
|
||||||
for (const keyAndValue of response.headers) {
|
// See https://fetch.spec.whatwg.org/#dom-requestinit-duplex.
|
||||||
headers[keyAndValue[0]] = keyAndValue[1];
|
...requestOptions.body && { duplex: "half" }
|
||||||
}
|
});
|
||||||
if ("deprecation" in headers) {
|
} catch (error) {
|
||||||
const matches = headers.link && headers.link.match(/<([^>]+)>; rel="deprecation"/);
|
let message = "Unknown Error";
|
||||||
const deprecationLink = matches && matches.pop();
|
if (error instanceof Error) {
|
||||||
log.warn(
|
if (error.name === "AbortError") {
|
||||||
`[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}`
|
error.status = 500;
|
||||||
);
|
throw error;
|
||||||
}
|
|
||||||
if (status === 204 || status === 205) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (requestOptions.method === "HEAD") {
|
|
||||||
if (status < 400) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
throw new RequestError(response.statusText, status, {
|
message = error.message;
|
||||||
response: {
|
if (error.name === "TypeError" && "cause" in error) {
|
||||||
url,
|
if (error.cause instanceof Error) {
|
||||||
status,
|
message = error.cause.message;
|
||||||
headers,
|
} else if (typeof error.cause === "string") {
|
||||||
data: void 0
|
message = error.cause;
|
||||||
},
|
}
|
||||||
request: requestOptions
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (status === 304) {
|
|
||||||
throw new RequestError("Not modified", status, {
|
|
||||||
response: {
|
|
||||||
url,
|
|
||||||
status,
|
|
||||||
headers,
|
|
||||||
data: await getResponseData(response)
|
|
||||||
},
|
|
||||||
request: requestOptions
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (status >= 400) {
|
|
||||||
const data = await getResponseData(response);
|
|
||||||
const error = new RequestError(toErrorMessage(data), status, {
|
|
||||||
response: {
|
|
||||||
url,
|
|
||||||
status,
|
|
||||||
headers,
|
|
||||||
data
|
|
||||||
},
|
|
||||||
request: requestOptions
|
|
||||||
});
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
return parseSuccessResponseBody ? await getResponseData(response) : response.body;
|
|
||||||
}).then((data) => {
|
|
||||||
return {
|
|
||||||
status,
|
|
||||||
url,
|
|
||||||
headers,
|
|
||||||
data
|
|
||||||
};
|
|
||||||
}).catch((error) => {
|
|
||||||
if (error instanceof RequestError)
|
|
||||||
throw error;
|
|
||||||
else if (error.name === "AbortError")
|
|
||||||
throw error;
|
|
||||||
let message = error.message;
|
|
||||||
if (error.name === "TypeError" && "cause" in error) {
|
|
||||||
if (error.cause instanceof Error) {
|
|
||||||
message = error.cause.message;
|
|
||||||
} else if (typeof error.cause === "string") {
|
|
||||||
message = error.cause;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw new RequestError(message, 500, {
|
const requestError = new RequestError(message, 500, {
|
||||||
request: requestOptions
|
request: requestOptions
|
||||||
});
|
});
|
||||||
});
|
requestError.cause = error;
|
||||||
|
throw requestError;
|
||||||
|
}
|
||||||
|
const status = fetchResponse.status;
|
||||||
|
const url = fetchResponse.url;
|
||||||
|
const responseHeaders = {};
|
||||||
|
for (const [key, value] of fetchResponse.headers) {
|
||||||
|
responseHeaders[key] = value;
|
||||||
|
}
|
||||||
|
const octokitResponse = {
|
||||||
|
url,
|
||||||
|
status,
|
||||||
|
headers: responseHeaders,
|
||||||
|
data: ""
|
||||||
|
};
|
||||||
|
if ("deprecation" in responseHeaders) {
|
||||||
|
const matches = responseHeaders.link && responseHeaders.link.match(/<([^>]+)>; rel="deprecation"/);
|
||||||
|
const deprecationLink = matches && matches.pop();
|
||||||
|
log.warn(
|
||||||
|
`[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${responseHeaders.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (status === 204 || status === 205) {
|
||||||
|
return octokitResponse;
|
||||||
|
}
|
||||||
|
if (requestOptions.method === "HEAD") {
|
||||||
|
if (status < 400) {
|
||||||
|
return octokitResponse;
|
||||||
|
}
|
||||||
|
throw new RequestError(fetchResponse.statusText, status, {
|
||||||
|
response: octokitResponse,
|
||||||
|
request: requestOptions
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (status === 304) {
|
||||||
|
octokitResponse.data = await getResponseData(fetchResponse);
|
||||||
|
throw new RequestError("Not modified", status, {
|
||||||
|
response: octokitResponse,
|
||||||
|
request: requestOptions
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (status >= 400) {
|
||||||
|
octokitResponse.data = await getResponseData(fetchResponse);
|
||||||
|
throw new RequestError(toErrorMessage(octokitResponse.data), status, {
|
||||||
|
response: octokitResponse,
|
||||||
|
request: requestOptions
|
||||||
|
});
|
||||||
|
}
|
||||||
|
octokitResponse.data = parseSuccessResponseBody ? await getResponseData(fetchResponse) : fetchResponse.body;
|
||||||
|
return octokitResponse;
|
||||||
}
|
}
|
||||||
async function getResponseData(response) {
|
async function getResponseData(response) {
|
||||||
const contentType = response.headers.get("content-type");
|
const contentType = response.headers.get("content-type");
|
||||||
@@ -36904,22 +36934,18 @@ async function getResponseData(response) {
|
|||||||
if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) {
|
if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) {
|
||||||
return response.text();
|
return response.text();
|
||||||
}
|
}
|
||||||
return getBufferResponse(response);
|
return response.arrayBuffer();
|
||||||
}
|
}
|
||||||
function toErrorMessage(data) {
|
function toErrorMessage(data) {
|
||||||
if (typeof data === "string")
|
if (typeof data === "string") {
|
||||||
return data;
|
return data;
|
||||||
let suffix;
|
}
|
||||||
if ("documentation_url" in data) {
|
if (data instanceof ArrayBuffer) {
|
||||||
suffix = ` - ${data.documentation_url}`;
|
return "Unknown error";
|
||||||
} else {
|
|
||||||
suffix = "";
|
|
||||||
}
|
}
|
||||||
if ("message" in data) {
|
if ("message" in data) {
|
||||||
if (Array.isArray(data.errors)) {
|
const suffix = "documentation_url" in data ? ` - ${data.documentation_url}` : "";
|
||||||
return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}${suffix}`;
|
return Array.isArray(data.errors) ? `${data.message}: ${data.errors.map((v) => JSON.stringify(v)).join(", ")}${suffix}` : `${data.message}${suffix}`;
|
||||||
}
|
|
||||||
return `${data.message}${suffix}`;
|
|
||||||
}
|
}
|
||||||
return `Unknown error: ${JSON.stringify(data)}`;
|
return `Unknown error: ${JSON.stringify(data)}`;
|
||||||
}
|
}
|
||||||
@@ -36946,11 +36972,7 @@ function withDefaults2(oldEndpoint, newDefaults) {
|
|||||||
defaults: withDefaults2.bind(null, endpoint2)
|
defaults: withDefaults2.bind(null, endpoint2)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
var request = withDefaults2(endpoint, {
|
var request = withDefaults2(endpoint, defaults_default);
|
||||||
headers: {
|
|
||||||
"user-agent": `octokit-request.js/${VERSION2} ${getUserAgent()}`
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// lib/request.js
|
// lib/request.js
|
||||||
var import_undici = __toESM(require_undici2(), 1);
|
var import_undici = __toESM(require_undici2(), 1);
|
||||||
|
|||||||
678
package-lock.json
generated
678
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
20
package.json
20
package.json
@@ -2,10 +2,10 @@
|
|||||||
"name": "create-github-app-token",
|
"name": "create-github-app-token",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "1.10.3",
|
"version": "1.10.4",
|
||||||
"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",
|
"build": "esbuild main.js post.js --bundle --outdir=dist --out-extension:.js=.cjs --platform=node --target=node20.0.0 --packages=bundle",
|
||||||
"test": "c8 --100 ava tests/index.js",
|
"test": "c8 --100 ava tests/index.js",
|
||||||
"coverage": "c8 report --reporter html",
|
"coverage": "c8 report --reporter html",
|
||||||
"postcoverage": "open-cli coverage/index.html"
|
"postcoverage": "open-cli coverage/index.html"
|
||||||
@@ -13,20 +13,20 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.10.1",
|
"@actions/core": "^1.10.1",
|
||||||
"@octokit/auth-app": "^7.1.0",
|
"@octokit/auth-app": "^7.1.1",
|
||||||
"@octokit/request": "^9.0.1",
|
"@octokit/request": "^9.1.3",
|
||||||
"p-retry": "^6.2.0",
|
"p-retry": "^6.2.0",
|
||||||
"undici": "^6.19.2"
|
"undici": "^6.19.8"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@sinonjs/fake-timers": "^11.2.2",
|
"@sinonjs/fake-timers": "^13.0.1",
|
||||||
"ava": "^6.1.3",
|
"ava": "^6.1.3",
|
||||||
"c8": "^9.1.0",
|
"c8": "^10.1.2",
|
||||||
"dotenv": "^16.4.5",
|
"dotenv": "^16.4.5",
|
||||||
"esbuild": "^0.21.4",
|
"esbuild": "^0.23.1",
|
||||||
"execa": "^9.1.0",
|
"execa": "^9.3.1",
|
||||||
"open-cli": "^8.0.0",
|
"open-cli": "^8.0.0",
|
||||||
"yaml": "^2.4.2"
|
"yaml": "^2.5.1"
|
||||||
},
|
},
|
||||||
"release": {
|
"release": {
|
||||||
"branches": [
|
"branches": [
|
||||||
|
|||||||
@@ -1,11 +1,21 @@
|
|||||||
import { readdirSync } from "node:fs";
|
import { readdirSync } from "node:fs";
|
||||||
|
|
||||||
import { execa } from "execa";
|
|
||||||
import test from "ava";
|
import test from "ava";
|
||||||
|
import { execa } from "execa";
|
||||||
|
|
||||||
const tests = readdirSync("tests").filter((file) => file.endsWith(".test.js"));
|
// Get all files in tests directory
|
||||||
|
const files = readdirSync("tests");
|
||||||
|
|
||||||
for (const file of tests) {
|
// Files to ignore
|
||||||
|
const ignore = ["index.js", "main.js", "README.md", "snapshots"];
|
||||||
|
|
||||||
|
const testFiles = files.filter((file) => !ignore.includes(file));
|
||||||
|
|
||||||
|
// Throw an error if there is a file that does not end with test.js in the tests directory
|
||||||
|
for (const file of testFiles) {
|
||||||
|
if (!file.endsWith(".test.js")) {
|
||||||
|
throw new Error(`File ${file} does not end with .test.js`);
|
||||||
|
}
|
||||||
test(file, async (t) => {
|
test(file, async (t) => {
|
||||||
// Override Actions environment variables that change `core`’s behavior
|
// Override Actions environment variables that change `core`’s behavior
|
||||||
const env = {
|
const env = {
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
import { test, DEFAULT_ENV } from "./main.js";
|
import { DEFAULT_ENV, test } from "./main.js";
|
||||||
|
|
||||||
// Verify that main works with a custom GitHub API URL passed as `github-api-url` input
|
// Verify that main works with a custom GitHub API URL passed as `github-api-url` input
|
||||||
await test(
|
await test(
|
||||||
() => {
|
() => {
|
||||||
process.env.INPUT_OWNER = process.env.GITHUB_REPOSITORY_OWNER;
|
process.env.INPUT_OWNER = process.env.GITHUB_REPOSITORY_OWNER;
|
||||||
process.env.INPUT_REPOSITORIES = process.env.GITHUB_REPOSITORY;
|
const currentRepoName = process.env.GITHUB_REPOSITORY.split("/")[1];
|
||||||
|
process.env.INPUT_REPOSITORIES = currentRepoName;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
...DEFAULT_ENV,
|
...DEFAULT_ENV,
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
import { test, DEFAULT_ENV } from "./main.js";
|
|
||||||
|
|
||||||
// Verify `main` works correctly when `private-key` input has escaped newlines
|
|
||||||
await test(() => {
|
|
||||||
process.env['INPUT_PRIVATE-KEY'] = DEFAULT_ENV.PRIVATE_KEY.replace(/\n/g, '\\n')
|
|
||||||
});
|
|
||||||
9
tests/main-private-key-with-escaped-newlines.test.js
Normal file
9
tests/main-private-key-with-escaped-newlines.test.js
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import { DEFAULT_ENV, test } from "./main.js";
|
||||||
|
|
||||||
|
// Verify `main` works correctly when `private-key` input has escaped newlines
|
||||||
|
await test(() => {
|
||||||
|
process.env["INPUT_PRIVATE-KEY"] = DEFAULT_ENV["INPUT_PRIVATE-KEY"].replace(
|
||||||
|
/\n/g,
|
||||||
|
"\\n"
|
||||||
|
);
|
||||||
|
});
|
||||||
@@ -3,5 +3,6 @@ import { test } from "./main.js";
|
|||||||
// Verify `main` successfully obtains a token when the `owner` and `repositories` inputs are set (and the latter is a list of repos).
|
// Verify `main` successfully obtains a token when the `owner` and `repositories` inputs are set (and the latter is a list of repos).
|
||||||
await test(() => {
|
await test(() => {
|
||||||
process.env.INPUT_OWNER = process.env.GITHUB_REPOSITORY_OWNER;
|
process.env.INPUT_OWNER = process.env.GITHUB_REPOSITORY_OWNER;
|
||||||
process.env.INPUT_REPOSITORIES = `${process.env.GITHUB_REPOSITORY},actions/toolkit`;
|
const currentRepoName = process.env.GITHUB_REPOSITORY.split("/")[1];
|
||||||
|
process.env.INPUT_REPOSITORIES = `${currentRepoName},toolkit`;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,5 +3,6 @@ import { test } from "./main.js";
|
|||||||
// Verify `main` successfully obtains a token when the `owner` and `repositories` inputs are set (and the latter is a single repo).
|
// Verify `main` successfully obtains a token when the `owner` and `repositories` inputs are set (and the latter is a single repo).
|
||||||
await test(() => {
|
await test(() => {
|
||||||
process.env.INPUT_OWNER = process.env.GITHUB_REPOSITORY_OWNER;
|
process.env.INPUT_OWNER = process.env.GITHUB_REPOSITORY_OWNER;
|
||||||
process.env.INPUT_REPOSITORIES = process.env.GITHUB_REPOSITORY;
|
const currentRepoName = process.env.GITHUB_REPOSITORY.split("/")[1];
|
||||||
|
process.env.INPUT_REPOSITORIES = currentRepoName;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,5 +3,6 @@ import { test } from "./main.js";
|
|||||||
// Verify `main` successfully obtains a token when the `owner` input is not set, but the `repositories` input is set.
|
// Verify `main` successfully obtains a token when the `owner` input is not set, but the `repositories` input is set.
|
||||||
await test(() => {
|
await test(() => {
|
||||||
delete process.env.INPUT_OWNER;
|
delete process.env.INPUT_OWNER;
|
||||||
process.env.INPUT_REPOSITORIES = process.env.GITHUB_REPOSITORY;
|
const currentRepoName = process.env.GITHUB_REPOSITORY.split("/")[1];
|
||||||
|
process.env.INPUT_REPOSITORIES = currentRepoName;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ export async function test(cb = (_mockPool) => {}, env = DEFAULT_ENV) {
|
|||||||
|
|
||||||
// Set up mocking
|
// Set up mocking
|
||||||
const baseUrl = new URL(env["INPUT_GITHUB-API-URL"]);
|
const baseUrl = new URL(env["INPUT_GITHUB-API-URL"]);
|
||||||
const basePath = baseUrl.pathname === '/' ? '' : baseUrl.pathname;
|
const basePath = baseUrl.pathname === "/" ? "" : baseUrl.pathname;
|
||||||
const mockAgent = new MockAgent();
|
const mockAgent = new MockAgent();
|
||||||
mockAgent.disableNetConnect();
|
mockAgent.disableNetConnect();
|
||||||
setGlobalDispatcher(mockAgent);
|
setGlobalDispatcher(mockAgent);
|
||||||
@@ -58,8 +58,9 @@ export async function test(cb = (_mockPool) => {}, env = DEFAULT_ENV) {
|
|||||||
const mockInstallationId = "123456";
|
const mockInstallationId = "123456";
|
||||||
const mockAppSlug = "github-actions";
|
const mockAppSlug = "github-actions";
|
||||||
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 repo = encodeURIComponent(
|
const repo = encodeURIComponent(
|
||||||
(env.INPUT_REPOSITORIES ?? env.GITHUB_REPOSITORY).split(",")[0]
|
(env.INPUT_REPOSITORIES ?? currentRepoName).split(",")[0]
|
||||||
);
|
);
|
||||||
mockPool
|
mockPool
|
||||||
.intercept({
|
.intercept({
|
||||||
@@ -73,7 +74,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" } }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ Generated by [AVA](https://avajs.dev).
|
|||||||
|
|
||||||
> stdout
|
> stdout
|
||||||
|
|
||||||
`owner and repositories set, creating token for repositories "actions/create-github-app-token" owned by "actions"␊
|
`owner and repositories set, creating token for repositories "create-github-app-token" owned by "actions"␊
|
||||||
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
␊
|
␊
|
||||||
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
@@ -75,6 +75,45 @@ Generated by [AVA](https://avajs.dev).
|
|||||||
|
|
||||||
''
|
''
|
||||||
|
|
||||||
|
## main-private-key-with-escaped-newlines.test.js
|
||||||
|
|
||||||
|
> stderr
|
||||||
|
|
||||||
|
''
|
||||||
|
|
||||||
|
> stdout
|
||||||
|
|
||||||
|
`owner and repositories not set, creating token for the current repository ("create-github-app-token")␊
|
||||||
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
|
␊
|
||||||
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
|
␊
|
||||||
|
::set-output name=installation-id::123456␊
|
||||||
|
␊
|
||||||
|
::set-output name=app-slug::github-actions␊
|
||||||
|
::save-state name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
|
::save-state name=expiresAt::2016-07-11T22:14:10Z`
|
||||||
|
|
||||||
|
## main-repo-skew.test.js
|
||||||
|
|
||||||
|
> stderr
|
||||||
|
|
||||||
|
`'Issued at' claim ('iat') must be an Integer representing the time that the assertion was issued.␊
|
||||||
|
[@octokit/auth-app] GitHub API time and system time are different by 30 seconds. Retrying request with the difference accounted for.`
|
||||||
|
|
||||||
|
> stdout
|
||||||
|
|
||||||
|
`owner and repositories set, creating token for repositories "failed-repo" owned by "actions"␊
|
||||||
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
|
␊
|
||||||
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
|
␊
|
||||||
|
::set-output name=installation-id::123456␊
|
||||||
|
␊
|
||||||
|
::set-output name=app-slug::github-actions␊
|
||||||
|
::save-state name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
|
::save-state name=expiresAt::2016-07-11T22:14:10Z`
|
||||||
|
|
||||||
## main-token-get-owner-set-repo-fail-response.test.js
|
## main-token-get-owner-set-repo-fail-response.test.js
|
||||||
|
|
||||||
> stderr
|
> stderr
|
||||||
@@ -103,7 +142,7 @@ Generated by [AVA](https://avajs.dev).
|
|||||||
|
|
||||||
> stdout
|
> stdout
|
||||||
|
|
||||||
`owner and repositories set, creating token for repositories "actions/create-github-app-token,actions/toolkit" owned by "actions"␊
|
`owner and repositories set, creating token for repositories "create-github-app-token,toolkit" owned by "actions"␊
|
||||||
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
␊
|
␊
|
||||||
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
@@ -122,7 +161,7 @@ Generated by [AVA](https://avajs.dev).
|
|||||||
|
|
||||||
> stdout
|
> stdout
|
||||||
|
|
||||||
`owner and repositories set, creating token for repositories "actions/create-github-app-token" owned by "actions"␊
|
`owner and repositories set, creating token for repositories "create-github-app-token" owned by "actions"␊
|
||||||
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
␊
|
␊
|
||||||
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
@@ -199,7 +238,7 @@ Generated by [AVA](https://avajs.dev).
|
|||||||
|
|
||||||
> stdout
|
> stdout
|
||||||
|
|
||||||
`owner not set, creating owner for given repositories "actions/create-github-app-token" in current owner ("actions")␊
|
`owner not set, creating owner for given repositories "create-github-app-token" in current owner ("actions")␊
|
||||||
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::add-mask::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
␊
|
␊
|
||||||
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
::set-output name=token::ghs_16C7e42F292c6912E7710c838347Ae178B4a␊
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user