search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

透過批次檔 (Batch File) 抓取 Git 的 version-tag 來自動更新 firmware 的版本資訊 | 不只是個工程師

身為一個韌體工程師,做好韌體的版本控制是非常重要的一環,而版本控制最好要能做到自動化不但可以減少因人員產生的錯誤,還可以減少工作負擔。
因此如何透過 Git 搭配 GitHub/GitLab 來達到版本控制與 commit message rule 可以參考之前的文章:半自動化版本控制與 git commit message 標準化流程
而今天要讓自動化更加成長茁壯!!!

透過之前建立的 git version tags 來產生版本資訊並輸出成 “version.h” 來讓 firmware c/c++ code include

整個過程需要做到下列幾項事情:

  • 從 Git 上抓取 version-tag
  • 將 version-tag 拆成 major, minor and patch
  • 產生 “version.h” file 然後將 major, minor and patch 寫入

git describe --abbrev=0 --always --tags 來抓取離當前提交的內容最近的 tag,並且用 –abbrev=0 將 tag 後的描述資訊隱藏起來。

接著透過 windows command line 的 delims 命令以字元 ‘.’ 來區隔開 major, minor and patch。

最後透過 echo and >> %1 來將資料以定義好的格式寫入文件中就完成了!

然後為了讓每次要做的事情簡單單一且可重複,將上述指令寫成批次檔來處理,以後就只需要呼叫批次檔就可以了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@echo off
if "%1"=="" (
echo Usage: %0 ^
goto :eof
)
for /F "usebackq" %%v in (`"git describe --abbrev=0 --always --tags"`) DO (
echo #ifndef __VERSION_H__ > %1
echo #define __VERSION_H__ >> %1
echo.>> %1
for /f "tokens=1,2,3 delims=." %%i in ("%%v") DO (
echo #define VERSION_MAJOR %%i >> %1
echo #define VERSION_MINOR %%j >> %1
echo #define VERSION_PATCH %%k >> %1
)
for /F "usebackq" %%d in (`"git show -s --format=format:%� --date=short"`) DO (
for /f "tokens=1,2,3 delims=-" %%i in ("%%d") DO (
echo #define BUILD_DATE_YEAR %%i - 2000 >> %1
echo #define BUILD_DATE_MONTH %%j >> %1
echo #define BUILD_DATE_DAY %%k >> %1
)
)
echo.>> %1
echo #endif /* __VERSION_H__ */ >> %1
echo.>> %1
echo /*** (C^) COPYRIGHT LEOLI ***/ >> %1
)

接著在 windows 中受到 Git 管控並且有提交過 sem-ver 格式的 tag 的資料夾路徑內建一個文件並在該文件內貼上上述內容,並將檔名改成 “filename.bat”。
然後在該路徑打開終端機執行 filename.bat "version.h" 就會自動執行上述指令並在 “version.h” 檔案內寫入上述資訊囉。

只要將批次檔加入受到 Git 管控的 code 內,並透過編譯器(compiler) 的 pre-build command 在編譯之前呼叫產生 “version.h” 並 include 就可以在每次 build code 前自動更新 version information 並同步囉!如何在編譯器(compiler)中加入編譯前/編譯後的動作,以及一些坑!

完整的 sample code 我放在 github 上了,歡迎下載玩玩看!

github sample code:https://github.com/leoli-git/VersionAutoGen



熱門推薦

本文由 leotalk-engineerlifecom 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦