close
The Wayback Machine - https://web.archive.org/web/20220205103720/https://github.com/tiangolo/fastapi/commit/b268c39758f5d04a11fbe4fe3b37d143aa3fca5c
Skip to content
Permalink
Browse files
Add internal GitHub action to deploy docs previews (#1739)
* 📝 Update release notes

*  Add internal GitHub action to pull docs artifact

* 🙈 Add archive.zip to gitignore
  • Loading branch information
tiangolo committed Jul 19, 2020
1 parent 4dd386b commit b268c39758f5d04a11fbe4fe3b37d143aa3fca5c
@@ -0,0 +1,7 @@
FROM python:3.7

RUN pip install httpx "pydantic==1.5.1"

COPY ./app /app

CMD ["python", "/app/main.py"]
@@ -0,0 +1,16 @@
name: "Deploy Artifact to Netlify"
description: "Get artifact, possibly uploaded by a PR, useful to deploy docs previews"
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
name:
description: 'Artifact name'
required: true
path:
description: 'Where to store the artifact'
required: true
runs:
using: 'docker'
image: 'Dockerfile'
@@ -0,0 +1,63 @@
import logging
from datetime import datetime
from pathlib import Path
from typing import List, Optional

import httpx
from pydantic import BaseModel, BaseSettings, SecretStr

github_api = "https://api.github.com"
netlify_api = "https://api.netlify.com"


class Settings(BaseSettings):
input_name: str
input_token: SecretStr
input_path: str
github_repository: str
github_event_path: Path
github_event_name: Optional[str] = None


class Artifact(BaseModel):
id: int
node_id: str
name: str
size_in_bytes: int
url: str
archive_download_url: str
expired: bool
created_at: datetime
updated_at: datetime


class ArtifactResponse(BaseModel):
total_count: int
artifacts: List[Artifact]


if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
settings = Settings()
logging.info(f"Using config: {settings.json()}")
github_headers = {
"Authorization": f"token {settings.input_token.get_secret_value()}"
}
response = httpx.get(
f"{github_api}/repos/{settings.github_repository}/actions/artifacts",
headers=github_headers,
)
data = response.json()
artifacts_response = ArtifactResponse.parse_obj(data)
use_artifact: Optional[Artifact] = None
for artifact in artifacts_response.artifacts:
if artifact.name == settings.input_name:
use_artifact = artifact
break
assert use_artifact
file_response = httpx.get(
use_artifact.archive_download_url, headers=github_headers, timeout=30
)
zip_file = Path(settings.input_path)
zip_file.write_bytes(file_response.content)
logging.info("Finished")
@@ -13,10 +13,11 @@ jobs:
deploy:
runs-on: ubuntu-18.04
steps:
- uses: actions/download-artifact@v2
- uses: ./.github/actions/get-artifact
with:
token: ${{ secrets.GITHUB_TOKEN }}
name: ${{ github.event.inputs.name }}
path: ./docs.zip
path: ./archive.zip
- name: Unzip docs
run: bash ./scripts/unzip-docs.sh
- name: Deploy to Netlify
@@ -18,6 +18,7 @@ env
docs_build
venv
docs.zip
archive.zip

# vim temporary files
*~
@@ -2,6 +2,7 @@

## Latest changes

* Add new GitHub Actions to preview docs from PRs. PR [#1738](https://github.com/tiangolo/fastapi/pull/1738).
* Add XML test coverage to support GitHub Actions. PR [#1737](https://github.com/tiangolo/fastapi/pull/1737).
* Update badges and remove Travis now that GitHub Actions is the main CI. PR [#1736](https://github.com/tiangolo/fastapi/pull/1736).
* Add GitHub Actions for CI, move from Travis. PR [#1735](https://github.com/tiangolo/fastapi/pull/1735).
@@ -6,4 +6,8 @@ set -e
if [ -d ./site/ ]; then
rm -rf ./site/
fi
unzip archive.zip
# Double zipped by GitHub when downlading the archive
unzip docs.zip
rm -rf archive.zip
rm -rf docs.zip

1 comment on commit b268c39

@github-actions

This comment has been minimized.

Copy link
Contributor

@github-actions github-actions bot commented on b268c39 Jul 19, 2020

Please sign in to comment.