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
dotnet 基于 dotnet format 的 GitHub Action 自动代码格式化机器人相关推荐
- dotnet 将自动代码格式化机器人带入团队 GitLab 平台
给团队带入一个 代码格式化机器人 能提升团队的幸福度,让团队的成员安心写代码,不用关注代码格式化问题,将格式代码这个粗活交给机器人去做.同时也能减少在代码审查里撕格式化问题的时间,让更多的时间投入到更 ...
- 如何使用GitHub Action自动发布JAR到Maven仓库
之前发布开源项目Payment Spring Boot[1]到 Maven 中央仓库我都是手动执行mvn deploy,在CI/CD大行其道的今天使用这种方式有点"原始".于是我一 ...
- 取消Eclipse的自动代码格式化
前段时间在Eclipse里面设置了java文件保存时自动格式化,在java->Code Style->Formatter里设置了自定义的格式化的样式,这样每次保存后都会自动格式化代码,用了 ...
- 5 分钟教你快速掌握 GitHub Actions 自动部署博客
自从 GitHub 宣布 GitHub Actions 在平台上对所有开发人员和存储库可用以来,GitHub Actions 越来越受欢迎.很多第三方平台在生态系统中有速度等限制,将进一步推动开发人员 ...
- 如何用 Github Action 来组建自己的4399游戏库
WebGL Demo GitHub WebGL Demo Gitee 原理 其实就是用上了 Github Action 自动构建和 Github Pages 首先手动确保自己的项目可以构建出 WebG ...
- VSCode代码格式化快捷键及保存时自动格式化
一.实现vs code中代码格式化快捷键:[Shift]+[Alt]+F 二.实现保存时自动代码格式化: 1)文件 ------.>[首选项]---------->[设置]: 2)搜索em ...
- 基于DotNet Core的RPC框架(一) DotBPE.RPC快速开始
0x00 简介 DotBPE.RPC是一款基于dotnet core编写的RPC框架,而它的爸爸DotBPE,目标是实现一个开箱即用的微服务框架,但是它还差点意思,还仅仅在构思和尝试的阶段.但不管怎么 ...
- dotnet 基于 debian 创建一个 docker 的 sdk 镜像
我不能用官方的镜像,因为我需要在小伙伴构建的 debian 镜像上面安装 dotnet sdk 用来做构建,其实在 docker 里面需要找到一个个文件,然后复制代码 这是小伙伴做的一个 jenkin ...
- 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 文章汇总及学习指南...
一.AgileEAS.NET平台简介 AgileEAS.NET平台是一套应用系统快速开发平台,用于帮助中小软件开发商快速构建自己的企业信息管理类开发团队,以达到节省开发成本.缩短开发时间,快速适应市场 ...
最新文章
- 算法笔记1-排序-插入排序
- 17个改变世界的数学公式,马斯克点赞
- linux ssl 证书服务器,Linux下Nginx安全证书ssl配置方法
- JavaEE6入门02—Myeclipse8.5+GlassFish
- Simulink之变压器漏抗对整流电路的影响
- Python打印指定日期日历
- jQuery ajax get与post后台交互中的奥秘
- android xutils3 jar,android xutils3 Android基于开源项目xutils3实现下载
- Bettertouchtool for Mac(鼠标增强软件)
- python复习第一节
- ubuntu cmakelists 配置海康 SDK
- 天线的特性及微带天线的设计
- C#员工考勤管理系统源码 考勤工资管理系统源码
- 在 kali 中下载使用 Nessus
- 第二类曲线、曲面积分计算公式
- win10自动更新导致显卡驱动出问题,No AMD Graphics driver is installed or.......的解决方案
- Springboot毕设项目高校教材征订系统设计与实现ig8t1(java+VUE+Mybatis+Maven+Mysql)
- 论文+答辩时PPTword的使用注意点
- java oval 入门_java开源验证框架OVAL-Go语言中文社区
- 笑~~~~~~~~~~~~
热门文章
- Gamebryo实例学习之二BackgroundLoad
- 1.5.2 在IIS上配置ASP.NET(转)
- testng接口自动化测试_Java+Maven+TestNG接口(API)自动化测试教程(10) 使用 Jenkins 构建自动化测试持续集成...
- luogu4389 付公主的背包
- 4-8 string
- 【BZOJ1042】硬币购物(动态规划,容斥原理)
- #UnityTips# 2017.11.14
- [BZOJ]1095 Hide捉迷藏(ZJOI2007)
- .net 测试工具类
- WPF 2D绘图(2)Geometry