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

devtools/2025/1/15 6:15:50/

可以通过 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/devtools/150599.html

相关文章

client-go 的 QPS 和 Burst 限速

1. 什么是 QPS 和 Burst ? 在 kubernetes client-go 中,QPS 和 Burst 是用于控制客户端与 Kubernetes API 交互速率的两个关键参数: QPS (Queries Per Second) 定义:表示每秒允许发送的请求数量,即限速器的平滑速率…

http和https有哪些不同

http和https有哪些不同 1.数据传输的安全性:http非加密,https加密 2.端口号:http默认80端口,https默认443端口 3.性能:http基于tcp三次握手建立连接,https在tcp三次握手后还有TLS协议的四次握手确认加密…

win32汇编环境,窗口程序中对多行编辑框的操作

;运行效果 ;win32汇编环境,窗口程序中对多行编辑框的操作 ;比如生成多行编辑框,显示文本、获取文本、设置滚动条、捕获超出文本长度消息等。 ;直接抄进RadAsm可编译运行。重点部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>&g…

【Pandas】pandas Series rtruediv

Pandas2.2 Series Binary operator functions 方法描述Series.add()用于对两个 Series 进行逐元素加法运算Series.sub()用于对两个 Series 进行逐元素减法运算Series.mul()用于对两个 Series 进行逐元素乘法运算Series.div()用于对两个 Series 进行逐元素除法运算Series.true…

Git 的基本概念

Git 是一种分布式版本控制系统,用于跟踪文件的修改历史和协同多人开发。 Git 的基本概念包括: 仓库(Repository):存储项目文件的地方。分支(Branch):用于同时进行多个任务或开发多…

房建工程项目管理软件提升效率的关键工具

在当今快速发展的建筑业中,房建工程项目的管理变得日益复杂。益企工程云作为一款顶级的工程项目管理软件,通过其全面且强大的功能,显著提升了项目管理的效率和质量。本文将探讨益企工程云如何在房建工程项目中发挥关键作用,助力企…

《淘宝买家秀 API 爬虫:Java 实现与数据解析》

在电商领域,买家秀作为商品评价的重要组成部分,对于消费者决策和商家运营都有着不可忽视的价值。淘宝作为国内领先的电商平台,其买家秀数据丰富且具有高度的参考价值。本文将详细介绍如何使用 Java 爬虫技术获取淘宝买家秀 API 的返回值&…

2025网络架构

一、园区网络概述。 园区网络典型层次和区域: 核心层:是园区网骨干,是园区数据交换的核心,联接园区网的各个组成部分,如数据中心、管理中心、园区出口等。汇聚层:处于园区网的中间层次,完成数据…