当前位置: 首页 > news >正文

Github Action Bot 开发教程

Github Action Bot 开发教程

在使用 Github 时,你可能在一些著名的开源项目,例如 Kubernetes,Istio 中看到如下的一些评论:

/lgtm
/retest
/area bug
/assign @xxxx
...

等等,诸如此类的一些功能性评论。在这些评论出现时,往往会出现一个 Github-bot 给问题添加一些 label,将 issue 分配给指定的人等等。类似注入此类的动作都是通过 Github Action 完成的。在本篇文章中,我们将介绍如何开发一个 Github Action Bot。

功能调研

要实现的 Action 动作为在 PR 下面评论 /retest 触发 action,自动收集运行失败的工作流 job,并重新运行。我们借鉴已有的 Action:

  • https://github.com/envoyproxy/toolshed/tree/main/gh-actions/retest

envoy 的实现是通过 ts 结合 Github 的 Rest API 完成:

  • https://docs.github.com/en/rest/pages/pages?apiVersion=2022-11-28

实现

本项目使用 Go 语言编写,通过 Github API Golang 实现和 Github 交互,编写完成之后,发布到 Github Action Marketplace。

  • https://github.com/actions-go/toolkit
  • https://github.com/google/go-github

大致思路

  1. 根据传入的 pr url,获取 pr 的信息;
  2. 之后根据 comment id 获取 comment 内容,判断是否为 /retest 是,则收集失败的 job,再次运行;
  3. 判断 job rerun 是否成功,成功给 comment 加入 🚀 响应。(注意:这里的成功是指创建 rerun-job 成功,不是指 job 本身成功!
  4. 运行结束。

代码目录结构

│  .gitignore
│  action.yml					# action.yml 配置
│  Dockerfile					# 项目运行需要的 Dockerfile
│  go.mod
│  go.sum
│  LICENSE
│  main.go						# 入口 main.go 文件
│  README.md
│
├─.github
│  └─workflows
│          build-and-test.yml		
│          retest.yml
└─retest						# retest 逻辑实现retest.goretest_test.gotypes.go

Github Action 配置

创建 action.yml 配置文件:

name: "Github Pull Request Retest"
description: 'Re-run failed GitHub Workflow runs on PRs by commenting "/retest".'
author: "yuluo"
branding:color: blueicon: activity
inputs:token:description: >GitHub token used to create and remove comments. By default, this uses therepository token provided by GitHub Actions. You can customize the user byreplacing this token with a user token which has write-access to yourrepository. Note that the token will be accessible to all repositorycollaborators.default: ${{ github.token }}comment-id:description: >-ID of comment for responserequired: truetype: numberpr-url:description: >-URL to fetch PR informationrequired: trueruns:using: 'docker'image: 'Dockerfile'args:- ${{ inputs.token }}- ${{ inputs.comment-id }}- ${{ inputs.pr-url }}- ${{ inputs.args }}

此配置文件中主要参数如下:文档 https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions

作者,名字,描述等式必须的。inputs 参数描述如下:

inputs: # 参数的字典milliseconds: # change this # 参数名,required: true # 是否是必填description: "input description here" # 参数的说明default: "default value if applicable" # 默认值

注意:inputs 参数是需要在 .github/workflows/action-ci.yml 中配置的输入参数,如果不配置,获取到的输入是空值!

runs 参数:

runs:# 运行 action 的方式,envoy 通过 nodejs 运行using: 'docker'# 在项目中需要编写 Dockerfile,作为镜像入口,envoy 使用 ts 编写,所以入口为 main: index.jsimage: 'Dockerfile'# 运行时输入到 Docker container 内部的参数。args:- ${{ inputs.token }}- ${{ inputs.comment-id }}- ${{ inputs.pr-url }}- ${{ inputs.args }}

本次编写中主要用到的配置项为以上两个,更多的参数可以参考文档。

发布

Github Action Marketplace:https://github.com/marketplace/new

项目在编写完成之后,建立一个 github repo,将代码上传到仓库,之后点击上述地址,就会出现 actions 选择。发布需要创建版本,根据要求创建一个对应版本即可。在发布时会检测 action.yml 配置,在合法之后才会允许发布。

发布成功如下:

https://github.com/marketplace/actions/github-pull-request-retest
请添加图片描述

使用

之后在任意仓库的 .github/workflows/command.yml 中配置如下内容即可使用:

name: Retest Action on PR Commenton:issue_comment:types: [created]permissions:contents: readjobs:retest:name: Retestruns-on: ubuntu-22.04permissions:pull-requests: writeactions: writesteps:- uses: yuluo-yx/gh-retest@v1.0.0-RC1with:token: ${{ secrets.GITHUB_TOKEN }}comment-id: ${{ github.event.comment.id }}pr-url: ${{ github.event.issue.pull_request.url }}

在此仓库对应的 pr 下面输入 /retest ,观察仓库 Action 即可看到 job 自动 rerun。

项目地址:https://github.com/yuluo-yx/gh-retest.git,欢迎 star。🚀🚀

相关文章:

Github Action Bot 开发教程

Github Action Bot 开发教程 在使用 Github 时,你可能在一些著名的开源项目,例如 Kubernetes,Istio 中看到如下的一些评论: /lgtm /retest /area bug /assign xxxx ...等等,诸如此类的一些功能性评论。在这些评论出现…...

使用docker创建rocketMQ主从结构,使用

1、 创建目录 mkdir -p /docker/rocketmq/logs/nameserver-a mkdir -p /docker/rocketmq/logs/nameserver-b mkdir -p /docker/rocketmq/logs/broker-a mkdir -p /docker/rocketmq/logs/broker-b mkdir -p /docker/rocketmq/store/broker-a mkdir -p /docker/rocketmq/store/b…...

一次完整的 http 请求是怎样的?

一次完整的 http 请求是怎样的? 💖The Begin💖点点关注,收藏不迷路💖 域名解析 --> 发起 TCP 的 3 次握手 --> 建立 TCP 连接后发起 http 请求 --> 服务器响应 http 请求,浏览器得到 html 代码 --…...

并行执行的概念—— 《OceanBase 并行执行》系列 一

From 产品经理: 这是一份姗姗来迟的关于OceanBase并行执行的系统化产品文档。 自2019年起,并行执行功能已被许多客户应用于多种场景之中,其重要性日益凸显。然而,遗憾的是,我们始终未能提供一份详尽的用户使用文档&…...

使用 ipdb 调试回调函数

一、问题概述 回调函数是指一个函数执行完后,调用另外一个函数的过程。 一般步骤是,回调函数作为参数传递给原始函数,原始函数执行完自己的逻辑后,自动调用回调函数并将自己的执行结果作为参数传递给回调函数。 根据不同的用法&a…...

介绍一下mybatis的基本配置(mybatis-config.xml)

src/main/resources/mybatis-config.xml 这句代码&#xff0c;是XML的声明&#xff0c;它指定了&#xff0c;XML的版本 和 编码方式 <?xml version"1.0" encoding"UTF-8" ?>这句代码&#xff0c;声明了XML文档类型&#xff0c;它告诉解析器&#x…...

【MySQL】第一次作业

【MySQL】第一次作业 1、在官网下载安装包2、解压安装包&#xff0c;创建一个dev_soft文件夹&#xff0c;解压到里面。3、创建一个数据库db_classes4、创建一行表db_hero5、将四大名著中的常见人物插入这个英雄表 写一篇博客&#xff0c;在window系统安装MySQL将本机的MySQL一定…...

10个免费视频素材网站,剪辑师们赶紧收藏!

剪辑师们不知道去哪里找免费视频素材&#xff0c;就上这10个网站&#xff0c;免费下载部分还可商用&#xff0c;赶紧收藏起来&#xff01; 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 菜鸟图库虽然是个设计素材网站&#xff0c;但除了设计类素材之外还有很多…...

【毕业设计】基于SSM的运动用品商城的设计与实现

1.项目介绍 在这个日益数字化和信息化的时代&#xff0c;随着人们购物习惯的转变&#xff0c;传统的实体商店已经无法满足人们日益增长的在线购物需求。因此&#xff0c;基于SSM&#xff08;Spring Spring MVC MyBatis&#xff09;框架的运动用品商城项目应运而生&#xff0…...

【Web】CTFSHOW 中期测评刷题记录(1)

目录 web486 web487 web488 web489 web490 web491 web492 web493 web494 web495 web496 web497 web498 web499 web500 web501 web502 web503 web505 web506 web507 web508 web509 web510 web486 扫目录 初始界面尝试文件包含index.php&am…...

vs配置cplex12.10

1.创建c空项目 2.修改运行环境 为release以及x64 3.创建cpp文件 4.鼠标右键点击项目中的属性 5.点击c/c&#xff0c;点击第一项常规&#xff0c;配置附加库目录 5.添加文件索引&#xff0c;主要用于把路径导进来 6.这一步要添加的目录与你安装的cplex的目录有关系 F:\program…...

Kubernetes 弃用Docker后 Kubelet切换到Containerd

containerd 是一个高级容器运行时&#xff0c;又名 容器管理器。简单来说&#xff0c;它是一个守护进程&#xff0c;在单个主机上管理完整的容器生命周期&#xff1a;创建、启动、停止容器、拉取和存储镜像、配置挂载、网络等。 containerd 旨在轻松嵌入到更大的系统中。Docke…...

函数模板含有多个模板参数

如果一个模板接受多个参数&#xff0c;用逗号分隔参数。 使用时必要情况下需要主动传入模板参数。 #include <iostream> #include <vector>/* Compute the greatest common divisor of two integers, using Euclids algorithm. */ template<class T, class U&g…...

Sprd Android 13 增加系统属性判断当前有无 OTG U盘插入,App 读取系统属性

添加系统属性,通过监听插拔广播判断当前有无OTG U盘插入 --- a/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -246,6 +246,7 @@ …...

第11章 数据库技术(第一部分)

一、数据库技术术语 &#xff08;一&#xff09;术语 1、数据 数据描述事物的符号描述一个对象所用的标识&#xff0c;可以文字、图形、图像、语言等等 2、信息 现实世界对事物状态变化的反馈。可感知、可存储、可加工、可再生。数据是信息的表现形式和载体&#xff0c;信…...

数据结构––队列

1.队列的定义 2.队列的分类 2.1循环队 2.2链式队 3.队列的实现 3.1循环队 3.1.1声明 typedef int QDataType; #define MAXSIZE 50 //定义元素的最大个数 /*循环队列的顺序存储结构*/ typedef struct {QDataType *data;int front; //头指针int rear; //尾指针 }Queue;…...

010_redhat安装zookeeper

目录 1.环境准备2.下载上传zookeeper安装包1)[官网下载zookeeper-3.6.4安装包](https://archive.apache.org/dist/zookeeper/zookeeper-3.6.4/apache-zookeeper-3.6.4-bin.tar.gz)2)创建soft文件夹 3.解压4.配置启动1、配置zoo.cfg2、启动zookeeper 小结 1.环境准备 准备一台l…...

【网络】gateway 可以提供的一些功能之一 “ 提供web静态资源服务 ”

gateway 可以提供的一些功能之一 “ 提供web静态资源服务 ” 一、提供web静态资源服务1.1、web静态资源服务是什么1.2、web静态资源服务有什么作用1.3、web静态资源服务怎么实现 二、提供Restful服务器路由转发三、支持Eureka服务发现四、服务检查五、灰度发布 一、提供web静态…...

MySQL第一次作业

解压完安装包 以管理员进入命令行 初始化并记住初始随机密码 创建服务名称 启动mysql 使用随机密码登录 修改密码 退出并重登服务器 MySQL创建数据库和表 创建数据库 创建表 1.进入数据库 创建表 向表中插入数据...

详解LLMOps,将DevOps用于大语言模型开发

大家好&#xff0c;在机器学习领域&#xff0c;随着技术的不断发展&#xff0c;将大型语言模型&#xff08;LLMs&#xff09;集成到商业产品中已成为一种趋势&#xff0c;同时也带来了许多挑战。为了有效应对这些挑战&#xff0c;数据科学家们转向了一种新型的DevOps实践LLM-OP…...

牛客NC275 和为S的两个数字【简单 map C++/Java/Go/PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b 思路 map参考答案C #include <vector> class Solution {public:vector<int> FindNumbersWithSum(vector<int> array, int sum) {vector<int> ans;m…...

ax200/ax201/ax210/ax211/ax411等intel网卡无法开启5G热点问题解决方案汇总

目录 故障原因解决方案windowslinuxkernel < 5.5kernel > 5.5方案1 修改linux内核模块代码&#xff08;iwlwifi内核模块&#xff09;&#xff0c;重新编译内核模块并重新导入方案2 修改hostapd代码 最后更新于2024.04.28 故障原因 根本原因是因为英特尔在内核中开启了LA…...

JVM的垃圾回收机制(GC机制)

在Java代码运行的过程中&#xff0c;JVM发现 某些资源不需要再使用的时候&#xff0c;就会自动把资源所占的内存给回收掉&#xff0c;就不需要程序员自行操作了。“自动回收资源”就是JVM的“垃圾回收机制”&#xff0c;“垃圾回收机制”也称"GC机制"。 对于Java代码…...

分布式光伏管理系统和一般的光伏管理系统相比有什么区别?

随着全球对可再生能源的关注度日益提高&#xff0c;光伏技术作为其中的佼佼者&#xff0c;已经得到了广泛的应用。在光伏技术中&#xff0c;管理系统扮演着至关重要的角色&#xff0c;它关乎着光伏电站的运行效率、能源产出以及运维成本等多个方面。其中&#xff0c;分布式光伏…...

Linux migrate_type进一步探索

文章接着上回Linux migrate_type初步探索 1、物理页面添加到buddy系统 我们都知道物理内存一开始是由memblock进行分配管理&#xff0c;后面会切换到buddy系统管理。那么接下来我们看一下&#xff0c;memblock管理的物理页面是怎么添加到buddy系统中的。 start_kernel() -&g…...

强化学习:时序差分法【Temporal Difference Methods】

强化学习笔记 主要基于b站西湖大学赵世钰老师的【强化学习的数学原理】课程&#xff0c;个人觉得赵老师的课件深入浅出&#xff0c;很适合入门. 第一章 强化学习基本概念 第二章 贝尔曼方程 第三章 贝尔曼最优方程 第四章 值迭代和策略迭代 第五章 强化学习实例分析:GridWorld…...

数据结构-二叉树-二叉搜索树

一、概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者具有以下性质的二叉树&#xff1a; 若它的左子树不为空&#xff0c;则左树上所有节点的值都小于根节点的值。 若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节点的值。 它…...

Linux 磁盘管理命令df du dd

文章目录 3.Linux 磁盘管理命令3.1 df&#xff1a;显示报告文件系统磁盘使用信息案例练习 3.2 du&#xff1a;显示目录或者文件所占的磁盘空间案例练习 3.3 dd&#xff1a;磁盘操作案例练习 3.Linux 磁盘管理命令 3.1 df&#xff1a;显示报告文件系统磁盘使用信息 作用&#x…...

Leetcode 3138. Minimum Length of Anagram Concatenation

Leetcode 3138. Minimum Length of Anagram Concatenation 1. 解题思路2. 代码实现 题目链接&#xff1a;3138. Minimum Length of Anagram Concatenation 1. 解题思路 这一题的话我们首先统计出来所有的字母出现的频率。 然后&#xff0c;我们只需要从头开始重新计数一下&…...

IT廉连看——UniApp——样式绑定

IT廉连看——UniApp——样式绑定 一、样式绑定 两种添加样式的方法&#xff1a; 1、第一种写法 写一个class属性&#xff0c;然后将css样式写在style中。 2、第二种写法 直接把style写在class后面 添加一些效果&#xff1a;字体大小 查看效果 证明这样添加样式是没有问题的…...

网站首页背景图片/百度搜索推广费用

[LeetCode] 2.AddTwoSums 文章目录[LeetCode] 2.AddTwoSums题目思路解法一解法二题目 给出两个 非空 的链表用来表示两个非负的整数。其中&#xff0c;它们各自的位数是按照 逆序 的方式存储的&#xff0c;并且它们的每个节点只能存储 一位 数字。 如果&#xff0c;我们将这两个…...

天津网站建设推荐安徽秒搜科技/软件定制开发

转&#xff1a;http://blog.sina.com.cn/s/blog_4cd8dd130100ut5r.html Xcode4中使用静态库 1. 创建一个工作区&#xff1a;".xcworkspace" 2. 将项目添加到工作区&#xff08;新建/添加现有项目&#xff09; 3. 向应用程序target添加静态库&#xff0c;从Workspac…...

网站建设内部下单流程/浙江网站推广

相当于翻译了这篇文章&#xff0c;How to write a DLL/SO in C/C for Python&#xff0c;我的目的是为了备注一下我使用失败的情况。 首先&#xff0c;作者推荐了Cython可以作为一个更好的C的python封装&#xff0c;我没去用&#xff0c;直接用vs的工具来生成如下dll吧 1,编写…...

平度网站建设/谷歌搜索引擎入口google

<script>var startX 0,startY 0;function touchStart(evt){try{var touch evt.touches[0], //获取第一个触点x Number(touch.pageX), //页面触点X坐标y Number(touch.pageY); //页面触点Y坐标//记录触点初始位置startX x;startY y;}catch(e){console.log(e.messag…...

51zwd一起做网站广州/刷粉网站推广马上刷

一、php在apache中运行模式 php在apache中一共有三种工作方式&#xff1a;CGI模式、FastCGI模式、Apache 模块DLL)以下分别比较&#xff1a;1. CGI模式与模块模式比较&#xff1a;php在apache中两种工作方式的区别(CGI模式、Apache 模块DLL)这两种工作方式的安装&#xff1a;PH…...

河南怎样做网站推广/网络推广哪家好

这里是修真院后端小课堂&#xff0c;每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析后端知识/技能&#xff0c;本篇分享的是&#xff1a; 【MAVEN 跳过 JUNIT TEST 的几种姿势 】 PPT 链…...