From e6b1a2ffacb427d1b154464016b61f1f210a7cd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Wed, 31 Jul 2024 19:14:47 -0500 Subject: [PATCH 01/36] =?UTF-8?q?=F0=9F=91=B7=20Refactor=20GitHub=20Action?= =?UTF-8?q?=20to=20comment=20docs=20deployment=20URLs=20and=20update=20tok?= =?UTF-8?q?en,=20preparing=20for=20GitHub=20org=20(#896)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../comment-docs-preview-in-pr/Dockerfile | 7 -- .../comment-docs-preview-in-pr/action.yml | 13 ---- .../comment-docs-preview-in-pr/app/main.py | 68 ------------------- .github/workflows/deploy-docs.yml | 26 +++++-- requirements-github-actions.txt | 4 ++ scripts/comment_docs_deploy_url_in_pr.py | 31 +++++++++ 6 files changed, 57 insertions(+), 92 deletions(-) delete mode 100644 .github/actions/comment-docs-preview-in-pr/Dockerfile delete mode 100644 .github/actions/comment-docs-preview-in-pr/action.yml delete mode 100644 .github/actions/comment-docs-preview-in-pr/app/main.py create mode 100644 requirements-github-actions.txt create mode 100644 scripts/comment_docs_deploy_url_in_pr.py diff --git a/.github/actions/comment-docs-preview-in-pr/Dockerfile b/.github/actions/comment-docs-preview-in-pr/Dockerfile deleted file mode 100644 index 4f20c5f10b..0000000000 --- a/.github/actions/comment-docs-preview-in-pr/Dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM python:3.7 - -RUN pip install httpx "pydantic==1.5.1" pygithub - -COPY ./app /app - -CMD ["python", "/app/main.py"] diff --git a/.github/actions/comment-docs-preview-in-pr/action.yml b/.github/actions/comment-docs-preview-in-pr/action.yml deleted file mode 100644 index 0eb64402d2..0000000000 --- a/.github/actions/comment-docs-preview-in-pr/action.yml +++ /dev/null @@ -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 -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 diff --git a/.github/actions/comment-docs-preview-in-pr/app/main.py b/.github/actions/comment-docs-preview-in-pr/app/main.py deleted file mode 100644 index c9fb7cbbef..0000000000 --- a/.github/actions/comment-docs-preview-in-pr/app/main.py +++ /dev/null @@ -1,68 +0,0 @@ -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") diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 206d1199e1..1388f12320 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -6,6 +6,11 @@ on: types: - completed +permissions: + deployments: write + issues: write + pull-requests: write + jobs: deploy-docs: runs-on: ubuntu-latest @@ -38,9 +43,22 @@ jobs: directory: './site' gitHubToken: ${{ secrets.GITHUB_TOKEN }} branch: ${{ ( github.event.workflow_run.head_repository.full_name == github.repository && github.event.workflow_run.head_branch == 'master' && '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 != '' - uses: ./.github/actions/comment-docs-preview-in-pr - with: - token: ${{ secrets.GITHUB_TOKEN }} - deploy_url: "${{ steps.deploy.outputs.url }}" + run: python ./scripts/comment_docs_deploy_url_in_pr.py + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + DEPLOY_URL: ${{ steps.deploy.outputs.url }} + COMMIT_SHA: ${{ github.event.workflow_run.head_sha }} diff --git a/requirements-github-actions.txt b/requirements-github-actions.txt new file mode 100644 index 0000000000..559dc06fb2 --- /dev/null +++ b/requirements-github-actions.txt @@ -0,0 +1,4 @@ +PyGithub>=2.3.0,<3.0.0 +pydantic>=2.5.3,<3.0.0 +pydantic-settings>=2.1.0,<3.0.0 +httpx>=0.27.0,<0.28.0 diff --git a/scripts/comment_docs_deploy_url_in_pr.py b/scripts/comment_docs_deploy_url_in_pr.py new file mode 100644 index 0000000000..3148a3bb40 --- /dev/null +++ b/scripts/comment_docs_deploy_url_in_pr.py @@ -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") From b39dc70bda96263f3dba2f57f6cd38653be8655a Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 1 Aug 2024 00:15:10 +0000 Subject: [PATCH 02/36] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/release-notes.md b/docs/release-notes.md index d9c26e247f..3667d89b72 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -6,6 +6,7 @@ ### Internal +* πŸ‘· Refactor GitHub Action to comment docs deployment URLs and update token, preparing for GitHub org. PR [#896](https://github.com/tiangolo/typer/pull/896) by [@tiangolo](https://github.com/tiangolo). * πŸ”¨ Update docs Termynal scripts to not include line nums for local dev. PR [#882](https://github.com/tiangolo/typer/pull/882) by [@tiangolo](https://github.com/tiangolo). * ⬆ Bump black from 23.3.0 to 24.3.0. PR [#837](https://github.com/tiangolo/typer/pull/837) by [@dependabot[bot]](https://github.com/apps/dependabot). * ⬆ Bump pillow from 10.1.0 to 10.3.0. PR [#836](https://github.com/tiangolo/typer/pull/836) by [@dependabot[bot]](https://github.com/apps/dependabot). From 2c573c1644a595b644b60989b54a4191dc6354bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Wed, 31 Jul 2024 20:48:08 -0500 Subject: [PATCH 03/36] =?UTF-8?q?=F0=9F=91=B7=20Update=20issue-manager.yml?= =?UTF-8?q?=20GitHub=20Action=20permissions=20(#897)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/issue-manager.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/issue-manager.yml b/.github/workflows/issue-manager.yml index 31bf065b01..f6e912a23b 100644 --- a/.github/workflows/issue-manager.yml +++ b/.github/workflows/issue-manager.yml @@ -14,6 +14,9 @@ on: - labeled workflow_dispatch: +permissions: + issues: write + jobs: issue-manager: if: github.repository_owner == 'tiangolo' From 95b767e38a98ee287a7a0e28176284836e1188c2 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 1 Aug 2024 01:51:14 +0000 Subject: [PATCH 04/36] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/release-notes.md b/docs/release-notes.md index 3667d89b72..b1c777641b 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -6,6 +6,7 @@ ### Internal +* πŸ‘· Update issue-manager.yml GitHub Action permissions. PR [#897](https://github.com/tiangolo/typer/pull/897) by [@tiangolo](https://github.com/tiangolo). * πŸ‘· Refactor GitHub Action to comment docs deployment URLs and update token, preparing for GitHub org. PR [#896](https://github.com/tiangolo/typer/pull/896) by [@tiangolo](https://github.com/tiangolo). * πŸ”¨ Update docs Termynal scripts to not include line nums for local dev. PR [#882](https://github.com/tiangolo/typer/pull/882) by [@tiangolo](https://github.com/tiangolo). * ⬆ Bump black from 23.3.0 to 24.3.0. PR [#837](https://github.com/tiangolo/typer/pull/837) by [@dependabot[bot]](https://github.com/apps/dependabot). From 68e49a896638e2c211e05b673f35ab1c4743a9a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Fri, 2 Aug 2024 16:21:53 -0500 Subject: [PATCH 05/36] =?UTF-8?q?=F0=9F=8D=B1=20Update=20Typer=20icon=20an?= =?UTF-8?q?d=20logo=20(#899)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/img/favicon.png | Bin 439 -> 10912 bytes docs/img/github-social-preview.png | Bin 48377 -> 50735 bytes docs/img/github-social-preview.svg | 144 +++++++++++++++----- docs/img/icon-black.svg | 1 - docs/img/icon-square.svg | 68 +++++++++ docs/img/icon-white.svg | 59 -------- docs/img/icon.svg | 68 +++++++++ docs/img/logo-margin/logo-margin-vector.svg | 99 ++++++-------- docs/img/logo-margin/logo-margin.svg | 78 +++++------ mkdocs.yml | 2 +- 10 files changed, 329 insertions(+), 190 deletions(-) mode change 100755 => 100644 docs/img/favicon.png delete mode 100644 docs/img/icon-black.svg create mode 100644 docs/img/icon-square.svg delete mode 100644 docs/img/icon-white.svg create mode 100644 docs/img/icon.svg diff --git a/docs/img/favicon.png b/docs/img/favicon.png old mode 100755 new mode 100644 index b5ce368d78c3385574df98f9097d57ce77dfd611..05752c5c0790458dcef7867d3929adf9f699f15a GIT binary patch literal 10912 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 delta 411 zcmV;M0c8H5Rks61iBL{Q4GJ0x0000DNk~Le0000a0000a2nGNE0O0_bm;e9(1am@3 zR0s$N2z&@+hyVZp32;bRa{vGqB>(^xB>_oNB=C_oCw~DnNkl9R zA`~xCiZ@WuP2E&S58@?U>QZk}^cuDzv|GJ_l-@!RbkW9!p;Ft#nJ(smcQG@WH-GZx z$p?)ZrD>=1e1=2pRn-3{-Y{JDv5&8sqF;t7YJ>@K&Z0EO5!}-}s!%ZxIKdzQwW3C2 z+*bs&AAbS0V7H=<|EvaRm2v=G;UGgEEL=9Sn8>3wbF?u)50hL#saEgc#SH2_1t{kn zYU5dA`N9aDqPt;^_`l@x1)u^q8v>Qpkx;&^v;8uct*dgmCo+^Q#bvh<(9~?#-Ux=g zC7a4%`(-X0TYqt!$h0tq5h`#ukK*^{{|iH&vrKb8LyjM9o$VW-RSI+HBYM}xbw&Nh z3u?^ZQvKJUi!$wFjW7=ZqI{L^;YhVt=~uIJRHH^&^bJSXt-&U`d5-`9002ovPDHLk FV1lrMu0{X= diff --git a/docs/img/github-social-preview.png b/docs/img/github-social-preview.png index 73674f2e2469476e5ba3a496194306793279d5a0..12ec33812300e38fbb231fb6a7c662724e26e582 100644 GIT binary patch literal 50735 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 literal 48377 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 + inkscape:export-ydpi="96" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + inkscape:current-layer="g818" + inkscape:showpageshadow="2" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:document-units="mm" /> + id="defs2"> + + + @@ -63,32 +102,71 @@ - + Typer - + style="font-style:normal;font-weight:normal;font-size:127.57px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#1a1a1a;fill-opacity:1;stroke:none;stroke-width:3.18925" + xml:space="preserve">Typer + + + + + + + Build great CLIs. Easy to code. Based on Python type hints. diff --git a/docs/img/icon-black.svg b/docs/img/icon-black.svg deleted file mode 100644 index bc987f38b6..0000000000 --- a/docs/img/icon-black.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/img/icon-square.svg b/docs/img/icon-square.svg new file mode 100644 index 0000000000..8e2b3fcd1b --- /dev/null +++ b/docs/img/icon-square.svg @@ -0,0 +1,68 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/docs/img/icon-white.svg b/docs/img/icon-white.svg deleted file mode 100644 index 1de612ccd4..0000000000 --- a/docs/img/icon-white.svg +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - diff --git a/docs/img/icon.svg b/docs/img/icon.svg new file mode 100644 index 0000000000..6bdf83703d --- /dev/null +++ b/docs/img/icon.svg @@ -0,0 +1,68 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/docs/img/logo-margin/logo-margin-vector.svg b/docs/img/logo-margin/logo-margin-vector.svg index 815a4e77fc..ef28325eb0 100644 --- a/docs/img/logo-margin/logo-margin-vector.svg +++ b/docs/img/logo-margin/logo-margin-vector.svg @@ -1,39 +1,15 @@ - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - @@ -56,33 +31,43 @@ id="rect824" style="opacity:0.98000004;fill:none;fill-opacity:1;stroke-width:0.42965442" /> - - - - + id="g818" + transform="translate(-5.3444232)"> + style="font-weight:bold;font-size:127.57px;line-height:1.25;font-family:'Ubuntu Mono';-inkscape-font-specification:'Ubuntu Mono Bold';letter-spacing:0px;word-spacing:0px;stroke-width:3.18925" + d="m 294.86852,68.451101 v 13.01214 H 274.07461 V 147.41693 H 258.25593 V 81.463241 h -20.79391 v -13.01214 z m 63.40204,19.00793 q -2.42383,8.41962 -4.72009,16.584099 -2.16869,8.03691 -4.59252,15.81868 -2.42383,7.6542 -5.23037,15.05326 -2.67897,7.39906 -5.86822,14.41541 -2.42383,5.1028 -4.84766,8.80233 -2.29626,3.69953 -5.23037,5.99579 -2.80654,2.42383 -6.3785,3.57196 -3.44439,1.14813 -8.16448,1.14813 -3.95467,0 -7.27149,-0.63785 -3.18925,-0.63785 -5.35794,-1.65841 l 2.93411,-13.13971 q 2.5514,1.14813 4.46495,1.53084 2.04112,0.51028 4.33738,0.51028 4.59252,0 7.39906,-3.06168 2.80654,-3.06168 4.46495,-7.27149 -5.61308,-11.22616 -11.22616,-25.64157 -5.61308,-14.54298 -10.2056,-32.020069 h 16.32896 q 1.14813,4.72009 2.5514,10.07803 1.53084,5.357939 3.18925,10.715879 1.65841,5.35794 3.44439,10.58831 1.91355,5.1028 3.8271,9.56775 1.2757,-4.46495 2.67897,-9.56775 1.40327,-5.23037 2.67897,-10.46074 1.2757,-5.35794 2.42383,-10.715879 1.2757,-5.35794 2.29626,-10.2056 z m 47.4558,30.489229 q 0,-8.03691 -3.18925,-13.13971 -3.18925,-5.230369 -9.69532,-5.230369 -1.78598,0 -3.8271,0.25514 -2.04112,0.12757 -3.44439,0.255139 v 32.91306 q 1.53084,1.02056 4.08224,1.65841 2.5514,0.63785 5.1028,0.63785 5.61308,0 8.29205,-4.46495 2.67897,-4.59252 2.67897,-12.88457 z m 15.94625,-0.51028 q 0,6.88878 -1.53084,12.757 -1.53084,5.74065 -4.46495,9.95046 -2.93411,4.08224 -7.39906,6.3785 -4.46495,2.29626 -10.33317,2.29626 -5.99579,0 -12.37429,-2.93411 v 22.57989 H 369.87919 V 89.372581 q 4.33738,-1.40327 10.58831,-2.29626 6.3785,-0.89299 12.50186,-0.89299 13.90513,0 21.30419,8.41962 7.39906,8.419619 7.39906,22.835029 z m 7.90909,0.51028 q 0,-7.90934 2.42383,-13.90513 2.42383,-5.995789 6.3785,-9.950459 3.95467,-4.08224 9.05747,-6.12336 5.1028,-2.04112 10.46074,-2.04112 13.26728,0 20.15606,7.90934 6.88878,7.781769 6.88878,22.835029 0,1.53084 -0.12757,3.18925 0,1.65841 -0.12757,2.67897 h -38.90885 q 0,5.86822 4.84766,9.31261 4.84766,3.31682 12.50186,3.31682 4.72009,0 8.9299,-1.02056 4.33738,-1.02056 7.27149,-2.04112 l 2.16869,13.39485 q -4.08224,1.40327 -8.67476,2.29626 -4.59252,1.02056 -10.33317,1.02056 -7.6542,0 -13.77756,-1.91355 -5.99579,-2.04112 -10.33317,-5.86822 -4.20981,-3.95467 -6.50607,-9.69532 -2.29626,-5.74065 -2.29626,-13.39485 z m 40.18455,-6.25093 q 0,-2.42383 -0.63785,-4.59252 -0.63785,-2.29626 -2.04112,-4.08224 -1.40327,-1.78598 -3.57196,-2.80654 -2.16869,-1.148129 -5.35794,-1.148129 -3.06168,0 -5.35794,1.020559 -2.16869,1.02056 -3.69953,2.80654 -1.40327,1.78598 -2.29626,4.08224 -0.76542,2.29626 -1.02056,4.72009 z m 75.39363,-8.29205 q -1.53084,-0.38271 -3.69953,-0.76542 -2.04112,-0.38271 -4.20981,-0.63785 -2.16869,-0.38271 -4.20981,-0.51028 -2.04112,-0.12757 -3.44439,-0.12757 -3.31682,0 -6.50607,0.38271 -3.18925,0.25514 -6.50607,1.14813 v 44.52193 H 500.76552 V 91.413701 q 6.25093,-2.29626 12.757,-3.69953 6.63364,-1.40327 15.43597,-1.40327 1.2757,0 3.57196,0.12757 2.42383,0.12757 5.1028,0.51028 2.67897,0.25514 5.35794,0.76542 2.80654,0.38271 4.97523,1.14813 z" + id="text861" + aria-label="Typer" /> + + + + + + - diff --git a/docs/img/logo-margin/logo-margin.svg b/docs/img/logo-margin/logo-margin.svg index a7cf9b14f5..4501f53abd 100644 --- a/docs/img/logo-margin/logo-margin.svg +++ b/docs/img/logo-margin/logo-margin.svg @@ -1,39 +1,15 @@ - + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> image/svg+xml - @@ -62,17 +37,42 @@ id="text861" y="147.41693" x="234.27277" - style="font-style:normal;font-weight:normal;font-size:127.57019043px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:3.189255" + style="font-style:normal;font-weight:normal;font-size:127.57px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:3.18925" xml:space="preserve">Typer - + id="tspan859">Typer + + + + + + diff --git a/mkdocs.yml b/mkdocs.yml index 77024d83bb..5325a75e61 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -10,7 +10,7 @@ theme: accent: teal icon: repo: fontawesome/brands/github-alt - logo: img/icon-white.svg + logo: img/icon.svg favicon: img/favicon.png repo_name: tiangolo/typer From 05ca023c2584b92dc2a613adcc5cbb8ddc130d17 Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 2 Aug 2024 21:22:10 +0000 Subject: [PATCH 06/36] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/release-notes.md b/docs/release-notes.md index b1c777641b..e1c348f644 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -6,6 +6,7 @@ ### Internal +* 🍱 Update Typer icon and logo. PR [#899](https://github.com/tiangolo/typer/pull/899) by [@tiangolo](https://github.com/tiangolo). * πŸ‘· Update issue-manager.yml GitHub Action permissions. PR [#897](https://github.com/tiangolo/typer/pull/897) by [@tiangolo](https://github.com/tiangolo). * πŸ‘· Refactor GitHub Action to comment docs deployment URLs and update token, preparing for GitHub org. PR [#896](https://github.com/tiangolo/typer/pull/896) by [@tiangolo](https://github.com/tiangolo). * πŸ”¨ Update docs Termynal scripts to not include line nums for local dev. PR [#882](https://github.com/tiangolo/typer/pull/882) by [@tiangolo](https://github.com/tiangolo). From 682b0b393d58e8d217dd30f41460bc792fe080ab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Aug 2024 16:40:09 -0500 Subject: [PATCH 07/36] =?UTF-8?q?=E2=AC=86=20Bump=20actions/cache=20from?= =?UTF-8?q?=203=20to=204=20(#839)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [actions/cache](https://github.com/actions/cache) from 3 to 4. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-docs.yml | 4 ++-- .github/workflows/test.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index 8291f117f1..7f8876f85d 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -49,7 +49,7 @@ jobs: uses: actions/setup-python@v5 with: python-version: "3.11" - - uses: actions/cache@v3 + - uses: actions/cache@v4 id: cache with: path: ${{ env.pythonLocation }} @@ -63,7 +63,7 @@ jobs: pip install git+https://${{ secrets.TYPER_MKDOCS_MATERIAL_INSIDERS }}@github.com/squidfunk/mkdocs-material-insiders.git pip install git+https://${{ secrets.TYPER_MKDOCS_MATERIAL_INSIDERS }}@github.com/pawamoy-insiders/griffe-typing-deprecated.git pip install git+https://${{ secrets.TYPER_MKDOCS_MATERIAL_INSIDERS }}@github.com/pawamoy-insiders/mkdocstrings-python.git - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: key: mkdocs-cards-${{ github.ref }}-v1 path: .cache diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index db194b150b..5030d0bfdd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -44,7 +44,7 @@ jobs: # Issue ref: https://github.com/actions/setup-python/issues/436 # cache: "pip" # cache-dependency-path: pyproject.toml - - uses: actions/cache@v3 + - uses: actions/cache@v4 if: ${{ runner.os != 'macOS' }} id: cache with: From aa113fd4aa8521255adf05214f898ce0fcb6d8e5 Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 2 Aug 2024 21:40:28 +0000 Subject: [PATCH 08/36] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/release-notes.md b/docs/release-notes.md index e1c348f644..e386e6e289 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -6,6 +6,7 @@ ### Internal +* ⬆ Bump actions/cache from 3 to 4. PR [#839](https://github.com/tiangolo/typer/pull/839) by [@dependabot[bot]](https://github.com/apps/dependabot). * 🍱 Update Typer icon and logo. PR [#899](https://github.com/tiangolo/typer/pull/899) by [@tiangolo](https://github.com/tiangolo). * πŸ‘· Update issue-manager.yml GitHub Action permissions. PR [#897](https://github.com/tiangolo/typer/pull/897) by [@tiangolo](https://github.com/tiangolo). * πŸ‘· Refactor GitHub Action to comment docs deployment URLs and update token, preparing for GitHub org. PR [#896](https://github.com/tiangolo/typer/pull/896) by [@tiangolo](https://github.com/tiangolo). From 0f4b07f38571b4c43da78007ef105d3afa7be597 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Fri, 2 Aug 2024 22:29:30 -0500 Subject: [PATCH 09/36] =?UTF-8?q?=F0=9F=94=A7=20Update=20MkDocs=20configs?= =?UTF-8?q?=20and=20docs=20build=20setup=20(#900)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build-docs.yml | 9 +-- docs/index.md | 4 + mkdocs.insiders.yml | 1 - mkdocs.maybe-insiders.yml | 6 ++ mkdocs.no-insiders.yml | 0 mkdocs.yml | 2 +- scripts/build-docs.sh | 5 -- scripts/clean.sh | 8 -- scripts/docs-live.sh | 5 -- scripts/docs.py | 130 +++++++++++++++++++++++++++++++ scripts/test-files.sh | 2 - 11 files changed, 144 insertions(+), 28 deletions(-) create mode 100644 mkdocs.maybe-insiders.yml create mode 100644 mkdocs.no-insiders.yml delete mode 100755 scripts/build-docs.sh delete mode 100755 scripts/clean.sh delete mode 100755 scripts/docs-live.sh create mode 100644 scripts/docs.py diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index 7f8876f85d..931e4aed13 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -67,13 +67,10 @@ jobs: with: key: mkdocs-cards-${{ github.ref }}-v1 path: .cache + - name: Verify README + run: python ./scripts/docs.py verify-readme - name: Build Docs - if: github.event_name == 'pull_request' && github.secret_source != 'Actions' - run: python -m mkdocs build - - name: Build Docs with Insiders - if: ( github.event_name != 'pull_request' || github.secret_source == 'Actions' ) - run: python -m mkdocs build --config-file mkdocs.insiders.yml - + run: python ./scripts/docs.py build - uses: actions/upload-artifact@v4 with: name: docs-site diff --git a/docs/index.md b/docs/index.md index 6bb4983a9f..66a20b4853 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,3 +1,7 @@ + +

Typer

diff --git a/mkdocs.insiders.yml b/mkdocs.insiders.yml index bb475642cd..d24d754930 100644 --- a/mkdocs.insiders.yml +++ b/mkdocs.insiders.yml @@ -1,4 +1,3 @@ -INHERIT: mkdocs.yml plugins: social: typeset: diff --git a/mkdocs.maybe-insiders.yml b/mkdocs.maybe-insiders.yml new file mode 100644 index 0000000000..07aefaaa99 --- /dev/null +++ b/mkdocs.maybe-insiders.yml @@ -0,0 +1,6 @@ +# Define this here and not in the main mkdocs.yml file because that one could be auto +# updated and written, and the script would remove the env var +INHERIT: !ENV [INSIDERS_FILE, './mkdocs.no-insiders.yml'] +markdown_extensions: + pymdownx.highlight: + linenums: !ENV [LINENUMS, false] diff --git a/mkdocs.no-insiders.yml b/mkdocs.no-insiders.yml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/mkdocs.yml b/mkdocs.yml index 5325a75e61..e7ecc964a9 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,3 +1,4 @@ +INHERIT: ./mkdocs.maybe-insiders.yml site_name: Typer site_description: Typer, build great CLIs. Easy to code. Based on Python type hints. site_url: https://typer.tiangolo.com/ @@ -136,6 +137,5 @@ extra_css: - css/custom.css extra_javascript: - - https://unpkg.com/mermaid@8.4.6/dist/mermaid.min.js - js/termynal.js - js/custom.js diff --git a/scripts/build-docs.sh b/scripts/build-docs.sh deleted file mode 100755 index 4f4ae2f74e..0000000000 --- a/scripts/build-docs.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -python -m mkdocs build - -cp ./docs/index.md ./README.md diff --git a/scripts/clean.sh b/scripts/clean.sh deleted file mode 100755 index d5a4b790ae..0000000000 --- a/scripts/clean.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -e - -if [ -d 'dist' ] ; then - rm -r dist -fi -if [ -d 'site' ] ; then - rm -r site -fi diff --git a/scripts/docs-live.sh b/scripts/docs-live.sh deleted file mode 100755 index 5342a9e59f..0000000000 --- a/scripts/docs-live.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -set -e - -mkdocs serve --dev-addr 127.0.0.1:8008 diff --git a/scripts/docs.py b/scripts/docs.py new file mode 100644 index 0000000000..00364752ff --- /dev/null +++ b/scripts/docs.py @@ -0,0 +1,130 @@ +import logging +import os +import re +import subprocess +from functools import lru_cache +from http.server import HTTPServer, SimpleHTTPRequestHandler +from importlib import metadata +from pathlib import Path + +import mkdocs.commands.build +import mkdocs.commands.serve +import mkdocs.config +import mkdocs.utils +import typer + +logging.basicConfig(level=logging.INFO) + +mkdocs_name = "mkdocs.yml" +en_docs_path = Path("") + +app = typer.Typer() + + +@lru_cache +def is_mkdocs_insiders() -> bool: + version = metadata.version("mkdocs-material") + return "insiders" in version + + +@app.callback() +def callback() -> None: + if is_mkdocs_insiders(): + os.environ["INSIDERS_FILE"] = "./mkdocs.insiders.yml" + # For MacOS with insiders and Cairo + os.environ["DYLD_FALLBACK_LIBRARY_PATH"] = "/opt/homebrew/lib" + + +def generate_readme_content() -> str: + en_index = en_docs_path / "docs" / "index.md" + content = en_index.read_text("utf-8") + match_pre = re.search(r"\n\n", content) + if not match_pre: + raise RuntimeError("Couldn't find pre section (

- Typer + Typer + + Typer +

Typer, build great CLIs. Easy to code. Based on Python type hints. diff --git a/scripts/docs.py b/scripts/docs.py index 00364752ff..b91a10eb73 100644 --- a/scripts/docs.py +++ b/scripts/docs.py @@ -43,6 +43,13 @@ def generate_readme_content() -> str: raise RuntimeError("Couldn't find pre section (