From f9282e074850ecabe112cc20c54fc7fee1d7c36f Mon Sep 17 00:00:00 2001 From: "Michael R. Crusoe" Date: Wed, 17 Aug 2022 12:52:25 +0200 Subject: [PATCH 1/6] build more wheels --- .github/workflows/wheels.yml | 59 ++++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 1a67f2c2c..7f5aa8e88 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -8,35 +8,43 @@ on: jobs: deploy: runs-on: ubuntu-latest + # strategy; can't use a matrix reference in "uses": https://github.com/orgs/community/discussions/25824#discussioncomment-3249394 steps: - uses: actions/checkout@v3 with: fetch-depth: 0 # slow, but gets all the tags - name: set version run: pip install setuptools_scm[toml] && python -m setuptools_scm - - name: Build manylinux2014 x86 Python wheels - uses: RalfG/python-wheels-manylinux-build@v0.4.2-manylinux2014_x86_64 + - name: Build musllinux_1_1 x86_64 Python wheels + uses: RalfG/python-wheels-manylinux-build@v0.5.0-musllinux_1_1_x86_64 with: pre-build-command: source .github/workflows/wheel-prep.sh build-requirements: -rrequirements.txt -rmypy-requirements.txt - - name: Build manylinux_2_24 x86 Python wheels - uses: RalfG/python-wheels-manylinux-build@v0.4.2-manylinux_2_24_x86_64 + - name: Build manylinux2014 x86_64 Python wheels + uses: RalfG/python-wheels-manylinux-build@v0.5.0-manylinux2014_x86_64 + with: + pre-build-command: source .github/workflows/wheel-prep.sh + build-requirements: -rrequirements.txt -rmypy-requirements.txt + - name: Build manylinux_2_24 x86_64 Python wheels + uses: RalfG/python-wheels-manylinux-build@v0.5.0-manylinux_2_24_x86_64 + with: + pre-build-command: source .github/workflows/wheel-prep.sh + build-requirements: -rrequirements.txt -rmypy-requirements.txt + - name: Build manylinux_2_28 x86_64 Python wheels + uses: RalfG/python-wheels-manylinux-build@v0.5.0-manylinux_2_28_x86_64 with: pre-build-command: source .github/workflows/wheel-prep.sh build-requirements: -rrequirements.txt -rmypy-requirements.txt - # - name: Build manylinux_2_28 x86 Python wheels - # uses: RalfG/python-wheels-manylinux-build@v0.4.2-manylinux_2_28_x86_64 - # with: - # pre-build-command: source .github/workflows/wheel-prep.sh - # build-requirements: -rrequirements.txt -rmypy-requirements.txt - name: Move audited wheels to new directory - run: mkdir audited_wheels && cp dist/*-manylinux*.whl audited_wheels/ + run: mkdir audited_wheels && cp dist/*-manylinux*.whl dist/*-musllinux*.whl audited_wheels/ - name: Publish wheels to PyPI + if: ${{ github.event_name == 'release' }} uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} packages_dir: audited_wheels + skip_existing: true deploy_aarch64: runs-on: ubuntu-latest @@ -48,26 +56,33 @@ jobs: uses: docker/setup-qemu-action@v2 - name: set version run: pip install setuptools_scm[toml] && python -m setuptools_scm + # - name: Build musllinux_1_1 aarch64 Python wheels + # uses: RalfG/python-wheels-manylinux-build@v0.5.0-musllinux_1_1_aarch64 + # with: + # pre-build-command: source .github/workflows/wheel-prep.sh + # build-requirements: -rrequirements.txt -rmypy-requirements.txt - name: Build manylinux2014 aarch64 Python wheels - uses: RalfG/python-wheels-manylinux-build@v0.4.2-manylinux2014_aarch64 + uses: RalfG/python-wheels-manylinux-build@v0.5.0-manylinux2014_aarch64 + with: + pre-build-command: source .github/workflows/wheel-prep.sh + build-requirements: -rrequirements.txt -rmypy-requirements.txt + - name: Build manylinux2_24 aarch64 Python wheels + uses: RalfG/python-wheels-manylinux-build@v0.5.0-manylinux_2_24_aarch64 + with: + pre-build-command: source .github/workflows/wheel-prep.sh + build-requirements: -rrequirements.txt -rmypy-requirements.txt + - name: Build manylinux2_28 aarch64 Python wheels + uses: RalfG/python-wheels-manylinux-build@v0.5.0-manylinux_2_28_aarch64 with: pre-build-command: source .github/workflows/wheel-prep.sh build-requirements: -rrequirements.txt -rmypy-requirements.txt - # - name: Build manylinux2_24 aarch64 Python wheels - # uses: RalfG/python-wheels-manylinux-build@v0.4.2-manylinux2_24_aarch64 - # with: - # pre-build-command: source .github/workflows/wheel-prep.sh - # build-requirements: -rrequirements.txt -rmypy-requirements.txt - # - name: Build manylinux2_28 aarch64 Python wheels - # uses: RalfG/python-wheels-manylinux-build@v0.4.2-manylinux2_28_aarch64 - # with: - # pre-build-command: source .github/workflows/wheel-prep.sh - # build-requirements: -rrequirements.txt -rmypy-requirements.txt - name: Move audited wheels to new directory - run: mkdir audited_wheels && cp dist/*-manylinux*.whl audited_wheels/ + run: mkdir audited_wheels && cp dist/*-manylinux*.whl dist/*-musllinux*.whl audited_wheels/ - name: Publish wheels to PyPI + if: ${{ github.event_name == 'release' }} uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} packages_dir: audited_wheels + skip_existing: true From 396d8131eb62551d2444719d4fb2019d532f304d Mon Sep 17 00:00:00 2001 From: "Michael R. Crusoe" Date: Thu, 18 Aug 2022 11:34:12 +0200 Subject: [PATCH 2/6] shrink binary wheels by removing debugging info --- setup.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index a820d89f0..696f1fef3 100644 --- a/setup.py +++ b/setup.py @@ -59,7 +59,9 @@ from mypyc.build import mypycify opt_level = os.getenv("MYPYC_OPT_LEVEL", "3") - ext_modules = mypycify(mypyc_targets, opt_level=opt_level, verbose=True) + ext_modules = mypycify( + mypyc_targets, opt_level=opt_level, debug_level="0", verbose=True + ) else: ext_modules = [] From 84fa5bbe068ec7c49c47873cfa21f20d93cfb420 Mon Sep 17 00:00:00 2001 From: "Michael R. Crusoe" Date: Thu, 18 Aug 2022 12:07:43 +0200 Subject: [PATCH 3/6] mypyc: skip typechecking & compilation if not needed --- setup.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 696f1fef3..39e107e27 100644 --- a/setup.py +++ b/setup.py @@ -20,7 +20,22 @@ if os.getenv("SCHEMA_SALAD_USE_MYPYC", None) == "1": USE_MYPYC = True -if USE_MYPYC: +if USE_MYPYC and any( + item in sys.argv + for item in [ + "build", + "bdist_wheel", + "build_ext", + "install", + "install-lib", + "bdist", + "bdist_dumb", + "bdist_rpm", + "develop", + "bdist_egg", + "editable_wheel", + ] +): mypyc_targets = [ # "schema_salad/codegen_base.py", # interpreted classes cannot inherit from compiled # "schema_salad/codegen.py", From c73f152531bcf36f3828e2a4a317856de99734e0 Mon Sep 17 00:00:00 2001 From: "Michael R. Crusoe" Date: Thu, 18 Aug 2022 12:16:34 +0200 Subject: [PATCH 4/6] be explicit about packages and package dirs --- setup.py | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index 39e107e27..ec07f1e79 100644 --- a/setup.py +++ b/setup.py @@ -118,9 +118,27 @@ license="Apache 2.0", python_requires=">=3.6", setup_requires=pytest_runner + ["setuptools_scm"], - packages=["schema_salad", "schema_salad.tests"], - package_data={"schema_salad": ["metaschema/*", "py.typed"]}, - include_package_data=True, + packages=["schema_salad", "schema_salad.tests", "schema_salad.avro"], + package_data={ + "schema_salad": [ + "metaschema/*", + "py.typed", + "dotnet/*", + "java/*", + "typescript/*", + "typescript/.*", + ], + "schema_salad.tests": [ + "*.yml", + "docimp/*", + "*.owl", + "*.cwl", + "*.txt", + "foreign/*.cwl", + "test_real_cwl/*", + "test_schema/*", + ], + }, install_requires=install_requires, extras_require=extras_require, test_suite="tests", From 8c23a88cf0e8cdbb0699f0b01a91bdf33cacff72 Mon Sep 17 00:00:00 2001 From: "Michael R. Crusoe" Date: Thu, 18 Aug 2022 13:42:44 +0200 Subject: [PATCH 5/6] split up aarch64 wheel generatio to save time --- .github/workflows/wheels.yml | 75 +++++++++++++++++++++++++++++++++--- 1 file changed, 69 insertions(+), 6 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 7f5aa8e88..9ae3549f4 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -46,7 +46,33 @@ jobs: packages_dir: audited_wheels skip_existing: true - deploy_aarch64: + deploy_musllinux_1_1_aarch64: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 # slow, but gets all the tags + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: set version + run: pip install setuptools_scm[toml] && python -m setuptools_scm + - name: Build musllinux_1_1 aarch64 Python wheels + uses: RalfG/python-wheels-manylinux-build@v0.5.0-musllinux_1_1_aarch64 + with: + pre-build-command: source .github/workflows/wheel-prep.sh + build-requirements: -rrequirements.txt -rmypy-requirements.txt + - name: Move audited wheels to new directory + run: mkdir audited_wheels && cp dist/*-manylinux*.whl dist/*-musllinux*.whl audited_wheels/ + - name: Publish wheels to PyPI + if: ${{ github.event_name == 'release' }} + uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} + packages_dir: audited_wheels + skip_existing: true + + deploy_manylinux2014_aarch64: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 @@ -56,21 +82,58 @@ jobs: uses: docker/setup-qemu-action@v2 - name: set version run: pip install setuptools_scm[toml] && python -m setuptools_scm - # - name: Build musllinux_1_1 aarch64 Python wheels - # uses: RalfG/python-wheels-manylinux-build@v0.5.0-musllinux_1_1_aarch64 - # with: - # pre-build-command: source .github/workflows/wheel-prep.sh - # build-requirements: -rrequirements.txt -rmypy-requirements.txt - name: Build manylinux2014 aarch64 Python wheels uses: RalfG/python-wheels-manylinux-build@v0.5.0-manylinux2014_aarch64 with: pre-build-command: source .github/workflows/wheel-prep.sh build-requirements: -rrequirements.txt -rmypy-requirements.txt + - name: Move audited wheels to new directory + run: mkdir audited_wheels && cp dist/*-manylinux*.whl dist/*-musllinux*.whl audited_wheels/ + - name: Publish wheels to PyPI + if: ${{ github.event_name == 'release' }} + uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} + packages_dir: audited_wheels + skip_existing: true + + deploy_manylinux_2_24_aarch64: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 # slow, but gets all the tags + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: set version + run: pip install setuptools_scm[toml] && python -m setuptools_scm - name: Build manylinux2_24 aarch64 Python wheels uses: RalfG/python-wheels-manylinux-build@v0.5.0-manylinux_2_24_aarch64 with: pre-build-command: source .github/workflows/wheel-prep.sh build-requirements: -rrequirements.txt -rmypy-requirements.txt + - name: Move audited wheels to new directory + run: mkdir audited_wheels && cp dist/*-manylinux*.whl dist/*-musllinux*.whl audited_wheels/ + - name: Publish wheels to PyPI + if: ${{ github.event_name == 'release' }} + uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} + packages_dir: audited_wheels + skip_existing: true + + deploy_manylinux_2_28_aarch64: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 # slow, but gets all the tags + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: set version + run: pip install setuptools_scm[toml] && python -m setuptools_scm - name: Build manylinux2_28 aarch64 Python wheels uses: RalfG/python-wheels-manylinux-build@v0.5.0-manylinux_2_28_aarch64 with: From 382600ef6592b3bc9863f4c3261430eca3e7330d Mon Sep 17 00:00:00 2001 From: "Michael R. Crusoe" Date: Thu, 18 Aug 2022 14:20:45 +0200 Subject: [PATCH 6/6] switch to circleci for linux aarch64 wheel building --- .circleci/config.yml | 84 ++++++++++++++++++++++++++ .github/workflows/ci-tests.yml | 41 ------------- .github/workflows/wheels.yml | 104 --------------------------------- pyproject.toml | 10 ++++ setup.py | 3 +- 5 files changed, 96 insertions(+), 146 deletions(-) create mode 100644 .circleci/config.yml diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000..bc82c4fd0 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,84 @@ +version: 2.1 + +jobs: + arm-wheels: + parameters: + build: + type: string + many_image: + type: string + + machine: + image: ubuntu-2204:2022.07.1 + resource_class: arm.medium # two vCPUs + + environment: + CIBW_ARCHS: "aarch64" + CIBW_MANYLINUX_AARCH64_IMAGE: "<< parameters.many_image >>" + CIBW_MUSLLINUX_AARCH64_IMAGE: quay.io/pypa/musllinux_1_1_aarch64 + CIBW_BUILD: "<< parameters.build >>" + + steps: + - checkout + - run: + name: install cibuildwheel and other build reqs + command: | + python3 -m pip install --upgrade pip setuptools setuptools_scm[toml] + python3 -m pip install cibuildwheel + python3 -m setuptools_scm + + - run: + name: pip freeze + command: | + python3 -m pip freeze + + - run: + name: list wheels + command: | + python3 -m cibuildwheel . --print-build-identifiers + + - run: + name: cibuildwheel + command: | + source .github/workflows/wheel-prep.sh + export CIBW_ENVIRONMENT="SCHEMA_SALAD_USE_MYPYC=1 MYPYPATH=/project/mypy-stubs SETUPTOOLS_SCM_PRETEND_VERSION=${SETUPTOOLS_SCM_PRETEND_VERSION}" + python3 -m cibuildwheel . + # "/project" is the project path inside the cibuildwheel container itself + + - store_artifacts: + path: wheelhouse/ + + - when: + condition: + matches: + pattern: ".+" + value: "<< pipeline.git.tag >>" + steps: + - run: + environment: + TWINE_NONINTERACTIVE: "1" + TWINE_USERNAME: __token__ + TWINE_PASSWORD: $TWINE_PASSWORD + command: | + python3 -m pip install twine + twine upload --skip-existing wheelhouse/* + +workflows: + wheels: # This is the name of the workflow, feel free to change it to better match your workflow. + # Inside the workflow, you define the jobs you want to run. + jobs: + - arm-wheels: + matrix: + parameters: + build: + - "*manylinux*" + - "*musllinux*" + many_image: + - quay.io/pypa/manylinux2014_aarch64 + - quay.io/pypa/manylinux_2_24_aarch64 + - quay.io/pypa/manylinux_2_28_aarch64 + exclude: + - build: "*musllinux*" + many_image: quay.io/pypa/manylinux_2_24_aarch64 + - build: "*musllinux*" + many_image: quay.io/pypa/manylinux_2_28_aarch64 diff --git a/.github/workflows/ci-tests.yml b/.github/workflows/ci-tests.yml index fe535f4c6..b7abd1cdd 100644 --- a/.github/workflows/ci-tests.yml +++ b/.github/workflows/ci-tests.yml @@ -61,47 +61,6 @@ jobs: uses: codecov/codecov-action@v3 with: fail_ci_if_error: true - test-aarch64: - name: "Test ${{ matrix.pyver }} aarch64" - strategy: - matrix: - pyver: [cp39-cp39, cp310-cp310] - arch: [aarch64] - fail-fast: false - runs-on: ubuntu-latest - env: - py: /opt/python/${{ matrix.pyver }}/bin/python - img: quay.io/pypa/manylinux2014_${{ matrix.arch }} - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - name: Set up QEMU - id: qemu - uses: docker/setup-qemu-action@v2 - - name: Install tools - run: | - docker run --rm -v ${{ github.workspace }}:/ws:rw --workdir=/ws \ - ${{ env.img }} ${{ env.py }} -m pip install -U pip build - - name: Install dependencies - run: | - docker run --rm -v ${{ github.workspace }}:/ws:rw --workdir=/ws \ - ${{ env.img }} \ - bash -exc '${{ env.py }} -m pip install virtualenv && ${{ env.py }} -m venv .env && \ - source .env/bin/activate && \ - python -m pip install --upgrade pip wheel setuptools_scm[toml] && \ - python -m pip install -r mypy-requirements.txt -r requirements.txt && \ - MYPYPATH=mypy-stubs SCHEMA_SALAD_USE_MYPYC=1 python -m pip install -e .[pycodegen] && \ - deactivate' - - name: Test with pytest - run: | - docker run --rm -v ${{ github.workspace }}:/ws:rw --workdir=/ws \ - ${{ env.img }} \ - bash -exc '\ - source .env/bin/activate && \ - pip install setuptools wheel -r test-requirements.txt && \ - make test - deactivate' tox-style: name: CI linters via Tox diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 9ae3549f4..b3bb67e4e 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -45,107 +45,3 @@ jobs: password: ${{ secrets.PYPI_API_TOKEN }} packages_dir: audited_wheels skip_existing: true - - deploy_musllinux_1_1_aarch64: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 # slow, but gets all the tags - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - name: set version - run: pip install setuptools_scm[toml] && python -m setuptools_scm - - name: Build musllinux_1_1 aarch64 Python wheels - uses: RalfG/python-wheels-manylinux-build@v0.5.0-musllinux_1_1_aarch64 - with: - pre-build-command: source .github/workflows/wheel-prep.sh - build-requirements: -rrequirements.txt -rmypy-requirements.txt - - name: Move audited wheels to new directory - run: mkdir audited_wheels && cp dist/*-manylinux*.whl dist/*-musllinux*.whl audited_wheels/ - - name: Publish wheels to PyPI - if: ${{ github.event_name == 'release' }} - uses: pypa/gh-action-pypi-publish@release/v1 - with: - user: __token__ - password: ${{ secrets.PYPI_API_TOKEN }} - packages_dir: audited_wheels - skip_existing: true - - deploy_manylinux2014_aarch64: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 # slow, but gets all the tags - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - name: set version - run: pip install setuptools_scm[toml] && python -m setuptools_scm - - name: Build manylinux2014 aarch64 Python wheels - uses: RalfG/python-wheels-manylinux-build@v0.5.0-manylinux2014_aarch64 - with: - pre-build-command: source .github/workflows/wheel-prep.sh - build-requirements: -rrequirements.txt -rmypy-requirements.txt - - name: Move audited wheels to new directory - run: mkdir audited_wheels && cp dist/*-manylinux*.whl dist/*-musllinux*.whl audited_wheels/ - - name: Publish wheels to PyPI - if: ${{ github.event_name == 'release' }} - uses: pypa/gh-action-pypi-publish@release/v1 - with: - user: __token__ - password: ${{ secrets.PYPI_API_TOKEN }} - packages_dir: audited_wheels - skip_existing: true - - deploy_manylinux_2_24_aarch64: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 # slow, but gets all the tags - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - name: set version - run: pip install setuptools_scm[toml] && python -m setuptools_scm - - name: Build manylinux2_24 aarch64 Python wheels - uses: RalfG/python-wheels-manylinux-build@v0.5.0-manylinux_2_24_aarch64 - with: - pre-build-command: source .github/workflows/wheel-prep.sh - build-requirements: -rrequirements.txt -rmypy-requirements.txt - - name: Move audited wheels to new directory - run: mkdir audited_wheels && cp dist/*-manylinux*.whl dist/*-musllinux*.whl audited_wheels/ - - name: Publish wheels to PyPI - if: ${{ github.event_name == 'release' }} - uses: pypa/gh-action-pypi-publish@release/v1 - with: - user: __token__ - password: ${{ secrets.PYPI_API_TOKEN }} - packages_dir: audited_wheels - skip_existing: true - - deploy_manylinux_2_28_aarch64: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 # slow, but gets all the tags - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - name: set version - run: pip install setuptools_scm[toml] && python -m setuptools_scm - - name: Build manylinux2_28 aarch64 Python wheels - uses: RalfG/python-wheels-manylinux-build@v0.5.0-manylinux_2_28_aarch64 - with: - pre-build-command: source .github/workflows/wheel-prep.sh - build-requirements: -rrequirements.txt -rmypy-requirements.txt - - name: Move audited wheels to new directory - run: mkdir audited_wheels && cp dist/*-manylinux*.whl dist/*-musllinux*.whl audited_wheels/ - - name: Publish wheels to PyPI - if: ${{ github.event_name == 'release' }} - uses: pypa/gh-action-pypi-publish@release/v1 - with: - user: __token__ - password: ${{ secrets.PYPI_API_TOKEN }} - packages_dir: audited_wheels - skip_existing: true diff --git a/pyproject.toml b/pyproject.toml index cd0dd8822..b6140802e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,3 +4,13 @@ build-backend = "setuptools.build_meta" [tool.setuptools_scm] write_to = "schema_salad/_version.py" + +[tool.cibuildwheel] +before-build = "python -m pip install -r requirements.txt -r mypy-requirements.txt" +test-command = "python -m pytest -n 2 --pyargs schema_salad" +test-requires = "-r test-requirements.txt black" +skip = "pp* " +# ^ skip building wheels on pypy +test-skip = "cp*" +# ^ tests skipped to save time +#build-verbosity = "1" diff --git a/setup.py b/setup.py index ec07f1e79..447df085f 100644 --- a/setup.py +++ b/setup.py @@ -86,6 +86,7 @@ "ruamel.yaml >= 0.17.6, < 0.17.22;python_version>='3.7'", "ruamel.yaml >= 0.16.12, < 0.17.22", "rdflib >= 4.2.2, < 7.0.0", + "rdflib-jsonld>=0.4.0, <= 0.6.1;python_version<='3.6'", "mistune >= 0.8.1, < 0.9", "CacheControl >= 0.11.7, < 0.13", "lockfile >= 0.9", # needed for CacheControl's FileCache @@ -116,7 +117,7 @@ download_url="https://github.com/common-workflow-language/schema_salad/releases", ext_modules=ext_modules, license="Apache 2.0", - python_requires=">=3.6", + python_requires=">=3.6,<3.11", setup_requires=pytest_runner + ["setuptools_scm"], packages=["schema_salad", "schema_salad.tests", "schema_salad.avro"], package_data={