给团队带入一个 代码格式化机器人 能提升团队的幸福度,让团队的成员安心写代码,不用关注代码格式化问题,将格式代码这个粗活交给机器人去做。同时也能减少在代码审查里撕格式化问题的时间,让更多的时间投入到更有价值的工作上

本文来告诉大家如何给团队的 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 平台相关推荐

  1. dotnet 基于 dotnet format 的 GitHub Action 自动代码格式化机器人

    是不是大家也会觉得代码审查里面审查代码格式化问题是无意义的,但是不审查又觉得过不去?是否有个专门的工具人,用来协助修复代码格式化的问题?本文来安利大家一个特别好用的方法,使用 dotnet 完全开源的 ...

  2. 取消Eclipse的自动代码格式化

    前段时间在Eclipse里面设置了java文件保存时自动格式化,在java->Code Style->Formatter里设置了自定义的格式化的样式,这样每次保存后都会自动格式化代码,用了 ...

  3. VSCode代码格式化快捷键及保存时自动格式化

    一.实现vs code中代码格式化快捷键:[Shift]+[Alt]+F 二.实现保存时自动代码格式化: 1)文件 ------.>[首选项]---------->[设置]: 2)搜索em ...

  4. Myeclipse学习总结(3)——Myeclipse中的代码格式化、注释模板及保存时自动格式化

    设置Myeclipse中的代码格式化.注释模板及保存时自动格式化 1:设置注释的模板: 下载此模板:  codetemplates.xml

  5. idea自动整理代码快捷键_MDK进阶使用教程,快捷启动任意软件,自动整理格式化代码,方便代码整理可以很好 的提高效率...

    MDK进阶使用教程,快捷启动任意软件,自动整理格式化代码,方便代码整理可以很好 的提高效率 以下内容才是关键 AStyle插件 这款AStyle插件挺好用的,这里也给大家推荐一下. 代码格式化插件,顾 ...

  6. Jupyter Notebook自动补全代码格式化

    Jupyter Notebook自动补全&代码格式化 安装 nbextensions 安装:pip install jupyter_contrib_nbextensions -i https: ...

  7. xcode7代码自动排版(格式化)

    xcode代码缩进和格式化,都要选中,如果想整个文件都格式化,请先comand+a全选中,然后 commond+[ 向左缩进 commond+] 向右缩进 control+i 代码格式化

  8. C/C++ 项目必读:代码格式化和静态分析检查的一站式工作流 Cpp Linter

    本篇是关于 C/C++ 代码格式化和静态分析检查的实践分享. 目前 C/C++ 语言的代码格式化和检查工具使用的最为广泛的是 LLVM[1] 项目中的 Clang-Format[2] 和 Clang- ...

  9. 使用Prettier配合TsLint/Eslint 统一前端代码格式化规则,保证代码质量

    背景 在开发前端项目时,每个人的开发习惯不同,用的IDE也不同,有的人喜欢用VSCode,有的人喜欢用Webstorm,而各个编译器默认的格式化规则有不一致,这就导致了不同IDE格式化出来的代码是不一 ...

最新文章

  1. 73. Leetcode 230. 二叉搜索树中第K小的元素 (二叉搜索树-中序遍历类)
  2. html5 通信方式,(原生js页面通信)关于html5的PostMessage的用法总结
  3. [转载] Java基础——关联、聚合、组合
  4. 湖北工业大学计算机学院王泽建,“指尖年轮,感恩成长”计算机学院2019届毕业生晚会圆满举行...
  5. JAVA WBE入门之HTML的使用(超详细,必看)附实例和代码
  6. lua脚本java_java操作lua脚本
  7. FPGA时钟电路PCBlayout设计原则
  8. 变色龙引导启动看不到Mac分区盘符的解决办法
  9. 《考试脑科学》读后感
  10. nmds与mds的区别_通过ggplot2为NMDS的椭圆添加特定的形状和线型
  11. EDA 电子设计自动化VHDL系列课程8 – 脉冲信号发生器
  12. dedecms{dede:sql}{dede:php}标签的用法
  13. Python开发培训怎么样?
  14. 与其去雄安买房,不如找中企动力建自己的平台
  15. 高德地图的circle圈
  16. uni-app 超好用的时间选择器组件(起止时间)
  17. 关于从3维空间进入4维空间的想法
  18. 如何直接修改exe文件
  19. document.createEvent建立自定义事件
  20. 如何用panda3d写一个游戏

热门文章

  1. hql Hibernate.gethibernatetemplate()
  2. Windows Azure 安全最佳实践 - 第 6 部分:Azure 服务如何扩展应用程序安全性
  3. 转JS总结1--(CSS书写规范和正则表达式)
  4. nginx+PHP+PHP-FPM(FastCGI)在Ubuntu上的安装和配置
  5. sql2005数据导入出错问题
  6. oracle sys可以登录,system权限不足,解决方法
  7. 单一职责原则--设计模式系列
  8. ArrayList 的实现原理
  9. ArrayBlockingQueue, LinkedBlockingQueue, ConcurrentLinkedQueue, RingBuffer
  10. NS 802.11函数分析(一)