From f23b3aab562dd45a0dc90d128f6791ff0b911801 Mon Sep 17 00:00:00 2001 From: Scott Lundberg Date: Mon, 4 Dec 2023 12:01:28 -0800 Subject: [PATCH 1/2] Update unit_tests.yml --- .github/workflows/unit_tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index 55580e7bc..20f451ed9 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -24,7 +24,7 @@ jobs: run: | python -m pip install --upgrade pip pip install pytest - pip install .[test] + pip install -e .[test] if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: Test with pytest run: | From 5982cc163dc08c4894efa5e5cdf5140b11108695 Mon Sep 17 00:00:00 2001 From: Scott Lundberg Date: Mon, 4 Dec 2023 12:10:34 -0800 Subject: [PATCH 2/2] Update pypi_upload.yml --- .github/workflows/pypi_upload.yml | 132 +++++++++++++++++++++++------- 1 file changed, 103 insertions(+), 29 deletions(-) diff --git a/.github/workflows/pypi_upload.yml b/.github/workflows/pypi_upload.yml index 267718346..a93d7c34b 100644 --- a/.github/workflows/pypi_upload.yml +++ b/.github/workflows/pypi_upload.yml @@ -1,39 +1,113 @@ -# This workflow will upload a Python Package using Twine when a release is created -# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python#publishing-to-package-registries - -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. - -name: PyPI upload +name: Build wheels on: release: types: [published] -permissions: - contents: read + # Enable manual run + workflow_dispatch: jobs: - deploy: - + generate-wheels-matrix: + # Create a matrix of all architectures & versions to build. + # This enables the next step to run cibuildwheel in parallel. + # From https://iscinumpy.dev/post/cibuildwheel-2-10-0/#only-210 + name: Generate wheels matrix runs-on: ubuntu-latest + outputs: + include: ${{ steps.set-matrix.outputs.include }} + steps: + - uses: actions/checkout@v3 + - name: Install cibuildwheel + # Nb. keep cibuildwheel version pin consistent with job below + run: pipx install cibuildwheel==2.14.0 + - id: set-matrix + run: | + MATRIX=$( + { + cibuildwheel --print-build-identifiers --platform linux \ + | jq -nRc '{"only": inputs, "os": "ubuntu-latest"}' \ + && cibuildwheel --print-build-identifiers --platform macos \ + | jq -nRc '{"only": inputs, "os": "macos-latest"}' \ + && cibuildwheel --print-build-identifiers --platform windows \ + | jq -nRc '{"only": inputs, "os": "windows-latest"}' + } | jq -sc + ) + echo "include=$MATRIX" >> $GITHUB_OUTPUT + + build_wheels: + name: Build ${{ matrix.only }} + needs: generate-wheels-matrix + strategy: + fail-fast: false + matrix: + include: ${{ fromJson(needs.generate-wheels-matrix.outputs.include) }} + runs-on: ${{ matrix.os }} + steps: + - name: Check out the repo + uses: actions/checkout@v3 + + - name: Set up QEMU + if: runner.os == 'Linux' + uses: docker/setup-qemu-action@v2 + with: + platforms: all + + - name: Build wheels + uses: pypa/cibuildwheel@v2.14.0 + with: + only: ${{ matrix.only }} + + - uses: actions/upload-artifact@v3 + with: + path: ./wheelhouse/*.whl + name: bdist_files + build_sdist: + name: Build source distribution + runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 - - name: Set up Python - uses: actions/setup-python@v3 - with: - python-version: '3.x' - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install build - - name: Build package - run: python -m build - - name: Publish package - uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29 - with: - user: __token__ - password: ${{ secrets.PYPI_API_TOKEN }} + - name: Check out the repo + uses: actions/checkout@v3 + + - name: Set up Python 3.11 + uses: actions/setup-python@v4 + with: + python-version: '3.11' + + - name: Build sdist (pep517) + run: | + python -m pip install build + python -m build --sdist + - name: Upload sdist + uses: actions/upload-artifact@v3 + with: + name: sdist_files + path: dist/*.tar.gz + + publish_wheels: + name: Publish wheels on pypi + needs: [build_wheels, build_sdist] + runs-on: ubuntu-latest + if: startsWith(github.ref, 'refs/tags') + steps: + - uses: actions/download-artifact@v3 + with: + name: bdist_files + path: dist + + - uses: actions/download-artifact@v3 + with: + name: sdist_files + path: dist + + - name: Publish package to TestPyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + password: ${{ secrets.TEST_PYPI_TOKEN }} + repository-url: https://test.pypi.org/legacy/ + + - name: Publish package to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + password: ${{ secrets.PYPI_TOKEN }}