From 56679adf90ddde19b5e66a6544b8154d172c8176 Mon Sep 17 00:00:00 2001 From: Alessio Buccino Date: Tue, 22 Apr 2025 10:51:13 +0200 Subject: [PATCH 1/6] Add action to build wavpack against multiple glibc versions --- .github/workflows/build-wavpack.yml | 85 +++++++++++++++++++++++++++++ setup.py | 2 +- 2 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/build-wavpack.yml diff --git a/.github/workflows/build-wavpack.yml b/.github/workflows/build-wavpack.yml new file mode 100644 index 0000000..e2145c3 --- /dev/null +++ b/.github/workflows/build-wavpack.yml @@ -0,0 +1,85 @@ +name: Build WavPack Libraries + +on: + workflow_dispatch: + +jobs: + build: + name: Build WavPack for glibc ${{ matrix.glibc_version }} + runs-on: ubuntu-latest + strategy: + matrix: + glibc_version: ['2.31', '2.32', '2.33', '2.34', '2.35', '2.36', '2.37', 2.38', '2.39', '2.40', '2.41'] + wavpack_version: ['5.7.0'] + + steps: + - uses: actions/checkout@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Create Dockerfile for glibc build + run: | + cat > Dockerfile.build << 'EOF' + ARG GLIBC_VERSION + FROM ubuntu:22.04 as glibc-builder + + ARG GLIBC_VERSION + ENV GLIBC_VERSION=${GLIBC_VERSION} + + # Install build dependencies + RUN apt-get update && apt-get install -y \ + build-essential \ + wget \ + bzip2 \ + automake \ + libtool \ + gcc-multilib \ + && rm -rf /var/lib/apt/lists/* + + # Download and build glibc + RUN wget https://ftp.gnu.org/gnu/glibc/glibc-${GLIBC_VERSION}.tar.bz2 \ + && tar xjf glibc-${GLIBC_VERSION}.tar.bz2 \ + && mkdir glibc-build \ + && cd glibc-build \ + && ../glibc-${GLIBC_VERSION}/configure --prefix=/usr \ + && make -j$(nproc) \ + && make install + + # Now build WavPack + ARG WAVPACK_VERSION + RUN wget https://github.com/dbry/WavPack/releases/download/${WAVPACK_VERSION}/wavpack-${WAVPACK_VERSION}.tar.bz2 \ + && tar xjf wavpack-${WAVPACK_VERSION}.tar.bz2 \ + && cd wavpack-${WAVPACK_VERSION} \ + && ./configure --enable-shared --prefix=/usr/local \ + && make \ + && make install + + # Create output directory + RUN mkdir -p /output/linux-x86_64-glibc${GLIBC_VERSION} \ + && cp /usr/local/lib/libwavpack.so* /output/linux-x86_64-glibc${GLIBC_VERSION}/ \ + && cp /usr/local/lib/libwavpack.so /output/linux-x86_64-glibc${GLIBC_VERSION}/libwavpack.so.1 + EOF + + - name: Build Docker image and extract libraries + run: | + docker build \ + --build-arg GLIBC_VERSION=${{ matrix.glibc_version }} \ + --build-arg WAVPACK_VERSION=${{ matrix.wavpack_version }} \ + -f Dockerfile.build \ + -t wavpack-builder . + + mkdir -p src/wavpack_numcodecs/libraries/${{ matrix.wavpack_version }} + docker create --name wavpack-container wavpack-builder + docker cp wavpack-container:/output/. src/wavpack_numcodecs/libraries/${{ matrix.wavpack_version }}/ + docker rm wavpack-container + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + name: wavpack-libs-glibc${{ matrix.glibc_version }} + path: src/wavpack_numcodecs/libraries/${{ matrix.wavpack_version }}/linux-x86_64-glibc${{ matrix.glibc_version }} + + - name: List built files + run: | + ls -la src/wavpack_numcodecs/libraries/${{ matrix.wavpack_version }}/linux-x86_64-glibc${{ matrix.glibc_version }} diff --git a/setup.py b/setup.py index 0732c0a..e746a20 100644 --- a/setup.py +++ b/setup.py @@ -43,7 +43,7 @@ def get_build_extensions(): glibc_version = platform.libc_ver()[1] if glibc_version not in available_glibc_versions: raise RuntimeError( - f"Could not find a matching glibc version for the shipped libraries. " + f"Could not find a matching the system's glibc version {glibc_version}. " f"Available builds: {available_glibc_versions}" ) distr_folder = f"linux-x86_64-glibc{glibc_version}" From 90e87c6008c0de2ae794dd5d58d8728e22d9587a Mon Sep 17 00:00:00 2001 From: Alessio Buccino Date: Tue, 22 Apr 2025 10:57:00 +0200 Subject: [PATCH 2/6] Remove deprecated ubuntu image --- .github/workflows/build-wavpack-binaries.yml | 2 +- .github/workflows/python-package-binaries.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-wavpack-binaries.yml b/.github/workflows/build-wavpack-binaries.yml index 63e5b27..f829c94 100644 --- a/.github/workflows/build-wavpack-binaries.yml +++ b/.github/workflows/build-wavpack-binaries.yml @@ -10,7 +10,7 @@ jobs: strategy: fail-fast: false matrix: - os: ["ubuntu-20.04", "ubuntu-22.04", "ubuntu-24.04"] + os: ["ubuntu-22.04", "ubuntu-24.04"] steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 diff --git a/.github/workflows/python-package-binaries.yml b/.github/workflows/python-package-binaries.yml index 012b8f8..65ee52d 100644 --- a/.github/workflows/python-package-binaries.yml +++ b/.github/workflows/python-package-binaries.yml @@ -13,7 +13,7 @@ jobs: strategy: fail-fast: false matrix: - os: ["ubuntu-22.04", "ubuntu-20.04", "ubuntu-24.04"] + os: ["ubuntu-20.04", "ubuntu-24.04"] python-version: ["3.9", "3.10", "3.11", "3.12"] steps: - uses: actions/checkout@v4 From 6475f2ace67e8c61033da45b5b23dce51bf114de Mon Sep 17 00:00:00 2001 From: Alessio Buccino Date: Tue, 22 Apr 2025 10:58:39 +0200 Subject: [PATCH 3/6] Remove deprecated ubuntu image --- .github/workflows/python-package-binaries.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-package-binaries.yml b/.github/workflows/python-package-binaries.yml index 65ee52d..46b8aac 100644 --- a/.github/workflows/python-package-binaries.yml +++ b/.github/workflows/python-package-binaries.yml @@ -13,7 +13,7 @@ jobs: strategy: fail-fast: false matrix: - os: ["ubuntu-20.04", "ubuntu-24.04"] + os: ["ubuntu-22.04", "ubuntu-24.04"] python-version: ["3.9", "3.10", "3.11", "3.12"] steps: - uses: actions/checkout@v4 From 2d5dbaaf699b7b7ca42a82de161eccb6d1235848 Mon Sep 17 00:00:00 2001 From: Alessio Buccino Date: Tue, 22 Apr 2025 11:10:08 +0200 Subject: [PATCH 4/6] Pin zarr version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index fbc02a9..b9f9047 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ dependencies = [ [project.optional-dependencies] test = [ "pytest", - "zarr", + "zarr<3.0.0", "Cython" ] From f8ca242145ddc3b0044de20ebae1c22f677e17c2 Mon Sep 17 00:00:00 2001 From: Alessio Buccino Date: Tue, 22 Apr 2025 11:13:42 +0200 Subject: [PATCH 5/6] Pin zarr version in test_no_cython --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index b9f9047..22b6261 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,7 +29,7 @@ test = [ test_no_cython = [ "pytest", - "zarr" + "zarr<3.0.0" ] From cc343a129981a088b6da862c5d71530909fd00b9 Mon Sep 17 00:00:00 2001 From: Alessio Buccino Date: Tue, 22 Apr 2025 11:20:13 +0200 Subject: [PATCH 6/6] Add wavpack 5.8.0 --- .github/workflows/build-wavpack.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-wavpack.yml b/.github/workflows/build-wavpack.yml index e2145c3..13de4e1 100644 --- a/.github/workflows/build-wavpack.yml +++ b/.github/workflows/build-wavpack.yml @@ -10,7 +10,7 @@ jobs: strategy: matrix: glibc_version: ['2.31', '2.32', '2.33', '2.34', '2.35', '2.36', '2.37', 2.38', '2.39', '2.40', '2.41'] - wavpack_version: ['5.7.0'] + wavpack_version: ['5.7.0', '5.8.0'] steps: - uses: actions/checkout@v3