"...git@developer.sourcefind.cn:2222/OpenDAS/vllm_cscc.git" did not exist on "dc48ba0c750e176f6314504cc0e8370a46ed01a8"
Unverified Commit 01a4b6d6 authored by Harrison Saturley-Hall's avatar Harrison Saturley-Hall Committed by GitHub
Browse files

chore: bump dynamo version numbers (#8191)

parent 6d4d0a61
...@@ -181,8 +181,6 @@ jobs: ...@@ -181,8 +181,6 @@ jobs:
ACCOUNT_ID="$(aws sts get-caller-identity --query Account --output text)" ACCOUNT_ID="$(aws sts get-caller-identity --query Account --output text)"
ECR_HOSTNAME="${ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com" ECR_HOSTNAME="${ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com"
ARCHITECTURES=("amd64" "arm64")
echo "========================================" echo "========================================"
echo "Copying images from ECR to NGC (registry-to-registry)" echo "Copying images from ECR to NGC (registry-to-registry)"
echo "Source commit SHA: ${COMMIT_SHA}" echo "Source commit SHA: ${COMMIT_SHA}"
...@@ -190,14 +188,11 @@ jobs: ...@@ -190,14 +188,11 @@ jobs:
echo "========================================" echo "========================================"
copy_image() { copy_image() {
local SRC="$1" DST="$2" LABEL="$3" PLATFORM="${4:-}" local SRC="$1" DST="$2" LABEL="$3"
local PLATFORM_ARG=""
if [ -n "${PLATFORM}" ]; then
PLATFORM_ARG="--platform ${PLATFORM}"
fi
echo "----------------------------------------" echo "----------------------------------------"
echo "Copying: ${LABEL}" echo "Copying: ${LABEL}"
if crane copy ${PLATFORM_ARG} "${SRC}" "${DST}"; then # crane copy preserves multi-arch manifest lists by default (no --platform needed)
if crane copy "${SRC}" "${DST}"; then
echo " Copied: ${LABEL}" echo " Copied: ${LABEL}"
SUCCESSFUL_COPIES+=("${LABEL}") SUCCESSFUL_COPIES+=("${LABEL}")
return 0 return 0
...@@ -208,36 +203,15 @@ jobs: ...@@ -208,36 +203,15 @@ jobs:
fi fi
} }
create_manifest() {
local MANIFEST="$1" AMD64_IMG="$2" ARM64_IMG="$3" LABEL="$4"
echo "Creating manifest: ${MANIFEST}"
docker manifest create "${MANIFEST}" "${AMD64_IMG}" "${ARM64_IMG}" || true
if docker manifest push "${MANIFEST}"; then
echo " Created multi-arch: ${LABEL}"
SUCCESSFUL_COPIES+=("${LABEL} (multi-arch)")
else
echo " Failed to create multi-arch: ${LABEL}"
FAILED_COPIES+=("${LABEL} (multi-arch)")
fi
}
# ---- CUDA 12 runtime images (vllm and sglang) ---- # ---- CUDA 12 runtime images (vllm and sglang) ----
echo "" echo ""
echo "=== CUDA 12 Runtime Images (vllm, sglang) ===" echo "=== CUDA 12 Runtime Images (vllm, sglang) ==="
CUDA12_FRAMEWORKS=("vllm" "sglang") CUDA12_FRAMEWORKS=("vllm" "sglang")
for FRAMEWORK in "${CUDA12_FRAMEWORKS[@]}"; do for FRAMEWORK in "${CUDA12_FRAMEWORKS[@]}"; do
NGC_NAME="${FRAMEWORK}-runtime" NGC_NAME="${FRAMEWORK}-runtime"
for ARCH in "${ARCHITECTURES[@]}"; do SOURCE="${ECR_HOSTNAME}/${REGISTRY_IMAGE}:${COMMIT_SHA}-${FRAMEWORK}-runtime-cuda12"
SOURCE="${ECR_HOSTNAME}/${REGISTRY_IMAGE}:${COMMIT_SHA}-${FRAMEWORK}-runtime-cuda12" TARGET="${NGC_REGISTRY}/${NGC_ORG}/ai-dynamo/${NGC_NAME}:${NGC_VERSION_TAG}"
TARGET="${NGC_REGISTRY}/${NGC_ORG}/ai-dynamo/${NGC_NAME}:${NGC_VERSION_TAG}-${ARCH}" copy_image "${SOURCE}" "${TARGET}" "${NGC_NAME}:${NGC_VERSION_TAG}"
copy_image "${SOURCE}" "${TARGET}" "${NGC_NAME}:${NGC_VERSION_TAG}-${ARCH}" "linux/${ARCH}"
done
create_manifest \
"${NGC_REGISTRY}/${NGC_ORG}/ai-dynamo/${NGC_NAME}:${NGC_VERSION_TAG}" \
"${NGC_REGISTRY}/${NGC_ORG}/ai-dynamo/${NGC_NAME}:${NGC_VERSION_TAG}-amd64" \
"${NGC_REGISTRY}/${NGC_ORG}/ai-dynamo/${NGC_NAME}:${NGC_VERSION_TAG}-arm64" \
"${NGC_NAME}:${NGC_VERSION_TAG}"
done done
# ---- CUDA 13 runtime images (vllm, sglang, trtllm) ---- # ---- CUDA 13 runtime images (vllm, sglang, trtllm) ----
...@@ -251,17 +225,9 @@ jobs: ...@@ -251,17 +225,9 @@ jobs:
NGC_NAME="${FRAMEWORK}-runtime" NGC_NAME="${FRAMEWORK}-runtime"
fi fi
for ARCH in "${ARCHITECTURES[@]}"; do SOURCE="${ECR_HOSTNAME}/${REGISTRY_IMAGE}:${COMMIT_SHA}-${FRAMEWORK}-runtime-cuda13"
SOURCE="${ECR_HOSTNAME}/${REGISTRY_IMAGE}:${COMMIT_SHA}-${FRAMEWORK}-runtime-cuda13" TARGET="${NGC_REGISTRY}/${NGC_ORG}/ai-dynamo/${NGC_NAME}:${NGC_VERSION_TAG}-cuda13"
TARGET="${NGC_REGISTRY}/${NGC_ORG}/ai-dynamo/${NGC_NAME}:${NGC_VERSION_TAG}-cuda13-${ARCH}" copy_image "${SOURCE}" "${TARGET}" "${NGC_NAME}:${NGC_VERSION_TAG}-cuda13"
copy_image "${SOURCE}" "${TARGET}" "${NGC_NAME}:${NGC_VERSION_TAG}-cuda13-${ARCH}" "linux/${ARCH}"
done
create_manifest \
"${NGC_REGISTRY}/${NGC_ORG}/ai-dynamo/${NGC_NAME}:${NGC_VERSION_TAG}-cuda13" \
"${NGC_REGISTRY}/${NGC_ORG}/ai-dynamo/${NGC_NAME}:${NGC_VERSION_TAG}-cuda13-amd64" \
"${NGC_REGISTRY}/${NGC_ORG}/ai-dynamo/${NGC_NAME}:${NGC_VERSION_TAG}-cuda13-arm64" \
"${NGC_NAME}:${NGC_VERSION_TAG}-cuda13"
done done
# ---- EFA runtime images (amd64 only, no multi-arch manifest needed) ---- # ---- EFA runtime images (amd64 only, no multi-arch manifest needed) ----
...@@ -392,13 +358,13 @@ jobs: ...@@ -392,13 +358,13 @@ jobs:
echo "### Expected Images" >> $GITHUB_STEP_SUMMARY echo "### Expected Images" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY
echo "Runtime images (CUDA 12 - default):" >> $GITHUB_STEP_SUMMARY echo "Runtime images (CUDA 12 - default):" >> $GITHUB_STEP_SUMMARY
echo "- \`vllm-runtime:${NGC_VERSION_TAG}\` (multi-arch)" >> $GITHUB_STEP_SUMMARY echo "- \`vllm-runtime:${NGC_VERSION_TAG}\`" >> $GITHUB_STEP_SUMMARY
echo "- \`sglang-runtime:${NGC_VERSION_TAG}\` (multi-arch)" >> $GITHUB_STEP_SUMMARY echo "- \`sglang-runtime:${NGC_VERSION_TAG}\`" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY
echo "Runtime images (CUDA 13):" >> $GITHUB_STEP_SUMMARY echo "Runtime images (CUDA 13):" >> $GITHUB_STEP_SUMMARY
echo "- \`vllm-runtime:${NGC_VERSION_TAG}-cuda13\` (multi-arch)" >> $GITHUB_STEP_SUMMARY echo "- \`vllm-runtime:${NGC_VERSION_TAG}-cuda13\`" >> $GITHUB_STEP_SUMMARY
echo "- \`sglang-runtime:${NGC_VERSION_TAG}-cuda13\` (multi-arch)" >> $GITHUB_STEP_SUMMARY echo "- \`sglang-runtime:${NGC_VERSION_TAG}-cuda13\`" >> $GITHUB_STEP_SUMMARY
echo "- \`tensorrtllm-runtime:${NGC_VERSION_TAG}-cuda13\` (multi-arch)" >> $GITHUB_STEP_SUMMARY echo "- \`tensorrtllm-runtime:${NGC_VERSION_TAG}-cuda13\`" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY
echo "EFA runtime images (amd64 only):" >> $GITHUB_STEP_SUMMARY echo "EFA runtime images (amd64 only):" >> $GITHUB_STEP_SUMMARY
echo "- \`vllm-runtime:${NGC_VERSION_TAG}-efa\`" >> $GITHUB_STEP_SUMMARY echo "- \`vllm-runtime:${NGC_VERSION_TAG}-efa\`" >> $GITHUB_STEP_SUMMARY
......
...@@ -2310,7 +2310,7 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" ...@@ -2310,7 +2310,7 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
[[package]] [[package]]
name = "dynamo-bench" name = "dynamo-bench"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-trait", "async-trait",
...@@ -2343,14 +2343,14 @@ dependencies = [ ...@@ -2343,14 +2343,14 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-config" name = "dynamo-config"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
] ]
[[package]] [[package]]
name = "dynamo-kv-router" name = "dynamo-kv-router"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-trait", "async-trait",
...@@ -2383,7 +2383,7 @@ dependencies = [ ...@@ -2383,7 +2383,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-llm" name = "dynamo-llm"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"aho-corasick", "aho-corasick",
"aligned-vec", "aligned-vec",
...@@ -2483,7 +2483,7 @@ dependencies = [ ...@@ -2483,7 +2483,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-memory" name = "dynamo-memory"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"cudarc", "cudarc",
...@@ -2501,7 +2501,7 @@ dependencies = [ ...@@ -2501,7 +2501,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-mocker" name = "dynamo-mocker"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"dashmap", "dashmap",
...@@ -2530,7 +2530,7 @@ dependencies = [ ...@@ -2530,7 +2530,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-parsers" name = "dynamo-parsers"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"dynamo-protocols", "dynamo-protocols",
...@@ -2548,7 +2548,7 @@ dependencies = [ ...@@ -2548,7 +2548,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-protocols" name = "dynamo-protocols"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"async-openai", "async-openai",
"derive_builder", "derive_builder",
...@@ -2565,7 +2565,7 @@ dependencies = [ ...@@ -2565,7 +2565,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-runtime" name = "dynamo-runtime"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"arc-swap", "arc-swap",
...@@ -2640,7 +2640,7 @@ dependencies = [ ...@@ -2640,7 +2640,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-tokens" name = "dynamo-tokens"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"bs58", "bs58",
"bytemuck", "bytemuck",
...@@ -4455,7 +4455,7 @@ dependencies = [ ...@@ -4455,7 +4455,7 @@ dependencies = [
[[package]] [[package]]
name = "kvbm-common" name = "kvbm-common"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"dynamo-tokens", "dynamo-tokens",
"serde", "serde",
...@@ -4463,7 +4463,7 @@ dependencies = [ ...@@ -4463,7 +4463,7 @@ dependencies = [
[[package]] [[package]]
name = "kvbm-config" name = "kvbm-config"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"dynamo-memory", "dynamo-memory",
...@@ -4483,7 +4483,7 @@ dependencies = [ ...@@ -4483,7 +4483,7 @@ dependencies = [
[[package]] [[package]]
name = "kvbm-engine" name = "kvbm-engine"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-nats", "async-nats",
...@@ -4523,7 +4523,7 @@ dependencies = [ ...@@ -4523,7 +4523,7 @@ dependencies = [
[[package]] [[package]]
name = "kvbm-kernels" name = "kvbm-kernels"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"clap 4.6.0", "clap 4.6.0",
"cudarc", "cudarc",
...@@ -4534,7 +4534,7 @@ dependencies = [ ...@@ -4534,7 +4534,7 @@ dependencies = [
[[package]] [[package]]
name = "kvbm-logical" name = "kvbm-logical"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-stream", "async-stream",
...@@ -4564,7 +4564,7 @@ dependencies = [ ...@@ -4564,7 +4564,7 @@ dependencies = [
[[package]] [[package]]
name = "kvbm-physical" name = "kvbm-physical"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"aligned-vec", "aligned-vec",
"anyhow", "anyhow",
...@@ -4620,7 +4620,7 @@ checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" ...@@ -4620,7 +4620,7 @@ checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af"
[[package]] [[package]]
name = "libdynamo_llm" name = "libdynamo_llm"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-once-cell", "async-once-cell",
......
...@@ -25,7 +25,7 @@ members = [ ...@@ -25,7 +25,7 @@ members = [
resolver = "3" resolver = "3"
[workspace.package] [workspace.package]
version = "1.0.0" version = "1.1.0"
edition = "2024" edition = "2024"
description = "Dynamo Inference Framework" description = "Dynamo Inference Framework"
authors = ["NVIDIA Inc. <sw-dl-dynamo@nvidia.com>"] authors = ["NVIDIA Inc. <sw-dl-dynamo@nvidia.com>"]
...@@ -36,25 +36,25 @@ keywords = ["llm", "genai", "inference", "nvidia", "distributed"] ...@@ -36,25 +36,25 @@ keywords = ["llm", "genai", "inference", "nvidia", "distributed"]
[workspace.dependencies] [workspace.dependencies]
# Local crates # Local crates
dynamo-runtime = { path = "lib/runtime", version = "1.0.0" } dynamo-runtime = { path = "lib/runtime", version = "1.1.0" }
dynamo-llm = { path = "lib/llm", version = "1.0.0" } dynamo-llm = { path = "lib/llm", version = "1.1.0" }
dynamo-config = { path = "lib/config", version = "1.0.0" } dynamo-config = { path = "lib/config", version = "1.1.0" }
dynamo-tokens = { path = "lib/tokens", version = "1.0.0" } dynamo-tokens = { path = "lib/tokens", version = "1.1.0" }
dynamo-memory = { path = "lib/memory", version = "1.0.0" } dynamo-memory = { path = "lib/memory", version = "1.1.0" }
dynamo-mocker = { path = "lib/mocker", version = "1.0.0" } dynamo-mocker = { path = "lib/mocker", version = "1.1.0" }
dynamo-kv-router = { path = "lib/kv-router", version = "1.0.0", features = ["metrics", "runtime-protocols"] } dynamo-kv-router = { path = "lib/kv-router", version = "1.1.0", features = ["metrics", "runtime-protocols"] }
dynamo-protocols = { path = "lib/protocols", version = "1.0.0" } dynamo-protocols = { path = "lib/protocols", version = "1.1.0" }
dynamo-parsers = { path = "lib/parsers", version = "1.0.0" } dynamo-parsers = { path = "lib/parsers", version = "1.1.0" }
fastokens = { version = "0.1.0" } fastokens = { version = "0.1.0" }
# kvbm # kvbm
kvbm-common = { path = "lib/kvbm-common", version = "1.0.0" } kvbm-common = { path = "lib/kvbm-common", version = "1.1.0" }
kvbm-config = { path = "lib/kvbm-config", version = "1.0.0" } kvbm-config = { path = "lib/kvbm-config", version = "1.1.0" }
kvbm-engine = { path = "lib/kvbm-engine", version = "1.0.0" } kvbm-engine = { path = "lib/kvbm-engine", version = "1.1.0" }
kvbm-kernels = { path = "lib/kvbm-kernels", version = "1.0.0" } kvbm-kernels = { path = "lib/kvbm-kernels", version = "1.1.0" }
kvbm-logical = { path = "lib/kvbm-logical", version = "1.0.0" } kvbm-logical = { path = "lib/kvbm-logical", version = "1.1.0" }
kvbm-physical = { path = "lib/kvbm-physical", version = "1.0.0" } kvbm-physical = { path = "lib/kvbm-physical", version = "1.1.0" }
# velo # velo
velo = { version = "0.1.0" } velo = { version = "0.1.0" }
......
This diff is collapsed.
#!/usr/bin/env python3
# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
"""Generate a dependency CSV (and optional attribution markdown) for Rust crates.
Extracts external Rust dependencies from one or more Cargo workspaces using
``cargo metadata`` and writes a CSV with dependency type, package name,
version, SPDX license identifier, and repository URL. Optionally generates
an attribution markdown file with full license texts.
Usage:
python generate_rust_deps.py -o rust_deps.csv
python generate_rust_deps.py --attributions ATTRIBUTIONS-Rust.md
python generate_rust_deps.py -o rust_deps.csv --attributions attr.md -v
"""
import argparse
import csv
import json
import logging
import re
import subprocess
import sys
from pathlib import Path
_SCRIPT_DIR = Path(__file__).resolve().parent
_REPO_ROOT = _SCRIPT_DIR.parent.parent
log = logging.getLogger(__name__)
FIELDNAMES = ["dependency_type", "package_name", "version", "spdx_license", "repo_url"]
DEFAULT_MANIFEST_PATHS = [
"Cargo.toml",
"lib/bindings/python/Cargo.toml",
"lib/bindings/kvbm/Cargo.toml",
]
_LICENSE_NAMES = [
"LICENSE",
"LICENSE.md",
"LICENSE.txt",
"LICENSE-MIT",
"LICENSE-APACHE",
"LICENCE",
"LICENCE.md",
"LICENCE.txt",
"COPYING",
"COPYING.md",
]
_ATTRIBUTION_PREAMBLE = """\
<!--
SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
SPDX-License-Identifier: Apache-2.0
-->
# Third-Party Software Attributions
This project uses the following third-party libraries. Each library is \
open-source and licensed under the terms indicated below.
This file is automatically generated. Please do not edit it directly.
"""
def get_cargo_metadata(manifest_path: Path, cargo_cmd: str) -> dict:
"""Run ``cargo metadata`` and return the parsed JSON."""
cmd = [
cargo_cmd,
"metadata",
"--format-version",
"1",
"--locked",
"--manifest-path",
str(manifest_path),
]
log.debug("Running: %s", " ".join(cmd))
result = subprocess.run(cmd, capture_output=True, text=True, timeout=300)
if result.returncode != 0:
log.error(
"cargo metadata failed (exit %d) for %s: %s",
result.returncode,
manifest_path,
result.stderr,
)
raise RuntimeError(
f"cargo metadata failed for {manifest_path}: {result.stderr}"
)
return json.loads(result.stdout)
def extract_external_deps(metadata: dict) -> list[dict[str, str]]:
"""Extract external (non-workspace, non-local) dependencies from cargo metadata."""
workspace_member_ids = set(metadata.get("workspace_members", []))
packages = []
for pkg in metadata.get("packages", []):
# Skip workspace members (local crates)
if pkg["id"] in workspace_member_ids:
continue
# Skip path-only dependencies (local crates outside the workspace)
if pkg.get("source") is None:
continue
repo_url = pkg.get("repository") or ""
if not repo_url:
repo_url = f"https://crates.io/crates/{pkg['name']}"
packages.append(
{
"dependency_type": "rust",
"package_name": pkg["name"],
"version": pkg["version"],
"spdx_license": pkg.get("license") or "UNKNOWN",
"repo_url": repo_url,
"manifest_path": pkg.get("manifest_path", ""),
}
)
return packages
def deduplicate(entries: list[dict[str, str]]) -> list[dict[str, str]]:
"""Deduplicate entries by (package_name, version)."""
seen: dict[tuple[str, str], dict[str, str]] = {}
for entry in entries:
key = (entry["package_name"], entry["version"])
if key not in seen:
seen[key] = entry
return list(seen.values())
def _find_license_text(directory: Path) -> str:
"""Find and read a license file in *directory*."""
for name in _LICENSE_NAMES:
path = directory / name
if path.is_file():
return path.read_text(errors="replace").rstrip()
return ""
def _raw_license_url(repo_url: str, license_filename: str = "LICENSE") -> str:
"""Convert a GitHub/GitLab repo URL to a raw license URL for display."""
m = re.match(r"https://github\.com/([^/]+/[^/]+)", repo_url)
if m:
return f"https://raw.githubusercontent.com/{m.group(1)}/HEAD/{license_filename}"
return repo_url
def write_attributions_md(packages: list[dict[str, str]], output_path: str) -> None:
"""Write a markdown attribution file following the ATTRIBUTIONS-Rust.md style."""
sorted_packages = sorted(
packages, key=lambda p: (p["package_name"].lower(), p["version"])
)
lines = [_ATTRIBUTION_PREAMBLE]
found = 0
for pkg in sorted_packages:
manifest = pkg.get("manifest_path", "")
license_text = ""
license_filename = "LICENSE"
if manifest:
pkg_dir = Path(manifest).parent
for name in _LICENSE_NAMES:
path = pkg_dir / name
if path.is_file():
license_text = path.read_text(errors="replace").rstrip()
license_filename = name
break
raw_url = _raw_license_url(pkg["repo_url"], license_filename)
lines.append(f"\n## {pkg['package_name']} - {pkg['version']}")
lines.append(f"**Repository URL**: {pkg['repo_url']}")
lines.append(f"**License Type(s)**: {pkg['spdx_license']}")
lines.append(f"### License: {raw_url}")
if license_text:
lines.append(f"```\n{license_text}\n```")
found += 1
else:
lines.append("```\nLicense text not available locally.\n```")
with open(output_path, "w") as f:
f.write("\n".join(lines) + "\n")
log.info(
"Wrote attribution markdown to %s (%d/%d with license text)",
output_path,
found,
len(sorted_packages),
)
def write_csv(packages: list[dict[str, str]], output_path: str | None) -> None:
"""Write packages to CSV, sorted by package_name."""
sorted_packages = sorted(packages, key=lambda p: p["package_name"])
if output_path:
with open(output_path, "w", newline="") as f:
writer = csv.DictWriter(f, fieldnames=FIELDNAMES, extrasaction="ignore")
writer.writeheader()
writer.writerows(sorted_packages)
log.info("Wrote %d entries to %s", len(sorted_packages), output_path)
else:
writer = csv.DictWriter(
sys.stdout, fieldnames=FIELDNAMES, extrasaction="ignore"
)
writer.writeheader()
writer.writerows(sorted_packages)
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(
description="Generate a dependency CSV for Rust crates in the workspace",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
Examples:
%(prog)s -o rust_deps.csv
%(prog)s --manifest-paths Cargo.toml -o rust_deps.csv
%(prog)s -v
""",
)
parser.add_argument(
"--output",
"-o",
help="Output CSV file path (default: stdout)",
)
parser.add_argument(
"--attributions",
help="Output attribution markdown file path (e.g. ATTRIBUTIONS-Rust.md)",
)
parser.add_argument(
"--manifest-paths",
default=",".join(DEFAULT_MANIFEST_PATHS),
help=(
"Comma-separated Cargo.toml paths relative to repo root "
f"(default: {','.join(DEFAULT_MANIFEST_PATHS)})"
),
)
parser.add_argument(
"--cargo-cmd",
default="cargo",
help="Path to cargo binary (default: cargo)",
)
parser.add_argument(
"--verbose",
"-v",
action="store_true",
help="Enable verbose logging",
)
return parser.parse_args()
def main() -> None:
args = parse_args()
logging.basicConfig(
level=logging.DEBUG if args.verbose else logging.INFO,
format="%(levelname)s: %(message)s",
stream=sys.stderr,
)
manifest_paths = [p.strip() for p in args.manifest_paths.split(",") if p.strip()]
all_entries: list[dict[str, str]] = []
for rel_path in manifest_paths:
abs_path = _REPO_ROOT / rel_path
if not abs_path.is_file():
log.warning("Manifest not found, skipping: %s", abs_path)
continue
log.info("Scanning %s ...", rel_path)
try:
metadata = get_cargo_metadata(abs_path, args.cargo_cmd)
except (RuntimeError, FileNotFoundError) as exc:
log.error("Failed to get metadata for %s: %s", rel_path, exc)
sys.exit(1)
entries = extract_external_deps(metadata)
log.info("Found %d external deps in %s", len(entries), rel_path)
all_entries.extend(entries)
deduplicated = deduplicate(all_entries)
log.info("Total unique Rust dependencies: %d", len(deduplicated))
if args.output or not args.attributions:
write_csv(deduplicated, args.output)
if args.attributions:
write_attributions_md(deduplicated, args.attributions)
if __name__ == "__main__":
main()
...@@ -19,11 +19,11 @@ maintainers: ...@@ -19,11 +19,11 @@ maintainers:
url: https://www.nvidia.com url: https://www.nvidia.com
description: A Helm chart for NVIDIA Dynamo Platform. description: A Helm chart for NVIDIA Dynamo Platform.
type: application type: application
version: 1.0.0 version: 1.1.0
home: https://nvidia.com home: https://nvidia.com
dependencies: dependencies:
- name: dynamo-operator - name: dynamo-operator
version: 1.0.0 version: 1.1.0
repository: file://components/operator repository: file://components/operator
condition: dynamo-operator.enabled condition: dynamo-operator.enabled
- name: nats - name: nats
......
...@@ -19,7 +19,7 @@ limitations under the License. ...@@ -19,7 +19,7 @@ limitations under the License.
A Helm chart for NVIDIA Dynamo Platform. A Helm chart for NVIDIA Dynamo Platform.
![Version: 1.0.0](https://img.shields.io/badge/Version-1.0.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![Version: 1.1.0](https://img.shields.io/badge/Version-1.1.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square)
## 🚀 Overview ## 🚀 Overview
...@@ -97,7 +97,7 @@ The chart includes built-in validation to prevent all operator conflicts: ...@@ -97,7 +97,7 @@ The chart includes built-in validation to prevent all operator conflicts:
| Repository | Name | Version | | Repository | Name | Version |
|------------|------|---------| |------------|------|---------|
| file://components/operator | dynamo-operator | 1.0.0 | | file://components/operator | dynamo-operator | 1.1.0 |
| https://charts.bitnami.com/bitnami | etcd | 12.0.18 | | https://charts.bitnami.com/bitnami | etcd | 12.0.18 |
| https://nats-io.github.io/k8s/helm/charts/ | nats | 1.3.2 | | https://nats-io.github.io/k8s/helm/charts/ | nats | 1.3.2 |
| oci://ghcr.io/ai-dynamo/grove | grove(grove-charts) | v0.1.0-alpha.7 | | oci://ghcr.io/ai-dynamo/grove | grove(grove-charts) | v0.1.0-alpha.7 |
......
...@@ -27,9 +27,9 @@ type: application ...@@ -27,9 +27,9 @@ type: application
# This is the chart version. This version number should be incremented each time you make changes # This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version. # to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/) # Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 1.0.0 version: 1.1.0
# This is the version number of the application being deployed. This version number should be # This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to # incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using. # follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes. # It is recommended to use it with quotes.
appVersion: "1.0.0" appVersion: "1.1.0"
...@@ -16,8 +16,8 @@ apiVersion: v2 ...@@ -16,8 +16,8 @@ apiVersion: v2
name: snapshot name: snapshot
description: Checkpoint/Restore infrastructure for Dynamo (PVC + DaemonSet + CRIU Agent) description: Checkpoint/Restore infrastructure for Dynamo (PVC + DaemonSet + CRIU Agent)
type: application type: application
version: 1.0.0 version: 1.1.0
appVersion: "1.0.0" appVersion: "1.1.0"
keywords: keywords:
- nvidia - nvidia
- dynamo - dynamo
......
...@@ -1490,14 +1490,14 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" ...@@ -1490,14 +1490,14 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
[[package]] [[package]]
name = "dynamo-config" name = "dynamo-config"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
] ]
[[package]] [[package]]
name = "dynamo-kv-router" name = "dynamo-kv-router"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-trait", "async-trait",
...@@ -1524,7 +1524,7 @@ dependencies = [ ...@@ -1524,7 +1524,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-llm" name = "dynamo-llm"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"aho-corasick", "aho-corasick",
"aligned-vec", "aligned-vec",
...@@ -1609,7 +1609,7 @@ dependencies = [ ...@@ -1609,7 +1609,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-memory" name = "dynamo-memory"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"cudarc", "cudarc",
...@@ -1625,7 +1625,7 @@ dependencies = [ ...@@ -1625,7 +1625,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-mocker" name = "dynamo-mocker"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"dashmap", "dashmap",
...@@ -1652,7 +1652,7 @@ dependencies = [ ...@@ -1652,7 +1652,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-parsers" name = "dynamo-parsers"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"dynamo-protocols", "dynamo-protocols",
...@@ -1669,7 +1669,7 @@ dependencies = [ ...@@ -1669,7 +1669,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-protocols" name = "dynamo-protocols"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"async-openai", "async-openai",
"derive_builder", "derive_builder",
...@@ -1684,7 +1684,7 @@ dependencies = [ ...@@ -1684,7 +1684,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-runtime" name = "dynamo-runtime"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"arc-swap", "arc-swap",
...@@ -1751,7 +1751,7 @@ dependencies = [ ...@@ -1751,7 +1751,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-tokens" name = "dynamo-tokens"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"bs58", "bs58",
"bytemuck", "bytemuck",
...@@ -3229,7 +3229,7 @@ dependencies = [ ...@@ -3229,7 +3229,7 @@ dependencies = [
[[package]] [[package]]
name = "kvbm-py3" name = "kvbm-py3"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"cudarc", "cudarc",
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
[package] [package]
name = "kvbm-py3" name = "kvbm-py3"
version = "1.0.0" version = "1.1.0"
edition = "2024" edition = "2024"
authors = ["NVIDIA"] authors = ["NVIDIA"]
license = "Apache-2.0" license = "Apache-2.0"
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
[project] [project]
name = "kvbm" name = "kvbm"
version = "1.0.0" version = "1.1.0"
description = "Dynamo KVBM" description = "Dynamo KVBM"
readme = "README.md" readme = "README.md"
authors = [ authors = [
......
...@@ -1498,14 +1498,14 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" ...@@ -1498,14 +1498,14 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
[[package]] [[package]]
name = "dynamo-config" name = "dynamo-config"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
] ]
[[package]] [[package]]
name = "dynamo-kv-router" name = "dynamo-kv-router"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-trait", "async-trait",
...@@ -1536,7 +1536,7 @@ dependencies = [ ...@@ -1536,7 +1536,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-llm" name = "dynamo-llm"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"aho-corasick", "aho-corasick",
"aligned-vec", "aligned-vec",
...@@ -1624,7 +1624,7 @@ dependencies = [ ...@@ -1624,7 +1624,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-memory" name = "dynamo-memory"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"cudarc", "cudarc",
...@@ -1640,7 +1640,7 @@ dependencies = [ ...@@ -1640,7 +1640,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-mocker" name = "dynamo-mocker"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"dashmap", "dashmap",
...@@ -1667,7 +1667,7 @@ dependencies = [ ...@@ -1667,7 +1667,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-parsers" name = "dynamo-parsers"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"dynamo-protocols", "dynamo-protocols",
...@@ -1684,7 +1684,7 @@ dependencies = [ ...@@ -1684,7 +1684,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-protocols" name = "dynamo-protocols"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"async-openai", "async-openai",
"derive_builder", "derive_builder",
...@@ -1699,7 +1699,7 @@ dependencies = [ ...@@ -1699,7 +1699,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-py3" name = "dynamo-py3"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-trait", "async-trait",
...@@ -1730,7 +1730,7 @@ dependencies = [ ...@@ -1730,7 +1730,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-runtime" name = "dynamo-runtime"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"arc-swap", "arc-swap",
...@@ -1798,7 +1798,7 @@ dependencies = [ ...@@ -1798,7 +1798,7 @@ dependencies = [
[[package]] [[package]]
name = "dynamo-tokens" name = "dynamo-tokens"
version = "1.0.0" version = "1.1.0"
dependencies = [ dependencies = [
"bs58", "bs58",
"bytemuck", "bytemuck",
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
[package] [package]
name = "dynamo-py3" name = "dynamo-py3"
version = "1.0.0" version = "1.1.0"
edition = "2024" edition = "2024"
authors = ["NVIDIA"] authors = ["NVIDIA"]
license = "Apache-2.0" license = "Apache-2.0"
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
[project] [project]
name = "ai-dynamo-runtime" name = "ai-dynamo-runtime"
version = "1.0.0" version = "1.1.0"
description = "Dynamo Inference Framework Runtime" description = "Dynamo Inference Framework Runtime"
readme = "README.md" readme = "README.md"
authors = [ authors = [
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
[package] [package]
name = "kvbm-common" name = "kvbm-common"
version = "1.0.0" version = "1.1.0"
edition.workspace = true edition.workspace = true
description.workspace = true description.workspace = true
authors.workspace = true authors.workspace = true
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
[package] [package]
name = "kvbm-engine" name = "kvbm-engine"
version = "1.0.0" version = "1.1.0"
edition.workspace = true edition.workspace = true
authors.workspace = true authors.workspace = true
license.workspace = true license.workspace = true
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
[package] [package]
name = "kvbm-kernels" name = "kvbm-kernels"
version = "1.0.0" version = "1.1.0"
edition.workspace = true edition.workspace = true
authors.workspace = true authors.workspace = true
license.workspace = true license.workspace = true
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
[package] [package]
name = "kvbm-logical" name = "kvbm-logical"
version = "1.0.0" version = "1.1.0"
edition.workspace = true edition.workspace = true
authors.workspace = true authors.workspace = true
license.workspace = true license.workspace = true
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
[package] [package]
name = "kvbm-physical" name = "kvbm-physical"
version = "1.0.0" version = "1.1.0"
edition.workspace = true edition.workspace = true
authors.workspace = true authors.workspace = true
license.workspace = true license.workspace = true
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment