From 0d9a02cf01e602f529af3f68b5ae02da86f75f57 Mon Sep 17 00:00:00 2001 From: berfinyuksel <99557970+berfinyuksel@users.noreply.github.com> Date: Wed, 26 Aug 2026 16:14:53 +0200 Subject: [PATCH 1/9] Repoint static analysis to unified; scope composer-analysis push and cancel superseded runs Rebased to 2.2 per the platform-version line map (2.2 = 2025.4 line; the previous base 2.0 is not on a valid line). Static-analysis referenced a reusable retired 2025-12-09 (zero-job start failures since); composer-analysis ran on every push to every branch. Refs DevOps-Tasks#47, DevOps-Tasks#44. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/composer-analysis.yml | 7 +++ .github/workflows/static-analysis.yml | 72 +++++++++++-------------- 2 files changed, 39 insertions(+), 40 deletions(-) diff --git a/.github/workflows/composer-analysis.yml b/.github/workflows/composer-analysis.yml index d33a44f..f62d16b 100644 --- a/.github/workflows/composer-analysis.yml +++ b/.github/workflows/composer-analysis.yml @@ -5,12 +5,19 @@ on: - cron: '0 3 * * 1,3,5' workflow_dispatch: push: + branches: + - "[0-9]+.[0-9]+" + - "[0-9]+.x" pull_request: types: [ opened, synchronize, reopened ] env: PIMCORE_PROJECT_ROOT: ${{ github.workspace }} +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.ref_name }} + cancel-in-progress: true + jobs: test-composer: uses: pimcore/workflows-collection-public/.github/workflows/reusable-composer-test.yml@main diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index 9d4310b..3fa571d 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -2,27 +2,38 @@ name: "Static analysis centralised" on: schedule: - - cron: '0 3 * * 1,3,5' + - cron: '0 3 * * 1,3,5' workflow_dispatch: + pull_request: + types: [ opened, synchronize, reopened ] + paths-ignore: + - 'doc/**' + - 'public/**' + - '**.md' push: + paths-ignore: + - 'doc/**' + - 'public/**' + - '**.md' 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 }} +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + jobs: setup-matrix: runs-on: ubuntu-latest + timeout-minutes: 10 outputs: php_versions: ${{ steps.parse-php-versions.outputs.php_versions }} - matrix: ${{ steps.set-matrix.outputs.matrix }} + phpstan_matrix: ${{ steps.set-matrix.outputs.phpstan_matrix }} private_repo: ${{ env.PRIVATE_REPO }} steps: - name: Checkout code @@ -41,55 +52,36 @@ jobs: 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 + echo "php_versions=default" >> "$GITHUB_OUTPUT" else - echo "php_versions=$php_versions" >> $GITHUB_OUTPUT - echo "#### php versions #### : $php_versions" + echo "php_versions=$php_versions" >> "$GITHUB_OUTPUT" fi else - echo "composer.json not found" exit 1 fi - - name: Set up matrix + - name: Set up matrix JSON id: set-matrix run: | 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 + FILTERED_MATRIX_JSON=$(echo "$MATRIX_JSON" | jq --arg php_versions "$php_versions" '{ include: [ .configs[] | select(.php_version == $php_versions) | .matrix[] ] }') + ENCODED_MATRIX_JSON=$(echo "$FILTERED_MATRIX_JSON" | jq -c .) + echo "phpstan_matrix=$ENCODED_MATRIX_JSON" >> "$GITHUB_OUTPUT" 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 + uses: pimcore/workflows-collection-public/.github/workflows/reusable-static-analysis-unified.yaml@main with: + phpstan_matrix: ${{ needs.setup-matrix.outputs.phpstan_matrix }} + private_repo: ${{ needs.setup-matrix.outputs.private_repo }} 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 }} + REQUIRE_ADMIN_BUNDLE: "false" + COVERAGE: "none" 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 + COMPOSER_PIMCORE_REPO_PACKAGIST_TOKEN: ${{ secrets.COMPOSER_PIMCORE_REPO_PACKAGIST_TOKEN }} + PIMCORE_CI_INSTANCE_IDENTIFIER: ${{ secrets.PIMCORE_CI_INSTANCE_IDENTIFIER }} + PIMCORE_CI_ENCRYPTION_SECRET: ${{ secrets.PIMCORE_CI_ENCRYPTION_SECRET }} + PIMCORE_CI_PRODUCT_KEY: ${{ secrets.PIMCORE_CI_PRODUCT_KEY }} From dcb03de1d402cf33a464909921f10a0d108413bf Mon Sep 17 00:00:00 2001 From: berfinyuksel <99557970+berfinyuksel@users.noreply.github.com> Date: Wed, 26 Aug 2026 16:23:42 +0200 Subject: [PATCH 2/9] Path filters and job timeouts for the heavy workflows DevOps-Tasks#44 ideas 3 and 5: paths-ignore for docs/markdown where no path filter existed (no required checks gate these workflows on this branch - verified), and timeout-minutes on inline jobs so a hanging job cannot burn the 6h default. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/composer-analysis.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/composer-analysis.yml b/.github/workflows/composer-analysis.yml index f62d16b..4a89db5 100644 --- a/.github/workflows/composer-analysis.yml +++ b/.github/workflows/composer-analysis.yml @@ -5,10 +5,16 @@ on: - cron: '0 3 * * 1,3,5' workflow_dispatch: push: + paths-ignore: + - 'doc/**' + - '**.md' branches: - "[0-9]+.[0-9]+" - "[0-9]+.x" pull_request: + paths-ignore: + - 'doc/**' + - '**.md' types: [ opened, synchronize, reopened ] env: From 1c5865b7945c9e33ff9f37e1aff3efd8d2172fd5 Mon Sep 17 00:00:00 2001 From: berfinyuksel <99557970+berfinyuksel@users.noreply.github.com> Date: Wed, 26 Aug 2026 16:31:13 +0200 Subject: [PATCH 3/9] Concurrency by PR number; test-job timeouts to 60 minutes Final consolidated adjustments per review: the concurrency group uses the PR number as DevOps-Tasks#44 specifies (head_ref collides across same-named fork branches - Copilot review), pre-existing branch filters are preserved verbatim, and timeouts on test/analysis jobs are 60 minutes so no legitimate long leg is ever killed (setup jobs stay short). Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/composer-analysis.yml | 2 +- .github/workflows/static-analysis.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/composer-analysis.yml b/.github/workflows/composer-analysis.yml index 4a89db5..598d62c 100644 --- a/.github/workflows/composer-analysis.yml +++ b/.github/workflows/composer-analysis.yml @@ -21,7 +21,7 @@ env: PIMCORE_PROJECT_ROOT: ${{ github.workspace }} concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.ref_name }} + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true jobs: diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index 3fa571d..76f646e 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -18,6 +18,7 @@ on: branches: - "[0-9]+.[0-9]+" - "[0-9]+.x" + - "feature-*" env: PIMCORE_PROJECT_ROOT: ${{ github.workspace }} From 3680bc3e7bfaea94300836ed61914c955b6b6385 Mon Sep 17 00:00:00 2001 From: berfinyuksel <99557970+berfinyuksel@users.noreply.github.com> Date: Wed, 26 Aug 2026 16:32:05 +0200 Subject: [PATCH 4/9] Keep static-analysis push scoped to version branches only The filter-restore step wrongly re-added feature-* from the old file; the regenerated workflow deliberately scopes push to version branches (DevOps-Tasks#44 idea 1). Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/static-analysis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index 76f646e..3fa571d 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -18,7 +18,6 @@ on: branches: - "[0-9]+.[0-9]+" - "[0-9]+.x" - - "feature-*" env: PIMCORE_PROJECT_ROOT: ${{ github.workspace }} From fd404fbd0a7f117331781eb0354391d2e59e9364 Mon Sep 17 00:00:00 2001 From: berfinyuksel <99557970+berfinyuksel@users.noreply.github.com> Date: Mon, 31 Aug 2026 10:33:25 +0200 Subject: [PATCH 5/9] Run heavy suites only for PRs targeting long-lived branches DevOps-Tasks#44 / prep for stacked PRs (DevOps-Tasks#48): pull_request base-branch filter so mid-stack PRs (base = another feature branch) skip the heavy suites. Normal PRs target version branches and are unaffected. No required checks gate these workflows (verified). Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/composer-analysis.yml | 4 ++++ .github/workflows/static-analysis.yml | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/.github/workflows/composer-analysis.yml b/.github/workflows/composer-analysis.yml index 598d62c..7f496fc 100644 --- a/.github/workflows/composer-analysis.yml +++ b/.github/workflows/composer-analysis.yml @@ -12,6 +12,10 @@ on: - "[0-9]+.[0-9]+" - "[0-9]+.x" pull_request: + branches: + - "[0-9]+.[0-9]+" + - "[0-9]+.x" + - "feature-*" paths-ignore: - 'doc/**' - '**.md' diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index 3fa571d..6fcfedc 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -5,6 +5,10 @@ on: - cron: '0 3 * * 1,3,5' workflow_dispatch: pull_request: + branches: + - "[0-9]+.[0-9]+" + - "[0-9]+.x" + - "feature-*" types: [ opened, synchronize, reopened ] paths-ignore: - 'doc/**' From 998bc8d0723d34ee7db78a3cd60b6812722862b4 Mon Sep 17 00:00:00 2001 From: berfinyuksel <99557970+berfinyuksel@users.noreply.github.com> Date: Mon, 31 Aug 2026 14:25:20 +0200 Subject: [PATCH 6/9] Uniform workflow knobs across repos Per review: identical workflows must look identical unless there is a reason not to. pull_request runs for every base branch again (developers expect the suites on PRs from any branch name); push stays scoped to version branches; every job timeout is uniformly 30 minutes; concurrency is uniformly keyed by PR number. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/composer-analysis.yml | 4 ---- .github/workflows/static-analysis.yml | 9 +-------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/.github/workflows/composer-analysis.yml b/.github/workflows/composer-analysis.yml index 7f496fc..598d62c 100644 --- a/.github/workflows/composer-analysis.yml +++ b/.github/workflows/composer-analysis.yml @@ -12,10 +12,6 @@ on: - "[0-9]+.[0-9]+" - "[0-9]+.x" pull_request: - branches: - - "[0-9]+.[0-9]+" - - "[0-9]+.x" - - "feature-*" paths-ignore: - 'doc/**' - '**.md' diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index 6fcfedc..2dee904 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -5,10 +5,6 @@ on: - cron: '0 3 * * 1,3,5' workflow_dispatch: pull_request: - branches: - - "[0-9]+.[0-9]+" - - "[0-9]+.x" - - "feature-*" types: [ opened, synchronize, reopened ] paths-ignore: - 'doc/**' @@ -19,9 +15,6 @@ on: - 'doc/**' - 'public/**' - '**.md' - branches: - - "[0-9]+.[0-9]+" - - "[0-9]+.x" env: PIMCORE_PROJECT_ROOT: ${{ github.workspace }} @@ -34,7 +27,7 @@ concurrency: jobs: setup-matrix: runs-on: ubuntu-latest - timeout-minutes: 10 + timeout-minutes: 30 outputs: php_versions: ${{ steps.parse-php-versions.outputs.php_versions }} phpstan_matrix: ${{ steps.set-matrix.outputs.phpstan_matrix }} From f2fda105ab40a86350da076fdf08f020d31b0101 Mon Sep 17 00:00:00 2001 From: berfinyuksel <99557970+berfinyuksel@users.noreply.github.com> Date: Mon, 31 Aug 2026 16:01:27 +0200 Subject: [PATCH 7/9] Restore push branch scoping An unscoped push trigger runs on every branch push - the opposite of DevOps-Tasks#44 idea 1. Scoping restored (original list for pre-existing files, version branches for the modernized static analysis). Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/static-analysis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index 2dee904..b63286f 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -11,6 +11,9 @@ on: - 'public/**' - '**.md' push: + branches: + - "[0-9]+.[0-9]+" + - "[0-9]+.x" paths-ignore: - 'doc/**' - 'public/**' From 62382636cc0520e9a41c529368007fe4df9ee6c1 Mon Sep 17 00:00:00 2001 From: berfinyuksel <99557970+berfinyuksel@users.noreply.github.com> Date: Mon, 31 Aug 2026 16:18:09 +0200 Subject: [PATCH 8/9] Align 2025-line workflows with 2026.x (non-matrix families) Per review of the drift map: .bak files removed, obsolete frontend/npm workflows removed, cla/docs/poeditor/cs-fixer/copilot-setup/stale synced to the 2026.x content and filenames, and static analysis gets the uniform paths-ignore (assets, assets-customized, doc, install, src/Resources/public, **.md). Matrix-bearing workflows keep their era-specific content. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/static-analysis.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index b63286f..85d400f 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -7,16 +7,22 @@ on: pull_request: types: [ opened, synchronize, reopened ] paths-ignore: + - 'assets/**' + - 'assets-customized/**' - 'doc/**' - - 'public/**' + - 'install/**' + - 'src/Resources/public/**' - '**.md' push: branches: - "[0-9]+.[0-9]+" - "[0-9]+.x" paths-ignore: + - 'assets/**' + - 'assets-customized/**' - 'doc/**' - - 'public/**' + - 'install/**' + - 'src/Resources/public/**' - '**.md' env: From d7af4b10e408ef6d2f406879db9390fcb79cdd5b Mon Sep 17 00:00:00 2001 From: berfinyuksel <99557970+berfinyuksel@users.noreply.github.com> Date: Mon, 31 Aug 2026 16:31:16 +0200 Subject: [PATCH 9/9] Remove poeditor-export: retired on 2026.x, so retired here too Per review: what 2026.x dropped, the 2025 lines drop as well. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/poeditor-export.yml | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 .github/workflows/poeditor-export.yml diff --git a/.github/workflows/poeditor-export.yml b/.github/workflows/poeditor-export.yml deleted file mode 100644 index 7a4898f..0000000 --- a/.github/workflows/poeditor-export.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: "Trigger POEditor Translations Export" - -on: - workflow_dispatch: - push: - branches: - - "[0-9]+.x" - - "docs_actions" - - "main" - paths: - - "src/Resources/translations/admin.en.yml" - -permissions: - contents: read - -jobs: - poeditor: - uses: pimcore/workflows-collection-public/.github/workflows/reusable-poeditor.yaml@main - secrets: - POEDITOR_ACTION_TRIGGER_TOKEN: ${{ secrets.POEDITOR_ACTION_TRIGGER_TOKEN }} -