Ctrl K
ComunidadGuías…

deploy-to-fly.sh

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/bin/bash

# Confab - Deploy to Fly.io
# Runs database migrations against production DB, then deploys to Fly.io
# Used both locally and in CI (GitHub Actions)

set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
COMMIT_HASH=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
# Full SHA + build timestamp baked into the binary, surfaced at GET /api/v1/version.
COMMIT_SHA=$(git rev-parse HEAD 2>/dev/null || echo "unknown")
BUILD_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ")

# Local-only: deploy breadcrumb logs
if [ -z "$CI" ]; then
    DEPLOY_LOG_DIR="${SCRIPT_DIR}/deploy-logs"
    mkdir -p "$DEPLOY_LOG_DIR"
    TIMESTAMP=$(date -u +"%Y%m%d-%H%M%S")
    DIRTY_SUFFIX=""
    if ! git diff --quiet HEAD 2>/dev/null || git status --porcelain 2>/dev/null | grep -q .; then
        DIRTY_SUFFIX="-dirty"
    fi
    DEPLOY_LOG_FILE="${DEPLOY_LOG_DIR}/${TIMESTAMP}-${COMMIT_HASH}${DIRTY_SUFFIX}.log"
    exec > >(tee -a "$DEPLOY_LOG_FILE") 2>&1
    echo "Log file: $DEPLOY_LOG_FILE"
fi

echo "=== Confab Fly.io Deployment ==="
echo "Timestamp: $(date -u +"%Y-%m-%dT%H:%M:%SZ")"
echo "Commit: $COMMIT_HASH ($(git log -1 --format='%s' 2>/dev/null || echo 'unknown'))"
echo ""

# Check for required tools
if ! command -v flyctl &> /dev/null; then
    echo "Error: flyctl not found. Install with: brew install flyctl"
    exit 1
fi

if ! command -v migrate &> /dev/null; then
    echo "Error: migrate CLI not found. Install with: brew install golang-migrate"
    exit 1
fi

# Check for PRODUCTION_DATABASE_URL
if [ -z "$PRODUCTION_DATABASE_URL" ]; then
    echo "Error: PRODUCTION_DATABASE_URL environment variable is required"
    echo ""
    echo "Set it with:"
    echo "  export PRODUCTION_DATABASE_URL='postgresql://user:pass@host/db?sslmode=require'"
    exit 1
fi

# Run migrations
echo "Running database migrations..."
cd "$SCRIPT_DIR/backend"
migrate -database "$PRODUCTION_DATABASE_URL" -path internal/db/migrations up

echo ""
echo "Migrations complete. Current version:"
migrate -database "$PRODUCTION_DATABASE_URL" -path internal/db/migrations version

# Deploy to Fly
echo ""
echo "Deploying to Fly.io..."
cd "$SCRIPT_DIR"
flyctl deploy --build-arg COMMIT="$COMMIT_SHA" --build-arg BUILD_TIME="$BUILD_TIME"

echo ""
echo "=== Deployment complete ==="

if [ -z "$CI" ]; then
    echo ""
    echo "Useful commands:"
    echo "  flyctl logs          # View logs"
    echo "  flyctl status        # Check status"
    echo "  flyctl open          # Open in browser"
fi