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…

学妹面试拼刀刀被问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;比如我们最常见的一个网站的页…

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

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

Juster的MVP奋斗之路

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

被嫌弃的蝗虫的一生

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

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

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

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

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

使用 OpenLDAP 集中管理用户帐号

关键字&#xff1a; OpenLDAP ReiserFS SCTP nmon 正则表达式 使用轻量级目录访问协议&#xff08;LDAP&#xff09;构建集中的身份验证系统可以减少管理成本&#xff0c;增强安全性&#xff0c;避免数据复制的问题&#xff0c;并提高数据的一致性。随着 Linux&reg; 的不断…

【每日分享】我做程序员那些年犯下的罪,此时此刻我自己的笑出猪叫~

以前我刚入行&#xff0c;总是会犯这样几个常见错误&#xff0c;后面想起来是真的SB。当然每个程序员会犯错&#xff0c;重要的是从中吸取教训&#xff0c;得到成长。那么这些错误到底是什么呢&#xff1f;我来给大家盘点一下&#xff01;&#xff01;&#xff01; 当我感觉我…

解决ubuntu下eclipse 经常崩溃的问题

2019独角兽企业重金招聘Python工程师标准>>> ubuntu对SWT程序支持的不怎么好&#xff0c;基于SWT的eclipse在ubuntu下经常崩溃和失去响应&#xff0c;要解决这个问题需要1.需要卸载掉 overlay-scrollbar libwebkit-1.02.eclipse.ini中加入 -Dsun.awt.disablegrabtru…

揭秘神仙高校的课堂!网友跪了:这就是差距啊!

全世界只有3.14 % 的人关注了爆炸吧知识疫情之下&#xff0c;家家闭门谢客&#xff0c;宅着就是做贡献了。原本一晃而过的7天假期变得“漫长”&#xff0c;延迟复工、居家办公&#xff1b;学生党们把寒假过成了暑假。随着各高校公布延迟开学时间到二月底&#xff0c;各种网络直…

oracle中prad函数_024 SQL函数

1. 使用ORDER BY排序(1) ORDER BY 子句的作用是什么&#xff1f;用ORDER BY子句排序。用于对结果集进行排序处理&#xff0c;提供了升序排序&#xff08;ASC&#xff09;与降序排序&#xff08;DESC&#xff09;如果不指定排序规则默认为升序排序。在排序中也可以使用没有包括在…

世道变了,面试初级Java开发会问到Arrays!!!你不会还不知道吧!

一、基本定义 Arrays类&#xff0c;全路径java.util.Arrays&#xff0c;主要功能为操作数组&#xff0c;Arrays类的所有方法均为静态方法&#xff0c;所以 调用方式全部为Arrays.方法名 二、常用方法 1. <T> List<T> asList(T... a)可以将数组转化为相应的lis…

DNS(三)--子域授权和视图

实验题目&#xff1a;1.子域授权&#xff08;委派&#xff09;2.视图实验环境&#xff1a;1.vmware虚拟机2.linux子机两台3.XP测试机实验过程&#xff1a;一、子域授权在现实生活中我们世界互联网中的每个主机并不是在同一个域内&#xff0c;而是通过不同的依据将将其划分到不同…

11尺寸长宽 iphone_LED显示屏的尺寸规格计算方法

LED屏幕在生活中&#xff0c;随处可见&#xff0c;显示屏、广播屏等等&#xff0c;但是LED尺寸怎么计算的&#xff0c;你知道吗&#xff1f;今天我们来了解一下LED屏幕尺寸的计算方法。一、点间距的计算1、各单元板常见型号及尺寸LED屏普遍是用单元板做的。LED单元板常见型号及…

盘点数学里十大不需语言的证明

全世界只有3.14 % 的人关注了爆炸吧知识当谈到复杂数学定理的证明时&#xff0c;很多人常常为之色变&#xff0c;认为这只是一个枯燥的公式堆砌和深奥的数学推导过程。这当然是一个让笔者感到纠结的误解。因为数学证明中包含的美丽与精巧实在是一道亮丽的风景线&#xff0c;而这…