+++ /dev/null
-FROM python:3.7
-
-RUN pip install httpx "pydantic==1.5.1"
-
-COPY ./app /app
-
-CMD ["python", "/app/main.py"]
+++ /dev/null
-name: "Get Artifact"
-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'
+++ /dev/null
-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")
- name: Build Docs
run: python3.7 ./scripts/docs.py build-all
- name: Zip docs
- if: github.event_name == 'pull_request'
run: bash ./scripts/zip-docs.sh
- uses: actions/upload-artifact@v2
- if: github.event_name == 'pull_request'
with:
name: docs-zip
path: ./docs.zip
- Build Docs
types:
- completed
- # workflow_dispatch:
- # inputs:
- # pr:
- # description: Pull Request number
- # required: true
- # name:
- # description: Artifact name for zip file with docs
- # required: true
- # commit:
- # description: Commit SHA hash
- # required: true
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- # - uses: ./.github/actions/get-artifact
- # with:
- # token: ${{ secrets.GITHUB_TOKEN }}
- # name: ${{ github.event.inputs.name }}
- # path: ./archive.zip
- # - name: Unzip docs
- # run: bash ./scripts/unzip-docs.sh
- name: Download Artifact Docs
uses: dawidd6/action-download-artifact@v2.9.0
with:
+++ /dev/null
-# name: Watch Docs Previews
-# on:
-# schedule:
-# - cron: "0 * * * *"
-
-# jobs:
-# deploy:
-# runs-on: ubuntu-18.04
-# steps:
-# - uses: actions/checkout@v2
-# - uses: ./.github/actions/watch-previews
-# with:
-# token: ${{ secrets.ACTIONS_TOKEN }}
+++ /dev/null
-#! /usr/bin/env bash
-
-set -x
-set -e
-
-PR=${PR:?Variable not set}
-DEPLOY_URL=${DEPLOY_URL:?Variable not set}
-GITHUB_TOKEN=${GITHUB_TOKEN:?Variable not set}
-COMMIT=${COMMIT:?Variable not set}
-
-curl \
- -H "Authorization: token ${GITHUB_TOKEN}" \
- https://api.github.com/repos/tiangolo/fastapi/issues/${PR}/comments \
- -d '{"body": "📝 Docs preview for commit '"${COMMIT} at: ${DEPLOY_URL}"'"}'
+++ /dev/null
-#! /usr/bin/env bash
-
-set -x
-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