PSA/ee/server/migrations/citus/run-migrations-simple.sh
Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

182 lines
5.5 KiB
Bash

#!/bin/bash
# Simple migration runner using psql directly
# This bypasses knex complexity for testing
set -e
echo "================================================"
echo "Simple Citus Migration Runner"
echo "================================================"
# Configuration
POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}
DB_HOST=${DB_HOST:-localhost}
DB_PORT=${DB_PORT:-5433}
DB_NAME=${DB_NAME:-server_test}
DB_USER=${DB_USER:-postgres}
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Function to run SQL via psql in docker
run_sql() {
docker exec alga_citus_coordinator psql -U "$DB_USER" -d "$DB_NAME" -c "$1"
}
# Function to run SQL file via psql
run_sql_file() {
docker exec -i alga_citus_coordinator psql -U "$DB_USER" -d "$DB_NAME" < "$1"
}
# Check if Citus is running
check_citus() {
echo -e "${YELLOW}Checking Citus status...${NC}"
run_sql "SELECT citus_version();" || {
echo -e "${RED}Citus is not running. Please start it first with:${NC}"
echo "./ee/server/migrations/citus/test-migrations.sh start"
exit 1
}
}
# Run base migrations using knex (simplified)
run_base_migrations() {
echo -e "${YELLOW}Running base migrations with knex...${NC}"
cd server
# Use the existing knexfile with environment variables
PGHOST="$DB_HOST" \
PGPORT="$DB_PORT" \
PGUSER="$DB_USER" \
PGPASSWORD="$POSTGRES_PASSWORD" \
PGDATABASE="$DB_NAME" \
DB_HOST="$DB_HOST" \
DB_PORT="$DB_PORT" \
DB_USER_ADMIN="$DB_USER" \
DB_PASSWORD_ADMIN="$POSTGRES_PASSWORD" \
DB_NAME_SERVER="$DB_NAME" \
npx knex migrate:latest --env migration
cd ..
echo -e "${GREEN}Base migrations completed${NC}"
}
# Run Citus migrations directly
run_citus_migrations() {
echo -e "${YELLOW}Running Citus migrations...${NC}"
# Run each Citus migration file
for migration in ee/server/migrations/citus/*.cjs; do
if [[ -f "$migration" ]]; then
filename=$(basename "$migration")
# Skip non-migration files
if [[ ! "$filename" =~ ^[0-9]{14}.*\.cjs$ ]]; then
continue
fi
echo -e "${YELLOW}Running migration: $filename${NC}"
# Convert the CommonJS to SQL and run it
# For now, we'll manually check if Citus is enabled and skip if not
node -e "
const fs = require('fs');
const migration = require('./$migration');
// Mock knex object
const knex = {
raw: async (sql, params) => {
// Output SQL for execution
if (params && params.length > 0) {
console.log('-- Parameters:', params);
}
console.log(sql + ';');
return { rows: [{enabled: true, available: true, distributed: false, exists: true}] };
}
};
// Run the up migration
migration.up(knex).then(() => {
console.log('-- Migration complete');
}).catch(err => {
console.error('-- Error:', err.message);
process.exit(1);
});
" | grep -v "^--" | docker exec -i alga_citus_coordinator psql -U "$DB_USER" -d "$DB_NAME"
echo -e "${GREEN} ✓ Completed: $filename${NC}"
fi
done
echo -e "${GREEN}Citus migrations completed${NC}"
}
# Verify distribution
verify_distribution() {
echo -e "${YELLOW}Verifying table distribution...${NC}"
run_sql "
SELECT
logicalrelid::regclass AS table_name,
CASE
WHEN partmethod = 'h' THEN 'distributed'
WHEN partmethod = 'n' THEN 'reference'
ELSE partmethod
END as type,
column_to_column_name(logicalrelid, partkey) AS distribution_column,
colocationid AS colocation_group
FROM pg_dist_partition
ORDER BY
CASE WHEN partmethod = 'n' THEN 1 ELSE 2 END,
logicalrelid::regclass::text
LIMIT 20;
"
echo -e "${YELLOW}Counting distributed tables...${NC}"
run_sql "
SELECT
COUNT(*) FILTER (WHERE partmethod = 'h') as distributed_tables,
COUNT(*) FILTER (WHERE partmethod = 'n') as reference_tables,
COUNT(DISTINCT colocationid) as colocation_groups
FROM pg_dist_partition;
"
}
# Main execution
case "${1:-}" in
base)
check_citus
run_base_migrations
;;
citus)
check_citus
run_citus_migrations
;;
verify)
check_citus
verify_distribution
;;
all)
check_citus
run_base_migrations
run_citus_migrations
verify_distribution
echo -e "${GREEN}All migrations completed successfully!${NC}"
;;
*)
echo "Usage: $0 {base|citus|verify|all}"
echo ""
echo "Commands:"
echo " base - Run base migrations only"
echo " citus - Run Citus migrations only"
echo " verify - Verify table distribution"
echo " all - Run all migrations and verify"
echo ""
echo "Note: Make sure Citus is running first with:"
echo " ./ee/server/migrations/citus/test-migrations.sh start"
exit 1
;;
esac