mirror of
https://github.com/django-components/django-components.git
synced 2025-12-23 11:12:57 +00:00
Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
197 lines
7.9 KiB
YAML
197 lines
7.9 KiB
YAML
---
|
|
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@v6
|
|
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@v6
|
|
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@v6
|
|
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
|