是不是大家也会觉得代码审查里面审查代码格式化问题是无意义的,但是不审查又觉得过不去?是否有个专门的工具人,用来协助修复代码格式化的问题?本文来安利大家一个特别好用的方法,使用 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 自动代码格式化机器人相关推荐

  1. dotnet 将自动代码格式化机器人带入团队 GitLab 平台

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

  2. 如何使用GitHub Action自动发布JAR到Maven仓库

    之前发布开源项目Payment Spring Boot[1]到 Maven 中央仓库我都是手动执行mvn deploy,在CI/CD大行其道的今天使用这种方式有点"原始".于是我一 ...

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

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

  4. 5 分钟教你快速掌握 GitHub Actions 自动部署博客

    自从 GitHub 宣布 GitHub Actions 在平台上对所有开发人员和存储库可用以来,GitHub Actions 越来越受欢迎.很多第三方平台在生态系统中有速度等限制,将进一步推动开发人员 ...

  5. 如何用 Github Action 来组建自己的4399游戏库

    WebGL Demo GitHub WebGL Demo Gitee 原理 其实就是用上了 Github Action 自动构建和 Github Pages 首先手动确保自己的项目可以构建出 WebG ...

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

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

  7. 基于DotNet Core的RPC框架(一) DotBPE.RPC快速开始

    0x00 简介 DotBPE.RPC是一款基于dotnet core编写的RPC框架,而它的爸爸DotBPE,目标是实现一个开箱即用的微服务框架,但是它还差点意思,还仅仅在构思和尝试的阶段.但不管怎么 ...

  8. dotnet 基于 debian 创建一个 docker 的 sdk 镜像

    我不能用官方的镜像,因为我需要在小伙伴构建的 debian 镜像上面安装 dotnet sdk 用来做构建,其实在 docker 里面需要找到一个个文件,然后复制代码 这是小伙伴做的一个 jenkin ...

  9. 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 文章汇总及学习指南...

    一.AgileEAS.NET平台简介 AgileEAS.NET平台是一套应用系统快速开发平台,用于帮助中小软件开发商快速构建自己的企业信息管理类开发团队,以达到节省开发成本.缩短开发时间,快速适应市场 ...

最新文章

  1. 算法笔记1-排序-插入排序
  2. 17个改变世界的数学公式,马斯克点赞
  3. linux ssl 证书服务器,Linux下Nginx安全证书ssl配置方法
  4. JavaEE6入门02—Myeclipse8.5+GlassFish
  5. Simulink之变压器漏抗对整流电路的影响
  6. Python打印指定日期日历
  7. jQuery ajax get与post后台交互中的奥秘
  8. android xutils3 jar,android xutils3 Android基于开源项目xutils3实现下载
  9. Bettertouchtool for Mac(鼠标增强软件)
  10. python复习第一节
  11. ubuntu cmakelists 配置海康 SDK
  12. 天线的特性及微带天线的设计
  13. C#员工考勤管理系统源码 考勤工资管理系统源码
  14. 在 kali 中下载使用 Nessus
  15. 第二类曲线、曲面积分计算公式
  16. win10自动更新导致显卡驱动出问题,No AMD Graphics driver is installed or.......的解决方案
  17. Springboot毕设项目高校教材征订系统设计与实现ig8t1(java+VUE+Mybatis+Maven+Mysql)
  18. 论文+答辩时PPTword的使用注意点
  19. java oval 入门_java开源验证框架OVAL-Go语言中文社区
  20. 笑~~~~~~~~~~~~

热门文章

  1. Gamebryo实例学习之二BackgroundLoad
  2. 1.5.2 在IIS上配置ASP.NET(转)
  3. testng接口自动化测试_Java+Maven+TestNG接口(API)自动化测试教程(10) 使用 Jenkins 构建自动化测试持续集成...
  4. luogu4389 付公主的背包
  5. 4-8 string
  6. 【BZOJ1042】硬币购物(动态规划,容斥原理)
  7. #UnityTips# 2017.11.14
  8. [BZOJ]1095 Hide捉迷藏(ZJOI2007)
  9. .net 测试工具类
  10. WPF 2D绘图(2)Geometry