Skip to content

Commit 44ad9bd

Browse files
authored
👷 Update docs previews comment, single comment, add failure status (#1586)
1 parent 5289532 commit 44ad9bd

File tree

2 files changed

+46
-14
lines changed

2 files changed

+46
-14
lines changed

.github/workflows/deploy-docs.yml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ jobs:
4444
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
4545
COMMIT_SHA: ${{ github.event.workflow_run.head_sha }}
4646
RUN_ID: ${{ github.run_id }}
47-
47+
STATE: "pending"
4848
- name: Clean site
4949
run: |
5050
rm -rf ./site
@@ -68,11 +68,19 @@ jobs:
6868
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
6969
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
7070
command: pages deploy ./site --project-name=${{ env.PROJECT_NAME }} --branch=${{ env.BRANCH }}
71+
- name: Deploy Docs Status Error
72+
if: failure()
73+
run: python ./scripts/deploy_docs_status.py
74+
env:
75+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
76+
COMMIT_SHA: ${{ github.event.workflow_run.head_sha }}
77+
RUN_ID: ${{ github.run_id }}
78+
STATE: "error"
7179
- name: Comment Deploy
7280
run: python ./scripts/deploy_docs_status.py
7381
env:
7482
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
7583
DEPLOY_URL: ${{ steps.deploy.outputs.deployment-url }}
7684
COMMIT_SHA: ${{ github.event.workflow_run.head_sha }}
7785
RUN_ID: ${{ github.run_id }}
78-
IS_DONE: "true"
86+
STATE: "success"

scripts/deploy_docs_status.py

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import logging
22
import re
3+
from typing import Literal
34

4-
from github import Github
5+
from github import Auth, Github
56
from pydantic import BaseModel, SecretStr
67
from pydantic_settings import BaseSettings
78

@@ -14,7 +15,7 @@ class Settings(BaseSettings):
1415
deploy_url: str | None = None
1516
commit_sha: str
1617
run_id: int
17-
is_done: bool = False
18+
state: Literal["pending", "success", "error"] = "pending"
1819

1920

2021
class LinkData(BaseModel):
@@ -27,7 +28,7 @@ def main() -> None:
2728
settings = Settings()
2829

2930
logging.info(f"Using config: {settings.model_dump_json()}")
30-
g = Github(settings.github_token.get_secret_value())
31+
g = Github(auth=Auth.Token(settings.github_token.get_secret_value()))
3132
repo = g.get_repo(settings.github_repository)
3233
use_pr = next(
3334
(pr for pr in repo.get_pulls() if pr.head.sha == settings.commit_sha), None
@@ -38,24 +39,35 @@ def main() -> None:
3839
commits = list(use_pr.get_commits())
3940
current_commit = [c for c in commits if c.sha == settings.commit_sha][0]
4041
run_url = f"https://github.com/{settings.github_repository}/actions/runs/{settings.run_id}"
41-
if settings.is_done and not settings.deploy_url:
42+
if settings.state == "pending":
4243
current_commit.create_status(
43-
state="success",
44-
description="No Docs Changes",
44+
state="pending",
45+
description="Deploying Docs",
4546
context="deploy-docs",
4647
target_url=run_url,
4748
)
48-
logging.info("No docs changes found")
49+
logging.info("No deploy URL available yet")
4950
return
51+
if settings.state == "error":
52+
current_commit.create_status(
53+
state="error",
54+
description="Error Deploying Docs",
55+
context="deploy-docs",
56+
target_url=run_url,
57+
)
58+
logging.info("Error deploying docs")
59+
return
60+
assert settings.state == "success"
5061
if not settings.deploy_url:
5162
current_commit.create_status(
52-
state="pending",
53-
description="Deploying Docs",
63+
state="success",
64+
description="No Docs Changes",
5465
context="deploy-docs",
5566
target_url=run_url,
5667
)
57-
logging.info("No deploy URL available yet")
68+
logging.info("No docs changes found")
5869
return
70+
assert settings.deploy_url
5971
current_commit.create_status(
6072
state="success",
6173
description="Docs Deployed",
@@ -84,7 +96,9 @@ def main() -> None:
8496
links.append(link)
8597
links.sort(key=lambda x: x.preview_link)
8698

87-
message = f"📝 Docs preview for commit {settings.commit_sha} at: {deploy_url}"
99+
header = "## 📝 Docs preview"
100+
message = header
101+
message += f"\n\nLast commit {settings.commit_sha} at: {deploy_url}"
88102

89103
if links:
90104
message += "\n\n### Modified Pages\n\n"
@@ -94,7 +108,17 @@ def main() -> None:
94108
message += "\n"
95109

96110
print(message)
97-
use_pr.as_issue().create_comment(message)
111+
issue = use_pr.as_issue()
112+
comments = list(issue.get_comments())
113+
for comment in comments:
114+
if (
115+
comment.body.startswith(header)
116+
and comment.user.login == "github-actions[bot]"
117+
):
118+
comment.edit(message)
119+
break
120+
else:
121+
issue.create_comment(message)
98122

99123
logging.info("Finished")
100124

0 commit comments

Comments
 (0)