name: Test Publishing Setup on: push: branches: [ main, master ] paths: - '**/Cargo.toml' - 'scripts/publish-all.sh' - '.github/workflows/publish.yml' pull_request: branches: [ main, master ] paths: - '**/Cargo.toml' - 'scripts/publish-all.sh' - '.github/workflows/publish.yml' workflow_dispatch: env: CARGO_TERM_COLOR: always jobs: test-publish-setup: name: Test Publishing Setup runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable with: toolchain: stable - name: Cache Cargo dependencies uses: actions/cache@v4 with: path: | ~/.cargo/bin/ ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ target/ key: ${{ runner.os }}-cargo-publish-test-${{ hashFiles('**/Cargo.lock') }} restore-keys: | ${{ runner.os }}-cargo-publish-test- ${{ runner.os }}-cargo- - name: Install cargo-edit run: cargo install cargo-edit - name: Test workspace structure run: | echo "Testing workspace structure..." # Check that all expected crates exist EXPECTED_CRATES=(os process text net git vault kubernetes virt redisclient postgresclient zinit_client mycelium rhai herodo) for crate in "${EXPECTED_CRATES[@]}"; do if [ -d "$crate" ] && [ -f "$crate/Cargo.toml" ]; then echo "✅ $crate exists" else echo "❌ $crate missing or invalid" exit 1 fi done - name: Test feature configuration run: | echo "Testing feature configuration..." # Test that features work correctly cargo check --features os cargo check --features process cargo check --features text cargo check --features net cargo check --features git cargo check --features vault cargo check --features kubernetes cargo check --features virt cargo check --features redisclient cargo check --features postgresclient cargo check --features zinit_client cargo check --features mycelium cargo check --features rhai echo "✅ All individual features work" # Test feature groups cargo check --features core cargo check --features clients cargo check --features infrastructure cargo check --features scripting echo "✅ All feature groups work" # Test all features cargo check --features all echo "✅ All features together work" - name: Test dry-run publishing run: | echo "Testing dry-run publishing..." # Test each individual crate can be packaged CRATES=(os process text net git vault kubernetes virt redisclient postgresclient zinit_client mycelium rhai) for crate in "${CRATES[@]}"; do echo "Testing sal-$crate..." cd "$crate" cargo publish --dry-run cd .. echo "✅ sal-$crate can be published" done # Test main crate echo "Testing main sal crate..." cargo publish --dry-run echo "✅ Main sal crate can be published" - name: Test publishing script run: | echo "Testing publishing script..." # Make script executable chmod +x scripts/publish-all.sh # Test dry run ./scripts/publish-all.sh --dry-run --version 0.1.0-test echo "✅ Publishing script works" - name: Test version consistency run: | echo "Testing version consistency..." # Get version from root Cargo.toml ROOT_VERSION=$(grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/') echo "Root version: $ROOT_VERSION" # Check all crates have the same version CRATES=(os process text net git vault kubernetes virt redisclient postgresclient zinit_client mycelium rhai herodo) for crate in "${CRATES[@]}"; do if [ -f "$crate/Cargo.toml" ]; then CRATE_VERSION=$(grep '^version = ' "$crate/Cargo.toml" | head -1 | sed 's/version = "\(.*\)"/\1/') if [ "$CRATE_VERSION" = "$ROOT_VERSION" ]; then echo "✅ $crate version matches: $CRATE_VERSION" else echo "❌ $crate version mismatch: $CRATE_VERSION (expected $ROOT_VERSION)" exit 1 fi fi done - name: Test metadata completeness run: | echo "Testing metadata completeness..." # Check that all crates have required metadata CRATES=(os process text net git vault kubernetes virt redisclient postgresclient zinit_client mycelium rhai) for crate in "${CRATES[@]}"; do echo "Checking sal-$crate metadata..." cd "$crate" # Check required fields exist if ! grep -q '^name = "sal-' Cargo.toml; then echo "❌ $crate missing or incorrect name" exit 1 fi if ! grep -q '^description = ' Cargo.toml; then echo "❌ $crate missing description" exit 1 fi if ! grep -q '^repository = ' Cargo.toml; then echo "❌ $crate missing repository" exit 1 fi if ! grep -q '^license = ' Cargo.toml; then echo "❌ $crate missing license" exit 1 fi echo "✅ sal-$crate metadata complete" cd .. done - name: Test dependency resolution run: | echo "Testing dependency resolution..." # Test that all workspace dependencies resolve correctly cargo tree --workspace > /dev/null echo "✅ All dependencies resolve correctly" # Test that there are no dependency conflicts cargo check --workspace echo "✅ No dependency conflicts" - name: Generate publishing report if: always() run: | echo "## 🧪 Publishing Setup Test Report" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "### ✅ Tests Passed" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "- Workspace structure validation" >> $GITHUB_STEP_SUMMARY echo "- Feature configuration testing" >> $GITHUB_STEP_SUMMARY echo "- Dry-run publishing simulation" >> $GITHUB_STEP_SUMMARY echo "- Publishing script validation" >> $GITHUB_STEP_SUMMARY echo "- Version consistency check" >> $GITHUB_STEP_SUMMARY echo "- Metadata completeness verification" >> $GITHUB_STEP_SUMMARY echo "- Dependency resolution testing" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "### 📦 Ready for Publishing" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "All SAL crates are ready for publishing to crates.io!" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "**Individual Crates:** 13 modules" >> $GITHUB_STEP_SUMMARY echo "**Meta-crate:** sal with optional features" >> $GITHUB_STEP_SUMMARY echo "**Binary:** herodo script executor" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "### 🚀 Next Steps" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "1. Create a release tag (e.g., v0.1.0)" >> $GITHUB_STEP_SUMMARY echo "2. The publish workflow will automatically trigger" >> $GITHUB_STEP_SUMMARY echo "3. All crates will be published to crates.io" >> $GITHUB_STEP_SUMMARY echo "4. Users can install with: \`cargo add sal-os\` or \`cargo add sal --features all\`" >> $GITHUB_STEP_SUMMARY