結合 GitHub Actions,透過自動化流程來進行版本號的自動遞增與發布以提升效率。在發 PR 時,結合 Version Tag 自動生成版本號內容。以下將實作結合 GitHub Actions 來自動發布版本號的流程:
使用 Semmantic Versioning 版本號命名原則,參考上篇。
需要在 GitHub 建立三個 YAML 檔文件。
.github/workflows/create-release.yml:依據 SemVer 加入 Tag ,例如:v1.3.35,push 後便會觸發此工作流程,此 .yml 檔名可以自己取名。
name: 'Create Release' 
# 此 workflow 的名稱,功用:創 Release 版本。
on:
  push:
    branches:
	    - main
# on:workflow 觸發條件。
# push:當 code 被 push 到 main 分支時,會觸發此 workflow。
jobs:
  release:
    runs-on: windows-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      # 現有的 GitHub 官方 Action。將專案程式碼 Checkout,接著可進行測試,部署等。
      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '16'
      # 建立 Node.js 環境,因為 semantic-release 通常依賴 Node.js。
      - name: Install dependencies
        run: npm install
      # npm install 以執行 semantic-release。
      - name: Run Semantic Release
        uses: semantic-release/semantic-release@v19
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      # 使用 semantic-release 自動管理版本號和創 GitHub Release。  
      with:
          plugins: |
            [
              "@semantic-release/commit-analyzer",
              "@semantic-release/release-notes-generator",
              "@semantic-release/changelog",
              "@semantic-release/github"
            ]
  # @semantic-release/commit-analyzer:分析 commit message or PR 標題來決定版本號(major, minor, patch)。
	# @semantic-release/release-notes-generator:生成 Release 說明,可以根據 PR 標題來分類。
	# @semantic-release/changelog:更新 CHANGELOG.md 文件,並將每個 PR 歸類到相應的 Release 說明中。
	# @semantic-release/github:自動在 GitHub 上創一個 Release。
PR 標題如何撰寫才能出現在 Release 自動生成文件
conventional commits 規範 PR 標題
fix: 修正了表單提交錯誤 (#123)
feat: 新增用戶通知功能 (#456)
關鍵字
	•	fix: 對應小的 Bug 修復(Patch)。
	•	feat: 新功能(Minor)。
	•	BREAKING CHANGE: 對應重大變更(Major)。
屬於 Bug 修復類型的 PR 會自動被標記為 fix,並在 Release 文件中生成「Bug Fixes」的標題。
新功能會被標記為 feat,並生成「Features 」標題。
可以修改 release-notes-generator ,進一步定義原則,讓它們對應 PR 上的標題。
透過 PR 標題或內容自動生成有規則的 Release 文件。