Github Action Bot 开发教程

2024-04-29 19:12
文章标签 教程 开发 action github bot

本文主要是介绍Github Action Bot 开发教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Github Action Bot 开发教程

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

/lgtm
/retest
/area bug
/asssign @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 开发教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/946927

相关文章

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Nexus安装和启动的实现教程

《Nexus安装和启动的实现教程》:本文主要介绍Nexus安装和启动的实现教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Nexus下载二、Nexus安装和启动三、关闭Nexus总结一、Nexus下载官方下载链接:DownloadWindows系统根

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

Python使用Code2flow将代码转化为流程图的操作教程

《Python使用Code2flow将代码转化为流程图的操作教程》Code2flow是一款开源工具,能够将代码自动转换为流程图,该工具对于代码审查、调试和理解大型代码库非常有用,在这篇博客中,我们将深... 目录引言1nVflRA、为什么选择 Code2flow?2、安装 Code2flow3、基本功能演示

Java Spring 中的监听器Listener详解与实战教程

《JavaSpring中的监听器Listener详解与实战教程》Spring提供了多种监听器机制,可以用于监听应用生命周期、会话生命周期和请求处理过程中的事件,:本文主要介绍JavaSprin... 目录一、监听器的作用1.1 应用生命周期管理1.2 会话管理1.3 请求处理监控二、创建监听器2.1 Ser