monorepo/cloud/infrastructure/development/Taskfile.yml
2025-12-02 22:48:40 -05:00

168 lines
5.4 KiB
YAML

version: "3"
# 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:
dev:start:
desc: Start all infrastructure services for development
cmds:
- "{{.DOCKER_COMPOSE_CMD}} -f docker-compose.dev.yml up -d"
- echo "⏳ Waiting for services to be healthy..."
- task: dev:wait
- task: dev:init
- echo ""
- echo "✅ Infrastructure ready!"
- echo ""
- echo "📊 Running Services:"
- docker ps --filter "name=mapleopentech-"
dev:wait:
desc: Wait for all services to be healthy
silent: true
cmds:
- |
echo "Waiting for Cassandra Node 1..."
for i in {1..30}; do
if docker exec mapleopentech-cassandra-1-dev cqlsh -e "describe cluster" >/dev/null 2>&1; then
echo "✅ Cassandra Node 1 is ready"
break
fi
echo " ... ($i/30)"
sleep 2
done
- |
echo "Waiting for Cassandra Node 2..."
for i in {1..30}; do
if docker exec mapleopentech-cassandra-2-dev cqlsh -e "describe cluster" >/dev/null 2>&1; then
echo "✅ Cassandra Node 2 is ready"
break
fi
echo " ... ($i/30)"
sleep 2
done
- |
echo "Waiting for Cassandra Node 3..."
for i in {1..30}; do
if docker exec mapleopentech-cassandra-3-dev cqlsh -e "describe cluster" >/dev/null 2>&1; then
echo "✅ Cassandra Node 3 is ready"
break
fi
echo " ... ($i/30)"
sleep 2
done
- |
echo "Waiting for Redis..."
for i in {1..10}; do
if docker exec mapleopentech-redis-dev redis-cli ping >/dev/null 2>&1; then
echo "✅ Redis is ready"
break
fi
sleep 1
done
- |
echo "Waiting for SeaweedFS..."
for i in {1..10}; do
if docker exec mapleopentech-seaweedfs-dev /usr/bin/wget -q --spider http://127.0.0.1:9333/cluster/status 2>/dev/null; then
echo "✅ SeaweedFS is ready"
break
fi
sleep 1
done
dev:init:
desc: Initialize keyspaces and databases
cmds:
- |
echo "📦 Initializing Cassandra keyspaces..."
docker exec -i mapleopentech-cassandra-1-dev cqlsh < cassandra/init-scripts/01-create-keyspaces.cql
echo "✅ Keyspaces initialized with replication_factor=3"
dev:status:
desc: Show status of all infrastructure services
cmds:
- |
echo "📊 Infrastructure Status:"
docker ps --filter "name=mapleopentech-" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
dev:stop:
desc: Stop all infrastructure services (keeps data)
cmds:
- "{{.DOCKER_COMPOSE_CMD}} -f docker-compose.dev.yml down"
- echo "✅ Infrastructure stopped (data preserved)"
dev:restart:
desc: Restart all infrastructure services
cmds:
- task: dev:stop
- task: dev:start
dev:logs:
desc: View infrastructure logs (usage task dev:logs -- cassandra)
cmds:
- "{{.DOCKER_COMPOSE_CMD}} -f docker-compose.dev.yml logs -f {{.CLI_ARGS}}"
dev:clean:
desc: Stop services and remove all data (DESTRUCTIVE!)
prompt: This will DELETE ALL DATA in Cassandra, Redis, Meilisearch, and SeaweedFS. Continue?
cmds:
- "{{.DOCKER_COMPOSE_CMD}} -f docker-compose.dev.yml down -v"
- echo "✅ Infrastructure cleaned (all data removed)"
dev:clean:keyspace:
desc: Drop and recreate a specific Cassandra keyspace (usage task dev:clean:keyspace -- maplefile)
prompt: This will DELETE ALL DATA in the {{.CLI_ARGS}} keyspace. Continue?
cmds:
- |
KEYSPACE={{.CLI_ARGS}}
if [ -z "$KEYSPACE" ]; then
echo "❌ Error: Please specify a keyspace name"
echo "Usage: task dev:clean:keyspace -- maplefile"
exit 1
fi
echo "🗑️ Dropping keyspace: $KEYSPACE"
docker exec mapleopentech-cassandra-1-dev cqlsh -e "DROP KEYSPACE IF EXISTS $KEYSPACE;"
echo "📦 Recreating keyspace: $KEYSPACE"
docker exec mapleopentech-cassandra-1-dev cqlsh -e "CREATE KEYSPACE IF NOT EXISTS $KEYSPACE WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': 3} AND DURABLE_WRITES = true;"
echo "✅ Keyspace $KEYSPACE cleaned and recreated"
# Cassandra-specific tasks
cql:
desc: Open Cassandra CQL shell (connects to node 1)
cmds:
- docker exec -it mapleopentech-cassandra-1-dev cqlsh
cql:keyspaces:
desc: List all keyspaces
cmds:
- docker exec mapleopentech-cassandra-1-dev cqlsh -e "DESCRIBE KEYSPACES;"
cql:tables:
desc: List tables in a keyspace (usage task cql:tables -- maplepress)
cmds:
- docker exec mapleopentech-cassandra-1-dev cqlsh -e "USE {{.CLI_ARGS}}; DESCRIBE TABLES;"
cql:status:
desc: Show Cassandra cluster status
cmds:
- docker exec mapleopentech-cassandra-1-dev nodetool status
# Redis-specific tasks
redis:
desc: Open Redis CLI
cmds:
- docker exec -it mapleopentech-redis-dev redis-cli
redis:info:
desc: Show Redis info
cmds:
- docker exec mapleopentech-redis-dev redis-cli INFO