fix: make Cloud Mail upgrade script idempotent
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Finalize the temporary Cloud Mail upgrade.
|
||||
|
||||
The Cloud Mail provider patch has already been applied to main. This script is
|
||||
kept intentionally small and idempotent so the temporary GitHub Actions workflow
|
||||
can re-run safely and then remove itself plus this file.
|
||||
"""
|
||||
from pathlib import Path
|
||||
import ast
|
||||
import json
|
||||
import re
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
APP_PATH = ROOT / "grok_register_ttk.py"
|
||||
CONFIG_PATH = ROOT / "config.example.json"
|
||||
README_PATH = ROOT / "README.md"
|
||||
|
||||
app = APP_PATH.read_text(encoding="utf-8-sig")
|
||||
|
||||
# Repair the only known bad generated form from the interrupted bot attempt.
|
||||
# It turns valid source into:
|
||||
# combined = "
|
||||
# ".join(parts)
|
||||
# before ast.parse(). Keep this here so the workflow is safe even if it is run
|
||||
# on a half-applied workspace.
|
||||
app = app.replace('combined = "\n".join(parts)', 'combined = "\\n".join(parts)')
|
||||
|
||||
required_app_markers = [
|
||||
'"cloudmail_api_base": ""',
|
||||
'"cloudmail_public_token": ""',
|
||||
'"cloudmail_domains": ""',
|
||||
'"cloudmail_path_messages": "/api/public/emailList"',
|
||||
'_cloudmail_domain_index = 0',
|
||||
'def cloudmail_get_email_and_token():',
|
||||
'def cloudmail_get_messages(address):',
|
||||
'def cloudmail_get_oai_code(',
|
||||
'if provider == "cloudmail":\n return cloudmail_get_email_and_token()',
|
||||
'if provider == "cloudmail":\n return cloudmail_get_oai_code(',
|
||||
'["duckmail", "yyds", "cloudflare", "cloudmail"]',
|
||||
'self.cloudmail_api_base_var',
|
||||
'self.cloudmail_public_token_var',
|
||||
'self.cloudmail_domains_var',
|
||||
'Cloud Mail 模式缺少配置',
|
||||
]
|
||||
missing = [marker for marker in required_app_markers if marker not in app]
|
||||
if missing:
|
||||
raise RuntimeError("Cloud Mail upgrade is not fully applied; missing markers: " + ", ".join(missing))
|
||||
|
||||
ast.parse(app)
|
||||
APP_PATH.write_text(app, encoding="utf-8-sig")
|
||||
|
||||
config_text = CONFIG_PATH.read_text(encoding="utf-8")
|
||||
config = json.loads(config_text)
|
||||
for key in (
|
||||
"cloudmail_api_base",
|
||||
"cloudmail_public_token",
|
||||
"cloudmail_domains",
|
||||
"cloudmail_path_messages",
|
||||
):
|
||||
if key not in config:
|
||||
raise RuntimeError(f"config.example.json missing {key}")
|
||||
|
||||
readme = README_PATH.read_text(encoding="utf-8")
|
||||
required_readme_markers = [
|
||||
"Cloud Mail 无人收件模式(可选)",
|
||||
"cloudmail_api_base",
|
||||
"cloudmail_public_token",
|
||||
"cloudmail_domains",
|
||||
"POST /api/public/emailList",
|
||||
]
|
||||
missing_readme = [marker for marker in required_readme_markers if marker not in readme]
|
||||
if missing_readme:
|
||||
raise RuntimeError("README Cloud Mail docs are incomplete: " + ", ".join(missing_readme))
|
||||
|
||||
print("Cloud Mail upgrade is already applied and syntactically valid.")
|
||||
Reference in New Issue
Block a user