#!/usr/bin/env python3 from __future__ import annotations import argparse import html import json import re import sys import urllib.error import urllib.request from dataclasses import dataclass from pathlib import Path from typing import Any from urllib.parse import unquote DEFAULT_ACTIONS_URL = "https://gitea.wooo.work/wooo/awoooi/actions" DEFAULT_CD_WORKFLOW_ACTIONS_URL = ( "https://gitea.wooo.work/wooo/awoooi/actions?workflow=cd.yaml&actor=0&status=0" ) DEFAULT_ACTIONS_LIST_API_URL = ( "https://gitea.wooo.work/api/v1/repos/wooo/awoooi/actions/runs?limit=10" ) DEFAULT_CD_RUN_JOBS_API_URL = "" DEFAULT_CD_BUILD_JOB_LOG_URL_TEMPLATE = ( "https://gitea.wooo.work/wooo/awoooi/actions/runs/{run_id}/jobs/3/logs" ) DEFAULT_CD_TESTS_JOB_LOG_URL_TEMPLATE = ( "https://gitea.wooo.work/wooo/awoooi/actions/runs/{run_id}/jobs/2/logs" ) DEFAULT_HARBOR_110_REPAIR_JOB_LOG_URL_TEMPLATE = ( "https://gitea.wooo.work/wooo/awoooi/actions/runs/{run_id}/jobs/1/logs" ) SCHEMA_VERSION = "awoooi_public_gitea_actions_queue_readback_v1" EXPECTED_HARBOR_110_REPAIR_JOB_NAMES = { "workflow-shape", "harbor-110-local-repair", } CD_WORKFLOW_JOB_NAMES = { "build-and-deploy", "post-deploy-checks", "tests", } _RUN_ROW_RE = re.compile( r'.*?' r"([^<]+):([^<]+)", re.S, ) _RUN_ITEM_SPLIT_RE = re.compile(r'
') _RUN_LINK_RE = re.compile( r'', re.S, ) _RUN_STATUS_RE = re.compile(r'') _RUN_BODY_RE = re.compile(r"([^<]+):\s*([^<]+)", re.S) _RUN_COMMIT_RE = re.compile(r"/wooo/awoooi/commit/([0-9a-f]{40})") _RUN_NAME_RE = re.compile(r"^(?P.+)\s+#(?P\d+)$") _WORKFLOW_FILTER_ITEM_RE = re.compile( r'' r"(?P.*?)", re.S, ) _NO_MATCHING_LABEL_RE = re.compile( r"No matching online runner with label:\s*(?P