mirror of
https://github.com/actions/github-script.git
synced 2026-06-06 17:14:23 +00:00
Closes #714 Inline `script` is a YAML string — invisible to linters and IDEs. The common workaround was wrapping a `require` call inside the inline script, which still needs boilerplate and assumes a path convention. New optional `script-file` input that accepts a path to a JS file. The file must `module.exports` an async function receiving the standard IoC dependency bag (`github`, `octokit`, `getOctokit`, `context`, `core`, `exec`, `glob`, `io`, `require`). ```yaml - uses: actions/checkout@v4 - uses: actions/github-script@v9 with: script-file: .github/scripts/my-script.js ``` `script` and `script-file` are mutually exclusive — exactly one must be provided. Relative paths resolve against `$GITHUB_WORKSPACE`; absolute paths are used as-is. - `action.yml` — adds `script-file` input; makes `script` optional - `src/script-file.ts` — path resolution and script loading logic - `src/args.ts` — `AsyncFunctionArguments` extracted from `async-function.ts` so neither execution path depends on the other - `src/main.ts` — mutual-exclusion validation; dispatches to the right execution path - `types/non-webpack-require.ts` — corrects `__non_webpack_require__` type from deprecated `NodeRequire` / wrong `NodeJS.RequireResolve` to `NodeJS.Require` - `__test__/script-file.test.ts` — 10 tests covering path resolution, arg forwarding, error cases - `README.md` — new `## Script file` section with usage, IoC bag table, path resolution rules - `.github/fixtures/script-file/` — fixture JS files for integration tests - `.github/workflows/integration.yml` — 10 new integration test jobs: happy path (relative path, absolute path, all IoC args, json/string encoding, require-in-file) and error cases (both inputs set, neither set, nonexistent file, non-function export, file:// protocol)
47 lines
2 KiB
YAML
47 lines
2 KiB
YAML
name: GitHub Script
|
|
author: GitHub
|
|
description: Run simple scripts using the GitHub client
|
|
branding:
|
|
color: blue
|
|
icon: code
|
|
inputs:
|
|
script:
|
|
description: The script to run (mutually exclusive with script-file)
|
|
required: false
|
|
script-file:
|
|
description: |
|
|
A path to a JS file that exports an action handler. (mutually exclusive with script)
|
|
Path may be absolute, or relative to your repo root.
|
|
The handler may be async.
|
|
The handler is called with an IoC bag with {context, core, exec, github, octokit, getOctokit, glob, io, require} - destructure what you need.
|
|
required: false
|
|
github-token:
|
|
description: The GitHub token used to create an authenticated client
|
|
default: ${{ github.token }}
|
|
required: false
|
|
debug:
|
|
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 GraphQL API previews to accept
|
|
result-encoding:
|
|
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: node24
|
|
main: dist/index.js
|