Fix issue where threads would block python exit when an error is thrown and the file cannot be closed. #824
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Continous integration | |
on: | |
pull_request: | |
push: | |
branches: | |
- develop | |
- main | |
tags: | |
- "*" | |
jobs: | |
lint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Set up Python 3.8 | |
uses: actions/[email protected] | |
with: | |
python-version: 3.8 | |
- name: Install tox | |
run: pip install tox | |
- name: Lint | |
run: tox -e lint | |
package-checks: | |
strategy: | |
matrix: | |
tox_env: | |
- docs | |
- twine_check | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Set up Python 3.8 | |
uses: actions/[email protected] | |
with: | |
python-version: 3.8 | |
- name: Install isal | |
run: sudo apt-get install libisal-dev | |
- name: Install tox and upgrade setuptools and pip | |
run: pip install --upgrade tox setuptools pip | |
- name: Run tox -e ${{ matrix.tox_env }} | |
run: tox -e ${{ matrix.tox_env }} | |
env: | |
PYTHON_ISAL_LINK_DYNAMIC: True | |
test-static: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
python-version: | |
- "3.8" | |
- "3.9" | |
- "3.10" | |
- "3.11" | |
- "3.12" | |
- "3.13-dev" | |
- "pypy-3.9" | |
- "pypy-3.10" | |
os: ["ubuntu-latest"] | |
include: | |
- os: "macos-13" | |
python-version: "3.8" | |
- os: "macos-14" | |
python-version: "3.10" | |
- os: "windows-latest" | |
python-version: "3.8" | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/[email protected] | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install tox and upgrade setuptools | |
run: pip install --upgrade tox setuptools | |
- name: Install build dependencies (Linux) # Yasm in pypa/manylinux images. | |
run: sudo apt install nasm | |
if: runner.os == 'Linux' | |
- name: Install build dependencies (Macos) | |
# Install yasm because nasm does not work when building wheels. | |
# Probably because of nasm-filter.sh not filtering all flags that can not be used. | |
run: brew install nasm | |
if: runner.os == 'macOS' | |
- name: Set MSVC developer prompt | |
uses: ilammy/[email protected] | |
if: runner.os == 'Windows' | |
- name: Install nasm (Windows) | |
uses: ilammy/[email protected] | |
if: runner.os == 'Windows' | |
- name: Run tests | |
run: tox | |
- name: Upload coverage report | |
uses: codecov/codecov-action@v1 | |
test-arch: | |
if: startsWith(github.ref, 'refs/tags') || github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/main' | |
runs-on: "ubuntu-latest" | |
strategy: | |
matrix: | |
python_version: | |
- "3.8" | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- uses: uraimo/[email protected] | |
name: Build & run test | |
with: | |
arch: none | |
distro: none | |
base_image: "--platform=linux/arm64 quay.io/pypa/manylinux2014_aarch64" | |
# versioningit needs an accessible git repository but the container | |
# is run as root, which is different from the repository user. | |
# use git config to override this. | |
run: |- | |
git config --global --add safe.directory $PWD | |
CFLAGS="-DNDEBUG -g0" python${{matrix.python_version}} -m pip install . pytest | |
python${{matrix.python_version}} -m pytest tests | |
# Test if the python-isal conda package can be build. Which is linked | |
# dynamically to the conda isa-l package. | |
test-dynamic: | |
runs-on: ${{ matrix.os }} | |
defaults: | |
run: | |
# This is needed for miniconda, see: | |
# https://github.com/marketplace/actions/setup-miniconda#important. | |
shell: bash -l {0} | |
strategy: | |
matrix: | |
os: ["ubuntu-latest", "macos-13", "windows-latest"] | |
python_version: [ "python" ] | |
include: | |
- os: "ubuntu-latest" | |
python_version: "pypy" | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Install miniconda. | |
uses: conda-incubator/setup-miniconda@v3 # https://github.com/conda-incubator/setup-miniconda. | |
with: | |
channels: conda-forge,defaults | |
- name: Install requirements (universal) | |
run: conda install isa-l ${{ matrix.python_version}} tox | |
- name: Set MSVC developer prompt | |
uses: ilammy/[email protected] | |
if: runner.os == 'Windows' | |
- name: Run tests (dynamic link) | |
run: tox | |
env: | |
PYTHON_ISAL_LINK_DYNAMIC: True | |
deploy: | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') | |
runs-on: ${{ matrix.os }} | |
needs: | |
- lint | |
- package-checks | |
- test-static | |
- test-dynamic | |
- test-arch | |
strategy: | |
matrix: | |
os: | |
- ubuntu-latest | |
- macos-13 | |
- macos-14 | |
- windows-latest | |
cibw_archs_linux: ["x86_64"] | |
cibw_before_all_linux: | |
- >- | |
curl -o nasm-2.15.05.tar.gz https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.gz && | |
tar -xzvf nasm-2.15.05.tar.gz && | |
cd nasm-2.15.05/ && | |
./autogen.sh && | |
./configure && | |
make nasm && | |
install -c nasm /usr/bin/nasm | |
build_sdist: [true] | |
include: | |
- os: "ubuntu-latest" | |
cibw_archs_linux: "aarch64" | |
cibw_before_all_linux: "true" # The true command exits with 0 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
fetch-depth: 0 # Fetch everything to get accurately versioned tag. | |
- uses: actions/setup-python@v2 | |
name: Install Python | |
- name: Install cibuildwheel twine wheel | |
run: python -m pip install cibuildwheel twine wheel | |
- name: Install build dependencies (Macos) | |
run: brew install nasm | |
if: runner.os == 'macOS' | |
- name: Set MSVC developer prompt | |
uses: ilammy/[email protected] | |
if: runner.os == 'Windows' | |
- name: Install nasm (Windows) | |
uses: ilammy/[email protected] | |
if: runner.os == 'Windows' | |
- name: Set up QEMU | |
if: ${{runner.os == 'Linux' && matrix.cibw_archs_linux == 'aarch64'}} | |
uses: docker/[email protected] | |
with: | |
platforms: arm64 | |
- name: Build wheels | |
run: cibuildwheel --output-dir dist | |
env: | |
CIBW_SKIP: "*-win32 *-manylinux_i686 cp38-macosx_*arm64 cp39-macosx_*arm64" # Skip 32 bit and problematic mac builds. | |
CIBW_ARCHS_LINUX: ${{ matrix.cibw_archs_linux }} | |
CIBW_BEFORE_ALL_LINUX: ${{ matrix.cibw_before_all_linux }} | |
# Fully test the build wheels again. | |
CIBW_TEST_REQUIRES: "pytest" | |
# Simple tests that requires the project to be build correctly | |
# Skip extensive compatibility testing which is slow. | |
CIBW_TEST_COMMAND_LINUX: >- | |
pytest -v {project}/tests/test_igzip.py | |
{project}/tests/test_gzip_compliance.py | |
{project}/tests/test_zlib_compliance.py | |
{project}/tests/test_igzip_lib.py | |
-k 'not test_compress_decompress' | |
CIBW_TEST_COMMAND_MACOS: >- | |
pytest -v {project}/tests/test_igzip.py | |
{project}/tests/test_gzip_compliance.py | |
{project}/tests/test_zlib_compliance.py | |
{project}/tests/test_igzip_lib.py | |
-k 'not test_compress_decompress' | |
# Windows does not have the test module apparently. Do more expensive | |
# tests to verify build. | |
CIBW_TEST_COMMAND_WINDOWS: >- | |
pytest {project}/tests/test_igzip.py | |
{project}/tests/test_igzip_lib.py | |
{project}/tests/test_compat.py | |
CIBW_ENVIRONMENT_LINUX: >- | |
PYTHON_ISAL_BUILD_CACHE=True | |
PYTHON_ISAL_BUILD_CACHE_FILE=/tmp/build_cache | |
CFLAGS="-g0 -DNDEBUG" | |
CIBW_ENVIRONMENT_WINDOWS: >- | |
PYTHON_ISAL_BUILD_CACHE=True | |
PYTHON_ISAL_BUILD_CACHE_FILE=${{ runner.temp }}\build_cache | |
CIBW_ENVIRONMENT_MACOS: >- | |
PYTHON_ISAL_BUILD_CACHE=True | |
PYTHON_ISAL_BUILD_CACHE_FILE=${{ runner.temp }}/build_cache | |
CFLAGS="-g0 -DNDEBUG" | |
- name: Build sdist | |
if: ${{runner.os == 'Linux' && matrix.cibw_archs_linux == 'x86_64'}} | |
run: | | |
pip install build | |
python -m build --sdist | |
- uses: actions/upload-artifact@v2 | |
with: | |
name: "dist" | |
path: "dist/" | |
- name: Publish package to TestPyPI | |
# pypa/gh-action-pypi-publish@master does not work on OSX | |
# Alpha, Beta and dev releases contain a - in the tag. | |
if: contains(github.ref, '-') && startsWith(github.ref, 'refs/tags') | |
run: twine upload --skip-existing --repository-url https://test.pypi.org/legacy/ dist/* | |
env: | |
TWINE_USERNAME: __token__ | |
TWINE_PASSWORD: ${{ secrets.TEST_PYPI_API_TOKEN }} | |
- name: Publish package to PyPI | |
if: "!contains(github.ref, '-') && startsWith(github.ref, 'refs/tags')" | |
run: twine upload --skip-existing dist/* | |
env: | |
TWINE_USERNAME: __token__ | |
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }} |