name: F2.2 Integration CI on: push: branches: - 'feature/f2-2*' paths: - 'api-v3/**' - 'web-v2/**' - 'scripts/**' - 'docker-compose.yml' - '.github/workflows/f2-2-ci.yml' workflow_dispatch: permissions: contents: read jobs: api: name: API · typecheck, tests, build runs-on: ubuntu-latest 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 - run: npm ci - run: npm run typecheck - 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; -- This reset was a one-time late production operation. It is marked as -- executed on the clean CI database so the historical schema can be -- constructed chronologically without running that production-only wipe. 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'); 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 defaults: run: working-directory: web-v2 steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '24' cache: npm cache-dependency-path: web-v2/package-lock.json - run: npm ci - run: npm run typecheck - run: npm run build