Compare commits

...
60 Commits
Author SHA1 Message Date
Jonathan Clem 85e88a66ea Merge pull request #136 from actions/search-cwd-first
Only search cwd on user-script require calls
2021-04-21 18:31:08 -04:00
Jonathan Clem 5cbb702e24 v4.0.1 2021-04-21 18:30:43 -04:00
Jonathan Clem 1ef7fd09ca Remove require search fallback 2021-04-21 18:13:51 -04:00
Jonathan Clem a49bf6b2cd Search the cwd first, then existing module paths 2021-04-21 18:10:10 -04:00
Jonathan Clem 95fb649573 Merge pull request #135 from actions/wrap-require
Support installed npm modules and relative require
2021-04-21 17:50:55 -04:00
Jonathan Clem 2923e50f29 Run build script 2021-04-21 17:49:15 -04:00
Jonathan Clem b616178d6d Merge branch 'wrap-require' of https://github.com/actions/github-script into wrap-require 2021-04-21 17:48:41 -04:00
Jonathan Clem c758586ea1 v4.0.0 2021-04-21 17:48:25 -04:00
Jonathan ClemandJosh Gross 256da4ea4d Update src/wrap-require.ts
Co-authored-by: Josh Gross <joshmgross@github.com>
2021-04-21 17:46:09 -04:00
Jonathan Clem 5ee517dae8 Workflow syntax error 2021-04-21 17:43:39 -04:00
Jonathan Clem fb7e8f7c67 Add npm ci to integration test 2021-04-21 17:43:02 -04:00
Jonathan Clem 4a93ad9f9e Add actions/checkout 2021-04-21 17:41:41 -04:00
Jonathan Clem 19e7914023 Add integration test running 2021-04-21 17:39:54 -04:00
Jonathan Clem 3ede58996d Add new integration tests 2021-04-21 17:37:37 -04:00
Jonathan Clem 01f87b6c01 Remove caveat about node_modules 2021-04-21 17:21:31 -04:00
Jonathan Clem b0e12e725b Add Webpack comment vis-a-vis eval 2021-04-21 17:12:33 -04:00
Jonathan Clem 7e12bd7395 Call resolve, then require 2021-04-21 17:10:11 -04:00
Jonathan Clem 7e8659dcd4 Run build 2021-04-21 17:06:44 -04:00
Jonathan Clem d37f92ff11 Test eval 2021-04-21 17:06:36 -04:00
Jonathan Clem 1f8fc98741 Run build 2021-04-21 17:05:03 -04:00
Jonathan Clem f57c84a8e8 Try global.module 2021-04-21 17:04:41 -04:00
Jonathan Clem ade5cea985 Use concat for paths 2021-04-21 17:02:53 -04:00
Jonathan Clem c1c139b0ab Add a catch to support requiring installed modules 2021-04-21 16:58:37 -04:00
Jonathan Clem 3ca4cd5a00 Update documentation for relative require support 2021-04-21 16:48:53 -04:00
Jonathan Clem 83c92d6511 Rename nativeRequire to __original_require__ 2021-04-21 16:41:31 -04:00
Jonathan Clem c416f56b51 Pass nativeRequire, as well 2021-04-21 16:40:48 -04:00
Jonathan Clem 75e3a5b35d Move wrapRequire to its own module 2021-04-21 16:37:24 -04:00
Jonathan Clem e853490b13 Run build script 2021-04-21 16:35:28 -04:00
Jonathan Clem f4e5d39c2a Use a proxy to support relative requires 2021-04-21 16:32:28 -04:00
Jonathan Clem ddba1b195d Use non-Webpack-require in evaluated scripts 2021-04-21 16:16:20 -04:00
Josh Gross 59cb74c2ee Merge pull request #125 from karlhorky/patch-1
Link to better octokit docs
2021-04-16 12:00:11 -04:00
Josh Gross 5467f2a1ed Merge pull request #131 from esker-software/Update-readme-with-async-example
Update readme with async example
2021-04-15 12:18:40 -04:00
Léandre DA SILVA c72dc00003 Update readme with async example 2021-04-09 17:12:13 +02:00
Josh Gross f05a81df23 Update version to 3.1.1 2021-03-30 14:00:42 -04:00
Josh Gross 74ae80c200 Use y18n 4.0.1 2021-03-30 13:56:06 -04:00
Josh Gross 7488ca4f39 Merge pull request #127 from MatisseHack/glob
Add @actions/glob as a script parameter
2021-03-30 13:53:12 -04:00
Matisse Hack 8920b9a6ed Add the @actions/glob package 2021-03-29 16:06:39 -07:00
Josh Gross 8685086334 Merge pull request #126 from nihalgonsalves/ng/input
Document how to use npm packages and env input
2021-03-29 17:35:07 -04:00
Nihal Gonsalves 01dfe2e0c1 Update README.md 2021-03-30 02:48:37 +05:30
Nihal Gonsalves 934655b9e0 Document how to use env: as input 2021-03-30 02:23:20 +05:30
Nihal Gonsalves a56d4504de Document how to use installed npm packages 2021-03-30 02:20:10 +05:30
Karl Horky bb407510e7 Remove version number to default to latest version 2021-03-24 18:20:16 +01:00
Karl Horky 3673bc4c4f Link to better octokit docs 2021-03-24 18:13:28 +01:00
Josh Gross 3d069b2f0c Merge pull request #121 from robyoung/fix-previous-broken-pr
Fix typo from #117
2021-03-03 15:31:04 -05:00
Rob Young 77c8747753 Fix typo from #117
I accidentally removed two lines I did not intend to. This would only
break for PRs opened on the repo directly.
2021-03-02 11:41:59 +00:00
Josh Gross e86864dfd7 Merge pull request #117 from robyoung/fix-pull-request-test-for-forks
Fix PR test workflow for forks
2021-02-26 15:55:52 -05:00
Rob Young 58e7e1dbfa Fix PR test workflow for forks
When the workflow is triggered from a fork the permissions for the
`GITHUB_TOKEN` are read-only. This chane skips the write operations if
we're running from a fork.

See: https://docs.github.com/en/actions/reference/events-that-trigger-workflows#pull-request-events-for-forked-repositories
2021-02-23 09:36:43 +00:00
Josh Gross b251c3e139 Merge pull request #111 from actions/dependabot/npm_and_yarn/node-notifier-8.0.1
Bump node-notifier from 8.0.0 to 8.0.1
2021-02-02 11:53:29 -05:00
dependabot[bot] 5b5c43cb7b Bump node-notifier from 8.0.0 to 8.0.1
Bumps [node-notifier](https://github.com/mikaelbr/node-notifier) from 8.0.0 to 8.0.1.
- [Release notes](https://github.com/mikaelbr/node-notifier/releases)
- [Changelog](https://github.com/mikaelbr/node-notifier/blob/v8.0.1/CHANGELOG.md)
- [Commits](https://github.com/mikaelbr/node-notifier/compare/v8.0.0...v8.0.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-02-02 16:51:20 +00:00
Josh Gross 74776b4afc Merge pull request #110 from buger/patch-1
Fix typo in Readme example
2021-02-02 11:46:17 -05:00
Leonid Bugaev 01904b97ff Fix typo in Readme example
$label was not defined as input argument. 

Also updated job name to reflect what it actually does.
2021-02-02 17:12:35 +03:00
Josh Gross 315fb4f388 Merge pull request #109 from 36degrees/patch-1
Use @v3 in 'View context attributes' example
2021-01-04 13:20:42 -05:00
Oliver Byford 5c9e354ff0 Use @v3 in 'View context attributes' example
This makes the version of github-script used in the 'View context attributes' example consistent with the version used by all of the other examples in the README.
2020-12-21 15:16:05 +00:00
Josh Gross 2f21207c8d Add name to PR test workflow 2020-12-17 12:09:06 -05:00
Josh Gross 1318dc37ba Merge pull request #108 from Bullenj01/documentation-print-option-for-objects
Update README.md
2020-12-17 12:07:59 -05:00
Jason Bullen f4f25ebaab Move to examples section 2020-12-17 11:45:30 -05:00
Jason Bullen b91d578158 Update README.md
Add example of using console.log to display attributes of object context
2020-12-17 08:33:49 -05:00
Josh Gross a52e7f4cf4 Merge pull request #106 from actions/joshmgross/add-codeowners
Add CODEOWNERS
2020-12-10 13:27:30 -05:00
Josh Gross b714c526d7 Add CODEOWNERS 2020-12-09 15:58:34 -05:00
Jonathan Clem 96374ece58 Update README.md 2020-11-17 09:20:10 -05:00
16 changed files with 11651 additions and 149 deletions

No files matched your search

+40 -2
View File
@@ -2,13 +2,15 @@ name: Integration
on:
push: {branches: main}
pull_request: {branches: main}
jobs:
integration:
test-return:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- id: output-set
uses: actions/github-script@main
uses: ./
with:
script: return core.getInput('input-value')
result-encoding: string
@@ -17,3 +19,39 @@ jobs:
if [[ "${{steps.output-set.outputs.result}}" != "output" ]]; then
exit 1
fi
test-relative-require:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- id: output-set
uses: ./
with:
script: return require('./package.json').name
result-encoding: string
input-value: output
- run: |
if [[ "${{steps.output-set.outputs.result}}" != "github-script" ]]; then
exit 1
fi
test-npm-require:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v1
with:
path: ~/.npm
key: ${{runner.os}}-npm-${{hashFiles('**/package-lock.json')}}
restore-keys: ${{runner.os}}-npm-
- run: npm ci
- id: output-set
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
exit 1
fi
+22 -16
View File
@@ -1,3 +1,5 @@
name: Pull Request Test
on:
pull_request:
branches: main
@@ -18,22 +20,26 @@ 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 (botComment) {
await github.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
body: commentBody
})
if (context.payload.pull_request.head.repo.full_name !== 'actions/github-script') {
console.log('Not attempting to write comment on PR from fork');
} else {
await github.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.number,
body: commentBody
})
if (botComment) {
await github.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
body: commentBody
})
} else {
await github.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.number,
body: commentBody
})
}
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
* @actions/actions-experience
+116 -19
View File
@@ -12,11 +12,18 @@ input should be the body of an asynchronous function call. The following
arguments will be provided:
- `github` A pre-authenticated
[octokit/core.js](https://github.com/octokit/core.js#readme) client with REST endpoints and pagination plugins
[octokit/rest.js](https://octokit.github.io/rest.js) client with pagination plugins
- `context` An object containing the [context of the workflow
run](https://github.com/actions/toolkit/blob/main/packages/github/src/context.ts)
- `core` A reference to the [@actions/core](https://github.com/actions/toolkit/tree/main/packages/core) package
- `glob` A reference to the [@actions/glob](https://github.com/actions/toolkit/tree/main/packages/glob) package
- `io` A reference to the [@actions/io](https://github.com/actions/toolkit/tree/main/packages/io) package
- `require` A proxy wrapper around the normal Node.js `require` to enable
requiring relative paths (relative to the current working directory) and
requiring npm packages installed in the current working directory. If for
some reason you need the non-wrapped `require`, there is an escape hatch
available: `__original_require__` is the original value of `require` without
our wrapping applied.
Since the `script` is just a function body, these values will already be
defined, so you don't have to (see examples below).
@@ -37,7 +44,7 @@ The return value of the script will be in the step's outputs under the
"result" key.
```yaml
- uses: actions/github-script@v3
- uses: actions/github-script@v4
id: set-result
with:
script: return "Hello!"
@@ -56,7 +63,7 @@ output of a github-script step. For some workflows, string encoding is preferred
`result-encoding` input:
```yaml
- uses: actions/github-script@v3
- uses: actions/github-script@v4
id: my-script
with:
github-token: ${{secrets.GITHUB_TOKEN}}
@@ -71,6 +78,15 @@ in case you need to use a non-default token.
By default, github-script will use the token provided to your workflow.
### Print the available attributes of context
```yaml
- name: View context attributes
uses: actions/github-script@v4
with:
script: console.log(context)
```
### Comment on an issue
```yaml
@@ -82,7 +98,7 @@ jobs:
comment:
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v3
- uses: actions/github-script@v4
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
@@ -105,7 +121,7 @@ jobs:
apply-label:
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v3
- uses: actions/github-script@v4
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
@@ -126,7 +142,7 @@ jobs:
welcome:
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v3
- uses: actions/github-script@v4
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
@@ -170,7 +186,7 @@ jobs:
diff:
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v3
- uses: actions/github-script@v4
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
@@ -191,16 +207,15 @@ contain the actual diff text.
You can use the `github.graphql` object to run custom GraphQL queries against the GitHub API.
```yaml
jobs:
list-packages:
list-issues:
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v3
- uses: actions/github-script@v4
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const query = `query($owner:String!, $name:String!) {
const query = `query($owner:String!, $name:String!, $label:String!) {
repository(owner:$owner, name:$name){
issues(first:100, labels: [$label]) {
nodes {
@@ -216,7 +231,6 @@ jobs:
}
const result = await github.graphql(query, variables)
console.log(result)
```
### Run a separate file
@@ -232,15 +246,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/github-script@v2
- uses: actions/github-script@v4
with:
script: |
const script = require(`${process.env.GITHUB_WORKSPACE}/path/to/script.js`)
const script = require('./path/to/script.js')
console.log(script({github, context}))
```
_Note that the script path given to `require()` must be an **absolute path** in this case, hence using [`GITHUB_WORKSPACE`](https://docs.github.com/en/actions/configuring-and-managing-workflows/using-environment-variables#default-environment-variables)._
And then export a function from your module:
```javascript
@@ -249,9 +261,6 @@ module.exports = ({github, context}) => {
}
```
You can also use async functions in this manner, as long as you `await` it in
the inline script.
Note that because you can't `require` things like the GitHub context or
Actions Toolkit libraries, you'll want to pass them as arguments to your
external function.
@@ -259,3 +268,91 @@ external function.
Additionally, you'll want to use the [checkout
action](https://github.com/actions/checkout) to make sure your script file is
available.
### Run a separate file with an async function
You can also use async functions in this manner, as long as you `await` it in
the inline script.
In your workflow:
```yaml
on: push
jobs:
echo-input:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/github-script@v4
env:
SHA: '${{env.parentSHA}}'
with:
script: |
const script = require('./path/to/script.js')
await script({github, context, core})
```
And then export an async function from your module:
```javascript
module.exports = async ({github, context, core}) => {
const {SHA} = process.env
const commit = await github.repos.getCommit({
owner: context.repo.owner,
repo: context.repo.repo,
ref: `${SHA}`
})
core.exportVariable('author', commit.data.commit.author.email)
}
```
### Use npm packages
Like importing your own files above, you can also use installed modules:
```yaml
on: push
jobs:
echo-input:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: 14
- run: npm ci
# or one-off:
- run: npm install execa
- uses: actions/github-script@v4
with:
script: |
const execa = require('execa')
const { stdout } = await execa('echo', ['hello', 'world'])
console.log(stdout)
```
### Use env as input
You can set env vars to use them in your script:
```yaml
on: push
jobs:
echo-input:
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v4
env:
FIRST_NAME: Mona
LAST_NAME: Octocat
with:
script: |
const { FIRST_NAME, LAST_NAME } = process.env
console.log(`Hello ${FIRST_NAME} ${LAST_NAME}`)
```
+2310 -84
View File
File diff suppressed because it is too large. Load diff
+9120 -26
View File
File diff suppressed because it is too large. Load diff
+2 -1
View File
@@ -1,7 +1,7 @@
{
"name": "github-script",
"description": "A GitHub action for executing a simple script",
"version": "3.1.0",
"version": "4.0.1",
"author": "GitHub",
"license": "MIT",
"main": "dist/index.js",
@@ -37,6 +37,7 @@
"dependencies": {
"@actions/core": "^1.2.6",
"@actions/github": "^4.0.0",
"@actions/glob": "^0.1.1",
"@actions/io": "^1.0.2",
"@octokit/core": "^3.2.1",
"@octokit/plugin-paginate-rest": "^2.6.0",
+3
View File
@@ -1,6 +1,7 @@
import * as core from '@actions/core'
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'
const AsyncFunction = Object.getPrototypeOf(async () => null).constructor
@@ -9,8 +10,10 @@ type AsyncFunctionArguments = {
context: Context
core: typeof core
github: InstanceType<typeof GitHub>
glob: typeof glob
io: typeof io
require: NodeRequire
__original_require__: NodeRequire
}
export function callAsyncFunction<T>(
+11 -1
View File
@@ -1,7 +1,9 @@
import * as core from '@actions/core'
import {context, getOctokit} from '@actions/github'
import * as glob from '@actions/glob'
import * as io from '@actions/io'
import {callAsyncFunction} from './async-function'
import {wrapRequire} from './wrap-require'
process.on('unhandledRejection', handleError)
main().catch(handleError)
@@ -28,7 +30,15 @@ async function main(): Promise<void> {
// Using property/value shorthand on `require` (e.g. `{require}`) causes compilation errors.
const result = await callAsyncFunction(
{require: require, github, context, core, io},
{
require: wrapRequire,
__original_require__: __non_webpack_require__,
github,
context,
core,
glob,
io
},
script
)
+25
View File
@@ -0,0 +1,25 @@
import * as path from 'path'
export const wrapRequire = new Proxy(__non_webpack_require__, {
apply: (target, thisArg, [moduleID]) => {
if (moduleID.startsWith('.')) {
moduleID = path.resolve(moduleID)
return target.apply(thisArg, [moduleID])
}
const modulePath = target.resolve.apply(thisArg, [
moduleID,
{
// Webpack does not have an escape hatch for getting the actual
// module, other than `eval`.
paths: [process.cwd()]
}
])
return target.apply(thisArg, [modulePath])
},
get: (target, prop, receiver) => {
Reflect.get(target, prop, receiver)
}
})
+1
View File
@@ -0,0 +1 @@
declare const __non_webpack_require__: NodeRequire