blob: d6c18a477d4d8c21649b6bf1671d9ec4f69c4515 [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.
components:
# Workspace-level changes that affect all Rust components
rust-workspace:
paths:
- "Cargo.toml"
- "Cargo.lock"
- "rust-toolchain.toml"
- ".cargo/**"
# crates.io publish chain verification. Runs scripts/verify-crates-publish.sh,
# which spins up cargo-http-registry as a local alt-registry and chain-publishes
# the four crates we ship to crates.io. Catches the class of bug that broke
# Apache Iggy 0.8.0 rc1 (path-only workspace dep without `version =`).
rust-publish:
depends_on:
- "rust-workspace" # rust-toolchain.toml / .cargo/** affect cargo publish
- "ci-infrastructure" # action.yml/workflow edits should re-run the check
paths:
- "Cargo.toml"
- "Cargo.lock"
- "core/binary_protocol/Cargo.toml"
- "core/common/Cargo.toml"
- "core/sdk/Cargo.toml"
- "core/cli/Cargo.toml"
- "scripts/verify-crates-publish.sh"
- ".github/actions/rust/pre-merge/action.yml"
tasks:
- "verify-publish"
# MSRV gate for the four crates we ship to crates.io. Compile-checks them
# against the workspace `rust-version` so the published MSRV stays honest.
# Source-scoped (not just Cargo.toml) because an MSRV break usually comes
# from a crate using an API newer than the floor.
rust-msrv:
depends_on:
- "rust-workspace" # Cargo.lock / toolchain bumps can shift the floor
- "ci-infrastructure" # action.yml edits should re-run the check
paths:
- "core/sdk/**"
- "core/common/**"
- "core/binary_protocol/**"
- "core/cli/**"
tasks:
- "check-msrv"
# CI/CD infrastructure changes that require full regression
ci-infrastructure:
paths:
- ".github/**"
# Core library components that others depend on
rust-sdk:
depends_on:
- "rust-workspace" # SDK is affected by workspace changes
- "ci-infrastructure" # CI changes trigger full regression
paths:
- "core/sdk/**"
rust-configs:
depends_on:
- "rust-workspace"
paths:
- "core/configs/**"
- "core/configs_derive/**"
rust-common:
depends_on:
- "rust-workspace"
- "rust-configs"
paths:
- "core/common/**"
rust-binary-protocol:
depends_on:
- "rust-workspace" # Protocol is affected by workspace changes
- "ci-infrastructure" # CI changes trigger full regression
paths:
- "core/binary_protocol/**"
# Miri (UB detector) on unsafe-heavy crates that don't pull tokio/compio.
# Scoped to `iggy_binary_protocol` (heavy unsafe in `consensus/iobuf.rs`:
# ref-counted CoW buffer, manual atomics, pointer arithmetic) plus the
# `consensus` crate (zero unsafe but exercises binary_protocol's unsafe
# via integration). Other crates (journal, metadata, partitions, common)
# instantiate compio, which uses io_uring syscalls Miri cannot emulate.
# See the `# Alignment` doc on the `ConsensusHeader` trait for the
# alignment contract that motivates this check.
rust-miri:
depends_on:
- "rust-workspace"
- "ci-infrastructure"
paths:
- "core/binary_protocol/**"
- "core/consensus/**"
tasks:
- "miri"
rust-server:
depends_on:
- "rust-workspace"
- "rust-configs"
- "rust-common"
- "rust-binary-protocol"
- "rust-cluster"
paths:
- "core/server/**"
- "core/server-ng/**"
rust-cluster:
depends_on:
- "rust-workspace"
- "rust-binary-protocol" # cluster crates depend on binary_protocol
paths:
- "core/clock/**"
- "core/consensus/**"
- "core/journal/**"
- "core/shard/**"
- "core/metadata/**"
- "core/message_bus/**"
- "core/partitions/**"
# Standalone simulation tool, does NOT affect server binary or foreign SDKs.
# Split from rust-cluster to avoid triggering SDK tests on simulator-only changes.
rust-simulator:
depends_on:
- "rust-workspace"
- "rust-cluster"
paths:
- "core/simulator/**"
# Main Rust workspace testing
rust:
depends_on:
- "rust-workspace"
- "rust-configs"
- "rust-sdk"
- "rust-common"
- "rust-binary-protocol"
- "rust-server"
- "rust-cluster"
- "rust-simulator"
- "rust-tools"
- "rust-cli"
- "rust-bench"
- "rust-connectors"
- "rust-mcp"
- "rust-integration"
- "ci-infrastructure"
paths:
- "Dockerfile*"
- "!foreign/**" # Exclude foreign SDKs
- "!web/**" # Exclude web UI
tasks:
- "check"
- "fmt"
- "clippy"
- "sort"
- "doctest"
- "machete"
- "test-1"
- "test-2"
- "compat"
- "build-aarch64-gnu"
- "build-aarch64-musl"
- "build-macos-aarch64"
- "build-windows-sdk"
# CLI component
rust-cli:
depends_on:
- "rust-sdk"
- "rust-binary-protocol"
paths:
- "core/cli/**"
# Benchmark component
rust-bench:
depends_on:
- "rust-sdk"
paths:
- "core/bench/**"
# Connectors runtime
rust-connectors:
depends_on:
- "rust-sdk"
- "rust-configs"
paths:
- "core/connectors/**"
# MCP AI component
rust-mcp:
depends_on:
- "rust-sdk"
- "rust-configs"
paths:
- "core/ai/mcp/**"
# Integration tests
rust-integration:
depends_on:
- "rust-sdk"
- "rust-common"
- "rust-binary-protocol"
- "rust-server"
- "rust-configs"
paths:
- "core/integration/**"
- "core/harness_derive/**"
sdk-python:
depends_on:
- "rust-sdk" # Python SDK wraps the Rust SDK
- "rust-server" # For integration tests
- "ci-infrastructure" # CI changes trigger full regression
paths:
- "foreign/python/**"
tasks: ["lint", "test", "build"]
sdk-php:
depends_on:
- "rust-sdk" # PHP SDK wraps the Rust SDK
- "rust-server" # For integration tests
- "ci-infrastructure" # CI changes trigger full regression
paths:
- "foreign/php/**"
tasks: ["lint", "test", "build"]
sdk-node:
depends_on:
- "rust-sdk" # Node SDK depends on core SDK
- "rust-server" # For integration tests
- "ci-infrastructure" # CI changes trigger full regression
paths:
- "foreign/node/**"
tasks: ["lint", "test", "build", "e2e"]
sdk-go:
depends_on:
- "rust-sdk" # Go SDK depends on core SDK
- "rust-server" # For integration tests
- "ci-infrastructure" # CI changes trigger full regression
paths:
- "foreign/go/**"
- "bdd/go/**"
- "examples/go/**"
tasks: ["lint", "test", "build", "e2e"]
sdk-java:
depends_on:
- "rust-sdk" # Java SDK depends on core SDK
- "rust-server" # For integration tests
- "ci-infrastructure" # CI changes trigger full regression
paths:
- "foreign/java/**"
- "examples/java/**"
tasks: ["lint", "test", "build"]
sdk-csharp:
depends_on:
- "rust-sdk" # C# SDK depends on core SDK
- "rust-server" # For integration tests
- "ci-infrastructure" # CI changes trigger full regression
paths:
- "foreign/csharp/**"
- "examples/csharp/**"
tasks: ["lint", "test", "build", "e2e"]
sdk-cpp:
depends_on:
- "rust-sdk"
- "rust-server"
- "ci-infrastructure"
paths:
- "foreign/cpp/**"
tasks: ["lint", "build", "test", "e2e"]
# Shared BDD infrastructure that affects all BDD tests
bdd-infrastructure:
paths:
- "scripts/run-bdd-tests.sh"
- "bdd/docker-compose.yml"
- "bdd/docker-compose.server.yml"
- "bdd/docker-compose.cluster.yml"
- "bdd/docker-compose.coverage.yml"
# Individual BDD tests per SDK - only run when specific SDK changes
bdd-rust:
depends_on:
- "rust-sdk"
- "rust-server"
- "bdd-infrastructure"
- "ci-infrastructure"
paths:
- "bdd/rust/**"
- "bdd/scenarios/**"
tasks: ["bdd-rust"]
bdd-python:
depends_on:
- "rust-server"
- "rust-sdk"
- "sdk-python"
- "bdd-infrastructure"
- "ci-infrastructure"
paths:
- "bdd/python/**"
- "bdd/scenarios/**"
tasks: ["bdd-python"]
bdd-php:
depends_on:
- "rust-server"
- "rust-sdk"
- "sdk-php"
- "bdd-infrastructure"
- "ci-infrastructure"
paths:
- "bdd/php/**"
- "bdd/scenarios/basic_messaging.feature"
tasks: ["bdd-php"]
bdd-go:
depends_on:
- "rust-server"
- "rust-sdk"
- "sdk-go"
- "bdd-infrastructure"
- "ci-infrastructure"
paths:
- "bdd/go/**"
- "bdd/scenarios/**"
tasks: ["bdd-go", "bdd-go-race"]
bdd-node:
depends_on:
- "rust-server"
- "rust-sdk"
- "sdk-node"
- "bdd-infrastructure"
- "ci-infrastructure"
paths:
- "bdd/node/**"
- "bdd/scenarios/**"
tasks: ["bdd-node"]
bdd-csharp:
depends_on:
- "rust-server"
- "rust-sdk"
- "sdk-csharp"
- "bdd-infrastructure"
- "ci-infrastructure"
paths:
- "bdd/csharp/**"
- "bdd/scenarios/**"
tasks: ["bdd-csharp"]
bdd-java:
depends_on:
- "rust-server"
- "rust-sdk"
- "sdk-java"
- "bdd-infrastructure"
- "ci-infrastructure"
paths:
- "bdd/java/**"
- "bdd/scenarios/**"
tasks: ["bdd-java"]
bdd-cpp:
depends_on:
- "rust-server"
- "rust-sdk"
- "sdk-cpp"
- "bdd-infrastructure"
- "ci-infrastructure"
paths:
- "bdd/cpp/**"
- "bdd/scenarios/**"
tasks: ["bdd-cpp"]
examples-rust:
depends_on:
- "rust-sdk"
- "rust-server"
- "ci-infrastructure"
paths:
- "examples/rust/**"
- "scripts/run-examples-from-readme.sh"
- "scripts/utils.sh"
tasks: ["examples-rust"]
examples-go:
depends_on:
- "rust-server"
- "rust-sdk" # All SDKs depend on core SDK changes
- "sdk-go"
- "ci-infrastructure"
paths:
- "examples/go/**"
- "scripts/run-examples-from-readme.sh"
- "scripts/utils.sh"
tasks: ["examples-go"]
examples-csharp:
depends_on:
- "rust-server"
- "rust-sdk" # All SDKs depend on core SDK changes
- "sdk-csharp"
- "ci-infrastructure"
paths:
- "examples/csharp/**"
- "scripts/run-examples-from-readme.sh"
- "scripts/utils.sh"
tasks: ["examples-csharp"]
examples-python:
depends_on:
- "rust-server"
- "rust-sdk" # All SDKs depend on core SDK changes
- "sdk-python"
- "ci-infrastructure"
paths:
- "examples/python/**"
- "scripts/run-examples-from-readme.sh"
- "scripts/utils.sh"
tasks: ["examples-python"]
examples-php:
depends_on:
- "rust-server"
- "rust-sdk" # All SDKs depend on core SDK changes
- "sdk-php"
- "ci-infrastructure"
paths:
- "examples/php/**"
- "scripts/run-examples-from-readme.sh"
- "scripts/utils.sh"
tasks: ["examples-php"]
examples-node:
depends_on:
- "rust-server"
- "rust-sdk" # All SDKs depend on core SDK changes
- "sdk-node"
- "ci-infrastructure"
paths:
- "examples/node/**"
- "scripts/run-examples-from-readme.sh"
- "scripts/utils.sh"
tasks: ["examples-node"]
examples-java:
depends_on:
- "rust-server"
- "rust-sdk" # All SDKs depend on core SDK changes
- "sdk-java"
- "ci-infrastructure"
paths:
- "examples/java/**"
- "scripts/run-examples-from-readme.sh"
- "scripts/utils.sh"
tasks: ["examples-java"]
web-ui:
paths:
- "web/**"
tasks: ["lint", "build"]
helm:
paths:
- "helm/**"
- "scripts/ci/setup-helm-smoke-cluster.sh"
- "scripts/ci/test-helm.sh"
tasks: ["validate", "smoke"]
rust-bench-dashboard:
paths:
- "core/bench/dashboard/**"
- "scripts/dashboard/**"
tasks: ["build"]
# Core tools component
rust-tools:
depends_on:
- "rust-workspace"
paths:
- "core/tools/**"
# CI/CD workflow monitoring (informational, no tasks)
ci-workflows:
paths:
- ".github/workflows/**/*.yml"
- ".github/actions/**/*.yml"
- ".github/ci/**/*.yml"
tasks: ["validate"] # Could run workflow validation