From 2b7a1efaafca017c4a21f1af25c6047347119e8d Mon Sep 17 00:00:00 2001 From: Radu Suciu Date: Wed, 16 Aug 2023 00:53:31 -0700 Subject: [PATCH] chore(pypi): publish `git-cliff` on PyPI (#158) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore(pypi): First shot at PyPi publishing * docs(pypi): Draft docs for install from PyPI * fix(pypi): fix spellig mistake and add missing dependency * chore(pypi): rc1 for pypi publish workflow * docs(pypi): add example for pip install command Also tweaked verbiage a little * fix(docs): remove extra backtick in command example * fix(pypi): fix MATURIN_REPOSITORY definition * chore(pypi): rc2 for pypi publish fixes mistake in use of endsWith and startsWith expression syntax. Thanks https://rhysd.github.io/actionlint/! * chore(pypi): rc3 for pypi publish workflow Changes: - fixes an error with maturin build - makes sure maturin commands are run in directory containing pyproject.toml - manifest path is now specified in pyproject.toml - sdist is now created as a part of the build command * fix(pypi): specify cwd in action arg * fix(pypi): fix various path issues * chore(docker): ignore pypi directory --------- Co-authored-by: Orhun Parmaksız Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- .dockerignore | 1 + .github/workflows/cd.yml | 64 +++++++++++++++++++++++++++++++ git-cliff/Cargo.toml | 3 ++ pypi/pyproject.toml | 18 +++++++++ website/docs/installation/pypi.md | 7 ++++ 5 files changed, 93 insertions(+) create mode 100644 pypi/pyproject.toml create mode 100644 website/docs/installation/pypi.md diff --git a/.dockerignore b/.dockerignore index f672795..bd929a9 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,6 +2,7 @@ /.git/ /.github/ /npm/ +/pypi/ /website/ # Files diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 27a2e81..ed9c351 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -39,6 +39,7 @@ jobs: TOOLCHAIN: stable, TARGET: x86_64-unknown-linux-gnu, NPM_PUBLISH: true, + PYPI_PUBLISH: true, } - { NAME: linux-x64-musl, @@ -46,6 +47,7 @@ jobs: TOOLCHAIN: stable, TARGET: x86_64-unknown-linux-musl, NPM_PUBLISH: false, + PYPI_PUBLISH: true, } - { NAME: linux-x86-glibc, @@ -53,6 +55,7 @@ jobs: TOOLCHAIN: stable, TARGET: i686-unknown-linux-gnu, NPM_PUBLISH: false, + PYPI_PUBLISH: true, } - { NAME: linux-x86-musl, @@ -60,6 +63,7 @@ jobs: TOOLCHAIN: stable, TARGET: i686-unknown-linux-musl, NPM_PUBLISH: false, + PYPI_PUBLISH: true, } - { NAME: linux-arm64-glibc, @@ -67,6 +71,7 @@ jobs: TOOLCHAIN: stable, TARGET: aarch64-unknown-linux-gnu, NPM_PUBLISH: true, + PYPI_PUBLISH: true, } - { NAME: linux-arm64-musl, @@ -74,6 +79,7 @@ jobs: TOOLCHAIN: stable, TARGET: aarch64-unknown-linux-musl, NPM_PUBLISH: false, + PYPI_PUBLISH: true, } - { NAME: win32-x64-mingw, @@ -81,6 +87,7 @@ jobs: TOOLCHAIN: stable, TARGET: x86_64-pc-windows-gnu, NPM_PUBLISH: false, + PYPI_PUBLISH: true, } - { NAME: win32-x64-msvc, @@ -88,6 +95,7 @@ jobs: TOOLCHAIN: stable, TARGET: x86_64-pc-windows-msvc, NPM_PUBLISH: true, + PYPI_PUBLISH: true, } - { NAME: win32-x86-msvc, @@ -95,6 +103,7 @@ jobs: TOOLCHAIN: stable, TARGET: i686-pc-windows-msvc, NPM_PUBLISH: false, + PYPI_PUBLISH: true, } - { NAME: win32-arm64-msvc, @@ -102,6 +111,7 @@ jobs: TOOLCHAIN: stable, TARGET: aarch64-pc-windows-msvc, NPM_PUBLISH: true, + PYPI_PUBLISH: true, } - { NAME: darwin-x64, @@ -109,6 +119,7 @@ jobs: TOOLCHAIN: stable, TARGET: x86_64-apple-darwin, NPM_PUBLISH: true, + PYPI_PUBLISH: true, } - { NAME: darwin-arm64, @@ -116,6 +127,7 @@ jobs: TOOLCHAIN: stable, TARGET: aarch64-apple-darwin, NPM_PUBLISH: true, + PYPI_PUBLISH: true, } steps: - name: Checkout @@ -228,6 +240,40 @@ jobs: npm publish --access public env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + - name: Build Python wheels (linux) + if: matrix.build.PYPI_PUBLISH == true && startsWith(matrix.build.NAME, 'linux') + uses: PyO3/maturin-action@v1 + with: + working-directory: pypi + target: ${{ matrix.build.TARGET }} + args: --release --sdist --out wheels + sccache: 'true' + manylinux: auto + - name: Build Python wheels (macos & windows) + if: | + matrix.build.PYPI_PUBLISH == true && + (startsWith(matrix.build.OS, 'macos') || startsWith(matrix.build.OS, 'windows')) + uses: PyO3/maturin-action@v1 + with: + working-directory: pypi + target: ${{ matrix.build.TARGET }} + args: --release --sdist --out wheels + sccache: 'true' + - name: Build Python wheels (musl) + if: matrix.build.PYPI_PUBLISH == true && endsWith(matrix.build.OS, 'musl') + uses: PyO3/maturin-action@v1 + with: + working-directory: pypi + target: ${{ matrix.build.TARGET }} + args: --release --sdist --out wheels + sccache: 'true' + manylinux: musllinux_1_2 + - name: Upload Python wheels + uses: actions/upload-artifact@v3 + with: + working-directory: pypi + name: wheels + path: pypi/wheels publish-npm: name: Publish the base package to NPM @@ -252,6 +298,24 @@ jobs: env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + publish-pypi: + name: Publish PyPI package + runs-on: ubuntu-22.04 + needs: publish-binaries + steps: + - uses: actions/download-artifact@v3 + with: + path: pypi/wheels + name: wheels + - name: Publish to PyPI + uses: PyO3/maturin-action@v1 + env: + MATURIN_PYPI_TOKEN: ${{ vars.USE_TESTPYPI == 'true' && secrets.TESTPYPI_API_TOKEN || secrets.PYPI_API_TOKEN }} + MATURIN_REPOSITORY: ${{ vars.USE_TESTPYPI == 'true' && 'testpypi' || 'pypi' }} + with: + command: upload + args: --skip-existing pypi/wheels/* + publish-deb: name: Publish Debian package needs: generate-changelog diff --git a/git-cliff/Cargo.toml b/git-cliff/Cargo.toml index 371a785..4351ba8 100644 --- a/git-cliff/Cargo.toml +++ b/git-cliff/Cargo.toml @@ -54,3 +54,6 @@ pretty_assertions = "1.4.0" pkg-url = "{ repo }/releases/download/v{ version }/{ name }-{ version }-{ target }{ archive-suffix }" bin-dir = "{ name }-{ version }/{ bin }{ binary-ext }" pkg-fmt = "tgz" + +[package.metadata.maturin] +name = "git-cliff" diff --git a/pypi/pyproject.toml b/pypi/pyproject.toml new file mode 100644 index 00000000..f3d21e3 --- /dev/null +++ b/pypi/pyproject.toml @@ -0,0 +1,18 @@ +[build-system] +requires = ["maturin>=0.14,<0.15"] +build-backend = "maturin" + +[project] +name = "git-cliff" +requires-python = ">=3.7" +classifiers = [ + "Intended Audience :: Developers", + "Topic :: Software Development", + "Programming Language :: Rust", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", +] + +[tool.maturin] +bindings = "bin" +manifest-path = "../git-cliff/Cargo.toml" \ No newline at end of file diff --git a/website/docs/installation/pypi.md b/website/docs/installation/pypi.md new file mode 100644 index 00000000..bd61e0c --- /dev/null +++ b/website/docs/installation/pypi.md @@ -0,0 +1,7 @@ +# PyPI + +If you are a Python user, you can install and run **git-cliff** from [PyPI](https://pypi.org/project/git-cliff/) using `pip`: + +```bash +pip install git-cliff +```