mirror of
https://github.com/espressif/esp-matter.git
synced 2026-04-27 19:13:13 +00:00
66 lines
2.7 KiB
Python
66 lines
2.7 KiB
Python
# SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
|
|
|
|
# SPDX-License-Identifier: CC0-1.0
|
|
|
|
import re
|
|
import os
|
|
import requests
|
|
from gitlab_api import GitLabAPI
|
|
|
|
def cancel_branch_pipelines(gitlab_api):
|
|
url = f"{gitlab_api.gitlab_api_url}/projects/{gitlab_api.ci_project_id}/pipelines?ref={gitlab_api.ci_commit_ref_name}&status=running"
|
|
headers = {"PRIVATE-TOKEN": gitlab_api.gitlab_token}
|
|
response = requests.get(url, headers=headers)
|
|
|
|
if response.status_code == 200:
|
|
running_pipelines = response.json()
|
|
|
|
for pipeline in running_pipelines:
|
|
pipeline_id = pipeline.get('id')
|
|
source = pipeline.get('source')
|
|
ref = pipeline.get('ref')
|
|
if pipeline_id != int(gitlab_api.ci_pipeline_id) and source != 'merge_request_event':
|
|
print(f"Cancelling branch pipeline with pipeline ID: {pipeline_id}, Source:{source}, Ref: {ref}")
|
|
gitlab_api.cancel_pipeline(pipeline_id)
|
|
else:
|
|
print(f"Skipping current branch pipeline with pipeline ID: {gitlab_api.ci_pipeline_id}")
|
|
else:
|
|
print(f"Failed to fetch branch pipelines, Status Code: {response.status_code}")
|
|
|
|
def cancel_merge_request_pipelines(gitlab_api):
|
|
url = f"{gitlab_api.gitlab_api_url}/projects/{gitlab_api.ci_project_id}/pipelines?status=running"
|
|
headers = {"PRIVATE-TOKEN": gitlab_api.gitlab_token}
|
|
response = requests.get(url, headers=headers)
|
|
|
|
if response.status_code == 200:
|
|
running_pipelines = response.json()
|
|
|
|
for pipeline in running_pipelines:
|
|
pipeline_id = pipeline.get('id')
|
|
source = pipeline.get('source')
|
|
ref = pipeline.get('ref')
|
|
merge_request_id_pattern = re.match(r"refs/merge-requests/(\d+)/head", ref)
|
|
if merge_request_id_pattern:
|
|
print(f"MR pipeline id: {merge_request_id_pattern.group(1)}")
|
|
if source == "merge_request_event" and gitlab_api.ci_merge_request_iid == merge_request_id_pattern.group(1):
|
|
if pipeline_id == int(gitlab_api.ci_pipeline_id):
|
|
print(f"Skipping current MR pipeline with pipeline id: {pipeline_id} ref: {ref} source: {source}")
|
|
else:
|
|
print(f"Cancelling MR pipeline with pipeline id: {pipeline_id} ref:{ref} source: {source}")
|
|
gitlab_api.cancel_pipeline(pipeline_id)
|
|
else:
|
|
print(f"Skipping pipeline with pipeline ID: {pipeline_id} (ref: {ref}, source: {source})")
|
|
|
|
else:
|
|
print(f"Failed to fetch pipelines, Status: {response.status_code}")
|
|
|
|
|
|
def main():
|
|
gitlab_api = GitLabAPI()
|
|
cancel_branch_pipelines(gitlab_api)
|
|
cancel_merge_request_pipelines(gitlab_api)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
|