GitHub 脚本是什么?
在本单元中,你将了解 GitHub 脚本如何使你能够使用 GitHub Actions 工作流自动执行常见的 GitHub 进程。
GitHub 脚本是什么?
GitHub 脚本 是一个动作,它提供了经过身份验证的 Octokit 客户端,并允许在工作流文件中直接编写 JavaScript。 它在 Node.js中运行,因此在编写脚本时可以使用该平台。
什么是 Octokit?
Octokit 是 GitHub API 客户端的官方集合。 其中一个客户端 rest.js提供对 GitHub REST 接口的 JavaScript 访问权限。
你始终能够通过 octokit/rest.js 自动执行 GitHub API,尽管正确设置和维护它可能是一项繁重的工作。 使用 GitHub 脚本的最大优势之一是,它可以处理所有这些开销,因此你可以立即开始使用 API。 无需担心依赖项、配置甚至身份验证。
octokit/rest.js 的作用是什么?
简而言之,它几乎可以执行与 GitHub 自动化相关的任何操作。 除了可以访问提交、拉取请求和问题之外,还可以访问用户、项目和组织。 你可以检索常用文件的列表,如常用许可证或 .gitignore
文件。 甚至还可以呈现 Markdown。
如果要创建集成 GitHub 的内容,那么在 完整的 octokit/rest.js 文档中找到所需内容的可能性很好。
使用 GitHub 脚本与 octokit/rest.js 有何不同?
用法的主要区别在于 GitHub Script 提供一个名为 github
的预验证的 octokit/rest.js 客户端。
因此,与其
octokit.issues.createComment({
使用
github.issues.createComment({
.
除了 github
变量外,还提供了以下变量:
context
是包含 工作流运行的上下文的对象。core
是对 @actions/核心 包的引用。io
是对 @actions/io 包的引用。
创建使用 GitHub 脚本的工作流
GitHub 脚本操作与任何其他操作一样适用于工作流。 因此,你甚至可以将它们与现有工作流(例如你可能已经为 CI/CD 设置的工作流)混合使用。 为了说明 GitHub 脚本的便利性,现在你将构建一个完整的工作流,该工作流使用它自动向所有新创建的问题发布注释。
从 name
和 on
子句开始,它们指定在打开问题时运行该工作流:
name: Learning GitHub Script
on:
issues:
types: [opened]
接下来,你将定义一个名为在 Linux 上运行的作业 comment
,其中包含一系列步骤:
jobs:
comment:
runs-on: ubuntu-latest
steps:
在本例中,只有一个步骤:GitHub 脚本操作。
- uses: actions/github-script@0.8.0
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
github.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: "🎉 You've created this issue comment using GitHub Script!!!"
})
使用 GitHub Actions 确实有助于自动执行存储库中发生的事件。 假设存储库访客打开了一个新问题,其中包含有关关键 bug 的信息。 你可能想感谢他们引导你发现 bug,但是,随着存储库吸引的访客变多,这个简单的任务可能会变得非常困难。 通过自动化问题评论,你可以自动化每次感谢访问者的流程。
使用 actions/github-script@0.8.0
该actions/github-script@0.8.0
操作也称为 GitHub 脚本,可为您与 GitHub API 的集成完成所有复杂工作。
此操作需要在运行时提供一个 github-token
,以便对请求进行身份验证。 这是自动完成的,因此你可以按原样使用代码。
script
参数几乎可以是任何使用存储在 github
中的 octokit/rest/js 客户端的 JavaScript。 在本例中,创建硬编码注释的只有一行(为了可读性起见,我们将它拆分为多行)。
工作流运行后,GitHub 脚本会记录运行的代码,以便在 “作 ”选项卡上查看:
从单独的文件运行
有时可能需要使用大量代码来满足 GitHub 脚本方案。 当发生这种情况时,可以将脚本保存在一个单独的文件中,并从工作流中引用它,而不是将所有脚本都置于内联中。
下面是使用该技术的简单工作流的示例:
on: push
jobs:
echo-input:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/github-script@v2
with:
script: |
const path = require('path')
const scriptPath = path.resolve('./path/to/script.js')
console.log(require(scriptPath)({context}))
请查看 更多 GitHub 脚本示例。