mirror of
https://github.com/sqlalchemy/sqlalchemy.git
synced 2026-05-16 13:47:20 -04:00
0980de38a8
<!-- Provide a general summary of your proposed changes in the Title field above -->
### Description
<!-- Describe your changes in detail -->
There's a few bits and pieces of code to support Python <= 3.6 which are no longer needed and can be removed, to slightly simplify the codebase.
### Checklist
<!-- go over following points. check them with an `x` if they do apply, (they turn into clickable checkboxes once the PR is submitted, so no need to do everything at once)
-->
This pull request is:
- [ ] A documentation / typographical error fix
- Good to go, no issue or tests are needed
- [x] A short code fix
- please include the issue number, and create an issue if none exists, which
must include a complete example of the issue. one line code fixes without an
issue and demonstration will not be accepted.
- Please include: `Fixes: #<issue number>` in the commit message
- please include tests. one line code fixes without tests will not be accepted.
- [ ] A new feature implementation
- please include the issue number, and create an issue if none exists, which must
include a complete example of how the feature would look.
- Please include: `Fixes: #<issue number>` in the commit message
- please include tests.
**Have a nice day!**
Closes: #7544
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/7544
Pull-request-sha: 282b4a9128
Change-Id: I9ddf15fcf72551d52e3f027f337c7fee4aa9083b
317 lines
13 KiB
YAML
317 lines
13 KiB
YAML
name: Create wheel
|
|
|
|
on:
|
|
# run when a release has been created
|
|
release:
|
|
types: [created]
|
|
|
|
env:
|
|
# set this so the sqlalchemy test uses the installed version and not the local one
|
|
PYTHONNOUSERSITE: 1
|
|
# comment TWINE_REPOSITORY_URL to use the real pypi. NOTE: change also the secret used in TWINE_PASSWORD
|
|
# TWINE_REPOSITORY_URL: https://test.pypi.org/legacy/
|
|
|
|
jobs:
|
|
# two jobs are defined make-wheel-win-osx and make-wheel-linux.
|
|
# they do the the same steps, but linux wheels need to be build to target manylinux
|
|
make-wheel-win-osx:
|
|
name: ${{ matrix.python-version }}-${{ matrix.architecture }}-${{ matrix.os }}
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
os:
|
|
- "windows-latest"
|
|
- "macos-latest"
|
|
python-version:
|
|
- "3.7"
|
|
- "3.8"
|
|
- "3.9"
|
|
- "3.10"
|
|
architecture:
|
|
- x64
|
|
- x86
|
|
|
|
exclude:
|
|
- os: "macos-latest"
|
|
architecture: x86
|
|
|
|
fail-fast: false
|
|
|
|
steps:
|
|
- name: Checkout repo
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v2
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
architecture: ${{ matrix.architecture }}
|
|
|
|
- name: Remove tag_build from setup.cfg
|
|
# sqlalchemy has `tag_build` set to `dev` in setup.cfg. We need to remove it before creating the weel
|
|
# otherwise it gets tagged with `dev0`
|
|
shell: pwsh
|
|
# This is equivalent to the sed commands:
|
|
# `sed -i '/tag_build=dev/d' setup.cfg`
|
|
# `sed -i '/tag_build = dev/d' setup.cfg`
|
|
|
|
# `-replace` uses a regexp match
|
|
# alternative form: `(get-content setup.cfg) | foreach-object{$_ -replace "tag_build.=.dev",""} | set-content setup.cfg`
|
|
run: |
|
|
(cat setup.cfg) | %{$_ -replace "tag_build.?=.?dev",""} | set-content setup.cfg
|
|
|
|
- name: Create wheel
|
|
# `--no-deps` is used to only generate the wheel for the current library. Redundant in sqlalchemy since it has no dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip --version
|
|
pip install 'setuptools>=44' 'wheel>=0.34'
|
|
pip list
|
|
pip wheel -w dist -v --no-deps .
|
|
|
|
- name: Install wheel
|
|
# install the created wheel without using the pypi index
|
|
run: |
|
|
pip install greenlet "importlib-metadata;python_version<'3.8'" &&
|
|
pip install -f dist --no-index sqlalchemy
|
|
|
|
- name: Check c extensions
|
|
run: |
|
|
python -c 'from sqlalchemy.util import has_compiled_ext; assert has_compiled_ext()'
|
|
|
|
- name: Test created wheel
|
|
# the mock reconnect test seems to fail on the ci in windows
|
|
run: |
|
|
pip install pytest pytest-xdist ${{ matrix.extra-requires }}
|
|
pytest -n2 -q test --nomemory --notimingintensive
|
|
|
|
- name: Upload wheels to release
|
|
# upload the generated wheels to the github release
|
|
uses: sqlalchemyorg/upload-release-assets@sa
|
|
with:
|
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
files: 'dist/*.whl'
|
|
|
|
- name: Publish wheel
|
|
# the action https://github.com/marketplace/actions/pypi-publish runs only on linux and we cannot specify
|
|
# additional options
|
|
env:
|
|
TWINE_USERNAME: __token__
|
|
# replace TWINE_PASSWORD with token for real pypi
|
|
# TWINE_PASSWORD: ${{ secrets.test_pypi_token }}
|
|
TWINE_PASSWORD: ${{ secrets.pypi_token }}
|
|
run: |
|
|
pip install -U twine
|
|
twine upload --skip-existing dist/*
|
|
|
|
make-wheel-linux:
|
|
name: ${{ matrix.python-version }}-${{ matrix.architecture }}-${{ matrix.os }}
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
os:
|
|
- "ubuntu-latest"
|
|
python-version:
|
|
# the versions are <python tag>-<abi tag> as specified in PEP 425.
|
|
- cp37-cp37m
|
|
- cp38-cp38
|
|
- cp39-cp39
|
|
- cp310-cp310
|
|
architecture:
|
|
- x64
|
|
|
|
fail-fast: false
|
|
|
|
steps:
|
|
- name: Checkout repo
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Get python version
|
|
id: linux-py-version
|
|
env:
|
|
py_tag: ${{ matrix.python-version }}
|
|
# the command `echo "::set-output ...` is used to create an step output that can be used in following steps
|
|
# this is from https://github.community/t5/GitHub-Actions/Using-the-output-of-run-inside-of-if-condition/td-p/33920
|
|
run: |
|
|
version="`echo $py_tag | sed --regexp-extended 's/cp([0-9])([0-9]+)-.*/\1.\2/g'`"
|
|
echo $version
|
|
echo "::set-output name=python-version::$version"
|
|
|
|
- name: Remove tag_build from setup.cfg
|
|
# sqlalchemy has `tag_build` set to `dev` in setup.cfg. We need to remove it before creating the weel
|
|
# otherwise it gets tagged with `dev0`
|
|
shell: pwsh
|
|
# This is equivalent to the sed commands:
|
|
# `sed -i '/tag_build=dev/d' setup.cfg`
|
|
# `sed -i '/tag_build = dev/d' setup.cfg`
|
|
|
|
# `-replace` uses a regexp match
|
|
# alternative form: `(get-content setup.cfg) | foreach-object{$_ -replace "tag_build.=.dev",""} | set-content setup.cfg`
|
|
run: |
|
|
(cat setup.cfg) | %{$_ -replace "tag_build.?=.?dev",""} | set-content setup.cfg
|
|
|
|
- name: Create wheel for manylinux1 and manylinux2010
|
|
# this step uses the image provided by pypa here https://github.com/pypa/manylinux to generate the wheels on linux
|
|
# the action uses the image for manylinux2010 but can generate also a manylinux1 wheel
|
|
# change the tag of this image to change the image used
|
|
uses: RalfG/python-wheels-manylinux-build@v0.3.4-manylinux2010_x86_64
|
|
# this action generates 3 wheels in dist/. linux, manylinux1 and manylinux2010
|
|
with:
|
|
# python-versions is the output of the previous step and is in the form <python tag>-<abi tag>. Eg cp27-cp27mu
|
|
python-versions: ${{ matrix.python-version }}
|
|
build-requirements: "setuptools>=47 wheel>=0.34 cython>=0.29.24"
|
|
# `--no-deps` is used to only generate the wheel for the current library. Redundant in sqlalchemy since it has no dependencies
|
|
pip-wheel-args: "-w ./dist -v --no-deps"
|
|
|
|
- name: Create wheel for manylinux2014
|
|
# this step uses the image provided by pypa here https://github.com/pypa/manylinux to generate the wheels on linux
|
|
# the action uses the image for manylinux2010 but can generate also a manylinux1 wheel
|
|
# change the tag of this image to change the image used
|
|
uses: RalfG/python-wheels-manylinux-build@v0.3.4-manylinux2014_x86_64
|
|
# this action generates 2 wheels in dist/. linux and manylinux2014
|
|
with:
|
|
# python-versions is the output of the previous step and is in the form <python tag>-<abi tag>. Eg cp27-cp27mu
|
|
python-versions: ${{ matrix.python-version }}
|
|
build-requirements: "setuptools>=47 wheel>=0.34 cython>=0.29.24"
|
|
# `--no-deps` is used to only generate the wheel for the current library. Redundant in sqlalchemy since it has no dependencies
|
|
pip-wheel-args: "-w ./dist -v --no-deps"
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v2
|
|
with:
|
|
python-version: ${{ steps.linux-py-version.outputs.python-version }}
|
|
architecture: ${{ matrix.architecture }}
|
|
|
|
- name: Check created wheel
|
|
# check that the wheel is compatible with the current installation.
|
|
# If it is then does:
|
|
# - install the created wheel without using the pypi index
|
|
# - check the c extension
|
|
# - runs the tests
|
|
run: |
|
|
pip install 'packaging>=20.4'
|
|
if python .github/workflows/scripts/can_install.py "${{ matrix.python-version }}"
|
|
then
|
|
pip install greenlet "importlib-metadata;python_version<'3.8'"
|
|
pip install -f dist --no-index sqlalchemy
|
|
python -c 'from sqlalchemy.util import has_compiled_ext; assert has_compiled_ext()'
|
|
pip install pytest pytest-xdist ${{ matrix.extra-requires }}
|
|
pytest -n2 -q test --nomemory --notimingintensive
|
|
else
|
|
echo Not compatible. Skipping install.
|
|
fi
|
|
|
|
- name: Upload wheels to release
|
|
# upload the generated wheels to the github release
|
|
uses: sqlalchemyorg/upload-release-assets@sa
|
|
with:
|
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
files: 'dist/*manylinux*'
|
|
|
|
- name: Publish wheel
|
|
# the action https://github.com/marketplace/actions/pypi-publish runs only on linux and we cannot specify
|
|
# additional options
|
|
# We upload both manylinux1 and manylinux2010 wheels. pip will download the appropriate one according to the system.
|
|
# manylinux1 is an older format and is now not very used since many environments can use manylinux2010
|
|
# currently (April 2020) manylinux2014 is still wip, so we do not generate it.
|
|
env:
|
|
TWINE_USERNAME: __token__
|
|
# replace TWINE_PASSWORD with token for real pypi
|
|
# TWINE_PASSWORD: ${{ secrets.test_pypi_token }}
|
|
TWINE_PASSWORD: ${{ secrets.pypi_token }}
|
|
run: |
|
|
pip install -U twine
|
|
twine upload --skip-existing dist/*manylinux*
|
|
|
|
make-wheel-linux-arm64:
|
|
name: ${{ matrix.python-version }}-arm64-${{ matrix.os }}
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
os:
|
|
- "ubuntu-latest"
|
|
python-version:
|
|
# the versions are <python tag>-<abi tag> as specified in PEP 425.
|
|
- cp37-cp37m
|
|
- cp38-cp38
|
|
- cp39-cp39
|
|
- cp310-cp310
|
|
|
|
fail-fast: false
|
|
|
|
steps:
|
|
- name: Checkout repo
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Remove tag_build from setup.cfg
|
|
# sqlalchemy has `tag_build` set to `dev` in setup.cfg. We need to remove it before creating the weel
|
|
# otherwise it gets tagged with `dev0`
|
|
shell: pwsh
|
|
# This is equivalent to the sed commands:
|
|
# `sed -i '/tag_build=dev/d' setup.cfg`
|
|
# `sed -i '/tag_build = dev/d' setup.cfg`
|
|
|
|
# `-replace` uses a regexp match
|
|
# alternative form: `(get-content setup.cfg) | foreach-object{$_ -replace "tag_build.=.dev",""} | set-content setup.cfg`
|
|
run: |
|
|
(cat setup.cfg) | %{$_ -replace "tag_build.?=.?dev",""} | set-content setup.cfg
|
|
|
|
- name: Set up emulation
|
|
run: |
|
|
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
|
|
|
- name: Create wheel for manylinux2014
|
|
# this step uses the image provided by pypa here https://github.com/pypa/manylinux to generate the wheels on linux
|
|
# the action uses the image for manylinux2014 but can generate also a manylinux1 wheel
|
|
# change the tag of this image to change the image used
|
|
uses: RalfG/python-wheels-manylinux-build@v0.3.4-manylinux2014_aarch64
|
|
# this action generates 2 wheels in dist/. linux and manylinux2014
|
|
with:
|
|
# python-versions is the output of the previous step and is in the form <python tag>-<abi tag>. Eg cp37-cp37mu
|
|
python-versions: ${{ matrix.python-version }}
|
|
build-requirements: "setuptools>=47 wheel>=0.34 cython>=0.29.24"
|
|
# `--no-deps` is used to only generate the wheel for the current library. Redundant in sqlalchemy since it has no dependencies
|
|
pip-wheel-args: "-w ./dist -v --no-deps"
|
|
|
|
- name: Check created wheel
|
|
# check that the wheel is compatible with the current installation.
|
|
# - runs the tests
|
|
uses: docker://quay.io/pypa/manylinux2014_aarch64
|
|
with:
|
|
args: |
|
|
bash -c "
|
|
export PATH=/opt/python/${{ matrix.python-version }}/bin:$PATH &&
|
|
python --version &&
|
|
pip install greenlet \"importlib-metadata;python_version<'3.8'\" &&
|
|
pip install -f dist --no-index sqlalchemy &&
|
|
python -c 'from sqlalchemy.util import has_compiled_ext; assert has_compiled_ext()' &&
|
|
pip install pytest pytest-xdist ${{ matrix.extra-requires }} &&
|
|
pytest -n2 -q test --nomemory --notimingintensive"
|
|
|
|
- name: Upload wheels to release
|
|
# upload the generated wheels to the github release
|
|
uses: sqlalchemyorg/upload-release-assets@sa
|
|
with:
|
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
files: 'dist/*manylinux*'
|
|
|
|
- name: Set up Python for twine
|
|
# Setup python after creating the wheel, otherwise LD_LIBRARY_PATH gets set and it will break wheel generation
|
|
# twine on py2 is very old and is no longer updated, so we change to python 3.8 before upload
|
|
uses: actions/setup-python@v2
|
|
with:
|
|
python-version: "3.9"
|
|
|
|
- name: Publish wheel
|
|
# the action https://github.com/marketplace/actions/pypi-publish runs only on linux and we cannot specify
|
|
# additional options
|
|
# We upload manylinux2014 arm64 wheels. pip will download the appropriate one according to the system.
|
|
env:
|
|
TWINE_USERNAME: __token__
|
|
# replace TWINE_PASSWORD with token for real pypi
|
|
# TWINE_PASSWORD: ${{ secrets.test_pypi_token }}
|
|
TWINE_PASSWORD: ${{ secrets.pypi_token }}
|
|
run: |
|
|
pip install -U twine
|
|
twine upload --skip-existing dist/*manylinux*
|