什麼是 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 文件中找到您尋找的內容。

如何使用與 octokit/rest.js 不同的 GitHub 指令碼?

使用方式的主要差異在於 GitHub 腳本會提供一個名為 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]

接下來,您將定義名為 comment 的作業,以一系列步驟在 Linux 上執行:

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,不過,當您的存放庫有更多訪客時,這項簡單的工作可能會變得難以負擔。 藉由自動化問題註解,您可以在每次自動感謝訪客的流程。

使用 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 腳本範例