diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4f557bd..847f887 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,31 +20,6 @@ jobs: name: Run linters runs-on: ubuntu-latest - - services: - maria: - image: mariadb - env: - MYSQL_ROOT_PASSWORD: root - MYSQL_DATABASE: ohmyform - options: >- - --health-cmd "mysqladmin ping" - --health-interval 10s - --health-timeout 5s - --health-retries 5 - - postgres: - image: postgres:10-alpine - env: - POSTGRES_USER: root - POSTGRES_PASSWORD: root - POSTGRES_DB: ohmyform - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - steps: - name: Check out Git repository uses: actions/checkout@v2 @@ -67,20 +42,136 @@ jobs: - name: Typecheck uses: andoshin11/typescript-error-reporter-action@v1.0.2 + run-postgres: + name: Run Postgres + runs-on: ubuntu-latest + + services: + postgres: + image: postgres:10-alpine + env: + POSTGRES_USER: root + POSTGRES_PASSWORD: root + POSTGRES_DB: ohmyform + ports: + - 5432:5432 + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + steps: + - name: Check out Git repository + uses: actions/checkout@v2 + + - name: Set up Node.js + uses: actions/setup-node@v1 + with: + node-version: 16 + + - name: Install Node.js dependencies + run: yarn install --frozen-lockfile --silent + - name: PostgreSQL Migrations run: yarn typeorm migration:run env: DATABASE_DRIVER: postgres - DATABASE_URL: postgresql://root@127.0.0.1:5432/ohmyform + + TYPEORM_CONNECTION: postgres + TYPEORM_HOST: localhost + TYPEORM_PORT: 5432 + TYPEORM_USERNAME: root + TYPEORM_PASSWORD: root + TYPEORM_DATABASE: ohmyform + TYPEORM_AUTO_SCHEMA_SYNC: false + TYPEORM_ENTITIES: src/entity/**/*.ts + TYPEORM_SUBSCRIBERS: src/subscriber/**/*.ts + TYPEORM_MIGRATIONS: src/migrations/postgres/**/*.ts + TYPEORM_MIGRATIONS_TRANSACTION_MODE: 'each' + TYPEORM_ENTITIES_DIR: src/entity + TYPEORM_MIGRATIONS_DIR: src/migrations/postgres + TYPEORM_SUBSCRIBERS_DIR: src/subscriber + + run-mariadb: + name: Run MariaDB + runs-on: ubuntu-latest + + services: + mariadb: + image: mariadb + env: + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: ohmyform + ports: + - 3306:3306 + options: >- + --health-cmd "mysqladmin ping" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + steps: + - name: Check out Git repository + uses: actions/checkout@v2 + + - name: Set up Node.js + uses: actions/setup-node@v1 + with: + node-version: 16 + + - name: Install Node.js dependencies + run: yarn install --frozen-lockfile --silent - name: MariaDB Migrations run: yarn typeorm migration:run env: DATABASE_DRIVER: mariadb - DATABASE_URL: mysql://root@127.0.0.1:3306/ohmyform + + TYPEORM_CONNECTION: mariadb + TYPEORM_HOST: localhost + TYPEORM_PORT: 3306 + TYPEORM_USERNAME: root + TYPEORM_PASSWORD: root + TYPEORM_DATABASE: ohmyform + TYPEORM_AUTO_SCHEMA_SYNC: false + TYPEORM_ENTITIES: src/entity/**/*.ts + TYPEORM_SUBSCRIBERS: src/subscriber/**/*.ts + TYPEORM_MIGRATIONS: src/migrations/mariadb/**/*.ts + TYPEORM_MIGRATIONS_TRANSACTION_MODE: 'each' + TYPEORM_ENTITIES_DIR: src/entity + TYPEORM_MIGRATIONS_DIR: src/migrations/mariadb + TYPEORM_SUBSCRIBERS_DIR: src/subscriber + + run-sqlite: + name: Run SQLite + runs-on: ubuntu-latest + + steps: + - name: Check out Git repository + uses: actions/checkout@v2 + + - name: Set up Node.js + uses: actions/setup-node@v1 + with: + node-version: 16 + + - name: Install Node.js dependencies + run: yarn install --frozen-lockfile --silent - name: SQLite Migrations - run: yarn typeorm migration:run + run: yarn typeorm migration:run --transaction none env: DATABASE_DRIVER: sqlite - DATABASE_URL: sqlite://data.sqlite + + TYPEORM_CONNECTION: sqlite + TYPEORM_USERNAME: root + TYPEORM_DATABASE: data.sqlite + TYPEORM_AUTO_SCHEMA_SYNC: false + TYPEORM_ENTITIES: src/entity/**/*.ts + TYPEORM_SUBSCRIBERS: src/subscriber/**/*.ts + TYPEORM_MIGRATIONS: src/migrations/sqlite/**/*.ts + TYPEORM_MIGRATIONS_TRANSACTION_MODE: 'none' + TYPEORM_ENTITIES_DIR: src/entity + TYPEORM_MIGRATIONS_DIR: src/migrations/sqlite + TYPEORM_SUBSCRIBERS_DIR: src/subscriber diff --git a/package.json b/package.json index 4240652..fcaf699 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,8 @@ "test:e2e": "jest --config ./test/jest-e2e.json", "typeorm:sqlite": "cross-env TS_NODE_TRANSPILE_ONLY=true ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js -f ormconfig_sqlite.json", "typeorm:postgres": "cross-env TS_NODE_TRANSPILE_ONLY=true ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js -f ormconfig_postgres.json", - "typeorm:mariadb": "cross-env TS_NODE_TRANSPILE_ONLY=true ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js -f ormconfig_mariadb.json" + "typeorm:mariadb": "cross-env TS_NODE_TRANSPILE_ONLY=true ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js -f ormconfig_mariadb.json", + "typeorm": "cross-env TS_NODE_TRANSPILE_ONLY=true ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js" }, "dependencies": { "@ardatan/aggregate-error": "^0.0.6", diff --git a/src/migrations/sqlite/1619723437787-initial.ts b/src/migrations/sqlite/1619723437787-initial.ts index 44225aa..2348315 100644 --- a/src/migrations/sqlite/1619723437787-initial.ts +++ b/src/migrations/sqlite/1619723437787-initial.ts @@ -1,9 +1,10 @@ -import { MigrationInterface, QueryRunner } from 'typeorm' +import { QueryRunner } from 'typeorm' +import { SqliteMigration } from '../sqlite.migration' -export class initial1619723437787 implements MigrationInterface { +export class initial1619723437787 extends SqliteMigration { name = 'initial1619723437787' - public async up(queryRunner: QueryRunner): Promise { + public async realUp(queryRunner: QueryRunner): Promise { await queryRunner.query('CREATE TABLE "page" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "show" boolean NOT NULL, "title" varchar, "paragraph" text, "buttonText" varchar)'); await queryRunner.query('CREATE TABLE "user" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "firstName" varchar, "lastName" varchar, "email" varchar(255) NOT NULL, "username" varchar(255) NOT NULL, "passwordHash" varchar NOT NULL, "salt" varchar, "provider" varchar NOT NULL, "roles" text NOT NULL, "language" varchar NOT NULL, "resetPasswordToken" varchar, "resetPasswordExpires" datetime, "token" varchar, "apiKey" varchar, "created" datetime NOT NULL DEFAULT (datetime(\'now\')), "lastModified" datetime NOT NULL DEFAULT (datetime(\'now\')), CONSTRAINT "UQ_e12875dfb3b1d92d7d7c5377e22" UNIQUE ("email"), CONSTRAINT "UQ_78a916df40e02a9deb1c4b75edb" UNIQUE ("username"))'); await queryRunner.query('CREATE TABLE "form_field_logic" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "formula" varchar NOT NULL, "action" varchar(10) NOT NULL, "visible" boolean, "require" boolean, "disable" boolean, "enabled" boolean NOT NULL, "fieldId" integer, "jumpToId" integer, CONSTRAINT "FK_6098b83f6759445d8cfdd03d545" FOREIGN KEY ("fieldId") REFERENCES "form_field" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "FK_4a8019f2b753cfb3216dc3001a6" FOREIGN KEY ("jumpToId") REFERENCES "form_field" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)'); @@ -16,13 +17,10 @@ export class initial1619723437787 implements MigrationInterface { await queryRunner.query('CREATE TABLE "form_visitor" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "referrer" varchar, "ipAddr" varchar NOT NULL, "created" datetime NOT NULL DEFAULT (datetime(\'now\')), "updated" datetime NOT NULL DEFAULT (datetime(\'now\')), "formId" integer, "geoLocationCountry" varchar, "geoLocationCity" varchar, "deviceLanguage" varchar, "deviceType" varchar, "deviceName" varchar, CONSTRAINT "FK_72ade6c3a3e55d1fce94300f8b6" FOREIGN KEY ("formId") REFERENCES "form" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)'); await queryRunner.query('CREATE TABLE "submission" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "ipAddr" varchar NOT NULL, "tokenHash" varchar NOT NULL, "timeElapsed" numeric NOT NULL, "percentageComplete" numeric NOT NULL, "created" datetime NOT NULL DEFAULT (datetime(\'now\')), "lastModified" datetime NOT NULL DEFAULT (datetime(\'now\')), "formId" integer, "visitorId" integer, "userId" integer, "geoLocationCountry" varchar, "geoLocationCity" varchar, "deviceLanguage" varchar, "deviceType" varchar, "deviceName" varchar, CONSTRAINT "FK_6090e1d5cbf3433ffd14e3b53e7" FOREIGN KEY ("formId") REFERENCES "form" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "FK_95b73c7faf2c199f005fda5e8c8" FOREIGN KEY ("visitorId") REFERENCES "form_visitor" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "FK_7bd626272858ef6464aa2579094" FOREIGN KEY ("userId") REFERENCES "user" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)'); - - - await queryRunner.query('CREATE TABLE "form" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar NOT NULL, "language" varchar(10) NOT NULL, "showFooter" boolean NOT NULL, "isLive" boolean NOT NULL, "created" datetime NOT NULL DEFAULT (datetime(\'now\')), "lastModified" datetime NOT NULL DEFAULT (datetime(\'now\')), "adminId" integer, "startPageId" integer, "endPageId" integer, "analyticsGacode" varchar, "designFont" varchar, "designColorsBackground" varchar, "designColorsQuestion" varchar, "designColorsAnswer" varchar, "designColorsButton" varchar, "designColorsButtonactive" varchar, "designColorsButtontext" varchar, CONSTRAINT "FK_a7cb33580bca2b362e5e34fdfcd" FOREIGN KEY ("adminId") REFERENCES "user" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "FK_023d9cf1d97e93facc96c86ca70" FOREIGN KEY ("startPageId") REFERENCES "page" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT "FK_e5d158932e43cfbf9958931ee01" FOREIGN KEY ("endPageId") REFERENCES "page" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION)'); } - public async down(queryRunner: QueryRunner): Promise { + public async realDown(queryRunner: QueryRunner): Promise { await queryRunner.query('DROP TABLE "form"'); await queryRunner.query('DROP TABLE "submission"'); await queryRunner.query('DROP TABLE "form_visitor"'); diff --git a/src/migrations/sqlite/1645952169100-defaultValue.ts b/src/migrations/sqlite/1645952169100-defaultValue.ts index b961548..bea5979 100644 --- a/src/migrations/sqlite/1645952169100-defaultValue.ts +++ b/src/migrations/sqlite/1645952169100-defaultValue.ts @@ -1,13 +1,14 @@ -import { MigrationInterface, QueryRunner } from 'typeorm' +import { QueryRunner } from 'typeorm' +import { SqliteMigration } from '../sqlite.migration' -export class defaultValue1645952169100 implements MigrationInterface { +export class defaultValue1645952169100 extends SqliteMigration { name = 'defaultValue1645952169100' - public async up(queryRunner: QueryRunner): Promise { + public async realUp(queryRunner: QueryRunner): Promise { await queryRunner.query('ALTER TABLE "form_field" RENAME COLUMN "value" TO "defaultValue"'); } - public async down(queryRunner: QueryRunner): Promise { + public async realDown(queryRunner: QueryRunner): Promise { await queryRunner.query('ALTER TABLE "form_field" RENAME COLUMN "defaultValue" TO "value"'); } }