python检测gitlab中某个标签在一个月内添加和移除了多少次

可以通过 Python 脚本和 GitLab API 检测一个标签在一个月内被添加和移除的次数。以下是实现的步骤和示例代码:

步骤

  1. 获取 GitLab API 访问令牌:在 GitLab 中生成一个 Personal Access Token。
  2. 设置时间范围:确定一个月的时间范围。
  3. 调用 GitLab API 获取相关事件
    • 使用 /projects/{id}/events 端点获取标签相关的事件(如创建、删除)。
  4. 统计事件次数

示例代码

import requests
from datetime import datetime, timedelta# 配置 GitLab 信息
GITLAB_URL = "https://gitlab.example.com"  # 替换为你的 GitLab 地址
PROJECT_ID = 12345  # 替换为你的项目 ID
PRIVATE_TOKEN = "your_personal_access_token"  # 替换为你的访问令牌
LABEL_NAME = "example-label"  # 替换为你要检测的标签def get_events(project_id, start_date, end_date):headers = {"PRIVATE-TOKEN": PRIVATE_TOKEN}url = f"{GITLAB_URL}/api/v4/projects/{project_id}/events"params = {"after": start_date,"before": end_date,"action": "update",  # 标签操作可能是更新事件}response = requests.get(url, headers=headers, params=params)response.raise_for_status()return response.json()def count_label_events(events, label_name):added_count = 0removed_count = 0for event in events:if "label" in event and event["label"]["name"] == label_name:if event["action_name"] == "added":added_count += 1elif event["action_name"] == "removed":removed_count += 1return added_count, removed_countif __name__ == "__main__":# 计算一个月的时间范围end_date = datetime.now()start_date = end_date - timedelta(days=30)start_date_str = start_date.strftime("%Y-%m-%d")end_date_str = end_date.strftime("%Y-%m-%d")print(f"Fetching events from {start_date_str} to {end_date_str}...")events = get_events(PROJECT_ID, start_date_str, end_date_str)added, removed = count_label_events(events, LABEL_NAME)print(f"Label '{LABEL_NAME}' was added {added} times and removed {removed} times in the past month.")

代码说明

  1. GitLab API
    • 使用 /projects/{id}/events 获取项目内的活动。
    • 需要设置 PRIVATE-TOKEN 作为访问令牌。
  2. 时间范围
    • 使用 datetime 模块动态计算最近一个月的时间范围。
  3. 事件过滤
    • 根据事件的 action_name 字段统计标签的添加和移除次数。
  4. 输出
    • 最终打印出标签添加和移除的次数。

运行方式

  1. 替换 GITLAB_URLPROJECT_IDPRIVATE_TOKEN 为实际值。
  2. 运行脚本。

依赖

确保已安装 requests 库:

pip install requests

如果需要实现一个MR的添加和移除标签最多各算一次,以下是实现方法的步骤和示例代码:

1. 准备工作

  • 确保你有访问 GitLab API 的权限,并生成一个访问令牌(Private Token)。
  • 确定 GitLab 项目的 ID 和需要检测的标签名称。

2. 安装必要的库

需要安装 requests 库,用于调用 GitLab API:

pip install requests

3. 示例代码

以下代码实现了检测标签在一个月内添加和移除的次数:

import requests
from datetime import datetime, timedelta# 配置 GitLab API 信息
GITLAB_URL = "https://gitlab.example.com"  # 替换为你的 GitLab 地址
PRIVATE_TOKEN = "your_private_token"       # 替换为你的访问令牌
PROJECT_ID = "12345"                       # 替换为你的项目 ID
LABEL_NAME = "your_label_name"             # 替换为你要检测的标签名称def get_merge_requests():"""获取过去一个月的所有 Merge Requests"""one_month_ago = datetime.now() - timedelta(days=30)url = f"{GITLAB_URL}/api/v4/projects/{PROJECT_ID}/merge_requests"headers = {"PRIVATE-TOKEN": PRIVATE_TOKEN}params = {"created_after": one_month_ago.isoformat(),"state": "all",}response = requests.get(url, headers=headers, params=params)response.raise_for_status()return response.json()def get_label_changes(mr_iid):"""获取某个 Merge Request 的标签变更历史"""url = f"{GITLAB_URL}/api/v4/projects/{PROJECT_ID}/merge_requests/{mr_iid}/resource_label_events"headers = {"PRIVATE-TOKEN": PRIVATE_TOKEN}response = requests.get(url, headers=headers)response.raise_for_status()return response.json()def count_label_changes(label_name):"""统计标签添加和移除次数"""mrs = get_merge_requests()add_count = 0remove_count = 0for mr in mrs:label_events = get_label_changes(mr["iid"])added = Falseremoved = Falsefor event in label_events:if event["label"]["name"] == label_name:if event["action"] == "add" and not added:add_count += 1added = Trueelif event["action"] == "remove" and not removed:remove_count += 1removed = Truereturn add_count, remove_countif __name__ == "__main__":added, removed = count_label_changes(LABEL_NAME)print(f"标签 '{LABEL_NAME}' 在过去一个月内被添加了 {added} 次,移除了 {removed} 次。")

4. 代码说明

  1. 获取 Merge Request 列表:
    使用 GET /projects/:id/merge_requests API 获取过去一个月内的所有 MR。
  2. 获取标签变更历史:
    使用 GET /projects/:id/merge_requests/:mr_iid/resource_label_events API 获取某个 MR 的标签变更历史。
  3. 统计添加和移除次数:
    遍历标签变更事件,根据 action 判断是否为 addremove 操作,同时确保对同一个 MR 的标签添加或移除只统计一次。

5. 注意事项

  • 如果项目中 MR 较多,可能需要分页处理,可通过 pagination 参数实现。
  • 确保你的 GitLab API URL 和访问权限正确。

你可以运行这段脚本来统计标签的添加和移除情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/1195.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32之LWIP网络通讯设计-下(十五)

STM32F407 系列文章 - ETH-LWIP(十五) 目录 前言 一、软件设计 二、CubeMX实现 1.配置前准备 2.CubeMX配置 1.ETH模块配置 2.时钟模块配置 3.中断模块配置 4.RCC及SYS配置 5.LWIP模块配置 3.生成代码 1.main文件 2.用户层源文件 3.用户层头…

AI浪潮下的IT变革之路:机遇、挑战与重塑未来

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 AI浪…

Edge浏览器网页设置深色模式/暗模式

文章目录 需求分析1. 浏览器中的设置——外观——深色。2. 在Edge浏览器的地址栏如下网址:edge://flags/,直接搜索Dark则有内容弹出,将Default更改为Enable即可设置成功。3. 成果 需求 长期对着电脑屏幕,白色实在太刺眼&#xff…

Type-C双屏显示器方案

在数字化时代,高效的信息处理和视觉体验已成为我们日常生活和工作的关键需求。随着科技的进步,一款结合了便携性和高效视觉输出的设备——双屏便携屏,逐渐崭露头角,成为追求高效工作和娱乐体验人群的新宠。本文将深入探讨双屏便携…

Redis 优化秒杀(异步秒杀)

目录 为什么需要异步秒杀 异步优化的核心逻辑是什么? 阻塞队列的特点是什么? Lua脚本在这里的作用是什么? 异步调用创建订单的具体逻辑是什么? 为什么要用代理对象proxy调用createVoucherOrder方法? 对于代码的详细…

机器学习基础-机器学习的常用学习方法

目录 半监督学习的概念 规则学习的概念 基本概念 机器学习里的规则 逻辑规则 规则集 充分性与必要性 冲突消解 命题逻辑 → 命题规则 序贯覆盖 单条规则学习 剪枝优化 强化学习的概念 1. 强化学习对应了四元组 2. 强化学习的目标 强化学习常用马尔可夫决策过程…

国产3D CAD将逐步取代国外软件

在工业软件的关键领域,计算机辅助设计(CAD)软件对于制造业的重要性不言而喻。近年来,国产 CAD 的发展态势迅猛,展现出巨大的潜力与机遇,正逐步改变着 CAD 市场长期由国外软件主导的格局。 国产CAD发展现状 …

【机器学习】农业 4.0 背后的智慧引擎:机器学习助力精准农事决策

我的个人主页 我的领域:人工智能篇,希望能帮助到大家!!!👍点赞 收藏❤ 在当今数字化浪潮汹涌澎湃之际,农业领域正经历着一场前所未有的深刻变革,大踏步迈向农业 4.0时代。这一时代…

使用Docker模拟PX4固件的无人机用于辅助地面站开发

前言 最近在制作鸿蒙无人机地面站,模仿的是QGroundControl,协议使用mavlink,记录一下本地模拟mavlink协议通过tcp/udp发送 废话不多说直接上命令 1.启动docker的桌面端 启动之后才能使用docker命令来创建容器 docker run --rm -it jonas…

C#调用OpenCvSharp实现图像的开运算和闭运算

对图像同时进行腐蚀和膨胀操作,顺序不同则效果也不同。先腐蚀后膨胀为开运算,能够消除小斑点和细小的突出物、平滑图像以及改善边缘;先膨胀后腐蚀为闭运算,能够去除噪点、填补图像孔洞、连接邻近物体和平滑物体边界。   OpenCvS…

整数和浮点数的存储

整数的存储 整数的存储分为有符号和无符号的整数的存储,整数2进制的表示方法有三种,分别是原码、反码、补码,内存中存储的是补码,反码可以理解为是一个中转站,原码就是直接将数值按照正负形式翻译成的二进制数字 有符…

<论文>时序大模型如何应用于金融领域?

一、摘要 本文介绍2024年的论文《Financial Fine-tuning a Large Time Series Model》,论文探索了主流的时间序列大模型在金融领域的微调应用实践,为时序大模型的领域微调提供了参考。 译文: 大型模型在自然语言处理、图像生成以及近期的时间…

【Linux】深入理解文件系统(超详细)

目录 一.磁盘 1-1 磁盘、服务器、机柜、机房 📌补充: 📌通常网络中用高低电平,磁盘中用磁化方向来表示。以下是具体说明: 📌如果有一块磁盘要进行销毁该怎么办? 1-2 磁盘存储结构 ​编辑…

UML系列之Rational Rose笔记七:状态图

一、新建状态图 依旧是新建statechart diagram; 二、工作台介绍 接着就是一个状态的开始:开始黑点依旧可以从左边进行拖动放置: 这就是状态的开始,和活动图泳道图是一样的;只能有一个开始,但是可以有多个…

快速上手 INFINI Console 的 TopN 指标功能

背景 在分布式搜索引擎系统(如 Easysearch、Elasticsearch 和 OpenSearch)中,性能监控至关重要。为了确保系统的高效运行和资源的合理分配,我们通常需要关注一段时间内关键资源的使用情况,特别是索引、节点和分片的内…

springboot vue uniapp 仿小红书 1:1 还原 (含源码演示)

线上预览: 移动端 http://8.146.211.120:8081/ 管理端 http://8.146.211.120:8088/ 小红书凭借优秀的产品体验 和超高人气 目前成为笔记类产品佼佼者 此项目将详细介绍如何使用Vue.js和Spring Boot 集合uniapp 开发一个仿小红书应用,凭借uniapp 可以在h5 小程序 app…

面向对象分析与设计Python版 分析与设计概述

文章目录 一、软件工程概述二、分析与设计概述三、领域模型 一、软件工程概述 高质量软件系统的基本要求 架构性内聚可重用性可维护性可扩展性灵活性 软件开发过程模型:是指根据软件开发项目从开始到结束的一系列步骤和方法,建模为不同的模型。常见的…

3D目标检测数据集——Waymo数据集

Waymo数据集簡介 发布首页:https://waymo.com/open/ 论文:https://openaccess.thecvf.com/content_CVPR_2020/papers/Sun_Scalability_in_Perception_for_Autonomous_Driving_Waymo_Open_Dataset_CVPR_2020_paper.pdf github:https://github.…

[笔记] 使用 Jenkins 实现 CI/CD :从 GitLab 拉取 Java 项目并部署至 Windows Server

随着软件开发节奏的加快,持续集成(CI)和持续部署(CD)已经成为确保软件质量和加速产品发布的不可或缺的部分。Jenkins作为一款广泛使用的开源自动化服务器,为开发者提供了一个强大的平台来实施这些实践。然而…

基于“大型园区”网络设计

基于“大型园区”网络设计 目 录 第1章 项目概述1 1.1 项目背景1 1.2 公司概况1 1.3 网络现状2 第2章 需求分析4 2.1 部门需求4 2.2 配置需求4 2.3 网络功能需求5 第3章 网络设计6 3.1 建设原则6 3.2 网络拓扑结构6 3.3 IP地址和VLAN划分8 3.4 核心层设计9 3.5 …