feat: SDLC database separation for CI/testing (#35)
## Summary - Fix `isProductionDatabase()` to allow CI database (`euchre_camp_ci`) - Add database schema reset before CI test runs - Create `global.teardown.ts` for cleanup (CI: full reset, dev/prod: selective cleanup) - Add `acceptance-tests` job to PR workflow with CI database - Create `sync-prod-to-dev.js` script for one-way prod→dev sync - Add `just` recipes: `sync-dev`, `test-prod`, `reset-ci-db` - Store credentials in `.credentials` (gitignored) with unique CI user ## Testing Verified against CI database: - Schema reset works - Migrations apply correctly - Test users created successfully - 219 tests pass (slow but working) ## Next Steps - Set `CI_DATABASE_URL` as Gitea repository variable Reviewed-on: #35 Co-authored-by: David Gwilliam <dhgwilliam@gmail.com> Co-committed-by: David Gwilliam <dhgwilliam@gmail.com>
This commit was merged in pull request #35.
This commit is contained in:
@@ -239,3 +239,72 @@ workflow-status:
|
||||
@echo "PR Workflow: Runs unit + acceptance tests on pull requests"
|
||||
@echo "Test Workflow: Runs unit tests on all branch pushes"
|
||||
@echo "Release Workflow: Runs on main branch pushes (version bump + Docker build)"
|
||||
|
||||
# --- Production Deployment ---
|
||||
|
||||
# Deploy a specific version to production (human gate)
|
||||
# Usage: just deploy-prod v0.1.21
|
||||
deploy-prod version:
|
||||
@echo "Deploying {{version}} to production..."
|
||||
@echo "This requires the image to already be pushed to the registry."
|
||||
@echo ""
|
||||
@read -p "Have you verified this version works in dev? (y/N) " confirm; \
|
||||
if [ "$$confirm" != "y" ]; then \
|
||||
echo "Cancelled. Please verify in dev first."; \
|
||||
exit 1; \
|
||||
fi
|
||||
cd /apps/youthful_simon && \
|
||||
sed -i "s|image: docker.notsosm.art/euchre-camp:[a-zA-Z0-9.-]*|image: docker.notsosm.art/euchre-camp:{{version}}|" docker-compose.yml && \
|
||||
sed -i "s|image: euchre-camp/euchre-camp:[a-zA-Z0-9.-]*|image: docker.notsosm.art/euchre-camp:{{version}}|" docker-compose.yml && \
|
||||
docker compose pull app && \
|
||||
docker compose up -d app && \
|
||||
echo "Waiting for production site to be healthy..." && \
|
||||
for i in {1..30}; do \
|
||||
if curl -sf https://euchre.notsosm.art/api/health > /dev/null 2>&1; then \
|
||||
echo "✅ Production successfully deployed with version {{version}}"; \
|
||||
exit 0; \
|
||||
fi; \
|
||||
sleep 0.5; \
|
||||
done && \
|
||||
echo "❌ Production deployment failed - health check timed out"; \
|
||||
docker compose logs app; \
|
||||
exit 1
|
||||
|
||||
# Show current deployment status across all environments
|
||||
status:
|
||||
@echo "=== EuchreCamp Deployment Status ==="
|
||||
@echo ""
|
||||
@echo "CI Site (euchre-camp-ci):"
|
||||
@grep "image:" /apps/euchre_camp_ci/docker-compose.yml | head -1
|
||||
@echo ""
|
||||
@echo "Dev Site (euchre-camp-dev):"
|
||||
@grep "image:" /apps/intelligent_silasak/docker-compose.yml | head -1
|
||||
@echo ""
|
||||
@echo "Prod Site (euchre-camp):"
|
||||
@grep "image:" /apps/youthful_simon/docker-compose.yml | head -1
|
||||
@echo ""
|
||||
|
||||
# --- SDLC Database Operations ---
|
||||
|
||||
# Sync production data to development database (manual operation)
|
||||
sync-dev:
|
||||
@echo "Syncing production data to development database..."
|
||||
node scripts/sync-prod-to-dev.js
|
||||
|
||||
# Run acceptance tests against production database (opt-in, manual)
|
||||
test-prod:
|
||||
@echo "⚠️ WARNING: This will run tests against the PRODUCTION database!"
|
||||
@echo " All test records will be cleaned up after the run."
|
||||
@echo ""
|
||||
@read -p "Are you sure you want to continue? (y/N) " confirm; \
|
||||
if [ "$$confirm" != "y" ]; then \
|
||||
echo "Cancelled."; \
|
||||
else \
|
||||
DATABASE_URL="$$PROD_DATABASE_URL" bun test:acceptance; \
|
||||
fi
|
||||
|
||||
# Reset CI database (for local CI testing)
|
||||
reset-ci-db:
|
||||
@echo "Resetting CI database..."
|
||||
psql "$CI_DATABASE_URL" -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;"
|
||||
bunx prisma migrate deploy
|
||||
|
||||
Reference in New Issue
Block a user