This is an automated email from the ASF dual-hosted git repository.
hubcio pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iggy.git
The following commit(s) were added to refs/heads/master by this push:
new 0928f1373 chore(repo): drop DEPENDENCIES.md per ASF policy (#3222)
0928f1373 is described below
commit 0928f1373d61dab83e409baef68f4a32646adcff
Author: Hubert Gruszecki <[email protected]>
AuthorDate: Sat May 9 14:09:35 2026 +0200
chore(repo): drop DEPENDENCIES.md per ASF policy (#3222)
---
.dockerignore | 11 +-
.github/actions/utils/docker-buildx/action.yml | 7 +-
.../utils/validate-third-party-licenses/action.yml | 79 ++
.github/workflows/_build_python_wheels.yml | 25 +
.github/workflows/_common.yml | 29 +-
.github/workflows/publish.yml | 19 +-
.gitignore | 2 +
.pre-commit-config.yaml | 8 -
DEPENDENCIES.md | 1281 --------------------
NOTICE | 7 -
about.hbs | 23 +
about.toml | 91 ++
core/ai/mcp/Dockerfile | 16 +-
core/bench/dashboard/server/Dockerfile | 10 +
core/clock/Cargo.toml | 1 +
core/connectors/runtime/Dockerfile | 16 +-
core/server/Dockerfile | 40 +-
core/shard/Cargo.toml | 1 +
core/simulator/Cargo.toml | 1 +
foreign/csharp/DEPENDENCIES.md | 17 -
foreign/csharp/Iggy_SDK.sln | 1 -
foreign/csharp/Iggy_SDK/Iggy_SDK.csproj | 4 +-
foreign/csharp/NOTICE | 7 -
foreign/go/NOTICE | 7 -
foreign/java/NOTICE | 7 -
foreign/node/NOTICE | 7 -
foreign/node/package.json | 4 +-
foreign/python/NOTICE | 7 -
foreign/python/pyproject.toml | 9 +
justfile | 6 -
scripts/ci/licenses-list.sh | 100 --
scripts/ci/render-node-licenses.mjs | 225 ++++
scripts/ci/third-party-licenses.sh | 269 ++++
scripts/prepare-release.sh | 3 +-
web/.dockerignore | 3 +-
web/Dockerfile | 32 +-
web/LICENSE | 201 ---
web/NOTICE | 19 -
web/package-lock.json | 7 -
web/package.json | 1 -
40 files changed, 879 insertions(+), 1724 deletions(-)
diff --git a/.dockerignore b/.dockerignore
index 6cb739480..02100b387 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -11,7 +11,16 @@
/licenses
/local_data
/performance_results
-/scripts
+# Selectively exclude scripts/ subdirs not needed in container builds.
+# scripts/ci/third-party-licenses.sh + render-node-licenses.mjs are
+# required by the convenience-binary Dockerfiles to render LICENSE-binary
+# at build time.
+/scripts/dashboard
+/scripts/performance
+/scripts/*.sh
+/scripts/ci/*
+!/scripts/ci/third-party-licenses.sh
+!/scripts/ci/render-node-licenses.mjs
**/target
/target
!/target/debug/iggy
diff --git a/.github/actions/utils/docker-buildx/action.yml
b/.github/actions/utils/docker-buildx/action.yml
index f5c066817..b76b5c8ec 100644
--- a/.github/actions/utils/docker-buildx/action.yml
+++ b/.github/actions/utils/docker-buildx/action.yml
@@ -331,12 +331,7 @@ runs:
id: ctx
shell: bash
run: |
- # For web-ui, the context should be the web directory
- if [ "${{ inputs.component }}" = "web-ui" ]; then
- context="web"
- else
- context="${{ inputs.context }}"
- fi
+ context="${{ inputs.context }}"
echo "context=$context" >> "$GITHUB_OUTPUT"
echo "📁 Build context: $context"
diff --git a/.github/actions/utils/validate-third-party-licenses/action.yml
b/.github/actions/utils/validate-third-party-licenses/action.yml
new file mode 100644
index 000000000..711bbf2fb
--- /dev/null
+++ b/.github/actions/utils/validate-third-party-licenses/action.yml
@@ -0,0 +1,79 @@
+# 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.
+
+# Run the per-artifact third-party license validation matrix that ASF
+# release policy requires for convenience binaries (Docker images, PyPI
+# wheels). Single source of truth shared by the pre-merge gate
+# (.github/workflows/_common.yml) and the release gate
+# (.github/workflows/publish.yml). Adding a new convenience artifact
+# means adding ONE step here, never two.
+
+name: validate-third-party-licenses
+description: Validate every published artifact's bundled third-party licenses
against the ASF accept list.
+inputs:
+ node-version:
+ description: "Node.js version used by the npm path"
+ required: false
+ default: "23"
+
+runs:
+ using: composite
+ steps:
+ - name: Setup Node.js
+ uses: actions/setup-node@v6
+ with:
+ node-version: ${{ inputs.node-version }}
+
+ - name: Setup Rust with cache
+ uses: ./.github/actions/utils/setup-rust-with-cache
+ with:
+ read-cache: "false"
+
+ - name: Install cargo-about
+ shell: bash
+ run: |
+ TARGET="$(uname -m)-unknown-linux-musl"
+ curl -sSfL
"https://github.com/EmbarkStudios/cargo-about/releases/download/0.9.0/cargo-about-0.9.0-${TARGET}.tar.gz"
\
+ | tar -xz -C "$HOME/.cargo/bin" --strip-components=1 \
+ "cargo-about-0.9.0-${TARGET}/cargo-about"
+
+ - name: Validate apache/iggy bundle (server + CLI + embedded web)
+ shell: bash
+ run: ./scripts/ci/third-party-licenses.sh --validate
+ --manifest core/server/Cargo.toml
+ --manifest core/cli/Cargo.toml
+ --manifest web
+
+ - name: Validate iggy-mcp bundle
+ shell: bash
+ run: ./scripts/ci/third-party-licenses.sh --validate --manifest
core/ai/mcp/Cargo.toml
+
+ - name: Validate iggy-bench-dashboard bundle
+ shell: bash
+ run: ./scripts/ci/third-party-licenses.sh --validate --manifest
core/bench/dashboard/server/Cargo.toml
+
+ - name: Validate iggy-connect bundle
+ shell: bash
+ run: ./scripts/ci/third-party-licenses.sh --validate --manifest
core/connectors/runtime/Cargo.toml
+
+ - name: Validate Python wheel bundle
+ shell: bash
+ run: ./scripts/ci/third-party-licenses.sh --validate --manifest
foreign/python/Cargo.toml
+
+ - name: Validate web UI bundle
+ shell: bash
+ run: ./scripts/ci/third-party-licenses.sh --validate --manifest web
diff --git a/.github/workflows/_build_python_wheels.yml
b/.github/workflows/_build_python_wheels.yml
index ce83f497c..ca698c26e 100644
--- a/.github/workflows/_build_python_wheels.yml
+++ b/.github/workflows/_build_python_wheels.yml
@@ -87,6 +87,13 @@ jobs:
- name: Setup Rust with cache
uses: ./.github/actions/utils/setup-rust-with-cache
+ - name: Generate third-party license manifest
+ run: |
+ TARGET="$(uname -m)-unknown-linux-musl"
+ curl -sSfL
"https://github.com/EmbarkStudios/cargo-about/releases/download/0.9.0/cargo-about-0.9.0-${TARGET}.tar.gz"
\
+ | tar -xz -C "$HOME/.cargo/bin" --strip-components=1
"cargo-about-0.9.0-${TARGET}/cargo-about"
+ ./scripts/ci/third-party-licenses.sh --generate --manifest
foreign/python/Cargo.toml --output foreign/python/LICENSE-binary
+
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
@@ -139,6 +146,24 @@ jobs:
with:
python-version: "3.11"
+ - name: Setup Rust with cache
+ uses: ./.github/actions/utils/setup-rust-with-cache
+
+ - name: Generate third-party license manifest
+ run: |
+ # Embark Studios releases an aarch64-apple-darwin tarball but
+ # NOT x86_64-apple-darwin (404 as of 0.9.0). Intel macOS
+ # falls back to compiling cargo-about from source.
+ ARCH="$(uname -m | sed 's/arm64/aarch64/')"
+ if [ "$ARCH" = "aarch64" ]; then
+ TARGET="aarch64-apple-darwin"
+ curl -sSfL
"https://github.com/EmbarkStudios/cargo-about/releases/download/0.9.0/cargo-about-0.9.0-${TARGET}.tar.gz"
\
+ | tar -xz -C "$HOME/.cargo/bin" --strip-components=1
"cargo-about-0.9.0-${TARGET}/cargo-about"
+ else
+ cargo install cargo-about --locked --version 0.9.0 --features cli
+ fi
+ ./scripts/ci/third-party-licenses.sh --generate --manifest
foreign/python/Cargo.toml --output foreign/python/LICENSE-binary
+
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
diff --git a/.github/workflows/_common.yml b/.github/workflows/_common.yml
index 4654a01cc..4c9181646 100644
--- a/.github/workflows/_common.yml
+++ b/.github/workflows/_common.yml
@@ -154,21 +154,12 @@ jobs:
- name: Check Apache license headers
run: ./scripts/ci/license-headers.sh --check
- license-list:
- name: Check licenses list
+ third-party-licenses:
+ name: Validate third-party licenses
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
-
- - name: Setup Rust toolchain
- uses: ./.github/actions/utils/setup-rust-with-cache
- with:
- read-cache: "false"
-
- - name: Install cargo-license
- run: cargo install cargo-license
-
- - run: ./scripts/ci/licenses-list.sh --check
+ - uses: ./.github/actions/utils/validate-third-party-licenses
markdown:
name: Markdown lint
@@ -280,7 +271,7 @@ jobs:
version-consistency,
pr-title,
license-headers,
- license-list,
+ third-party-licenses,
markdown,
shellcheck,
trailing-whitespace,
@@ -320,7 +311,7 @@ jobs:
PYTHON_VERSIONS="${{ needs.python-versions.result }}"
VERSION_CONSISTENCY="${{ needs.version-consistency.result }}"
LICENSE_HEADERS="${{ needs.license-headers.result }}"
- LICENSE_LIST="${{ needs.license-list.result }}"
+ THIRD_PARTY_LICENSES="${{ needs.third-party-licenses.result }}"
MARKDOWN="${{ needs.markdown.result }}"
if [ "$RUST_VERSIONS" = "success" ]; then
@@ -355,12 +346,12 @@ jobs:
echo "| ⏭️ License Headers | $LICENSE_HEADERS | Check skipped |"
>> $GITHUB_STEP_SUMMARY
fi
- if [ "$LICENSE_LIST" = "success" ]; then
- echo "| ✅ License List | success | Dependencies licenses validated
|" >> $GITHUB_STEP_SUMMARY
- elif [ "$LICENSE_LIST" = "failure" ]; then
- echo "| ❌ License List | failure | License list needs update |" >>
$GITHUB_STEP_SUMMARY
+ if [ "$THIRD_PARTY_LICENSES" = "success" ]; then
+ echo "| ✅ Third-Party Licenses | success | All deps in about.toml
accept list |" >> $GITHUB_STEP_SUMMARY
+ elif [ "$THIRD_PARTY_LICENSES" = "failure" ]; then
+ echo "| ❌ Third-Party Licenses | failure | Disallowed license
detected (see job log) |" >> $GITHUB_STEP_SUMMARY
else
- echo "| ⏭️ License List | $LICENSE_LIST | Check skipped |" >>
$GITHUB_STEP_SUMMARY
+ echo "| ⏭️ Third-Party Licenses | $THIRD_PARTY_LICENSES | Check
skipped |" >> $GITHUB_STEP_SUMMARY
fi
if [ "$MARKDOWN" = "success" ]; then
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index a4b2fd014..c8a29a088 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -235,9 +235,25 @@ jobs:
echo "Commit details:"
git log -1 --pretty=format:" Author: %an <%ae>%n Date: %ad%n
Subject: %s" "$COMMIT"
+ validate-licenses:
+ name: Validate third-party licenses (release gate)
+ needs: validate
+ runs-on: ubuntu-latest
+ # Re-runs the same per-artifact validation that pre-merge enforces,
+ # against the resolved release commit. Tags can point at commits
+ # older than the pre-merge gate, or be created via direct push that
+ # bypassed PR review, so a release-time gate is required to keep the
+ # policy contract intact. Composite action is shared with
+ # .github/workflows/_common.yml.
+ steps:
+ - uses: actions/checkout@v6
+ with:
+ ref: ${{ needs.validate.outputs.commit }}
+ - uses: ./.github/actions/utils/validate-third-party-licenses
+
plan:
name: Build publish plan
- needs: validate
+ needs: [validate, validate-licenses]
if: needs.validate.outputs.has_targets == 'true'
runs-on: ubuntu-latest
outputs:
@@ -1294,6 +1310,7 @@ jobs:
needs:
[
validate,
+ validate-licenses,
plan,
check-tags,
build-python-wheels,
diff --git a/.gitignore b/.gitignore
index 7c8d4d1dd..f0d8b6250 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,3 +40,5 @@ foreign/node/.npm
*.out
go.work
core/bench/dashboard/frontend/dist
+LICENSE-binary
+**/LICENSE-binary
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 907f52332..8e7909a54 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -63,14 +63,6 @@ repos:
language: system
pass_filenames: false
- - id: licenses-list
- name: licenses list
- entry: ./scripts/ci/licenses-list.sh
- args: ["--fix"]
- language: system
- files: ^Cargo\.lock$
- pass_filenames: false
-
- id: rust-version-sync
name: rust version sync
entry: ./scripts/ci/sync-rust-version.sh
diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md
deleted file mode 100644
index e3120c36e..000000000
--- a/DEPENDENCIES.md
+++ /dev/null
@@ -1,1281 +0,0 @@
-# Dependencies
-
-actix-codec: 0.5.2, "Apache-2.0 OR MIT",
-actix-cors: 0.7.1, "Apache-2.0 OR MIT",
-actix-files: 0.6.10, "Apache-2.0 OR MIT",
-actix-http: 3.12.1, "Apache-2.0 OR MIT",
-actix-macros: 0.2.4, "Apache-2.0 OR MIT",
-actix-router: 0.5.4, "Apache-2.0 OR MIT",
-actix-rt: 2.11.0, "Apache-2.0 OR MIT",
-actix-server: 2.6.0, "Apache-2.0 OR MIT",
-actix-service: 2.0.3, "Apache-2.0 OR MIT",
-actix-utils: 3.0.1, "Apache-2.0 OR MIT",
-actix-web: 4.13.0, "Apache-2.0 OR MIT",
-actix-web-codegen: 4.3.0, "Apache-2.0 OR MIT",
-adler2: 2.0.1, "0BSD OR Apache-2.0 OR MIT",
-aead: 0.5.2, "Apache-2.0 OR MIT",
-aes: 0.8.4, "Apache-2.0 OR MIT",
-aes-gcm: 0.10.3, "Apache-2.0 OR MIT",
-ahash: 0.7.8, "Apache-2.0 OR MIT",
-ahash: 0.8.12, "Apache-2.0 OR MIT",
-aho-corasick: 1.1.4, "MIT OR Unlicense",
-aligned: 0.4.3, "Apache-2.0 OR MIT",
-aligned-vec: 0.6.4, "MIT",
-alloc-no-stdlib: 2.0.4, "BSD-3-Clause",
-alloc-stdlib: 0.2.2, "BSD-3-Clause",
-allocator-api2: 0.2.21, "Apache-2.0 OR MIT",
-android_system_properties: 0.1.5, "Apache-2.0 OR MIT",
-anstream: 1.0.0, "Apache-2.0 OR MIT",
-anstyle: 1.0.14, "Apache-2.0 OR MIT",
-anstyle-parse: 1.0.0, "Apache-2.0 OR MIT",
-anstyle-query: 1.1.5, "Apache-2.0 OR MIT",
-anstyle-wincon: 3.0.11, "Apache-2.0 OR MIT",
-anyhow: 1.0.102, "Apache-2.0 OR MIT",
-apache-avro: 0.21.0, "Apache-2.0",
-ar_archive_writer: 0.5.1, "Apache-2.0 WITH LLVM-exception",
-arbitrary: 1.4.2, "Apache-2.0 OR MIT",
-arc-swap: 1.9.1, "Apache-2.0 OR MIT",
-arg_enum_proc_macro: 0.3.4, "MIT",
-argon2: 0.5.3, "Apache-2.0 OR MIT",
-array-init: 2.1.0, "Apache-2.0 OR MIT",
-arrayref: 0.3.9, "BSD-2-Clause",
-arrayvec: 0.7.6, "Apache-2.0 OR MIT",
-arrow: 58.2.0, "Apache-2.0",
-arrow-arith: 57.3.0, "Apache-2.0",
-arrow-arith: 58.2.0, "Apache-2.0",
-arrow-array: 57.3.0, "Apache-2.0",
-arrow-array: 58.2.0, "Apache-2.0 AND MIT",
-arrow-buffer: 57.3.0, "Apache-2.0",
-arrow-buffer: 58.2.0, "Apache-2.0",
-arrow-cast: 57.3.0, "Apache-2.0",
-arrow-cast: 58.2.0, "Apache-2.0",
-arrow-csv: 58.2.0, "Apache-2.0",
-arrow-data: 57.3.0, "Apache-2.0",
-arrow-data: 58.2.0, "Apache-2.0",
-arrow-ipc: 57.3.0, "Apache-2.0",
-arrow-ipc: 58.2.0, "Apache-2.0",
-arrow-json: 57.3.0, "Apache-2.0",
-arrow-json: 58.2.0, "Apache-2.0",
-arrow-ord: 57.3.0, "Apache-2.0",
-arrow-ord: 58.2.0, "Apache-2.0",
-arrow-row: 58.2.0, "Apache-2.0",
-arrow-schema: 57.3.0, "Apache-2.0",
-arrow-schema: 58.2.0, "Apache-2.0",
-arrow-select: 57.3.0, "Apache-2.0",
-arrow-select: 58.2.0, "Apache-2.0",
-arrow-string: 57.3.0, "Apache-2.0",
-arrow-string: 58.2.0, "Apache-2.0",
-as-any: 0.3.2, "Apache-2.0 OR MIT",
-as-slice: 0.2.1, "Apache-2.0 OR MIT",
-asn1-rs: 0.7.1, "Apache-2.0 OR MIT",
-asn1-rs-derive: 0.6.0, "Apache-2.0 OR MIT",
-asn1-rs-impl: 0.2.0, "Apache-2.0 OR MIT",
-assert-json-diff: 2.0.2, "MIT",
-assert_cmd: 2.2.1, "Apache-2.0 OR MIT",
-astral-tokio-tar: 0.6.1, "Apache-2.0 OR MIT",
-async-broadcast: 0.7.2, "Apache-2.0 OR MIT",
-async-channel: 2.5.0, "Apache-2.0 OR MIT",
-async-compression: 0.4.42, "Apache-2.0 OR MIT",
-async-dropper: 0.3.1, "MIT",
-async-dropper-derive: 0.3.1, "MIT",
-async-dropper-simple: 0.2.6, "MIT",
-async-lock: 3.4.2, "Apache-2.0 OR MIT",
-async-scoped: 0.9.0, "Apache-2.0 OR MIT",
-async-stream: 0.3.6, "MIT",
-async-stream-impl: 0.3.6, "MIT",
-async-task: 4.7.1, "Apache-2.0 OR MIT",
-async-trait: 0.1.89, "Apache-2.0 OR MIT",
-async_zip: 0.0.18, "MIT",
-atoi: 2.0.0, "MIT",
-atomic: 0.6.1, "Apache-2.0 OR MIT",
-atomic-polyfill: 1.0.3, "Apache-2.0 OR MIT",
-atomic-waker: 1.1.2, "Apache-2.0 OR MIT",
-autocfg: 1.5.0, "Apache-2.0 OR MIT",
-autotools: 0.2.7, "MIT",
-av-scenechange: 0.14.1, "MIT",
-av1-grain: 0.2.5, "BSD-2-Clause",
-avif-serialize: 0.8.9, "BSD-3-Clause",
-aws-config: 1.8.16, "Apache-2.0",
-aws-credential-types: 1.2.14, "Apache-2.0",
-aws-lc-rs: 1.16.3, "(Apache-2.0 OR ISC) AND ISC",
-aws-lc-sys: 0.40.0, "(Apache-2.0 OR ISC OR MIT) AND (Apache-2.0 OR ISC OR
MIT-0) AND (Apache-2.0 OR ISC) AND Apache-2.0 AND BSD-3-Clause AND ISC AND MIT",
-aws-runtime: 1.7.3, "Apache-2.0",
-aws-sdk-dynamodb: 1.111.0, "Apache-2.0",
-aws-sdk-sso: 1.98.0, "Apache-2.0",
-aws-sdk-ssooidc: 1.100.0, "Apache-2.0",
-aws-sdk-sts: 1.103.0, "Apache-2.0",
-aws-sigv4: 1.4.3, "Apache-2.0",
-aws-smithy-async: 1.2.14, "Apache-2.0",
-aws-smithy-http: 0.63.6, "Apache-2.0",
-aws-smithy-http-client: 1.1.12, "Apache-2.0",
-aws-smithy-json: 0.62.5, "Apache-2.0",
-aws-smithy-observability: 0.2.6, "Apache-2.0",
-aws-smithy-query: 0.60.15, "Apache-2.0",
-aws-smithy-runtime: 1.11.1, "Apache-2.0",
-aws-smithy-runtime-api: 1.12.0, "Apache-2.0",
-aws-smithy-runtime-api-macros: 1.0.0, "Apache-2.0",
-aws-smithy-types: 1.4.7, "Apache-2.0",
-aws-smithy-xml: 0.60.15, "Apache-2.0",
-aws-types: 1.3.15, "Apache-2.0",
-axum: 0.8.9, "MIT",
-axum-core: 0.5.6, "MIT",
-axum-macros: 0.5.1, "MIT",
-axum-server: 0.8.0, "MIT",
-az: 1.3.0, "Apache-2.0 OR MIT",
-backon: 1.6.0, "Apache-2.0",
-base16ct: 0.2.0, "Apache-2.0 OR MIT",
-base64: 0.22.1, "Apache-2.0 OR MIT",
-base64-simd: 0.8.0, "MIT",
-base64ct: 1.8.3, "Apache-2.0 OR MIT",
-bdd: 0.0.1, "Apache-2.0",
-beef: 0.5.2, "Apache-2.0 OR MIT",
-bench-dashboard-frontend: 0.7.0, "Apache-2.0",
-bench-dashboard-shared: 0.1.0, "Apache-2.0",
-bench-report: 0.3.0, "Apache-2.0",
-bench-runner: 0.1.0, "Apache-2.0",
-bigdecimal: 0.4.10, "Apache-2.0 OR MIT",
-bimap: 0.6.3, "Apache-2.0 OR MIT",
-bincode: 1.3.3, "MIT",
-bindgen: 0.71.1, "BSD-3-Clause",
-bit-set: 0.8.0, "Apache-2.0 OR MIT",
-bit-set: 0.10.0, "Apache-2.0 OR MIT",
-bit-vec: 0.8.0, "Apache-2.0 OR MIT",
-bit-vec: 0.9.1, "Apache-2.0 OR MIT",
-bit_field: 0.10.3, "Apache-2.0 OR MIT",
-bitflags: 1.3.2, "Apache-2.0 OR MIT",
-bitflags: 2.11.1, "Apache-2.0 OR MIT",
-bitstream-io: 4.10.0, "Apache-2.0 OR MIT",
-bitvec: 1.0.1, "MIT",
-blake2: 0.10.6, "Apache-2.0 OR MIT",
-blake3: 1.8.5, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR CC0-1.0",
-block-buffer: 0.10.4, "Apache-2.0 OR MIT",
-block-buffer: 0.12.0, "Apache-2.0 OR MIT",
-block2: 0.6.2, "MIT",
-bnum: 0.12.1, "Apache-2.0 OR MIT",
-bollard: 0.20.2, "Apache-2.0",
-bollard-buildkit-proto: 0.7.0, "Apache-2.0",
-bollard-stubs: 1.52.1-rc.29.1.3, "Apache-2.0",
-bon: 3.9.1, "Apache-2.0 OR MIT",
-bon-macros: 3.9.1, "Apache-2.0 OR MIT",
-borsh: 1.6.1, "Apache-2.0 OR MIT",
-borsh-derive: 1.6.1, "Apache-2.0",
-brotli: 8.0.2, "BSD-3-Clause AND MIT",
-brotli-decompressor: 5.0.0, "BSD-3-Clause OR MIT",
-bson: 2.15.0, "MIT",
-bstr: 1.12.1, "Apache-2.0 OR MIT",
-built: 0.8.0, "MIT",
-bumpalo: 3.20.2, "Apache-2.0 OR MIT",
-buoyant_kernel: 0.21.103, "Apache-2.0",
-buoyant_kernel_derive: 1.0.0, "Apache-2.0",
-byte-unit: 5.2.0, "MIT",
-bytecheck: 0.6.12, "MIT",
-bytecheck_derive: 0.6.12, "MIT",
-bytecount: 0.6.9, "Apache-2.0 OR MIT",
-bytemuck: 1.25.0, "Apache-2.0 OR MIT OR Zlib",
-bytemuck_derive: 1.10.2, "Apache-2.0 OR MIT OR Zlib",
-byteorder: 1.5.0, "MIT OR Unlicense",
-byteorder-lite: 0.1.0, "MIT OR Unlicense",
-bytes: 1.11.1, "MIT",
-bytes-utils: 0.1.4, "Apache-2.0 OR MIT",
-bytestring: 1.5.1, "Apache-2.0 OR MIT",
-bzip2: 0.6.1, "Apache-2.0 OR MIT",
-camino: 1.2.2, "Apache-2.0 OR MIT",
-capacity_builder: 0.5.0, "MIT",
-capacity_builder_macros: 0.3.0, "MIT",
-cargo-platform: 0.3.3, "Apache-2.0 OR MIT",
-cargo_metadata: 0.23.1, "MIT",
-cc: 1.2.62, "Apache-2.0 OR MIT",
-cesu8: 1.1.0, "Apache-2.0 OR MIT",
-cexpr: 0.6.0, "Apache-2.0 OR MIT",
-cfg-if: 1.0.4, "Apache-2.0 OR MIT",
-cfg_aliases: 0.2.1, "MIT",
-chacha20: 0.10.0, "Apache-2.0 OR MIT",
-charming: 0.6.0, "Apache-2.0 OR MIT",
-charming_macros: 0.1.0, "Apache-2.0 OR MIT",
-chrono: 0.4.44, "Apache-2.0 OR MIT",
-chrono-tz: 0.10.4, "Apache-2.0 OR MIT",
-cipher: 0.4.4, "Apache-2.0 OR MIT",
-clang-sys: 1.8.1, "Apache-2.0",
-clap: 4.6.1, "Apache-2.0 OR MIT",
-clap_builder: 4.6.0, "Apache-2.0 OR MIT",
-clap_complete: 4.6.3, "Apache-2.0 OR MIT",
-clap_derive: 4.6.1, "Apache-2.0 OR MIT",
-clap_lex: 1.1.0, "Apache-2.0 OR MIT",
-clock: 0.1.0, "N/A",
-cmake: 0.1.58, "Apache-2.0 OR MIT",
-cmov: 0.5.3, "Apache-2.0 OR MIT",
-cobs: 0.3.0, "Apache-2.0 OR MIT",
-color_quant: 1.1.0, "MIT",
-colorchoice: 1.0.5, "Apache-2.0 OR MIT",
-colored: 3.1.1, "MPL-2.0",
-combine: 4.6.7, "MIT",
-comfy-table: 7.2.2, "MIT",
-compio: 0.18.0, "MIT",
-compio-buf: 0.8.1, "MIT",
-compio-driver: 0.11.4, "MIT",
-compio-fs: 0.11.0, "MIT",
-compio-io: 0.9.1, "MIT",
-compio-log: 0.1.0, "MIT",
-compio-macros: 0.1.2, "MIT",
-compio-net: 0.11.1, "MIT",
-compio-quic: 0.7.2, "MIT",
-compio-runtime: 0.11.0, "MIT",
-compio-tls: 0.9.1, "MIT",
-compio-ws: 0.3.1, "MIT",
-compression-codecs: 0.4.38, "Apache-2.0 OR MIT",
-compression-core: 0.4.32, "Apache-2.0 OR MIT",
-concurrent-queue: 2.5.0, "Apache-2.0 OR MIT",
-configs: 0.1.0, "Apache-2.0",
-configs_derive: 0.1.0, "Apache-2.0",
-consensus: 0.1.0, "Apache-2.0",
-console: 0.16.3, "MIT",
-console_error_panic_hook: 0.1.7, "Apache-2.0 OR MIT",
-const-oid: 0.9.6, "Apache-2.0 OR MIT",
-const-oid: 0.10.2, "Apache-2.0 OR MIT",
-const-random: 0.1.18, "Apache-2.0 OR MIT",
-const-random-macro: 0.1.16, "Apache-2.0 OR MIT",
-constant_time_eq: 0.4.2, "Apache-2.0 OR CC0-1.0 OR MIT-0",
-convert_case: 0.6.0, "MIT",
-convert_case: 0.9.0, "MIT",
-convert_case: 0.10.0, "MIT",
-cooked-waker: 5.0.0, "MPL-2.0",
-cookie: 0.16.2, "Apache-2.0 OR MIT",
-core-foundation: 0.9.4, "Apache-2.0 OR MIT",
-core-foundation: 0.10.1, "Apache-2.0 OR MIT",
-core-foundation-sys: 0.8.7, "Apache-2.0 OR MIT",
-core_affinity: 0.8.3, "Apache-2.0 OR MIT",
-core_maths: 0.1.1, "MIT",
-cpufeatures: 0.2.17, "Apache-2.0 OR MIT",
-cpufeatures: 0.3.0, "Apache-2.0 OR MIT",
-crc: 3.4.0, "Apache-2.0 OR MIT",
-crc-catalog: 2.5.0, "Apache-2.0 OR MIT",
-crc32c: 0.6.8, "Apache-2.0 OR MIT",
-crc32fast: 1.5.0, "Apache-2.0 OR MIT",
-critical-section: 1.2.0, "Apache-2.0 OR MIT",
-crossbeam: 0.8.4, "Apache-2.0 OR MIT",
-crossbeam-channel: 0.5.15, "Apache-2.0 OR MIT",
-crossbeam-deque: 0.8.6, "Apache-2.0 OR MIT",
-crossbeam-epoch: 0.9.18, "Apache-2.0 OR MIT",
-crossbeam-queue: 0.3.12, "Apache-2.0 OR MIT",
-crossbeam-utils: 0.8.21, "Apache-2.0 OR MIT",
-crossfire: 3.1.10, "Apache-2.0",
-crunchy: 0.2.4, "MIT",
-crypto-bigint: 0.5.5, "Apache-2.0 OR MIT",
-crypto-common: 0.1.7, "Apache-2.0 OR MIT",
-crypto-common: 0.2.1, "Apache-2.0 OR MIT",
-csv: 1.4.0, "MIT OR Unlicense",
-csv-core: 0.1.13, "MIT OR Unlicense",
-ctor: 0.10.1, "Apache-2.0 OR MIT",
-ctor: 1.0.4, "Apache-2.0 OR MIT",
-ctor-proc-macro: 0.0.13, "Apache-2.0 OR MIT",
-ctr: 0.9.2, "Apache-2.0 OR MIT",
-ctrlc: 3.5.2, "Apache-2.0 OR MIT",
-ctutils: 0.4.2, "Apache-2.0 OR MIT",
-cucumber: 0.23.0, "Apache-2.0 OR MIT",
-cucumber-codegen: 0.23.0, "Apache-2.0 OR MIT",
-cucumber-expressions: 0.5.0, "Apache-2.0 OR MIT",
-curve25519-dalek: 4.1.3, "BSD-3-Clause",
-curve25519-dalek-derive: 0.1.1, "Apache-2.0 OR MIT",
-cyper: 0.8.3, "MIT",
-cyper-axum: 0.8.0, "MIT",
-cyper-core: 0.8.0, "MIT",
-darling: 0.20.11, "MIT",
-darling: 0.21.3, "MIT",
-darling: 0.23.0, "MIT",
-darling_core: 0.20.11, "MIT",
-darling_core: 0.21.3, "MIT",
-darling_core: 0.23.0, "MIT",
-darling_macro: 0.20.11, "MIT",
-darling_macro: 0.21.3, "MIT",
-darling_macro: 0.23.0, "MIT",
-dashmap: 6.1.0, "MIT",
-data-encoding: 2.11.0, "MIT",
-data-url: 0.3.2, "Apache-2.0 OR MIT",
-dbus: 0.9.11, "Apache-2.0 OR MIT",
-dbus-secret-service: 4.1.0, "Apache-2.0 OR MIT",
-deadpool: 0.12.3, "Apache-2.0 OR MIT",
-deadpool-runtime: 0.1.4, "Apache-2.0 OR MIT",
-debugid: 0.8.0, "Apache-2.0",
-deltalake: 0.32.1, "Apache-2.0",
-deltalake-aws: 0.15.0, "Apache-2.0",
-deltalake-azure: 0.15.0, "Apache-2.0",
-deltalake-core: 0.32.1, "Apache-2.0",
-deltalake-derive: 1.0.0, "Apache-2.0",
-deltalake-gcp: 0.16.0, "Apache-2.0",
-deno_core: 0.351.0, "MIT",
-deno_core_icudata: 0.74.0, "MIT",
-deno_error: 0.6.1, "MIT",
-deno_error_macro: 0.6.1, "MIT",
-deno_ops: 0.227.0, "MIT",
-deno_path_util: 0.4.0, "MIT",
-deno_unsync: 0.4.4, "MIT",
-der: 0.7.10, "Apache-2.0 OR MIT",
-der-parser: 10.0.0, "Apache-2.0 OR MIT",
-deranged: 0.5.8, "Apache-2.0 OR MIT",
-derive-new: 0.7.0, "MIT",
-derive-syn-parse: 0.2.0, "Apache-2.0 OR MIT",
-derive-where: 1.6.1, "Apache-2.0 OR MIT",
-derive_builder: 0.20.2, "Apache-2.0 OR MIT",
-derive_builder_core: 0.20.2, "Apache-2.0 OR MIT",
-derive_builder_macro: 0.20.2, "Apache-2.0 OR MIT",
-derive_more: 2.1.1, "MIT",
-derive_more-impl: 2.1.1, "MIT",
-difflib: 0.4.0, "MIT",
-digest: 0.10.7, "Apache-2.0 OR MIT",
-digest: 0.11.3, "Apache-2.0 OR MIT",
-dircpy: 0.3.20, "MIT",
-dirs: 6.0.0, "Apache-2.0 OR MIT",
-dirs-sys: 0.5.0, "Apache-2.0 OR MIT",
-dispatch2: 0.3.1, "Apache-2.0 OR MIT OR Zlib",
-displaydoc: 0.2.5, "Apache-2.0 OR MIT",
-dissimilar: 1.0.11, "Apache-2.0",
-dlopen2: 0.8.2, "MIT",
-dlopen2_derive: 0.4.3, "MIT",
-dlv-list: 0.5.2, "Apache-2.0 OR MIT",
-docker_credential: 1.3.3, "Apache-2.0 OR MIT",
-dotenvy: 0.15.7, "MIT",
-downcast: 0.11.0, "MIT",
-dtoa: 1.0.11, "Apache-2.0 OR MIT",
-dtor: 0.8.1, "Apache-2.0 OR MIT",
-dtor: 1.0.2, "Apache-2.0 OR MIT",
-dtor-proc-macro: 0.0.13, "Apache-2.0 OR MIT",
-dunce: 1.0.5, "Apache-2.0 OR CC0-1.0 OR MIT-0",
-dyn-clone: 1.0.20, "Apache-2.0 OR MIT",
-ecdsa: 0.16.9, "Apache-2.0 OR MIT",
-ed25519: 2.2.3, "Apache-2.0 OR MIT",
-ed25519-dalek: 2.2.0, "BSD-3-Clause",
-either: 1.15.0, "Apache-2.0 OR MIT",
-elasticsearch: 9.1.0-alpha.1, "Apache-2.0",
-elliptic-curve: 0.13.8, "Apache-2.0 OR MIT",
-embedded-io: 0.4.0, "Apache-2.0 OR MIT",
-embedded-io: 0.6.1, "Apache-2.0 OR MIT",
-encode_unicode: 1.0.0, "Apache-2.0 OR MIT",
-encoding_rs: 0.8.35, "(Apache-2.0 OR MIT) AND BSD-3-Clause",
-enum-as-inner: 0.6.1, "Apache-2.0 OR MIT",
-enumset: 1.1.12, "Apache-2.0 OR MIT",
-enumset_derive: 0.15.0, "Apache-2.0 OR MIT",
-equator: 0.4.2, "MIT",
-equator-macro: 0.4.2, "MIT",
-equivalent: 1.0.2, "Apache-2.0 OR MIT",
-erased-serde: 0.4.10, "Apache-2.0 OR MIT",
-err_trail: 0.11.0, "Apache-2.0",
-errno: 0.3.14, "Apache-2.0 OR MIT",
-error_set: 0.9.1, "Apache-2.0",
-error_set_impl: 0.9.1, "Apache-2.0",
-etcetera: 0.8.0, "Apache-2.0 OR MIT",
-etcetera: 0.11.0, "Apache-2.0 OR MIT",
-euclid: 0.22.14, "Apache-2.0 OR MIT",
-event-listener: 5.4.1, "Apache-2.0 OR MIT",
-event-listener-strategy: 0.5.4, "Apache-2.0 OR MIT",
-expect-test: 1.5.1, "Apache-2.0 OR MIT",
-exr: 1.74.0, "BSD-3-Clause",
-ext-trait: 1.0.1, "Apache-2.0 OR MIT OR Zlib",
-ext-trait-proc_macros: 1.0.1, "Apache-2.0 OR MIT OR Zlib",
-extension-traits: 1.0.1, "Apache-2.0 OR MIT OR Zlib",
-fastbloom: 0.14.1, "Apache-2.0 OR MIT",
-fastnum: 0.7.4, "Apache-2.0 OR MIT",
-fastrand: 2.4.1, "Apache-2.0 OR MIT",
-fax: 0.2.7, "MIT",
-fdeflate: 0.3.7, "Apache-2.0 OR MIT",
-ferroid: 2.0.0, "Apache-2.0 OR MIT",
-ff: 0.13.1, "Apache-2.0 OR MIT",
-fiat-crypto: 0.2.9, "Apache-2.0 OR BSD-1-Clause OR MIT",
-figlet-rs: 1.0.0, "Apache-2.0",
-figment: 0.10.19, "Apache-2.0 OR MIT",
-file-operation: 0.8.19, "MIT",
-filetime: 0.2.28, "Apache-2.0 OR MIT",
-find-msvc-tools: 0.1.9, "Apache-2.0 OR MIT",
-flatbuffers: 25.12.19, "Apache-2.0",
-flate2: 1.1.9, "Apache-2.0 OR MIT",
-float-cmp: 0.9.0, "MIT",
-float-cmp: 0.10.0, "MIT",
-flume: 0.11.1, "Apache-2.0 OR MIT",
-flume: 0.12.0, "Apache-2.0 OR MIT",
-fnv: 1.0.7, "Apache-2.0 OR MIT",
-foldhash: 0.1.5, "Zlib",
-foldhash: 0.2.0, "Zlib",
-fontconfig-parser: 0.5.8, "MIT",
-fontdb: 0.23.0, "MIT",
-foreign-types: 0.3.2, "Apache-2.0 OR MIT",
-foreign-types-shared: 0.1.1, "Apache-2.0 OR MIT",
-form_urlencoded: 1.2.2, "Apache-2.0 OR MIT",
-fragile: 2.1.0, "Apache-2.0",
-fs-err: 3.3.0, "Apache-2.0 OR MIT",
-fs2: 0.4.3, "Apache-2.0 OR MIT",
-fs_extra: 1.3.0, "MIT",
-fsevent-sys: 4.1.0, "MIT",
-fslock: 0.2.1, "MIT",
-funty: 2.0.0, "MIT",
-futures: 0.3.32, "Apache-2.0 OR MIT",
-futures-channel: 0.3.32, "Apache-2.0 OR MIT",
-futures-core: 0.3.32, "Apache-2.0 OR MIT",
-futures-executor: 0.3.32, "Apache-2.0 OR MIT",
-futures-intrusive: 0.5.0, "Apache-2.0 OR MIT",
-futures-io: 0.3.32, "Apache-2.0 OR MIT",
-futures-lite: 2.6.1, "Apache-2.0 OR MIT",
-futures-macro: 0.3.32, "Apache-2.0 OR MIT",
-futures-rustls: 0.26.0, "Apache-2.0 OR MIT",
-futures-sink: 0.3.32, "Apache-2.0 OR MIT",
-futures-task: 0.3.32, "Apache-2.0 OR MIT",
-futures-timer: 3.0.3, "Apache-2.0 OR MIT",
-futures-util: 0.3.32, "Apache-2.0 OR MIT",
-generator: 0.8.8, "Apache-2.0 OR MIT",
-generic-array: 0.14.7, "MIT",
-getrandom: 0.2.17, "Apache-2.0 OR MIT",
-getrandom: 0.3.4, "Apache-2.0 OR MIT",
-getrandom: 0.4.2, "Apache-2.0 OR MIT",
-ghash: 0.5.1, "Apache-2.0 OR MIT",
-gherkin: 0.16.0, "Apache-2.0 OR MIT",
-gif: 0.13.3, "Apache-2.0 OR MIT",
-gif: 0.14.2, "Apache-2.0 OR MIT",
-git2: 0.20.4, "Apache-2.0 OR MIT",
-glob: 0.3.3, "Apache-2.0 OR MIT",
-globset: 0.4.18, "MIT OR Unlicense",
-globwalk: 0.9.1, "MIT",
-gloo: 0.11.0, "Apache-2.0 OR MIT",
-gloo: 0.12.0, "Apache-2.0 OR MIT",
-gloo-console: 0.3.0, "Apache-2.0 OR MIT",
-gloo-console: 0.4.0, "Apache-2.0 OR MIT",
-gloo-dialogs: 0.2.0, "Apache-2.0 OR MIT",
-gloo-dialogs: 0.3.0, "Apache-2.0 OR MIT",
-gloo-events: 0.2.0, "Apache-2.0 OR MIT",
-gloo-events: 0.3.0, "Apache-2.0 OR MIT",
-gloo-file: 0.3.0, "Apache-2.0 OR MIT",
-gloo-file: 0.4.0, "Apache-2.0 OR MIT",
-gloo-history: 0.2.2, "Apache-2.0 OR MIT",
-gloo-history: 0.3.0, "Apache-2.0 OR MIT",
-gloo-net: 0.5.0, "Apache-2.0 OR MIT",
-gloo-net: 0.7.0, "Apache-2.0 OR MIT",
-gloo-render: 0.2.0, "Apache-2.0 OR MIT",
-gloo-render: 0.3.0, "Apache-2.0 OR MIT",
-gloo-storage: 0.3.0, "Apache-2.0 OR MIT",
-gloo-storage: 0.4.0, "Apache-2.0 OR MIT",
-gloo-timers: 0.3.0, "Apache-2.0 OR MIT",
-gloo-timers: 0.4.0, "Apache-2.0 OR MIT",
-gloo-utils: 0.2.0, "Apache-2.0 OR MIT",
-gloo-utils: 0.3.0, "Apache-2.0 OR MIT",
-gloo-worker: 0.5.0, "Apache-2.0 OR MIT",
-gloo-worker: 0.6.0, "Apache-2.0 OR MIT",
-gloo-worker-macros: 0.1.0, "Apache-2.0 OR MIT",
-gloo-worker-macros: 0.2.0, "Apache-2.0 OR MIT",
-governor: 0.10.4, "MIT",
-group: 0.13.0, "Apache-2.0 OR MIT",
-gzip-header: 1.1.0, "Apache-2.0 OR MIT",
-h2: 0.3.27, "MIT",
-h2: 0.4.14, "MIT",
-half: 2.7.1, "Apache-2.0 OR MIT",
-halfbrown: 0.4.0, "Apache-2.0 OR MIT",
-handlebars: 6.4.0, "MIT",
-harness_derive: 0.1.0, "Apache-2.0",
-hash32: 0.2.1, "Apache-2.0 OR MIT",
-hash32: 1.0.0, "Apache-2.0 OR MIT",
-hashbrown: 0.12.3, "Apache-2.0 OR MIT",
-hashbrown: 0.14.5, "Apache-2.0 OR MIT",
-hashbrown: 0.15.5, "Apache-2.0 OR MIT",
-hashbrown: 0.16.1, "Apache-2.0 OR MIT",
-hashbrown: 0.17.0, "Apache-2.0 OR MIT",
-hashlink: 0.10.0, "Apache-2.0 OR MIT",
-heapless: 0.7.17, "Apache-2.0 OR MIT",
-heck: 0.5.0, "Apache-2.0 OR MIT",
-hermit-abi: 0.5.2, "Apache-2.0 OR MIT",
-hex: 0.4.3, "Apache-2.0 OR MIT",
-hickory-proto: 0.25.2, "Apache-2.0 OR MIT",
-hickory-resolver: 0.25.2, "Apache-2.0 OR MIT",
-hkdf: 0.12.4, "Apache-2.0 OR MIT",
-hmac: 0.12.1, "Apache-2.0 OR MIT",
-hmac: 0.13.0, "Apache-2.0 OR MIT",
-home: 0.5.12, "Apache-2.0 OR MIT",
-hostname: 0.4.2, "MIT",
-http: 0.2.12, "Apache-2.0 OR MIT",
-http: 1.4.0, "Apache-2.0 OR MIT",
-http-body: 0.4.6, "MIT",
-http-body: 1.0.1, "MIT",
-http-body-util: 0.1.3, "MIT",
-http-range: 0.1.5, "MIT",
-httparse: 1.10.1, "Apache-2.0 OR MIT",
-httpdate: 1.0.3, "Apache-2.0 OR MIT",
-human-repr: 1.1.0, "MIT",
-humantime: 2.3.0, "Apache-2.0 OR MIT",
-hwlocality: 1.0.0-alpha.12, "MIT",
-hwlocality-sys: 0.7.0, "MIT",
-hybrid-array: 0.4.11, "Apache-2.0 OR MIT",
-hyper: 1.9.0, "MIT",
-hyper-named-pipe: 0.1.0, "Apache-2.0",
-hyper-rustls: 0.27.9, "Apache-2.0 OR ISC OR MIT",
-hyper-timeout: 0.5.2, "Apache-2.0 OR MIT",
-hyper-util: 0.1.20, "MIT",
-hyperlocal: 0.9.1, "MIT",
-iana-time-zone: 0.1.65, "Apache-2.0 OR MIT",
-iana-time-zone-haiku: 0.1.2, "Apache-2.0 OR MIT",
-iceberg: 0.9.1, "Apache-2.0",
-iceberg-catalog-rest: 0.9.1, "Apache-2.0",
-iceberg-storage-opendal: 0.9.1, "Apache-2.0",
-icu_collections: 2.2.0, "Unicode-3.0",
-icu_locale_core: 2.2.0, "Unicode-3.0",
-icu_normalizer: 2.2.0, "Unicode-3.0",
-icu_normalizer_data: 2.2.0, "Unicode-3.0",
-icu_properties: 2.2.0, "Unicode-3.0",
-icu_properties_data: 2.2.0, "Unicode-3.0",
-icu_provider: 2.2.0, "Unicode-3.0",
-id-arena: 2.3.0, "Apache-2.0 OR MIT",
-ident_case: 1.0.1, "Apache-2.0 OR MIT",
-idna: 1.1.0, "Apache-2.0 OR MIT",
-idna_adapter: 1.2.2, "Apache-2.0 OR MIT",
-if_chain: 1.0.3, "Apache-2.0 OR MIT",
-iggy: 0.10.0, "Apache-2.0",
-iggy-bench: 0.5.0, "Apache-2.0",
-iggy-bench-dashboard-server: 0.7.0, "Apache-2.0",
-iggy-cli: 0.13.0, "Apache-2.0",
-iggy-connectors: 0.4.0, "Apache-2.0",
-iggy-mcp: 0.4.0, "Apache-2.0",
-iggy_binary_protocol: 0.10.0, "Apache-2.0",
-iggy_common: 0.10.0, "Apache-2.0",
-iggy_connector_delta_sink: 0.1.0, "Apache-2.0",
-iggy_connector_elasticsearch_sink: 0.4.0, "Apache-2.0",
-iggy_connector_elasticsearch_source: 0.4.0, "Apache-2.0",
-iggy_connector_http_sink: 0.4.0, "Apache-2.0",
-iggy_connector_iceberg_sink: 0.4.0, "Apache-2.0",
-iggy_connector_influxdb_sink: 0.4.0, "Apache-2.0",
-iggy_connector_influxdb_source: 0.4.0, "Apache-2.0",
-iggy_connector_mongodb_sink: 0.4.0, "Apache-2.0",
-iggy_connector_postgres_sink: 0.4.0, "Apache-2.0",
-iggy_connector_postgres_source: 0.4.0, "Apache-2.0",
-iggy_connector_quickwit_sink: 0.4.0, "Apache-2.0",
-iggy_connector_random_source: 0.4.0, "Apache-2.0",
-iggy_connector_sdk: 0.3.0, "Apache-2.0",
-iggy_connector_stdout_sink: 0.4.0, "Apache-2.0",
-iggy_examples: 0.0.6, "Apache-2.0",
-ignore: 0.4.25, "MIT OR Unlicense",
-image: 0.25.10, "Apache-2.0 OR MIT",
-image-webp: 0.2.4, "Apache-2.0 OR MIT",
-imagesize: 0.13.0, "MIT",
-imgref: 1.12.1, "Apache-2.0 OR CC0-1.0",
-impl-more: 0.1.9, "Apache-2.0 OR MIT",
-implicit-clone: 0.6.0, "Apache-2.0 OR MIT",
-implicit-clone-derive: 0.1.2, "Apache-2.0 OR MIT",
-indexmap: 1.9.3, "Apache-2.0 OR MIT",
-indexmap: 2.14.0, "Apache-2.0 OR MIT",
-inflections: 1.1.1, "MIT",
-inlinable_string: 0.1.15, "Apache-2.0 OR MIT",
-inotify: 0.11.1, "ISC",
-inotify-sys: 0.1.5, "ISC",
-inout: 0.1.4, "Apache-2.0 OR MIT",
-integer-encoding: 3.0.4, "MIT",
-integration: 0.0.1, "Apache-2.0",
-interpolate_name: 0.2.4, "MIT",
-inventory: 0.3.24, "Apache-2.0 OR MIT",
-io-uring: 0.7.12, "Apache-2.0 OR MIT",
-io_uring_buf_ring: 0.2.3, "MIT",
-ipconfig: 0.3.4, "Apache-2.0 OR MIT",
-ipnet: 2.12.0, "Apache-2.0 OR MIT",
-is_terminal_polyfill: 1.70.2, "Apache-2.0 OR MIT",
-itertools: 0.13.0, "Apache-2.0 OR MIT",
-itertools: 0.14.0, "Apache-2.0 OR MIT",
-itoa: 1.0.18, "Apache-2.0 OR MIT",
-jiff: 0.2.24, "MIT OR Unlicense",
-jiff-static: 0.2.24, "MIT OR Unlicense",
-jiff-tzdb: 0.1.6, "MIT OR Unlicense",
-jiff-tzdb-platform: 0.1.3, "MIT OR Unlicense",
-jni: 0.21.1, "Apache-2.0 OR MIT",
-jni: 0.22.4, "Apache-2.0 OR MIT",
-jni-macros: 0.22.4, "Apache-2.0 OR MIT",
-jni-sys: 0.3.1, "Apache-2.0 OR MIT",
-jni-sys: 0.4.1, "Apache-2.0 OR MIT",
-jni-sys-macros: 0.4.1, "Apache-2.0 OR MIT",
-jobserver: 0.1.34, "Apache-2.0 OR MIT",
-journal: 0.1.0, "Apache-2.0",
-js-sys: 0.3.98, "Apache-2.0 OR MIT",
-jsonwebtoken: 10.3.0, "MIT",
-jwalk: 0.8.1, "MIT",
-keccak: 0.2.0, "Apache-2.0 OR MIT",
-keyring: 3.6.3, "Apache-2.0 OR MIT",
-kqueue: 1.1.1, "MIT",
-kqueue-sys: 1.1.0, "MIT",
-kurbo: 0.11.3, "Apache-2.0 OR MIT",
-language-tags: 0.3.2, "Apache-2.0 OR MIT",
-lazy_static: 1.5.0, "Apache-2.0 OR MIT",
-leb128fmt: 0.1.0, "Apache-2.0 OR MIT",
-lebe: 0.5.3, "BSD-3-Clause",
-left-right: 0.11.7, "Apache-2.0 OR MIT",
-lending-iterator: 0.1.7, "Apache-2.0 OR MIT OR Zlib",
-lending-iterator-proc_macros: 0.1.7, "Apache-2.0 OR MIT OR Zlib",
-lexical-core: 1.0.6, "Apache-2.0 OR MIT",
-lexical-parse-float: 1.0.6, "Apache-2.0 OR MIT",
-lexical-parse-integer: 1.0.6, "Apache-2.0 OR MIT",
-lexical-util: 1.0.7, "Apache-2.0 OR MIT",
-lexical-write-float: 1.0.6, "Apache-2.0 OR MIT",
-lexical-write-integer: 1.0.6, "Apache-2.0 OR MIT",
-libbz2-rs-sys: 0.2.3, "bzip2-1.0.6",
-libc: 0.2.186, "Apache-2.0 OR MIT",
-libdbus-sys: 0.2.7, "Apache-2.0 OR MIT",
-libfuzzer-sys: 0.4.12, "(Apache-2.0 OR MIT) AND NCSA",
-libgit2-sys: 0.18.4+1.9.3, "Apache-2.0 OR MIT",
-libloading: 0.8.9, "ISC",
-liblzma: 0.4.6, "Apache-2.0 OR MIT",
-liblzma-sys: 0.4.6, "Apache-2.0 OR MIT",
-libm: 0.2.16, "MIT",
-libmimalloc-sys: 0.1.47, "MIT",
-libredox: 0.1.16, "MIT",
-libsqlite3-sys: 0.30.1, "MIT",
-libz-sys: 1.1.28, "Apache-2.0 OR MIT",
-link-section: 0.2.1, "Apache-2.0 OR MIT",
-link-section: 0.16.0, "Apache-2.0 OR MIT",
-linked-hash-map: 0.5.6, "Apache-2.0 OR MIT",
-linktime-proc-macro: 0.1.0, "Apache-2.0 OR MIT",
-linux-raw-sys: 0.4.15, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-linux-raw-sys: 0.12.1, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-litemap: 0.8.2, "Unicode-3.0",
-local-channel: 0.1.5, "Apache-2.0 OR MIT",
-local-waker: 0.1.4, "Apache-2.0 OR MIT",
-lock_api: 0.4.14, "Apache-2.0 OR MIT",
-log: 0.4.29, "Apache-2.0 OR MIT",
-logos: 0.15.1, "Apache-2.0 OR MIT",
-logos-codegen: 0.15.1, "Apache-2.0 OR MIT",
-logos-derive: 0.15.1, "Apache-2.0 OR MIT",
-loom: 0.7.2, "MIT",
-loop9: 0.1.5, "MIT",
-lru-slab: 0.1.2, "Apache-2.0 OR MIT OR Zlib",
-lz4_flex: 0.12.1, "MIT",
-lz4_flex: 0.13.0, "MIT",
-macro_magic: 0.5.1, "MIT",
-macro_magic_core: 0.5.1, "MIT",
-macro_magic_core_macros: 0.5.1, "MIT",
-macro_magic_macros: 0.5.1, "MIT",
-macro_rules_attribute: 0.1.3, "MIT",
-macro_rules_attribute-proc_macro: 0.1.3, "MIT",
-matchers: 0.2.0, "MIT",
-matchit: 0.8.4, "BSD-3-Clause AND MIT",
-maybe-rayon: 0.1.1, "MIT",
-md-5: 0.10.6, "Apache-2.0 OR MIT",
-memchr: 2.8.0, "MIT OR Unlicense",
-memmap2: 0.9.10, "Apache-2.0 OR MIT",
-message_bus: 0.1.0, "Apache-2.0",
-metadata: 0.1.0, "Apache-2.0",
-miette: 7.6.0, "Apache-2.0",
-miette-derive: 7.6.0, "Apache-2.0",
-mimalloc: 0.1.50, "MIT",
-mime: 0.3.17, "Apache-2.0 OR MIT",
-mime_guess: 2.0.5, "MIT",
-minimal-lexical: 0.2.1, "Apache-2.0 OR MIT",
-miniz_oxide: 0.8.9, "Apache-2.0 OR MIT OR Zlib",
-mio: 1.2.0, "MIT",
-mockall: 0.14.0, "Apache-2.0 OR MIT",
-mockall_derive: 0.14.0, "Apache-2.0 OR MIT",
-moka: 0.12.15, "(Apache-2.0 OR MIT) AND Apache-2.0",
-mongocrypt: 0.3.2, "Apache-2.0",
-mongocrypt-sys: 0.1.5+1.15.1, "Apache-2.0",
-mongodb: 3.6.0, "Apache-2.0",
-mongodb-internal-macros: 3.6.0, "Apache-2.0",
-moxcms: 0.8.1, "Apache-2.0 OR BSD-3-Clause",
-murmur3: 0.5.2, "Apache-2.0 OR MIT",
-never-say-never: 6.6.666, "Apache-2.0 OR MIT OR Zlib",
-new_debug_unreachable: 1.0.6, "MIT",
-nix: 0.31.2, "MIT",
-no_std_io2: 0.9.4, "Apache-2.0 OR MIT",
-nom: 7.1.3, "MIT",
-nom: 8.0.0, "MIT",
-nom_locate: 5.0.0, "MIT",
-nonzero_ext: 0.3.0, "Apache-2.0",
-nonzero_lit: 0.1.2, "Apache-2.0 OR CC0-1.0 OR MIT",
-noop_proc_macro: 0.3.0, "MIT",
-normalize-line-endings: 0.3.0, "Apache-2.0",
-notify: 8.2.0, "CC0-1.0",
-notify-types: 2.1.0, "Apache-2.0 OR MIT",
-nougat: 0.2.4, "Apache-2.0 OR MIT OR Zlib",
-nougat-proc_macros: 0.2.4, "Apache-2.0 OR MIT OR Zlib",
-ntapi: 0.4.3, "Apache-2.0 OR MIT",
-nu-ansi-term: 0.50.3, "MIT",
-num: 0.4.3, "Apache-2.0 OR MIT",
-num-bigint: 0.4.6, "Apache-2.0 OR MIT",
-num-bigint-dig: 0.8.6, "Apache-2.0 OR MIT",
-num-complex: 0.4.6, "Apache-2.0 OR MIT",
-num-conv: 0.2.1, "Apache-2.0 OR MIT",
-num-derive: 0.4.2, "Apache-2.0 OR MIT",
-num-integer: 0.1.46, "Apache-2.0 OR MIT",
-num-iter: 0.1.45, "Apache-2.0 OR MIT",
-num-modular: 0.6.1, "Apache-2.0",
-num-order: 1.2.0, "Apache-2.0",
-num-rational: 0.4.2, "Apache-2.0 OR MIT",
-num-traits: 0.2.19, "Apache-2.0 OR MIT",
-num_cpus: 1.17.0, "Apache-2.0 OR MIT",
-num_threads: 0.1.7, "Apache-2.0 OR MIT",
-objc2: 0.6.4, "MIT",
-objc2-core-foundation: 0.3.2, "Apache-2.0 OR MIT OR Zlib",
-objc2-encode: 4.1.0, "MIT",
-objc2-foundation: 0.3.2, "MIT",
-objc2-io-kit: 0.3.2, "Apache-2.0 OR MIT OR Zlib",
-objc2-open-directory: 0.3.2, "Apache-2.0 OR MIT OR Zlib",
-object: 0.37.3, "Apache-2.0 OR MIT",
-object_store: 0.13.2, "Apache-2.0 OR MIT",
-octocrab: 0.50.0, "Apache-2.0 OR MIT",
-oid-registry: 0.8.1, "Apache-2.0 OR MIT",
-once_cell: 1.21.4, "Apache-2.0 OR MIT",
-once_cell_polyfill: 1.70.2, "Apache-2.0 OR MIT",
-opaque-debug: 0.3.1, "Apache-2.0 OR MIT",
-opendal: 0.55.0, "Apache-2.0",
-openssl: 0.10.79, "Apache-2.0",
-openssl-macros: 0.1.1, "Apache-2.0 OR MIT",
-openssl-probe: 0.2.1, "Apache-2.0 OR MIT",
-openssl-src: 300.6.0+3.6.2, "Apache-2.0 OR MIT",
-openssl-sys: 0.9.115, "MIT",
-opentelemetry: 0.31.0, "Apache-2.0",
-opentelemetry-appender-tracing: 0.31.1, "Apache-2.0",
-opentelemetry-http: 0.31.0, "Apache-2.0",
-opentelemetry-otlp: 0.31.1, "Apache-2.0",
-opentelemetry-proto: 0.31.0, "Apache-2.0",
-opentelemetry-semantic-conventions: 0.31.0, "Apache-2.0",
-opentelemetry_sdk: 0.31.0, "Apache-2.0",
-option-ext: 0.2.0, "MPL-2.0",
-ordered-float: 2.10.1, "MIT",
-ordered-float: 4.6.0, "MIT",
-ordered-multimap: 0.7.3, "MIT",
-os_pipe: 1.2.3, "MIT",
-outref: 0.5.2, "MIT",
-p256: 0.13.2, "Apache-2.0 OR MIT",
-p384: 0.13.1, "Apache-2.0 OR MIT",
-papaya: 0.2.4, "MIT",
-parking: 2.2.1, "Apache-2.0 OR MIT",
-parking_lot: 0.12.5, "Apache-2.0 OR MIT",
-parking_lot_core: 0.9.12, "Apache-2.0 OR MIT",
-parquet: 57.3.0, "Apache-2.0",
-parquet: 58.2.0, "Apache-2.0",
-parse-display: 0.9.1, "Apache-2.0 OR MIT",
-parse-display-derive: 0.9.1, "Apache-2.0 OR MIT",
-partitions: 0.1.0, "Apache-2.0",
-passterm: 2.0.6, "BSD-3-Clause",
-password-hash: 0.5.0, "Apache-2.0 OR MIT",
-paste: 1.0.15, "Apache-2.0 OR MIT",
-pastey: 0.1.1, "Apache-2.0 OR MIT",
-pastey: 0.2.2, "Apache-2.0 OR MIT",
-pbkdf2: 0.12.2, "Apache-2.0 OR MIT",
-pear: 0.2.9, "Apache-2.0 OR MIT",
-pear_codegen: 0.2.9, "Apache-2.0 OR MIT",
-peg: 0.6.3, "MIT",
-peg-macros: 0.6.3, "MIT",
-peg-runtime: 0.6.3, "MIT",
-pem: 3.0.6, "MIT",
-pem-rfc7468: 0.7.0, "Apache-2.0 OR MIT",
-percent-encoding: 2.3.2, "Apache-2.0 OR MIT",
-percent-encoding-rfc3986: 0.1.3, "Apache-2.0 OR MIT",
-pest: 2.8.6, "Apache-2.0 OR MIT",
-pest_derive: 2.8.6, "Apache-2.0 OR MIT",
-pest_generator: 2.8.6, "Apache-2.0 OR MIT",
-pest_meta: 2.8.6, "Apache-2.0 OR MIT",
-phf: 0.12.1, "MIT",
-phf_shared: 0.12.1, "MIT",
-pico-args: 0.5.0, "MIT",
-pin-project: 1.1.12, "Apache-2.0 OR MIT",
-pin-project-internal: 1.1.12, "Apache-2.0 OR MIT",
-pin-project-lite: 0.2.17, "Apache-2.0 OR MIT",
-pin-utils: 0.1.0, "Apache-2.0 OR MIT",
-pinned: 0.1.0, "Apache-2.0 OR MIT",
-pkcs1: 0.7.5, "Apache-2.0 OR MIT",
-pkcs8: 0.10.2, "Apache-2.0 OR MIT",
-pkg-config: 0.3.33, "Apache-2.0 OR MIT",
-plain: 0.2.3, "Apache-2.0 OR MIT",
-png: 0.17.16, "Apache-2.0 OR MIT",
-png: 0.18.1, "Apache-2.0 OR MIT",
-polling: 3.11.0, "Apache-2.0 OR MIT",
-polonius-the-crab: 0.2.1, "Apache-2.0 OR MIT OR Zlib",
-polyval: 0.6.2, "Apache-2.0 OR MIT",
-portable-atomic: 1.13.1, "Apache-2.0 OR MIT",
-portable-atomic-util: 0.2.7, "Apache-2.0 OR MIT",
-postcard: 1.1.3, "Apache-2.0 OR MIT",
-potential_utf: 0.1.5, "Unicode-3.0",
-powerfmt: 0.2.0, "Apache-2.0 OR MIT",
-ppv-lite86: 0.2.21, "Apache-2.0 OR MIT",
-predicates: 3.1.4, "Apache-2.0 OR MIT",
-predicates-core: 1.0.10, "Apache-2.0 OR MIT",
-predicates-tree: 1.0.13, "Apache-2.0 OR MIT",
-prettyplease: 0.2.37, "Apache-2.0 OR MIT",
-primeorder: 0.13.6, "Apache-2.0 OR MIT",
-proc-macro-crate: 1.3.1, "Apache-2.0 OR MIT",
-proc-macro-crate: 3.3.0, "Apache-2.0 OR MIT",
-proc-macro-error: 1.0.4, "Apache-2.0 OR MIT",
-proc-macro-error-attr: 1.0.4, "Apache-2.0 OR MIT",
-proc-macro-error-attr2: 2.0.0, "Apache-2.0 OR MIT",
-proc-macro-error2: 2.0.1, "Apache-2.0 OR MIT",
-proc-macro-rules: 0.4.0, "Apache-2.0 OR MIT",
-proc-macro-rules-macros: 0.4.0, "Apache-2.0 OR MIT",
-proc-macro2: 1.0.106, "Apache-2.0 OR MIT",
-proc-macro2-diagnostics: 0.10.1, "Apache-2.0 OR MIT",
-profiling: 1.0.18, "Apache-2.0 OR MIT",
-profiling-procmacros: 1.0.18, "Apache-2.0 OR MIT",
-prometheus-client: 0.24.1, "Apache-2.0 OR MIT",
-prometheus-client-derive-encode: 0.5.0, "Apache-2.0 OR MIT",
-prost: 0.14.3, "Apache-2.0",
-prost-derive: 0.14.3, "Apache-2.0",
-prost-reflect: 0.16.3, "Apache-2.0 OR MIT",
-prost-types: 0.14.3, "Apache-2.0",
-protox: 0.9.1, "Apache-2.0 OR MIT",
-protox-parse: 0.9.0, "Apache-2.0 OR MIT",
-psm: 0.1.31, "Apache-2.0 OR MIT",
-ptr_meta: 0.1.4, "MIT",
-ptr_meta_derive: 0.1.4, "MIT",
-pxfm: 0.1.29, "Apache-2.0 OR BSD-3-Clause",
-qoi: 0.4.1, "Apache-2.0 OR MIT",
-quad-rand: 0.2.3, "MIT",
-quanta: 0.12.6, "MIT",
-quick-error: 2.0.1, "Apache-2.0 OR MIT",
-quick-xml: 0.37.5, "MIT",
-quick-xml: 0.38.4, "MIT",
-quick-xml: 0.39.4, "MIT",
-quinn: 0.11.9, "Apache-2.0 OR MIT",
-quinn-proto: 0.11.14, "Apache-2.0 OR MIT",
-quinn-udp: 0.5.14, "Apache-2.0 OR MIT",
-quote: 1.0.45, "Apache-2.0 OR MIT",
-r-efi: 5.3.0, "Apache-2.0 OR LGPL-2.1-or-later OR MIT",
-r-efi: 6.0.0, "Apache-2.0 OR LGPL-2.1-or-later OR MIT",
-radium: 0.7.0, "MIT",
-rand: 0.8.6, "Apache-2.0 OR MIT",
-rand: 0.9.4, "Apache-2.0 OR MIT",
-rand: 0.10.1, "Apache-2.0 OR MIT",
-rand_chacha: 0.3.1, "Apache-2.0 OR MIT",
-rand_chacha: 0.9.0, "Apache-2.0 OR MIT",
-rand_core: 0.6.4, "Apache-2.0 OR MIT",
-rand_core: 0.9.5, "Apache-2.0 OR MIT",
-rand_core: 0.10.1, "Apache-2.0 OR MIT",
-rand_xoshiro: 0.8.0, "Apache-2.0 OR MIT",
-rav1e: 0.8.1, "BSD-2-Clause",
-ravif: 0.13.0, "BSD-3-Clause",
-raw-cpuid: 11.6.0, "MIT",
-rayon: 1.12.0, "Apache-2.0 OR MIT",
-rayon-core: 1.13.0, "Apache-2.0 OR MIT",
-rcgen: 0.14.7, "Apache-2.0 OR MIT",
-recursive: 0.1.1, "MIT",
-recursive-proc-macro-impl: 0.1.1, "MIT",
-redox_syscall: 0.5.18, "MIT",
-redox_syscall: 0.7.5, "MIT",
-redox_users: 0.5.2, "MIT",
-ref-cast: 1.0.25, "Apache-2.0 OR MIT",
-ref-cast-impl: 1.0.25, "Apache-2.0 OR MIT",
-regex: 1.12.3, "Apache-2.0 OR MIT",
-regex-automata: 0.4.14, "Apache-2.0 OR MIT",
-regex-lite: 0.1.9, "Apache-2.0 OR MIT",
-regex-syntax: 0.8.10, "Apache-2.0 OR MIT",
-rend: 0.4.2, "MIT",
-reqsign: 0.16.5, "Apache-2.0",
-reqwest: 0.12.28, "Apache-2.0 OR MIT",
-reqwest: 0.13.3, "Apache-2.0 OR MIT",
-reqwest-middleware: 0.5.1, "Apache-2.0 OR MIT",
-reqwest-retry: 0.9.1, "Apache-2.0 OR MIT",
-reqwest-tracing: 0.7.0, "Apache-2.0 OR MIT",
-resolv-conf: 0.7.6, "Apache-2.0 OR MIT",
-resvg: 0.45.1, "Apache-2.0 OR MIT",
-retry-policies: 0.5.1, "Apache-2.0 OR MIT",
-rfc6979: 0.4.0, "Apache-2.0 OR MIT",
-rgb: 0.8.53, "MIT",
-ring: 0.17.14, "Apache-2.0 AND ISC",
-ringbuffer: 0.16.0, "MIT",
-rkyv: 0.7.46, "MIT",
-rkyv_derive: 0.7.46, "MIT",
-rmcp: 1.6.0, "Apache-2.0",
-rmcp-macros: 1.6.0, "Apache-2.0",
-rmp: 0.8.15, "MIT",
-rmp-serde: 1.3.1, "MIT",
-roaring: 0.11.4, "Apache-2.0 OR MIT",
-rolling-file: 0.2.0, "Apache-2.0 OR MIT",
-route-recognizer: 0.3.1, "MIT",
-roxmltree: 0.20.0, "Apache-2.0 OR MIT",
-rsa: 0.9.10, "Apache-2.0 OR MIT",
-rust-embed: 8.11.0, "MIT",
-rust-embed-impl: 8.11.0, "MIT",
-rust-embed-utils: 8.11.0, "MIT",
-rust-ini: 0.21.3, "MIT",
-rust_decimal: 1.42.0, "MIT",
-rustc-hash: 2.1.2, "Apache-2.0 OR MIT",
-rustc_version: 0.4.1, "Apache-2.0 OR MIT",
-rustc_version_runtime: 0.3.0, "MIT",
-rusticata-macros: 4.1.0, "Apache-2.0 OR MIT",
-rustix: 0.38.44, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-rustix: 1.1.4, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-rustls: 0.23.40, "Apache-2.0 OR ISC OR MIT",
-rustls-native-certs: 0.8.3, "Apache-2.0 OR ISC OR MIT",
-rustls-pemfile: 2.2.0, "Apache-2.0 OR ISC OR MIT",
-rustls-pki-types: 1.14.1, "Apache-2.0 OR MIT",
-rustls-platform-verifier: 0.6.2, "Apache-2.0 OR MIT",
-rustls-platform-verifier: 0.7.0, "Apache-2.0 OR MIT",
-rustls-platform-verifier-android: 0.1.1, "Apache-2.0 OR MIT",
-rustls-webpki: 0.103.13, "ISC",
-rustversion: 1.0.22, "Apache-2.0 OR MIT",
-rustybuzz: 0.20.1, "MIT",
-ryu: 1.0.23, "Apache-2.0 OR BSL-1.0",
-same-file: 1.0.6, "MIT OR Unlicense",
-scc: 2.4.0, "Apache-2.0",
-schannel: 0.1.29, "MIT",
-schemars: 0.9.0, "MIT",
-schemars: 1.2.1, "MIT",
-schemars_derive: 1.2.1, "MIT",
-scoped-tls: 1.0.1, "Apache-2.0 OR MIT",
-scopeguard: 1.2.0, "Apache-2.0 OR MIT",
-sdd: 3.0.10, "Apache-2.0",
-seahash: 4.1.0, "MIT",
-sealed: 0.6.0, "Apache-2.0 OR MIT",
-sec1: 0.7.3, "Apache-2.0 OR MIT",
-secrecy: 0.10.3, "Apache-2.0 OR MIT",
-security-framework: 3.7.0, "Apache-2.0 OR MIT",
-security-framework-sys: 2.17.0, "Apache-2.0 OR MIT",
-seize: 0.5.1, "MIT",
-semver: 1.0.28, "Apache-2.0 OR MIT",
-send_wrapper: 0.6.0, "Apache-2.0 OR MIT",
-seq-macro: 0.3.6, "Apache-2.0 OR MIT",
-serde: 1.0.228, "Apache-2.0 OR MIT",
-serde-big-array: 0.5.1, "Apache-2.0 OR MIT",
-serde-wasm-bindgen: 0.6.5, "MIT",
-serde_bytes: 0.11.19, "Apache-2.0 OR MIT",
-serde_core: 1.0.228, "Apache-2.0 OR MIT",
-serde_derive: 1.0.228, "Apache-2.0 OR MIT",
-serde_derive_internals: 0.29.1, "Apache-2.0 OR MIT",
-serde_json: 1.0.149, "Apache-2.0 OR MIT",
-serde_path_to_error: 0.1.20, "Apache-2.0 OR MIT",
-serde_repr: 0.1.20, "Apache-2.0 OR MIT",
-serde_spanned: 0.6.9, "Apache-2.0 OR MIT",
-serde_spanned: 1.1.1, "Apache-2.0 OR MIT",
-serde_urlencoded: 0.7.1, "Apache-2.0 OR MIT",
-serde_v8: 0.260.0, "MIT",
-serde_with: 3.19.0, "Apache-2.0 OR MIT",
-serde_with_macros: 3.19.0, "Apache-2.0 OR MIT",
-serde_yaml_ng: 0.10.0, "MIT",
-serial_test: 3.4.0, "MIT",
-serial_test_derive: 3.4.0, "MIT",
-server: 0.8.0, "Apache-2.0",
-server-ng: 0.8.0, "Apache-2.0",
-sha1: 0.10.6, "Apache-2.0 OR MIT",
-sha1: 0.11.0, "Apache-2.0 OR MIT",
-sha2: 0.10.9, "Apache-2.0 OR MIT",
-sha2: 0.11.0, "Apache-2.0 OR MIT",
-sha3: 0.11.0, "Apache-2.0 OR MIT",
-shard: 0.1.0, "N/A",
-sharded-slab: 0.1.7, "MIT",
-shlex: 1.3.0, "Apache-2.0 OR MIT",
-signal-hook-registry: 1.4.8, "Apache-2.0 OR MIT",
-signature: 2.2.0, "Apache-2.0 OR MIT",
-simd-adler32: 0.3.9, "MIT",
-simd-json: 0.17.0, "Apache-2.0 OR MIT",
-simd_cesu8: 1.1.1, "Apache-2.0 OR MIT",
-simd_helpers: 0.1.0, "MIT",
-simdutf8: 0.1.5, "Apache-2.0 OR MIT",
-simple_asn1: 0.6.4, "ISC",
-simplecss: 0.2.2, "Apache-2.0 OR MIT",
-simulator: 0.1.0, "N/A",
-siphasher: 1.0.3, "Apache-2.0 OR MIT",
-slab: 0.4.12, "MIT",
-slotmap: 1.1.1, "Zlib",
-smallvec: 1.15.1, "Apache-2.0 OR MIT",
-smart-default: 0.7.1, "MIT",
-smawk: 0.3.2, "MIT",
-snafu: 0.8.9, "Apache-2.0 OR MIT",
-snafu-derive: 0.8.9, "Apache-2.0 OR MIT",
-snap: 1.1.1, "BSD-3-Clause",
-socket2: 0.5.10, "Apache-2.0 OR MIT",
-socket2: 0.6.3, "Apache-2.0 OR MIT",
-sourcemap: 9.3.2, "BSD-3-Clause",
-spin: 0.9.8, "MIT",
-spinning_top: 0.3.0, "Apache-2.0 OR MIT",
-spki: 0.7.3, "Apache-2.0 OR MIT",
-sqlparser: 0.61.0, "Apache-2.0",
-sqlx: 0.8.6, "Apache-2.0 OR MIT",
-sqlx-core: 0.8.6, "Apache-2.0 OR MIT",
-sqlx-macros: 0.8.6, "Apache-2.0 OR MIT",
-sqlx-macros-core: 0.8.6, "Apache-2.0 OR MIT",
-sqlx-mysql: 0.8.6, "Apache-2.0 OR MIT",
-sqlx-postgres: 0.8.6, "Apache-2.0 OR MIT",
-sqlx-sqlite: 0.8.6, "Apache-2.0 OR MIT",
-sse-stream: 0.2.3, "Apache-2.0 OR MIT",
-stable_deref_trait: 1.2.1, "Apache-2.0 OR MIT",
-stacker: 0.1.24, "Apache-2.0 OR MIT",
-static-toml: 1.3.0, "MIT",
-static_assertions: 1.1.0, "Apache-2.0 OR MIT",
-strict-num: 0.1.1, "MIT",
-stringcase: 0.4.0, "MIT",
-stringprep: 0.1.5, "Apache-2.0 OR MIT",
-strsim: 0.11.1, "MIT",
-structmeta: 0.3.0, "Apache-2.0 OR MIT",
-structmeta-derive: 0.3.0, "Apache-2.0 OR MIT",
-strum: 0.27.2, "MIT",
-strum: 0.28.0, "MIT",
-strum_macros: 0.27.2, "MIT",
-strum_macros: 0.28.0, "MIT",
-subtle: 2.6.1, "BSD-3-Clause",
-svgtypes: 0.15.3, "Apache-2.0 OR MIT",
-symlink: 0.1.0, "Apache-2.0 OR MIT",
-syn: 1.0.109, "Apache-2.0 OR MIT",
-syn: 2.0.117, "Apache-2.0 OR MIT",
-sync_wrapper: 1.0.2, "Apache-2.0",
-synchrony: 0.1.8, "MIT",
-synstructure: 0.13.2, "MIT",
-synthez: 0.4.0, "BlueOak-1.0.0",
-synthez-codegen: 0.4.0, "BlueOak-1.0.0",
-synthez-core: 0.4.0, "BlueOak-1.0.0",
-sys_traits: 0.1.27, "MIT",
-sys_traits_macros: 0.1.0, "MIT",
-sysinfo: 0.37.2, "MIT",
-sysinfo: 0.39.0, "MIT",
-system-configuration: 0.7.0, "Apache-2.0 OR MIT",
-system-configuration-sys: 0.6.0, "Apache-2.0 OR MIT",
-tagptr: 0.2.0, "Apache-2.0 OR MIT",
-take_mut: 0.2.2, "MIT",
-tap: 1.0.1, "MIT",
-tar: 0.4.45, "Apache-2.0 OR MIT",
-tempfile: 3.27.0, "Apache-2.0 OR MIT",
-terminal_size: 0.4.4, "Apache-2.0 OR MIT",
-termtree: 0.5.1, "MIT",
-test-case: 3.3.1, "MIT",
-test-case-core: 3.3.1, "MIT",
-test-case-macros: 3.3.1, "MIT",
-testcontainers: 0.27.3, "Apache-2.0 OR MIT",
-testcontainers-modules: 0.15.0, "MIT",
-textwrap: 0.16.2, "MIT",
-thin-cell: 0.1.2, "MIT",
-thiserror: 1.0.69, "Apache-2.0 OR MIT",
-thiserror: 2.0.18, "Apache-2.0 OR MIT",
-thiserror-impl: 1.0.69, "Apache-2.0 OR MIT",
-thiserror-impl: 2.0.18, "Apache-2.0 OR MIT",
-thread_local: 1.1.9, "Apache-2.0 OR MIT",
-thrift: 0.17.0, "Apache-2.0",
-tiff: 0.11.3, "MIT",
-time: 0.3.47, "Apache-2.0 OR MIT",
-time-core: 0.1.8, "Apache-2.0 OR MIT",
-time-macros: 0.2.27, "Apache-2.0 OR MIT",
-tiny-keccak: 2.0.2, "CC0-1.0",
-tiny-skia: 0.11.4, "BSD-3-Clause",
-tiny-skia-path: 0.11.4, "BSD-3-Clause",
-tinystr: 0.8.3, "Unicode-3.0",
-tinyvec: 1.11.0, "Apache-2.0 OR MIT OR Zlib",
-tinyvec_macros: 0.1.1, "Apache-2.0 OR MIT OR Zlib",
-tokio: 1.52.3, "MIT",
-tokio-macros: 2.7.0, "MIT",
-tokio-rustls: 0.26.4, "Apache-2.0 OR MIT",
-tokio-stream: 0.1.18, "MIT",
-tokio-tungstenite: 0.29.0, "MIT",
-tokio-util: 0.7.18, "MIT",
-tokise: 0.2.1, "Apache-2.0 OR MIT",
-toml: 0.8.23, "Apache-2.0 OR MIT",
-toml: 1.1.2+spec-1.1.0, "Apache-2.0 OR MIT",
-toml_datetime: 0.6.11, "Apache-2.0 OR MIT",
-toml_datetime: 1.1.1+spec-1.1.0, "Apache-2.0 OR MIT",
-toml_edit: 0.19.15, "Apache-2.0 OR MIT",
-toml_edit: 0.22.27, "Apache-2.0 OR MIT",
-toml_parser: 1.1.2+spec-1.1.0, "Apache-2.0 OR MIT",
-toml_write: 0.1.2, "Apache-2.0 OR MIT",
-toml_writer: 1.1.1+spec-1.1.0, "Apache-2.0 OR MIT",
-tonic: 0.14.6, "MIT",
-tonic-prost: 0.14.6, "MIT",
-tools: 0.1.0, "Apache-2.0",
-tower: 0.5.3, "MIT",
-tower-http: 0.6.10, "MIT",
-tower-layer: 0.3.3, "MIT",
-tower-service: 0.3.3, "MIT",
-tracing: 0.1.44, "MIT",
-tracing-appender: 0.2.5, "MIT",
-tracing-attributes: 0.1.31, "MIT",
-tracing-core: 0.1.36, "MIT",
-tracing-log: 0.2.0, "MIT",
-tracing-opentelemetry: 0.32.1, "MIT",
-tracing-subscriber: 0.3.23, "MIT",
-trait-variant: 0.1.2, "Apache-2.0 OR MIT",
-try-lock: 0.2.5, "MIT",
-ttf-parser: 0.25.1, "Apache-2.0 OR MIT",
-tungstenite: 0.28.0, "Apache-2.0 OR MIT",
-tungstenite: 0.29.0, "Apache-2.0 OR MIT",
-twox-hash: 2.1.2, "MIT",
-typed-builder: 0.20.1, "Apache-2.0 OR MIT",
-typed-builder: 0.22.0, "Apache-2.0 OR MIT",
-typed-builder: 0.23.2, "Apache-2.0 OR MIT",
-typed-builder-macro: 0.20.1, "Apache-2.0 OR MIT",
-typed-builder-macro: 0.22.0, "Apache-2.0 OR MIT",
-typed-builder-macro: 0.23.2, "Apache-2.0 OR MIT",
-typed-path: 0.12.3, "Apache-2.0 OR MIT",
-typeid: 1.0.3, "Apache-2.0 OR MIT",
-typenum: 1.20.0, "Apache-2.0 OR MIT",
-typetag: 0.2.21, "Apache-2.0 OR MIT",
-typetag-impl: 0.2.21, "Apache-2.0 OR MIT",
-ucd-trie: 0.1.7, "Apache-2.0 OR MIT",
-ulid: 1.2.1, "MIT",
-uncased: 0.9.10, "Apache-2.0 OR MIT",
-unicase: 2.9.0, "Apache-2.0 OR MIT",
-unicode-bidi: 0.3.18, "Apache-2.0 OR MIT",
-unicode-bidi-mirroring: 0.4.0, "Apache-2.0 OR MIT",
-unicode-ccc: 0.4.0, "Apache-2.0 OR MIT",
-unicode-id-start: 1.4.0, "(Apache-2.0 OR MIT) AND Unicode-3.0",
-unicode-ident: 1.0.24, "(Apache-2.0 OR MIT) AND Unicode-3.0",
-unicode-linebreak: 0.1.5, "Apache-2.0",
-unicode-normalization: 0.1.25, "Apache-2.0 OR MIT",
-unicode-properties: 0.1.4, "Apache-2.0 OR MIT",
-unicode-script: 0.5.8, "Apache-2.0 OR MIT",
-unicode-segmentation: 1.13.2, "Apache-2.0 OR MIT",
-unicode-vo: 0.1.0, "Apache-2.0 OR MIT",
-unicode-width: 0.1.14, "Apache-2.0 OR MIT",
-unicode-width: 0.2.2, "Apache-2.0 OR MIT",
-unicode-xid: 0.2.6, "Apache-2.0 OR MIT",
-universal-hash: 0.5.1, "Apache-2.0 OR MIT",
-unsafe-libyaml: 0.2.11, "MIT",
-untrusted: 0.9.0, "ISC",
-ureq: 3.3.0, "Apache-2.0 OR MIT",
-ureq-proto: 0.6.0, "Apache-2.0 OR MIT",
-url: 2.5.8, "Apache-2.0 OR MIT",
-urlencoding: 2.1.3, "MIT",
-usvg: 0.45.1, "Apache-2.0 OR MIT",
-utf-8: 0.7.6, "Apache-2.0 OR MIT",
-utf8-width: 0.1.8, "MIT",
-utf8-zero: 0.8.1, "Apache-2.0 OR MIT",
-utf8_iter: 1.0.4, "Apache-2.0 OR MIT",
-utf8parse: 0.2.2, "Apache-2.0 OR MIT",
-uuid: 1.23.1, "Apache-2.0 OR MIT",
-v8: 137.3.0, "MIT",
-v_frame: 0.3.9, "BSD-2-Clause",
-v_htmlescape: 0.15.8, "Apache-2.0 OR MIT",
-validator: 0.19.0, "MIT",
-validator_derive: 0.19.0, "MIT",
-valuable: 0.1.1, "MIT",
-value-trait: 0.12.1, "Apache-2.0 OR MIT",
-vcpkg: 0.2.15, "Apache-2.0 OR MIT",
-vergen: 9.1.0, "Apache-2.0 OR MIT",
-vergen-git2: 9.1.0, "Apache-2.0 OR MIT",
-vergen-lib: 9.1.0, "Apache-2.0 OR MIT",
-version_check: 0.9.5, "Apache-2.0 OR MIT",
-void: 1.0.2, "MIT",
-vsimd: 0.8.0, "MIT",
-wait-timeout: 0.2.1, "Apache-2.0 OR MIT",
-walkdir: 2.5.0, "MIT OR Unlicense",
-want: 0.3.1, "MIT",
-wasi: 0.11.1+wasi-snapshot-preview1, "Apache-2.0 OR Apache-2.0 WITH
LLVM-exception OR MIT",
-wasip2: 1.0.3+wasi-0.2.9, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR
MIT",
-wasip3: 0.4.0+wasi-0.3.0-rc-2026-01-06, "Apache-2.0 OR Apache-2.0 WITH
LLVM-exception OR MIT",
-wasite: 0.1.0, "Apache-2.0 OR BSL-1.0 OR MIT",
-wasm-bindgen: 0.2.121, "Apache-2.0 OR MIT",
-wasm-bindgen-futures: 0.4.71, "Apache-2.0 OR MIT",
-wasm-bindgen-macro: 0.2.121, "Apache-2.0 OR MIT",
-wasm-bindgen-macro-support: 0.2.121, "Apache-2.0 OR MIT",
-wasm-bindgen-shared: 0.2.121, "Apache-2.0 OR MIT",
-wasm-encoder: 0.244.0, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-wasm-metadata: 0.244.0, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-wasm-streams: 0.4.2, "Apache-2.0 OR MIT",
-wasm-streams: 0.5.0, "Apache-2.0 OR MIT",
-wasm_dep_analyzer: 0.3.0, "MIT",
-wasmparser: 0.244.0, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-wasmtimer: 0.4.3, "MIT",
-web-sys: 0.3.98, "Apache-2.0 OR MIT",
-web-time: 1.1.0, "Apache-2.0 OR MIT",
-webpki-root-certs: 1.0.7, "CDLA-Permissive-2.0",
-webpki-roots: 0.26.11, "CDLA-Permissive-2.0",
-webpki-roots: 1.0.7, "CDLA-Permissive-2.0",
-weezl: 0.1.12, "Apache-2.0 OR MIT",
-which: 6.0.3, "MIT",
-whoami: 1.6.1, "Apache-2.0 OR BSL-1.0 OR MIT",
-widestring: 1.2.1, "Apache-2.0 OR MIT",
-winapi: 0.3.9, "Apache-2.0 OR MIT",
-winapi-i686-pc-windows-gnu: 0.4.0, "Apache-2.0 OR MIT",
-winapi-util: 0.1.11, "MIT OR Unlicense",
-winapi-x86_64-pc-windows-gnu: 0.4.0, "Apache-2.0 OR MIT",
-windows: 0.61.3, "Apache-2.0 OR MIT",
-windows: 0.62.2, "Apache-2.0 OR MIT",
-windows-collections: 0.2.0, "Apache-2.0 OR MIT",
-windows-collections: 0.3.2, "Apache-2.0 OR MIT",
-windows-core: 0.61.2, "Apache-2.0 OR MIT",
-windows-core: 0.62.2, "Apache-2.0 OR MIT",
-windows-future: 0.2.1, "Apache-2.0 OR MIT",
-windows-future: 0.3.2, "Apache-2.0 OR MIT",
-windows-implement: 0.60.2, "Apache-2.0 OR MIT",
-windows-interface: 0.59.3, "Apache-2.0 OR MIT",
-windows-link: 0.1.3, "Apache-2.0 OR MIT",
-windows-link: 0.2.1, "Apache-2.0 OR MIT",
-windows-numerics: 0.2.0, "Apache-2.0 OR MIT",
-windows-numerics: 0.3.1, "Apache-2.0 OR MIT",
-windows-registry: 0.6.1, "Apache-2.0 OR MIT",
-windows-result: 0.3.4, "Apache-2.0 OR MIT",
-windows-result: 0.4.1, "Apache-2.0 OR MIT",
-windows-strings: 0.4.2, "Apache-2.0 OR MIT",
-windows-strings: 0.5.1, "Apache-2.0 OR MIT",
-windows-sys: 0.45.0, "Apache-2.0 OR MIT",
-windows-sys: 0.48.0, "Apache-2.0 OR MIT",
-windows-sys: 0.52.0, "Apache-2.0 OR MIT",
-windows-sys: 0.59.0, "Apache-2.0 OR MIT",
-windows-sys: 0.60.2, "Apache-2.0 OR MIT",
-windows-sys: 0.61.2, "Apache-2.0 OR MIT",
-windows-targets: 0.42.2, "Apache-2.0 OR MIT",
-windows-targets: 0.48.5, "Apache-2.0 OR MIT",
-windows-targets: 0.52.6, "Apache-2.0 OR MIT",
-windows-targets: 0.53.5, "Apache-2.0 OR MIT",
-windows-threading: 0.1.0, "Apache-2.0 OR MIT",
-windows-threading: 0.2.1, "Apache-2.0 OR MIT",
-windows_aarch64_gnullvm: 0.42.2, "Apache-2.0 OR MIT",
-windows_aarch64_gnullvm: 0.48.5, "Apache-2.0 OR MIT",
-windows_aarch64_gnullvm: 0.52.6, "Apache-2.0 OR MIT",
-windows_aarch64_gnullvm: 0.53.1, "Apache-2.0 OR MIT",
-windows_aarch64_msvc: 0.42.2, "Apache-2.0 OR MIT",
-windows_aarch64_msvc: 0.48.5, "Apache-2.0 OR MIT",
-windows_aarch64_msvc: 0.52.6, "Apache-2.0 OR MIT",
-windows_aarch64_msvc: 0.53.1, "Apache-2.0 OR MIT",
-windows_i686_gnu: 0.42.2, "Apache-2.0 OR MIT",
-windows_i686_gnu: 0.48.5, "Apache-2.0 OR MIT",
-windows_i686_gnu: 0.52.6, "Apache-2.0 OR MIT",
-windows_i686_gnu: 0.53.1, "Apache-2.0 OR MIT",
-windows_i686_gnullvm: 0.52.6, "Apache-2.0 OR MIT",
-windows_i686_gnullvm: 0.53.1, "Apache-2.0 OR MIT",
-windows_i686_msvc: 0.42.2, "Apache-2.0 OR MIT",
-windows_i686_msvc: 0.48.5, "Apache-2.0 OR MIT",
-windows_i686_msvc: 0.52.6, "Apache-2.0 OR MIT",
-windows_i686_msvc: 0.53.1, "Apache-2.0 OR MIT",
-windows_x86_64_gnu: 0.42.2, "Apache-2.0 OR MIT",
-windows_x86_64_gnu: 0.48.5, "Apache-2.0 OR MIT",
-windows_x86_64_gnu: 0.52.6, "Apache-2.0 OR MIT",
-windows_x86_64_gnu: 0.53.1, "Apache-2.0 OR MIT",
-windows_x86_64_gnullvm: 0.42.2, "Apache-2.0 OR MIT",
-windows_x86_64_gnullvm: 0.48.5, "Apache-2.0 OR MIT",
-windows_x86_64_gnullvm: 0.52.6, "Apache-2.0 OR MIT",
-windows_x86_64_gnullvm: 0.53.1, "Apache-2.0 OR MIT",
-windows_x86_64_msvc: 0.42.2, "Apache-2.0 OR MIT",
-windows_x86_64_msvc: 0.48.5, "Apache-2.0 OR MIT",
-windows_x86_64_msvc: 0.52.6, "Apache-2.0 OR MIT",
-windows_x86_64_msvc: 0.53.1, "Apache-2.0 OR MIT",
-winnow: 0.5.40, "MIT",
-winnow: 0.7.15, "MIT",
-winnow: 1.0.2, "MIT",
-winsafe: 0.0.19, "MIT",
-wiremock: 0.6.5, "Apache-2.0 OR MIT",
-wit-bindgen: 0.51.0, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-wit-bindgen: 0.57.1, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-wit-bindgen-core: 0.51.0, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR
MIT",
-wit-bindgen-rust: 0.51.0, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR
MIT",
-wit-bindgen-rust-macro: 0.51.0, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception
OR MIT",
-wit-component: 0.244.0, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-wit-parser: 0.244.0, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-writeable: 0.6.3, "Unicode-3.0",
-wyz: 0.5.1, "MIT",
-x509-parser: 0.18.1, "Apache-2.0 OR MIT",
-xattr: 1.6.1, "Apache-2.0 OR MIT",
-xmlparser: 0.13.6, "Apache-2.0 OR MIT",
-xmlwriter: 0.1.0, "MIT",
-y4m: 0.8.0, "MIT",
-yansi: 1.0.1, "Apache-2.0 OR MIT",
-yasna: 0.5.2, "Apache-2.0 OR MIT",
-yew: 0.23.0, "Apache-2.0 OR MIT",
-yew-macro: 0.23.0, "Apache-2.0 OR MIT",
-yew-router: 0.20.0, "Apache-2.0 OR MIT",
-yew-router-macro: 0.20.0, "Apache-2.0 OR MIT",
-yoke: 0.8.2, "Unicode-3.0",
-yoke-derive: 0.8.2, "Unicode-3.0",
-z85: 3.0.7, "Apache-2.0 OR MIT",
-zerocopy: 0.8.48, "Apache-2.0 OR BSD-2-Clause OR MIT",
-zerocopy-derive: 0.8.48, "Apache-2.0 OR BSD-2-Clause OR MIT",
-zerofrom: 0.1.7, "Unicode-3.0",
-zerofrom-derive: 0.1.7, "Unicode-3.0",
-zeroize: 1.8.2, "Apache-2.0 OR MIT",
-zeroize_derive: 1.4.3, "Apache-2.0 OR MIT",
-zerotrie: 0.2.4, "Unicode-3.0",
-zerovec: 0.11.6, "Unicode-3.0",
-zerovec-derive: 0.11.3, "Unicode-3.0",
-zip: 0.6.6, "MIT",
-zip: 8.6.0, "MIT",
-zlib-rs: 0.6.3, "Zlib",
-zmij: 1.0.21, "MIT",
-zopfli: 0.8.3, "Apache-2.0",
-zstd: 0.13.3, "MIT",
-zstd-safe: 7.2.4, "Apache-2.0 OR MIT",
-zstd-sys: 2.0.16+zstd.1.5.7, "Apache-2.0 OR MIT",
-zune-core: 0.4.12, "Apache-2.0 OR MIT OR Zlib",
-zune-core: 0.5.1, "Apache-2.0 OR MIT OR Zlib",
-zune-inflate: 0.2.54, "Apache-2.0 OR MIT OR Zlib",
-zune-jpeg: 0.4.21, "Apache-2.0 OR MIT OR Zlib",
-zune-jpeg: 0.5.15, "Apache-2.0 OR MIT OR Zlib",
diff --git a/NOTICE b/NOTICE
index 61a3be1eb..cc8d19480 100644
--- a/NOTICE
+++ b/NOTICE
@@ -6,13 +6,6 @@ The Apache Software Foundation (http://www.apache.org/).
================================================================
-This product includes various dependencies and code components that are
subject to separate copyright notices and license terms.
-Your use of these components is governed by their respective licenses.
-For a complete list of dependencies, including their licenses and repository
links,
-please refer to the DEPENDENCIES file.
-
-================================================================
-
The Iggy project code was originally created, designed, developed by Piotr
Gankiewicz in April 2023.
It was released as an open-source project under MIT License, later converted
to Apache 2.0 License,
and donated by LaserData, Inc. to the Apache Software Foundation (ASF) in
February 2025.
diff --git a/about.hbs b/about.hbs
new file mode 100644
index 000000000..1aa1447c9
--- /dev/null
+++ b/about.hbs
@@ -0,0 +1,23 @@
+Apache Iggy (incubating) - Third-Party License Manifest
+========================================================
+
+The following third-party software components are statically linked into
+this Apache Iggy (incubating) convenience binary artifact. The complete
+license text for each component is reproduced verbatim below as required
+by the Apache Software Foundation release policy.
+
+This manifest is generated by `cargo-about` from the workspace `Cargo.lock`
+at build time. It does NOT apply to the official Apache source release,
+which ships only source code and lockfiles (no bundled third-party code).
+
+{{#each overview}}
+
+================================================================================
+LICENSE: {{{name}}} ({{{id}}}) - used by {{count}} crate(s)
+USED BY:
+{{#each indices}}{{#with (lookup @root.licenses this)}}{{#each used_by}} -
{{{crate.name}}} {{{crate.version}}}{{#if crate.repository}}
({{{crate.repository}}}){{/if}}
+{{/each}}{{/with}}{{/each}}================================================================================
+
+{{{text}}}
+
+{{/each}}
diff --git a/about.toml b/about.toml
new file mode 100644
index 000000000..54dad6d8c
--- /dev/null
+++ b/about.toml
@@ -0,0 +1,91 @@
+# 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.
+
+# cargo-about configuration for Apache Iggy.
+#
+# Used by `scripts/ci/third-party-licenses.sh` to render a
+# LICENSE-binary manifest that is bundled into convenience binary
+# artifacts (Docker images, PyPI wheels). Source releases do NOT bundle
+# third-party code, so the manifest is generated at build time only and is
+# .gitignored.
+#
+# License IDs accepted by ASF policy for redistribution.
+# See https://www.apache.org/legal/resolved.html
+#
+# Category A (explicitly listed on resolved.html, OK to bundle):
+# Apache-2.0, MIT, BSD-2-Clause, BSD-3-Clause, BSD-3-Clause-Clear,
+# ISC, Zlib, Unicode-3.0, Unicode-DFS-2016, CC0-1.0, OpenSSL,
+# BSL-1.0, NCSA
+#
+# Category B (binary-only, requires labelling per resolved.html):
+# MPL-2.0
+#
+# NOT on resolved.html, but accepted as Category-A-equivalent by
+# precedent in apache/iceberg-rust, apache/opendal, apache/paimon-rust
+# deny.toml allow lists:
+# bzip2-1.0.6
+# BSD-derived. Pulled in by libbz2-rs-sys (runtime). Allowed in
+# apache/iceberg-rust, apache/paimon-rust; used directly by
+# apache/datafusion as a workspace dep.
+# Apache-2.0 WITH LLVM-exception
+# Apache-2.0 plus the LLVM exception broadening downstream-binary
+# grants. Pulled in by target-lexicon via the pyo3 build chain
+# reachable from foreign/python. Allowed in apache/iceberg-rust
+# and apache/datafusion deny.toml.
+# CDLA-Permissive-2.0 (scoped exception, not in general accept list)
+# Permissive open-data license. Pulled in only by webpki-roots
+# and webpki-root-certs (Mozilla CA bundle data). Crate-scoped
+# exception below mirrors apache/opendal and apache/paimon-rust.
+# apache/iceberg-rust accepts globally; we follow the more
+# conservative scoped pattern.
+accepted = [
+ "Apache-2.0",
+ "Apache-2.0 WITH LLVM-exception",
+ "MIT",
+ "BSD-2-Clause",
+ "BSD-3-Clause",
+ "BSD-3-Clause-Clear",
+ "ISC",
+ "Zlib",
+ "Unicode-3.0",
+ "Unicode-DFS-2016",
+ "MPL-2.0",
+ "CC0-1.0",
+ "OpenSSL",
+ "BSL-1.0",
+ "NCSA",
+ "bzip2-1.0.6",
+]
+
+# Skip dev-dependencies and build-dependencies; neither is shipped in
+# the convenience binary. Build-deps run only during compilation, so
+# their code never lands in the artifact. Excluding them keeps the
+# manifest focused on what the user actually receives, and forces a
+# new build-only license to surface in CI rather than silently
+# expanding the accept list.
+ignore-dev-dependencies = true
+ignore-build-dependencies = true
+ignore-transitive-dependencies = false
+
+# Per-crate license overrides. Each entry permits the listed license
+# only for that specific crate, not the workspace as a whole.
+
+[webpki-roots]
+accepted = ["CDLA-Permissive-2.0"]
+
+[webpki-root-certs]
+accepted = ["CDLA-Permissive-2.0"]
diff --git a/core/ai/mcp/Dockerfile b/core/ai/mcp/Dockerfile
index 5712ae9af..ea68f4934 100644
--- a/core/ai/mcp/Dockerfile
+++ b/core/ai/mcp/Dockerfile
@@ -45,7 +45,7 @@ ARG LIBC=musl
ARG IGGY_CI_BUILD
ENV IGGY_CI_BUILD=${IGGY_CI_BUILD}
-RUN apk add --no-cache zig make autoconf automake libtool pkgconfig && \
+RUN apk add --no-cache bash curl tar zig make autoconf automake libtool
pkgconfig && \
cargo install cargo-zigbuild --locked && \
rustup target add \
x86_64-unknown-linux-musl \
@@ -99,6 +99,18 @@ RUN
--mount=type=cache,target=/usr/local/cargo/registry,id=cargo-registry-${TARG
cp /app/target/${RUST_TARGET}/release/iggy-mcp /app/iggy-mcp; \
fi
+#
+# Generate third-party license manifest. Required by ASF release policy:
+# convenience binaries that statically link third-party code MUST include
+# the full license text of every bundled crate inside the artifact.
+#
+RUN
--mount=type=cache,target=/usr/local/cargo/registry,id=cargo-registry-${TARGETPLATFORM}-${LIBC}
\
+
--mount=type=cache,target=/usr/local/cargo/git,id=cargo-git-${TARGETPLATFORM}-${LIBC}
\
+ TARGET="$(uname -m)-unknown-linux-musl" && \
+ curl -sSfL
"https://github.com/EmbarkStudios/cargo-about/releases/download/0.9.0/cargo-about-0.9.0-${TARGET}.tar.gz"
\
+ | tar -xz -C /usr/local/bin --strip-components=1
"cargo-about-0.9.0-${TARGET}/cargo-about" && \
+ ./scripts/ci/third-party-licenses.sh --generate --manifest
core/ai/mcp/Cargo.toml --output /app/LICENSE-binary
+
#
# Final runtime - Debian trixie Slim
#
@@ -106,5 +118,7 @@ FROM debian:trixie-slim AS runtime
WORKDIR /app
COPY --from=builder /app/iggy-mcp /usr/local/bin/iggy-mcp
+COPY --from=builder /app/LICENSE-binary /usr/share/doc/iggy-mcp/LICENSE-binary
+COPY LICENSE NOTICE /usr/share/doc/iggy-mcp/
ENTRYPOINT ["iggy-mcp"]
diff --git a/core/bench/dashboard/server/Dockerfile
b/core/bench/dashboard/server/Dockerfile
index cc6e16d77..bfedb7696 100644
--- a/core/bench/dashboard/server/Dockerfile
+++ b/core/bench/dashboard/server/Dockerfile
@@ -68,6 +68,14 @@ RUN cd core/bench/dashboard/frontend && trunk build --release
# Build the server with release profile
RUN cargo build --release --bin iggy-bench-dashboard-server
+# Generate third-party license manifest. Required by ASF release policy:
+# convenience binaries that statically link third-party code MUST include
+# the full license text of every bundled crate inside the artifact.
+RUN TARGET="$(uname -m)-unknown-linux-musl" && \
+ curl -sSfL
"https://github.com/EmbarkStudios/cargo-about/releases/download/0.9.0/cargo-about-0.9.0-${TARGET}.tar.gz"
\
+ | tar -xz -C /usr/local/bin --strip-components=1
"cargo-about-0.9.0-${TARGET}/cargo-about" && \
+ ./scripts/ci/third-party-licenses.sh --generate --manifest
core/bench/dashboard/server/Cargo.toml --output
/usr/src/iggy-bench-dashboard/LICENSE-binary
+
# Runtime stage
FROM debian:trixie-slim
@@ -84,6 +92,8 @@ RUN apt-get update && apt-get install -y
--no-install-recommends \
# Copy the built binary and frontend files
COPY --from=builder
/usr/src/iggy-bench-dashboard/target/release/iggy-bench-dashboard-server /app/
COPY --from=builder
/usr/src/iggy-bench-dashboard/core/bench/dashboard/frontend/dist
/app/frontend/dist
+COPY --from=builder /usr/src/iggy-bench-dashboard/LICENSE-binary
/usr/share/doc/iggy-bench-dashboard/LICENSE-binary
+COPY LICENSE NOTICE /usr/share/doc/iggy-bench-dashboard/
# Create data directory and non-root user
RUN groupadd -r iggy && \
diff --git a/core/clock/Cargo.toml b/core/clock/Cargo.toml
index df6ad0a8c..b1dc9ebfa 100644
--- a/core/clock/Cargo.toml
+++ b/core/clock/Cargo.toml
@@ -19,6 +19,7 @@
name = "clock"
version = "0.1.0"
edition = "2024"
+license = "Apache-2.0"
publish = false
[dependencies]
diff --git a/core/connectors/runtime/Dockerfile
b/core/connectors/runtime/Dockerfile
index e29eab4c9..880783687 100644
--- a/core/connectors/runtime/Dockerfile
+++ b/core/connectors/runtime/Dockerfile
@@ -45,7 +45,7 @@ ARG LIBC=glibc
ARG IGGY_CI_BUILD
ENV IGGY_CI_BUILD=${IGGY_CI_BUILD}
-RUN apk add --no-cache zig make autoconf automake libtool pkgconfig hwloc-dev
xz-dev xz-static && \
+RUN apk add --no-cache bash curl tar zig make autoconf automake libtool
pkgconfig hwloc-dev xz-dev xz-static && \
cargo install cargo-zigbuild --locked && \
rustup target add \
x86_64-unknown-linux-musl \
@@ -102,6 +102,18 @@ RUN
--mount=type=cache,target=/usr/local/cargo/registry,id=cargo-registry-${TARG
cp /app/target/${RUST_TARGET}/release/iggy-connectors
/app/iggy-connectors; \
fi
+#
+# Generate third-party license manifest. Required by ASF release policy:
+# convenience binaries that statically link third-party code MUST include
+# the full license text of every bundled crate inside the artifact.
+#
+RUN
--mount=type=cache,target=/usr/local/cargo/registry,id=cargo-registry-${TARGETPLATFORM}-${LIBC}
\
+
--mount=type=cache,target=/usr/local/cargo/git,id=cargo-git-${TARGETPLATFORM}-${LIBC}
\
+ TARGET="$(uname -m)-unknown-linux-musl" && \
+ curl -sSfL
"https://github.com/EmbarkStudios/cargo-about/releases/download/0.9.0/cargo-about-0.9.0-${TARGET}.tar.gz"
\
+ | tar -xz -C /usr/local/bin --strip-components=1
"cargo-about-0.9.0-${TARGET}/cargo-about" && \
+ ./scripts/ci/third-party-licenses.sh --generate --manifest
core/connectors/runtime/Cargo.toml --output /app/LICENSE-binary
+
#
# Final runtime - Debian trixie Slim
#
@@ -109,5 +121,7 @@ FROM debian:trixie-slim AS runtime
WORKDIR /app
COPY --from=builder /app/iggy-connectors /usr/local/bin/iggy-connectors
+COPY --from=builder /app/LICENSE-binary
/usr/share/doc/iggy-connect/LICENSE-binary
+COPY LICENSE NOTICE /usr/share/doc/iggy-connect/
ENTRYPOINT ["iggy-connectors"]
diff --git a/core/server/Dockerfile b/core/server/Dockerfile
index 62d37c4e9..989d03fad 100644
--- a/core/server/Dockerfile
+++ b/core/server/Dockerfile
@@ -46,7 +46,7 @@ ARG LIBC=musl
ARG IGGY_CI_BUILD
ENV IGGY_CI_BUILD=${IGGY_CI_BUILD}
-RUN apk add --no-cache zig make autoconf automake libtool pkgconfig hwloc-dev
xz-dev xz-static nodejs npm && \
+RUN apk add --no-cache bash curl tar zig make autoconf automake libtool
pkgconfig hwloc-dev xz-dev xz-static nodejs npm && \
cargo install cargo-zigbuild --locked && \
rustup target add \
x86_64-unknown-linux-musl \
@@ -102,6 +102,18 @@ RUN
--mount=type=cache,target=/usr/local/cargo/registry,id=cargo-registry-${TARG
cp /app/target/${RUST_TARGET}/release/iggy /app/iggy; \
fi
+# Generate third-party license manifest. Required by ASF release policy:
+# convenience binaries that statically link third-party code MUST include
+# the full license text of every bundled crate inside the artifact.
+RUN TARGET="$(uname -m)-unknown-linux-musl" && \
+ curl -sSfL
"https://github.com/EmbarkStudios/cargo-about/releases/download/0.9.0/cargo-about-0.9.0-${TARGET}.tar.gz"
\
+ | tar -xz -C /usr/local/bin --strip-components=1
"cargo-about-0.9.0-${TARGET}/cargo-about" && \
+ ./scripts/ci/third-party-licenses.sh --generate \
+ --manifest core/server/Cargo.toml \
+ --manifest core/cli/Cargo.toml \
+ --manifest web \
+ --output /app/LICENSE-binary
+
# ── prebuilt path (FAST)
──────────────────────────────────────────────────────
FROM debian:trixie-slim AS prebuilt
WORKDIR /out
@@ -111,6 +123,24 @@ COPY ${PREBUILT_IGGY_SERVER} /out/iggy-server
COPY ${PREBUILT_IGGY_CLI} /out/iggy
RUN chmod +x /out/iggy-server /out/iggy
+# Generate LICENSE-binary for the prebuilt path. The prebuilt binaries are
+# built externally from this same Cargo.lock, so the manifest accurately
+# reflects what is statically linked into the image. iggy-server embeds
+# the compiled web UI (see core/server/build.rs), so the manifest must
+# also enumerate the web npm production dependencies.
+FROM --platform=$BUILDPLATFORM chef AS license-gen
+RUN apk add --no-cache bash curl tar nodejs npm
+COPY . .
+RUN cd web && npm ci --omit=dev --prefer-offline --no-audit
+RUN TARGET="$(uname -m)-unknown-linux-musl" && \
+ curl -sSfL
"https://github.com/EmbarkStudios/cargo-about/releases/download/0.9.0/cargo-about-0.9.0-${TARGET}.tar.gz"
\
+ | tar -xz -C /usr/local/bin --strip-components=1
"cargo-about-0.9.0-${TARGET}/cargo-about" && \
+ ./scripts/ci/third-party-licenses.sh --generate \
+ --manifest core/server/Cargo.toml \
+ --manifest core/cli/Cargo.toml \
+ --manifest web \
+ --output /app/LICENSE-binary
+
# ── final images
──────────────────────────────────────────────────────────────
FROM debian:trixie-slim AS runtime-prebuilt
ARG TARGETPLATFORM
@@ -122,8 +152,10 @@ RUN apt-get update && apt-get install -y \
libudev-dev \
pkg-config \
&& rm -rf /var/lib/apt/lists/*
-COPY --from=prebuilt /out/iggy-server /usr/local/bin/iggy-server
-COPY --from=prebuilt /out/iggy /usr/local/bin/iggy
+COPY --from=prebuilt /out/iggy-server
/usr/local/bin/iggy-server
+COPY --from=prebuilt /out/iggy /usr/local/bin/iggy
+COPY --from=license-gen /app/LICENSE-binary
/usr/share/doc/iggy/LICENSE-binary
+COPY LICENSE NOTICE /usr/share/doc/iggy/
RUN echo "═══════════════════════════════════════════════════════════════" && \
echo " IGGY SERVER BUILD SUMMARY " && \
echo "═══════════════════════════════════════════════════════════════" && \
@@ -152,6 +184,8 @@ RUN apt-get update && apt-get install -y \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /app/iggy-server /usr/local/bin/iggy-server
COPY --from=builder /app/iggy /usr/local/bin/iggy
+COPY --from=builder /app/LICENSE-binary /usr/share/doc/iggy/LICENSE-binary
+COPY LICENSE NOTICE /usr/share/doc/iggy/
RUN echo "═══════════════════════════════════════════════════════════════" && \
echo " IGGY SERVER BUILD SUMMARY " && \
echo "═══════════════════════════════════════════════════════════════" && \
diff --git a/core/shard/Cargo.toml b/core/shard/Cargo.toml
index 5d3151e7a..82bdb69f8 100644
--- a/core/shard/Cargo.toml
+++ b/core/shard/Cargo.toml
@@ -19,6 +19,7 @@
name = "shard"
version = "0.1.0"
edition = "2024"
+license = "Apache-2.0"
publish = false
[dependencies]
diff --git a/core/simulator/Cargo.toml b/core/simulator/Cargo.toml
index 9f9d264e0..ab32a58cd 100644
--- a/core/simulator/Cargo.toml
+++ b/core/simulator/Cargo.toml
@@ -19,6 +19,7 @@
name = "simulator"
version = "0.1.0"
edition = "2024"
+license = "Apache-2.0"
publish = false
[dependencies]
diff --git a/foreign/csharp/DEPENDENCIES.md b/foreign/csharp/DEPENDENCIES.md
deleted file mode 100644
index 4ae8d2e34..000000000
--- a/foreign/csharp/DEPENDENCIES.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Dependencies
-
-FluentAssertions: "6.12.0", "Apache-2.0",
-Microsoft.Extensions.Logging: "8.0.0", "MIT",
-Microsoft.Extensions.Logging.Console: "8.0.0", "MIT",
-Microsoft.NET.Test.Sdk: "18.0.1", "MIT",
-Microsoft.SourceLink.GitHub: "10.0.102", "MIT",
-Microsoft.Testing.Extensions.CodeCoverage: "18.3.2", "MIT",
-Microsoft.Testing.Extensions.TrxReport: "2.0.2", "MIT",
-Moq: "4.20.72", "BSD-3-Clause",
-Reqnroll.xUnit: "3.3.2", "BSD-3-Clause",
-Shouldly: "4.3.0", "BSD-3-Clause",
-System.IO.Hashing: "8.0.0", "MIT",
-Testcontainers: "4.10.0", "MIT",
-TUnit: "1.12.15", "MIT",
-xunit.v3.mtp-v2: "3.2.2", "Apache-2.0",
-xunit.runner.visualstudio: "3.1.5", "Apache-2.0",
diff --git a/foreign/csharp/Iggy_SDK.sln b/foreign/csharp/Iggy_SDK.sln
index 611c2f84d..5732f6978 100644
--- a/foreign/csharp/Iggy_SDK.sln
+++ b/foreign/csharp/Iggy_SDK.sln
@@ -12,7 +12,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") =
"Iggy_SDK.Tests.Integration"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SolutionFolder",
"SolutionFolder", "{3A9B7D3B-EFA9-4652-A647-C72F84616114}"
ProjectSection(SolutionItems) = preProject
- DEPENDENCIES.md = DEPENDENCIES.md
Directory.Packages.props = Directory.Packages.props
LICENSE = LICENSE
NOTICE = NOTICE
diff --git a/foreign/csharp/Iggy_SDK/Iggy_SDK.csproj
b/foreign/csharp/Iggy_SDK/Iggy_SDK.csproj
index e87a9dfa8..651406eda 100644
--- a/foreign/csharp/Iggy_SDK/Iggy_SDK.csproj
+++ b/foreign/csharp/Iggy_SDK/Iggy_SDK.csproj
@@ -42,8 +42,8 @@
<None Include="../LICENSE" Pack="true" PackagePath="">
<Link>Properties/LICENSE</Link>
</None>
- <None Include="../DEPENDENCIES.md">
- <Link>Properties\DEPENDENCIES.md</Link>
+ <None Include="../NOTICE" Pack="true" PackagePath="">
+ <Link>Properties/NOTICE</Link>
</None>
</ItemGroup>
diff --git a/foreign/csharp/NOTICE b/foreign/csharp/NOTICE
index 61a3be1eb..cc8d19480 100644
--- a/foreign/csharp/NOTICE
+++ b/foreign/csharp/NOTICE
@@ -6,13 +6,6 @@ The Apache Software Foundation (http://www.apache.org/).
================================================================
-This product includes various dependencies and code components that are
subject to separate copyright notices and license terms.
-Your use of these components is governed by their respective licenses.
-For a complete list of dependencies, including their licenses and repository
links,
-please refer to the DEPENDENCIES file.
-
-================================================================
-
The Iggy project code was originally created, designed, developed by Piotr
Gankiewicz in April 2023.
It was released as an open-source project under MIT License, later converted
to Apache 2.0 License,
and donated by LaserData, Inc. to the Apache Software Foundation (ASF) in
February 2025.
diff --git a/foreign/go/NOTICE b/foreign/go/NOTICE
index 61a3be1eb..cc8d19480 100644
--- a/foreign/go/NOTICE
+++ b/foreign/go/NOTICE
@@ -6,13 +6,6 @@ The Apache Software Foundation (http://www.apache.org/).
================================================================
-This product includes various dependencies and code components that are
subject to separate copyright notices and license terms.
-Your use of these components is governed by their respective licenses.
-For a complete list of dependencies, including their licenses and repository
links,
-please refer to the DEPENDENCIES file.
-
-================================================================
-
The Iggy project code was originally created, designed, developed by Piotr
Gankiewicz in April 2023.
It was released as an open-source project under MIT License, later converted
to Apache 2.0 License,
and donated by LaserData, Inc. to the Apache Software Foundation (ASF) in
February 2025.
diff --git a/foreign/java/NOTICE b/foreign/java/NOTICE
index 61a3be1eb..cc8d19480 100644
--- a/foreign/java/NOTICE
+++ b/foreign/java/NOTICE
@@ -6,13 +6,6 @@ The Apache Software Foundation (http://www.apache.org/).
================================================================
-This product includes various dependencies and code components that are
subject to separate copyright notices and license terms.
-Your use of these components is governed by their respective licenses.
-For a complete list of dependencies, including their licenses and repository
links,
-please refer to the DEPENDENCIES file.
-
-================================================================
-
The Iggy project code was originally created, designed, developed by Piotr
Gankiewicz in April 2023.
It was released as an open-source project under MIT License, later converted
to Apache 2.0 License,
and donated by LaserData, Inc. to the Apache Software Foundation (ASF) in
February 2025.
diff --git a/foreign/node/NOTICE b/foreign/node/NOTICE
index 61a3be1eb..cc8d19480 100644
--- a/foreign/node/NOTICE
+++ b/foreign/node/NOTICE
@@ -6,13 +6,6 @@ The Apache Software Foundation (http://www.apache.org/).
================================================================
-This product includes various dependencies and code components that are
subject to separate copyright notices and license terms.
-Your use of these components is governed by their respective licenses.
-For a complete list of dependencies, including their licenses and repository
links,
-please refer to the DEPENDENCIES file.
-
-================================================================
-
The Iggy project code was originally created, designed, developed by Piotr
Gankiewicz in April 2023.
It was released as an open-source project under MIT License, later converted
to Apache 2.0 License,
and donated by LaserData, Inc. to the Apache Software Foundation (ASF) in
February 2025.
diff --git a/foreign/node/package.json b/foreign/node/package.json
index 156f9927b..712f7c29b 100644
--- a/foreign/node/package.json
+++ b/foreign/node/package.json
@@ -28,7 +28,9 @@
"dist/**/*.d.ts",
"dist/index.d.ts",
"!dist/bdd/",
- "!dist/examples/"
+ "!dist/examples/",
+ "LICENSE",
+ "NOTICE"
],
"types": "dist/index.d.ts",
"main": "dist/index.js",
diff --git a/foreign/python/NOTICE b/foreign/python/NOTICE
index 61a3be1eb..cc8d19480 100644
--- a/foreign/python/NOTICE
+++ b/foreign/python/NOTICE
@@ -6,13 +6,6 @@ The Apache Software Foundation (http://www.apache.org/).
================================================================
-This product includes various dependencies and code components that are
subject to separate copyright notices and license terms.
-Your use of these components is governed by their respective licenses.
-For a complete list of dependencies, including their licenses and repository
links,
-please refer to the DEPENDENCIES file.
-
-================================================================
-
The Iggy project code was originally created, designed, developed by Piotr
Gankiewicz in April 2023.
It was released as an open-source project under MIT License, later converted
to Apache 2.0 License,
and donated by LaserData, Inc. to the Apache Software Foundation (ASF) in
February 2025.
diff --git a/foreign/python/pyproject.toml b/foreign/python/pyproject.toml
index e7774fd20..e5c6506da 100644
--- a/foreign/python/pyproject.toml
+++ b/foreign/python/pyproject.toml
@@ -55,6 +55,12 @@ classifiers = [
[tool.maturin]
features = ["pyo3/extension-module"]
+# LICENSE-binary enumerates the statically-linked Rust crates
+# bundled into the wheel by maturin/PyO3. Generated at build time by
+# `scripts/ci/third-party-licenses.sh --generate --manifest
foreign/python/Cargo.toml --output foreign/python/LICENSE-binary`
+# (foreign/python is excluded from the workspace, so cargo-about must be
+# pointed at this Cargo.toml explicitly). File is .gitignored; the wheel
+# build pipeline must generate it before invoking maturin.
include = [
{ path = "LICENSE", format = [
"sdist",
@@ -64,6 +70,9 @@ include = [
"sdist",
"wheel",
] },
+ { path = "LICENSE-binary", format = [
+ "wheel",
+ ] },
{ path = "apache_iggy.pyi", format = [
"sdist",
] },
diff --git a/justfile b/justfile
index 2694389d3..6f37a5e81 100644
--- a/justfile
+++ b/justfile
@@ -75,11 +75,5 @@ licenses-fix:
licenses-check:
./scripts/ci/license-headers.sh --check
-licenses-list-check:
- ./scripts/ci/licenses-list.sh --check
-
-licenses-list-fix:
- ./scripts/ci/licenses-list.sh --fix
-
markdownlint:
markdownlint '**/*.md' --ignore-path .gitignore
diff --git a/scripts/ci/licenses-list.sh b/scripts/ci/licenses-list.sh
deleted file mode 100755
index 2372ff3b3..000000000
--- a/scripts/ci/licenses-list.sh
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/usr/bin/env bash
-
-# 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.
-
-set -euo pipefail
-
-# Default mode
-MODE="check"
-
-# Parse arguments
-if [ $# -gt 0 ]; then
- case "$1" in
- --check)
- MODE="check"
- ;;
- --update|--fix)
- MODE="update"
- ;;
- *)
- echo "Usage: $0 [--check|--update|--fix]"
- echo " --check Check if DEPENDENCIES.md is up to date (default)"
- echo " --update Update DEPENDENCIES.md with current dependencies"
- echo " --fix Alias for --update"
- exit 1
- ;;
- esac
-fi
-
-# Check if cargo-license is installed
-if ! command -v cargo-license &>/dev/null; then
- echo "❌ cargo-license command not found"
- echo "💡 Install it using: cargo install cargo-license"
- exit 1
-fi
-
-# Check if DEPENDENCIES.md exists
-if [ ! -f "DEPENDENCIES.md" ] && [ "$MODE" = "check" ]; then
- echo "❌ DEPENDENCIES.md does not exist"
- echo "💡 Run '$0 --fix' to create it"
- exit 1
-fi
-
-# Generate current dependencies
-TEMP_FILE=$(mktemp)
-trap 'rm -f "$TEMP_FILE"' EXIT
-
-echo "Generating current dependencies list..."
-cargo license --color never --do-not-bundle --all-features >"$TEMP_FILE"
-
-# Update mode
-if [ "$MODE" = "update" ]; then
- echo "🔧 Updating DEPENDENCIES.md..."
- {
- echo "# Dependencies"
- echo ""
- cat "$TEMP_FILE"
- } >DEPENDENCIES.md
- echo "✅ DEPENDENCIES.md has been updated"
- exit 0
-fi
-
-# Check mode
-if [ "$MODE" = "check" ]; then
- echo "🔍 Checking if DEPENDENCIES.md is up to date..."
- # Create expected format for comparison
- EXPECTED_FILE=$(mktemp)
- trap 'rm -f "$TEMP_FILE" "$EXPECTED_FILE"' EXIT
- {
- echo "# Dependencies"
- echo ""
- cat "$TEMP_FILE"
- } >"$EXPECTED_FILE"
-
- if ! diff -q "$EXPECTED_FILE" DEPENDENCIES.md >/dev/null; then
- echo "❌ DEPENDENCIES.md is out of date"
- echo ""
- echo "Diff:"
- diff -u DEPENDENCIES.md "$EXPECTED_FILE" || true
- echo ""
- echo "💡 Run '$0 --fix' to update it"
- exit 1
- else
- echo "✅ DEPENDENCIES.md is up to date"
- fi
-fi
diff --git a/scripts/ci/render-node-licenses.mjs
b/scripts/ci/render-node-licenses.mjs
new file mode 100755
index 000000000..173d9bf66
--- /dev/null
+++ b/scripts/ci/render-node-licenses.mjs
@@ -0,0 +1,225 @@
+#!/usr/bin/env node
+// 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.
+
+// Render or validate license-checker-rseidelsohn JSON output.
+//
+// Usage:
+// render-node-licenses.mjs <license-checker-json> render mode
+// render-node-licenses.mjs --validate-only <json> validate mode
+//
+// Render mode emits a LICENSE-binary manifest on stdout, embedding the
+// full LICENSE file text per package.
+//
+// Validate mode parses each package's SPDX expression, compares it
+// against the allow-list below, and exits non-zero on disallowed
+// licenses with a per-package report on stderr. Disjunctions (`OR`)
+// pass if ANY operand is in the allow-list, matching cargo-about's
+// permissive disjunction semantics. Conjunctions (`AND`) require ALL
+// operands to be in the allow-list. Unknown / UNLICENSED licenses
+// fail.
+
+import { readFileSync, existsSync } from 'node:fs';
+
+// Allow-list mirrors about.toml (Apache Iggy / ASF policy). Update both
+// in lockstep when adding a new accepted license. SPDX identifiers
+// only; expressions are tokenised before matching against this list.
+const ALLOWED_LICENSES = new Set([
+ 'Apache-2.0',
+ 'Apache-2.0 WITH LLVM-exception',
+ 'MIT',
+ 'BSD-2-Clause',
+ 'BSD-3-Clause',
+ 'BSD-3-Clause-Clear',
+ 'ISC',
+ 'Zlib',
+ 'Unicode-3.0',
+ 'Unicode-DFS-2016',
+ 'MPL-2.0',
+ 'CC0-1.0',
+ 'OpenSSL',
+ 'BSL-1.0',
+ 'NCSA',
+ // Common npm-only SPDX identifiers used by widely-bundled packages.
+ // CC-BY-4.0 is a Cat-A documentation license; some npm packages
+ // declare it for embedded asset metadata. Acceptable per ASF
+ // resolved.html.
+ 'CC-BY-4.0',
+ '0BSD',
+]);
+
+const args = process.argv.slice(2);
+const validateOnly = args[0] === '--validate-only';
+const inputPath = validateOnly ? args[1] : args[0];
+
+if (!inputPath) {
+ console.error('Usage: render-node-licenses.mjs [--validate-only]
<license-checker-json>');
+ process.exit(1);
+}
+
+const data = JSON.parse(readFileSync(inputPath, 'utf8'));
+
+if (validateOnly) {
+ validate(data);
+} else {
+ render(data);
+}
+
+function normalizeIdent(ident) {
+ // license-checker-rseidelsohn appends `*` to identifiers it inferred
+ // heuristically (e.g. `MIT*` when the SPDX expression is missing but
+ // a LICENSE-MIT file was found). Treat them as the underlying SPDX
+ // for allow-list comparison.
+ return ident.trim().replace(/\*$/, '');
+}
+
+function tokenizeSpdx(expr) {
+ // Strip parens, split on AND/OR, drop empty tokens. Preserve
+ // operator structure by returning a flat list along with the
+ // outermost operator found. This is a best-effort parser; cargo-about
+ // does the same simplification (full SPDX evaluator is overkill here
+ // and the ASF only requires that AT LEAST one acceptable license
+ // applies).
+ const cleaned = String(expr).replace(/[()]/g, ' ').trim();
+ if (!cleaned) return { op: 'NONE', operands: [] };
+
+ const hasOr = /\bOR\b/i.test(cleaned);
+ const hasAnd = /\bAND\b/i.test(cleaned);
+
+ // If only one operator type appears, split on it.
+ if (hasOr && !hasAnd) {
+ return {
+ op: 'OR',
+ operands: cleaned.split(/\s+OR\s+/i).map(s => s.trim()).filter(Boolean),
+ };
+ }
+ if (hasAnd && !hasOr) {
+ return {
+ op: 'AND',
+ operands: cleaned.split(/\s+AND\s+/i).map(s => s.trim()).filter(Boolean),
+ };
+ }
+ if (hasOr && hasAnd) {
+ // Mixed expression. Treat conservatively: split on OR first, each
+ // operand may contain AND. The expression passes if any OR operand
+ // (a conjunction) is fully allowed.
+ return {
+ op: 'OR',
+ operands: cleaned.split(/\s+OR\s+/i).map(s => s.trim()).filter(Boolean),
+ };
+ }
+ return { op: 'SINGLE', operands: [cleaned] };
+}
+
+function isAllowed(licensesField) {
+ if (!licensesField) return false;
+ const value = Array.isArray(licensesField) ? licensesField.join(' OR ') :
String(licensesField);
+ if (!value) return false;
+ if (/^UNKNOWN$|^UNLICENSED$/i.test(value.trim())) return false;
+
+ const { op, operands } = tokenizeSpdx(value);
+ if (operands.length === 0) return false;
+
+ switch (op) {
+ case 'OR':
+ return operands.some(operand => {
+ // Each operand may itself be an AND expression.
+ if (/\bAND\b/i.test(operand)) {
+ return operand.split(/\s+AND\s+/i).every(t =>
ALLOWED_LICENSES.has(normalizeIdent(t)));
+ }
+ return ALLOWED_LICENSES.has(normalizeIdent(operand));
+ });
+ case 'AND':
+ return operands.every(t => ALLOWED_LICENSES.has(normalizeIdent(t)));
+ case 'SINGLE':
+ return ALLOWED_LICENSES.has(normalizeIdent(operands[0]));
+ default:
+ return false;
+ }
+}
+
+function validate(pkgs) {
+ const violations = [];
+ for (const [pkg, info] of Object.entries(pkgs)) {
+ if (!isAllowed(info.licenses)) {
+ violations.push({ pkg, licenses: info.licenses ?? '(unknown)' });
+ }
+ }
+ if (violations.length > 0) {
+ console.error(`Disallowed npm license(s) detected (${violations.length}
package(s)):`);
+ for (const v of violations) {
+ console.error(` - ${v.pkg}: ${v.licenses}`);
+ }
+ console.error('');
+ console.error('Allowed SPDX identifiers are listed at the top of');
+ console.error('scripts/ci/render-node-licenses.mjs (mirrors about.toml).');
+ process.exit(1);
+ }
+ console.log(`OK: ${Object.keys(pkgs).length} npm package(s) validated
against the SPDX allow-list.`);
+}
+
+function render(pkgs) {
+ const out = [];
+ out.push('Apache Iggy (incubating) - Third-Party License Manifest (Node)');
+ out.push('================================================================');
+ out.push('');
+ out.push('The following npm production dependencies are bundled into this');
+ out.push('Apache Iggy (incubating) convenience binary artifact. Packages
are');
+ out.push('grouped by license; the canonical license text appears once per');
+ out.push('group as required by the Apache Software Foundation release
policy.');
+ out.push('');
+ out.push('Generated by license-checker-rseidelsohn from the package
manifest');
+ out.push('at build time. Does not apply to the official Apache source
release.');
+ out.push('');
+
+ // Group packages by license. Use the raw `licenses` field as the
+ // grouping key so that compound expressions ("(MIT OR Apache-2.0)")
+ // and Custom URLs each form their own bucket. Within a bucket the
+ // first package's license file text is treated as canonical; the
+ // others just contribute to the USED BY listing.
+ const groups = new Map();
+ for (const [pkg, info] of Object.entries(pkgs).sort()) {
+ const key = String(info.licenses ?? '(unknown)');
+ if (!groups.has(key)) {
+ groups.set(key, { canonicalText: null, members: [] });
+ }
+ const g = groups.get(key);
+ if (g.canonicalText === null && info.licenseFile &&
existsSync(info.licenseFile)) {
+ g.canonicalText = readFileSync(info.licenseFile, 'utf8').trimEnd();
+ }
+ g.members.push({ pkg, info });
+ }
+
+ // Emit groups in stable order (sorted by SPDX key).
+ for (const [licenseKey, group] of Array.from(groups.entries()).sort((a, b)
=> a[0].localeCompare(b[0]))) {
+
out.push('================================================================================');
+ out.push(`LICENSE: ${licenseKey} - used by ${group.members.length}
package(s)`);
+ out.push('USED BY:');
+ for (const { pkg, info } of group.members) {
+ let line = ` - ${pkg}`;
+ if (info.repository) line += ` (${info.repository})`;
+ out.push(line);
+ }
+
out.push('================================================================================');
+ out.push('');
+ out.push(group.canonicalText ?? '(no license text available; see SPDX
identifier above)');
+ out.push('');
+ out.push('');
+ }
+
+ process.stdout.write(out.join('\n'));
+}
diff --git a/scripts/ci/third-party-licenses.sh
b/scripts/ci/third-party-licenses.sh
new file mode 100755
index 000000000..93a6f0178
--- /dev/null
+++ b/scripts/ci/third-party-licenses.sh
@@ -0,0 +1,269 @@
+#!/bin/bash
+
+# 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.
+
+# Validate or generate a LICENSE-binary manifest for a convenience
+# binary artifact (Docker image, PyPI wheel, etc.). ASF release policy
+# requires that each artifact bundling third-party code carries a
+# license enumeration of the packages it actually bundles. This script
+# drives cargo-about (Rust) and license-checker-rseidelsohn (Node) to
+# produce that enumeration.
+#
+# Usage: third-party-licenses.sh <action> --manifest <path> [--manifest <path>
...] [--output <file>]
+#
+# Actions (exactly one required):
+# --validate Verify deps satisfy the accept list. No file written.
+# Exits non-zero on disallowed license.
+# --generate Render the manifest to --output.
+#
+# --manifest accepts:
+# * Path to a Cargo.toml -> Rust ecosystem
+# * Path to a directory containing package.json -> Node ecosystem
+#
+# Multiple --manifest flags are supported. Multiple Rust manifests are
+# rendered as a deduplicated union via a synthetic root crate. Multiple
+# Node manifests are concatenated. Mixed ecosystems concatenate the
+# Rust block first, Node block second.
+
+set -euo pipefail
+
+SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
+REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
+
+ACTION=""
+MANIFESTS=()
+OUTPUT=""
+
+usage() {
+ sed -n '/^# Usage:/,/^set -euo/{/^set -euo/d;p}' "$0" | sed 's/^# \{0,1\}//'
>&2
+}
+
+die() {
+ echo "error: $*" >&2
+ exit 1
+}
+
+while (($# > 0)); do
+ case "$1" in
+ --validate)
+ [[ -n "$ACTION" ]] && die "actions --validate and --generate are
mutually exclusive"
+ ACTION="validate"
+ shift
+ ;;
+ --generate)
+ [[ -n "$ACTION" ]] && die "actions --validate and --generate are
mutually exclusive"
+ ACTION="generate"
+ shift
+ ;;
+ --manifest)
+ [[ $# -lt 2 ]] && die "--manifest requires a path argument"
+ MANIFESTS+=("$2")
+ shift 2
+ ;;
+ --output)
+ [[ $# -lt 2 ]] && die "--output requires a file argument"
+ OUTPUT="$2"
+ shift 2
+ ;;
+ -h|--help)
+ usage
+ exit 0
+ ;;
+ *)
+ die "unknown argument: $1"
+ ;;
+ esac
+done
+
+[[ -z "$ACTION" ]] && { usage; die "missing action (--validate or
--generate)"; }
+[[ ${#MANIFESTS[@]} -eq 0 ]] && die "at least one --manifest is required"
+[[ "$ACTION" == "generate" && -z "$OUTPUT" ]] && die "--generate requires
--output"
+
+# Classify each manifest by ecosystem.
+RUST_MANIFESTS=()
+NODE_DIRS=()
+for m in "${MANIFESTS[@]}"; do
+ if [[ -f "$m" && "$(basename "$m")" == "Cargo.toml" ]]; then
+ RUST_MANIFESTS+=("$m")
+ elif [[ -d "$m" && -f "$m/package.json" ]]; then
+ NODE_DIRS+=("$m")
+ else
+ die "manifest does not look like a Cargo.toml or a directory containing
package.json: $m"
+ fi
+done
+
+require_cmd() {
+ command -v "$1" >/dev/null 2>&1 || die "required command not installed: $1"
+}
+
+SYNTH_DIR=""
+TMP_OUT=""
+NODE_FMT_FILE=""
+NODE_JSON_FILE=""
+
+cleanup() {
+ [[ -n "$SYNTH_DIR" && -d "$SYNTH_DIR" ]] && rm -rf "$SYNTH_DIR"
+ [[ -n "$TMP_OUT" && -f "$TMP_OUT" ]] && rm -f "$TMP_OUT"
+ [[ -n "$NODE_FMT_FILE" && -f "$NODE_FMT_FILE" ]] && rm -f "$NODE_FMT_FILE"
+ [[ -n "$NODE_JSON_FILE" && -f "$NODE_JSON_FILE" ]] && rm -f "$NODE_JSON_FILE"
+ return 0
+}
+trap cleanup EXIT
+
+# Resolve the Cargo.toml that cargo-about should target. For a single
+# Rust manifest, return it as-is. For multiple Rust manifests, build a
+# synthetic root crate under /tmp that path-deps onto each requested
+# member; cargo-about then renders the deduplicated union in a single
+# pass. The empty [workspace] table prevents the synthetic root from
+# attaching to any ancestor workspace.
+build_rust_target_manifest() {
+ local count=${#RUST_MANIFESTS[@]}
+ if (( count == 1 )); then
+ echo "${RUST_MANIFESTS[0]}"
+ return
+ fi
+
+ SYNTH_DIR="$(mktemp -d -t iggy-license-root-XXXXXX)"
+
+ {
+ printf '[workspace]\n\n'
+ printf '[package]\n'
+ printf 'name = "iggy-license-union"\n'
+ printf 'version = "0.0.0"\n'
+ printf 'edition = "2021"\n'
+ printf 'license = "Apache-2.0"\n'
+ printf 'publish = false\n\n'
+ printf '[dependencies]\n'
+ for m in "${RUST_MANIFESTS[@]}"; do
+ local crate_dir crate_name
+ crate_dir="$(cd "$(dirname "$m")" && pwd)"
+ crate_name="$(awk -F'"' '/^\[package\]/{p=1; next} p && /^name *=
*"/{print $2; exit}' "$m")"
+ [[ -z "$crate_name" ]] && die "could not extract package.name from $m"
+ printf '%s = { path = "%s" }\n' "$crate_name" "$crate_dir"
+ done
+ } > "$SYNTH_DIR/Cargo.toml"
+
+ mkdir -p "$SYNTH_DIR/src"
+ : > "$SYNTH_DIR/src/lib.rs"
+
+ echo "$SYNTH_DIR/Cargo.toml"
+}
+
+# Run cargo-about against the prepared manifest, writing the result to
+# the supplied path. Always invoked from REPO_ROOT so that
+# `--config about.toml` and the about.hbs template resolve correctly.
+# `--fail` makes a disallowed license abort with a non-zero exit code.
+run_cargo_about() {
+ local target_manifest="$1"
+ local out="$2"
+ require_cmd cargo-about
+
+ ( cd "$REPO_ROOT" && \
+ cargo about generate \
+ --config about.toml \
+ --manifest-path "$target_manifest" \
+ --fail \
+ -o "$out" \
+ about.hbs )
+}
+
+# Run license-checker-rseidelsohn against an npm package directory and
+# pipe the JSON through render-node-licenses.mjs in either render or
+# validate-only mode.
+run_node_about() {
+ local pkg_dir="$1"
+ local mode="$2" # render | validate
+ local out="$3"
+ require_cmd node
+ require_cmd npx
+
+ NODE_FMT_FILE="$(mktemp)"
+ NODE_JSON_FILE="$(mktemp)"
+
+ echo '{"licenseFile": ""}' > "$NODE_FMT_FILE"
+
+ # Exclude the root package itself from the manifest: it is the
+ # artifact we are licensing, not a third-party dependency. Without
+ # this, an UNLICENSED root (private app workspace) would fail
+ # validation against the third-party allow-list.
+ local pkg_dir_abs root_pkg
+ pkg_dir_abs="$(cd "$pkg_dir" && pwd)"
+ root_pkg="$(node -e "const p=require('$pkg_dir_abs/package.json');
process.stdout.write(p.name+'@'+p.version)")"
+
+ npx -y license-checker-rseidelsohn@latest \
+ --production \
+ --json \
+ --start "$pkg_dir" \
+ --excludePackages "$root_pkg" \
+ --customPath "$NODE_FMT_FILE" > "$NODE_JSON_FILE"
+
+ if [[ "$mode" == "validate" ]]; then
+ node "$SCRIPT_DIR/render-node-licenses.mjs" --validate-only
"$NODE_JSON_FILE"
+ else
+ node "$SCRIPT_DIR/render-node-licenses.mjs" "$NODE_JSON_FILE" >> "$out"
+ fi
+}
+
+case "$ACTION" in
+ validate)
+ TMP_OUT="$(mktemp)"
+ failures=()
+
+ if (( ${#RUST_MANIFESTS[@]} > 0 )); then
+ target="$(build_rust_target_manifest)"
+ echo "Validating Rust manifests: ${RUST_MANIFESTS[*]}"
+ if ! run_cargo_about "$target" "$TMP_OUT"; then
+ failures+=("rust: ${RUST_MANIFESTS[*]}")
+ fi
+ fi
+
+ for d in "${NODE_DIRS[@]}"; do
+ echo "Validating Node manifest: $d"
+ if ! run_node_about "$d" validate "$TMP_OUT"; then
+ failures+=("node: $d")
+ fi
+ done
+
+ if (( ${#failures[@]} > 0 )); then
+ echo "" >&2
+ echo "Validation failed for:" >&2
+ for f in "${failures[@]}"; do
+ echo " - $f" >&2
+ done
+ exit 1
+ fi
+ echo "All manifests pass third-party license validation."
+ ;;
+
+ generate)
+ : > "$OUTPUT"
+
+ if (( ${#RUST_MANIFESTS[@]} > 0 )); then
+ target="$(build_rust_target_manifest)"
+ echo "Generating Rust manifest section: ${RUST_MANIFESTS[*]}"
+ run_cargo_about "$target" "$OUTPUT"
+ fi
+
+ for d in "${NODE_DIRS[@]}"; do
+ echo "Generating Node manifest section: $d"
+ run_node_about "$d" render "$OUTPUT"
+ done
+
+ echo "Done. Wrote $OUTPUT"
+ ;;
+esac
diff --git a/scripts/prepare-release.sh b/scripts/prepare-release.sh
index 6a24ff88f..8e289f070 100755
--- a/scripts/prepare-release.sh
+++ b/scripts/prepare-release.sh
@@ -50,11 +50,12 @@ ARCHIVE_NAME="iggy-${VERSION}-incubating-src.tar.gz"
RELEASE_PATHS=(
"Cargo.lock"
"Cargo.toml"
- "DEPENDENCIES.md"
"DISCLAIMER"
"Dockerfile"
"LICENSE"
"NOTICE"
+ "about.hbs"
+ "about.toml"
"docker-compose.yml"
"justfile"
"bdd"
diff --git a/web/.dockerignore b/web/.dockerignore
index e448e6fc5..d0660c087 100644
--- a/web/.dockerignore
+++ b/web/.dockerignore
@@ -12,6 +12,5 @@ node_modules/
*.log
docker-compose.yml
Dockerfile
-LICENSE
makefile
-README.md
\ No newline at end of file
+README.md
diff --git a/web/Dockerfile b/web/Dockerfile
index 6ebd70079..f7348223d 100644
--- a/web/Dockerfile
+++ b/web/Dockerfile
@@ -27,26 +27,52 @@
# or stability of the code, it does indicate that the project has yet to be
# fully endorsed by the ASF.
+# Build context for this Dockerfile is the repository root (NOT web/), so
+# that the consolidated scripts/ci/third-party-licenses.sh and its renderer
+# are reachable. See .github/actions/utils/docker-buildx/action.yml.
+
FROM node:lts-alpine AS deps
WORKDIR /app
-COPY package*.json ./
+COPY web/package*.json ./
RUN npm ci --prefer-offline --no-audit
FROM node:lts-alpine AS builder
WORKDIR /app
+# bash required by scripts/ci/third-party-licenses.sh; node:lts-alpine
+# ships only ash by default. curl + tar used to fetch cargo-about
+# (third-party-licenses.sh autodetects rust manifests vs node manifest;
+# the web Dockerfile only feeds it a node manifest, so cargo-about is
+# not actually invoked here, but bash is.)
+RUN apk add --no-cache bash
+
COPY --from=deps /app/node_modules ./node_modules
-COPY . .
+COPY web/ ./
RUN npm run build
+
+# Generate LICENSE-binary for the production npm dependencies bundled
+# into this image. Required by ASF release policy: convenience binaries
+# that bundle third-party code MUST include the full license text of
+# every bundled package inside the artifact. Uses the same consolidated
+# script and SPDX allow-list that the pre-merge `--validate` gate uses,
+# so the published image cannot diverge from policy.
+COPY scripts/ci/third-party-licenses.sh
/opt/iggy/scripts/ci/third-party-licenses.sh
+COPY scripts/ci/render-node-licenses.mjs
/opt/iggy/scripts/ci/render-node-licenses.mjs
+RUN /opt/iggy/scripts/ci/third-party-licenses.sh --generate \
+ --manifest /app \
+ --output /app/LICENSE-binary
+
FROM node:lts-alpine AS production
WORKDIR /app
-COPY package*.json ./
+COPY web/package*.json ./
RUN npm ci --production --prefer-offline --no-audit
COPY --from=builder /app/build ./build
+COPY --from=builder /app/LICENSE-binary
/usr/share/doc/iggy-web-ui/LICENSE-binary
+COPY LICENSE NOTICE /usr/share/doc/iggy-web-ui/
USER node
EXPOSE 3050
diff --git a/web/LICENSE b/web/LICENSE
deleted file mode 100644
index 9c8f3ea08..000000000
--- a/web/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "{}"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright {yyyy} {name of copyright owner}
-
- Licensed 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.
\ No newline at end of file
diff --git a/web/NOTICE b/web/NOTICE
deleted file mode 100644
index 61a3be1eb..000000000
--- a/web/NOTICE
+++ /dev/null
@@ -1,19 +0,0 @@
-Apache Iggy (Incubating)
-Copyright 2026 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-================================================================
-
-This product includes various dependencies and code components that are
subject to separate copyright notices and license terms.
-Your use of these components is governed by their respective licenses.
-For a complete list of dependencies, including their licenses and repository
links,
-please refer to the DEPENDENCIES file.
-
-================================================================
-
-The Iggy project code was originally created, designed, developed by Piotr
Gankiewicz in April 2023.
-It was released as an open-source project under MIT License, later converted
to Apache 2.0 License,
-and donated by LaserData, Inc. to the Apache Software Foundation (ASF) in
February 2025.
-Copyright April 2023 - February 2025 Piotr Gankiewicz, LaserData, Inc.
diff --git a/web/package-lock.json b/web/package-lock.json
index 3aa3aad33..231c138e7 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -12,7 +12,6 @@
"@tailwindcss/postcss": "^4.2.4",
"d3-interpolate": "^3.0.1",
"date-fns": "^4.1.0",
- "gsap": "^3.15.0",
"json-bigint": "^1.0.0",
"parse-duration": "^2.1.6",
"svelte-headlessui": "^0.0.46",
@@ -3046,12 +3045,6 @@
"integrity":
"sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"license": "ISC"
},
- "node_modules/gsap": {
- "version": "3.15.0",
- "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.15.0.tgz",
- "integrity":
"sha512-dMW4CWBTUK1AEEDeZc1g4xpPGIrSf9fJF960qbTZmN/QwZIWY5wgliS6JWl9/25fpTGJrMRtSjGtOmPnfjZB+A==",
- "license": "Standard 'no charge' license:
https://gsap.com/standard-license."
- },
"node_modules/hasown": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
diff --git a/web/package.json b/web/package.json
index 5064352ee..4ced8892e 100644
--- a/web/package.json
+++ b/web/package.json
@@ -49,7 +49,6 @@
"@tailwindcss/postcss": "^4.2.4",
"d3-interpolate": "^3.0.1",
"date-fns": "^4.1.0",
- "gsap": "^3.15.0",
"json-bigint": "^1.0.0",
"parse-duration": "^2.1.6",
"svelte-headlessui": "^0.0.46",