docs: Update projects #76
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
| # SPDX-FileCopyrightText: 2026 The RISE Project | |
| # SPDX-License-Identifier: MIT | |
| --- | |
| # This workflow is based on: https://github.com/djlint/djLint/blob/v1.44.2/.github/workflows/publish.yml | |
| name: Build djlint wheels (riscv64) | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version glob to (re)build; empty builds every version of docs/packages/djlint.yaml not released yet' | |
| required: false | |
| default: '' | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-djlint.yml' | |
| - 'docs/packages/djlint.yaml' | |
| push: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-djlint.yml' | |
| - 'docs/packages/djlint.yaml' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read # to fetch code (actions/checkout) | |
| env: | |
| MANYLINUX_RISCV64_IMAGE: quay.io/pypa/manylinux_2_39_riscv64 | |
| jobs: | |
| setup: | |
| uses: $/.github/workflows/_setup.yml | |
| with: | |
| package: djlint | |
| version: ${{ inputs.version }} | |
| build_wheels: | |
| needs: [setup] | |
| if: needs.setup.outputs.versions != '[]' | |
| name: Build djlint ${{ matrix.version }} ${{ matrix.python }}-manylinux_riscv64 | |
| runs-on: ubuntu-24.04-riscv | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: ${{ fromJSON(needs.setup.outputs.versions) }} | |
| # mypyc emits per-interpreter (non-abi3) wheels, one build each. | |
| python: ["cp312", "cp313", "cp314", "cp314t"] | |
| env: | |
| DJLINT_VERSION: ${{ matrix.version }} | |
| steps: | |
| - name: Checkout djlint ${{ env.DJLINT_VERSION }} | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| repository: djlint/djLint | |
| ref: v${{ env.DJLINT_VERSION }} | |
| persist-credentials: false | |
| - name: Build wheels | |
| uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0 | |
| with: | |
| output-dir: wheelhouse/ | |
| only: ${{ matrix.python }}-manylinux_riscv64 | |
| env: | |
| CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }} | |
| # Upstream's build[uv] frontend asserts a host uv in the audit step. | |
| CIBW_BUILD_FRONTEND: "build; args: --no-isolation" | |
| # click 8.5 makes get_text_stream untyped, so mypyc rejects djlint's source. | |
| CIBW_BEFORE_BUILD: >- | |
| pip install hatchling hatch-mypyc "click<8.5" cssbeautifier jsbeautifier | |
| json5 types-pyyaml types-regex typing-extensions | |
| # Restates upstream's [tool.cibuildwheel] environment, which this replaces. | |
| CIBW_ENVIRONMENT: >- | |
| HATCH_BUILD_HOOK_ENABLE_MYPYC=1 | |
| PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/ | |
| CIBW_TEST_REQUIRES: pytest pytest-xdist | |
| # pyproject.toml is what djlint resolves reported paths against. | |
| # docs/, README.md and src/djlint/rules.yaml (a single data file, not | |
| # the package directory - avoids shadowing the installed wheel with | |
| # the uncompiled checkout) back the doc-consistency tests added in | |
| # 1.45.0 (test_docs.py, test_readme.py, and two tests in | |
| # test_cli.py) that check the docs' examples against the real | |
| # linter/formatter/CLI output. | |
| CIBW_TEST_SOURCES: tests pytest.toml pyproject.toml docs README.md src/djlint/rules.yaml src/djlint/settings.py | |
| # Upstream never tests its wheels; run the suite its CI runs. | |
| # The import assert catches a silently-uncompiled (pure-Python) wheel. | |
| # | |
| # test_closed_pipe_is_not_a_crash deselected: it monkeypatches | |
| # print_output to raise BrokenPipeError, expecting djLint's own | |
| # SIGPIPE handler (which swaps sys.stdout for a fresh io.StringIO | |
| # before sys.exit(2), so the interpreter's own exit-time flush can't | |
| # fail against the dead pipe) to produce exit code 2 under Click's | |
| # CliRunner. Instead CliRunner reports exit code 1 - the stdout swap | |
| # appears to break CliRunner's own stdout-capture teardown - on | |
| # every interpreter we build (3.12/3.13/3.14/3.14t), with Click | |
| # 8.5.0 (unpinned by djLint's own `click>=8.2.0`, and what upstream | |
| # tests with too, per their uv.lock). Not riscv64-specific: upstream | |
| # itself only runs this test on Python 3.10 and 3.15 (see | |
| # .github/workflows/ci.yml's `pytest` matrix), so the whole 3.11-3.14 | |
| # range where this reproduces is a gap in their own coverage. | |
| # | |
| # test_the_schema_covers_every_configuration_option reads | |
| # src/djlint/settings.py's source directly (Path("src/djlint/ | |
| # settings.py").read_text()) to diff its option list against the | |
| # published JSON schema - same shape as rules.yaml above, just a | |
| # missing CIBW_TEST_SOURCES entry rather than a real test bug. | |
| CIBW_TEST_COMMAND: >- | |
| python -c "import djlint; assert djlint.__file__.endswith('.so'), djlint.__file__" | |
| && python -m pytest tests --deselect tests/test_djlint/test_djlint.py::test_closed_pipe_is_not_a_crash | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: djlint-${{ env.DJLINT_VERSION }}-${{ matrix.python }}-manylinux_riscv64 | |
| path: wheelhouse/*.whl | |
| if-no-files-found: error | |
| publish: | |
| name: Publish djlint ${{ matrix.version }} | |
| needs: [setup, build_wheels] | |
| if: needs.setup.outputs.versions != '[]' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: ${{ fromJSON(needs.setup.outputs.versions) }} | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| uses: $/.github/workflows/_publish-wheel.yml | |
| secrets: | |
| app-private-key: ${{ secrets.RISEPROJECT_APP_PRIVATE_KEY }} | |
| with: | |
| artifact-pattern: djlint-${{ matrix.version }}-*-manylinux_riscv64 |