Skip to content

fix(xtest): pull Keycloak 26.4 bootstrap on the main platform lane - #576

Merged
dmihalcik-virtru merged 1 commit into
mainfrom
DSPX-3397-xtest-keycloak-264
Aug 6, 2026
Merged

fix(xtest): pull Keycloak 26.4 bootstrap on the main platform lane#576
dmihalcik-virtru merged 1 commit into
mainfrom
DSPX-3397-xtest-keycloak-264

Conversation

@dmihalcik-virtru

@dmihalcik-virtru dmihalcik-virtru commented Aug 5, 2026

Copy link
Copy Markdown
Member

What

Bump the start-up-with-containers pin to 18b8070f (opentdf/platform#3792) and pass bootstrap-ref: main on the main platform lane only.

Why

The action overlays docker-compose.yaml from bootstrap-ref, independent of platform-ref. That input defaults to the pqc-enabled tag, which is still pinned to keycloak/keycloak:25.0 — a Keycloak that cannot issue DPoP-bound access tokens. So every lane ran KC 25 even though platform main's own compose has been ghcr.io/opentdf/keycloak-standard:26.4.0 with KC_FEATURES: dpop since #3792, and service/cmd/keycloak_data.yaml provisions opentdf-dpop with dpop.bound.access.tokens: "true".

The visible symptom: test_dpop.py::test_dpop_happy_path_roundtrip fails for any SDK that checks token binding. The token comes back typ=Bearer with no cnf.jkt, and the js CLI rejects it:

[CRITICAL] DPoP requested but the access token is not bound (missing cnf.jkt)

go and java pass only because they don't assert cnf.jkt. The other test_dpop.py cases already self-skip on token_type != DPoP; the SDK-level roundtrips gate on the platform well-known and SDK features, not on IdP capability, so they run and fail. This is what keeps opentdf/web-sdk#939 red.

Released platform tags keep the 25.0 bootstrap — they predate the move to standard Keycloak token exchange (opentdf/platform#3754).

Testing

Dispatched against this branch with platform-ref=main, js-ref=refs/pull/939/merge, focus-sdk=jshttps://github.com/opentdf/tests/actions/runs/31016132383 — all three lanes green (go@main, java@main, js@pull-939).

Confirmed Keycloak 26.4 came up, and these ran rather than skipped:

PASSED test_dpop.py::test_dpop_happy_path_roundtrip[small-js@pull-939-js@pull-939-in_focus0]
PASSED test_dpop.py::test_dpop_happy_path_roundtrip[small-js@pull-939-java@main-in_focus0]
PASSED test_dpop.py::test_dpop_rejects_replayed_jti[small-js@pull-939-in_focus0]
PASSED test_dpop.py::test_dpop_rejects_tampered_proof_htu[small-js@pull-939-in_focus0]
PASSED test_dpop.py::test_dpop_bearer_scheme_warns_but_accepted_for_dpop_token[small-js@pull-939-in_focus0]

The nonce-dependent cases still skip, correctly — dpop-challenge is off by default, so require_nonce is unset.

Notes

Summary by CodeRabbit

  • Chores
    • Updated platform startup workflows to use the Keycloak 26.4 revision.
    • Adjusted bootstrap selection so the main platform lane uses the main configuration while released tags retain the PQC-enabled configuration.

The start-up-with-containers action overlays docker-compose.yaml from a
frozen ref, not from platform-ref. That ref defaulted to the pqc-enabled
tag, which still pins keycloak/keycloak:25.0 -- so every lane ran a
Keycloak that cannot issue DPoP-bound access tokens, even though
platform main's own compose has been on
ghcr.io/opentdf/keycloak-standard:26.4.0 with KC_FEATURES: dpop since
opentdf/platform#3792.

The visible symptom is test_dpop.py::test_dpop_happy_path_roundtrip
failing for any SDK that checks token binding: the token comes back
typ=Bearer with no cnf.jkt, and the js CLI rejects it. The other
test_dpop.py cases already skip themselves on token_type != DPoP.

Bump the action pin to #3792 (input set is a strict superset) and pass
bootstrap-ref: main for the main lane only. Released platform tags stay
on the 25.0 bootstrap -- they predate the move to standard Keycloak
token exchange.

Signed-off-by: Dave Mihalcik <dmihalcik@virtru.com>
@dmihalcik-virtru
dmihalcik-virtru requested review from a team as code owners August 5, 2026 14:52
@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 253706f5-3372-4a39-9fbf-c1d7091a38ba

📥 Commits

Reviewing files that changed from the base of the PR and between 268b2f8 and cc1f373.

📒 Files selected for processing (1)
  • .github/workflows/xtest.yml

📝 Walkthrough

Walkthrough

The platform test workflow updates the startup action revision. It selects the main bootstrap for the main lane and pqc-enabled for released platform tags.

Changes

Platform startup workflow

Layer / File(s) Summary
Update platform startup selection
.github/workflows/xtest.yml
The workflow uses the Keycloak 26.4 startup action revision. Conditional selection assigns main to the main lane and pqc-enabled to released platform tags.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

  • opentdf/tests#563: Updates the pinned platform startup action in the same workflow.

Suggested reviewers: jakedoublev

Poem

A rabbit checks the startup trail,
main hops forward without fail.
Tags take the PQC way,
Keycloak guides the test today.
The workflow blooms, neat and bright.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the xtest workflow change to use the Keycloak 26.4 bootstrap on the main platform lane.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch DSPX-3397-xtest-keycloak-264

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@sonarqubecloud

sonarqubecloud Bot commented Aug 5, 2026

Copy link
Copy Markdown

@dmihalcik-virtru
dmihalcik-virtru merged commit 7be3ab4 into main Aug 6, 2026
28 of 30 checks passed
@dmihalcik-virtru
dmihalcik-virtru deleted the DSPX-3397-xtest-keycloak-264 branch August 6, 2026 15:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants