前言
GitHub Actions 可以構建一組自動化的工作流程,並提供了拉取請求、合併分支等事件來觸發他們。一般成熟的開源專案會在每個版本釋出時提供 releases ,它就是透過 Actions 來自動釋出的。本文就以自動釋出 releases 這個例子來認識 Actions。
建立 workflow
workflow 被稱為工作流,每個工作流以一個 yaml 檔案表達。在倉庫中建立 .github/workflows/release.yaml
檔案,如果需要多個工作流,則建立多個 yaml 檔案即可。
release.yaml
:
# 定義工作流的名稱
name: teach-study Release
# 定義一個 push 事件:當推送帶有 "v*" 的標籤時觸發
on:
push:
tags:
- "v*"
# 定義時區
env:
TZ: Asia/Shanghai
這樣我們就定義好了一個事件,接下來我們來定義 jobs,來建立自動上傳 release 的邏輯:
...
jobs:
create_release:
name: Create Release
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Create Release
id: create_release
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
name: Demo ${{ github.ref_name }}
draft: false
prerelease: false
這個 jobs 包含了兩個操作。什麼是操作呢?可以理解為執行一組命令來完成某些事情,操作既可以自定義,也可以使用 GitHub 社群中分享的。在 job 中使用 uses
指定,搭配上 with
關鍵詞用於給操作傳遞引數。
第一個使用了 actions/checkout@v4
操作,它可以幫助我們將倉庫中的原始碼複製到工作流中來,這個操作是 GitHub Action 內建的操作之一。第二個使用了 softprops/action-gh-release@v1
的操作建立了一個 release 並自動上傳到 GitHub 中, ${{ secrets.GITHUB_TOKEN }}
用於自動令牌身份驗證,with
傳遞了四個引數,其中 tag_name
和 name
的值傳遞了 Actions 的上下文,softprops/action-gh-release@v1
還有其他可選的引數,可以點此檢視。
驗證
把 release.yaml 推送到倉庫中,並且設定好 GITHUB_TOKEN 的讀寫許可權:
然後推送一個 v1.0.0 的標籤:
git tag v1.0.0
git push origin --tags
檢視最終效果: