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 变量外,还提供了以下变量:

创建使用 GitHub 脚本的工作流

GitHub 脚本操作与任何其他操作一样适用于工作流。 因此,你甚至可以将它们与现有工作流(例如你可能已经为 CI/CD 设置的工作流)混合使用。 为了说明 GitHub 脚本的便利性,现在你将构建一个完整的工作流,该工作流使用它自动向所有新创建的问题发布注释。

nameon 子句开始,它们指定在打开问题时运行该工作流:

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 脚本工作流的屏幕截图。

从单独的文件运行

有时可能需要使用大量代码来满足 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 脚本示例