Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Write workflows scripting the GitHub API in JavaScript

License

NotificationsYou must be signed in to change notification settings

actions/github-script

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace
 
 

Repository files navigation

This action makes it easy to quickly write a script in your workflow thatuses the GitHub API and the workflow run context.

In order to use this action, ascript input is provided. The value of thatinput should be the body of an asynchronous function call. The followingarguments will be provided:

Since thescript is just a function body, these values will already bedefined, so you don't have to (see examples below).

Seeoctokit/rest.js for the API clientdocumentation.

Note This action is still a bit of an experiment—the API may change infuture versions. 🙂

Development

Seedevelopment.md.

Reading step results

The return value of the script will be in the step's outputs under the"result" key.

-uses:actions/github-script@v2id:set-resultwith:script:return "Hello!"result-encoding:string-name:Get resultrun:echo "${{steps.set-result.outputs.result}}"

See"Result encoding" for details on how the encoding ofthese outputs can be changed.

Result encoding

By default, the JSON-encoded return value of the function is set as the "result" in theoutput of a github-script step. For some workflows, string encoding is preferred. This option can be set using theresult-encoding input:

-uses:actions/github-script@v2id:my-scriptwith:github-token:${{secrets.GITHUB_TOKEN}}result-encoding:stringscript:return "I will be string (not JSON) encoded!"

Examples

Note thatgithub-token is optional in this action, and the input is therein case you need to use a non-default token.

By default, github-script will use the token provided to your workflow.

Comment on an issue

on:issues:types:[opened]jobs:comment:runs-on:ubuntu-lateststeps:      -uses:actions/github-script@v2with:github-token:${{secrets.GITHUB_TOKEN}}script:|            github.issues.createComment({              issue_number: context.issue.number,              owner: context.repo.owner,              repo: context.repo.repo,              body: '👋 Thanks for reporting!'            })

Apply a label to an issue

on:issues:types:[opened]jobs:apply-label:runs-on:ubuntu-lateststeps:      -uses:actions/github-script@v2with:github-token:${{secrets.GITHUB_TOKEN}}script:|            github.issues.addLabels({              issue_number: context.issue.number,              owner: context.repo.owner,              repo: context.repo.repo,              labels: ['Triage']            })

Welcome a first-time contributor

on:pull_requestjobs:welcome:runs-on:ubuntu-lateststeps:      -uses:actions/github-script@v2with:github-token:${{secrets.GITHUB_TOKEN}}script:|            // Get a list of all issues created by the PR opener            // See: https://octokit.github.io/rest.js/#pagination            const creator = context.payload.sender.login            const opts = github.issues.listForRepo.endpoint.merge({              ...context.issue,              creator,              state: 'all'            })            const issues = await github.paginate(opts)            for (const issue of issues) {              if (issue.number === context.issue.number) {                continue              }              if (issue.pull_request) {                return // Creator is already a contributor.              }            }            await github.issues.createComment({              issue_number: context.issue.number,              owner: context.repo.owner,              repo: context.repo.repo,              body: 'Welcome, new contributor!'            })

Download data from a URL

You can use thegithub object to access the Octokit API. Forinstance,github.request

on:pull_requestjobs:diff:runs-on:ubuntu-lateststeps:      -uses:actions/github-script@v2with:github-token:${{secrets.GITHUB_TOKEN}}script:|            const diff_url = context.payload.pull_request.diff_url            const result = await github.request(diff_url)            console.log(result)

(Note that this particular example only works for a public URL, where thediff URL is publicly accessible. Getting the diff for a private URL requiresusing the API.)

This will print the full diff object in the screen;result.data willcontain the actual diff text.

Run a separate file

If you don't want to inline your entire script that you want to run, you canuse a separate JavaScript module in your repository like so:

on:pushjobs:echo-input:runs-on:ubuntu-lateststeps:      -uses:actions/checkout@v2      -uses:actions/github-script@v2with:script:|            const path = require('path')            const scriptPath = path.resolve('./path/to/script.js')            console.log(require(scriptPath)({context}))

And then export a function from your module:

module.exports=({context})=>{returncontext.payload.client_payload.value}

You can also use async functions in this manner, as long as youawait it inthe inline script.

Note that because you can'trequire things like the GitHub context orActions Toolkit libraries, you'll want to pass them as arguments to yourexternal function.

Additionally, you'll want to use thecheckoutaction to make sure your script file isavailable.

About

Write workflows scripting the GitHub API in JavaScript

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Packages

 
 
 

[8]ページ先頭

©2009-2025 Movatter.jp