👷 Update docs previews comment, single comment, add failure status (#1586)

This commit is contained in:
Sebastián Ramírez
2025-09-30 15:29:31 +09:00
committed by GitHub
parent 528953212a
commit 44ad9bd078
2 changed files with 49 additions and 17 deletions

View File

@ -44,7 +44,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COMMIT_SHA: ${{ github.event.workflow_run.head_sha }} COMMIT_SHA: ${{ github.event.workflow_run.head_sha }}
RUN_ID: ${{ github.run_id }} RUN_ID: ${{ github.run_id }}
STATE: "pending"
- name: Clean site - name: Clean site
run: | run: |
rm -rf ./site rm -rf ./site
@ -68,6 +68,14 @@ jobs:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
command: pages deploy ./site --project-name=${{ env.PROJECT_NAME }} --branch=${{ env.BRANCH }} command: pages deploy ./site --project-name=${{ env.PROJECT_NAME }} --branch=${{ env.BRANCH }}
- name: Deploy Docs Status Error
if: failure()
run: python ./scripts/deploy_docs_status.py
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COMMIT_SHA: ${{ github.event.workflow_run.head_sha }}
RUN_ID: ${{ github.run_id }}
STATE: "error"
- name: Comment Deploy - name: Comment Deploy
run: python ./scripts/deploy_docs_status.py run: python ./scripts/deploy_docs_status.py
env: env:
@ -75,4 +83,4 @@ jobs:
DEPLOY_URL: ${{ steps.deploy.outputs.deployment-url }} DEPLOY_URL: ${{ steps.deploy.outputs.deployment-url }}
COMMIT_SHA: ${{ github.event.workflow_run.head_sha }} COMMIT_SHA: ${{ github.event.workflow_run.head_sha }}
RUN_ID: ${{ github.run_id }} RUN_ID: ${{ github.run_id }}
IS_DONE: "true" STATE: "success"

View File

@ -1,7 +1,8 @@
import logging import logging
import re import re
from typing import Literal
from github import Github from github import Auth, Github
from pydantic import BaseModel, SecretStr from pydantic import BaseModel, SecretStr
from pydantic_settings import BaseSettings from pydantic_settings import BaseSettings
@ -14,7 +15,7 @@ class Settings(BaseSettings):
deploy_url: str | None = None deploy_url: str | None = None
commit_sha: str commit_sha: str
run_id: int run_id: int
is_done: bool = False state: Literal["pending", "success", "error"] = "pending"
class LinkData(BaseModel): class LinkData(BaseModel):
@ -27,7 +28,7 @@ def main() -> None:
settings = Settings() settings = Settings()
logging.info(f"Using config: {settings.model_dump_json()}") logging.info(f"Using config: {settings.model_dump_json()}")
g = Github(settings.github_token.get_secret_value()) g = Github(auth=Auth.Token(settings.github_token.get_secret_value()))
repo = g.get_repo(settings.github_repository) repo = g.get_repo(settings.github_repository)
use_pr = next( use_pr = next(
(pr for pr in repo.get_pulls() if pr.head.sha == settings.commit_sha), None (pr for pr in repo.get_pulls() if pr.head.sha == settings.commit_sha), None
@ -38,16 +39,7 @@ def main() -> None:
commits = list(use_pr.get_commits()) commits = list(use_pr.get_commits())
current_commit = [c for c in commits if c.sha == settings.commit_sha][0] current_commit = [c for c in commits if c.sha == settings.commit_sha][0]
run_url = f"https://github.com/{settings.github_repository}/actions/runs/{settings.run_id}" run_url = f"https://github.com/{settings.github_repository}/actions/runs/{settings.run_id}"
if settings.is_done and not settings.deploy_url: if settings.state == "pending":
current_commit.create_status(
state="success",
description="No Docs Changes",
context="deploy-docs",
target_url=run_url,
)
logging.info("No docs changes found")
return
if not settings.deploy_url:
current_commit.create_status( current_commit.create_status(
state="pending", state="pending",
description="Deploying Docs", description="Deploying Docs",
@ -56,6 +48,26 @@ def main() -> None:
) )
logging.info("No deploy URL available yet") logging.info("No deploy URL available yet")
return return
if settings.state == "error":
current_commit.create_status(
state="error",
description="Error Deploying Docs",
context="deploy-docs",
target_url=run_url,
)
logging.info("Error deploying docs")
return
assert settings.state == "success"
if not settings.deploy_url:
current_commit.create_status(
state="success",
description="No Docs Changes",
context="deploy-docs",
target_url=run_url,
)
logging.info("No docs changes found")
return
assert settings.deploy_url
current_commit.create_status( current_commit.create_status(
state="success", state="success",
description="Docs Deployed", description="Docs Deployed",
@ -84,7 +96,9 @@ def main() -> None:
links.append(link) links.append(link)
links.sort(key=lambda x: x.preview_link) links.sort(key=lambda x: x.preview_link)
message = f"📝 Docs preview for commit {settings.commit_sha} at: {deploy_url}" header = "## 📝 Docs preview"
message = header
message += f"\n\nLast commit {settings.commit_sha} at: {deploy_url}"
if links: if links:
message += "\n\n### Modified Pages\n\n" message += "\n\n### Modified Pages\n\n"
@ -94,7 +108,17 @@ def main() -> None:
message += "\n" message += "\n"
print(message) print(message)
use_pr.as_issue().create_comment(message) issue = use_pr.as_issue()
comments = list(issue.get_comments())
for comment in comments:
if (
comment.body.startswith(header)
and comment.user.login == "github-actions[bot]"
):
comment.edit(message)
break
else:
issue.create_comment(message)
logging.info("Finished") logging.info("Finished")