| 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@v4 |
| 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==2.21.3 |
| |
| - 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: "manylinux2014" |
| CIBW_MANYLINUX_AARCH64_IMAGE: "manylinux2014" |
| |
| 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@v4 |
| 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 |
| |
| - 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"] |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v4 |
| 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@v4 |
| with: |
| name: tsfile-cpp-windows |
| path: cpp/target/build/ |
| |
| - name: Build wheel |
| shell: msys2 {0} |
| run: | |
| set -euxo pipefail |
| export JAVA_HOME="$(cygpath "$JAVA_HOME")" |
| export PYTHON_HOME="$(cygpath "$pythonLocation")" |
| export PATH="$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 |
| ../mvnw package -DskipTests \ |
| -Dspotless.check.skip=true -Dspotless.apply.skip=true |
| ls -la dist/ |
| |
| - name: Verify wheel |
| shell: bash |
| run: | |
| 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 |
| |