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:
- build
FormatCode:
# 自动格式化代码机器人,将使用 dotnet format 格式化
# 格式化规则参阅 .editorconfig 文件
stage: build
script:
- "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 平台的更多相关文章
- Codeblocks自动代码格式化+快捷键
Codeblocks自动代码格式化+快捷键 - u010112268的博客 - CSDN博客 https://blog.csdn.net/u010112268/article/details/8110 ...
- 取消Eclipse的自动代码格式化
前段时间在Eclipse里面设置了java文件保存时自动格式化,在java->Code Style->Formatter里设置了自定义的格式化的样式,这样每次保存后都会自动格式化代码,用了 ...
- Codeblocks自动代码格式化快捷键(自带)
代码区域右击 点format use AStyle 估计也就是考试竞赛逼着用这个
- vscode代码格式化快捷键及保存时自动格式化
一.实现vs code中代码格式化快捷键:[Shift]+[Alt]+ F 二.实现保存时自动代码格式化: 1)文件 ------.>[首选项]---------->[设置]: 2)搜索 ...
- Myeclipse学习总结(3)——Myeclipse中的代码格式化、注释模板及保存时自动格式化
设置Myeclipse中的代码格式化.注释模板及保存时自动格式化 1:设置注释的模板: 下载此模板: codetemplates.xml This XML file does not appear ...
- 超详细的Xcode代码格式化教程,可自定义样式。
超详细的Xcode代码格式化教程,可自定义样式. 为什么要格式化代码 当团队内有多人开发的时候,每个人写的代码格式都有自己的喜好,也可能会忙着写代码而忽略了格式的问题.在之前,我们可能会写完代码后,再 ...
- JS代码格式化
JS代码格式化也就是规范化,保留必要的换行和缩进使代码阅读起来更容易.团队协同工作时会有相应的标准,大家要保证统一的代码风格,这样在合并代码的时候才不容易出问题.通过快捷键Ctrl+Shift+F进行 ...
- vs Code + Eslint + Prettier 代码格式化(vue开发)
一.什么是Eslint 通过查看eslint官网(官网传送门),我们就可以知道,eslint就是一个用来识别 ECMAScript/JavaScript 并且按照规则给出报告的代码检测工具,主要用来检 ...
- Java代码格式化规范实践总结
目标说明 统一良好的代码格式规范可以有效提升开发团队之间的「协作效率」,如果不同的开发团队或者开发人员采用不同的代码格式规范,那么每次Format代码都会导致大量的变化,在Code Review及Me ...
随机推荐
- centos7 配置ftp服务器搭建(匿名访问,以及本地登录)
大家好,今天来给大家分享一个基于centos 7的ftp服务器搭建 实现功能:匿名访问,本地登录 查看系统版本: [root@localhost ~]# cat /etc/redhat-release ...
- Scrum Meeting 0609
零.说明 日期:2021-6-9 任务:简要汇报两日内已完成任务,计划后两日完成任务 一.进度情况 组员 负责 两日内已完成的任务 后两日计划完成的任务 困难 qsy PM&前端 完成前端功能 ...
- [no_code]团队贡献分分配规则
项目 内容 2020春季计算机学院软件工程(罗杰 任健) 2020春季计算机学院软件工程(罗杰 任健) 作业要求 团队贡献分分配规则 我们在这个课程的目标是 远程协同工作,采用最新技术开发软件 这个作 ...
- STM32 PWM功能在关闭时GPIO电平不确定的情况
刚开始接触STM32,遇到一个项目中出现在产品调试中出现在关闭PWM输出时,GPIO电平有不确定的情况.在网上查阅资料发现大神们是这样解释的:PWM在一个脉冲没有结束时关闭输出,会导致GPIO电平不确 ...
- 字符串与模式匹配算法(三):KMP算法
一.KMP算法介绍 KMP算法与前面的MP算法一脉相承,都是充分利用先前匹配的过程中已经得到的结果来避免频繁回溯.回顾一下MP算法,如下图的模式串偏移,当前模式字符串P的左端的p0与目标字符串T中tj ...
- 同人逼死官方系列!从 DDC 嗅探器到 sddc_sdk_lib 的数据解析
从 DDC 嗅探器到 sddc_sdk_lib 的数据解析 之前的 DDC 协议介绍 主要讲了设备加入.退出以及维持设备状态,而 SDK框架 sddc_sdk_lib 解析 主要讲了 SDK 库的结构 ...
- Swarm+Docker+Portainer(集群,图形化)
参考文章 https://blog.csdn.net/u011781521/article/details/80469804 https://blog.csdn.net/u011781521/arti ...
- 浅讲.Net 6 并与之前版本写法对比
介绍 昨天vs2022正式版已经推出了,估计很多人已经下载并开始创建.Net 6 开始尝鲜了, 本节我简要的给大家介绍一下.Net 6的一些改动. 正文 本次.Net6带来最明显的变化就是: 采用顶级 ...
- Android-ION内存管理简介
ION内存管理简介 https://www.jianshu.com/p/4f681f6ddc3b http://kernel.meizu.com/memory%20management%20-%20i ...
- 解决IntelliJ IDEA的Plugins无法访问Marketplace去下载插件
本文图文讲解如何解决IntelliJ IDEA的Plugins无法访问Marketplace去下载插件. 默认打开IDEA的Plugins会加载很久,最后什么也没加载出来. 这时我们可以给插件市场设置 ...