79 lines
4.0 KiB
Python
79 lines
4.0 KiB
Python
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
|