diff --git a/.github/workflows/pypi_release.yaml b/.github/workflows/pypi_release.yaml index fc3d7e0..1533c42 100644 --- a/.github/workflows/pypi_release.yaml +++ b/.github/workflows/pypi_release.yaml @@ -1,7 +1,5 @@ -# This workflow is adapted from: -# https://packaging.python.org/en/latest/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/ - name: PyPI Release + on: push: tags: @@ -22,58 +20,50 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - # os: [ubuntu-latest, macos-latest] - # python-version: ["3.9", "3.10", "3.11", "3.12"] - os: [ubuntu-latest] - python-version: ["3.12"] + os: [ubuntu-latest, windows-latest, macos-13, macos-14] + python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] steps: - # # TODO: Add C++ compliers - # # Fetch CUDA toolkit using Jimver/cuda-toolkit - # - name: Fetch CUDA toolkit - # uses: Jimver/cuda-toolkit@v0.2.18 - # id: cuda-toolkit - # with: - # cuda: "12.1.0" - - # - name: Check nvcc version - # run: nvcc -V - + # Checkout the repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 + # Set up Python - name: Set up Python uses: actions/setup-python@v5 - # with: - # python-version: "3.12" with: python-version: ${{ matrix.python-version }} - - name: Install system dependencies (Ubuntu) - if: runner.os == 'Linux' - run: | - sudo apt-get update - sudo apt-get install -y make gcc g++ python3-dev + # # Install build dependencies + # - name: Install build dependencies (Linux) + # if: runner.os == 'Linux' + # run: sudo apt-get update && sudo apt-get install -y make gcc g++ - - name: Install system dependencies (macOS) - if: runner.os == 'macOS' - run: | - brew install gcc make + # - name: Install build dependencies (macOS) + # if: runner.os == 'macOS' + # run: brew install make gcc - - name: Install development and distributions version - run: | - pip install --upgrade pip - pip install -v . - pip install pytest build - - - name: Build Source Distribution + # - name: Install build dependencies (Windows) + # if: runner.os == 'Windows' + # run: choco install make mingw + - uses: actions/checkout@v4 + - name: Install build dependencies (All) run: | - make - make test - python -m build --sdist + # TODO: use requirements.txt later + python -m pip install numpy>=1.13 scipy>=1.0.0 + python -m pip install --upgrade pip setuptools wheel + + - name: Build wheels + uses: pypa/cibuildwheel@v2.22.0 + # env: + # CIBW_SOME_OPTION: value + # ... + with: + package-dir: . + output-dir: dist + config-file: "{package}/pyproject.toml" - - name: Store the distribution packages + # Upload built artifacts + - name: Upload wheels as artifact uses: actions/upload-artifact@v4 with: name: python-package-distributions @@ -81,33 +71,51 @@ jobs: publish-to-pypi: name: Publish Python distribution to PyPI - # only publish to PyPI on tag pushes - if: startsWith(github.ref, 'refs/tags/') - needs: - - build + needs: build runs-on: ubuntu-latest - environment: - name: PyPI-Release - url: https://pypi.org/project/${{ env.PYPI_NAME }} - permissions: - id-token: write - + if: startsWith(github.ref, 'refs/tags/') steps: - - name: Download all the dists + # Download all artifacts + - name: Download all artifacts uses: actions/download-artifact@v4 with: name: python-package-distributions path: dist/ + + # Publish distribution to PyPI - name: Publish distribution to PyPI uses: pypa/gh-action-pypi-publish@release/v1 + with: + packages_dir: dist env: TWINE_USERNAME: "__token__" TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} + publish-to-testpypi: + name: Publish Python distribution to TestPyPI + needs: build + runs-on: ubuntu-latest + steps: + # Download all artifacts + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + name: python-package-distributions + path: dist/ + + # Publish distribution to TestPyPI + - name: Publish distribution to TestPyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + repository-url: https://test.pypi.org/legacy/ + packages_dir: dist + env: + TWINE_USERNAME: "__token__" + TWINE_PASSWORD: ${{ secrets.TEST_PYPI_TOKEN }} + github-release: name: Sign the Python distribution with Sigstore and upload them to GitHub Release - needs: - - publish-to-pypi + needs: publish-to-pypi runs-on: ubuntu-latest permissions: @@ -115,57 +123,30 @@ jobs: id-token: write steps: - - name: Download all the dists + # Download all artifacts + - name: Download all artifacts uses: actions/download-artifact@v4 with: name: python-package-distributions path: dist/ + + # Sign the dists with Sigstore - name: Sign the dists with Sigstore uses: sigstore/gh-action-sigstore-python@v3.0.0 with: inputs: >- ./dist/*.tar.gz + # Create GitHub Release - name: Create GitHub Release env: GITHUB_TOKEN: ${{ github.token }} - run: >- - gh release create - "${{ github.ref_name }}" - --repo "${{ github.repository }}" - --notes "" + run: | + gh release create "${{ github.ref_name }}" --repo "${{ github.repository }}" --notes "" + + # Upload artifact signatures to GitHub Release - name: Upload artifact signatures to GitHub Release env: GITHUB_TOKEN: ${{ github.token }} - run: >- - gh release upload - "${{ github.ref_name }}" dist/** - --repo "${{ github.repository }}" - - publish-to-testpypi: - name: Publish Python distribution to TestPyPI - # if: ${{ github.ref == "refs/heads/master" && github.repository_owner == "theochem" }} - needs: - - build - runs-on: ubuntu-latest - - environment: - name: TestPyPI - url: https://test.pypi.org/project/${{ env.PYPI_NAME }} - - permissions: - id-token: write - - steps: - - name: Download all the dists - uses: actions/download-artifact@v4 - with: - name: python-package-distributions - path: dist/ - - name: Publish distribution to TestPyPI - uses: pypa/gh-action-pypi-publish@release/v1 - with: - repository-url: https://test.pypi.org/legacy/ - env: - TWINE_USERNAME: "__token__" - TWINE_PASSWORD: ${{ secrets.TEST_PYPI_TOKEN }} + run: | + gh release upload "${{ github.ref_name }}" dist/** --repo "${{ github.repository }}"