diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6fa1457..04e4748 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -123,3 +123,50 @@ jobs: files: | artifacts/*.tar.gz artifacts/SHA256SUMS + + build-wheels: + name: Wheel ${{ matrix.os }}-${{ matrix.target }} + runs-on: ${{ matrix.os }} + permissions: + contents: read + strategy: + fail-fast: false + matrix: + include: + - { os: ubuntu-latest, target: x86_64 } + - { os: ubuntu-latest, target: aarch64 } + - { os: macos-latest, target: x86_64 } + - { os: macos-latest, target: aarch64 } + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + - name: Build wheel (bin mode) + uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0 + with: + target: ${{ matrix.target }} + args: --release --out dist --locked + manylinux: auto + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: wheels-${{ matrix.os }}-${{ matrix.target }} + path: dist + + publish-pypi: + name: Publish to PyPI + needs: build-wheels + runs-on: ubuntu-latest + environment: release # must match the trusted publisher config on PyPI + permissions: + id-token: write # OIDC trusted publishing, no token + steps: + - name: Download wheels + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7 + with: + path: dist + pattern: wheels-* + merge-multiple: true + - name: Publish to PyPI (OIDC, no token) + uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0 + with: + packages-dir: dist diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..96d14fa --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,33 @@ +[build-system] +requires = ["maturin>=1.13,<2.0"] +build-backend = "maturin" + +[project] +name = "git-server" +dynamic = ["version"] +description = "Dependency-free smart HTTP Git server" +readme = "README.md" +requires-python = ">=3.8" +license = { text = "MIT" } +authors = [{ name = "Geoffrey Guéret", email = "geoffrey@gueret.dev" }] +keywords = ["git", "http", "server", "gitoxide", "clone", "fetch"] +classifiers = [ + "Development Status :: 4 - Beta", + "Environment :: Console", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Operating System :: MacOS", + "Operating System :: POSIX :: Linux", + "Topic :: Software Development :: Version Control :: Git", + "Topic :: Internet :: WWW/HTTP :: HTTP Servers", +] + +[project.urls] +Homepage = "https://github.com/ggueret/git-server" +Repository = "https://github.com/ggueret/git-server" +Issues = "https://github.com/ggueret/git-server/issues" + +[tool.maturin] +bindings = "bin" +manifest-path = "crates/git-server/Cargo.toml" +strip = true