diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..31a51a7 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,25 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: github-actions + directory: / + commit-message: + prefix: ⬆️ + schedule: + interval: weekly + - package-ecosystem: pip + directory: / + commit-message: + prefix: ⬆️ + schedule: + interval: weekly + - package-ecosystem: cargo + directory: / + commit-message: + prefix: ⬆️ + schedule: + interval: weekly diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml new file mode 100644 index 0000000..3537250 --- /dev/null +++ b/.github/workflows/CI.yml @@ -0,0 +1,221 @@ +# This file is autogenerated by maturin v1.0.1 +# To update, run +# +# maturin generate-ci github --pytest +# +name: CI + +on: + push: + branches: + - main + tags: + - 'v*' + pull_request: + workflow_dispatch: + +permissions: + contents: read + +jobs: + + pre-commit: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: "3.9" + - uses: pre-commit/action@v3.0.0 + + test-python: + + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: + - '3.9' + - '3.10' + - '3.11' + - '3.12' + - 'pypy3.9' + steps: + - uses: actions/checkout@v3 + - name: install rust stable + uses: dtolnay/rust-toolchain@stable + - name: cache rust + uses: Swatinem/rust-cache@v2 + with: + key: test-v1 + - name: set up python + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + - run: pip install -e .[testing] + env: + RUST_BACKTRACE: 1 + - run: pip freeze + # - run: pytest + + linux: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + target: + - x86_64 + - x86 + - aarch64 + - armv7 + - s390x # TODO build fails: "error: failed to run custom build command for `psm v0.1.21`"" + - ppc64le + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: "3.10" + - name: Build wheels + uses: PyO3/maturin-action@v1 + with: + target: ${{ matrix.target }} + args: --release --out dist --find-interpreter + sccache: 'true' + manylinux: auto + - name: Upload wheels + uses: actions/upload-artifact@v3 + with: + name: wheels + path: dist + # - name: pytest + # if: ${{ startsWith(matrix.target, 'x86_64') }} + # shell: bash + # run: | + # set -e + # pip install --upgrade pip + # pip install sphinx_rust --find-links dist --force-reinstall + # pip install pytest pytest-param-files + # pytest + # - name: pytest + # if: ${{ !startsWith(matrix.target, 'x86') && matrix.target != 'ppc64' }} + # uses: uraimo/run-on-arch-action@v2.5.0 + # with: + # arch: ${{ matrix.target }} + # distro: ubuntu22.04 + # githubToken: ${{ github.token }} + # install: | + # apt-get update + # apt-get install -y --no-install-recommends python3-dev python3-pip build-essential + # pip3 install -U pip pytest pytest-param-files + # run: | + # set -e + # pip3 install sphinx_rust --find-links dist --force-reinstall + # pytest + + windows: + runs-on: windows-latest + strategy: + fail-fast: false + matrix: + target: [x64, x86] + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: '3.10' + architecture: ${{ matrix.target }} + - name: Build wheels + uses: PyO3/maturin-action@v1 + with: + target: ${{ matrix.target }} + args: --release --out dist --find-interpreter + sccache: 'true' + - name: Upload wheels + uses: actions/upload-artifact@v3 + with: + name: wheels + path: dist + # - name: pytest + # if: ${{ !startsWith(matrix.target, 'aarch64') }} + # shell: bash + # run: | + # set -e + # pip install --upgrade pip + # pip install sphinx_rust --find-links dist --force-reinstall + # pip install pytest pytest-param-files + # pytest + + macos: + runs-on: macos-latest + strategy: + fail-fast: false + matrix: + target: [x86_64, aarch64] + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: '3.10' + - name: Build wheels + uses: PyO3/maturin-action@v1 + with: + target: ${{ matrix.target }} + args: --release --out dist --find-interpreter + sccache: 'true' + - name: Upload wheels + uses: actions/upload-artifact@v3 + with: + name: wheels + path: dist + # - name: pytest + # if: ${{ !startsWith(matrix.target, 'aarch64') }} + # shell: bash + # run: | + # set -e + # pip install --upgrade pip + # pip install sphinx_rust --find-links dist --force-reinstall + # pip install pytest pytest-param-files + # pytest + + sdist: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Build sdist + uses: PyO3/maturin-action@v1 + with: + command: sdist + args: --out dist + - name: Upload sdist + uses: actions/upload-artifact@v3 + with: + name: wheels + path: dist + + # https://github.com/marketplace/actions/alls-green#why used for branch protection checks + check: + if: always() + needs: [pre-commit, test-python, linux, windows, macos, sdist] + runs-on: ubuntu-latest + steps: + - name: Decide whether the needed jobs succeeded or failed + uses: re-actors/alls-green@release/v1 + with: + jobs: ${{ toJSON(needs) }} + allowed-failures: coverage + + release: + runs-on: ubuntu-latest + if: "startsWith(github.ref, 'refs/tags/')" + needs: [pre-commit, test-python, linux, windows, macos, sdist] + steps: + - uses: actions/download-artifact@v3 + with: + name: wheels + - name: Publish to PyPI + uses: PyO3/maturin-action@v1 + env: + MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }} + with: + command: upload + args: --skip-existing * diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index de61120..71db053 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,5 +1,9 @@ # See https://pre-commit.com for more information # See https://pre-commit.com/hooks.html for more hooks + +ci: + skip: [cargo-check, cargo-clippy] # failing on pre-commit.ci (wrong rust version?) + repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.6.0 diff --git a/python/sphinx_rust/directives/_core.py b/python/sphinx_rust/directives/_core.py index 1397700..1f14088 100644 --- a/python/sphinx_rust/directives/_core.py +++ b/python/sphinx_rust/directives/_core.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from typing import TYPE_CHECKING from docutils import nodes, utils @@ -28,7 +30,7 @@ def doc(self) -> nodes.document: return self.state.document # type: ignore[no-any-return] @property - def rust_domain(self) -> "RustDomain": + def rust_domain(self) -> RustDomain: # avoid circular import from sphinx_rust.domain import RustDomain # noqa: PLC0415 @@ -81,7 +83,7 @@ def create_summary_table( def parse_docstring( - env: "BuildEnvironment", + env: BuildEnvironment, doc: nodes.document, docstring: str, /, @@ -105,7 +107,7 @@ def parse_docstring( def create_xref( - docname: str, ident: str, objtype: "ObjType", *, warn_dangling: bool = False + docname: str, ident: str, objtype: ObjType, *, warn_dangling: bool = False ) -> addnodes.pending_xref: """Create a cross-reference node.""" options = { diff --git a/python/sphinx_rust/directives/crate.py b/python/sphinx_rust/directives/crate.py index c361b6d..ef394f1 100644 --- a/python/sphinx_rust/directives/crate.py +++ b/python/sphinx_rust/directives/crate.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from typing import TYPE_CHECKING from docutils import nodes diff --git a/python/sphinx_rust/directives/enum.py b/python/sphinx_rust/directives/enum.py index 3c7f963..4425a20 100644 --- a/python/sphinx_rust/directives/enum.py +++ b/python/sphinx_rust/directives/enum.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from typing import TYPE_CHECKING from docutils import nodes diff --git a/python/sphinx_rust/directives/module.py b/python/sphinx_rust/directives/module.py index 60069b5..3e91927 100644 --- a/python/sphinx_rust/directives/module.py +++ b/python/sphinx_rust/directives/module.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from typing import TYPE_CHECKING from docutils import nodes diff --git a/python/sphinx_rust/directives/struct.py b/python/sphinx_rust/directives/struct.py index 0edaf28..be4f6aa 100644 --- a/python/sphinx_rust/directives/struct.py +++ b/python/sphinx_rust/directives/struct.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from typing import TYPE_CHECKING from docutils import nodes diff --git a/python/sphinx_rust/roles.py b/python/sphinx_rust/roles.py index 328ef66..a2e57b0 100644 --- a/python/sphinx_rust/roles.py +++ b/python/sphinx_rust/roles.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from sphinx.roles import XRefRole