feat: add support for MySQL (#238)
* ci: run tests on mysql * adapt migration to support default values on MySQL --------- Co-authored-by: Julien Nahum <julien@nahum.net>
This commit is contained in:
parent
7b3be36ba5
commit
c51d7397fa
|
@ -27,6 +27,24 @@ jobs:
|
||||||
ports:
|
ports:
|
||||||
# Maps tcp port 5432 on service container to the host
|
# Maps tcp port 5432 on service container to the host
|
||||||
- 5432:5432
|
- 5432:5432
|
||||||
|
mysql:
|
||||||
|
# Docker Hub image
|
||||||
|
image: mysql:8
|
||||||
|
# Provide the password for mysql
|
||||||
|
env:
|
||||||
|
MYSQL_ROOT_PASSWORD: test
|
||||||
|
MYSQL_DATABASE: test
|
||||||
|
MYSQL_USER: test
|
||||||
|
MYSQL_PASSWORD: test
|
||||||
|
# Set health checks to wait until mysql has started
|
||||||
|
options: >-
|
||||||
|
--health-cmd="mysqladmin ping"
|
||||||
|
--health-interval=10s
|
||||||
|
--health-timeout=5s
|
||||||
|
--health-retries=5
|
||||||
|
ports:
|
||||||
|
# Maps tcp port 3306 on service container to the host
|
||||||
|
- 3306:3306
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: 'run-tests'
|
group: 'run-tests'
|
||||||
|
@ -35,8 +53,22 @@ jobs:
|
||||||
fail-fast: true
|
fail-fast: true
|
||||||
matrix:
|
matrix:
|
||||||
php: [ 8.2 ]
|
php: [ 8.2 ]
|
||||||
|
connection: [ pgsql, mysql ]
|
||||||
|
include:
|
||||||
|
- connection: pgsql
|
||||||
|
host: localhost
|
||||||
|
port: 5432
|
||||||
|
user: postgres
|
||||||
|
password: postgres
|
||||||
|
database: postgres
|
||||||
|
- connection: mysql
|
||||||
|
host: '127.0.0.1'
|
||||||
|
port: 3306
|
||||||
|
user: root
|
||||||
|
password: test
|
||||||
|
database: test
|
||||||
|
|
||||||
name: Run Feature & Unit tests (PHP ${{ matrix.php }})
|
name: Run Feature & Unit tests (PHP ${{ matrix.php }} - ${{ matrix.connection }})
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
|
@ -80,6 +112,13 @@ jobs:
|
||||||
|
|
||||||
- name: Run tests (Unit and Feature)
|
- name: Run tests (Unit and Feature)
|
||||||
run: ./vendor/bin/pest -p
|
run: ./vendor/bin/pest -p
|
||||||
|
env:
|
||||||
|
DB_CONNECTION: ${{ matrix.connection }}
|
||||||
|
DB_HOST: ${{ matrix.host }}
|
||||||
|
DB_PORT: ${{ matrix.port }}
|
||||||
|
DB_DATABASE: ${{ matrix.database }}
|
||||||
|
DB_USERNAME: ${{ matrix.user }}
|
||||||
|
DB_PASSWORD: ${{ matrix.password }}
|
||||||
|
|
||||||
- name: "Archive log results"
|
- name: "Archive log results"
|
||||||
if: always()
|
if: always()
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Query\Expression;
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
@ -22,14 +23,14 @@ class CreateFormsTable extends Migration
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
$table->boolean('notifies')->default(false);
|
$table->boolean('notifies')->default(false);
|
||||||
$table->text('description')->nullable();
|
$table->text('description')->nullable();
|
||||||
$table->text('submit_button_text')->default('Submit');
|
$table->text('submit_button_text')->default(new Expression("('Submit')"));
|
||||||
$table->boolean('re_fillable')->default(false);
|
$table->boolean('re_fillable')->default(false);
|
||||||
$table->text('re_fill_button_text')->default('Fill Again');
|
$table->text('re_fill_button_text')->default(new Expression("('Fill Again')"));
|
||||||
$table->string('color')->default('#3B82F6');
|
$table->string('color')->default('#3B82F6');
|
||||||
$table->boolean('uppercase_labels')->default(true);
|
$table->boolean('uppercase_labels')->default(true);
|
||||||
$table->boolean('no_branding')->default(false);
|
$table->boolean('no_branding')->default(false);
|
||||||
$table->boolean('hide_title')->default(false);
|
$table->boolean('hide_title')->default(false);
|
||||||
$table->text('submitted_text')->default('Amazing, we saved your answers. Thank you for your time and have a great day!');
|
$table->text('submitted_text')->default(new Expression("('Amazing, we saved your answers. Thank you for your time and have a great day!')"));
|
||||||
$table->string('dark_mode')->default('auto');
|
$table->string('dark_mode')->default('auto');
|
||||||
$table->string('webhook_url')->nullable();
|
$table->string('webhook_url')->nullable();
|
||||||
$table->boolean('send_submission_confirmation')->default(false);
|
$table->boolean('send_submission_confirmation')->default(false);
|
||||||
|
@ -45,13 +46,13 @@ class CreateFormsTable extends Migration
|
||||||
$table->timestamp('closes_at')->nullable();
|
$table->timestamp('closes_at')->nullable();
|
||||||
$table->text('closed_text')->nullable();
|
$table->text('closed_text')->nullable();
|
||||||
$table->string('notification_subject')->default("We saved your answers");
|
$table->string('notification_subject')->default("We saved your answers");
|
||||||
$table->text('notification_body')->default('<p>Hello there 👋 <br>This is a confirmation that your submission was successfully saved.</p>');
|
$table->text('notification_body')->default(new Expression("('<p>Hello there 👋 <br>This is a confirmation that your submission was successfully saved.</p>')"));
|
||||||
$table->boolean('notifications_include_submission')->default(true);
|
$table->boolean('notifications_include_submission')->default(true);
|
||||||
$table->boolean('use_captcha')->default(false);
|
$table->boolean('use_captcha')->default(false);
|
||||||
$table->boolean('can_be_indexed')->default(true);
|
$table->boolean('can_be_indexed')->default(true);
|
||||||
$table->string('password')->nullable()->default(null);
|
$table->string('password')->nullable()->default(null);
|
||||||
$table->string('notification_sender')->default("OpenForm");
|
$table->string('notification_sender')->default("OpenForm");
|
||||||
$table->jsonb('tags')->default('[]');
|
$table->jsonb('tags')->default(new Expression('(JSON_ARRAY())'));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Query\Expression;
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
@ -16,7 +17,7 @@ class CreateFormSubmissionsTable extends Migration
|
||||||
Schema::create('form_submissions', function (Blueprint $table) {
|
Schema::create('form_submissions', function (Blueprint $table) {
|
||||||
$table->id();
|
$table->id();
|
||||||
$table->foreignIdFor(\App\Models\Forms\Form::class,'form_id');
|
$table->foreignIdFor(\App\Models\Forms\Form::class,'form_id');
|
||||||
$table->jsonb('data')->default('{}');
|
$table->jsonb('data')->default(new Expression("(JSON_OBJECT())"));
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Query\Expression;
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
@ -16,7 +17,7 @@ return new class extends Migration
|
||||||
Schema::create('form_statistics', function (Blueprint $table) {
|
Schema::create('form_statistics', function (Blueprint $table) {
|
||||||
$table->id();
|
$table->id();
|
||||||
$table->foreignIdFor(\App\Models\Forms\Form::class,'form_id');
|
$table->foreignIdFor(\App\Models\Forms\Form::class,'form_id');
|
||||||
$table->jsonb('data')->default('{}');
|
$table->jsonb('data')->default(new Expression("(JSON_OBJECT())"));
|
||||||
$table->date('date');
|
$table->date('date');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Query\Expression;
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
@ -14,7 +15,7 @@ return new class extends Migration
|
||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
Schema::table('forms', function (Blueprint $table) {
|
Schema::table('forms', function (Blueprint $table) {
|
||||||
$table->jsonb('removed_properties')->default('[]');
|
$table->jsonb('removed_properties')->default(new Expression("(JSON_ARRAY())"));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Query\Expression;
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
@ -20,7 +21,7 @@ return new class extends Migration
|
||||||
$table->string('slug');
|
$table->string('slug');
|
||||||
$table->text('description');
|
$table->text('description');
|
||||||
$table->string('image_url');
|
$table->string('image_url');
|
||||||
$table->jsonb('structure')->default('{}');
|
$table->jsonb('structure')->default(new Expression("(JSON_OBJECT())"));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Query\Expression;
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
@ -14,7 +15,7 @@ return new class extends Migration
|
||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
Schema::table('templates', function (Blueprint $table) {
|
Schema::table('templates', function (Blueprint $table) {
|
||||||
$table->jsonb('questions')->default('{}');
|
$table->jsonb('questions')->default(new Expression("(JSON_ARRAY())"));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Query\Expression;
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
@ -14,7 +15,7 @@ return new class extends Migration
|
||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
Schema::table('forms', function (Blueprint $table) {
|
Schema::table('forms', function (Blueprint $table) {
|
||||||
$table->text('editable_submissions_button_text')->default('Edit submission');
|
$table->text('editable_submissions_button_text')->default(new Expression("('Edit submission')"));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Query\Expression;
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
@ -14,7 +15,7 @@ return new class extends Migration
|
||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
Schema::table('forms', function (Blueprint $table) {
|
Schema::table('forms', function (Blueprint $table) {
|
||||||
$table->json('seo_meta')->default('{}');
|
$table->json('seo_meta')->default(new Expression("(JSON_OBJECT())"));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Query\Expression;
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
@ -14,7 +15,7 @@ return new class extends Migration
|
||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
Schema::table('forms', function (Blueprint $table) {
|
Schema::table('forms', function (Blueprint $table) {
|
||||||
$table->json('notification_settings')->default('{}')->nullable(true);
|
$table->json('notification_settings')->default(new Expression("(JSON_OBJECT())"))->nullable(true);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Query\Expression;
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
@ -15,10 +16,10 @@ return new class extends Migration
|
||||||
{
|
{
|
||||||
Schema::table('templates', function (Blueprint $table) {
|
Schema::table('templates', function (Blueprint $table) {
|
||||||
$table->boolean('publicly_listed')->default(false);
|
$table->boolean('publicly_listed')->default(false);
|
||||||
$table->jsonb('industries')->default('[]');
|
$table->jsonb('industries')->default(new Expression("(JSON_ARRAY())"));
|
||||||
$table->jsonb('types')->default('[]');
|
$table->jsonb('types')->default(new Expression("(JSON_ARRAY())"));
|
||||||
$table->string('short_description')->nullable();
|
$table->string('short_description')->nullable();
|
||||||
$table->jsonb('related_templates')->default('[]');
|
$table->jsonb('related_templates')->default(new Expression("(JSON_ARRAY())"));
|
||||||
$table->string('image_url',500)->nullable()->change();
|
$table->string('image_url',500)->nullable()->change();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue