#!/usr/bin/env bash
# Publish packages in dependency order
# Packages are listed in order from most basic (no dependencies) to most complex (many dependencies)

set -euo pipefail
exec > >(tee log/publish.log) 2>&1 

echo "> publish"

# Level 1: Core packages with no internal streamweave dependencies
echo "> publish > Level 1: Core packages"
# Note: transaction is now part of streamweave package

# Level 2: Core streamweave package (depends on error) - must be published early as many packages depend on it
echo "> publish > Level 2: Core streamweave package"
cargo publish -p streamweave

# Level 3: Basic packages that depend only on core
echo "> publish > Level 3: Basic packages"
cargo publish -p streamweave-stateful
# Note: window is now part of streamweave package
# Note: tokio is now part of streamweave package
cargo publish -p streamweave-stdio
cargo publish -p streamweave-command
# Note: env is now part of streamweave package
# Note: file is now part of streamweave package
# Note: fs is now part of streamweave package
cargo publish -p streamweave-path
cargo publish -p streamweave-tempfile
# Note: timer is now part of streamweave package
# Note: signal is now part of streamweave package
# Note: stdio is now part of streamweave package
cargo publish -p streamweave-process
cargo publish -p streamweave-jsonl
cargo publish -p streamweave-parquet
cargo publish -p streamweave-kafka
cargo publish -p streamweave-redis
cargo publish -p streamweave-database
cargo publish -p streamweave-metrics
cargo publish -p streamweave-ml

# Level 4: Database packages (depend on database)
echo "> publish > Level 4: Database packages"
cargo publish -p streamweave-database-mysql
cargo publish -p streamweave-database-postgresql
cargo publish -p streamweave-database-sqlite

# Level 5: Pipeline package (depends on streamweave)
echo "> publish > Level 5: Pipeline package"
# Note: pipeline is now part of streamweave package

# Level 6: Graph package (depends on streamweave, pipeline, stateful, window)
echo "> publish > Level 6: Graph package"
# Note: graph is now part of streamweave package

# Level 7: Visualization (depends on streamweave, graph)
echo "> publish > Level 7: Visualization package"
cargo publish -p streamweave-visualization

# Level 8: Distributed package (depends on streamweave, graph)
echo "> publish > Level 8: Distributed package"
# Note: distributed is now part of streamweave package

# Level 9: Transformers package (depends on streamweave, stateful, graph)
echo "> publish > Level 9: Transformers package"
# Note: transformers are now part of streamweave package

# Level 10: HTTP server (depends on streamweave, graph, pipeline)
echo "> publish > Level 10: HTTP server package"
cargo publish -p streamweave-http-server

echo "> publish > done"
