From ba4752a700f72a3726204808f541b5b60c5b0430 Mon Sep 17 00:00:00 2001 From: enlineawork Date: Sun, 6 Sep 2026 22:41:40 -0300 Subject: [PATCH] ci: ejecutar migraciones F2.2.1 sobre PostgreSQL real --- .github/workflows/f2-2-ci.yml | 84 +++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/.github/workflows/f2-2-ci.yml b/.github/workflows/f2-2-ci.yml index 232b97c..ad122c1 100644 --- a/.github/workflows/f2-2-ci.yml +++ b/.github/workflows/f2-2-ci.yml @@ -34,6 +34,90 @@ jobs: - run: npm test - run: npm run build + migrations: + name: DB · migrations on PostgreSQL 16/PostGIS + runs-on: ubuntu-latest + services: + postgres: + image: postgis/postgis:16-3.4 + env: + POSTGRES_USER: dhv2_owner + POSTGRES_PASSWORD: owner_test_password + POSTGRES_DB: dhv2_ci + ports: + - 5432:5432 + options: >- + --health-cmd "pg_isready -U dhv2_owner -d dhv2_ci" + --health-interval 5s + --health-timeout 5s + --health-retries 20 + env: + DB_HOST: 127.0.0.1 + DB_PORT: 5432 + DB_NAME: dhv2_ci + DB_MIGRATION_USER: dhv2_owner + DB_MIGRATION_PASSWORD: owner_test_password + DB_APP_USER: dhv2_app + defaults: + run: + working-directory: api-v3 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: '24' + cache: npm + cache-dependency-path: api-v3/package-lock.json + - name: PostgreSQL client + run: | + command -v psql >/dev/null || { + sudo apt-get update + sudo apt-get install -y postgresql-client + } + - name: Prepare roles and extensions + env: + PGPASSWORD: owner_test_password + run: | + psql -v ON_ERROR_STOP=1 -h 127.0.0.1 -U dhv2_owner -d dhv2_ci <<'SQL' + CREATE EXTENSION IF NOT EXISTS postgis; + CREATE EXTENSION IF NOT EXISTS pgcrypto; + DO $$ + BEGIN + IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname='dhv2_app') THEN + CREATE ROLE dhv2_app LOGIN PASSWORD 'app_test_password'; + END IF; + END + $$; + GRANT CONNECT ON DATABASE dhv2_ci TO dhv2_app; + GRANT USAGE ON SCHEMA public TO dhv2_app; + + -- ResetProductionOperationalData was an intentionally late, one-time + -- production operation with an older timestamp. On a clean CI database + -- it must be considered already executed; otherwise it would run before + -- structural migrations that existed in production when the reset ran. + CREATE TABLE IF NOT EXISTS typeorm_migrations ( + id SERIAL PRIMARY KEY, + timestamp bigint NOT NULL, + name varchar NOT NULL + ); + INSERT INTO typeorm_migrations (timestamp,name) + VALUES (1788652800000,'ResetProductionOperationalData1788652800000') + ON CONFLICT DO NOTHING; + SQL + - run: npm ci + - run: npm run build + - name: Run every pending migration + run: npm run migration:run + - name: Assert no pending migrations + run: npm run migration:show | tee /tmp/migrations.txt && grep -Fq 'Pending migrations: no' /tmp/migrations.txt + - name: Assert F2.2.1 reference import + env: + PGPASSWORD: owner_test_password + run: | + test "$(psql -At -h 127.0.0.1 -U dhv2_owner -d dhv2_ci -c "SELECT count(*) FROM assets a JOIN asset_types t ON t.id=a.asset_type_id WHERE a.data_origin='IMPORT' AND a.source_name='Tablas de yacimiento(1).xlsx' AND lower(t.code)='yacimiento'")" = "230" + test "$(psql -At -h 127.0.0.1 -U dhv2_owner -d dhv2_ci -c "SELECT count(*) FROM assets WHERE (operational_area_id IS NULL) <> (operator_company_id IS NULL)")" = "0" + test "$(psql -At -h 127.0.0.1 -U dhv2_owner -d dhv2_ci -c "SELECT count(*) FROM source_documents WHERE document_number IN ('DH-F221-TERRITORIO','DH-F221-APP')")" = "2" + web: name: WEB · typecheck, build runs-on: ubuntu-latest