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

server/2025/1/15 15:07:17/

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

步骤

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

示例代码

python">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. 示例代码

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

python">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.ppmy.cn/server/158586.html

相关文章

Pyinstaller打包部署在Win2008上的Bug排查之路

1.前言 python项目的部署工作基本是属于算法的最后阶段,同样也是最容易出现问题的阶段,毕竟IDE中的运行甚至debug都是可以直接给出问题,再加上开发机器的版本较新,也很少会出现各种各样的dll系统问题。win和linux部署相比&#x…

【maptalks】加载SVG和GIF

加载SVG和GIF 一、加载SVG方法一:直接载入SVG文件,类似载入图片方法二:载入SVG路径 二、加载GIFVUEmaptalks实现GIF可拖拽点VUEmaptalks实现GIF跟随线条动画 一、加载SVG 方法一:直接载入SVG文件,类似载入图片 缺点&…

Redisson和可重入锁初认

文章目录 Redisson 简介Redisson 的主要特点Redisson 的核心模块Redisson的优势使用示例Maven 引入依赖配置 Redisson 客户端分布式锁使用示例 Redisson 使用场景总结 可重入锁关键特性为什么需要可重入锁可重入锁的实现方式可重入锁的实现原理可重入锁的优缺点优点缺点 可重入…

【Python】使用python 对excel文件进行加密

最近在跟同事对接工作的时候,我需要把Excel文件发给对方。 但是由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,保障数据的安全。 在Python中,有多种方法可以对Excel文件进行加密。以下是几…

好用的php商城源码有哪些?

选择一个优秀的商城工具,能更好地帮助大家建立一个好用的商城系统。目前比较流行的都是开源PHP商城系统,那么现实中都有哪些好用的PHP商城源码值得推荐呢?下面就带大家一起来了解一下。 1.TigShop 【推荐指数】:★★★★★☆ 【推…

day08_Kafka

文章目录 day08_Kafka课程笔记一、今日课程内容一、消息队列(了解)**为什么消息队列就像是“数据的快递员”?****实际意义**1、产生背景2、消息队列介绍2.1 常见的消息队列产品2.2 应用场景2.3 消息队列中两种消息模型 二、Kafka的基本介绍1、…

springboot基于安卓的反诈APP

Spring Boot基于安卓的反诈APP是一个结合了Spring Boot后端技术和安卓前端技术的反诈骗应用程序,旨在为用户提供全面、高效的反诈防护服务。 一、技术架构 后端:采用Spring Boot框架,利用其自动配置、简化依赖管理等功能,构建…

Open FPV VTX开源之第一次出图

Open FPV VTX开源之第一次出图 1. 源由2. 连线2.1 飞控2.2 调试 3. serial3.1 启动log - uboot3.2 登录版本 - linux3.3 获取有线IP 4. ssh - linux5. PixelPilot出图6. 总结7. 参考资料8. 补充8.1 8812AU网卡8.2 DEBUG串口部分乱码8.3 偶尔启动卡住8.4 花屏、丢包严重 1. 源由…