name: DB Migration on: push: branches: [main] paths: - 'crates/mem-store/migrations/**' workflow_dispatch: env: DB_HOST: memory-db-rw.poimen.svc.cluster.local DB_PORT: "5432" DB_NAME: memory jobs: migrate: name: Run Migrations runs-on: rust steps: - name: Install psql run: apt-get update && apt-get install -y postgresql-client - name: Checkout code uses: actions/checkout@v4 - name: Fetch previous migrations state run: | git fetch origin main --depth=2 # List changed migration files CHANGED=$(git diff --name-only HEAD~1 HEAD -- crates/mem-store/migrations/ || echo "") echo "Changed migrations: $CHANGED" echo "CHANGED_MIGRATIONS=$CHANGED" >> $GITHUB_ENV - name: Run migrations if: env.CHANGED_MIGRATIONS != '' run: | export PGPASSWORD="${DB_PASSWORD}" echo "=== Running changed migrations ===" for f in $CHANGED_MIGRATIONS; do if [ -f "$f" ]; then echo "--- Applying: $f ---" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -f "$f" 2>&1 if [ $? -ne 0 ]; then echo "ERROR: Migration $f failed!" exit 1 fi echo "--- OK: $f ---" fi done echo "=== Verify schema ===" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -c "\dt memory*" env: DB_USER: ${{ secrets.DB_USER }} DB_PASSWORD: ${{ secrets.DB_PASSWORD }} - name: Run all migrations (manual trigger) if: github.event_name == 'workflow_dispatch' run: | export PGPASSWORD="${DB_PASSWORD}" echo "=== Running all migrations in order ===" for f in $(ls crates/mem-store/migrations/*.sql | sort); do echo "--- Applying: $f ---" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -f "$f" 2>&1 || true echo "--- Done: $f ---" done echo "=== Final schema ===" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -c "\dt memory*" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -c "\d memory_entity" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -c "\d memory_edge" env: DB_USER: ${{ secrets.DB_USER }} DB_PASSWORD: ${{ secrets.DB_PASSWORD }}