blob: 104e3643369dba46fcee0003d0ccbd89a5035aff [file]
name: Build TsFile wheels(multi-platform)
on:
push:
branches:
- "rc/**"
workflow_dispatch:
jobs:
build:
name: Build wheels on ${{ matrix.name }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- name: linux-x86_64
os: ubuntu-22.04
platform: linux
cibw_archs_linux: "x86_64"
- name: linux-aarch64
os: ubuntu-22.04-arm
platform: linux
cibw_archs_linux: "aarch64"
- name: macos-x86_64
os: macos-15-intel
platform: macos
cibw_archs_macos: "x86_64"
- name: macos-arm64
os: macos-latest
platform: macos
cibw_archs_macos: "arm64"
# Windows is handled by the build-windows job below
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: false
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.11"
- name: Set up Java 17
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: "17"
- name: Install system deps (macOS)
if: matrix.platform == 'macos'
run: |
set -eux
brew update
brew install pkg-config || true
- name: Install build tools
run: |
python -m pip install -U pip wheel
python -m pip install cibuildwheel==3.4.1
- name: Pre-download virtualenv for cibuildwheel
run: |
if [ "$(uname)" = "Darwin" ]; then
CACHE_DIR="$HOME/Library/Caches/cibuildwheel"
else
CACHE_DIR="$HOME/.cache/cibuildwheel"
fi
mkdir -p "$CACHE_DIR"
TARGET="$CACHE_DIR/virtualenv-20.26.6.pyz"
if [ ! -f "$TARGET" ]; then
curl -sSL --retry 5 --retry-delay 15 --retry-all-errors \
-o "$TARGET" \
"https://github.com/pypa/get-virtualenv/raw/20.26.6/public/virtualenv.pyz"
fi
ls -la "$TARGET"
- name: Build C++ core via Maven (macOS)
if: matrix.platform == 'macos'
shell: bash
env:
MACOSX_DEPLOYMENT_TARGET: "12.0"
CFLAGS: "-mmacosx-version-min=12.0"
CXXFLAGS: "-mmacosx-version-min=12.0"
LDFLAGS: "-mmacosx-version-min=12.0"
run: |
set -euxo pipefail
chmod +x mvnw || true
./mvnw -Pwith-cpp clean package \
-DskipTests -Dspotless.check.skip=true -Dspotless.apply.skip=true \
-Dbuild.test=OFF \
-Dcmake.args="-DCMAKE_OSX_DEPLOYMENT_TARGET=12.0"
otool -l cpp/target/build/lib/libtsfile*.dylib | grep -A2 LC_VERSION_MIN_MACOSX || true
- name: Build wheels via cibuildwheel
if: matrix.platform != 'macos'
env:
CIBW_ARCHS_LINUX: ${{ matrix.cibw_archs_linux }}
# CIBW_ARCHS_WINDOWS: ${{ matrix.cibw_archs_windows }}
CIBW_BUILD: "cp39-* cp310-* cp311-* cp312-* cp313-* cp314-*"
CIBW_SKIP: "pp* *-musllinux*"
CIBW_MANYLINUX_X86_64_IMAGE: "manylinux_2_28"
CIBW_MANYLINUX_AARCH64_IMAGE: "manylinux_2_28"
MACOSX_DEPLOYMENT_TARGET: "12.0"
CIBW_BEFORE_ALL_LINUX: |
set -euxo pipefail
if command -v yum >/dev/null 2>&1; then
yum install -y wget tar gzip pkgconfig libuuid-devel libblkid-devel
else
echo "Not a yum-based image?" ; exit 1
fi
ARCH="$(uname -m)"
mkdir -p /opt/java
if [ "$ARCH" = "x86_64" ]; then
JDK_URL="https://download.oracle.com/java/17/archive/jdk-17.0.12_linux-x64_bin.tar.gz"
else
# aarch64
JDK_URL="https://download.oracle.com/java/17/archive/jdk-17.0.12_linux-aarch64_bin.tar.gz"
fi
curl -L -o /tmp/jdk17.tar.gz "$JDK_URL"
tar -xzf /tmp/jdk17.tar.gz -C /opt/java
export JAVA_HOME=$(echo /opt/java/jdk-17.0.12*)
export PATH="$JAVA_HOME/bin:$PATH"
java -version
chmod +x mvnw || true
./mvnw -Pwith-cpp clean package \
-DskipTests -Dbuild.test=OFF \
-Dspotless.check.skip=true -Dspotless.apply.skip=true
test -d cpp/target/build/lib && test -d cpp/target/build/include
CIBW_TEST_COMMAND: >
python -c "import tsfile, tsfile.tsfile_reader as r; print('import-ok:')"
CIBW_BUILD_VERBOSITY: "1"
run: cibuildwheel --output-dir wheelhouse python
- name: Build wheels via cibuildwheel (macOS)
if: matrix.platform == 'macos'
env:
CIBW_ARCHS_MACOS: ${{ matrix.cibw_archs_macos }}
CIBW_BUILD: "cp39-* cp310-* cp311-* cp312-* cp313-* cp314-*"
# CIBW_BUILD: "cp313-*"
CIBW_SKIP: "pp*"
CIBW_ENVIRONMENT_MACOS: "MACOSX_DEPLOYMENT_TARGET=12.0"
MACOSX_DEPLOYMENT_TARGET: "12.0"
CIBW_TEST_COMMAND: >
python -c "import tsfile, tsfile.tsfile_reader as r; print('import-ok:')"
CIBW_BUILD_VERBOSITY: "1"
run: cibuildwheel --output-dir wheelhouse python
- name: Upload wheels as artifact
uses: actions/upload-artifact@v7
with:
name: tsfile-wheels-${{ matrix.name }}
path: wheelhouse/*.whl
# ── Windows: build C++ once, then build wheels for each Python version ──
build-windows-cpp:
name: Build C++ core (Windows)
runs-on: windows-2022
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: false
fetch-depth: 0
- name: Set up Java 17
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: "17"
- name: Set up MSYS2 / MinGW
uses: msys2/setup-msys2@v2
with:
msystem: MINGW64
update: true
install: >-
mingw-w64-x86_64-gcc
mingw-w64-x86_64-cmake
mingw-w64-x86_64-make
make
- name: Build C++ core via Maven
shell: msys2 {0}
run: |
set -euxo pipefail
export JAVA_HOME="$(cygpath "$JAVA_HOME")"
export PATH="$JAVA_HOME/bin:$PATH"
java -version
chmod +x mvnw || true
./mvnw -Pwith-cpp clean package \
-DskipTests -Dbuild.test=OFF \
-Dspotless.check.skip=true -Dspotless.apply.skip=true
test -d cpp/target/build/lib
test -d cpp/target/build/include
cp /mingw64/bin/libstdc++-6.dll cpp/target/build/lib/
cp /mingw64/bin/libgcc_s_seh-1.dll cpp/target/build/lib/
cp /mingw64/bin/libwinpthread-1.dll cpp/target/build/lib/
- name: Upload C++ build output
uses: actions/upload-artifact@v7
with:
name: tsfile-cpp-windows
path: |
cpp/target/build/lib/
cpp/target/build/include/
build-windows-wheels:
name: Build wheel (Windows, Python ${{ matrix.python-version }})
needs: build-windows-cpp
runs-on: windows-2022
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: false
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
- name: Set up Java 17
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: "17"
- name: Set up MSYS2 / MinGW
uses: msys2/setup-msys2@v2
with:
msystem: MINGW64
update: false
install: >-
mingw-w64-x86_64-gcc
mingw-w64-x86_64-make
make
- name: Download C++ build output
uses: actions/download-artifact@v8
with:
name: tsfile-cpp-windows
path: cpp/target/build/
- name: Verify C++ artifacts exist
shell: msys2 {0}
run: |
set -euxo pipefail
ls -laR cpp/target/build/lib/
ls -laR cpp/target/build/include/
test -f cpp/target/build/lib/libtsfile.dll
test -f cpp/target/build/lib/libtsfile.dll.a
test -f cpp/target/build/lib/libstdc++-6.dll
test -f cpp/target/build/lib/libgcc_s_seh-1.dll
test -f cpp/target/build/lib/libwinpthread-1.dll
- name: Build wheel
shell: msys2 {0}
run: |
set -euxo pipefail
export JAVA_HOME="$(cygpath "$JAVA_HOME")"
export PYTHON_HOME="$(cygpath "$pythonLocation")"
export PATH="/mingw64/bin:$PYTHON_HOME:$PYTHON_HOME/Scripts:$JAVA_HOME/bin:$PATH"
# Build wheel via Maven (no clean — keep C++ artifacts from previous job)
chmod +x mvnw || true
cd python
BLACK_VER_PROP=""
case "${{ matrix.python-version }}" in
3.9) BLACK_VER_PROP="-Dblack.version=25.11.0" ;;
esac
../mvnw package -DskipTests -Dmaven.test.skip=true \
-Dspotless.check.skip=true -Dspotless.apply.skip=true \
${BLACK_VER_PROP}
ls -la dist/
- name: Verify wheel
shell: msys2 {0}
run: |
set -euxo pipefail
export PYTHON_HOME="$(cygpath "$pythonLocation")"
export PATH="$PYTHON_HOME:$PYTHON_HOME/Scripts:$PATH"
python -m pip install python/dist/*.whl
python -c "import tsfile, tsfile.tsfile_reader as r; print('import-ok')"
- name: Upload wheel
uses: actions/upload-artifact@v7
with:
name: tsfile-wheels-windows-py${{ matrix.python-version }}
path: python/dist/*.whl