blob: 6bec0aec4a5b902928e7a6a169a5ab2db59f5184 [file]
# 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
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
env:
CARGO_TERM_COLOR: always
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# ASF policy: third-party actions must be pinned to a full commit SHA.
- uses: dtolnay/rust-toolchain@4cda84d5c5c54efe2404f9d843567869ab1699d4 # stable
with:
components: rustfmt, clippy
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
- name: License header check
run: ./tools/check-license.sh
- name: Format check
run: cargo fmt --check
- name: Clippy
run: cargo clippy --all-targets -- -D warnings
- name: Clippy (tls)
run: cargo clippy --all-targets --features tls -- -D warnings
- name: Build
run: cargo build
- name: Build (tls)
run: cargo build --features tls
# Live-server tests skip themselves when nothing listens on 6667.
- name: Unit tests
run: cargo test
# Adds the loopback TLS handshake tests (self-signed fixture cert).
- name: Unit tests (tls)
run: cargo test --features tls
integration:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
# Oldest tested + latest stable IoTDB (see COMPATIBILITY.md).
iotdb-version: ["2.0.6", "2.0.10"]
name: integration (iotdb ${{ matrix.iotdb-version }})
services:
iotdb:
image: apache/iotdb:${{ matrix.iotdb-version }}-standalone
env:
# 2.0.10+ images default dn_rpc_address to 127.0.0.1 (loopback only),
# which rejects connections forwarded through docker's port mapping.
dn_rpc_address: 0.0.0.0
ports:
- 6667:6667
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@4cda84d5c5c54efe2404f9d843567869ab1699d4 # stable
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
# A bare TCP probe is unreliable: docker's port proxy accepts connections
# before the DataNode listens (then resets them). Match the DataNode
# banner specifically — the ConfigNode prints a similar "set up
# successfully" line earlier in the standalone image.
- name: Wait for IoTDB
run: |
for i in $(seq 1 120); do
if docker logs "${{ job.services.iotdb.id }}" 2>&1 | grep -q "DataNode is set up successfully"; then
echo "IoTDB DataNode is up after ${i}s"
exit 0
fi
sleep 1
done
echo "IoTDB DataNode did not become ready in 120s" >&2
docker logs "${{ job.services.iotdb.id }}" 2>&1 | tail -50
exit 1
# Includes the live-server tests now that IoTDB is reachable.
- name: Integration tests
run: cargo test
# Examples double as end-to-end smoke tests against the live server.
- name: Run examples
run: |
cargo run --example tree_session
cargo run --example table_session
cargo run --example session_pool