如何利用Github Action實現自動Merge PR

我是螞蟻背大象(Apache EventMesh PMC&Committer),文章對你有幫助給項目rocketmq-rust star,關注我GitHub:mxsm,文章有不正確的地方請您斧正,創建ISSUE提交PR~謝謝! Emal:mxsm@apache.com

1. 引言

GitHub Actions 是 GitHub 提供的一種強大而靈活的自動化工具,它允許開發者在軟件開發生命周期的各個階段構建、測試和部署代碼。借助 GitHub Actions,開發者可以創建自定義的工作流來自動執行一系列任務,從而提高開發效率、減少人為錯誤并確保代碼質量。

2.準備工作

創建一個Github倉庫

我這里以我已經創建的 rocketmq-rust為例

image-20240707155536592

設置 GitHub Actions

創建 .github/workflows 文件夾

image-20240707155722047

創建新的工作流文件(如 auto-merge.yml),我這里創建了三個文件:

  • auto-comment-pr.yml
  • auto_request_review.yml
  • automerge.yml

都是和自動merge相關的。下面會具體講解

3.編寫自動 Merge PR 的 GitHub Actions 工作流

3.1定義工作流名稱和觸發條件

分析上面每個文件的作用

  • auto-comment-pr.yml

    這個文件的作用是當有貢獻者提交PR的時候增加一個評論與此同時添加兩個標簽,具體如下圖所示RP#716

    image-20240707160323320

    image-20240707161057321

    這個配置文件的觸發條件就是 pull_request_target

  • auto_request_review.yml

    這個配置文件的作用就是請求相關項目的ower對PR進行代碼Review。來提醒相關人員進行代碼Review,例如下面個PR#657

    image-20240707160958341

    這個也是為下面自動merge作的準備,配置文件觸發條件 pull_request_target

  • automerge.yml

    這個配置文件的作用就對已經Review好的項目進行merge,這里會有一些條件下面會具體講解

    image-20240707161332639

    觸發條件:

    • pull_request_target
    • pull_request_review
    • check_suite

3.2 設置工作流的權限

對于上面的這些操作大部分都可以使用Github Action的權限,也就是使用 secrets.GITHUB_TOKEN 這個Token,而我這里的代碼Merge和評論使用的是私有的Token也就是 secrets.PAT 。所以你會發現上面的這些評論和操作中部分是 mxsm 這個賬號部分是 github-actions 這個機器人賬號。

image-20240707162052061

生成Private Access Token(PAT)

image-20240707162650549

image-20240707162750740

這里主要的權限是跟倉庫相關的,你可以把全部設置成Read and Write的權限

配置PAT

找到對應項目的設置地方,具體如下圖配置PAT

image-20240707163047204

到這里就完成了整個權限的配置。

三個配置文件的具體腳本參照項目:https://github.com/mxsm/rocketmq-rust 項目的對應目錄下面 (如果覺得項目不錯給個star,謝謝)

4. 測試相關流程

PR#740 為例子。首先當提交PR的時候會有一個對PR的評論與此同時會增加兩個標簽 auto merge 和 ready to review

image-20240707163732452

同時會增加一個Review的請求這個是有github-actions機器人添加

image-20240707163834587

對應的Action如下:

image-20240707163937063

接下來就是對項目進行代碼Review然后, 這里需要有兩個地方需要修改

  • 對代碼進行approve
  • 刪除ready to review label加上approved標簽

說明: 這里刪除ready to review label加上approved標簽是因為在automerge.yml配置里面配置了MERGE_LABELS為"approved,auto merge,!ready to review"。 更多的配置可以參照pascalgn/automerge-action@v0.16.3。

image-20240707164051565

進行操作后:

image-20240707164519504

提示PR已經被合并,在看一下代碼界面:

image-20240707164601273

代碼已經被合并。實現了自動合并的機制

5. 總結

自動化工作流在現代軟件開發中變得越來越重要,特別是在 CI/CD(持續集成和持續部署)過程中。自動化工作流的主要好處包括:

  • 提高開發效率:減少手動操作,讓開發者專注于更高價值的任務。
  • 增強代碼質量:通過自動化測試和審查流程,確保代碼在合并前符合質量標準。
  • 降低人為錯誤:減少手動合并和部署過程中的潛在錯誤。
  • 加快發布周期:通過自動化部署和發布流程,加快從代碼提交到發布的周期。

相關文檔:

GitHub Actions 官方文檔

GitHub API 文檔

GitHub Actions Marketplace

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41523.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41523.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41523.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(九)Docker 的網絡通信

文章目錄 1、常用模式2、概念了解2.1、Docker 內容器的通信2.2、宿主機和 Docker容器的通信 1、常用模式 直接使用 端口映射,宿主機:宿主機端口->容器 ip:容器端口端口映射宿主機 hosts 映射,首先在宿主機 /etc/hosts文件中增加 宿主機 ip:容器 host…

Mojo: 輕量級Perl框架的魔力

在Perl的豐富生態系統中,Mojolicious(簡稱Mojo)是一個輕量級的實時Web框架,以其極簡的API和強大的功能而受到開發者的喜愛。Mojo不僅適用于構建高性能的Web應用,還可以用來編寫簡單的腳本和命令行工具。本文將帶你探索…

SSM中小學生信息管理系統 -計算機畢業設計源碼02677

摘要 隨著社會的發展和教育的進步,中小學生信息管理系統成為學校管理的重要工具。本論文旨在基于SSM框架,采用Java編程語言和MySQL數據庫,設計和開發一套高效、可靠的中小學生信息管理系統。中小學生信息管理系統以學生為中心,通過…

赤壁之戰的烽火臺 - 觀察者模式

“當烽火連三月,家書抵萬金;設計模式得其法,千軍如一心。” 在波瀾壯闊的三國歷史長河中,赤壁之戰無疑是一場改變乾坤的重要戰役。而在這場戰役中,一個看似簡單卻至關重要的系統發揮了巨大作用——烽火臺。這個古老的…

UNION、UNION ALL、INTERSECT、MINUS

UNION、UNION ALL、INTERSECT、MINUS? 說明 UNION:對兩個結果集進行并集操作,不包括重復行,同時進行默認規則的排序;IUNION ALL:對兩個結果集進行并集操作,包括重復行,不進行排序&am…

OpenAI的崛起:從夢想到現實

OpenAI的崛起不僅是人工智能領域的重大事件,也是科技史上一個引人注目的篇章。本文將深入探討OpenAI從創立到如今的演變過程,分析其成功的關鍵因素,以及未來的發展方向。 一、OpenAI的初創期:理想主義與混亂并存 OpenAI成立于20…

插入排序——C語言

假設我們現在有一個數組,對它進行排序,插入排序的算法如同它的名字一樣,就是將元素一個一個插入到合適的位置,那么,該如何做呢? 如果我們要從小到大進行排序的話,步驟如下: 1.對于…

區間最值問題-RQM(ST表,線段樹)

1.ST表求解 ST表的實質其實是動態規劃&#xff0c;下面是區間最小的遞歸公式&#xff0c;最大只需將min改成max即可 f[i][j] min(f[i][j - 1], f[i (1 << j - 1)][j - 1]); 二維數組的f[i][j]表示從i開始連續2*j個數的最小/大值。 例如&#xff1a;我們給出一個數組…

uniapp啟動安卓模擬器mumu

mumu模擬器下載 ADB&#xff1a; android debug bridge &#xff0c; 安卓調試橋&#xff0c;是一個多功能的命令行工具&#xff0c;他使你能夠與連接的安卓設備進行交互 # adb連接安卓模擬器 adb connect 127.0.0.1:port # 查看adb設備 adb deviceshubuilderx 有內置的adb&a…

MSPM0G3507——滴答定時器和普通定時

滴答定時器定時&#xff1a;&#xff08;放在主函數即可&#xff09; volatile unsigned int delay_times 0;//搭配滴答定時器實現的精確ms延時 void delay_ms(unsigned int ms) {delay_times ms;while( delay_times ! 0 ); } //滴答定時器中斷 void SysTick_Handler(…

Kubernets Apiserver IP 段變更后的故障處理

集群Service IP 段變更后&#xff08;從 10.96.0.0/16 變為 10.17.0.0/16&#xff09;&#xff0c;導致 kubernetes.default.svc 的ClusterIP IP &#xff08;10.96.0.1&#xff09;和段范圍不一樣&#xff0c;對于這個情況&#xff0c;需要重建該 svc。 重建方法很簡單&#…

Python28-7.4 獨立成分分析ICA分離混合音頻

獨立成分分析&#xff08;Independent Component Analysis&#xff0c;ICA&#xff09;是一種統計與計算技術&#xff0c;主要用于信號分離&#xff0c;即從多種混合信號中提取出獨立的信號源。ICA在處理盲源分離&#xff08;Blind Source Separation&#xff0c;BSS&#xff0…

運維---關于服務治理Nacos的快問快答

問題&#xff1a;在服務治理中&#xff0c;服務提供者、服務消費者和注冊中心分別承擔著怎樣的角色&#xff1f; 回答&#xff1a; 服務提供者主要負責暴露服務接口&#xff0c;以供其他服務進行調用。 服務消費者的職責是調用其他服務所提供的接口。 注冊中心則承擔著記錄…

【機器學習】(基礎篇一) —— 什么是機器學習

什么是機器學習 本系列博客為你從機器學習的介紹開始&#xff0c;使用大量的代碼實戰和驗證&#xff0c;最終幫助你完全掌握什么是機器學習 人工智能、機器學習和深度學習的關系 人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;&#xff1a;是一門研…

Java多線程不會?一文解決——

方法一 新建類如MyThread繼承Thread類重寫run()方法再通過new MyThread類來新建線程通過start方法啟動新線程 案例&#xff1a; class MyThread extends Thread {public MyThread(String name) {super(name);}Overridepublic void run() {for(int i0;i<10;i){System.out.…

react dangerouslySetInnerHTML將html字符串以變量方式插入頁面,點擊后出現編輯狀態

1.插入變量 出現以下編輯狀態 2.解決 給展示富文本的標簽添加css樣式 pointerEvents: none

黑馬點評,生成1000個token到redis代碼和1k個token的文件

原來的sql文件里面就可以插入1k個用戶&#xff0c; 這個代碼是從1000個User列表里面生成1k個token到redis里面 ResourceIUserService userService;Resource private StringRedisTemplate stringRedisTemplate;Testpublic void testGetAll() {List<User> users userServ…

activemq推數據給前端的方式

文章目錄 消費者程序接收消息并通過 WebSocket 將消息傳遞給前端 消費者程序接收消息并通過 WebSocket 將消息傳遞給前端 ActiveMQ 是一個開源的消息代理服務&#xff0c;可以用來實現各種消息傳遞模式&#xff0c;包括點對點和發布/訂閱模型。要將數據從 ActiveMQ 推送到前端…

那些年背過的面試題——MySQL篇

本文是技術人面試系列 MySQL 篇&#xff0c;面試中關于 MySQL 都需要了解哪些基礎&#xff1f;一文帶你詳細了解&#xff0c;歡迎收藏&#xff01; WhyMysql&#xff1f; NoSQL 數據庫四大家族 列存儲 Hbase K-V 存儲 Redis 圖像存儲 Neo4j 文檔存儲 MongoDB 云存儲 OSS …