]> git.agnieray.net Git - galette.git/commitdiff
Rework CI order
authorJohan Cwiklinski <johan@x-tnd.be>
Mon, 25 Mar 2024 19:40:40 +0000 (20:40 +0100)
committerJohan Cwiklinski <johan@x-tnd.be>
Mon, 25 Mar 2024 19:48:45 +0000 (20:48 +0100)
Unit tests first, lint last
Postgres first
Higher PHP version first

.github/workflows/ci-linux.yml

index 13314b8f64b712a69a465ff1be8338eb329ade3c..44fce22fb9d9e4b97e25b41c26f294953abc7b86 100644 (file)
@@ -19,17 +19,64 @@ concurrency:
   cancel-in-progress: true
 
 jobs:
-  lint:
+  unit-tests:
     runs-on: ubuntu-latest
-    name: "Lint on PHP ${{ matrix.php-versions }}"
 
     strategy:
-      fail-fast: false
       matrix:
-        php-versions: [ '8.1', '8.3' ]
+        include:
+          #always tests higher stable php version with lower db version
+          #enable coverage on higher stable php version with higher postrgesql version
+          #higher stable php version
+          - { php-version: "8.3", db-image: "postgres:11", coverage: none, always: true }
+          - { php-version: "8.3", db-image: "postgres:16", coverage: 'xdebug', always: true }
+          - { php-version: "8.3", db-image: "mysql:5.7", coverage: none, always: true }
+          - { php-version: "8.3", db-image: "mysql:8.1", coverage: none, always: false }
+          - { php-version: "8.3", db-image: "mariadb:10.4", coverage: none, always: true }
+          - { php-version: "8.3", db-image: "mariadb:11.3", coverage: none, always: false }
+          #lower php version
+          - { php-version: "8.1", db-image: "postgres:11", coverage: none, always: false }
+          - { php-version: "8.1", db-image: "postgres:16", coverage: none, always: false }
+          - { php-version: "8.1", db-image: "mysql:5.7", coverage: none, always: false }
+          - { php-version: "8.1", db-image: "mysql:8.1", coverage: none, always: false }
+          - { php-version: "8.1", db-image: "mariadb:10.4", coverage: none, always: false }
+          - { php-version: "8.1", db-image: "mariadb:11.3", coverage: none, always: false }
+      fail-fast: false
+
+    env:
+      skip: ${{ matrix.always == false && (github.event_name == 'pull_request' || github.repository != 'galette/galette' || !(github.event_name == 'workflow_dispatch' || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop' || startsWith(github.ref, 'refs/tags'))) }}
+      DB: ${{ matrix.db-image }}
+
+    services:
+      # Label used to access the service container
+      db:
+        # Docker Hub image
+        image: ${{ matrix.db-image }}
+        # Provide env variables for both mysql and pgsql
+        env:
+          POSTGRES_USER: galette_tests
+          POSTGRES_PASSWORD: g@l3tte
+          POSTGRES_DB: galette_tests
+          MYSQL_USER: galette_tests
+          MYSQL_PASSWORD: g@l3tte
+          MYSQL_ROOT_PASSWORD: g@l3tte
+          MYSQL_DATABASE: galette_tests
+        # Open network ports for both mysql and pgsql
+        ports:
+          - 3306:3306
+          - 5432:5432
+        # Set health checks to wait until postgres has started
+        options: >-
+          --health-cmd="bash -c 'if [[ -n $(command -v pg_isready) ]]; then pg_isready; else if [[ -n $(command -v mysqladmin) ]]; then mysqladmin ping; else mariadb-admin ping; fi fi'"
+          --health-interval=10s
+          --health-timeout=5s
+          --health-retries=10
+
+    name: PHP ${{ matrix.php-version }} ${{ matrix.db-image }} ${{ (matrix.always == false && (github.event_name == 'pull_request' || github.repository != 'galette/galette' || !(github.event_name == 'workflow_dispatch' || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop' || startsWith(github.ref, 'refs/tags')))) && ' (skipped)' || matrix.coverage == 'xdebug' && ' (with coverage)' || ''}}
 
     steps:
       - name: PHP
+        if: env.skip != 'true'
         uses: shivammathur/setup-php@v2
         with:
           php-version: ${{ matrix.php-versions }}
@@ -39,16 +86,22 @@ jobs:
           ini-values: apc.enable_cli=1
 
       - name: "Show versions"
+        if: env.skip != 'true'
         run: |
           php --version
           composer --version
+          echo "node $(node --version)"
+          echo "npm $(npm --version)"
+          docker exec ${{ job.services.db.id }} bash -c "if [[ -n \$(command -v psql) ]]; then psql --version; else if [[ -n \$(command -v mysql) ]]; then mysql --version; else mariadb --version; fi fi"
 
       - name: Checkout
+        if: env.skip != 'true'
         uses: actions/checkout@v4
         with:
           fetch-depth: 2
 
       - name: "Restore dependencies cache"
+        if: env.skip != 'true'
         uses: actions/cache@v4
         with:
           path: |
@@ -59,33 +112,62 @@ jobs:
             ${{ runner.os }}-galette-${{ matrix.php-version }}-
 
       - name: Install dependencies
-        run: |
-          cd galette
-          composer install --optimize-autoloader --ignore-platform-reqs
+        if: env.skip != 'true'
+        run: bin/install_deps
 
-      - name: CS
+      - name: Init for PostgreSQL (update)
+        env:
+          POSTGRES_HOST: localhost
+          POSTGRES_PORT: 5432
         run: |
-          galette/vendor/bin/phpcs
+          PGPASSWORD=g@l3tte psql -d galette_tests -a -f tests/pgsql_06.sql -U galette_tests -h localhost
+        if: env.skip != 'true' && startsWith(matrix.db-image, 'postgres')
 
-      - name: Twig CS
+      - name: Init for MariaDB (update)
         run: |
-          galette/vendor/bin/twigcs galette/templates/default --severity error --display blocking
+          mysql -e 'create database IF NOT EXISTS galette_tests;' -u galette_tests --password=g@l3tte -h 127.0.0.1 -P 3306
+          mysql -e 'use galette_tests; source tests/mysql_06.sql;' -u galette_tests --password=g@l3tte -h 127.0.0.1 -P 3306
+        if: env.skip != 'true' && (startsWith(matrix.db-image, 'mysql') || startsWith(matrix.db-image, 'mariadb'))
 
-      - name: Install checker
-        working-directory: galette
-        run: composer require maglnet/composer-require-checker -W --optimize-autoloader --ignore-platform-reqs
+      - name: Update database tests
+        run: TESTENV=UPDATE galette/vendor/bin/phpunit --test-suffix=.php --bootstrap tests/TestsBootstrap.php --no-coverage --process-isolation tests/GaletteUpdate/
+        if: env.skip != 'true' && matrix.coverage != 'xdebug'
 
-      - name: Check missing symbols
+      - name: Init for PostgreSQL
+        env:
+          POSTGRES_HOST: localhost
+          POSTGRES_PORT: 5432
         run: |
-          galette/vendor/bin/composer-require-checker check --config-file=.composer-require-checker.config.json galette/composer.json
+          PGPASSWORD=g@l3tte psql -d galette_tests -a -f galette/install/scripts/pgsql.sql -U galette_tests -h localhost
+        if: env.skip != 'true' && startsWith(matrix.db-image, 'postgres')
 
-      - name: PHPStan checks
+      - name: Init for MariaDB
         run: |
-          galette/vendor/bin/phpstan analyze --ansi --memory-limit=2G --no-interaction --no-progress
+          mysql -e 'create database IF NOT EXISTS galette_tests;' -u galette_tests --password=g@l3tte -h 127.0.0.1 -P 3306
+          mysql -e 'use galette_tests; source galette/install/scripts/mysql.sql;' -u galette_tests --password=g@l3tte -h 127.0.0.1 -P 3306
+        if: env.skip != 'true' && (startsWith(matrix.db-image, 'mysql') || startsWith(matrix.db-image, 'mariadb'))
 
-      - name: Headers checks
+      - name: Unit tests
+        run: galette/vendor/bin/phpunit --test-suffix=.php --bootstrap tests/TestsBootstrap.php --no-coverage --process-isolation tests/Galette/
+        if: env.skip != 'true' && matrix.coverage != 'xdebug'
+
+      - name: Unit tests (with coverage)
+        run: galette/vendor/bin/phpunit --test-suffix=.php --bootstrap tests/TestsBootstrap.php --process-isolation --coverage-filter galette/lib --coverage-clover tests/clover.xml tests/Galette/
+        if: env.skip != 'true' && matrix.coverage == 'xdebug'
+
+      - name: Upload code coverage (scrutinizer)
         run: |
-          ./galette/vendor/bin/docheader check galette/config galette/lib galette/includes galette/install galette/webroot test
+          cd galette
+          composer require scrutinizer/ocular --ignore-platform-reqs
+          cd ..
+          php galette/vendor/bin/ocular code-coverage:upload --format=php-clover tests/clover.xml
+        if: env.skip != 'true' && matrix.coverage == 'xdebug'
+
+      - name: Upload code coverage (codecov)
+        uses: codecov/codecov-action@v3
+        with:
+          file: tests/clover.xml
+        if: env.skip != 'true' && matrix.coverage == 'xdebug'
 
   unsupported-dbs:
     runs-on: ubuntu-latest
@@ -94,9 +176,9 @@ jobs:
     strategy:
       matrix:
         include:
+          - { php-version: "8.3", db-image: "postgres:10", always: true}
           - { php-version: "8.3", db-image: "mysql:5.6", always: false}
           - { php-version: "8.3", db-image: "mariadb:10.3", always: false}
-          - { php-version: "8.3", db-image: "postgres:10", always: true}
       fail-fast: false
 
     env:
@@ -172,64 +254,17 @@ jobs:
         if: env.skip != 'true'
         run: TESTENV=FAIL DB=${{ matrix.db-image }} galette/vendor/bin/phpunit --test-suffix=.php --bootstrap tests/TestsBootstrap.php --no-coverage --process-isolation tests/GaletteDbFails/
 
-  unit-tests:
+  lint:
     runs-on: ubuntu-latest
+    name: "Lint on PHP ${{ matrix.php-versions }}"
 
     strategy:
-      matrix:
-        include:
-          #always tests higher stable php version with lower db version
-          #enable coverage on higher stable php version with higher postrgesql version
-          #lower php version
-          - { php-version: "8.1", db-image: "mysql:5.7", coverage: none, always: false }
-          - { php-version: "8.1", db-image: "mysql:8.1", coverage: none, always: false }
-          - { php-version: "8.1", db-image: "mariadb:10.4", coverage: none, always: false }
-          - { php-version: "8.1", db-image: "mariadb:11.3", coverage: none, always: false }
-          - { php-version: "8.1", db-image: "postgres:11", coverage: none, always: false }
-          - { php-version: "8.1", db-image: "postgres:16", coverage: none, always: false }
-          #higher stable php version
-          - { php-version: "8.3", db-image: "mysql:5.7", coverage: none, always: true }
-          - { php-version: "8.3", db-image: "mysql:8.1", coverage: none, always: false }
-          - { php-version: "8.3", db-image: "mariadb:10.4", coverage: none, always: true }
-          - { php-version: "8.3", db-image: "mariadb:11.3", coverage: none, always: false }
-          - { php-version: "8.3", db-image: "postgres:11", coverage: none, always: true }
-          - { php-version: "8.3", db-image: "postgres:16", coverage: 'xdebug', always: true }
       fail-fast: false
-
-    env:
-      skip: ${{ matrix.always == false && (github.event_name == 'pull_request' || github.repository != 'galette/galette' || !(github.event_name == 'workflow_dispatch' || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop' || startsWith(github.ref, 'refs/tags'))) }}
-      DB: ${{ matrix.db-image }}
-
-    services:
-      # Label used to access the service container
-      db:
-        # Docker Hub image
-        image: ${{ matrix.db-image }}
-        # Provide env variables for both mysql and pgsql
-        env:
-          POSTGRES_USER: galette_tests
-          POSTGRES_PASSWORD: g@l3tte
-          POSTGRES_DB: galette_tests
-          MYSQL_USER: galette_tests
-          MYSQL_PASSWORD: g@l3tte
-          MYSQL_ROOT_PASSWORD: g@l3tte
-          MYSQL_DATABASE: galette_tests
-        # Open network ports for both mysql and pgsql
-        ports:
-          - 3306:3306
-          - 5432:5432
-        # Set health checks to wait until postgres has started
-        options: >-
-          --health-cmd="bash -c 'if [[ -n $(command -v pg_isready) ]]; then pg_isready; else if [[ -n $(command -v mysqladmin) ]]; then mysqladmin ping; else mariadb-admin ping; fi fi'"
-          --health-interval=10s
-          --health-timeout=5s
-          --health-retries=10
-
-    name: PHP ${{ matrix.php-version }} ${{ matrix.db-image }} ${{ (matrix.always == false && (github.event_name == 'pull_request' || github.repository != 'galette/galette' || !(github.event_name == 'workflow_dispatch' || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop' || startsWith(github.ref, 'refs/tags')))) && ' (skipped)' || matrix.coverage == 'xdebug' && ' (with coverage)' || ''}}
+      matrix:
+        php-versions: [ '8.1', '8.3' ]
 
     steps:
       - name: PHP
-        if: env.skip != 'true'
         uses: shivammathur/setup-php@v2
         with:
           php-version: ${{ matrix.php-versions }}
@@ -239,22 +274,16 @@ jobs:
           ini-values: apc.enable_cli=1
 
       - name: "Show versions"
-        if: env.skip != 'true'
         run: |
           php --version
           composer --version
-          echo "node $(node --version)"
-          echo "npm $(npm --version)"
-          docker exec ${{ job.services.db.id }} bash -c "if [[ -n \$(command -v psql) ]]; then psql --version; else if [[ -n \$(command -v mysql) ]]; then mysql --version; else mariadb --version; fi fi"
 
       - name: Checkout
-        if: env.skip != 'true'
         uses: actions/checkout@v4
         with:
           fetch-depth: 2
 
       - name: "Restore dependencies cache"
-        if: env.skip != 'true'
         uses: actions/cache@v4
         with:
           path: |
@@ -265,59 +294,30 @@ jobs:
             ${{ runner.os }}-galette-${{ matrix.php-version }}-
 
       - name: Install dependencies
-        if: env.skip != 'true'
-        run: bin/install_deps
+        run: |
+          cd galette
+          composer install --optimize-autoloader --ignore-platform-reqs
 
-      - name: Init for PostgreSQL (update)
-        env:
-          POSTGRES_HOST: localhost
-          POSTGRES_PORT: 5432
+      - name: CS
         run: |
-          PGPASSWORD=g@l3tte psql -d galette_tests -a -f tests/pgsql_06.sql -U galette_tests -h localhost
-        if: env.skip != 'true' && startsWith(matrix.db-image, 'postgres')
+          galette/vendor/bin/phpcs
 
-      - name: Init for MariaDB (update)
+      - name: Twig CS
         run: |
-          mysql -e 'create database IF NOT EXISTS galette_tests;' -u galette_tests --password=g@l3tte -h 127.0.0.1 -P 3306
-          mysql -e 'use galette_tests; source tests/mysql_06.sql;' -u galette_tests --password=g@l3tte -h 127.0.0.1 -P 3306
-        if: env.skip != 'true' && (startsWith(matrix.db-image, 'mysql') || startsWith(matrix.db-image, 'mariadb'))
+          galette/vendor/bin/twigcs galette/templates/default --severity error --display blocking
 
-      - name: Update database tests
-        run: TESTENV=UPDATE galette/vendor/bin/phpunit --test-suffix=.php --bootstrap tests/TestsBootstrap.php --no-coverage --process-isolation tests/GaletteUpdate/
-        if: env.skip != 'true' && matrix.coverage != 'xdebug'
+      - name: Install checker
+        working-directory: galette
+        run: composer require maglnet/composer-require-checker -W --optimize-autoloader --ignore-platform-reqs
 
-      - name: Init for PostgreSQL
-        env:
-          POSTGRES_HOST: localhost
-          POSTGRES_PORT: 5432
+      - name: Check missing symbols
         run: |
-          PGPASSWORD=g@l3tte psql -d galette_tests -a -f galette/install/scripts/pgsql.sql -U galette_tests -h localhost
-        if: env.skip != 'true' && startsWith(matrix.db-image, 'postgres')
+          galette/vendor/bin/composer-require-checker check --config-file=.composer-require-checker.config.json galette/composer.json
 
-      - name: Init for MariaDB
+      - name: PHPStan checks
         run: |
-          mysql -e 'create database IF NOT EXISTS galette_tests;' -u galette_tests --password=g@l3tte -h 127.0.0.1 -P 3306
-          mysql -e 'use galette_tests; source galette/install/scripts/mysql.sql;' -u galette_tests --password=g@l3tte -h 127.0.0.1 -P 3306
-        if: env.skip != 'true' && (startsWith(matrix.db-image, 'mysql') || startsWith(matrix.db-image, 'mariadb'))
-
-      - name: Unit tests
-        run: galette/vendor/bin/phpunit --test-suffix=.php --bootstrap tests/TestsBootstrap.php --no-coverage --process-isolation tests/Galette/
-        if: env.skip != 'true' && matrix.coverage != 'xdebug'
-
-      - name: Unit tests (with coverage)
-        run: galette/vendor/bin/phpunit --test-suffix=.php --bootstrap tests/TestsBootstrap.php --process-isolation --coverage-filter galette/lib --coverage-clover tests/clover.xml tests/Galette/
-        if: env.skip != 'true' && matrix.coverage == 'xdebug'
+          galette/vendor/bin/phpstan analyze --ansi --memory-limit=2G --no-interaction --no-progress
 
-      - name: Upload code coverage (scrutinizer)
+      - name: Headers checks
         run: |
-          cd galette
-          composer require scrutinizer/ocular --ignore-platform-reqs
-          cd ..
-          php galette/vendor/bin/ocular code-coverage:upload --format=php-clover tests/clover.xml
-        if: env.skip != 'true' && matrix.coverage == 'xdebug'
-
-      - name: Upload code coverage (codecov)
-        uses: codecov/codecov-action@v3
-        with:
-          file: tests/clover.xml
-        if: env.skip != 'true' && matrix.coverage == 'xdebug'
+          ./galette/vendor/bin/docheader check galette/config galette/lib galette/includes galette/install galette/webroot test
\ No newline at end of file