From 1295b68d80983b5c9f3e65bc491c51c3f32a7f3b Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Thu, 14 Nov 2024 23:07:30 -0700 Subject: [PATCH] Fix ca version migration We didn't do a check to see if the column already exists. Because of this, we get this error during migrations: ``` | migration file "20240802181855_ca-cert-version.ts" failed infisical-db-migration | migration failed with error: alter table "certificates" add column "caCertId" uuid null - column "caCertId" of relation "certificates" already exists ``` --- .../20240802181855_ca-cert-version.ts | 22 ++-- docker-compose.prod.yml | 118 +++++++++--------- 2 files changed, 71 insertions(+), 69 deletions(-) diff --git a/backend/src/db/migrations/20240802181855_ca-cert-version.ts b/backend/src/db/migrations/20240802181855_ca-cert-version.ts index 24eca185d..c38a2d42a 100644 --- a/backend/src/db/migrations/20240802181855_ca-cert-version.ts +++ b/backend/src/db/migrations/20240802181855_ca-cert-version.ts @@ -64,23 +64,25 @@ export async function up(knex: Knex): Promise { } if (await knex.schema.hasTable(TableName.Certificate)) { - await knex.schema.alterTable(TableName.Certificate, (t) => { - t.uuid("caCertId").nullable(); - t.foreign("caCertId").references("id").inTable(TableName.CertificateAuthorityCert); - }); + const hasCaCertIdColumn = await knex.schema.hasColumn(TableName.Certificate, "caCertId"); + if (!hasCaCertIdColumn) { + await knex.schema.alterTable(TableName.Certificate, (t) => { + t.uuid("caCertId").nullable(); + t.foreign("caCertId").references("id").inTable(TableName.CertificateAuthorityCert); + }); - await knex.raw(` + await knex.raw(` UPDATE "${TableName.Certificate}" cert SET "caCertId" = ( SELECT caCert.id FROM "${TableName.CertificateAuthorityCert}" caCert WHERE caCert."caId" = cert."caId" - ) - `); + )`); - await knex.schema.alterTable(TableName.Certificate, (t) => { - t.uuid("caCertId").notNullable().alter(); - }); + await knex.schema.alterTable(TableName.Certificate, (t) => { + t.uuid("caCertId").notNullable().alter(); + }); + } } } diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 40c17a7fe..a2d4d6bf3 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -3,70 +3,70 @@ version: "3" services: db-migration: container_name: infisical-db-migration - depends_on: - db: - condition: service_healthy - image: infisical/infisical:latest-postgres + # depends_on: + # db: + # condition: service_healthy + image: infisical/infisical:v0.94.0-postgres env_file: .env command: npm run migration:latest pull_policy: always - networks: - - infisical + # networks: + # - infisical - backend: - container_name: infisical-backend - restart: unless-stopped - depends_on: - db: - condition: service_healthy - redis: - condition: service_started - db-migration: - condition: service_completed_successfully - image: infisical/infisical:latest-postgres - pull_policy: always - env_file: .env - ports: - - 80:8080 - environment: - - NODE_ENV=production - networks: - - infisical +# backend: +# container_name: infisical-backend +# restart: unless-stopped +# depends_on: +# db: +# condition: service_healthy +# redis: +# condition: service_started +# db-migration: +# condition: service_completed_successfully +# image: infisical/infisical:latest-postgres +# pull_policy: always +# env_file: .env +# ports: +# - 80:8080 +# environment: +# - NODE_ENV=production +# networks: +# - infisical - redis: - image: redis - container_name: infisical-dev-redis - env_file: .env - restart: always - environment: - - ALLOW_EMPTY_PASSWORD=yes - ports: - - 6379:6379 - networks: - - infisical - volumes: - - redis_data:/data +# redis: +# image: redis +# container_name: infisical-dev-redis +# env_file: .env +# restart: always +# environment: +# - ALLOW_EMPTY_PASSWORD=yes +# ports: +# - 6379:6379 +# networks: +# - infisical +# volumes: +# - redis_data:/data - db: - container_name: infisical-db - image: postgres:14-alpine - restart: always - env_file: .env - volumes: - - pg_data:/var/lib/postgresql/data - networks: - - infisical - healthcheck: - test: "pg_isready --username=${POSTGRES_USER} && psql --username=${POSTGRES_USER} --list" - interval: 5s - timeout: 10s - retries: 10 +# db: +# container_name: infisical-db +# image: postgres:14-alpine +# restart: always +# env_file: .env +# volumes: +# - pg_data:/var/lib/postgresql/data +# networks: +# - infisical +# healthcheck: +# test: "pg_isready --username=${POSTGRES_USER} && psql --username=${POSTGRES_USER} --list" +# interval: 5s +# timeout: 10s +# retries: 10 -volumes: - pg_data: - driver: local - redis_data: - driver: local +# volumes: +# pg_data: +# driver: local +# redis_data: +# driver: local -networks: - infisical: +# networks: +# infisical: