dotnet 将自动代码格式化机器人带入团队 GitLab 平台
給團隊帶入一個 代碼格式化機器人 能提升團隊的幸福度,讓團隊的成員安心寫代碼,不用關注代碼格式化問題,將格式代碼這個粗活交給機器人去做。同時也能減少在代碼審查里撕格式化問題的時間,讓更多的時間投入到更有價值的工作上
本文來告訴大家如何給團隊的 GitLab 平臺上帶入一個自動代碼格式化機器人的方法
本文所使用的工具和代碼都是完全開源的,請看?https://github.com/dotnet-campus/dotnetcampus.DotNETBuildSDK
我所在的團隊,用的代碼平臺只有兩個,分別是 GitHub 和 GitLab 這兩個。其中 GitHub 上有 GitHub 的 Action 平臺,基于此平臺上,做啥都特別方便,在去年我就完成了給 GitHub 倉庫配置自動代碼格式化機器人,請看?dotnet 基于 dotnet format 的 GitHub Action 自動代碼格式化機器人
在咱 dotnet 里面,有官方發布的專門用于代碼格式化的工具?dotnet format?工具。此工具也在 GitHub 上開源,請看?dotnet/format: Home for the dotnet-format command
引入自動代碼格式化機器人,相當于雇一個免費的工具人幫你不斷進行 ctrl+k ctrl+d 進行格式化代碼
想要在 GitLab 的倉庫上引入 C# 自動代碼格式化機器人,可以通過組合兩個工具來實現,第一個工具是?dotnet format?工具,進行代碼格式化。另一個工具是將格式化完成的代碼進行推送和創建合并請求
為了方便大家使用,我編寫了另一個新的工具,此工具合入了代碼格式化和推送代碼創建合并請求的功能,使用方法特別簡單。只有一句命令行調用即可完成格式化代碼和推送。此工具基于 dotnet tool 發布,大家部署起來也只需要一句話
給團隊引入自動代碼格式化機器人,只需要以下兩句代碼,分別是部署和執行
- "dotnet tool update -g dotnetCampus.GitLabCodeFormatBot" # 安裝或更新工具- "AutomateFormatCodeAndCreateGitLabMergeRequest -Token $Token" # 格式化代碼,推送代碼和創建合并請求如以下代碼就是我所在團隊里面的?.gitlab-ci.yml?配置,只需要如下幾句話即可自動在 dev 分支有推送的時候,自動格式化代碼,然后創建一個創建合并請求
stages:- buildFormatCode:# 自動格式化代碼機器人,將使用 dotnet format 格式化# 格式化規則參閱 .editorconfig 文件stage: buildscript:- "chcp 65001" # 解決中文亂碼- "dotnet tool update -g dotnetCampus.GitLabCodeFormatBot" # 安裝或更新工具- "AutomateFormatCodeAndCreateGitLabMergeRequest -Token $Token" # 格式化代碼,推送代碼和創建合并請求only:- dev # 只有在 dev 分支有推送時,才進行自動格式化運行效果如下
對于 AutomateFormatCodeAndCreateGitLabMergeRequest 命令,是支持傳入豐富的參數的,參數列表如下
-CodeFormatBranch: 用于給格式化代碼使用的分支,默認是 t/bot/FixCodeFormatting 分支
-GitLabPushUrl: 用于上傳代碼的 GitLab 地址,格式如?git@gitlab.sdlsj.net:lindexi/foo.git?地址。可選,默認將通過環境變量拼接?git@$CI_SERVER_HOST:$CI_PROJECT_PATH.git?地址
-GitLab: GitLab 地址,如?https://gitlab.sdlsj.net?。可選,默認將通過環境變量獲取 GitLab 的?$CI_SERVER_URL?變量
-Token: 擁有創建 MergeRequest 的 Token 值,可在 GitLab 上的?profile/personal_access_tokens?生成。可選,默認將通過環境變量獲取 GitLab 的?Token?變量。此變量需要運維手動設置才有值,詳細請參閱下文
-ProjectId: 將要創建 MergeRequest 的倉庫項目 Id 值。可選,默認將通過環境變量獲取 GitLab 的?$CI_PROJECT_ID?常量,也就是當前項目
-TargetBranch: 將從 SourceBranch 合并到 TargetBranch 分支。可選,默認將通過環境變量獲取 GitLab 的?$CI_DEFAULT_BRANCH?分支,也就是倉庫的默認分支
-SourceBranch: 將從 SourceBranch 合并到 TargetBranch 分支。可選,默認將通過環境變量獲取 GitLab 的?$CI_COMMIT_BRANCH?分支,也就是當前 CI 正在運行分支
-Title: 提交 MergeRequest 的標題。可選,默認是 "[Bot] Automated PR to fix formatting errors" 字符串
在 GitLab 上,將會在調用命令時,通過環境變量傳入很多變量,因此以上的大部分可選的命令都是可以不用輸入
有一點需要特別關注的是 Token 的生成,這個是需要大家自己配置的,詳細請參閱?dotnet tool 創建 GitLab 合并請求 Merge Requests 工具
如果覺得機器人默認自動格式化出來的內容不符合你的預期,沒關系,自動格式化工具的格式化的配置,是依靠倉庫的?.editorconfig?文件進行配置,更多請參閱?.NET code style rule options - .NET
總結
以上是生活随笔為你收集整理的dotnet 将自动代码格式化机器人带入团队 GitLab 平台的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MAUI 跨平台播客应用程序(Conf
- 下一篇: C# WPF MVVM开发框架Calib