diff --git a/.github/workflows/db-migration.yml b/.github/workflows/db-migration.yml new file mode 100644 index 000000000..022b84592 --- /dev/null +++ b/.github/workflows/db-migration.yml @@ -0,0 +1,173 @@ +on: + pull_request: + paths: + - 'src/**' + - '.github/workflows/db-migration.yml' + - 'composer.json' + + push: + branches: ['master'] + paths: + - 'src/**' + - '.github/workflows/db-migration.yml' + - 'composer.json' + +name: db-migration + +jobs: + tests: + name: PHP ${{ matrix.php }}-db-migration-${{ matrix.os }} + + env: + COMPOSER_ROOT_VERSION: dev-master + EXTENSIONS: pdo, pdo_mysql, pdo_oci, pdo_pgsql, pdo_sqlite, pdo_sqlsrv + + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: + - ubuntu-latest + + php: + - 8.1 + - 8.2 + - 8.3 + + services: + mysql: + image: mysql:latest + env: + MYSQL_ALLOW_EMPTY_PASSWORD: true + MYSQL_PASSWORD: '' + MYSQL_DATABASE: yiitest + ports: + - 3306:3306 + options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 + oci: + image: gvenzl/oracle-xe:latest + ports: + - 1521:1521 + env: + ORACLE_DATABASE : yiitest + ORACLE_PASSWORD : root + options: >- + --name=oci + --health-cmd healthcheck.sh + --health-interval 10s + --health-timeout 5s + --health-retries 10 + postgres: + image: postgres:16 + env: + POSTGRES_USER: root + POSTGRES_PASSWORD: root + POSTGRES_DB: yiitest + ports: + - 5432:5432 + options: --name=postgres --health-cmd="pg_isready" --health-interval=10s --health-timeout=5s --health-retries=3 + mssql: + image: mcr.microsoft.com/mssql/server:2022-latest + env: + SA_PASSWORD: YourStrong!Passw0rd + ACCEPT_EULA: Y + MSSQL_PID: Developer + ports: + - 1433:1433 + options: --name=mssql --health-cmd="/opt/mssql-tools18/bin/sqlcmd -C -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'SELECT 1'" --health-interval=10s --health-timeout=5s --health-retries=3 + + steps: + - name: Install ODBC driver. + run: | + sudo curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list + sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 + + - name: Checkout. + uses: actions/checkout@v4 + + - name: Create MS SQL Database. + run: docker exec -i mssql /opt/mssql-tools18/bin/sqlcmd -C -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'CREATE DATABASE yiitest' + + - name: Install PHP with extensions. + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + extensions: ${{ env.EXTENSIONS }} + ini-values: date.timezone='UTC' + coverage: pcov + + - name: Update composer. + run: composer self-update + + - name: Set environment variables pull request linux. + uses: yiisoft/actions/db/environment-linux@master + + - name: Install db-mssql. + uses: yiisoft/actions/db/subpackage-install@master + with: + BRANCH_NAME: ${{ env.BRANCH_NAME }} + COMPOSER_ROOT_VERSION: ${{ env.COMPOSER_ROOT_VERSION }} + CURRENT_PACKAGE: db-mssql + FULL_BRANCH_NAME: ${{ env.FULL_BRANCH_NAME }} + WORK_PACKAGE_URL: ${{ env.WORK_PACKAGE_URL }} + + - name: Install db-mysql. + uses: yiisoft/actions/db/subpackage-install@master + with: + BRANCH_NAME: ${{ env.BRANCH_NAME }} + COMPOSER_ROOT_VERSION: ${{ env.COMPOSER_ROOT_VERSION }} + CURRENT_PACKAGE: db-mysql + FULL_BRANCH_NAME: ${{ env.FULL_BRANCH_NAME }} + WORK_PACKAGE_URL: ${{ env.WORK_PACKAGE_URL }} + + - name: Install db-pgsql. + uses: yiisoft/actions/db/subpackage-install@master + with: + BRANCH_NAME: ${{ env.BRANCH_NAME }} + COMPOSER_ROOT_VERSION: ${{ env.COMPOSER_ROOT_VERSION }} + CURRENT_PACKAGE: db-pgsql + FULL_BRANCH_NAME: ${{ env.FULL_BRANCH_NAME }} + WORK_PACKAGE_URL: ${{ env.WORK_PACKAGE_URL }} + + - name: Install db-oracle. + uses: yiisoft/actions/db/subpackage-install@master + with: + BRANCH_NAME: ${{ env.BRANCH_NAME }} + COMPOSER_ROOT_VERSION: ${{ env.COMPOSER_ROOT_VERSION }} + CURRENT_PACKAGE: db-oracle + FULL_BRANCH_NAME: ${{ env.FULL_BRANCH_NAME }} + WORK_PACKAGE_URL: ${{ env.WORK_PACKAGE_URL }} + + - name: Install db-sqlite. + uses: yiisoft/actions/db/subpackage-install@master + with: + BRANCH_NAME: ${{ env.BRANCH_NAME }} + COMPOSER_ROOT_VERSION: ${{ env.COMPOSER_ROOT_VERSION }} + CURRENT_PACKAGE: db-sqlite + FULL_BRANCH_NAME: ${{ env.FULL_BRANCH_NAME }} + WORK_PACKAGE_URL: ${{ env.WORK_PACKAGE_URL }} + + - name: Install yiisoft/test-support + run: composer require yiisoft/test-support + + - name: Install yiisoft/yii-console + run: composer require yiisoft/yii-console + + - name: Install db-migration. + uses: yiisoft/actions/db/subpackage-install@master + with: + BRANCH_NAME: ${{ env.BRANCH_NAME }} + COMPOSER_ROOT_VERSION: ${{ env.COMPOSER_ROOT_VERSION }} + CURRENT_PACKAGE: db-migration + FULL_BRANCH_NAME: ${{ env.FULL_BRANCH_NAME }} + WORK_PACKAGE_URL: ${{ env.WORK_PACKAGE_URL }} + + - name: Run tests with phpunit with code coverage. + run: vendor/bin/phpunit --testsuite=DbMigration --coverage-clover=coverage.xml --colors=always --display-warnings --display-deprecations + + - name: Upload coverage to Codecov. + if: matrix.php == '8.3' + uses: codecov/codecov-action@v3 + with: + token: ${{ secrets.CODECOV_TOKEN }} + files: ./coverage.xml diff --git a/composer.json b/composer.json index 9bcedb8b6..d0e6495f2 100644 --- a/composer.json +++ b/composer.json @@ -67,7 +67,15 @@ "Yiisoft\\Db\\Mysql\\Tests\\": "vendor/yiisoft/db-mysql/tests", "Yiisoft\\Db\\Oracle\\Tests\\": "vendor/yiisoft/db-oracle/tests", "Yiisoft\\Db\\Pgsql\\Tests\\": "vendor/yiisoft/db-pgsql/tests", - "Yiisoft\\Db\\Sqlite\\Tests\\": "vendor/yiisoft/db-sqlite/tests" + "Yiisoft\\Db\\Sqlite\\Tests\\": "vendor/yiisoft/db-sqlite/tests", + "Yiisoft\\Db\\Migration\\Tests\\": "vendor/yiisoft/db-migration/tests", + "Yiisoft\\Db\\Migration\\Tests\\NonExistsDirectory\\": "vendor/yiisoft/db-migration/tests/non-exists-directory", + "Yiisoft\\Db\\Migration\\Tests\\ForTest\\": "vendor/yiisoft/db-migration/tests/Support", + "Yiisoft\\Db\\Migration\\Tests\\Support\\": "vendor/yiisoft/db-migration/tests/Support", + "Yiisoft\\Db\\Migration\\Tests\\Support\\MigrationsExtra\\": [ + "vendor/yiisoft/db-migration/tests/Support/MigrationsExtra", + "vendor/yiisoft/db-migration/tests/Support/MigrationsExtra2" + ] } }, "extra": { diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 7142ccb39..0c005d600 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -30,6 +30,9 @@ ./vendor/yiisoft/active-record/tests/Driver + + ./vendor/yiisoft/db-migration/tests/Driver + ./vendor/yiisoft/db-mssql/tests