normogen/scripts/test-ci-locally.sh
goose ef58c77d9c
Some checks failed
Lint, Build, and Docker / Check Code Formatting (push) Failing after 42s
Lint, Build, and Docker / Run Clippy Linter (push) Failing after 2s
Lint, Build, and Docker / Build Rust Binary (push) Has been skipped
Lint, Build, and Docker / Build Docker Image (push) Has been skipped
Lint, Build, and Docker / CI Summary (push) Failing after 1s
feat(ci): add format check, PR validation, and Docker buildx
- Add cargo fmt --check to enforce code formatting
- Add pull_request trigger for PR validation
- Split workflow into parallel jobs (format, clippy, build, docker)
- Integrate Docker Buildx with DinD service
- Add BuildKit caching for faster builds
- Add local test script (scripts/test-ci-locally.sh)
- Add comprehensive documentation

All local CI checks pass 
2026-03-17 10:44:42 -03:00

100 lines
2.8 KiB
Bash
Executable file

#!/bin/bash
# Local CI Validation Script
# Tests all CI checks locally before pushing
set -e
echo "=========================================="
echo "Local CI Validation"
echo "=========================================="
echo ""
cd "$(git rev-parse --show-toplevel)/backend"
# Test 1: Format check
echo "🔍 Test 1: Code Formatting Check"
echo "Command: cargo fmt --all -- --check"
if cargo fmt --all -- --check; then
echo "✅ PASS - Code is properly formatted"
else
echo "❌ FAIL - Code needs formatting"
echo "Run: cargo fmt --all"
exit 1
fi
echo ""
# Test 2: Clippy
echo "🔍 Test 2: Clippy Lint"
echo "Command: cargo clippy --all-targets --all-features -- -D warnings"
if cargo clippy --all-targets --all-features -- -D warnings; then
echo "✅ PASS - No clippy warnings"
else
echo "❌ FAIL - Clippy found issues"
exit 1
fi
echo ""
# Test 3: Build
echo "🔍 Test 3: Build Release Binary"
echo "Command: cargo build --release"
if cargo build --release; then
echo "✅ PASS - Build successful"
BINARY_SIZE=$(du -h target/release/normogen-backend | cut -f1)
echo "Binary size: $BINARY_SIZE"
else
echo "❌ FAIL - Build failed"
exit 1
fi
echo ""
# Test 4: Verify binary exists
echo "🔍 Test 4: Verify Binary"
if [ -f target/release/normogen-backend ]; then
echo "✅ PASS - Binary exists"
file target/release/normogen-backend
else
echo "❌ FAIL - Binary not found"
exit 1
fi
echo ""
# Test 5: Docker build (only if Docker is available locally)
if command -v docker &> /dev/null && docker info &> /dev/null; then
echo "🔍 Test 5: Docker Build"
echo "Command: docker build -f docker/Dockerfile -t normogen-backend:test ."
if docker build -f docker/Dockerfile -t normogen-backend:test .; then
echo "✅ PASS - Docker image built"
docker images normogen-backend:test
else
echo "❌ FAIL - Docker build failed"
exit 1
fi
echo ""
else
echo "⚠️ SKIP - Docker not available locally"
echo " Note: Docker build will run in Forgejo CI on Solaria"
echo " This is expected and OK!"
echo ""
fi
echo "=========================================="
echo "✅ All Local CI Checks Passed!"
echo "=========================================="
echo ""
echo "Changes ready to commit:"
echo " ✅ Code formatting"
echo " ✅ Clippy linting"
echo " ✅ Build successful"
echo " ✅ Binary created"
echo ""
echo "Next steps:"
echo " 1. Commit the changes"
echo " 2. Push to Forgejo"
echo " 3. Watch CI run at: http://gitea.solivarez.com.ar/alvaro/normogen/actions"
echo ""
echo "The Forgejo CI will also:"
echo " • Verify formatting (same as local)"
echo " • Run Clippy (same as local)"
echo " • Build the binary (same as local)"
echo " • Build Docker image with Buildx (runs on Solaria)"