Mark Ku's Blog

優化開發流程系列,再也不用人工撰寫 Release Notes,本篇用Powershell 及 git log

問題

在功能開發完成,要準備部署到下一個環境時,目前都需要『人工記錄』異動了什麼項目,好讓功能在下一個環境發生問題時,可以快速追朔釋出那些功能所造成;為了讓開發人員專注在開發,我這邊用了Power Shell ,做了一個自動化腳本 在產生 Git tag ,並產生Release Note。

目前的版號機制

透過 git tag 去 trigger Cicd 主動去Build
b-3.0.1 => b-3.0.2
b為beta 環境,3.0為大版號,最後的數字則是小版號。

在撰寫腳本前,得先了解 Git 相關的指令

找出這兩個 Tag 間 Commit 了那些 Log

git log --pretty="%s (%h - %an)" "b-0.0.1..b-0.0.2" | grep -i -E '(bug|feature|support|study|task|design) #[0-9]+ '

P.S.後面可以加篩選條件,去找出相對應的log

找到我們上一個在 Beta 環境的版號

git describe --tags --abbrev=0 --match  "b-[0-9]*

實作中,遇到在power shell 中執行 git log 中文字顯示都是亂碼

  1. 因為git 預設編碼是 utf-8,而且們的Commit Message ,需要透過 git 指令設定為big5。
git config --global core.quotepath false 
git config --global gui.encoding big5
git config --global i18n.commit.encoding big5
git config --global i18n.logoutputencoding big5 
  1. 如果是英文作業系統,需要到控制台>系統管理>地區設定調整語系編碼。 Windows系統地區設定為中文繁體台灣

P.S. 也可以透過 chcp 950 指令來測試作業系統,是不是支援 big5 編碼

執行畫面

  1. 執行時,顯示上一版的 Beta 版號,並要求輸入此次進 Beta 的版號 PowerShell顯示上一版號並輸入新版號

  2. 執行完成 PowerShell顯示ReleaseNote產生成功訊息

  3. 成果 會將 Git log commit message ,自動附加在Release Note 的最上方 記事本顯示自動生成的 Release Notes 內容

Auto generate release note script

在過程開發過程中,我原先用了 DOS 指令去撰寫,真的寫的有點太痛苦,後來聽同事的建議採用 Power Shell,確實程式碼簡潔的很多,也節省了很多時間及力氣。

git config --global core.quotepath false 
git config --global gui.encoding big5
git config --global i18n.commit.encoding big5
git config --global i18n.logoutputencoding big5 
$OutputEncoding = New-Object -typename System.Text.UTF8Encoding

$lastVersion = git describe --tags --abbrev=0 --match  "b-[0-9]*"
Write-Host "Last Version $lastVersion"

$newTag = Read-Host 'Please Enter New Git Tag Name. EX:b-3.0.48  '
# $lastVersion = Read-Host 'Please Enter lastVersion  '


# $newTag= "b-3.0.1"
# $lastVersion = git describe --tags --abbrev=0 --match  "b-[0-9]*"
Write-Host "$lastVersion "
git tag -f $newTag
$fullVersionNo = $newTag.Split("-")[1]
$versionCharArray =$fullVersionNo.Split(".")


$bigVersion = ($versionCharArray[0],$versionCharArray[1]) -join "."
Write-Host $bigVersion

[string[]]$lines = git log --pretty="%n|%h|%ai|%s" "$lastVersion..$newTag"
$datetimeNow = Get-Date -Format "dddd MM/dd/yyyy HH:mm K"
$owner = git config user.name
$newReleaseNote = New-Object System.Collections.ArrayList

# $newReleaseNote.Add("$lastVersion - $newTag")

$newReleaseNote.Add("Date: $datetimeNow")
$newReleaseNote.Add("Version: $fullVersionNo")
$newReleaseNote.Add("Owner: $owner")
$newReleaseNote.Add("")
$newReleaseNote.Add("Feature:")
foreach ($line in $lines) {
     $line = $line.Trim()
	 # $newReleaseNote.Add("$line")
     if ([String]::IsNullOrEmpty($line)) {
       continue
     }
     else
	 {
	 $Matches = $line.Split("|")
       $hash = $Matches[1]
       $datetime = $Matches[2]
       $subject = $Matches[3]
	   $newReleaseNote.Add("$datetime : $subject")
	   Write-Host "$hash / $datetime / $subject"
     }
     
 }
$newReleaseNote.Add("")
$newReleaseNote.Add("===================================")

@($newReleaseNote) +  (Get-Content -Encoding utf8  "./ReleaseNote/ChangeLog/$bigVersion.txt")  | Set-Content -Encoding utf8  "./ReleaseNote/ChangeLog/$bigVersion.txt"  

Write-Host "ReleaseNote 產生成功"

git config --global gui.encoding utf8
git config --global i18n.commit.encoding utf8
git config --global i18n.logoutputencoding utf8

作者

Mark Ku

擁有 10+ 年經驗的資深軟體工程師,現為 AI 應用 Builder,專注於大型平台架構與簡化複雜系統設計,從電商系統到訂閱與收費平台,結合 AI Agent、AI 整合與自動化開發,打造高效率且可持續演進的產品技術基礎。閱讀更多

覺得這篇有幫助?

作者做的免費工具、每日 Podcast 與電子報,都在這裡。

Mark Ku · 本文採用 CC BY 4.0 授權,轉載請註明作者並附上原文連結。

留言

訂閱電子報

訂閱後即時收到新文章通知,不錯過任何技術分享。

提交即表示同意接收電子報,隨時可

熱門文章

View all
Mark Ku
··603

Oracle Cloud 永久免費方案 Linux 主機及固定 IP :0 元打造雲端解決方案

Oracle Cloud 永久免費方案 Linux 主機及固定 IP :0 元打造雲端解決方案
Mark Ku
··440

告別 Postman 收費陷阱!開源 Git 原生 API 測試神器 Bruno 實戰指南

告別 Postman 收費陷阱!開源 Git 原生 API 測試神器 Bruno 實戰指南
Mark Ku
··323

一款免費開源類似於 Notion 類知識庫系統 — Outline Wiki 佈署與備份全攻略

一款免費開源類似於 Notion 類知識庫系統 — Outline Wiki 佈署與備份全攻略
Mark Ku
··239

打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1

打造高效 API 管理平台:從 0 開始部署 Kong Gateway - Part 1
Mark Ku
··222

在 Ubuntu 上設置 Samba 來共享資料夾,讓 Windows 11 用戶可以存取

在 Ubuntu 上設置 Samba 來共享資料夾,讓 Windows 11 用戶可以存取
Mark Ku
··199

訓練自己的 AI 語音:硬體門檻、開源模型比較與 LoRA 微調

訓練自己的 AI 語音:硬體門檻、開源模型比較與 LoRA 微調