Skip to content

Commit 9c266e9

Browse files
authored
Add action to build wavpack against multiple glibc versions (#29)
* Add action to build wavpack against multiple glibc versions * Remove deprecated ubuntu image * Remove deprecated ubuntu image * Pin zarr version * Pin zarr version in test_no_cython * Add wavpack 5.8.0
1 parent ec21e78 commit 9c266e9

5 files changed

Lines changed: 90 additions & 5 deletions

File tree

.github/workflows/build-wavpack-binaries.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ jobs:
1010
strategy:
1111
fail-fast: false
1212
matrix:
13-
os: ["ubuntu-20.04", "ubuntu-22.04", "ubuntu-24.04"]
13+
os: ["ubuntu-22.04", "ubuntu-24.04"]
1414
steps:
1515
- uses: actions/checkout@v4
1616
- uses: actions/setup-python@v5
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
name: Build WavPack Libraries
2+
3+
on:
4+
workflow_dispatch:
5+
6+
jobs:
7+
build:
8+
name: Build WavPack for glibc ${{ matrix.glibc_version }}
9+
runs-on: ubuntu-latest
10+
strategy:
11+
matrix:
12+
glibc_version: ['2.31', '2.32', '2.33', '2.34', '2.35', '2.36', '2.37', 2.38', '2.39', '2.40', '2.41']
13+
wavpack_version: ['5.7.0', '5.8.0']
14+
15+
steps:
16+
- uses: actions/checkout@v3
17+
18+
- name: Set up Docker Buildx
19+
uses: docker/setup-buildx-action@v2
20+
21+
- name: Create Dockerfile for glibc build
22+
run: |
23+
cat > Dockerfile.build << 'EOF'
24+
ARG GLIBC_VERSION
25+
FROM ubuntu:22.04 as glibc-builder
26+
27+
ARG GLIBC_VERSION
28+
ENV GLIBC_VERSION=${GLIBC_VERSION}
29+
30+
# Install build dependencies
31+
RUN apt-get update && apt-get install -y \
32+
build-essential \
33+
wget \
34+
bzip2 \
35+
automake \
36+
libtool \
37+
gcc-multilib \
38+
&& rm -rf /var/lib/apt/lists/*
39+
40+
# Download and build glibc
41+
RUN wget https://ftp.gnu.org/gnu/glibc/glibc-${GLIBC_VERSION}.tar.bz2 \
42+
&& tar xjf glibc-${GLIBC_VERSION}.tar.bz2 \
43+
&& mkdir glibc-build \
44+
&& cd glibc-build \
45+
&& ../glibc-${GLIBC_VERSION}/configure --prefix=/usr \
46+
&& make -j$(nproc) \
47+
&& make install
48+
49+
# Now build WavPack
50+
ARG WAVPACK_VERSION
51+
RUN wget https://github.com/dbry/WavPack/releases/download/${WAVPACK_VERSION}/wavpack-${WAVPACK_VERSION}.tar.bz2 \
52+
&& tar xjf wavpack-${WAVPACK_VERSION}.tar.bz2 \
53+
&& cd wavpack-${WAVPACK_VERSION} \
54+
&& ./configure --enable-shared --prefix=/usr/local \
55+
&& make \
56+
&& make install
57+
58+
# Create output directory
59+
RUN mkdir -p /output/linux-x86_64-glibc${GLIBC_VERSION} \
60+
&& cp /usr/local/lib/libwavpack.so* /output/linux-x86_64-glibc${GLIBC_VERSION}/ \
61+
&& cp /usr/local/lib/libwavpack.so /output/linux-x86_64-glibc${GLIBC_VERSION}/libwavpack.so.1
62+
EOF
63+
64+
- name: Build Docker image and extract libraries
65+
run: |
66+
docker build \
67+
--build-arg GLIBC_VERSION=${{ matrix.glibc_version }} \
68+
--build-arg WAVPACK_VERSION=${{ matrix.wavpack_version }} \
69+
-f Dockerfile.build \
70+
-t wavpack-builder .
71+
72+
mkdir -p src/wavpack_numcodecs/libraries/${{ matrix.wavpack_version }}
73+
docker create --name wavpack-container wavpack-builder
74+
docker cp wavpack-container:/output/. src/wavpack_numcodecs/libraries/${{ matrix.wavpack_version }}/
75+
docker rm wavpack-container
76+
77+
- name: Upload artifacts
78+
uses: actions/upload-artifact@v3
79+
with:
80+
name: wavpack-libs-glibc${{ matrix.glibc_version }}
81+
path: src/wavpack_numcodecs/libraries/${{ matrix.wavpack_version }}/linux-x86_64-glibc${{ matrix.glibc_version }}
82+
83+
- name: List built files
84+
run: |
85+
ls -la src/wavpack_numcodecs/libraries/${{ matrix.wavpack_version }}/linux-x86_64-glibc${{ matrix.glibc_version }}

.github/workflows/python-package-binaries.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
strategy:
1414
fail-fast: false
1515
matrix:
16-
os: ["ubuntu-22.04", "ubuntu-20.04", "ubuntu-24.04"]
16+
os: ["ubuntu-22.04", "ubuntu-24.04"]
1717
python-version: ["3.9", "3.10", "3.11", "3.12"]
1818
steps:
1919
- uses: actions/checkout@v4

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ dependencies = [
2323
[project.optional-dependencies]
2424
test = [
2525
"pytest",
26-
"zarr",
26+
"zarr<3.0.0",
2727
"Cython"
2828
]
2929

3030
test_no_cython = [
3131
"pytest",
32-
"zarr"
32+
"zarr<3.0.0"
3333
]
3434

3535

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def get_build_extensions():
4343
glibc_version = platform.libc_ver()[1]
4444
if glibc_version not in available_glibc_versions:
4545
raise RuntimeError(
46-
f"Could not find a matching glibc version for the shipped libraries. "
46+
f"Could not find a matching the system's glibc version {glibc_version}. "
4747
f"Available builds: {available_glibc_versions}"
4848
)
4949
distr_folder = f"linux-x86_64-glibc{glibc_version}"

0 commit comments

Comments
 (0)