mybot/jobs/bot_execute.py

79 lines
4.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from base_api.project_api import ProjectApi
from loguru import logger
import time
from controller.get_access_token import bot_access_token
from jobs.scheduler import scheduler
from config.config import GLOBAL_VAR, ENV_VAR
from controller.get_job_config import get_job_config
from config.config import DefaultConfig
def do_job():
host = ENV_VAR.get("host")
bot = ENV_VAR.get("bot")
if GLOBAL_VAR:
for key, value in GLOBAL_VAR.items():
project = key
bot_installer_id = value.get("bot_installer_id")
# 获取项目的JOB配置
access_token = bot_access_token(host, bot, bot_installer_id)
logger.debug(f"输入授权token{access_token}")
config_info = get_job_config(host=ENV_VAR["host"], project=project, access_token=access_token,
keyword=DefaultConfig.issue_keyword)
job_config = config_info.get("job_config", None)
issue_id = config_info.get("issue_id")
commits = value.get("commits")
# 判断定时任务是否已存在,已存在则不创建,不存在则创建
job = scheduler.get_job(f"{key}_create_version")
if (not job) and commits and job_config:
logger.debug(f"定时任务:{key}_create_version 不存在commits不为空, 存在job配置进行创建")
# 定义一个定时任务:通过配置执行定时任务
scheduler.add_job(id=f"{key}_create_version", func=bot_execute,
args=[host, project, access_token, commits, issue_id],
**job_config)
def bot_execute(host, project, access_token, commits_info, issue_id):
try:
to_remove = [] # 创建一个列表,用于存储待删除的键值对
if GLOBAL_VAR.get(project):
now_time = time.strftime("%Y-%m-%d %H-%M-%S", time.localtime())
# _k是分支 _v是分支的commits信息需要针对不同分支提交分别创建发行版
for _k, _v in commits_info.items():
# 将所有的commit信息拼接成一个字符串
body = ""
for i in range(len(_v)):
body += str(i + 1) + ". " + _v[i] + "\n"
req_data = {
"tag_name": f"{_k}-{str(time.time())[:8]}",
"name": f"bot触发创建: {_k} || {now_time}",
"body": f"bot检测到仓库有推送触发发行版的自动创建,commit信息如下\n\n{body}",
"target_commitish": _k
}
logger.debug(f"请求接口的参数:{req_data}")
# 调用接口创建发行版
res = ProjectApi(host=host, project=project, access_token=access_token).create_version(
req_data=req_data)
if "发布成功" in str(res):
result = f"创建发行版成功~ 响应数据是:{res}"
to_remove.append(_k)
else:
result = f"创建发行版失败, 响应数据是:{res}"
logger.debug(f"创建发行版结束,响应数据是:{res}")
# 调用新建疑修评论接口创建疑修评论
payload = {
"notes": f"Bot执行创建发行版任务{_k}分支 || {result}",
"receivers_login": []
}
res = ProjectApi(host=host, project=project, access_token=access_token).new_issue_journals(issue_id,
payload)
logger.debug(f"调用接口创建疑修评论成功~, 响应数据是:{res}")
# 已经创建成功发行版的分支,移除
for key in to_remove:
GLOBAL_VAR[project]["commits"].pop(key)
logger.debug(f"创建发行版结束后,全局变量:{GLOBAL_VAR}")
except Exception as e:
raise e