Repository navigation
[2026.3] Pin Mercure to v0.24 in the API test stack and keep container logs on failure - #555
Merged
Merged
Conversation
… failure The supervisord container is started in step 1, before Pimcore is installed, and nothing restarts it afterwards. Its messenger:consume worker (time-limit 3600) therefore keeps whatever state it booted with. Since 2026-09-17 every execution-engine job in the API tests stays "running" forever, which is what fails the three ZIP downloads and HideCompletedJobSucceeds. - restart supervisord at the end of 02-install-pimcore.sh - add 07-collect-logs.sh and upload container logs + var/log on failure, so the worker's output is no longer discarded by 04-shutdown.sh; secret values are redacted because the artifact is public Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The untagged dunglas/mercure image moved to v1.0.0 on 2026-09-16. Mercure 1.0 only accepts OAuth 2.0 access tokens (typ at+jwt, a trusted iss, aud, exp, authorization_details) and rejects the legacy mercure-claim JWT that Pimcore publishes with: the hub logs "invalid JWT: untrusted issuer" and answers 401. The execution-engine handlers publish progress to Mercure, so every job's message fails and, with max_retries 0, is dropped, leaving the job running forever. That is what fails the three ZIP downloads and HideCompletedJobSucceeds since 2026-09-17. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Redaction failures can currently be masked while potentially unredacted public artifacts are still uploaded.
Review effort: Balanced
Findings: 2
Open (2)
What changed in this PR
Restarts the messenger worker after installation and preserves failure diagnostics before container teardown.
Changes:
- Restarts
supervisordafter Pimcore setup. - Collects, redacts, and uploads container/application logs on failure.
- Documents and ignores generated log dumps.
| File | Description |
|---|---|
.github/scripts/02-install-pimcore.sh |
Restarts the worker after installation. |
.github/scripts/07-collect-logs.sh |
Collects and redacts diagnostic logs. |
.github/workflows/api-tests.yml |
Uploads failure logs as artifacts. |
doc/04_API_Testing/01_API_TESTS.md |
Documents log collection. |
.gitignore |
Excludes generated log dumps. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
…load then perl -pi only warns and exits 0 when it cannot open a file, so a skipped file kept the secret while the collector reported success. Verify with grep afterwards and drop the logs if any secret is left. Upload the public artifact only when the collector step succeeded. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
JSON log lines (the Mercure hub, Monolog context) write "/" as "\/", so a secret containing a slash survived both the literal redaction and the post-redaction grep check. Scrub and verify that form too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kingjia90
added a commit
that referenced
this pull request
Sep 30, 2026
Only the Mercure v0.24 pin is needed to restore the API tests; the failure-time log collection was a diagnostic aid and is dropped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kingjia90
added a commit
that referenced
this pull request
Sep 30, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Problem
Since 2026-09-17 the API-test nightly fails four specs on every leg: the three ZIP downloads
(HTTP 500) and
ExecutionEngineTest › HideCompletedJobSucceeds(timeout). All four come from one fact:execution-engine jobs are created and then stay
runningforever. The ZIP 500 is just the archivenever being written. The installed composer package versions and the test code were identical between
the last green and the first red run. Only floating Docker images changed.
Cause
docker-compose.yamlruns the hub as untaggeddunglas/mercure, and that tag moved toMercure v1.0.0 on 2026-09-16. Mercure 1.0 is a breaking protocol change. Publishers must now send
an OAuth 2.0 access token (
typ: at+jwt, anissbound to a configuredissuerblock,aud,exp,authorization_details). Pimcore still publishes with the legacymercure-claim JWT, so every publishis rejected. The logs this PR now collects show it directly:
The execution-engine handlers publish progress through Mercure.
pimcore_generic_execution_engineruns with
max_retries: 0, so the failed message is dropped and the job row staysrunning.Change
dunglas/mercure:v0.24(0.x protocol, still receives 0.24 patch releases). Thisis the fix.
supervisordat the end of02-install-pimcore.sh. The worker is started in step 1,before Pimcore is installed, and crash-loops until the install finishes (seen in the logs: exit 255
and 1, and
cache_itemsdoesn't exist). The restart makes it boot cleanly against the installed app.It did not fix the failures on its own; see validation below.
07-collect-logs.shplus twoif: failure()steps uploaddocker compose ps, every service's logand
var/logascontainer-logs-<platform>. Nothing captured the worker's output before, which iswhy this took so long to find. The product key, encryption secret, instance identifier and composer
token are replaced with
[REDACTED]before upload, because the artifact is public.Validation
Both runs installed 2026.3.x, dispatched from a temporary branch that is this PR plus a one-line
dispatch-choice commit:
v0.24pinThe 4 skipped specs are the same in both runs.
Follow-ups (not in this PR)
dunglas/mercureimage is used byskeleton,demo-enterpriseandpaas-skeleton(2026.3 and 2026.x), the devcontainer, demo-server and studio-e2e-tests. Fresh Docker installs since
2026-09-16 are very likely affected the same way (Studio background jobs never finish). The long-term
fix is Mercure 1.0 token support in Pimcore's publisher.
ZipDownloadByFolderIdTestpolls in an unbounded loop under a 5-minute timeout, andExportTests accept
500on download, which hid this stall.Relates to pimcore/service-operations#1397.
🤖 Generated with Claude Code