什麼是 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 變數之外,也會提供下列變數:
-
context是物件,其中包含 工作流程執行的內容。 -
core是 @actions/core 套件的引用。 -
io是 @actions/io 套件的參考。
建立使用 GitHub 腳本的工作流程
GitHub 指令碼動作會納入工作流程中,就像任何其他動作一樣。 因此,您甚至可以將它們與現有的工作流程混合,例如您可能已經為 CI/CD 設定的工作流程。 為了說明 GitHub 腳本的便利性,您現在會建構完整的工作流程,以使用它自動張貼批注給所有新建立的問題。
您會從 name 與 on 子句開始著手,其會指定此工作流程在問題開啟時執行:
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 腳稿案例。 發生這種情況時,您可以將指令碼保留在另一個檔案中,並從工作流程加以參考,而不需要內嵌所有指令碼。
以下是使用這項技術的簡單工作流程範例:
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 腳本範例。