From 1ec7f0133290ec9f3920090fdbcfc7af16ed81c5 Mon Sep 17 00:00:00 2001 From: David Meyer Date: Mon, 24 Mar 2025 14:23:02 -0400 Subject: [PATCH 1/3] Update release workflow to introspected version --- .github/workflows/release-vars.sh | 47 +++ .github/workflows/release.yml | 502 +++++++++++++++++++++--------- 2 files changed, 394 insertions(+), 155 deletions(-) create mode 100644 .github/workflows/release-vars.sh diff --git a/.github/workflows/release-vars.sh b/.github/workflows/release-vars.sh new file mode 100644 index 0000000..27aab92 --- /dev/null +++ b/.github/workflows/release-vars.sh @@ -0,0 +1,47 @@ +# This repository. PyPI and Anaconda test and release package uploads are only done if +# the repository the workflow is running in matches this (i.e. is not a fork). Optional, +# if not set, package uploads are skipped. +export RELEASE_REPO="labscript-suite/labscript-utils" + +# Username with which to upload conda packages. If not given, anaconda uploads are +# skipped. +export ANACONDA_USER="labscript-suite" + +# Whether (true or false) to upload releases to PyPI, non-releases to Test PyPI, +# releases to Anaconda, non-releases to Anaconda test label. Only used if the repository +# the workflow is running in matches RELEASE_REPO, otherwise uploads are skipped. +# Anaconda uploads require ANACONDA_USER be specified and ANACONDA_API_TOKEN secret be +# set. Optional, all default to true. +export PYPI_UPLOAD="" +export TESTPYPI_UPLOAD="" +export ANACONDA_UPLOAD="" +export TEST_ANACONDA_UPLOAD="" + +# Which Python version to use for pure wheel builds, sdists, and as the host Python for +# cibuildwheel. Optional, defaults to the second-most recent minor Python version. +export DEFAULT_PYTHON="" + +# Comma-separated list of Python versions to build conda packages for. Only used if +# HAS_ENV_MARKERS=true or PURE=false, otherwise a noarch conda package is built instead. +# Optional, defaults to all non-end-of-life stable Python minor versions. +export CONDA_PYTHONS="" + +# Environment variable set in the envionment that `cibuildwheel` runs in instructing it +# which Pythons to build for, as a space-separated list of specifiers in the format +# specified by `cibuildwheel`. Only used if PURE=false. Optional, defaults to all +# non-end-of-life stable CPython versions. +export CIBW_BUILD="" + +# Name of Python package. Optional, defaults to name from the package metadata +export PKGNAME="" + +# Version of Python package. Optional, defaults to version from the package metadata +export PKGVER="" + +# Whether the Python package is pure (true) or impure (false). Optional, defaults to +# false if the setuptools package has extension modules or libraries, otherwise true. +export PURE="" + +# Whether (true or false) the Python package has dependencies that vary by platform or +# Python version. Optional, Defaults to presence of env markers in package metadata. +export HAS_ENV_MARKERS="" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6cff2e3..533b1c2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,251 +5,443 @@ on: branches: - master - maintenance/* - create: tags: - 'v[0-9]+.[0-9]+.[0-9]+*' env: - PACKAGE_NAME: labscript-utils - ANACONDA_USER: labscript-suite + OS_LIST_UBUNTU: '["ubuntu-latest"]' + OS_LIST_ALL: '["ubuntu-latest", "windows-latest", "macos-latest", "macos-13"]' - # Configuration for a package with compiled extensions: - # PURE: false - # NOARCH: false - # Configuration for a package with no extensions, but with dependencies that differ by - # platform or Python version: - # PURE: true - # NOARCH: false +jobs: + configure: + name: Configure workflow run + runs-on: ubuntu-latest + outputs: + DEFAULT_PYTHON: ${{ steps.config.outputs.DEFAULT_PYTHON }} + CIBW_BUILD: ${{ steps.config.outputs.CIBW_BUILD }} + PKGNAME: ${{ steps.config.outputs.PKGNAME }} + PKGVER: ${{ steps.config.outputs.PKGVER }} + PURE: ${{ steps.config.outputs.PURE }} + ANACONDA_USER: ${{ steps.config.outputs.ANACONDA_USER }} + CONDA_BUILD_ARGS: ${{ steps.config.outputs.CONDA_BUILD_ARGS }} + BUILD_OS_LIST: ${{ steps.config.outputs.BUILD_OS_LIST }} + RELEASE: ${{ steps.config.outputs.RELEASE }} + TESTPYPI_UPLOAD_THIS_RUN: ${{ steps.config.outputs.TESTPYPI_UPLOAD_THIS_RUN }} + PYPI_UPLOAD_THIS_RUN: ${{ steps.config.outputs.PYPI_UPLOAD_THIS_RUN }} + TEST_ANACONDA_UPLOAD_THIS_RUN: ${{ steps.config.outputs.TEST_ANACONDA_UPLOAD_THIS_RUN }} + ANACONDA_UPLOAD_THIS_RUN: ${{ steps.config.outputs.ANACONDA_UPLOAD_THIS_RUN }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Ignore Tags for non-tag pushes + if: "!startsWith(github.ref, 'refs/tags/')" + run: git tag -d $(git tag --points-at HEAD) + + - name: Install Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' + + - name: Configure workflow + id: config + run: | + pip install ci-helper + + # Load repo-specific variables and overrides: + VARS_FILE=".github/workflows/release-vars.sh" + if [ -f "${VARS_FILE}" ]; then + source "${VARS_FILE}" + fi + + # Python version used to build sdists, pure wheels, and as host Python for + # `cibuildwheel`: + if [ -z "${DEFAULT_PYTHON}" ]; then + # Default to second-most recent supported Python version: + DEFAULT_PYTHON=$(ci-helper defaultpython) + fi + + # Versions of Python to build conda packages for: + if [ -z "${CONDA_PYTHONS}" ]; then + # Default to all supported Python versions: + CONDA_PYTHONS=$(ci-helper pythons) + fi + + # Env var for `cibuildwheel` specifying target Python versions: + if [ -z "${CIBW_BUILD}" ]; then + # default to all supported CPython versions: + CIBW_BUILD=$(ci-helper pythons --cibw) + fi + + # Package name and version + if [ -z "${PKGNAME}" ]; then + # Default to package name from project metadata: + PKGNAME=$(ci-helper distinfo name .) + fi + if [ -z "${PKGVER}" ]; then + # Default to package version from project metadata: + PKGVER=$(ci-helper distinfo version .) + fi + + # Whether the package is pure python + if [ -z "${PURE}" ]; then + # Default to whether the setuptools package declares no modules/libraries: + PURE=$(ci-helper distinfo is_pure .) + fi + + # Whether the package requirements depend on platform or Python version: + if [ -z "${HAS_ENV_MARKERS}" ]; then + # Default to the presence of env markers in package metadata: + HAS_ENV_MARKERS=$(ci-helper distinfo has_env_markers .) + fi + + # List of OSs we need to run the build job on and arguments to + # `setuptools-conda build`: + if [[ "${PURE}" == false || "${HAS_ENV_MARKERS}" == true ]]; then + BUILD_OS_LIST="${OS_LIST_ALL}" + CONDA_BUILD_ARGS="--pythons=${CONDA_PYTHONS}" + else + BUILD_OS_LIST="${OS_LIST_UBUNTU}" + CONDA_BUILD_ARGS="--noarch" + fi + + # Release if a tag was pushed: + if [ "${{ contains(github.ref, '/tags') }}" == true ]; then + RELEASE=true + else + RELEASE=false + fi + + # What types of package uploads are enabled: + if [ -z "${PYPI_UPLOAD}" ]; then + PYPI_UPLOAD=true + else + PYPI_UPLOAD=false + fi + if [ -z "${TESTPYPI_UPLOAD}" ]; then + TESTPYPI_UPLOAD=true + else + TESTPYPI_UPLOAD=false + fi + if [ -z "${ANACONDA_UPLOAD}" ]; then + ANACONDA_UPLOAD=true + else + ANACONDA_UPLOAD=false + fi + if [ -z "${TEST_ANACONDA_UPLOAD}" ]; then + TEST_ANACONDA_UPLOAD=true + else + TEST_ANACONDA_UPLOAD=false + fi + + if [ "${{ github.repository }}" != "${RELEASE_REPO}" ]; then + echo "Workflow repo doesn't match ${RELEASE_REPO}, disabling package uploads" + PYPI_UPLOAD=false + TESTPYPI_UPLOAD=false + ANACONDA_UPLOAD=false + TEST_ANACONDA_UPLOAD=false + fi + + # If Anaconda uploads enabled, check necessary username and token are + # available: + if [[ "${ANACONDA_UPLOAD}" == true || "${TEST_ANACONDA_UPLOAD}" == true ]]; then + if [ -z "${{ secrets.ANACONDA_API_TOKEN }}" ]; then + echo "Anaconda uploads enabled but ANACONDA_API_TOKEN secret not set" + exit 1 + fi + if [ -z "${ANACONDA_USER}" ]; then + echo "Anaconda uploads enabled but ANACONDA_USER not set" + exit 1 + fi + fi + + # If enabled, upload releases to PyPI and Anaconda: + if [[ "${RELEASE}" == true && "${PYPI_UPLOAD}" == true ]]; then + PYPI_UPLOAD_THIS_RUN=true + else + PYPI_UPLOAD_THIS_RUN=false + fi + if [[ "${RELEASE}" == true && "${ANACONDA_UPLOAD}" == true ]]; then + ANACONDA_UPLOAD_THIS_RUN=true + else + ANACONDA_UPLOAD_THIS_RUN=false + fi + + # If enabled, upload non-releases to Test PyPI and Anaconda test label: + if [[ "${RELEASE}" == false && "${TESTPYPI_UPLOAD}" == true ]]; then + TESTPYPI_UPLOAD_THIS_RUN=true + else + TESTPYPI_UPLOAD_THIS_RUN=false + fi + if [[ "${RELEASE}" == false && "${TEST_ANACONDA_UPLOAD}" == true ]]; then + TEST_ANACONDA_UPLOAD_THIS_RUN=true + else + TEST_ANACONDA_UPLOAD_THIS_RUN=false + fi + + echo "DEFAULT_PYTHON=${DEFAULT_PYTHON}" >> "${GITHUB_OUTPUT}" + echo "CIBW_BUILD=${CIBW_BUILD}" >> "${GITHUB_OUTPUT}" + echo "PKGNAME=${PKGNAME}" >> "${GITHUB_OUTPUT}" + echo "PKGVER=${PKGVER}" >> "${GITHUB_OUTPUT}" + echo "PURE=${PURE}" >> "${GITHUB_OUTPUT}" + echo "ANACONDA_USER=${ANACONDA_USER}" >> "${GITHUB_OUTPUT}" + echo "CONDA_BUILD_ARGS=${CONDA_BUILD_ARGS}" >> "${GITHUB_OUTPUT}" + echo "BUILD_OS_LIST=${BUILD_OS_LIST}" >> "${GITHUB_OUTPUT}" + echo "RELEASE=${RELEASE}" >> "${GITHUB_OUTPUT}" + echo "TESTPYPI_UPLOAD_THIS_RUN=${TESTPYPI_UPLOAD_THIS_RUN}" >> "${GITHUB_OUTPUT}" + echo "PYPI_UPLOAD_THIS_RUN=${PYPI_UPLOAD_THIS_RUN}" >> "${GITHUB_OUTPUT}" + echo "TEST_ANACONDA_UPLOAD_THIS_RUN=${TEST_ANACONDA_UPLOAD_THIS_RUN}" >> "${GITHUB_OUTPUT}" + echo "ANACONDA_UPLOAD_THIS_RUN=${ANACONDA_UPLOAD_THIS_RUN}" >> "${GITHUB_OUTPUT}" + + echo + echo "==========================" + echo "Workflow run configuration:" + echo "--------------------------" + cat "${GITHUB_OUTPUT}" + echo "==========================" + echo - # Configuration for a package with no extensions and the same dependencies on all - # platforms and Python versions. For this configuration you should comment out all but - # the first entry in the job matrix of the build job since multiple platforms are not - # needed. - PURE: true - NOARCH: true -jobs: build: name: Build runs-on: ${{ matrix.os }} + needs: configure strategy: matrix: - include: - - { os: ubuntu-latest, python: '3.11', arch: x64, conda: true} - # - { os: ubuntu-latest, python: '3.10', arch: x64, conda: true } - # - { os: ubuntu-latest, python: '3.9', arch: x64, conda: true } - # - { os: ubuntu-latest, python: '3.8', arch: x64, conda: true } - # - { os: ubuntu-latest, python: '3.7', arch: x64, conda: true } - - # - { os: macos-11, python: '3.11', arch: x64, conda: true } - # - { os: macos-11, python: '3.10', arch: x64, conda: true } - # - { os: macos-11, python: '3.9', arch: x64, conda: true } - # - { os: macos-11, python: '3.8', arch: x64, conda: true } - # - { os: macos-11, python: '3.7', arch: x64, conda: true } - - # - { os: windows-latest, python: '3.11', arch: x64, conda: true } - # - { os: windows-latest, python: '3.10', arch: x64, conda: true } - # - { os: windows-latest, python: '3.9', arch: x64, conda: true } - # - { os: windows-latest, python: '3.8', arch: x64, conda: true } - # - { os: windows-latest, python: '3.7', arch: x64, conda: true } - - # - { os: windows-latest, python: '3.11', arch: x86, conda: false } # conda not yet available - # - { os: windows-latest, python: '3.10', arch: x86, conda: true } - # - { os: windows-latest, python: '3.9', arch: x86, conda: true } - # - { os: windows-latest, python: '3.8', arch: x86, conda: true } - # - { os: windows-latest, python: '3.7', arch: x86, conda: true } - - if: github.repository == 'labscript-suite/labscript-utils' && (github.event_name != 'create' || github.event.ref_type != 'branch') + os: ${{ fromJSON(needs.configure.outputs.BUILD_OS_LIST) }} + + env: + DEFAULT_PYTHON: ${{ needs.configure.outputs.DEFAULT_PYTHON }} + CIBW_BUILD: ${{ needs.configure.outputs.CIBW_BUILD }} + PURE: ${{ needs.configure.outputs.PURE }} + CONDA_BUILD_ARGS: ${{ needs.configure.outputs.CONDA_BUILD_ARGS }} + steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Ignore Tags - if: github.event.ref_type != 'tag' + - name: Ignore Tags for non-tag pushes + if: "!startsWith(github.ref, 'refs/tags/')" run: git tag -d $(git tag --points-at HEAD) - name: Install Python uses: actions/setup-python@v5 with: - python-version: ${{ matrix.python }} - architecture: ${{ matrix.arch }} + python-version: ${{ env.DEFAULT_PYTHON }} - - name: Source Distribution + - name: Install Python tools + run: python -m pip install --upgrade pip setuptools wheel build cibuildwheel + + - name: Source distribution if: strategy.job-index == 0 - run: | - python -m pip install --upgrade pip setuptools wheel build - python -m build -s . + run: python -m build -s . - - name: Wheel Distribution - # Impure Linux wheels are built in the manylinux job. - if: (env.PURE == 'true' && strategy.job-index == 0) || (env.PURE == 'false' && runner.os != 'Linux') - run: | - python -m pip install --upgrade pip setuptools wheel build - python -m build -w . + - name: Wheel distribution (pure) + if: env.PURE == 'true' && strategy.job-index == 0 + run: python -m build -w . + + - name: Wheel distribution (impure) + if: env.PURE == 'false' + run: cibuildwheel --output-dir dist - - name: Upload Artifact - if: strategy.job-index == 0 || (env.PURE == 'false' && runner.os != 'Linux') + - name: Upload artifact + if: env.PURE == 'false' || strategy.job-index == 0 uses: actions/upload-artifact@v4 with: - name: dist + name: dist-${{ matrix.os }} path: ./dist + if-no-files-found: error - - name: Set Variables for Conda Build - if: matrix.conda - shell: bash - run: | - if [ $NOARCH == true ]; then - CONDA_BUILD_ARGS="--noarch" - else - CONDA_BUILD_ARGS="" - fi - echo "CONDA_BUILD_ARGS=$CONDA_BUILD_ARGS" >> $GITHUB_ENV - - - name: Install Miniconda - if: matrix.conda + - name: Install Miniforge uses: conda-incubator/setup-miniconda@v3 with: + miniforge-version: "latest" auto-update-conda: true - python-version: ${{ matrix.python }} - architecture: ${{ matrix.arch }} - miniconda-version: "latest" + conda-remove-defaults: true + auto-activate-base: true + activate-environment: "" - - name: Workaround conda-build incompatibility with xcode 12+ - if: runner.os == 'macOS' - uses: maxim-lobanov/setup-xcode@v1 - with: - xcode-version: 11.7 - - - name: Conda package (Unix) - if: (matrix.conda && runner.os != 'Windows') + - name: Conda package shell: bash -l {0} run: | + if [ "${{ runner.os }}" == Windows ]; then + # Short path to minimise odds of hitting Windows max path length + CONDA_BUILD_ARGS+=" --croot ${{ runner.temp }}\cb" + fi conda install -c labscript-suite setuptools-conda setuptools-conda build $CONDA_BUILD_ARGS . - - name: Conda Package (Windows) - if: (matrix.conda && runner.os == 'Windows') - shell: cmd /C CALL {0} - run: | - conda install -c labscript-suite setuptools-conda && ^ - setuptools-conda build %CONDA_BUILD_ARGS% --croot ${{ runner.temp }}\cb . - - - name: Upload Artifact - if: matrix.conda + - name: Upload artifact uses: actions/upload-artifact@v4 with: - name: conda_packages + name: conda_packages-${{ matrix.os }} path: ./conda_packages + if-no-files-found: error - manylinux: - name: Build Manylinux + github-release: + name: Publish release (GitHub) runs-on: ubuntu-latest - if: github.repository == 'labscript-suite/labscript-utils' && (github.event_name != 'create' || github.event.ref_type != 'branch') - steps: - - name: Checkout - if: env.PURE == 'false' - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Ignore Tags - if: github.event.ref_type != 'tag' && env.PURE == 'false' - run: git tag -d $(git tag --points-at HEAD) - - - name: Build Manylinux Wheels - if: env.PURE == 'false' - uses: RalfG/python-wheels-manylinux-build@v0.4.2 - with: - python-versions: 'cp37-cp37m cp38-cp38 cp39-cp39 cp310-cp310 cp311-cp311' - pre-build-command: 'git config --global --add safe.directory "*"' - - - name: Upload Artifact - if: env.PURE == 'false' - uses: actions/upload-artifact@v4 - with: - name: dist - path: dist/*manylinux*.whl + needs: [configure, build] + if: ${{ needs.configure.outputs.RELEASE == 'true' }} + permissions: + contents: write + env: + PKGNAME: ${{ needs.configure.outputs.PKGNAME }} + PKGVER: ${{ needs.configure.outputs.PKGVER }} - release: - name: Release - runs-on: ubuntu-latest - needs: [build, manylinux] steps: - - name: Download Artifact uses: actions/download-artifact@v4 with: - name: dist + pattern: dist* path: ./dist + merge-multiple: true - - name: Download Artifact - uses: actions/download-artifact@v4 - with: - name: conda_packages - path: ./conda_packages - - - name: Get Version Number - if: github.event.ref_type == 'tag' - run: | - VERSION="${GITHUB_REF/refs\/tags\/v/}" - echo "VERSION=$VERSION" >> $GITHUB_ENV - - - name: Create GitHub Release and Upload Release Asset - if: github.event.ref_type == 'tag' - uses: softprops/action-gh-release@v1 + - name: Create GitHub release and upload release asset + uses: softprops/action-gh-release@v2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.event.ref }} - name: ${{ env.PACKAGE_NAME }} ${{ env.VERSION }} + name: ${{ env.PKGNAME }} ${{ env.PKGVER }} draft: true prerelease: ${{ contains(github.event.ref, 'rc') }} - files: ./dist/${{ env.PACKAGE_NAME }}-${{ env.VERSION }}.tar.gz + files: ./dist/*.tar.gz + + + testpypi-upload: + name: Publish on Test PyPI + runs-on: ubuntu-latest + needs: [configure, build] + if: ${{ needs.configure.outputs.TESTPYPI_UPLOAD_THIS_RUN == 'true' }} + env: + PKGNAME: ${{ needs.configure.outputs.PKGNAME }} + PKGVER: ${{ needs.configure.outputs.PKGVER }} + environment: + name: testpypi + url: https://test.pypi.org/project/${{ env.PKGNAME }}/${{ env.PKGVER }} + permissions: + id-token: write + + steps: + - name: Download Artifact + uses: actions/download-artifact@v4 + with: + pattern: dist* + path: ./dist + merge-multiple: true - name: Publish on TestPyPI uses: pypa/gh-action-pypi-publish@release/v1 with: - user: __token__ - password: ${{ secrets.testpypi }} repository-url: https://test.pypi.org/legacy/ + + pypi-upload: + name: Publish on PyPI + runs-on: ubuntu-latest + needs: [configure, build] + if: ${{ needs.configure.outputs.PYPI_UPLOAD_THIS_RUN == 'true' }} + env: + PKGNAME: ${{ needs.configure.outputs.PKGNAME }} + PKGVER: ${{ needs.configure.outputs.PKGVER }} + environment: + name: pypi + url: https://pypi.org/project/${{ env.PKGNAME }}/${{ env.PKGVER }} + permissions: + id-token: write + + steps: + - name: Download Artifact + uses: actions/download-artifact@v4 + with: + pattern: dist* + path: ./dist + merge-multiple: true + - name: Publish on PyPI - if: github.event.ref_type == 'tag' uses: pypa/gh-action-pypi-publish@release/v1 + + + test-anaconda-upload: + name: Publish on Anaconda (test label) + runs-on: ubuntu-latest + needs: [configure, build] + if: ${{ needs.configure.outputs.TEST_ANACONDA_UPLOAD_THIS_RUN == 'true' }} + + steps: + - name: Download Artifact + uses: actions/download-artifact@v4 with: - user: __token__ - password: ${{ secrets.pypi }} + pattern: conda_packages-* + path: ./conda_packages + merge-multiple: true - - name: Install Miniconda + - name: Install Miniforge uses: conda-incubator/setup-miniconda@v3 with: + miniforge-version: "latest" auto-update-conda: true + conda-remove-defaults: true + auto-activate-base: true + activate-environment: "" - name: Install Anaconda cloud client shell: bash -l {0} run: conda install anaconda-client - name: Publish to Anaconda test label - if: github.event.ref_type != 'tag' shell: bash -l {0} run: | anaconda \ --token ${{ secrets.ANACONDA_API_TOKEN }} \ upload \ - --user $ANACONDA_USER \ + --skip-existing \ + --user ${{ needs.configure.outputs.ANACONDA_USER }} \ --label test \ conda_packages/*/* - - name: Publish to Anaconda main label + + anaconda-upload: + name: Publish on Anaconda + runs-on: ubuntu-latest + needs: [configure, build] + if: ${{ needs.configure.outputs.ANACONDA_UPLOAD_THIS_RUN == 'true' }} + + steps: + - name: Download Artifact + uses: actions/download-artifact@v4 + with: + pattern: conda_packages-* + path: ./conda_packages + merge-multiple: true + + - name: Install Miniforge + uses: conda-incubator/setup-miniconda@v3 + with: + miniforge-version: "latest" + auto-update-conda: true + conda-remove-defaults: true + auto-activate-base: true + activate-environment: "" + + - name: Install Anaconda cloud client + shell: bash -l {0} + run: conda install anaconda-client + + - name: Publish to Anaconda main shell: bash -l {0} - if: github.event.ref_type == 'tag' run: | anaconda \ --token ${{ secrets.ANACONDA_API_TOKEN }} \ upload \ - --user $ANACONDA_USER \ + --skip-existing \ + --user ${{ needs.configure.outputs.ANACONDA_USER }} \ conda_packages/*/* From 946e1e5b4d1e21a20c409c746ed5897ae0ed0069 Mon Sep 17 00:00:00 2001 From: David Meyer Date: Mon, 24 Mar 2025 14:23:22 -0400 Subject: [PATCH 2/3] Remove stale dependencies --- pyproject.toml | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 707944c..b4a654c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [build-system] -requires = ["setuptools>=64", "wheel", "setuptools_scm>=8"] +requires = ["setuptools>=64", "setuptools_scm>=8"] build-backend = "setuptools.build_meta" [tool.setuptools_scm] @@ -28,23 +28,15 @@ license = {file = 'LICENSE.txt'} classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", ] -requires-python = ">=3.6" +requires-python = ">=3.8" dependencies = [ - "importlib_metadata>=1.0", "h5py>=2.9", "numpy>=1.15", "packaging>=20.4", "pyqtgraph>=0.11.0rc0", "qtutils>=2.2.3", "scipy", - "setuptools_scm>=4.1.0", "zprocess>=2.18.0", ] dynamic = ["version"] From 858d17adea00189d7a229669a5925c8507d0da06 Mon Sep 17 00:00:00 2001 From: David Meyer Date: Mon, 24 Mar 2025 15:34:30 -0400 Subject: [PATCH 3/3] Re-add setuptools-scm dependency Only `labscript_utils.versions.get_version` requires it, and it could be removed, but zprocess requires the package anyway so may as well keep the functionality. --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index b4a654c..70e1b03 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,6 +38,7 @@ dependencies = [ "qtutils>=2.2.3", "scipy", "zprocess>=2.18.0", + "setuptools_scm>=4.1.0", ] dynamic = ["version"] pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy