Browse Source
* 🔥 Disable action Watch Docs Previews * 🔧 Use predefined name for docs artifacts for previews * ✨ Add new GitHub Action Comment Docs Preview in PR * 🔧 Refactor GitHub Action Preview Docs to work as workflow_run using new action to extract where to commentpull/2246/head
committed by
GitHub
6 changed files with 137 additions and 37 deletions
@ -0,0 +1,7 @@ |
|||||
|
FROM python:3.7 |
||||
|
|
||||
|
RUN pip install httpx "pydantic==1.5.1" pygithub |
||||
|
|
||||
|
COPY ./app /app |
||||
|
|
||||
|
CMD ["python", "/app/main.py"] |
@ -0,0 +1,13 @@ |
|||||
|
name: Comment Docs Preview in PR |
||||
|
description: Comment with the docs URL preview in the PR |
||||
|
author: Sebastián Ramírez <tiangolo@gmail.com> |
||||
|
inputs: |
||||
|
token: |
||||
|
description: Token for the repo. Can be passed in using {{ secrets.GITHUB_TOKEN }} |
||||
|
required: true |
||||
|
deploy_url: |
||||
|
description: The deployment URL to comment in the PR |
||||
|
required: true |
||||
|
runs: |
||||
|
using: docker |
||||
|
image: Dockerfile |
@ -0,0 +1,70 @@ |
|||||
|
import logging |
||||
|
import sys |
||||
|
from pathlib import Path |
||||
|
from typing import Optional |
||||
|
|
||||
|
import httpx |
||||
|
from github import Github |
||||
|
from github.PullRequest import PullRequest |
||||
|
from pydantic import BaseModel, BaseSettings, SecretStr, ValidationError |
||||
|
|
||||
|
github_api = "https://api.github.com" |
||||
|
|
||||
|
|
||||
|
class Settings(BaseSettings): |
||||
|
github_repository: str |
||||
|
github_event_path: Path |
||||
|
github_event_name: Optional[str] = None |
||||
|
input_token: SecretStr |
||||
|
input_deploy_url: str |
||||
|
|
||||
|
|
||||
|
class PartialGithubEventHeadCommit(BaseModel): |
||||
|
id: str |
||||
|
|
||||
|
|
||||
|
class PartialGithubEventWorkflowRun(BaseModel): |
||||
|
head_commit: PartialGithubEventHeadCommit |
||||
|
|
||||
|
|
||||
|
class PartialGithubEvent(BaseModel): |
||||
|
workflow_run: PartialGithubEventWorkflowRun |
||||
|
|
||||
|
|
||||
|
if __name__ == "__main__": |
||||
|
logging.basicConfig(level=logging.INFO) |
||||
|
settings = Settings() |
||||
|
logging.info(f"Using config: {settings.json()}") |
||||
|
g = Github(settings.input_token.get_secret_value()) |
||||
|
repo = g.get_repo(settings.github_repository) |
||||
|
try: |
||||
|
event = PartialGithubEvent.parse_file(settings.github_event_path) |
||||
|
except ValidationError as e: |
||||
|
logging.error(f"Error parsing event file: {e.errors()}") |
||||
|
sys.exit(0) |
||||
|
use_pr: Optional[PullRequest] = None |
||||
|
for pr in repo.get_pulls(): |
||||
|
if pr.head.sha == event.workflow_run.head_commit.id: |
||||
|
use_pr = pr |
||||
|
break |
||||
|
if not use_pr: |
||||
|
logging.error( |
||||
|
f"No PR found for hash: {event.workflow_run.head_commit.id}" |
||||
|
) |
||||
|
sys.exit(0) |
||||
|
github_headers = { |
||||
|
"Authorization": f"token {settings.input_token.get_secret_value()}" |
||||
|
} |
||||
|
url = f"{github_api}/repos/{settings.github_repository}/issues/{use_pr.number}/comments" |
||||
|
logging.info(f"Using comments URL: {url}") |
||||
|
response = httpx.post( |
||||
|
url, |
||||
|
headers=github_headers, |
||||
|
json={ |
||||
|
"body": f"📝 Docs preview for commit {use_pr.head.sha} at: {settings.input_deploy_url}" |
||||
|
}, |
||||
|
) |
||||
|
if not (200 <= response.status_code <= 300): |
||||
|
logging.error(f"Error posting comment: {response.text}") |
||||
|
sys.exit(1) |
||||
|
logging.info("Finished") |
@ -1,13 +1,13 @@ |
|||||
name: Watch Docs Previews |
# name: Watch Docs Previews |
||||
on: |
# on: |
||||
schedule: |
# schedule: |
||||
- cron: "0 * * * *" |
# - cron: "0 * * * *" |
||||
|
|
||||
jobs: |
# jobs: |
||||
deploy: |
# deploy: |
||||
runs-on: ubuntu-18.04 |
# runs-on: ubuntu-18.04 |
||||
steps: |
# steps: |
||||
- uses: actions/checkout@v2 |
# - uses: actions/checkout@v2 |
||||
- uses: ./.github/actions/watch-previews |
# - uses: ./.github/actions/watch-previews |
||||
with: |
# with: |
||||
token: ${{ secrets.ACTIONS_TOKEN }} |
# token: ${{ secrets.ACTIONS_TOKEN }} |
||||
|
Loading…
Reference in new issue