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 分支有推送时,才进行自动格式化

运行效果如下

867fff605c5dff3da3c79796a805ea42.png

对于 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Notion,我来,语雀,有道等几个云笔记

最近打算放弃wolai产品的使用,所以有必要总结一下这些年用过的那些笔记。从最早开始用Evernote,然后麦库,为知,然后有道,onenote,一直到Notion,我来,语雀等等,都有各自的…

玩转Javascript 给JS写测试

给js写测试已经不是什么稀奇的事情了,最近项目里用了jasmine和JsTestDriver两种js测试框架。JsTestDriver易于与持续构建系统相集成并能够在多个浏览器上运行测试轻松实现TDD风格的开发。当在项目中配置好JsTestDriver以后,如同junit测试java文件一般&am…

Android 之自定义view实现水波纹效果

在实际的开发中,很多时候还会遇到相对比较复杂的需求,比如产品妹纸或UI妹纸在哪看了个让人兴奋的效果,兴致高昂的来找你,看了之后目的很明确,当然就是希望你能给她; 在这样的关键时候,身子板就一…

FFLIb Demo CQRS

使用FFLIB 构建了一个demo,该demo模拟了一个常见的游戏后台架构,该demo主要有一下亮点: FFLIB 实现进程间通信非常方便基于CQRS 思想构建LogicServer使用Event Publish/Subscribe, 实现各个模块的解耦合基于Event 实现实体对象的单…

【自定义标签开发】01-标签简介和开发第一个标签

自定义标签简介自定义标签主要用于移除Jsp页面中的java代码。要使用自定义标签移除jsp页面中的java代码,只需要完成以下两个步骤:1.编写一个实现Tag接口的java类,把页面java代码移到这个java类中(标签处理器类)。2.编写标签库描述(tld)文件,在…

三联《少年》创刊,各领域佼佼者畅言新知,帮少年建立思维素养体系!

▲点击查看很多中国小孩的成长是断层的。10岁前被视作可爱稚子,被大人护着走;18岁猛然被定义为成年人,要选择大学、专业,开始面对感情。中间的人生呢?“你是个学生,学习是本职,现在谈什么人生&a…

mysql utf8 bin设置_[mysql]修改collation为utf8_bin

mysql默认字段值区分大小写:character-set-serverutf8collation-serverutf8_bininit-connectSET NAMES utf8;SELECT DEFAULT_CHARACTER_SET_NAME charset, DEFAULT_COLLATION_NAME collationFROM information_schema.SCHEMATA WHERE SCHEMA_NAME billing01;SELECT …

C# WPF MVVM开发框架Caliburn.Micro自定义引导程序④

01—自定义引导程序在上一部分中,我们讨论了Caliburn.Micro WPF应用程序的最基本配置,并演示了与操作和约定相关的两个简单功能。在这一部分中,我想进一步探讨Bootstrapper类。让我们首先将应用程序配置为使用IoC容器。本例中我们将使用内置容…

Android 使用XmlPullParser解析xml

这里我们假设要解析的xml文件名为&#xff1a;test.xml&#xff0c;我们将其放在assets路径中。 xml文件内容为&#xff1a; <?xml version1.0 encodingutf-8 standaloneyes ?> <books><book id"1"><name>Java编程思想</name><pr…

链表之打印两个有序链表的公共部分

题目:打印两个有序链表的公共部分 package com.chenyu.zuo.linkedList; /*** 打印有序链表的公共部分* @author 陈喻*题目:给定两个有序链表的头指针head1和head2,打印出两个链表的公共部分*思路:因为有序*如果head1的值小于head2,则head1往下移动*如果head2的值小于head1,…

批处理for命令详解

批处理for命令详解批处理for命令详解 2008-03-07 11:00 FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能! 看看他的基本格式(这里我引用的是批处理中的格式,直接在命令行只需要一个%号) FOR 参数 %%变量名 IN (相关文件或命令) DO 执行的命令 参数…

趁爸妈不在家约男朋友回家吃饭,然而......

1 有没有男主很脆弱的电影&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 成长期-成熟期-完全体-究极体▼3 千万别在家乱放星巴克的袋子&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 发生了很奇怪的事情▼5 只有你想不到&#xff0c;没…

java泛型不是计算运行时的数据类型

2019独角兽企业重金招聘Python工程师标准>>> package com.ada.data.entity;import java.io.Serializable;import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.MappedSuper…

spark 连接mysql 命令_spark-submit命令包括mysql连接器

我有一个scala对象文件&#xff0c;它在内部查询mysql表做一个连接并将数据写入s3&#xff0c;在本地测试我的代码它运行得很好 . 但是当我将它提交到集群时&#xff0c;它会抛出以下错误&#xff1a;线程“main”java.sql.SQLException中的异常&#xff1a;在org.apache.spark…

C#内建接口:IComparable

这节开一个新的系列&#xff1a;C#内建接口。主要给大家讲一下C#内部给我们定义的一些常用的接口&#xff0c;以及它们是怎么使用的。基本上一节讲一个吧&#xff0c;本节先从IComparable开始。01了解IComparable一般的&#xff0c;值类型的数据比较大小&#xff0c;就是看它俩…

链表之删除单链表倒数第K个节点

删除单链表倒数第K个节点 题目: 删除单链表中倒数第K个节点, 思路: 给我们一个单链表,我们需要删除倒数第K个节点,比如链表每个节点值是1、2、3、4、5、6 K值是2,链表的总长度是6,要得倒数第二个数的值,前面就有6-2=4个的值,如果头结点往下移,移到…

script的defer和async

我们常用的script标签&#xff0c;有两个和性能、js文件下载执行相关的属性&#xff1a;defer和async defer的含义【摘自https://developer.mozilla.org/En/HTML/Element/Script】 This Boolean attribute is set to indicate to a browser that the script is meant to be exe…

WWDC 2013 Session笔记 - Xcode5和ObjC新特性

这是我的WWDC2013系列笔记中的一篇&#xff0c;完整的笔记列表请参看这篇总览。本文仅作为个人记录使用&#xff0c;也欢迎在许可协议范围内转载或使用&#xff0c;但是还烦请保留原文链接&#xff0c;谢谢您的理解合作。如果您觉得本站对您能有帮助&#xff0c;您可以使用RSS或…

难以摸透的直男脑回路......

1 你年纪不小了&#xff0c;该结婚了&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 泰国小哥低成本Cos赛博朋克2077 ▼3 郑爷爷也太会了吧▼4 奇奇怪怪的知识又增加了&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼5 酸奶今天7.1折&#xff08;via.…

数论概论(Joseph H.Silverman) 习题 39.1 $\sqrt{3}$和$\sqrt{5}$的连分数展开中的重复现象...

计算$\sqrt{3}$和$\sqrt{5}$的连分数中的前10项. 解:\begin{align*} \sqrt{3}1\dfrac{1}{\dfrac{1}{\sqrt{3}-1}}\end{align*}\begin{align*} \sqrt{3}1\dfrac{1}{1\dfrac{1}{\dfrac{1}{\dfrac{\sqrt{3}-1}{2}}}}\end{align*}\begin{align*} \sqrt{3}1\dfrac{1}{1\dfrac{1}{2\d…