import re
from github import Github
-from pydantic import SecretStr
+from pydantic import BaseModel, SecretStr
from pydantic_settings import BaseSettings
is_done: bool = False
-def main():
+class LinkData(BaseModel):
+ previous_link: str
+ preview_link: str
+ en_link: str | None = None
+
+
+def main() -> None:
logging.basicConfig(level=logging.INFO)
settings = Settings()
docs_files = [f for f in files if f.filename.startswith("docs/")]
deploy_url = settings.deploy_url.rstrip("/")
- lang_links: dict[str, list[str]] = {}
+ lang_links: dict[str, list[LinkData]] = {}
for f in docs_files:
match = re.match(r"docs/([^/]+)/docs/(.*)", f.filename)
if not match:
path = path.replace("index.md", "")
else:
path = path.replace(".md", "/")
+ en_path = path
if lang == "en":
- link = f"{deploy_url}/{path}"
+ use_path = en_path
else:
- link = f"{deploy_url}/{lang}/{path}"
+ use_path = f"{lang}/{path}"
+ link = LinkData(
+ previous_link=f"https://fastapi.tiangolo.com/{use_path}",
+ preview_link=f"{deploy_url}/{use_path}",
+ )
+ if lang != "en":
+ link.en_link = f"https://fastapi.tiangolo.com/{en_path}"
lang_links.setdefault(lang, []).append(link)
- links: list[str] = []
+ links: list[LinkData] = []
en_links = lang_links.get("en", [])
- en_links.sort()
+ en_links.sort(key=lambda x: x.preview_link)
links.extend(en_links)
langs = list(lang_links.keys())
if lang == "en":
continue
current_lang_links = lang_links[lang]
- current_lang_links.sort()
+ current_lang_links.sort(key=lambda x: x.preview_link)
links.extend(current_lang_links)
message = f"📝 Docs preview for commit {settings.commit_sha} at: {deploy_url}"
if links:
message += "\n\n### Modified Pages\n\n"
- message += "\n".join([f"* {link}" for link in links])
+ for link in links:
+ message += f"* {link.preview_link}"
+ message += f" - ([before]({link.previous_link}))"
+ if link.en_link:
+ message += f" - ([English]({link.en_link}))"
+ message += "\n"
print(message)
use_pr.as_issue().create_comment(message)