From c86bb199848e3c9c7d5a6a98d7115382a71b6699 Mon Sep 17 00:00:00 2001 From: mattamon Date: Thu, 20 Feb 2025 07:41:11 +0100 Subject: [PATCH 1/2] Update workflows --- .github/workflows/codeception.yml | 153 +++++++++++++------------- .github/workflows/static-analysis.yml | 133 +++++++++++++--------- 2 files changed, 154 insertions(+), 132 deletions(-) diff --git a/.github/workflows/codeception.yml b/.github/workflows/codeception.yml index fb780a2e..ce0bf35c 100644 --- a/.github/workflows/codeception.yml +++ b/.github/workflows/codeception.yml @@ -1,95 +1,92 @@ - -name: "Codeception Tests" +name: "Codeception Tests centralised" on: - pull_request: - branches: - - "*.*" - - "master" + workflow_dispatch: push: branches: - - "*.*" - - "master" - - "*_actions" + - "[0-9]+.[0-9]+" + - "[0-9]+.x" + - "feature-*" + pull_request: + types: [opened, synchronize, reopened] env: PIMCORE_PROJECT_ROOT: ${{ github.workspace }} - APP_ENV: test - PIMCORE_TEST: 1 - PIMCORE_TEST_DB_DSN: "mysql://root@127.0.0.1:33006/pimcore_test" - PIMCORE_TEST_REDIS_DSN: "redis://127.0.0.1:63379" + PRIVATE_REPO: ${{ github.event.repository.private }} jobs: - codeception-tests: - name: "Codeception tests" - runs-on: "ubuntu-20.04" - continue-on-error: ${{ matrix.experimental }} - strategy: - matrix: - include: - - { php-version: 8.1, database: "mariadb:10.3", dependencies: lowest, experimental: false } - - { php-version: 8.2, database: "mariadb:10.11", dependencies: highest, experimental: false } - - { php-version: 8.3, database: "mariadb:10.11", dependencies: highest, pimcore_version: "11.x-dev as 11.3.9", experimental: true } - - services: - redis: - image: redis - ports: - - 63379:6379 - mariadb: - image: "${{ matrix.database }}" - ports: - - 33006:3306 - env: - MYSQL_ALLOW_EMPTY_PASSWORD: yes - + setup-matrix: + runs-on: ubuntu-latest + outputs: + php_versions: ${{ steps.parse-php-versions.outputs.php_versions }} + matrix: ${{ steps.set-matrix.outputs.matrix }} + private_repo: ${{ env.PRIVATE_REPO }} steps: - - name: "Checkout code" - uses: "actions/checkout@v2" - - - name: "Install PHP" - uses: "shivammathur/setup-php@v2" - with: - coverage: "none" - extensions: imagick - ini-values: display_errors=On, display_startup_errors=On, error_reporting=32767 - php-version: "${{ matrix.php-version }}" - - - name: Verify MariaDB connection - run: | - cp .github/ci/files/.my.cnf ~/.my.cnf - while ! mysqladmin ping --silent; do - sleep 1 - done - - - name: "Setup Pimcore environment" - env: - DEPENDENCIES: "${{ matrix.dependencies }}" - run: | - mysql -e "CREATE DATABASE pimcore_test CHARSET=utf8mb4;" - .github/ci/scripts/setup-environment.sh + - name: Checkout code + uses: actions/checkout@v4 - - name: "Update Pimcore version" - env: - PIMCORE_VERSION: "${{ matrix.pimcore_version }}" - run: | - if [ ! -z "$PIMCORE_VERSION" ]; then - composer require --no-update pimcore/pimcore:"${PIMCORE_VERSION}" - fi - - - name: "Install dependencies with Composer" - uses: "ramsey/composer-install@v2" + - name: Checkout reusable workflow repo + uses: actions/checkout@v4 with: - dependency-versions: "${{ matrix.dependencies }}" + repository: pimcore/workflows-collection-public + ref: main + path: reusable-workflows - - name: "Test environment infos" + - name: Parse PHP versions from composer.json + id: parse-php-versions run: | - mysql -e "SELECT VERSION();" - php -i + if [ -f composer.json ]; then + php_versions=$(jq -r '.require.php' composer.json | grep -oP '\d+\.\d+' | tr '\n' ',' | sed 's/,$//') + if [ -z "$php_versions" ]; then + echo "No PHP versions found in composer.json" + echo "Setting default PHP value" + echo "php_versions=default" >> $GITHUB_OUTPUT + else + echo "php_versions=$php_versions" >> $GITHUB_OUTPUT + echo "#### php versions #### : $php_versions" + fi + else + echo "composer.json not found" + exit 1 + fi - - name: "Sync Metadata Storage" + - name: Set up matrix + id: set-matrix run: | - bin/console doctrine:migrations:sync-metadata-storage -vvv + php_versions="${{ steps.parse-php-versions.outputs.php_versions }}" + + MATRIX_JSON=$(cat reusable-workflows/codeception-tests-configuration/matrix-config.json) + + IFS=',' read -ra VERSIONS_ARRAY <<< "$php_versions" + + FILTERED_MATRIX_JSON=$(echo $MATRIX_JSON | jq --arg php_versions "$php_versions" ' + { + matrix: [ + .configs[] | + select(.php_version == $php_versions) | + .matrix[] + ] + }') + + ENCODED_MATRIX_JSON=$(echo $FILTERED_MATRIX_JSON | jq -c .) + + echo "matrix=${ENCODED_MATRIX_JSON}" >> $GITHUB_OUTPUT - - name: "Run Codeception" - run: "vendor/bin/codecept run -c . -vvv --xml" + codeception-tests: + needs: setup-matrix + strategy: + matrix: ${{ fromJson(needs.setup-matrix.outputs.matrix) }} + uses: pimcore/workflows-collection-public/.github/workflows/reusable-codeception-tests-centralized.yaml@main + with: + APP_ENV: test + PIMCORE_TEST: 1 + PRIVATE_REPO: ${{ needs.setup-matrix.outputs.private_repo}} + PHP_VERSION: ${{ matrix.matrix.php-version }} + DATABASE: ${{ matrix.matrix.database }} + SERVER_VERSION: ${{ matrix.matrix.server_version }} + DEPENDENCIES: ${{ matrix.matrix.dependencies }} + EXPERIMENTAL: ${{ matrix.matrix.experimental }} + PIMCORE_VERSION: ${{ matrix.matrix.pimcore_version }} + secrets: + SSH_PRIVATE_KEY_PIMCORE_DEPLOYMENTS_USER: ${{ secrets.SSH_PRIVATE_KEY_PIMCORE_DEPLOYMENTS_USER }} + COMPOSER_PIMCORE_REPO_PACKAGIST_TOKEN: ${{ secrets.COMPOSER_PIMCORE_REPO_PACKAGIST_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index f437ae50..cc70aac4 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -1,70 +1,95 @@ -name: "Static Analysis" +name: "Static analysis centralised" on: - pull_request: - branches: - - "[0-9]+.[0-9]+" - - "[0-9]+.x" + schedule: + - cron: '0 3 * * 1,3,5' + workflow_dispatch: push: branches: - "[0-9]+.[0-9]+" - "[0-9]+.x" + - "feature-*" + pull_request: + types: [ opened, synchronize, reopened ] + + +env: + PIMCORE_PROJECT_ROOT: ${{ github.workspace }} + PRIVATE_REPO: ${{ github.event.repository.private }} jobs: - static-analysis-phpstan: - name: "Static Analysis with PHPStan" - runs-on: "ubuntu-20.04" - continue-on-error: ${{ matrix.experimental }} - strategy: - matrix: - include: - - { php-version: "8.1", dependencies: "lowest", experimental: false } - - { php-version: "8.2", dependencies: "highest", experimental: false } - - { php-version: "8.3", dependencies: "highest", pimcore_version: "11.x-dev as 11.3.9", experimental: true } + setup-matrix: + runs-on: ubuntu-latest + outputs: + php_versions: ${{ steps.parse-php-versions.outputs.php_versions }} + matrix: ${{ steps.set-matrix.outputs.matrix }} + private_repo: ${{ env.PRIVATE_REPO }} steps: - - name: "Checkout code" - uses: "actions/checkout@v4" + - name: Checkout code + uses: actions/checkout@v4 - - name: "Install PHP" - uses: shivammathur/setup-php@v2 + - name: Checkout reusable workflow repo + uses: actions/checkout@v4 with: - coverage: "none" - php-version: "${{ matrix.php-version }}" + repository: pimcore/workflows-collection-public + ref: main + path: reusable-workflows - - name: "Setup Pimcore environment" - env: - DEPENDENCIES: "${{ matrix.dependencies }}" + - name: Parse PHP versions from composer.json + id: parse-php-versions run: | - .github/ci/scripts/setup-environment.sh + if [ -f composer.json ]; then + php_versions=$(jq -r '.require.php' composer.json | grep -oP '\d+\.\d+' | tr '\n' ',' | sed 's/,$//') + if [ -z "$php_versions" ]; then + echo "No PHP versions found in composer.json" + echo "Setting default PHP value" + echo "php_versions=default" >> $GITHUB_OUTPUT + else + echo "php_versions=$php_versions" >> $GITHUB_OUTPUT + echo "#### php versions #### : $php_versions" + fi + else + echo "composer.json not found" + exit 1 + fi - - name: "Update Pimcore version" - env: - PIMCORE_VERSION: "${{ matrix.pimcore_version }}" + - name: Set up matrix + id: set-matrix run: | - if [ ! -z "$PIMCORE_VERSION" ]; then - composer require --no-update pimcore/pimcore:"${PIMCORE_VERSION}" - fi + php_versions="${{ steps.parse-php-versions.outputs.php_versions }}" + + MATRIX_JSON=$(cat reusable-workflows/phpstan-configuration/matrix-config.json) + + IFS=',' read -ra VERSIONS_ARRAY <<< "$php_versions" + + FILTERED_MATRIX_JSON=$(echo $MATRIX_JSON | jq --arg php_versions "$php_versions" ' + { + matrix: [ + .configs[] | + select(.php_version == $php_versions) | + .matrix[] + ] + }') + + ENCODED_MATRIX_JSON=$(echo $FILTERED_MATRIX_JSON | jq -c .) + + echo "matrix=${ENCODED_MATRIX_JSON}" >> $GITHUB_OUTPUT - - name: "Install dependencies with Composer" - uses: ramsey/composer-install@v3 - with: - dependency-versions: "${{ matrix.dependencies }}" - - - name: "Run a static analysis with phpstan/phpstan (highest)" - if: ${{ matrix.dependencies == 'highest' }} - run: "vendor/bin/phpstan analyse --memory-limit=-1" - - - name: "Run a static analysis with phpstan/phpstan (lowest)" - if: ${{ matrix.dependencies == 'lowest' }} - run: "vendor/bin/phpstan analyse --memory-limit=-1 -c phpstan-lowest.neon" - - - name: "Generate baseline file" - if: ${{ failure() }} - run: "vendor/bin/phpstan analyse --memory-limit=-1 --generate-baseline" - - - name: "Upload baseline file" - if: ${{ failure() }} - uses: actions/upload-artifact@v4 - with: - name: phpstan-baseline.neon - path: phpstan-baseline.neon + static-analysis: + needs: setup-matrix + strategy: + matrix: ${{ fromJson(needs.setup-matrix.outputs.matrix) }} + uses: pimcore/workflows-collection-public/.github/workflows/reusable-static-analysis-centralized.yaml@main + with: + APP_ENV: test + PIMCORE_TEST: 1 + PRIVATE_REPO: ${{ needs.setup-matrix.outputs.private_repo}} + PHP_VERSION: ${{ matrix.matrix.php-version }} + SYMFONY: ${{ matrix.matrix.symfony }} + DEPENDENCIES: ${{ matrix.matrix.dependencies }} + EXPERIMENTAL: ${{ matrix.matrix.experimental }} + PIMCORE_VERSION: ${{ matrix.matrix.pimcore_version }} + COMPOSER_OPTIONS: ${{ matrix.matrix.composer_options }} + secrets: + SSH_PRIVATE_KEY_PIMCORE_DEPLOYMENTS_USER: ${{ secrets.SSH_PRIVATE_KEY_PIMCORE_DEPLOYMENTS_USER }} + COMPOSER_PIMCORE_REPO_PACKAGIST_TOKEN: ${{ secrets.COMPOSER_PIMCORE_REPO_PACKAGIST_TOKEN }} \ No newline at end of file From 6bf91c4f72a41af271f6640b3ce831be1f9db5b3 Mon Sep 17 00:00:00 2001 From: mattamon Date: Thu, 20 Feb 2025 07:46:36 +0100 Subject: [PATCH 2/2] Rename bash script --- .../{setup-environment.sh => setup-pimcore-environment.sh} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/ci/scripts/{setup-environment.sh => setup-pimcore-environment.sh} (100%) diff --git a/.github/ci/scripts/setup-environment.sh b/.github/ci/scripts/setup-pimcore-environment.sh similarity index 100% rename from .github/ci/scripts/setup-environment.sh rename to .github/ci/scripts/setup-pimcore-environment.sh