From efa0bb64b1d59097e81d90eb4164f299ec24c6c3 Mon Sep 17 00:00:00 2001 From: "John Paul E. Balandan, CPA" Date: Mon, 23 Feb 2026 02:33:42 +0800 Subject: [PATCH 1/3] update workflows to use `$GITHUB_OUTPUT` --- .github/workflows/deploy-distributables.yml | 11 ++++++----- .github/workflows/reusable-coveralls.yml | 5 +++-- .github/workflows/reusable-phpunit-test.yml | 18 ++++++++++-------- .../reusable-serviceless-phpunit-test.yml | 18 ++++++++++-------- .github/workflows/test-coding-standards.yml | 5 +++-- .github/workflows/test-deptrac.yml | 5 +++-- .github/workflows/test-phpstan.yml | 5 +++-- .github/workflows/test-psalm.yml | 5 +++-- .github/workflows/test-rector.yml | 5 +++-- 9 files changed, 44 insertions(+), 33 deletions(-) diff --git a/.github/workflows/deploy-distributables.yml b/.github/workflows/deploy-distributables.yml index e1a63e792ffa..742dc32ec603 100644 --- a/.github/workflows/deploy-distributables.yml +++ b/.github/workflows/deploy-distributables.yml @@ -21,16 +21,17 @@ jobs: fetch-depth: 0 # fetch all tags - name: Get latest version + id: version run: | - echo 'LATEST_VERSION<> $GITHUB_ENV - echo $(git describe --tags --abbrev=0) | sed "s/v//" >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV + echo 'LATEST_VERSION<> $GITHUB_OUTPUT + echo $(git describe --tags --abbrev=0) | sed "s/v//" >> $GITHUB_OUTPUT + echo 'EOF' >> $GITHUB_OUTPUT - name: Search for updated version - if: ${{ env.LATEST_VERSION }} + if: ${{ steps.version.outputs.LATEST_VERSION }} run: | chmod +x ${GITHUB_WORKSPACE}/.github/scripts/validate-version - ${GITHUB_WORKSPACE}/.github/scripts/validate-version ${{ env.LATEST_VERSION }} + ${GITHUB_WORKSPACE}/.github/scripts/validate-version ${{ steps.version.outputs.LATEST_VERSION }} framework: name: Deploy to framework diff --git a/.github/workflows/reusable-coveralls.yml b/.github/workflows/reusable-coveralls.yml index e8af4347f9f6..8c0219edaca5 100644 --- a/.github/workflows/reusable-coveralls.yml +++ b/.github/workflows/reusable-coveralls.yml @@ -39,13 +39,14 @@ jobs: working-directory: build/cov - name: Get composer cache directory + id: composer-cache run: | - echo "COMPOSER_CACHE_FILES_DIR=$(composer config cache-files-dir)" >> $GITHUB_ENV + echo "COMPOSER_CACHE_FILES_DIR=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - name: Cache dependencies uses: actions/cache@v5 with: - path: ${{ env.COMPOSER_CACHE_FILES_DIR }} + path: ${{ steps.composer-cache.outputs.COMPOSER_CACHE_FILES_DIR }} key: ${{ github.job }}-php-${{ inputs.php-version }}-${{ hashFiles('**/composer.*') }} restore-keys: | ${{ github.job }}-php-${{ inputs.php-version }}- diff --git a/.github/workflows/reusable-phpunit-test.yml b/.github/workflows/reusable-phpunit-test.yml index 0a8f37422c58..cc49c4be5892 100644 --- a/.github/workflows/reusable-phpunit-test.yml +++ b/.github/workflows/reusable-phpunit-test.yml @@ -173,14 +173,15 @@ jobs: COVERAGE_DRIVER: ${{ inputs.enable-coverage && 'xdebug' || 'none' }} - name: Setup global environment variables + id: setup-env run: | - echo "COMPOSER_CACHE_FILES_DIR=$(composer config cache-files-dir)" >> $GITHUB_ENV - echo "ARTIFACT_NAME=${{ inputs.job-id || github.job }}-php-${{ inputs.php-version }}-db-${{ inputs.db-platform || 'none' }}${{ inputs.mysql-version || '' }}" >> $GITHUB_ENV + echo "COMPOSER_CACHE_FILES_DIR=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT + echo "ARTIFACT_NAME=${{ inputs.job-id || github.job }}-php-${{ inputs.php-version }}-db-${{ inputs.db-platform || 'none' }}${{ inputs.mysql-version || '' }}" >> $GITHUB_OUTPUT - name: Cache dependencies uses: actions/cache@v5 with: - path: ${{ env.COMPOSER_CACHE_FILES_DIR }} + path: ${{ steps.setup-env.outputs.COMPOSER_CACHE_FILES_DIR }} key: ${{ inputs.job-id || github.job }}-php-${{ inputs.php-version }}-db-${{ inputs.db-platform || 'none' }}-${{ hashFiles('**/composer.*') }} restore-keys: | ${{ inputs.job-id || github.job }}-php-${{ inputs.php-version }}-db-${{ inputs.db-platform || 'none' }}- @@ -202,14 +203,15 @@ jobs: composer update --ansi ${{ inputs.extra-composer-options }} - name: Compute additional PHPUnit options + id: phpunit-options run: | - echo "EXTRA_PHPUNIT_OPTIONS=${{ format('{0} {1} {2}', env.GROUP_OPTION, env.COVERAGE_OPTION, inputs.extra-phpunit-options) }}" >> $GITHUB_ENV + echo "EXTRA_PHPUNIT_OPTIONS=${{ format('{0} {1} {2}', env.GROUP_OPTION, env.COVERAGE_OPTION, inputs.extra-phpunit-options) }}" >> $GITHUB_OUTPUT env: - COVERAGE_OPTION: ${{ inputs.enable-coverage && format('--coverage-php build/cov/coverage-{0}.cov', env.ARTIFACT_NAME) || '--no-coverage' }} + COVERAGE_OPTION: ${{ inputs.enable-coverage && format('--coverage-php build/cov/coverage-{0}.cov', steps.setup-env.outputs.ARTIFACT_NAME) || '--no-coverage' }} GROUP_OPTION: ${{ inputs.group-name && format('--group {0}', inputs.group-name) || '' }} - name: Run tests - run: script -e -c "vendor/bin/phpunit --color=always ${{ env.EXTRA_PHPUNIT_OPTIONS }}" + run: script -e -c "vendor/bin/phpunit --color=always ${{ steps.phpunit-options.outputs.EXTRA_PHPUNIT_OPTIONS }}" env: DB: ${{ inputs.db-platform }} TACHYCARDIA_MONITOR_GA: ${{ inputs.enable-profiling && 'enabled' || '' }} @@ -220,7 +222,7 @@ jobs: if: ${{ inputs.enable-artifact-upload }} uses: actions/upload-artifact@v6 with: - name: ${{ env.ARTIFACT_NAME }} - path: build/cov/coverage-${{ env.ARTIFACT_NAME }}.cov + name: ${{ steps.setup-env.outputs.ARTIFACT_NAME }} + path: build/cov/coverage-${{ steps.setup-env.outputs.ARTIFACT_NAME }}.cov if-no-files-found: error retention-days: 1 diff --git a/.github/workflows/reusable-serviceless-phpunit-test.yml b/.github/workflows/reusable-serviceless-phpunit-test.yml index bbca4fe2acc8..caa1469fff81 100644 --- a/.github/workflows/reusable-serviceless-phpunit-test.yml +++ b/.github/workflows/reusable-serviceless-phpunit-test.yml @@ -85,14 +85,15 @@ jobs: COVERAGE_DRIVER: ${{ inputs.enable-coverage && 'xdebug' || 'none' }} - name: Setup global environment variables + id: setup-env run: | - echo "COMPOSER_CACHE_FILES_DIR=$(composer config cache-files-dir)" >> $GITHUB_ENV - echo "ARTIFACT_NAME=${{ inputs.job-id || github.job }}-php-${{ inputs.php-version }}" >> $GITHUB_ENV + echo "COMPOSER_CACHE_FILES_DIR=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT + echo "ARTIFACT_NAME=${{ inputs.job-id || github.job }}-php-${{ inputs.php-version }}" >> $GITHUB_OUTPUT - name: Cache Composer dependencies uses: actions/cache@v5 with: - path: ${{ env.COMPOSER_CACHE_FILES_DIR }} + path: ${{ steps.setup-env.outputs.COMPOSER_CACHE_FILES_DIR }} key: ${{ inputs.job-id || github.job }}-php-${{ inputs.php-version }}-${{ hashFiles('**/composer.*') }} restore-keys: | ${{ inputs.job-id || github.job }}-php-${{ inputs.php-version }}- @@ -113,14 +114,15 @@ jobs: composer update --ansi ${{ inputs.extra-composer-options }} - name: Compute additional PHPUnit options + id: phpunit-options run: | - echo "EXTRA_PHPUNIT_OPTIONS=${{ format('{0} {1} {2}', env.GROUP_OPTION, env.COVERAGE_OPTION, inputs.extra-phpunit-options) }}" >> $GITHUB_ENV + echo "EXTRA_PHPUNIT_OPTIONS=${{ format('{0} {1} {2}', env.GROUP_OPTION, env.COVERAGE_OPTION, inputs.extra-phpunit-options) }}" >> $GITHUB_OUTPUT env: - COVERAGE_OPTION: ${{ inputs.enable-coverage && format('--coverage-php build/cov/coverage-{0}.cov', env.ARTIFACT_NAME) || '--no-coverage' }} + COVERAGE_OPTION: ${{ inputs.enable-coverage && format('--coverage-php build/cov/coverage-{0}.cov', steps.setup-env.outputs.ARTIFACT_NAME) || '--no-coverage' }} GROUP_OPTION: ${{ inputs.group-name && format('--group {0}', inputs.group-name) || '' }} - name: Run tests - run: script -e -c "vendor/bin/phpunit --color=always ${{ env.EXTRA_PHPUNIT_OPTIONS }}" + run: script -e -c "vendor/bin/phpunit --color=always ${{ steps.phpunit-options.outputs.EXTRA_PHPUNIT_OPTIONS }}" env: TACHYCARDIA_MONITOR_GA: ${{ inputs.enable-profiling && 'enabled' || '' }} TERM: xterm-256color @@ -129,7 +131,7 @@ jobs: if: ${{ inputs.enable-artifact-upload }} uses: actions/upload-artifact@v6 with: - name: ${{ env.ARTIFACT_NAME }} - path: build/cov/coverage-${{ env.ARTIFACT_NAME }}.cov + name: ${{ steps.setup-env.outputs.ARTIFACT_NAME }} + path: build/cov/coverage-${{ steps.setup-env.outputs.ARTIFACT_NAME }}.cov if-no-files-found: error retention-days: 1 diff --git a/.github/workflows/test-coding-standards.yml b/.github/workflows/test-coding-standards.yml index b20ea882772b..aa70a480bfd7 100644 --- a/.github/workflows/test-coding-standards.yml +++ b/.github/workflows/test-coding-standards.yml @@ -51,12 +51,13 @@ jobs: coverage: none - name: Get composer cache directory - run: echo "COMPOSER_CACHE_FILES_DIR=$(composer config cache-files-dir)" >> $GITHUB_ENV + id: composer-cache + run: echo "COMPOSER_CACHE_FILES_DIR=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - name: Cache dependencies uses: actions/cache@v5 with: - path: ${{ env.COMPOSER_CACHE_FILES_DIR }} + path: ${{ steps.composer-cache.outputs.COMPOSER_CACHE_FILES_DIR }} key: ${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.lock') }} restore-keys: | ${{ runner.os }}-${{ matrix.php-version }}- diff --git a/.github/workflows/test-deptrac.yml b/.github/workflows/test-deptrac.yml index b95bb8ec717e..f339230591c0 100644 --- a/.github/workflows/test-deptrac.yml +++ b/.github/workflows/test-deptrac.yml @@ -56,12 +56,13 @@ jobs: run: composer validate --strict - name: Get composer cache directory - run: echo "COMPOSER_CACHE_FILES_DIR=$(composer config cache-files-dir)" >> $GITHUB_ENV + id: composer-cache + run: echo "COMPOSER_CACHE_FILES_DIR=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - name: Cache dependencies uses: actions/cache@v5 with: - path: ${{ env.COMPOSER_CACHE_FILES_DIR }} + path: ${{ steps.composer-cache.outputs.COMPOSER_CACHE_FILES_DIR }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} restore-keys: ${{ runner.os }}-composer- diff --git a/.github/workflows/test-phpstan.yml b/.github/workflows/test-phpstan.yml index 62dd759b6bbb..2b874792f308 100644 --- a/.github/workflows/test-phpstan.yml +++ b/.github/workflows/test-phpstan.yml @@ -68,12 +68,13 @@ jobs: run: composer validate --strict - name: Get composer cache directory - run: echo "COMPOSER_CACHE_FILES_DIR=$(composer config cache-files-dir)" >> $GITHUB_ENV + id: composer-cache + run: echo "COMPOSER_CACHE_FILES_DIR=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - name: Cache dependencies uses: actions/cache@v5 with: - path: ${{ env.COMPOSER_CACHE_FILES_DIR }} + path: ${{ steps.composer-cache.outputs.COMPOSER_CACHE_FILES_DIR }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} restore-keys: ${{ runner.os }}-composer- diff --git a/.github/workflows/test-psalm.yml b/.github/workflows/test-psalm.yml index c7a85cd275d9..9f956aaeaf0d 100644 --- a/.github/workflows/test-psalm.yml +++ b/.github/workflows/test-psalm.yml @@ -51,12 +51,13 @@ jobs: COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Get composer cache directory - run: echo "COMPOSER_CACHE_FILES_DIR=$(composer config cache-files-dir)" >> $GITHUB_ENV + id: composer-cache + run: echo "COMPOSER_CACHE_FILES_DIR=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - name: Cache composer dependencies uses: actions/cache@v5 with: - path: ${{ env.COMPOSER_CACHE_FILES_DIR }} + path: ${{ steps.composer-cache.outputs.COMPOSER_CACHE_FILES_DIR }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}-${{ hashFiles('**/composer.lock') }} restore-keys: ${{ runner.os }}-composer- diff --git a/.github/workflows/test-rector.yml b/.github/workflows/test-rector.yml index 964823299a38..6770c6112bc6 100644 --- a/.github/workflows/test-rector.yml +++ b/.github/workflows/test-rector.yml @@ -74,12 +74,13 @@ jobs: run: composer validate --strict - name: Get composer cache directory - run: echo "COMPOSER_CACHE_FILES_DIR=$(composer config cache-files-dir)" >> $GITHUB_ENV + id: composer-cache + run: echo "COMPOSER_CACHE_FILES_DIR=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - name: Cache dependencies uses: actions/cache@v5 with: - path: ${{ env.COMPOSER_CACHE_FILES_DIR }} + path: ${{ steps.composer-cache.outputs.COMPOSER_CACHE_FILES_DIR }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} restore-keys: ${{ runner.os }}-composer- From c82abed0131502bf33290b6cec49ee990405abc6 Mon Sep 17 00:00:00 2001 From: "John Paul E. Balandan, CPA" Date: Mon, 23 Feb 2026 02:36:39 +0800 Subject: [PATCH 2/3] remove inexistent matrix key --- .github/workflows/test-phpunit.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/test-phpunit.yml b/.github/workflows/test-phpunit.yml index d9191cec858d..eba3a2dadd1f 100644 --- a/.github/workflows/test-phpunit.yml +++ b/.github/workflows/test-phpunit.yml @@ -71,7 +71,6 @@ jobs: enable-coverage: ${{ matrix.php-version == needs.coverage-php-version.outputs.version }} enable-profiling: ${{ matrix.php-version == needs.coverage-php-version.outputs.version }} extra-extensions: imagick, redis, memcached - extra-composer-options: ${{ matrix.composer-option }} database-live-tests: name: DatabaseLive @@ -112,7 +111,6 @@ jobs: enable-coverage: ${{ matrix.php-version == needs.coverage-php-version.outputs.version }} enable-profiling: ${{ matrix.php-version == needs.coverage-php-version.outputs.version }} extra-extensions: mysqli, oci8, pgsql, sqlsrv, sqlite3 - extra-composer-options: ${{ matrix.composer-option }} separate-process-tests: name: SeparateProcess @@ -138,7 +136,6 @@ jobs: enable-coverage: true # needs xdebug for assertHeaderEmitted() tests enable-profiling: ${{ matrix.php-version == needs.coverage-php-version.outputs.version }} extra-extensions: mysqli, oci8, pgsql, sqlsrv-5.10.1, sqlite3 - extra-composer-options: ${{ matrix.composer-option }} cache-live-tests: name: CacheLive @@ -165,7 +162,6 @@ jobs: enable-profiling: ${{ matrix.php-version == needs.coverage-php-version.outputs.version }} extra-extensions: redis, memcached, apcu extra-ini-options: apc.enable_cli=1 - extra-composer-options: ${{ matrix.composer-option }} coveralls: name: Upload coverage results to Coveralls From f3bb740a67b2c183227fdb59f9339996c379efdb Mon Sep 17 00:00:00 2001 From: "John Paul E. Balandan, CPA" Date: Mon, 23 Feb 2026 02:45:26 +0800 Subject: [PATCH 3/3] Update phpunit workflow in starter --- admin/starter/.github/workflows/phpunit.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/admin/starter/.github/workflows/phpunit.yml b/admin/starter/.github/workflows/phpunit.yml index fb5e3a2cb7e0..23d883582a8f 100644 --- a/admin/starter/.github/workflows/phpunit.yml +++ b/admin/starter/.github/workflows/phpunit.yml @@ -11,15 +11,14 @@ jobs: strategy: matrix: - php-versions: ['8.2', '8.4'] + php-versions: ['8.2', '8.5'] runs-on: ubuntu-latest - - if: (! contains(github.event.head_commit.message, '[ci skip]')) + if: (! contains(github.event.pull_request.title, '[ci skip]')) steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v6 - name: Setup PHP, with composer and extensions uses: shivammathur/setup-php@v2 @@ -31,17 +30,17 @@ jobs: - name: Get composer cache directory id: composer-cache - run: echo "::set-output name=dir::$(composer config cache-files-dir)" + run: echo "COMPOSER_CACHE_DIR=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - name: Cache composer dependencies - uses: actions/cache@v2 + uses: actions/cache@v4 with: - path: ${{ steps.composer-cache.outputs.dir }} + path: ${{ steps.composer-cache.outputs.COMPOSER_CACHE_DIR }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} restore-keys: ${{ runner.os }}-composer- - name: Install dependencies - run: composer install --no-progress --no-interaction --prefer-dist --optimize-autoloader + run: composer install --no-progress --no-interaction # To prevent rate limiting you may need to supply an OAuth token in Settings > Secrets # env: # https://getcomposer.org/doc/articles/troubleshooting.md#api-rate-limit-and-oauth-tokens