deployments: write
issues: write
pull-requests: write
+ statuses: write
jobs:
deploy-docs:
GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT"
- uses: actions/checkout@v4
+ - name: Set up Python
+ uses: actions/setup-python@v5
+ with:
+ python-version: "3.11"
+ - uses: actions/cache@v4
+ id: cache
+ with:
+ path: ${{ env.pythonLocation }}
+ key: ${{ runner.os }}-python-github-actions-${{ env.pythonLocation }}-${{ hashFiles('requirements-github-actions.txt') }}-v01
+ - name: Install GitHub Actions dependencies
+ if: steps.cache.outputs.cache-hit != 'true'
+ run: pip install -r requirements-github-actions.txt
+ - name: Deploy Docs Status Pending
+ 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 }}
+
- name: Clean site
run: |
rm -rf ./site
directory: './site'
gitHubToken: ${{ secrets.GITHUB_TOKEN }}
branch: ${{ ( github.event.workflow_run.head_repository.full_name == github.repository && github.event.workflow_run.head_branch == 'main' && 'main' ) || ( github.event.workflow_run.head_sha ) }}
- - name: Set up Python
- uses: actions/setup-python@v5
- with:
- python-version: "3.11"
- - uses: actions/cache@v4
- id: cache
- with:
- path: ${{ env.pythonLocation }}
- key: ${{ runner.os }}-python-github-actions-${{ env.pythonLocation }}-${{ hashFiles('requirements-github-actions.txt') }}-v01
- - name: Install GitHub Actions dependencies
- if: steps.cache.outputs.cache-hit != 'true'
- run: pip install -r requirements-github-actions.txt
- name: Comment Deploy
if: steps.deploy.outputs.url != ''
- run: python ./scripts/comment_docs_deploy_url_in_pr.py
+ run: python ./scripts/deploy_docs_status.py
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DEPLOY_URL: ${{ steps.deploy.outputs.url }}
COMMIT_SHA: ${{ github.event.workflow_run.head_sha }}
+ RUN_ID: ${{ github.run_id }}
+++ /dev/null
-import logging
-import sys
-
-from github import Github
-from pydantic import SecretStr
-from pydantic_settings import BaseSettings
-
-
-class Settings(BaseSettings):
- github_repository: str
- github_token: SecretStr
- deploy_url: str
- commit_sha: str
-
-
-if __name__ == "__main__":
- logging.basicConfig(level=logging.INFO)
- settings = Settings()
- logging.info(f"Using config: {settings.model_dump_json()}")
- g = Github(settings.github_token.get_secret_value())
- repo = g.get_repo(settings.github_repository)
- use_pr = next(
- (pr for pr in repo.get_pulls() if pr.head.sha == settings.commit_sha), None
- )
- if not use_pr:
- logging.error(f"No PR found for hash: {settings.commit_sha}")
- sys.exit(0)
- use_pr.as_issue().create_comment(
- f"📝 Docs preview for commit {settings.commit_sha} at: {settings.deploy_url}"
- )
- logging.info("Finished")
--- /dev/null
+import logging
+import re
+
+from github import Github
+from pydantic import SecretStr
+from pydantic_settings import BaseSettings
+
+
+class Settings(BaseSettings):
+ github_repository: str
+ github_token: SecretStr
+ deploy_url: str | None = None
+ commit_sha: str
+ run_id: int
+
+
+def main():
+ logging.basicConfig(level=logging.INFO)
+ settings = Settings()
+
+ logging.info(f"Using config: {settings.model_dump_json()}")
+ g = Github(settings.github_token.get_secret_value())
+ repo = g.get_repo(settings.github_repository)
+ use_pr = next(
+ (pr for pr in repo.get_pulls() if pr.head.sha == settings.commit_sha), None
+ )
+ if not use_pr:
+ logging.error(f"No PR found for hash: {settings.commit_sha}")
+ return
+ commits = list(use_pr.get_commits())
+ 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}"
+ if not settings.deploy_url:
+ current_commit.create_status(
+ state="pending",
+ description="Deploy Docs",
+ context="deploy-docs",
+ target_url=run_url,
+ )
+ logging.info("No deploy URL available yet")
+ return
+ current_commit.create_status(
+ state="success",
+ description="Deploy Docs",
+ context="deploy-docs",
+ target_url=run_url,
+ )
+
+ files = list(use_pr.get_files())
+ docs_files = [f for f in files if f.filename.startswith("docs/")]
+
+ deploy_url = settings.deploy_url.rstrip("/")
+ links: list[str] = []
+ for f in docs_files:
+ match = re.match(r"docs/(.*)", f.filename)
+ assert match
+ path = match.group(1)
+ if path.endswith("index.md"):
+ path = path.replace("index.md", "")
+ else:
+ path = path.replace(".md", "/")
+ link = f"{deploy_url}/{path}"
+ links.append(link)
+ links.sort()
+
+ 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])
+
+ print(message)
+ use_pr.as_issue().create_comment(message)
+
+ logging.info("Finished")
+
+
+if __name__ == "__main__":
+ main()