mirror of
https://github.com/actions/github-script.git
synced 2026-10-15 20:06:55 +00:00
Compare commits
146
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
32e91bd2ce | ||
|
|
e7aeb8c663 | ||
|
|
5b5837ac81 | ||
|
|
3908079ba1 | ||
|
|
14b73c4a7e | ||
|
|
62c3794a3e | ||
|
|
ea5430244c | ||
|
|
d0bdabac5f | ||
|
|
851500a2ad | ||
|
|
86ac1371ea | ||
|
|
378a50fac5 | ||
|
|
632050422e | ||
|
|
f23cd47e29 | ||
|
|
4024541289 | ||
|
|
91a83c0917 | ||
|
|
586a6a1c85 | ||
|
|
8cf50d1501 | ||
|
|
511abaae1c | ||
|
|
eb88965f42 | ||
|
|
eef4fd9090 | ||
|
|
6efc7571cb | ||
|
|
08caaddc54 | ||
|
|
ac230a1936 | ||
|
|
8e643f1530 | ||
|
|
19e58d8525 | ||
|
|
c94e1c45ff | ||
|
|
3e8cf0fede | ||
|
|
fd2cfc12fa | ||
|
|
f2f7f58db4 | ||
|
|
d70566966b | ||
|
|
ec12a47a4a | ||
|
|
ac452803c9 | ||
|
|
1acfa1ca49 | ||
|
|
c6fc059534 | ||
|
|
766f5ddf0e | ||
|
|
5e738b47b5 | ||
|
|
2f5a0ceb1a | ||
|
|
7875aed44f | ||
|
|
2bcb242a0a | ||
|
|
a32a57a185 | ||
|
|
4020e461ac | ||
|
|
ec3a5c4c4c | ||
|
|
660ec11d82 | ||
|
|
c0ceea4835 | ||
|
|
58d7008c60 | ||
|
|
b9f8f75f36 | ||
|
|
35b1cdd1b2 | ||
|
|
3c6a5c5d52 | ||
|
|
c44be22d0b | ||
|
|
adfd270e4b | ||
|
|
adc04e7dd8 | ||
|
|
60a0d83039 | ||
|
|
b7fb2001b4 | ||
|
|
12e22ed06b | ||
|
|
d319f8f5b5 | ||
|
|
e69ef5462f | ||
|
|
ee0914b839 | ||
|
|
d6fc56f33b | ||
|
|
384d6cf581 | ||
|
|
84724927e3 | ||
|
|
84903f5182 | ||
|
|
5349cf9965 | ||
|
|
ecae9eb535 | ||
|
|
044ebbb945 | ||
|
|
6b5d3eac1f | ||
|
|
5940a76378 | ||
|
|
ef8023aa4a | ||
|
|
e8957ff5ee | ||
|
|
ea121b86f9 | ||
|
|
22dcf8ad68 | ||
|
|
a903cf2d66 | ||
|
|
30d8f852ac | ||
|
|
999c7fb9fe | ||
|
|
47bc917394 | ||
|
|
84ab08fe8b | ||
|
|
1f16022c75 | ||
|
|
5d8f827854 | ||
|
|
21446ed76b | ||
|
|
c857fcb22b | ||
|
|
ba13a89bc9 | ||
|
|
56bdc6c318 | ||
|
|
6f00a0b667 | ||
|
|
3a27f0b193 | ||
|
|
060d68304c | ||
|
|
d324628d3c | ||
|
|
6dcbc7ebb3 | ||
|
|
9e54a4c141 | ||
|
|
29423367f0 | ||
|
|
d7906e4ad0 | ||
|
|
ea954ff83a | ||
|
|
c141a9230e | ||
|
|
57c10d434e | ||
|
|
eae7dc1b88 | ||
|
|
f1ab5779d6 | ||
|
|
8d9f8fc050 | ||
|
|
a4f398e58b | ||
|
|
806be26275 | ||
|
|
8d76c9a913 | ||
|
|
78f623b2da | ||
|
|
98814c53be | ||
|
|
ba6cf3fe7c | ||
|
|
bcc389184d | ||
|
|
da8818015e | ||
|
|
4d93f38890 | ||
|
|
0550e85801 | ||
|
|
5420835fff | ||
|
|
03377835c3 | ||
|
|
8c6dda0186 | ||
|
|
ee0d992b06 | ||
|
|
00be60ac26 | ||
|
|
b7f2567036 | ||
|
|
4a65b1d78b | ||
|
|
5a2006bc4f | ||
|
|
b4677cbffd | ||
|
|
f34078a491 | ||
|
|
311d596c3d | ||
|
|
7dc29a470d | ||
|
|
570fe7c5f7 | ||
|
|
454eac42ff | ||
|
|
e0306a3c1d | ||
|
|
20fcf2e7fe | ||
|
|
d556feaca3 | ||
|
|
01fde8b524 | ||
|
|
633e9fd3a1 | ||
|
|
ee124b1288 | ||
|
|
ca24d5fb29 | ||
|
|
c09747ec1a | ||
|
|
100527700e | ||
|
|
085a7754e8 | ||
|
|
6871f0ffce | ||
|
|
7ed718295b | ||
|
|
7dff1a8764 | ||
|
|
8445ca871a | ||
|
|
d4560e1570 | ||
|
|
d742690307 | ||
|
|
ac0c7cb50b | ||
|
|
eb0f407f1a | ||
|
|
6b09a22cca | ||
|
|
e7dbaf0565 | ||
|
|
3faaff918c | ||
|
|
3cca041b86 | ||
|
|
55053af80a | ||
|
|
977060a05e | ||
|
|
660d907517 | ||
|
|
355d8955d8 | ||
|
|
0a9984563e |
No files matched your search
+4
-1
@@ -5,9 +5,12 @@ extends:
|
||||
- eslint:recommended
|
||||
- plugin:@typescript-eslint/eslint-recommended
|
||||
- plugin:@typescript-eslint/recommended
|
||||
- prettier/@typescript-eslint
|
||||
- prettier
|
||||
parserOptions:
|
||||
project: ['tsconfig.eslint.json']
|
||||
rules:
|
||||
# '@typescript-eslint/explicit-function-return-type': 0
|
||||
'@typescript-eslint/no-use-before-define':
|
||||
- 2
|
||||
- functions: false
|
||||
'@typescript-eslint/no-unnecessary-condition': error
|
||||
@@ -0,0 +1,8 @@
|
||||
blank_issues_enabled: true
|
||||
contact_links:
|
||||
- name: Ask a question or provide feedback about using this action
|
||||
about: For general Q&A and feedback, see the Discussions tab.
|
||||
url: https://github.com/actions/github-script/discussions
|
||||
- name: Ask a question or provide feedback about GitHub Actions
|
||||
about: Please check out the GitHub community forum for discussions about GitHub Actions
|
||||
url: https://github.com/orgs/community/discussions/categories/actions
|
||||
@@ -0,0 +1,12 @@
|
||||
name: 'Install dependencies'
|
||||
description: 'Set up node and install dependencies'
|
||||
runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20.x'
|
||||
cache: npm
|
||||
|
||||
- run: npm ci
|
||||
shell: bash
|
||||
@@ -0,0 +1,16 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: 'github-actions'
|
||||
directory: '/'
|
||||
schedule:
|
||||
interval: 'weekly'
|
||||
|
||||
- package-ecosystem: 'github-actions'
|
||||
directory: '/.github/actions/install-dependencies'
|
||||
schedule:
|
||||
interval: 'weekly'
|
||||
|
||||
- package-ecosystem: 'npm'
|
||||
directory: '/'
|
||||
schedule:
|
||||
interval: 'weekly'
|
||||
@@ -10,27 +10,20 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths-ignore:
|
||||
- '**.md'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- '**.md'
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
check-dist:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Set Node.js 12.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 12.x
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
- uses: ./.github/actions/install-dependencies
|
||||
|
||||
- name: Rebuild the dist/ directory
|
||||
run: npm run build
|
||||
@@ -45,7 +38,7 @@ jobs:
|
||||
id: diff
|
||||
|
||||
# If index.js was different than expected, upload the expected version as an artifact
|
||||
- uses: actions/upload-artifact@v2
|
||||
- uses: actions/upload-artifact@v4
|
||||
if: ${{ failure() && steps.diff.conclusion == 'failure' }}
|
||||
with:
|
||||
name: dist
|
||||
|
||||
@@ -6,15 +6,14 @@ on:
|
||||
pull_request:
|
||||
branches: [main]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
ci:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 12
|
||||
cache: npm
|
||||
- run: npm ci
|
||||
- uses: actions/checkout@v4
|
||||
- uses: ./.github/actions/install-dependencies
|
||||
- run: npm run style:check
|
||||
- run: npm test
|
||||
@@ -38,11 +38,11 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
uses: github/codeql-action/init@v3
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
@@ -56,7 +56,7 @@ jobs:
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
uses: github/codeql-action/autobuild@v3
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||
@@ -69,4 +69,4 @@ jobs:
|
||||
# ./location_of_script_within_repo/buildscript.sh
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
||||
uses: github/codeql-action/analyze@v3
|
||||
@@ -6,11 +6,15 @@ on:
|
||||
pull_request:
|
||||
branches: [main]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
test-return:
|
||||
name: 'Integration test: return'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
- id: output-set
|
||||
uses: ./
|
||||
with:
|
||||
@@ -18,42 +22,307 @@ jobs:
|
||||
result-encoding: string
|
||||
input-value: output
|
||||
- run: |
|
||||
if [[ "${{steps.output-set.outputs.result}}" != "output" ]]; then
|
||||
echo "- Validating output is produced"
|
||||
expected="output"
|
||||
if [[ "${{steps.output-set.outputs.result}}" != "$expected" ]]; then
|
||||
echo $'::error::\u274C' "Expected '$expected', got ${{steps.output-set.outputs.result}}"
|
||||
exit 1
|
||||
fi
|
||||
echo $'\u2705 Test passed' | tee -a $GITHUB_STEP_SUMMARY
|
||||
|
||||
test-relative-require:
|
||||
name: 'Integration test: relative-path require'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- id: output-set
|
||||
- uses: actions/checkout@v4
|
||||
- id: relative-require
|
||||
uses: ./
|
||||
with:
|
||||
script: return require('./package.json').name
|
||||
result-encoding: string
|
||||
input-value: output
|
||||
- run: |
|
||||
if [[ "${{steps.output-set.outputs.result}}" != "github-script" ]]; then
|
||||
echo "- Validating relative require output"
|
||||
if [[ "${{steps.relative-require.outputs.result}}" != "@actions/github-script" ]]; then
|
||||
echo $'::error::\u274C' "Expected '$expected', got ${{steps.relative-require.outputs.result}}"
|
||||
exit 1
|
||||
fi
|
||||
echo $'\u2705 Test passed' | tee -a $GITHUB_STEP_SUMMARY
|
||||
|
||||
test-npm-require:
|
||||
name: 'Integration test: npm package require'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.npm
|
||||
key: ${{runner.os}}-npm-${{hashFiles('**/package-lock.json')}}
|
||||
restore-keys: ${{runner.os}}-npm-
|
||||
- run: npm ci
|
||||
- id: output-set
|
||||
- uses: actions/checkout@v4
|
||||
- uses: ./.github/actions/install-dependencies
|
||||
- id: npm-require
|
||||
uses: ./
|
||||
with:
|
||||
script: return require('@actions/core/package.json').name
|
||||
result-encoding: string
|
||||
input-value: output
|
||||
- run: |
|
||||
if [[ "${{steps.output-set.outputs.result}}" != "@actions/core" ]]; then
|
||||
echo "- Validating npm require output"
|
||||
expected="@actions/core"
|
||||
if [[ "${{steps.npm-require.outputs.result}}" != "$expected" ]]; then
|
||||
echo $'::error::\u274C' "Expected '$expected', got ${{steps.npm-require.outputs.result}}"
|
||||
exit 1
|
||||
fi
|
||||
echo $'\u2705 Test passed' | tee -a $GITHUB_STEP_SUMMARY
|
||||
|
||||
test-previews:
|
||||
name: 'Integration test: GraphQL previews option'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: ./.github/actions/install-dependencies
|
||||
- id: previews-default
|
||||
name: Default previews not set
|
||||
uses: ./
|
||||
with:
|
||||
script: |
|
||||
const endpoint = github.request.endpoint
|
||||
return endpoint({url: "/graphql"}).headers.accept
|
||||
result-encoding: string
|
||||
- id: previews-set-single
|
||||
name: Previews set to a single value
|
||||
uses: ./
|
||||
with:
|
||||
previews: foo
|
||||
script: |
|
||||
const endpoint = github.request.endpoint
|
||||
return endpoint({url: "/graphql"}).headers.accept
|
||||
result-encoding: string
|
||||
- id: previews-set-multiple
|
||||
name: Previews set to comma-separated list
|
||||
uses: ./
|
||||
with:
|
||||
previews: foo,bar,baz
|
||||
script: |
|
||||
const endpoint = github.request.endpoint
|
||||
return endpoint({url: "/graphql"}).headers.accept
|
||||
result-encoding: string
|
||||
- run: |
|
||||
echo "- Validating previews default"
|
||||
expected="application/vnd.github.v3+json"
|
||||
if [[ "${{steps.previews-default.outputs.result}}" != $expected ]]; then
|
||||
echo $'::error::\u274C' "Expected '$expected', got ${{steps.previews-default.outputs.result}}"
|
||||
exit 1
|
||||
fi
|
||||
echo "- Validating previews set to a single value"
|
||||
expected="application/vnd.github.foo-preview+json"
|
||||
if [[ "${{steps.previews-set-single.outputs.result}}" != $expected ]]; then
|
||||
echo $'::error::\u274C' "Expected '$expected', got ${{steps.previews-set-single.outputs.result}}"
|
||||
exit 1
|
||||
fi
|
||||
echo "- Validating previews set to multiple values"
|
||||
expected="application/vnd.github.foo-preview+json,application/vnd.github.bar-preview+json,application/vnd.github.baz-preview+json"
|
||||
if [[ "${{steps.previews-set-multiple.outputs.result}}" != $expected ]]; then
|
||||
echo $'::error::\u274C' "Expected '$expected', got ${{steps.previews-set-multiple.outputs.result}}"
|
||||
exit 1
|
||||
fi
|
||||
echo $'\u2705 Test passed' | tee -a $GITHUB_STEP_SUMMARY
|
||||
|
||||
test-user-agent:
|
||||
name: 'Integration test: user-agent option'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: ./.github/actions/install-dependencies
|
||||
- id: user-agent-default
|
||||
name: Default user-agent not set
|
||||
uses: ./
|
||||
with:
|
||||
script: |
|
||||
const endpoint = github.request.endpoint
|
||||
return endpoint({}).headers['user-agent']
|
||||
result-encoding: string
|
||||
- id: user-agent-set
|
||||
name: User-agent set
|
||||
uses: ./
|
||||
with:
|
||||
user-agent: foobar
|
||||
script: |
|
||||
const endpoint = github.request.endpoint
|
||||
return endpoint({}).headers['user-agent']
|
||||
result-encoding: string
|
||||
- id: user-agent-empty
|
||||
name: User-agent set to an empty string
|
||||
uses: ./
|
||||
with:
|
||||
user-agent: ''
|
||||
script: |
|
||||
const endpoint = github.request.endpoint
|
||||
return endpoint({}).headers['user-agent']
|
||||
result-encoding: string
|
||||
- run: |
|
||||
echo "- Validating user-agent default"
|
||||
expected="actions/github-script octokit-core.js/"
|
||||
if [[ "${{steps.user-agent-default.outputs.result}}" != "$expected"* ]]; then
|
||||
echo $'::error::\u274C' "Expected user-agent to start with '$expected', got ${{steps.user-agent-default.outputs.result}}"
|
||||
exit 1
|
||||
fi
|
||||
echo "- Validating user-agent set to a value"
|
||||
expected="foobar octokit-core.js/"
|
||||
if [[ "${{steps.user-agent-set.outputs.result}}" != "$expected"* ]]; then
|
||||
echo $'::error::\u274C' "Expected user-agent to start with '$expected', got ${{steps.user-agent-set.outputs.result}}"
|
||||
exit 1
|
||||
fi
|
||||
echo "- Validating user-agent set to an empty string"
|
||||
expected="octokit-core.js/"
|
||||
if [[ "${{steps.user-agent-empty.outputs.result}}" != "$expected"* ]]; then
|
||||
echo $'::error::\u274C' "Expected user-agent to start with '$expected', got ${{steps.user-agent-empty.outputs.result}}"
|
||||
exit 1
|
||||
fi
|
||||
echo $'\u2705 Test passed' | tee -a $GITHUB_STEP_SUMMARY
|
||||
|
||||
test-debug:
|
||||
strategy:
|
||||
matrix:
|
||||
environment: ['', 'debug-integration-test']
|
||||
environment: ${{ matrix.environment }}
|
||||
name: "Integration test: debug option (runner.debug mode ${{ matrix.environment && 'enabled' || 'disabled' }})"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: ./.github/actions/install-dependencies
|
||||
- id: debug-default
|
||||
name: Default debug not set
|
||||
uses: ./
|
||||
with:
|
||||
script: |
|
||||
const log = github.log
|
||||
return {
|
||||
runnerDebugMode: core.isDebug(),
|
||||
debug: log.debug === console.debug,
|
||||
info: log.info === console.info
|
||||
}
|
||||
- id: debug-true
|
||||
name: Debug set to true
|
||||
uses: ./
|
||||
with:
|
||||
debug: true
|
||||
script: |
|
||||
const log = github.log
|
||||
return {
|
||||
runnerDebugMode: core.isDebug(),
|
||||
debug: log.debug === console.debug,
|
||||
info: log.info === console.info
|
||||
}
|
||||
- id: debug-false
|
||||
name: Debug set to false
|
||||
uses: ./
|
||||
with:
|
||||
debug: false
|
||||
script: |
|
||||
const log = github.log
|
||||
return {
|
||||
runnerDebugMode: core.isDebug(),
|
||||
debug: log.debug === console.debug,
|
||||
info: log.info === console.info
|
||||
}
|
||||
- id: evaluate-tests
|
||||
name: Evaluate test outputs
|
||||
env:
|
||||
RDMODE: ${{ runner.debug == '1' }}
|
||||
run: |
|
||||
# tests table, pipe separated: label | output | expected
|
||||
# leading and trailing spaces on any field are trimmed
|
||||
tests=$(cat << 'TESTS'
|
||||
Validating debug default |\
|
||||
${{ steps.debug-default.outputs.result }} |\
|
||||
{"runnerDebugMode":${{ env.RDMODE }},"debug":${{ env.RDMODE }},"info":${{ env.RDMODE }}}
|
||||
Validating debug set to true |\
|
||||
${{ steps.debug-true.outputs.result }} |\
|
||||
{"runnerDebugMode":${{ env.RDMODE }},"debug":true,"info":true}
|
||||
Validating debug set to false |\
|
||||
${{ steps.debug-false.outputs.result }} |\
|
||||
{"runnerDebugMode":${{ env.RDMODE }},"debug":false,"info":false}
|
||||
TESTS
|
||||
)
|
||||
|
||||
strim() { shopt -s extglob; lt="${1##+( )}"; echo "${lt%%+( )}"; }
|
||||
while IFS='|' read label output expected; do
|
||||
label="$(strim "$label")"; output="$(strim "$output")"; expected="$(strim "$expected")"
|
||||
echo -n "- $label:"
|
||||
if [[ "$output" != "$expected" ]]; then
|
||||
echo $'\n::error::\u274C' "Expected '$expected', got '$output'"
|
||||
exit 1
|
||||
fi
|
||||
echo $' \u2705'
|
||||
done <<< "$tests"
|
||||
|
||||
echo $'\u2705 Test passed' | tee -a $GITHUB_STEP_SUMMARY
|
||||
|
||||
test-base-url:
|
||||
name: 'Integration test: base-url option'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: ./.github/actions/install-dependencies
|
||||
|
||||
- id: base-url-default
|
||||
name: API URL with base-url not set
|
||||
uses: ./
|
||||
with:
|
||||
script: |
|
||||
const endpoint = github.request.endpoint
|
||||
return endpoint({}).url
|
||||
result-encoding: string
|
||||
|
||||
- id: base-url-default-graphql
|
||||
name: GraphQL URL with base-url not set
|
||||
uses: ./
|
||||
with:
|
||||
script: |
|
||||
const endpoint = github.request.endpoint
|
||||
return endpoint({url: "/graphql"}).url
|
||||
result-encoding: string
|
||||
|
||||
- id: base-url-set
|
||||
name: API URL with base-url set
|
||||
uses: ./
|
||||
with:
|
||||
base-url: https://my.github-enterprise-server.com/api/v3
|
||||
script: |
|
||||
const endpoint = github.request.endpoint
|
||||
return endpoint({}).url
|
||||
result-encoding: string
|
||||
|
||||
- id: base-url-set-graphql
|
||||
name: GraphQL URL with base-url set
|
||||
uses: ./
|
||||
with:
|
||||
base-url: https://my.github-enterprise-server.com/api/v3
|
||||
script: |
|
||||
const endpoint = github.request.endpoint
|
||||
return endpoint({url: "/graphql"}).url
|
||||
result-encoding: string
|
||||
|
||||
- run: |
|
||||
echo "- Validating API URL default"
|
||||
expected="https://api.github.com/"
|
||||
actual="${{steps.base-url-default.outputs.result}}"
|
||||
if [[ "$expected" != "$actual" ]]; then
|
||||
echo $'::error::\u274C' "Expected base-url to equal '$expected', got $actual"
|
||||
exit 1
|
||||
fi
|
||||
echo "- Validating GraphQL URL default"
|
||||
expected="https://api.github.com/graphql"
|
||||
actual="${{steps.base-url-default-graphql.outputs.result}}"
|
||||
if [[ "$expected" != "$actual" ]]; then
|
||||
echo $'::error::\u274C' "Expected base-url to equal '$expected', got $actual"
|
||||
exit 1
|
||||
fi
|
||||
echo "- Validating base-url set to a value"
|
||||
expected="https://my.github-enterprise-server.com/api/v3/"
|
||||
actual="${{steps.base-url-set.outputs.result}}"
|
||||
if [[ "$expected" != "$actual" ]]; then
|
||||
echo $'::error::\u274C' "Expected base-url to equal '$expected', got $actual"
|
||||
exit 1
|
||||
fi
|
||||
echo "- Validating GraphQL URL with base-url set to a value"
|
||||
expected="https://my.github-enterprise-server.com/api/v3/graphql"
|
||||
actual="${{steps.base-url-set-graphql.outputs.result}}"
|
||||
if [[ "$expected" != "$actual" ]]; then
|
||||
echo $'::error::\u274C' "Expected base-url to equal '$expected', got $actual"
|
||||
exit 1
|
||||
fi
|
||||
@@ -8,17 +8,23 @@ on:
|
||||
branches:
|
||||
- main
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
name: Check licenses
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # prefer to use a full fetch for licensed workflows
|
||||
# https://github.com/jonabc/setup-licensed/releases/tag/v1.1.1
|
||||
- uses: jonabc/setup-licensed@82c5f4d19e8968efa74a25b132922382c2671fe2
|
||||
- uses: ruby/setup-ruby@354a1ad156761f5ee2b7b13fa8e09943a5e8d252 # v1.229.0
|
||||
with:
|
||||
version: '3.x'
|
||||
- run: npm ci
|
||||
ruby-version: ruby
|
||||
- uses: github/setup-licensed@v1
|
||||
with:
|
||||
version: '4.x'
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
- uses: ./.github/actions/install-dependencies
|
||||
- run: licensed status
|
||||
@@ -0,0 +1,20 @@
|
||||
name: 'Publish Immutable Action Version'
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
id-token: write
|
||||
packages: write
|
||||
|
||||
steps:
|
||||
- name: Checking out
|
||||
uses: actions/checkout@v4
|
||||
- name: Publish
|
||||
id: publish
|
||||
uses: actions/publish-immutable-action@0.0.4
|
||||
@@ -5,11 +5,15 @@ on:
|
||||
branches: [main]
|
||||
types: [opened, synchronize]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
pull-request-test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
- uses: ./
|
||||
with:
|
||||
script: |
|
||||
@@ -20,9 +24,9 @@ jobs:
|
||||
issue_number: context.payload.number,
|
||||
})
|
||||
|
||||
// Find any comment already made by the bot.
|
||||
const botComment = comments.find(comment => comment.user.id === 41898282)
|
||||
const commentBody = "Hello from actions/github-script! (${{ github.sha }})"
|
||||
// Find any comment already made by the bot.
|
||||
const botComment = comments.find(comment => comment.user.id === 41898282)
|
||||
const commentBody = "Hello from actions/github-script! (${{ github.sha }})"
|
||||
|
||||
if (context.payload.pull_request.head.repo.full_name !== 'actions/github-script') {
|
||||
console.log('Not attempting to write comment on PR from fork');
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
name: Stale Issues & PRs
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
mark_stale:
|
||||
name: Mark issues and PRs as stale
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v3
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
exempt-issue-labels: Not Stale
|
||||
exempt-pr-labels: Not Stale
|
||||
stale-issue-message: >
|
||||
This issue is stale because it has been open for 60 days with no
|
||||
activity. Remove the "Stale" label or comment on the issue, or it
|
||||
will be closed in 7 days.
|
||||
stale-pr-message: >
|
||||
This pull request is stale because it has been open for 60 days
|
||||
with no activity. Remove the "Stale" label or comment on the pull
|
||||
request, or it will be closed in 7 days.
|
||||
close-issue-message: >
|
||||
This issue has been marked as stale and closed due to no activity
|
||||
on it.
|
||||
close-pr-message: >
|
||||
This pull request has been marked as stale and closed due to no
|
||||
activity on it.
|
||||
+1
-2
@@ -1,2 +1 @@
|
||||
/node_modules/
|
||||
!/.vscode/
|
||||
/node_modules/
|
||||
@@ -1,4 +1 @@
|
||||
#!/bin/sh
|
||||
. "$(dirname "$0")/_/husky.sh"
|
||||
|
||||
npm run pre-commit && git add dist/
|
||||
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Vendored
-10
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"editor.formatOnSave": true,
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.organizeImports": true
|
||||
},
|
||||
"files.exclude": {
|
||||
"**/dist": true,
|
||||
"**/node_modules": true
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1 +1 @@
|
||||
* @actions/actions-experience
|
||||
* @actions/actions-launch
|
||||
@@ -1,13 +1,13 @@
|
||||
# actions/github-script
|
||||
|
||||
[](https://github.com/actions/github-script/actions?query=workflow%3AIntegration+branch%3Amain+event%3Apush)
|
||||
[](https://github.com/actions/github-script/actions?query=workflow%3ACI+branch%3Amain+event%3Apush)
|
||||
[](https://github.com/actions/github-script/actions?query=workflow%3ALicensed+branch%3Amain+event%3Apush)
|
||||
[](https://github.com/actions/github-script/actions/workflows/integration.yml)
|
||||
[](https://github.com/actions/github-script/actions/workflows/ci.yml)
|
||||
[](https://github.com/actions/github-script/actions/workflows/licensed.yml)
|
||||
|
||||
This action makes it easy to quickly write a script in your workflow that
|
||||
uses the GitHub API and the workflow run context.
|
||||
|
||||
To use this action, provide an input named `script` that contains the body of an asynchronous function call.
|
||||
To use this action, provide an input named `script` that contains the body of an asynchronous JavaScript function call.
|
||||
The following arguments will be provided:
|
||||
|
||||
- `github` A pre-authenticated
|
||||
@@ -33,13 +33,21 @@ documentation.
|
||||
|
||||
## Breaking Changes
|
||||
|
||||
### Breaking changes in V6
|
||||
### V7
|
||||
|
||||
Version 6 of this action updated the runtime to Node 16 - https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions#example-using-nodejs-v16
|
||||
Version 7 of this action updated the runtime to Node 20 - https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions#runs-for-javascript-actions
|
||||
|
||||
All scripts are now run with Node 20 instead of Node 16 and are affected by any breaking changes between Node 16 and 20
|
||||
|
||||
The `previews` input now only applies to GraphQL API calls as REST API previews are no longer necessary - https://github.blog/changelog/2021-10-14-rest-api-preview-promotions/.
|
||||
|
||||
### V6
|
||||
|
||||
Version 6 of this action updated the runtime to Node 16 - https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions#runs-for-javascript-actions
|
||||
|
||||
All scripts are now run with Node 16 instead of Node 12 and are affected by any breaking changes between Node 12 and 16.
|
||||
|
||||
### Breaking changes in V5
|
||||
### V5
|
||||
|
||||
Version 5 of this action includes the version 5 of `@actions/github` and `@octokit/plugin-rest-endpoint-methods`. As part of this update, the Octokit context available via `github` no longer has REST methods directly. These methods are available via `github.rest.*` - https://github.com/octokit/plugin-rest-endpoint-methods.js/releases/tag/v5.0.0
|
||||
|
||||
@@ -57,7 +65,7 @@ The return value of the script will be in the step's outputs under the
|
||||
"result" key.
|
||||
|
||||
```yaml
|
||||
- uses: actions/github-script@v6
|
||||
- uses: actions/github-script@v7
|
||||
id: set-result
|
||||
with:
|
||||
script: return "Hello!"
|
||||
@@ -76,13 +84,54 @@ output of a github-script step. For some workflows, string encoding is preferred
|
||||
`result-encoding` input:
|
||||
|
||||
```yaml
|
||||
- uses: actions/github-script@v6
|
||||
- uses: actions/github-script@v7
|
||||
id: my-script
|
||||
with:
|
||||
result-encoding: string
|
||||
script: return "I will be string (not JSON) encoded!"
|
||||
```
|
||||
|
||||
## Retries
|
||||
|
||||
By default, requests made with the `github` instance will not be retried. You can configure this with the `retries` option:
|
||||
|
||||
```yaml
|
||||
- uses: actions/github-script@v7
|
||||
id: my-script
|
||||
with:
|
||||
result-encoding: string
|
||||
retries: 3
|
||||
script: |
|
||||
github.rest.issues.get({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
})
|
||||
```
|
||||
|
||||
In this example, request failures from `github.rest.issues.get()` will be retried up to 3 times.
|
||||
|
||||
You can also configure which status codes should be exempt from retries via the `retry-exempt-status-codes` option:
|
||||
|
||||
```yaml
|
||||
- uses: actions/github-script@v7
|
||||
id: my-script
|
||||
with:
|
||||
result-encoding: string
|
||||
retries: 3
|
||||
retry-exempt-status-codes: 400,401
|
||||
script: |
|
||||
github.rest.issues.get({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
})
|
||||
```
|
||||
|
||||
By default, the following status codes will not be retried: `400, 401, 403, 404, 422` [(source)](https://github.com/octokit/plugin-retry.js/blob/9a2443746c350b3beedec35cf26e197ea318a261/src/index.ts#L14).
|
||||
|
||||
These retries are implemented using the [octokit/plugin-retry.js](https://github.com/octokit/plugin-retry.js) plugin. The retries use [exponential backoff](https://en.wikipedia.org/wiki/Exponential_backoff) to space out retries. ([source](https://github.com/octokit/plugin-retry.js/blob/9a2443746c350b3beedec35cf26e197ea318a261/src/error-request.ts#L13))
|
||||
|
||||
## Examples
|
||||
|
||||
Note that `github-token` is optional in this action, and the input is there
|
||||
@@ -94,7 +143,7 @@ By default, github-script will use the token provided to your workflow.
|
||||
|
||||
```yaml
|
||||
- name: View context attributes
|
||||
uses: actions/github-script@v6
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: console.log(context)
|
||||
```
|
||||
@@ -110,7 +159,7 @@ jobs:
|
||||
comment:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/github-script@v6
|
||||
- uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
github.rest.issues.createComment({
|
||||
@@ -132,7 +181,7 @@ jobs:
|
||||
apply-label:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/github-script@v6
|
||||
- uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
github.rest.issues.addLabels({
|
||||
@@ -154,7 +203,7 @@ jobs:
|
||||
welcome:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/github-script@v6
|
||||
- uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
// Get a list of all issues created by the PR opener
|
||||
@@ -183,7 +232,7 @@ jobs:
|
||||
repo: context.repo.repo,
|
||||
body: `**Welcome**, new contributor!
|
||||
|
||||
Please make sure you're read our [contributing guide](CONTRIBUTING.md) and we look forward to reviewing your Pull request shortly ✨`
|
||||
Please make sure you've read our [contributing guide](CONTRIBUTING.md) and we look forward to reviewing your Pull request shortly ✨`
|
||||
})
|
||||
```
|
||||
|
||||
@@ -199,7 +248,7 @@ jobs:
|
||||
diff:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/github-script@v6
|
||||
- uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const diff_url = context.payload.pull_request.diff_url
|
||||
@@ -223,7 +272,7 @@ jobs:
|
||||
list-issues:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/github-script@v6
|
||||
- uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const query = `query($owner:String!, $name:String!, $label:String!) {
|
||||
@@ -256,8 +305,8 @@ jobs:
|
||||
echo-input:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/github-script@v6
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const script = require('./path/to/script.js')
|
||||
@@ -294,8 +343,8 @@ jobs:
|
||||
echo-input:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/github-script@v6
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/github-script@v7
|
||||
env:
|
||||
SHA: '${{env.parentSHA}}'
|
||||
with:
|
||||
@@ -332,14 +381,14 @@ jobs:
|
||||
echo-input:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 14
|
||||
node-version: '20.x'
|
||||
- run: npm ci
|
||||
# or one-off:
|
||||
- run: npm install execa
|
||||
- uses: actions/github-script@v6
|
||||
- uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const execa = require('execa')
|
||||
@@ -354,8 +403,11 @@ jobs:
|
||||
To import an ESM file, you'll need to reference your script by an absolute path and ensure you have a `package.json` file with `"type": "module"` specified.
|
||||
|
||||
For a script in your repository `src/print-stuff.js`:
|
||||
|
||||
```js
|
||||
export default function printStuff() { console.log('stuff') }
|
||||
export default function printStuff() {
|
||||
console.log('stuff')
|
||||
}
|
||||
```
|
||||
|
||||
```yaml
|
||||
@@ -365,8 +417,8 @@ jobs:
|
||||
print-stuff:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/github-script@v6
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const { default: printStuff } = await import('${{ github.workspace }}/src/print-stuff.js')
|
||||
@@ -374,6 +426,24 @@ jobs:
|
||||
await printStuff()
|
||||
```
|
||||
|
||||
### Use scripts with jsDoc support
|
||||
|
||||
If you want type support for your scripts, you could use the command below to install the
|
||||
`@actions/github-script` type declaration.
|
||||
```sh
|
||||
$ npm i -D @actions/github-script@github:actions/github-script
|
||||
```
|
||||
|
||||
And then add the `jsDoc` declaration to your script like this:
|
||||
```js
|
||||
// @ts-check
|
||||
/** @param {import('@actions/github-script').AsyncFunctionArguments} AsyncFunctionArguments */
|
||||
export default async ({ core, context }) => {
|
||||
core.debug("Running something at the moment");
|
||||
return context.actor;
|
||||
};
|
||||
```
|
||||
|
||||
### Use env as input
|
||||
|
||||
You can set env vars to use them in your script:
|
||||
@@ -385,7 +455,7 @@ jobs:
|
||||
echo-input:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/github-script@v6
|
||||
- uses: actions/github-script@v7
|
||||
env:
|
||||
FIRST_NAME: Mona
|
||||
LAST_NAME: Octocat
|
||||
@@ -413,7 +483,7 @@ jobs:
|
||||
apply-label:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/github-script@v6
|
||||
- uses: actions/github-script@v7
|
||||
with:
|
||||
github-token: ${{ secrets.MY_PAT }}
|
||||
script: |
|
||||
@@ -424,3 +494,45 @@ jobs:
|
||||
labels: ['Triage']
|
||||
})
|
||||
```
|
||||
|
||||
### Using exec package
|
||||
|
||||
The provided [@actions/exec](https://github.com/actions/toolkit/tree/main/packages/exec) package allows to execute command or tools in a cross platform way:
|
||||
|
||||
```yaml
|
||||
on: push
|
||||
|
||||
jobs:
|
||||
use-exec:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const exitCode = await exec.exec('echo', ['hello'])
|
||||
|
||||
console.log(exitCode)
|
||||
```
|
||||
|
||||
`exec` packages provides `getExecOutput` function to retrieve stdout and stderr from executed command:
|
||||
|
||||
```yaml
|
||||
on: push
|
||||
|
||||
jobs:
|
||||
use-get-exec-output:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const {
|
||||
exitCode,
|
||||
stdout,
|
||||
stderr
|
||||
} = await exec.getExecOutput('echo', ['hello']);
|
||||
|
||||
console.log(exitCode, stdout, stderr)
|
||||
```
|
||||
@@ -0,0 +1,69 @@
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
|
||||
import {getRetryOptions} from '../src/retry-options'
|
||||
|
||||
describe('getRequestOptions', () => {
|
||||
test('retries disabled if retries == 0', async () => {
|
||||
const [retryOptions, requestOptions] = getRetryOptions(
|
||||
0,
|
||||
[400, 500, 502],
|
||||
[]
|
||||
)
|
||||
|
||||
expect(retryOptions.enabled).toBe(false)
|
||||
expect(retryOptions.doNotRetry).toBeFalsy()
|
||||
|
||||
expect(requestOptions?.retries).toBeFalsy()
|
||||
})
|
||||
|
||||
test('properties set if retries > 0', async () => {
|
||||
const [retryOptions, requestOptions] = getRetryOptions(
|
||||
1,
|
||||
[400, 500, 502],
|
||||
[]
|
||||
)
|
||||
|
||||
expect(retryOptions.enabled).toBe(true)
|
||||
expect(retryOptions.doNotRetry).toEqual([400, 500, 502])
|
||||
|
||||
expect(requestOptions?.retries).toEqual(1)
|
||||
})
|
||||
|
||||
test('properties set if retries > 0', async () => {
|
||||
const [retryOptions, requestOptions] = getRetryOptions(
|
||||
1,
|
||||
[400, 500, 502],
|
||||
[]
|
||||
)
|
||||
|
||||
expect(retryOptions.enabled).toBe(true)
|
||||
expect(retryOptions.doNotRetry).toEqual([400, 500, 502])
|
||||
|
||||
expect(requestOptions?.retries).toEqual(1)
|
||||
})
|
||||
|
||||
test('retryOptions.doNotRetry not set if exemptStatusCodes isEmpty', async () => {
|
||||
const [retryOptions, requestOptions] = getRetryOptions(1, [], [])
|
||||
|
||||
expect(retryOptions.enabled).toBe(true)
|
||||
expect(retryOptions.doNotRetry).toBeUndefined()
|
||||
|
||||
expect(requestOptions?.retries).toEqual(1)
|
||||
})
|
||||
|
||||
test('requestOptions does not override defaults from @actions/github', async () => {
|
||||
const [retryOptions, requestOptions] = getRetryOptions(1, [], {
|
||||
request: {
|
||||
agent: 'default-user-agent'
|
||||
},
|
||||
foo: 'bar'
|
||||
})
|
||||
|
||||
expect(retryOptions.enabled).toBe(true)
|
||||
expect(retryOptions.doNotRetry).toBeUndefined()
|
||||
|
||||
expect(requestOptions?.retries).toEqual(1)
|
||||
expect(requestOptions?.agent).toEqual('default-user-agent')
|
||||
expect(requestOptions?.foo).toBeUndefined() // this should not be in the `options.request` object, but at the same level as `request`
|
||||
})
|
||||
})
|
||||
+14
-5
@@ -13,19 +13,28 @@ inputs:
|
||||
default: ${{ github.token }}
|
||||
required: false
|
||||
debug:
|
||||
description: Whether to tell the GitHub client to log details of its requests
|
||||
default: false
|
||||
description: Whether to tell the GitHub client to log details of its requests. true or false. Default is to run in debug mode when the GitHub Actions step debug logging is turned on.
|
||||
default: ${{ runner.debug == '1' }}
|
||||
user-agent:
|
||||
description: An optional user-agent string
|
||||
default: actions/github-script
|
||||
previews:
|
||||
description: A comma-separated list of API previews to accept
|
||||
description: A comma-separated list of GraphQL API previews to accept
|
||||
result-encoding:
|
||||
description: Either "string" or "json" (default "json")—how the result will be encoded
|
||||
description: Either "string" or "json" (default "json")—how the result will be encoded
|
||||
default: json
|
||||
retries:
|
||||
description: The number of times to retry a request
|
||||
default: "0"
|
||||
retry-exempt-status-codes:
|
||||
description: A comma separated list of status codes that will NOT be retried e.g. "400,500". No effect unless `retries` is set
|
||||
default: 400,401,403,404,422 # from https://github.com/octokit/plugin-retry.js/blob/9a2443746c350b3beedec35cf26e197ea318a261/src/index.ts#L14
|
||||
base-url:
|
||||
description: An optional GitHub REST API URL to connect to a different GitHub instance. For example, https://my.github-enterprise-server.com/api/v3
|
||||
required: false
|
||||
outputs:
|
||||
result:
|
||||
description: The return value of the script, stringified with `JSON.stringify`
|
||||
runs:
|
||||
using: node16
|
||||
using: node20
|
||||
main: dist/index.js
|
||||
Vendored
+32722
-10554
File diff suppressed because it is too large.
Load diff
Generated
+6011
-4268
File diff suppressed because it is too large.
Load diff
+41
-31
@@ -1,13 +1,18 @@
|
||||
{
|
||||
"name": "github-script",
|
||||
"name": "@actions/github-script",
|
||||
"description": "A GitHub action for executing a simple script",
|
||||
"version": "6.2.0",
|
||||
"version": "7.0.1",
|
||||
"author": "GitHub",
|
||||
"license": "MIT",
|
||||
"main": "dist/index.js",
|
||||
"types": "types/async-function.d.ts",
|
||||
"private": true,
|
||||
"engines": {
|
||||
"node": ">=20.0.0 <21.0.0"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "ncc build src/main.ts",
|
||||
"build": "npm run build:types && ncc build src/main.ts",
|
||||
"build:types": "tsc src/async-function.ts -t es5 --declaration --allowJs --emitDeclarationOnly --outDir types",
|
||||
"format:check": "prettier --check src __test__",
|
||||
"format:write": "prettier --write src __test__",
|
||||
"lint": "eslint src __test__",
|
||||
@@ -15,43 +20,48 @@
|
||||
"style:write": "run-p --continue-on-error --aggregate-output format:write lint",
|
||||
"pre-commit": "run-s style:write test build",
|
||||
"test": "jest",
|
||||
"prepare": "husky install"
|
||||
"prepare": "husky"
|
||||
},
|
||||
"jest": {
|
||||
"preset": "ts-jest",
|
||||
"testEnvironment": "node",
|
||||
"globals": {
|
||||
"ts-jest": {
|
||||
"diagnostics": {
|
||||
"ignoreCodes": [
|
||||
"151001"
|
||||
]
|
||||
"transform": {
|
||||
"^.+\\.ts$": [
|
||||
"ts-jest",
|
||||
{
|
||||
"diagnostics": {
|
||||
"ignoreCodes": [
|
||||
"151001"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.9.1",
|
||||
"@actions/exec": "^1.1.0",
|
||||
"@actions/github": "^5.0.0",
|
||||
"@actions/glob": "^0.2.0",
|
||||
"@actions/io": "^1.1.1",
|
||||
"@octokit/core": "^3.5.1",
|
||||
"@octokit/plugin-paginate-rest": "^2.17.0",
|
||||
"@octokit/plugin-rest-endpoint-methods": "^6.3.0"
|
||||
"@actions/core": "^1.10.1",
|
||||
"@actions/exec": "^1.1.1",
|
||||
"@actions/github": "^6.0.0",
|
||||
"@actions/glob": "^0.4.0",
|
||||
"@actions/io": "^1.1.3",
|
||||
"@octokit/core": "^5.0.1",
|
||||
"@octokit/plugin-request-log": "^4.0.0",
|
||||
"@octokit/plugin-retry": "^6.0.1",
|
||||
"@types/node": "^20.9.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "^27.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "^3.10.1",
|
||||
"@typescript-eslint/parser": "^3.10.1",
|
||||
"@vercel/ncc": "^0.23.0",
|
||||
"eslint": "^7.32.0",
|
||||
"eslint-config-prettier": "^6.15.0",
|
||||
"husky": "^7.0.0",
|
||||
"jest": "^27.2.5",
|
||||
"@types/jest": "^29.5.5",
|
||||
"@typescript-eslint/eslint-plugin": "^6.7.5",
|
||||
"@typescript-eslint/parser": "^6.7.5",
|
||||
"@vercel/ncc": "^0.38.0",
|
||||
"eslint": "^8.51.0",
|
||||
"eslint-config-prettier": "^9.0.0",
|
||||
"eslint-plugin-prettier": "^5.0.1",
|
||||
"husky": "^9.1.1",
|
||||
"jest": "^29.7.0",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"prettier": "^2.0.5",
|
||||
"ts-jest": "^27.0.5",
|
||||
"typescript": "^4.3.5"
|
||||
"prettier": "^3.0.3",
|
||||
"ts-jest": "^29.1.1",
|
||||
"typescript": "^5.2.2"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,10 +7,11 @@ import * as io from '@actions/io'
|
||||
|
||||
const AsyncFunction = Object.getPrototypeOf(async () => null).constructor
|
||||
|
||||
type AsyncFunctionArguments = {
|
||||
export declare type AsyncFunctionArguments = {
|
||||
context: Context
|
||||
core: typeof core
|
||||
github: InstanceType<typeof GitHub>
|
||||
octokit: InstanceType<typeof GitHub>
|
||||
exec: typeof exec
|
||||
glob: typeof glob
|
||||
io: typeof io
|
||||
|
||||
+34
-6
@@ -1,9 +1,14 @@
|
||||
import * as core from '@actions/core'
|
||||
import * as exec from '@actions/exec'
|
||||
import {context, getOctokit} from '@actions/github'
|
||||
import {defaults as defaultGitHubOptions} from '@actions/github/lib/utils'
|
||||
import * as glob from '@actions/glob'
|
||||
import * as io from '@actions/io'
|
||||
import {requestLog} from '@octokit/plugin-request-log'
|
||||
import {retry} from '@octokit/plugin-retry'
|
||||
import {RequestRequestOptions} from '@octokit/types'
|
||||
import {callAsyncFunction} from './async-function'
|
||||
import {RetryOptions, getRetryOptions, parseNumberArray} from './retry-options'
|
||||
import {wrapRequire} from './wrap-require'
|
||||
|
||||
process.on('unhandledRejection', handleError)
|
||||
@@ -12,21 +17,43 @@ main().catch(handleError)
|
||||
type Options = {
|
||||
log?: Console
|
||||
userAgent?: string
|
||||
baseUrl?: string
|
||||
previews?: string[]
|
||||
retry?: RetryOptions
|
||||
request?: RequestRequestOptions
|
||||
}
|
||||
|
||||
async function main(): Promise<void> {
|
||||
const token = core.getInput('github-token', {required: true})
|
||||
const debug = core.getInput('debug')
|
||||
const debug = core.getBooleanInput('debug')
|
||||
const userAgent = core.getInput('user-agent')
|
||||
const previews = core.getInput('previews')
|
||||
const baseUrl = core.getInput('base-url')
|
||||
const retries = parseInt(core.getInput('retries'))
|
||||
const exemptStatusCodes = parseNumberArray(
|
||||
core.getInput('retry-exempt-status-codes')
|
||||
)
|
||||
const [retryOpts, requestOpts] = getRetryOptions(
|
||||
retries,
|
||||
exemptStatusCodes,
|
||||
defaultGitHubOptions
|
||||
)
|
||||
|
||||
const opts: Options = {}
|
||||
if (debug === 'true') opts.log = console
|
||||
if (userAgent != null) opts.userAgent = userAgent
|
||||
if (previews != null) opts.previews = previews.split(',')
|
||||
const opts: Options = {
|
||||
log: debug ? console : undefined,
|
||||
userAgent: userAgent || undefined,
|
||||
previews: previews ? previews.split(',') : undefined,
|
||||
retry: retryOpts,
|
||||
request: requestOpts
|
||||
}
|
||||
|
||||
const github = getOctokit(token, opts)
|
||||
// Setting `baseUrl` to undefined will prevent the default value from being used
|
||||
// https://github.com/actions/github-script/issues/436
|
||||
if (baseUrl) {
|
||||
opts.baseUrl = baseUrl
|
||||
}
|
||||
|
||||
const github = getOctokit(token, opts, retry, requestLog)
|
||||
const script = core.getInput('script', {required: true})
|
||||
|
||||
// Using property/value shorthand on `require` (e.g. `{require}`) causes compilation errors.
|
||||
@@ -35,6 +62,7 @@ async function main(): Promise<void> {
|
||||
require: wrapRequire,
|
||||
__original_require__: __non_webpack_require__,
|
||||
github,
|
||||
octokit: github,
|
||||
context,
|
||||
core,
|
||||
exec,
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
import * as core from '@actions/core'
|
||||
import {OctokitOptions} from '@octokit/core/dist-types/types'
|
||||
import {RequestRequestOptions} from '@octokit/types'
|
||||
|
||||
export type RetryOptions = {
|
||||
doNotRetry?: number[]
|
||||
enabled?: boolean
|
||||
}
|
||||
|
||||
export function getRetryOptions(
|
||||
retries: number,
|
||||
exemptStatusCodes: number[],
|
||||
defaultOptions: OctokitOptions
|
||||
): [RetryOptions, RequestRequestOptions | undefined] {
|
||||
if (retries <= 0) {
|
||||
return [{enabled: false}, defaultOptions.request]
|
||||
}
|
||||
|
||||
const retryOptions: RetryOptions = {
|
||||
enabled: true
|
||||
}
|
||||
|
||||
if (exemptStatusCodes.length > 0) {
|
||||
retryOptions.doNotRetry = exemptStatusCodes
|
||||
}
|
||||
|
||||
// The GitHub type has some defaults for `options.request`
|
||||
// see: https://github.com/actions/toolkit/blob/4fbc5c941a57249b19562015edbd72add14be93d/packages/github/src/utils.ts#L15
|
||||
// We pass these in here so they are not overidden.
|
||||
const requestOptions: RequestRequestOptions = {
|
||||
...defaultOptions.request,
|
||||
retries
|
||||
}
|
||||
|
||||
core.debug(
|
||||
`GitHub client configured with: (retries: ${
|
||||
requestOptions.retries
|
||||
}, retry-exempt-status-code: ${
|
||||
retryOptions.doNotRetry ?? 'octokit default: [400, 401, 403, 404, 422]'
|
||||
})`
|
||||
)
|
||||
|
||||
return [retryOptions, requestOptions]
|
||||
}
|
||||
|
||||
export function parseNumberArray(listString: string): number[] {
|
||||
if (!listString) {
|
||||
return []
|
||||
}
|
||||
|
||||
const split = listString.trim().split(',')
|
||||
return split.map(x => parseInt(x))
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"extends": "./tsconfig.json",
|
||||
"exclude": []
|
||||
}
|
||||
Vendored
+19
@@ -0,0 +1,19 @@
|
||||
/// <reference types="node" />
|
||||
import * as core from '@actions/core';
|
||||
import * as exec from '@actions/exec';
|
||||
import { Context } from '@actions/github/lib/context';
|
||||
import { GitHub } from '@actions/github/lib/utils';
|
||||
import * as glob from '@actions/glob';
|
||||
import * as io from '@actions/io';
|
||||
export declare type AsyncFunctionArguments = {
|
||||
context: Context;
|
||||
core: typeof core;
|
||||
github: InstanceType<typeof GitHub>;
|
||||
octokit: InstanceType<typeof GitHub>;
|
||||
exec: typeof exec;
|
||||
glob: typeof glob;
|
||||
io: typeof io;
|
||||
require: NodeRequire;
|
||||
__original_require__: NodeRequire;
|
||||
};
|
||||
export declare function callAsyncFunction<T>(args: AsyncFunctionArguments, source: string): Promise<T>;
|
||||
Reference in new issue
Block a user