From 44d3bddc850fdbaa073c67e59b21172fca443a75 Mon Sep 17 00:00:00 2001 From: Jacob Ransom Date: Wed, 21 Oct 2026 11:52:07 +1300 Subject: [PATCH 1/3] Pass the approver token to the weekly release, so its date PR can be merged [ignore_release] --- .github/workflows/weekly-release.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/weekly-release.yml b/.github/workflows/weekly-release.yml index f19074e..467ed55 100644 --- a/.github/workflows/weekly-release.yml +++ b/.github/workflows/weekly-release.yml @@ -12,3 +12,6 @@ jobs: contents: write pull-requests: write uses: matomo-org/plugin-ci-workflows/.github/workflows/plugin-dev-release.yml@main + secrets: + # A user other than github-actions, so the bot's date PR can be approved and merged. + approver-token: ${{ secrets.TESTS_ACCESS_TOKEN }} From c99d31879870c2ecb9c08e863215704a385e4c23 Mon Sep 17 00:00:00 2001 From: Jacob Ransom Date: Wed, 21 Oct 2026 13:15:28 +1300 Subject: [PATCH 2/3] Keep the ext-redis stub ignores for the minimum Matomo's PHPStan only [ignore_release] Core's PHPStan 2.3.1 ships corrected ext-redis stubs, so on the maximum leg these ignores went unmatched. --- phpstan-min-matomo.neon | 32 ++++++++++++++++++++++++++++++++ phpstan.neon | 25 ------------------------- 2 files changed, 32 insertions(+), 25 deletions(-) create mode 100644 phpstan-min-matomo.neon diff --git a/phpstan-min-matomo.neon b/phpstan-min-matomo.neon new file mode 100644 index 0000000..445f1e9 --- /dev/null +++ b/phpstan-min-matomo.neon @@ -0,0 +1,32 @@ +includes: + - phpstan.neon + +parameters: + tmpDir: /tmp/phpstan/QueuedTracking/min + ignoreErrors: + # The ext-redis stubs bundled with the PHPStan of the minimum-supported Matomo disagree with + # the extension this plugin actually runs against: RedisCluster::info() is + # (array|string $key_or_address, string $sections = '') returning RedisCluster|array|false, + # flushDB() takes array|string, and config() is (key_or_address, subcommand, ...extra_args) + # with two required arguments. Every call below matches the extension, not the stub. The + # newer PHPStan on the maximum leg has corrected stubs, so there these would be unmatched. + - + identifier: arguments.count + message: '#RedisCluster::config\(\) invoked with 3 parameters#' + path: Commands/Test.php + count: 1 + - + identifier: offsetAccess.notFound + message: "#Offset 'redis_version' does not exist on non-falsy-string#" + path: Queue/Backend/RedisCluster.php + count: 1 + - + identifier: nullCoalesce.offset + message: "#Offset 'used_memory(_peak)?' on string on left side of \\?\\? does not exist#" + path: Queue/Backend/RedisCluster.php + count: 2 + - + identifier: argument.type + message: '#RedisCluster::flushDB\(\) expects string, array#' + path: Queue/Backend/RedisCluster.php + count: 1 diff --git a/phpstan.neon b/phpstan.neon index 8cb4685..57e4eb5 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -12,31 +12,6 @@ parameters: # still resolve the client's methods while the library keeps its own conventions. - libs/credis/* ignoreErrors: - # The bundled ext-redis stubs disagree with the extension this plugin actually runs - # against. Reflected in the environment: RedisCluster::info() is - # (array|string $key_or_address, string $sections = '') returning RedisCluster|array|false, - # flushDB() takes array|string, and config() is (key_or_address, subcommand, ...extra_args) - # with two required arguments. Every call below matches the extension, not the stub. - - - identifier: arguments.count - message: '#RedisCluster::config\(\) invoked with 3 parameters#' - path: Commands/Test.php - count: 1 - - - identifier: offsetAccess.notFound - message: "#Offset 'redis_version' does not exist on non-falsy-string#" - path: Queue/Backend/RedisCluster.php - count: 1 - - - identifier: nullCoalesce.offset - message: "#Offset 'used_memory(_peak)?' on string on left side of \\?\\? does not exist#" - path: Queue/Backend/RedisCluster.php - count: 2 - - - identifier: argument.type - message: '#RedisCluster::flushDB\(\) expects string, array#' - path: Queue/Backend/RedisCluster.php - count: 1 # Three backends share one $redis property and one getConnection(), holding \Redis, # \RedisCluster or Credis_Client depending on how the queue is configured. Credis_Client # mirrors the phpredis API deliberately, which is what makes the arrangement work at From 34e64ec8ff8dea119dfe8f13e2d6b32f3d8bf634 Mon Sep 17 00:00:00 2001 From: Jacob Ransom Date: Wed, 21 Oct 2026 14:35:13 +1300 Subject: [PATCH 3/3] Let a weekly release run by hand skip the CI check [ignore_release] --- .github/workflows/weekly-release.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/weekly-release.yml b/.github/workflows/weekly-release.yml index 467ed55..c6e8128 100644 --- a/.github/workflows/weekly-release.yml +++ b/.github/workflows/weekly-release.yml @@ -2,6 +2,11 @@ name: Weekly release on: # Run by hand for now; the Monday schedule and the other-branches sweep come later. workflow_dispatch: + inputs: + skip-ci-check: + description: "Release this branch even though its CI failed or is still running" + type: boolean + default: false permissions: {} @@ -12,6 +17,8 @@ jobs: contents: write pull-requests: write uses: matomo-org/plugin-ci-workflows/.github/workflows/plugin-dev-release.yml@main + with: + skip-ci-check: ${{ inputs.skip-ci-check || false }} secrets: # A user other than github-actions, so the bot's date PR can be approved and merged. approver-token: ${{ secrets.TESTS_ACCESS_TOKEN }}