ci: add missing django-components during docs build (#1377) #2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --- | |
| name: Docs - build & deploy | |
| on: | |
| push: | |
| tags: | |
| # for versions 0.### (before 1.0.0) | |
| - '0.[0-9]+' | |
| # after 1.0.0 | |
| - '[0-9]+.[0-9]+.[0-9]+' | |
| branches: | |
| - master | |
| workflow_dispatch: | |
| jobs: | |
| docs: | |
| # Grant GITHUB_TOKEN the permissions required to make a Pages deployment | |
| permissions: | |
| contents: write # to let mkdocs write the new docs | |
| pages: write # to deploy to Pages | |
| id-token: write # to verify the deployment originates from an appropriate source | |
| runs-on: ubuntu-latest | |
| # Only run in original repo (not in forks) | |
| if: github.repository == 'django-components/django-components' | |
| steps: | |
| ############################## | |
| # SETUP | |
| ############################## | |
| # Authenticate with git with the Github App that has permission | |
| # to push to master, in order to push benchmark results. | |
| # See https://stackoverflow.com/a/79142962/9788634 | |
| - uses: actions/create-github-app-token@v2 | |
| id: app-token | |
| with: | |
| app-id: ${{ vars.RELEASE_BOT_APP_ID }} | |
| private-key: ${{ secrets.RELEASE_BOT_APP_PRIVATE_KEY }} | |
| - name: Checkout | |
| uses: actions/checkout@v5 | |
| with: | |
| token: ${{ steps.app-token.outputs.token }} | |
| fetch-depth: 0 | |
| - name: Configure git account | |
| run: | | |
| git config user.name components-release-bot | |
| git config user.email "components-release-bot@users.noreply.github.com" | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.13" | |
| cache: 'pip' | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip wheel | |
| # NOTE: pin virtualenv to <20.31 until asv fixes it. | |
| # See https://github.com/airspeed-velocity/asv/issues/1484 | |
| python -m pip install -q pre-commit asv virtualenv==20.30 | |
| python -m pip install -r requirements-docs.txt | |
| # Install django-components locally | |
| python -m pip install -e . | |
| ########################################### | |
| # RECORD BENCHMARK - ONLY ON PUSH TO MASTER | |
| ########################################### | |
| - name: Run benchmarks for tag | |
| if: github.ref_type == 'tag' && github.event_name == 'push' | |
| env: | |
| # See https://github.com/github/docs/issues/21930 | |
| # And https://docs.github.com/en/actions/security-for-github-actions/security-guides/automatic-token-authentication | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| # Get the master branch so we can run benchmarks on it | |
| git remote add upstream https://github.com/${{ github.repository }}.git | |
| git fetch origin master:master | |
| git checkout master | |
| # Get tag name | |
| TAG=${GITHUB_REF#refs/tags/} | |
| echo "TAG: $TAG" | |
| # TODO: REMOVE ONCE FIXED UPSTREAM | |
| # Fix for https://github.com/airspeed-velocity/asv_runner/issues/45 | |
| # Prepare virtual environment | |
| # Currently, we have to monkeypatch the `timeit` function in the `timeraw` benchmark. | |
| # The problem is that `asv` passes the code to execute via command line, and when the | |
| # code is too big, it fails with `OSError: [Errno 7] Argument list too long`. | |
| # So we have to tweak it to pass the code via STDIN, which doesn't have this limitation. | |
| # | |
| # 1. First create the virtual environment, so that asv generates the directories where | |
| # the monkeypatch can be applied. | |
| echo "Creating virtual environment..." | |
| asv setup -v || true | |
| echo "Virtual environment created." | |
| # 2. Now let's apply the monkeypatch by appending it to the `timeraw.py` files. | |
| # First find all `timeraw.py` files | |
| echo "Applying monkeypatch..." | |
| find .asv/env -type f -path "*/site-packages/asv_runner/benchmarks/timeraw.py" | while read -r file; do | |
| # Add a newline and then append the monkeypatch contents | |
| echo "" >> "$file" | |
| cat "benchmarks/monkeypatch_asv_ci.txt" >> "$file" | |
| done | |
| echo "Monkeypatch applied." | |
| # END OF MONKEYPATCH | |
| # Prepare the profile under which the benchmarks will be saved. | |
| # We assume that the CI machine has a name that is unique and stable. | |
| # See https://github.com/airspeed-velocity/asv/issues/796#issuecomment-1188431794 | |
| echo "Preparing benchmarks profile..." | |
| asv machine --yes --machine ci-linux | |
| echo "Benchmarks profile DONE." | |
| # Run benchmarks for the current tag | |
| # - `^` means that we mean the COMMIT of the tag's branch, not the BRANCH itself. | |
| # Without it, we would run benchmarks for the whole branch history. | |
| # With it, we run benchmarks FROM the tag's commit (incl) TO ... | |
| # - `!` means that we want to select range spanning a single commit. | |
| # Without it, we would run benchmarks for all commits FROM the tag's commit | |
| # TO the start of the branch history. | |
| # With it, we run benchmarks ONLY FOR the tag's commit. | |
| echo "Running benchmarks for tag ${TAG}..." | |
| asv run master^! -v | |
| echo "Benchmarks for tag ${TAG} DONE." | |
| # Generate benchmarks site | |
| # This should save it in `docs/benchmarks/`, so we can then use it when | |
| # building docs site with `mkdocs`. | |
| echo "Generating benchmarks site..." | |
| asv publish | |
| echo "Benchmarks site DONE." | |
| # Commit benchmark results | |
| echo "Staging and committing benchmark results..." | |
| git add .asv/results/ | |
| git add docs/benchmarks/ | |
| git commit -m "Add benchmark results for ${TAG}" | |
| echo "Benchmark results committed." | |
| # Push to the new branch | |
| echo "Pushing benchmark results..." | |
| git push origin master | |
| echo "Benchmark results pushed to master." | |
| ########################################### | |
| # BUILD & RELEASE DOCS | |
| ########################################### | |
| # Change git authentication to Github Actions, so the rest of the | |
| # workflow will have lower privileges. | |
| - name: Checkout | |
| uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 0 | |
| - name: Configure git | |
| run: | | |
| # required for "mike deploy" command below which pushes to gh-pages | |
| git config user.name github-actions | |
| git config user.email github-actions@github.com | |
| # Conditions make sure to select the right step, depending on the job trigger. | |
| # Only one of the steps below will run at a time. The others will be skipped. | |
| - name: Check docs in pull requests with strict mode | |
| if: github.event_name == 'pull_request' | |
| run: | | |
| # TODO: Enable strict mode once docs are clean | |
| echo "Strict check of docs disabled." | |
| # mkdocs build --strict | |
| - name: Build & deploy "dev" docs for a new commit to master | |
| if: github.event_name == 'push' && github.ref_type != 'tag' | |
| run: | | |
| # Fetch and checkout gh-pages to ensure we have the latest version | |
| git fetch origin gh-pages | |
| git checkout gh-pages | |
| git pull origin gh-pages | |
| git checkout master | |
| export SHORT_SHA=$(echo "${GITHUB_SHA}" | cut -c1-7) | |
| mike deploy --push --update-aliases --title "dev (${SHORT_SHA})" dev | |
| - name: Build & deploy docs for a new tag | |
| if: github.ref_type == 'tag' && github.event_name == 'push' | |
| run: | | |
| # Fetch and checkout gh-pages to ensure we have the latest version | |
| git fetch origin gh-pages | |
| git checkout gh-pages | |
| git pull origin gh-pages | |
| git checkout master | |
| mike deploy --push --update-aliases ${{ github.ref_name }} latest | |
| mike set-default latest --push |