Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/workflows/unit-test-cpp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,12 @@ jobs:
shell: bash
run: |
if [[ "$RUNNER_OS" == "Linux" ]]; then
if command -v apt-get >/dev/null 2>&1; then
sudo apt-get update
sudo apt-get install -y uuid-dev
elif command -v yum >/dev/null 2>&1; then
sudo yum install -y libuuid-devel
fi
sudo update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-17 100
sudo update-alternatives --set clang-format /usr/bin/clang-format-17
sudo apt-get update
Expand Down
11 changes: 11 additions & 0 deletions .github/workflows/unit-test-python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,17 @@ jobs:
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2-

- name: Install dependencies
shell: bash
run: |
if [[ "$RUNNER_OS" == "Linux" ]]; then
if command -v apt-get >/dev/null 2>&1; then
sudo apt-get update
sudo apt-get install -y uuid-dev
elif command -v yum >/dev/null 2>&1; then
sudo yum install -y libuuid-devel
fi
fi
# On Windows systems the 'mvnw' script needs an additional ".cmd" appended.
- name: Calculate platform suffix
id: platform_suffix
Expand Down
264 changes: 264 additions & 0 deletions .github/workflows/wheels.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,264 @@
name: Build TsFile wheels(multi-platform)

on:
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@v4
with:
python-version: "3.11"

- name: Set up Java 17
uses: actions/setup-java@v4
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 virtualenv
python -m pip install cibuildwheel==2.21.3


- 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 verify package \
-DskipTests -Dspotless.check.skip=true -Dspotless.apply.skip=true \
-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 verify package \
-DskipTests -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@v4
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@v4
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 verify package \
-DskipTests -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@v4
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@v4
with:
python-version: ${{ matrix.python-version }}

- name: Set up Java 17
uses: actions/setup-java@v4
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@v4
with:
name: tsfile-wheels-windows-py${{ matrix.python-version }}
path: python/dist/*.whl

Binary file added cpp/1761643915818-1-0-0.tsfile
Binary file not shown.
6 changes: 5 additions & 1 deletion cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#[[
#[[
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
Expand Down Expand Up @@ -143,6 +143,10 @@ if (ENABLE_ZLIB)
add_definitions(-DENABLE_GZIP)
endif()

if (ENABLE_ANTLR4)
add_definitions(-DENABLE_ANTLR4)
endif()

# All libs will be stored here, including libtsfile, compress-encoding lib.
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

Expand Down
12 changes: 1 addition & 11 deletions cpp/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
<parent>
<groupId>org.apache.tsfile</groupId>
<artifactId>tsfile-parent</artifactId>
<version>2.2.1-SNAPSHOT</version>
<version>2.2.0</version>
</parent>
<artifactId>tsfile-cpp</artifactId>
<packaging>pom</packaging>
Expand Down Expand Up @@ -163,16 +163,6 @@
</plugins>
</build>
<profiles>
<profile>
<id>linux-install-uuid-dev</id>
<activation>
<os>
<family>unix</family>
<name>Linux</name>
</os>
</activation>
</profile>
<!-- When running on jenkins, download the sonar build-wrapper, so we can do a code analysis -->
<profile>
<id>jenkins-build</id>
<!-- This is needed by the groovy hack script -->
Expand Down
10 changes: 7 additions & 3 deletions cpp/src/common/path.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,13 @@ struct Path {
IDeviceID::split_string(path_sc, '.');
#endif
if (nodes.size() > 1) {
device_id_ = std::make_shared<StringArrayDeviceID>(
std::vector<std::string>(nodes.begin(),
nodes.end() - 1));
std::string device_str;
for (size_t j = 0; j + 1 < nodes.size(); ++j) {
if (j > 0) device_str += ".";
device_str += nodes[j];
}
device_id_ =
std::make_shared<StringArrayDeviceID>(device_str);
measurement_ = nodes[nodes.size() - 1];
full_path_ =
device_id_->get_device_name() + "." + measurement_;
Expand Down
Loading
Loading