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

是不是大家也会觉得代码审查里面审查代码格式化问题是无意义的,但是不审查又觉得过不去?是否有个专门的工具人,用来协助修复代码格式化的问题?本文来安利大家一个特别好用的方法,使用 dotnet 完全开源的专业格式化工具 dotnet format 配合 GitHub 的自动构建 Action 做的自动代码格式化机器人,这个机器人可以被指定到特定时机,如每天晚上或者每次代码合并等,进行代码格式化,格式化完成之后,可以选择直接推送或者提代码审查

这个方法将需要用到 dotnet 完全开源的专业格式化工具 dotnet format 工具,请看 https://github.com/dotnet/format

用法十分简单,可以复制本文最后的 GitHub 的自动构建 Action 的脚本,放在仓库的 .github\workflows 文件夹里面。现在请让我告诉大家这个构建脚本的细节

在 .github\workflows 文件夹里面创建的所有 yml 文件都会当成构建脚本,每个脚本就应该给定一个名字,如下面代码

name: Daily code format check

然后设置构建脚本的触发时机,如下面代码设置了在推送了 master 分支时,触发构建脚本

on: push:branches: - master

其他触发时机等,还请大家去阅读官方文档

下一步是指定运行在什么设备上,如下面代码

jobs:dotnet-format:runs-on: windows-latest

接下来就是将代码拉下来了,可以通过如下代码将当前分支的最新代码拉下来

    steps:- name: Checkout repouses: actions/checkout@v2with:ref: $

本文的格式化方法是使用 dotnet format 工具格式化的,在使用这个工具之前,需要先安装,请使用如下代码进行安装

      - name: Install dotnet-formatrun: dotnet tool install -g dotnet-format

原本可以使用一句命令 dotnet format 就进行格式化,但是当前遇到的问题是,如果代码格式化没有任何文件更改,那么此时就不应该做创建新的分支和开启代码审查了,因此就需要用到 jfversluis 大佬的 dotnet-format 脚本。这个脚本可以输出参数,用于在后续步骤判断,如果没有文件更改,也就是没有代码需要格式化就不需要开启代码审查了

      - name: Run dotnet formatid: formatuses: jfversluis/dotnet-format@v1.0.5with:repo-token: $action: "fix"only-changed-files: true # only works for PRs# workspace: "Xamarin.Forms.sln" 默认根路径只有一个 sln 文件,可以忽略这一行

如果自己的仓库里面的根路径,也就是放在和 .git 文件夹所在的相同的文件夹,存在了一个 sln 文件,那么可以忽略 workspace 参数

调用了上面代码脚本之后,将会输出,可以使用如下代码判断,是否有文件更改

if: steps.format.outputs.has-changes == 'true'

接下来是 commit 代码,如果代码文件有更改的话

      - name: Commit filesif: steps.format.outputs.has-changes == 'true' # 如果有格式化,才继续# 下面将使用机器人的账号,你可以替换为你自己的账号run: |git config --local user.name "github-actions-dotnet-formatter[bot]"git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"git commit -a -m 'Automated dotnet-format update'

上面代码的邮件等是 GitHub 机器人的账号,你可以替换为你的账号

最后一步是开启代码审查,然后指定代码审查者

      - name: Create Pull Requestif: steps.format.outputs.has-changes == 'true' # 如果有格式化,才继续uses: peter-evans/create-pull-request@v3with:title: '[Bot] Automated PR to fix formatting errors'body: |Automated PR to fix formatting errorscommitter: GitHub <noreply@github.com>author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com># 以下是给定代码审查者,需要设置仓库有权限的开发者assignees: lindexi,walterlvreviewers: lindexi,walterlv# 对应的上传分支branch: t/bot/fix-codeformatting

这样就能完成了在开发者将代码合并或推送到主分支的时候,自动尝试代码格式化,如果代码格式化有文件更改了,那么开启一个代码审查,如下图

感谢 jfversluis 大佬的 dotnet-format 脚本,和 Peter Evans 的创建代码审查的 create-pull-request 脚本

我比较推荐使用这个方法,尽管 dotnet format 工具是专业的代码格式化工具,不会让格式化前后的代码的 IL 有变更。但是我依然推荐进行一次代码审查

其实不使用 jfversluis 大佬的脚本也可以,因为 Peter Evans 的创建代码审查的 create-pull-request 脚本会自动判断如果没有 commit 就不创建代码审查,因此只需要跳过 commit 的失败就可以了,如下面代码

      - name: Install dotnet-formatrun: dotnet tool install -g dotnet-format- name: Run dotnet formatrun: dotnet format- name: Commit files# 下面将使用机器人的账号,你可以替换为你自己的账号run: |git config --local user.name "github-actions-dotnet-formatter[bot]"git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"git commit -a -m 'Automated dotnet-format update'continue-on-error: true

可以看到代码十分简洁

而另外的方法是在每个开发者开启代码审查的时候,尝试格式化他的代码,这样可以让代码审查者也许会更开森,代码十分简单,请看下面

name: Format check on pull request
on: pull_request
jobs:dotnet-format:runs-on: windows-lateststeps:- name: Install dotnet-formatrun: dotnet tool install -g dotnet-format- name: Checkout repouses: actions/checkout@v2with:ref: $- name: Run dotnet formatid: formatuses: jfversluis/dotnet-format@v1.0.5with:repo-token: $action: "fix"only-changed-files: true- name: Commit filesif: steps.format.outputs.has-changes == 'true'run: |git config --local user.name "github-actions[bot]"git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"git commit -a -m 'Automated dotnet-format updateCo-authored-by: $ <$+$@users.noreply.github.com>'- name: Push changesif: steps.format.outputs.has-changes == 'true'uses: ad-m/github-push-action@v0.5.0with:github_token: $branch: $

但是这个方法也许会让开发者不开森,因为他下一次上传代码的时候需要先拉代码,也许因为格式化给他了额外的改动。另外的,如 Xamarin 仓库的注释,其实代码推送无法用在 fork 的仓库上,也就是说如果这个代码审查是另一个开发者在他 fork 的仓库里面发起的,此时的这个方法将会失效

我现在在 dotnetCampus.Ipc 就接入这个自动代码格式化机器人,用起来还不错

构建脚本的全部代码请看下面

name: Code format checkon: push:branches: - master
jobs:dotnet-format:runs-on: windows-lateststeps:- name: Checkout repouses: actions/checkout@v2with:ref: $- name: Install dotnet-formatrun: dotnet tool install -g dotnet-format- name: Run dotnet formatrun: dotnet format- name: Commit files# 下面将使用机器人的账号,你可以替换为你自己的账号run: |git config --local user.name "github-actions-dotnet-formatter[bot]"git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"git commit -a -m 'Automated dotnet-format update'continue-on-error: true- name: Create Pull Request# if: steps.format.outputs.has-changes == 'true' # 如果有格式化,才继续uses: peter-evans/create-pull-request@v3with:title: '[Bot] Automated PR to fix formatting errors'body: |Automated PR to fix formatting errorscommitter: GitHub <noreply@github.com>author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com># 以下是给定代码审查者,需要设置仓库有权限的开发者assignees: lindexi,walterlvreviewers: lindexi,walterlv# 对应的上传分支branch: t/bot/fix-codeformatting

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

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

相关文章

[导入]ASP.NET MVC的WebSite模式(with mvc membership)

一直极其讨厌web application,感觉不干净&#xff0c;不符合个人喜好完美纯净的代码的癖好&#xff0c;再加上不是单页程序集&#xff0c;性能也大打折扣。所以这次在决定用asp.net MVC写这个网站的时候花了一点时间移到Web site模式下面来。 其实不是很麻烦&#xff0c;修改We…

GPG key retrieval failed: [Errno 14]

环境&#xff1a;CentOS 6.5 x64今天yum安装的时候&#xff0c;报出如下错误&#xff1a;warning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY Retrieving key from http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6GPG key retrieval fa…

学妹面试拼刀刀被问Java策略模式是什么鬼?哈哈哈哈

学妹面试拼刀刀被问Java策略模式是什么鬼&#xff1f;哈哈哈哈 学妹跟我讲怎么机智面对的 我呆了&#xff01; &#x1f9fe;1.策略模式到底是什么鬼捏&#xff1f;&#xff1f;&#xff1f;&#x1f440; 策略模式属于对象的行为模式。其用意是针对一组算法&#xff0c;将每一…

基于Visual C++2010与windows SDK fo windows7开发windows7平台的tabletpc应用(1)-手写数学公式输入...

搭建好Visual C2010与windows SDK fo windows7的开发平台以后&#xff0c; 小试牛刀&#xff0c;检验下开发windows7的下的tabletpc应用&#xff0c;这个东西财务记账比较多&#xff0c; 大家先看效果&#xff0c;然后讲解详细代码 详情请见代码注释 // Windows 头文件 #includ…

你所阅读的,决定你是什么样的人

全世界只有3.14 % 的人关注了爆炸吧知识真正决定人与人之间的差距的&#xff0c;其实是我们对事物的见识与内心的格局&#xff0c;见识的深浅决定人生的深浅&#xff0c;格局的大小决定了人生之路是宽是窄。今天给大家推荐几个有深度、有想法的公众号&#xff0c;希望能够给你带…

下图为双总线结构机器的数据通路_海康机器人为物流加码:进击吧,双11新“打工人”...

今年的双11开启了迄今最长“战线”据国家邮政局初步预计&#xff0c;11月1日-16日全行业处理的邮(快)件业务量将达57.8亿件同比增长47%左右双11期间业务量将达29亿件比去年同期增长28%庞大的业务量和超快的物流速度&#xff0c;离不开智能终端、物联网、大数据等多重技术的支持…

设计模式之状态

状态模式介绍状态模式是一种行为设计模式&#xff0c;让你能在一个对象的内部状态变化时改变其行为&#xff0c;使其看上去就像改变了自身所属的类一样。根据状态不同&#xff0c;行为也不同状态模式描述的是一个行为下的多种状态变更&#xff0c;比如我们最常见的一个网站的页…

故障排除

公司各办事处反映收不到邮件。测试时发现都正常&#xff0c;可是为什么收不到邮件呢&#xff0c;后来再测试&#xff0c;逐一排除&#xff0c;可能是防火墙或所在计算机的问题。可还是不能找到具体的问题所在。于是请公司一个高手协助搞定。只要重新创建一条规则即可&#xff0…

一个不成功人士的“成功之道”

有人这样说我&#xff1a;“他是只自学不成才。”听到这样不中听的话&#xff0c;我一点也不生气。因为&#xff0c;人家说的的确是事实&#xff0c;我的确是一个不成才的人&#xff0c;的确是一个不成功人士。1977年&#xff0c;我高中毕业&#xff0c;参加了第一届恢复的高考…

阿里最新面试必备项之Java的String类,持续更新中!

最新腾讯面试必备项之Java的String类&#xff0c;持续更新中&#xff01; 1.1 String的特性 String类&#xff1a;代表字符串。Java程序中的所有字符串字面值&#xff08;如“abc”&#xff09;都作为此类的实例实现。 String是一个final类&#xff0c;代表不可变的字符序列。…

硬盘安装 solaris

硬盘安装solaris10 1、分区简介&#xff1a;(以我的硬盘为例&#xff0c;只做参考)  第一主分区 10G C盘 FAT32格式 安装WINDOWS XP  第二主分区 15G 空闲未分配 准备留给Solaris10  扩展分区分为三个逻辑盘&#xff1a;  D盘 24G FAT32格式  E盘 26G FAT32格式  F…

Juster的MVP奋斗之路

大家好是朱震&#xff08;juster zhu&#xff09;MVP唯一id是5004326&#xff0c;这里主要给大家分享一下参选上MVP喜悦。首先非常感谢大伙对我的支持&#xff0c;在过去的8个多月里几乎每天都在写博客和做视频以及回答技术问题中度过。整个过程非常艰苦&#xff0c;身体不好真…

接地脚是什么意思_帮个忙老铁们 急急急!!!什么叫相地接错并缺地。?_天涯问答_天涯社区...

偶的上帝电路地线&#xff1a;在电路设计时&#xff0c;主要是防止干扰与提高无线电波的辐射效率。地线被广泛作为电位的参考点&#xff0c;为整个电路提供一个基准电位。此时&#xff0c;地线未必与真正的大地相连&#xff0c;而往往与输入电源线的一根相连(通常是零线)&#…

换工作了,开始用金蝶的BOS了,好多东西都要学啊!

原来一直搞Web方面的&#xff0c;现在开始搞金蝶那一套了&#xff0c;金蝶EAS BOS&#xff0c;原来都没有接触过的&#xff0c;要好好学习哦&#xff01;感觉金蝶的东东还挺好的哦&#xff01;转载于:https://blog.51cto.com/huqianhao/955253

被嫌弃的蝗虫的一生

全世界只有3.14 % 的人关注了爆炸吧知识转载来源&#xff1a;混子曰部分素材源于网络&#xff0c;版权归原作者所有如有侵权请留言联系删除&#xff0c;感谢合作选购数学科普正版读物严选“数学思维好物”送给孩子的阅读礼物 | 办公室神器有益孩子一生的玩具 | 居家高科…

Windows Server 2008关闭默认windows共享

Windows启动时都会默认打开admin$ ipc$ 和每个盘符的共享&#xff0c;对于不必要的默认共享&#xff0c;一般都会把它取消掉&#xff0c;可当又需要打开此默认共享时&#xff0c;又该从哪里设置呢&#xff0c;一般来说有两个地方&#xff0c;MSDOS命令和计算机管理共享文件夹&a…

直接裂开!京东二面被问SpringBoot整合MongoDB,我不会啊

开始进入正题 一、技术介绍 SpringBoot整合MongoDB的实现步骤一、技术介绍1.MongoDB是什么&#xff1f;二、使用步骤1.MongoDB是什么&#xff1f; MongoDB&#xff08;来自于英文单词“Humongous”&#xff0c;中文含义为“庞大”&#xff09;是可以应用于各种规模的企业、各…

3/15/2010

ER - Error EecoveryA4 - ArrowHead 转载于:https://www.cnblogs.com/climberluoxi/archive/2010/03/15/1686725.html

textjoin去重_SuperJoinText这个函数,弥补了TEXTJOIN的缺憾

自从TextJoin函数处理&#xff0c;我感觉Excel文本处理问题&#xff0c;减少了一半&#xff0c;真的特别好用!但也有一些不足的地方&#xff0c;比如能不能直接对满足条件的数据去重后合并&#xff0c;直接忽略FALSE等&#xff0c;当然你可能会说其他函数组合可以实现&#xff…

复工后,看看他们都是怎么上班的!

全世界只有3.14 % 的人关注了爆炸吧知识来源&#xff1a;大叔爱吐槽 人民日报本周全国各地终于逐步复工&#xff01;听&#xff01;小伙伴在召唤你&#xff01;你大概从未想过&#xff0c;有一天自己竟会盼望上班&#xff1f;困守家中的20多天&#xff0c;积累了天量防疫知识&a…