committed by
GitHub
6 changed files with 52 additions and 97 deletions
@ -1,9 +0,0 @@ |
|||||
FROM python:3.10 |
|
||||
|
|
||||
COPY ./requirements.txt /app/requirements.txt |
|
||||
|
|
||||
RUN pip install -r /app/requirements.txt |
|
||||
|
|
||||
COPY ./app /app |
|
||||
|
|
||||
CMD ["python", "/app/main.py"] |
|
@ -1,13 +0,0 @@ |
|||||
name: Comment Docs Preview in PR |
|
||||
description: Comment with the docs URL preview in the PR |
|
||||
author: Sebastián Ramírez <[email protected]> |
|
||||
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 |
|
@ -1,69 +0,0 @@ |
|||||
import logging |
|
||||
import sys |
|
||||
from pathlib import Path |
|
||||
from typing import Union |
|
||||
|
|
||||
import httpx |
|
||||
from github import Github |
|
||||
from github.PullRequest import PullRequest |
|
||||
from pydantic import BaseModel, SecretStr, ValidationError |
|
||||
from pydantic_settings import BaseSettings |
|
||||
|
|
||||
github_api = "https://api.github.com" |
|
||||
|
|
||||
|
|
||||
class Settings(BaseSettings): |
|
||||
github_repository: str |
|
||||
github_event_path: Path |
|
||||
github_event_name: Union[str, None] = 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: Union[PullRequest, None] = 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,4 +1,4 @@ |
|||||
PyGithub |
PyGithub>=2.3.0,<3.0.0 |
||||
pydantic>=2.5.3,<3.0.0 |
pydantic>=2.5.3,<3.0.0 |
||||
pydantic-settings>=2.1.0,<3.0.0 |
pydantic-settings>=2.1.0,<3.0.0 |
||||
httpx |
httpx>=0.27.0,<0.28.0 |
@ -0,0 +1,31 @@ |
|||||
|
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") |
Loading…
Reference in new issue