blob: b403dfad9dd41666c4e3abfb166efa7324cd8416 [file]
# Manual run; Release published; v* tag pushes; rc/** pushes only when C++-related paths change
# (job should-package). release events use the workflow file from the default branch.
name: C++ Client package
on:
workflow_dispatch:
release:
types: [published]
push:
branches:
- "rc/**"
tags:
- "v*"
concurrency:
group: client-cpp-package-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
MAVEN_OPTS: -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.http.retryHandler.class=standard -Dmaven.wagon.http.retryHandler.count=3
MAVEN_ARGS: --batch-mode --no-transfer-progress
jobs:
should-package:
runs-on: ubuntu-latest
outputs:
run: ${{ steps.result.outputs.run }}
steps:
- uses: actions/checkout@v5
if: github.event_name == 'push' && startsWith(github.ref, 'refs/heads/rc/')
- uses: dorny/paths-filter@v3
id: filter
if: github.event_name == 'push' && startsWith(github.ref, 'refs/heads/rc/')
with:
filters: |
cpp:
- 'pom.xml'
- 'iotdb-client/**'
- 'iotdb-protocol/**'
- '.github/workflows/client-cpp-package.yml'
- id: result
shell: bash
run: |
set -euo pipefail
E="${{ github.event_name }}"
R="${{ github.ref }}"
if [[ "$E" == "workflow_dispatch" ]] || [[ "$E" == "release" ]]; then
echo "run=true" >> "$GITHUB_OUTPUT"
exit 0
fi
if [[ "$E" == "push" ]] && [[ "$R" == refs/tags/v* ]]; then
echo "run=true" >> "$GITHUB_OUTPUT"
exit 0
fi
if [[ "$E" == "push" ]] && [[ "$R" =~ ^refs/heads/rc/ ]]; then
if [[ "${{ steps.filter.outputs.cpp }}" == "true" ]]; then
echo "run=true" >> "$GITHUB_OUTPUT"
else
echo "run=false" >> "$GITHUB_OUTPUT"
fi
exit 0
fi
echo "run=false" >> "$GITHUB_OUTPUT"
package-linux:
name: Package (${{ matrix.name }})
needs: should-package
if: needs.should-package.outputs.run == 'true'
strategy:
fail-fast: false
matrix:
include:
- name: linux-x86_64
runs-on: ubuntu-22.04
- name: linux-aarch64
runs-on: ubuntu-22.04-arm
runs-on: ${{ matrix.runs-on }}
steps:
- uses: actions/checkout@v5
- name: Set up JDK 17
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: "17"
- name: Install C++ dependencies (Linux)
shell: bash
run: |
set -euxo pipefail
sudo apt-get update
sudo apt-get install -y libboost-all-dev openssl libssl-dev wget
. /etc/os-release
if [[ "${VERSION_CODENAME}" == "jammy" ]]; then
wget -qO /tmp/llvm.sh https://apt.llvm.org/llvm.sh
chmod +x /tmp/llvm.sh
sudo DEBIAN_FRONTEND=noninteractive /tmp/llvm.sh 17
# llvm.sh installs clang-17/lldb/lld/clangd but not the clang-format-17 package
sudo apt-get install -y clang-format-17
else
sudo apt-get install -y clang-format-17
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
clang-format --version
- name: Cache Maven packages
uses: actions/cache@v5
with:
path: ~/.m2
key: ${{ runner.os }}-${{ runner.arch }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-${{ runner.arch }}-m2-
- name: Package client-cpp
shell: bash
run: |
set -euxo pipefail
./mvnw clean package -P with-cpp -pl iotdb-client/client-cpp -am -DskipTests
- name: Upload zip artifact
uses: actions/upload-artifact@v6
with:
name: client-cpp-${{ matrix.name }}
path: iotdb-client/client-cpp/target/client-cpp-*-cpp-*.zip
if-no-files-found: error
package-macos:
name: Package (${{ matrix.name }})
needs: should-package
if: needs.should-package.outputs.run == 'true'
strategy:
fail-fast: false
matrix:
include:
- name: macos-x86_64
runs-on: macos-15-intel
- name: macos-arm64
runs-on: macos-latest
runs-on: ${{ matrix.runs-on }}
steps:
- uses: actions/checkout@v5
- name: Set up JDK 17
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: "17"
- name: Install C++ dependencies (macOS)
shell: bash
run: |
set -euxo pipefail
brew install boost openssl llvm@17
ln -sf "$(brew --prefix llvm@17)/bin/clang-format" "$(brew --prefix)/bin/clang-format"
echo "$(brew --prefix llvm@17)/bin" >> "$GITHUB_PATH"
clang-format --version
- name: Cache Maven packages
uses: actions/cache@v5
with:
path: ~/.m2
key: ${{ runner.os }}-${{ runner.arch }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-${{ runner.arch }}-m2-
- name: Package client-cpp
shell: bash
env:
MACOSX_DEPLOYMENT_TARGET: "12.0"
run: |
set -euxo pipefail
./mvnw clean package -P with-cpp -pl iotdb-client/client-cpp -am -DskipTests
- name: Upload zip artifact
uses: actions/upload-artifact@v6
with:
name: client-cpp-${{ matrix.name }}
path: iotdb-client/client-cpp/target/client-cpp-*-cpp-*.zip
if-no-files-found: error
package-windows:
name: Package (${{ matrix.name }})
needs: should-package
if: needs.should-package.outputs.run == 'true'
strategy:
fail-fast: false
matrix:
include:
- name: windows-vs2022
runs-on: windows-2022
boost_choco: boost-msvc-14.3
cmake_generator: ""
iotdb_tools_thrift_version: ""
- name: windows-vs2026
runs-on: windows-2025-vs2026
boost_choco: boost-msvc-14.3
cmake_generator: Visual Studio 18 2026
iotdb_tools_thrift_version: ""
runs-on: ${{ matrix.runs-on }}
steps:
- uses: actions/checkout@v5
- name: Set up JDK 17
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: "17"
- name: Install C++ dependencies (Windows)
shell: pwsh
run: |
choco install winflexbison3 -y
choco install ${{ matrix.boost_choco }} -y
$boost_path = (Get-ChildItem -Path 'C:\local\' -Filter 'boost_*').FullName
echo $boost_path >> $env:GITHUB_PATH
choco install openssl -y
$sslPath = (Get-ChildItem 'C:\Program Files\OpenSSL*' -Directory | Select-Object -First 1).FullName
echo "$sslPath\bin" >> $env:GITHUB_PATH
echo "OPENSSL_ROOT_DIR=$sslPath" >> $env:GITHUB_ENV
choco install llvm --version=17.0.6 --force -y
clang-format --version
- name: Cache Maven packages
uses: actions/cache@v5
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-m2-
- name: Package client-cpp
shell: bash
env:
CMAKE_GENERATOR: ${{ matrix.cmake_generator }}
IOTDB_TOOLS_THRIFT_VERSION: ${{ matrix.iotdb_tools_thrift_version }}
run: |
set -euxo pipefail
MVN_ARGS=(./mvnw clean package -P with-cpp -pl iotdb-client/client-cpp -am -DskipTests)
if [ -n "${CMAKE_GENERATOR:-}" ]; then
MVN_ARGS+=("-Dcmake.generator=${CMAKE_GENERATOR}")
fi
if [ -n "${IOTDB_TOOLS_THRIFT_VERSION:-}" ]; then
MVN_ARGS+=("-Diotdb-tools-thrift.version=${IOTDB_TOOLS_THRIFT_VERSION}")
fi
"${MVN_ARGS[@]}"
- name: Upload zip artifact
uses: actions/upload-artifact@v6
with:
name: client-cpp-${{ matrix.name }}
path: iotdb-client/client-cpp/target/client-cpp-*-cpp-*.zip
if-no-files-found: error