version: "3" env: COMPOSE_PROJECT_NAME: maplepress # Variables for Docker Compose command detection vars: DOCKER_COMPOSE_CMD: sh: | if command -v docker-compose >/dev/null 2>&1; then echo "docker-compose" elif docker compose version >/dev/null 2>&1; then echo "docker compose" else echo "docker-compose" fi tasks: # Development workflow (requires infrastructure) dev: desc: Start app in development mode (requires infrastructure running) deps: [dev:check-infra] cmds: - "{{.DOCKER_COMPOSE_CMD}} -f docker-compose.dev.yml up --build" - echo "Press Ctrl+C to stop" dev:down: desc: Stop development app cmds: - "{{.DOCKER_COMPOSE_CMD}} -f docker-compose.dev.yml down" dev:restart: desc: Quick restart (fast!) cmds: - "{{.DOCKER_COMPOSE_CMD}} -f docker-compose.dev.yml restart" - echo "✅ MaplePress backend restarted" dev:logs: desc: View app logs cmds: - "{{.DOCKER_COMPOSE_CMD}} -f docker-compose.dev.yml logs -f" dev:shell: desc: Open shell in running container cmds: - docker exec -it maplepress-backend-dev sh dev:check-infra: desc: Verify infrastructure is running silent: true cmds: - | if ! docker network inspect maple-dev >/dev/null 2>&1; then echo "❌ Infrastructure not running!" echo "" echo "Start it with:" echo " cd ../infrastructure/development && task dev:start" echo "" exit 1 fi if ! docker ps | grep -q maple-cassandra-1-dev; then echo "❌ Cassandra not running!" echo "" echo "Start it with:" echo " cd ../infrastructure/development && task dev:start" echo "" exit 1 fi echo "✅ Infrastructure is running" # Database operations migrate:up: desc: Run all migrations up cmds: - ./maplepress-backend migrate up migrate:down: desc: Run all migrations down cmds: - ./maplepress-backend migrate down migrate:create: desc: Create new migration (usage task migrate:create -- create_users) cmds: - ./maplepress-backend migrate create {{.CLI_ARGS}} db:clear: desc: Clear Cassandra database (drop and recreate keyspace) deps: [build] cmds: - echo "⚠️ Dropping keyspace 'maplepress'..." - docker exec maple-cassandra-1-dev cqlsh -e "DROP KEYSPACE IF EXISTS maplepress;" - echo "✅ Keyspace dropped" - echo "🔄 Running migrations to recreate schema..." - ./maplepress-backend migrate up - echo "✅ Database cleared and recreated" db:reset: desc: Reset database using migrations (down then up) deps: [build] cmds: - echo "🔄 Running migrations down..." - ./maplepress-backend migrate down - echo "🔄 Running migrations up..." - ./maplepress-backend migrate up - echo "✅ Database reset complete" # Build and test build: desc: Build the Go binary cmds: - task: wire - go build -o maplepress-backend test: desc: Run tests cmds: - go test ./... -v test:short: desc: Run short tests only cmds: - go test ./... -short lint: desc: Run linters cmds: - task: nilaway - go vet ./... nilaway: desc: Run nilaway static analyzer cmds: - nilaway ./... wire: desc: Generate Wire dependency injection cmds: - cd app && wire format: desc: Format code cmds: - go fmt ./... tidy: desc: Tidy Go modules cmds: - go mod tidy clean: desc: Clean build artifacts cmds: - rm -f maplepress-backend - rm -f app/wire_gen.go deploy: desc: (DevOps only) Command will build the production container of this project and deploy to the private docker container registry. cmds: - docker build -f Dockerfile --rm -t registry.digitalocean.com/ssp/maplepress_backend:prod --platform linux/amd64 . - docker tag registry.digitalocean.com/ssp/maplepress_backend:prod registry.digitalocean.com/ssp/maplepress_backend:prod - docker push registry.digitalocean.com/ssp/maplepress_backend:prod