feat(provider-tck): source the spec artifacts from the open-feature/spec submodule - #1838
Draft
aepfli wants to merge 1 commit into
Draft
feat(provider-tck): source the spec artifacts from the open-feature/spec submodule#1838aepfli wants to merge 1 commit into
aepfli wants to merge 1 commit into
Conversation
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: trueThanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
aepfli
force-pushed
the
feat/provider-tck-spec-source
branch
from
August 24, 2026 09:42
4a640de to
f533fb2
Compare
…pec submodule
The Gherkin, the canonical flag set and the control API document are not Java
artifacts. They are language-agnostic definitions of the provider contract that
every language's TCK must agree on byte for byte, and they only lived in this
module because the proof of concept had to start somewhere.
They now live in open-feature/spec as Appendix F, under
specification/assets/provider-tck/, and are copied in from the `spec` git
submodule at generate-resources — the same mechanism tools/flagd-api-testkit
already uses for the flagd test harness. The copies are git-ignored and carry a
do-not-edit note; changes belong in the spec repo and arrive here by bumping the
submodule.
Consumers are unaffected: the artifacts are still packaged into the release JAR,
@SelectClasspathResource("features") still resolves, and nobody needs a submodule
of their own. Verified byte-identical after the round trip.
The in-memory CI job now checks out submodules, since without them there is no
suite to run.
DEPENDS ON open-feature/spec#423. The submodule is pinned to that PR's branch
commit rather than to a commit on the spec repo's main branch. That is reachable,
so CI can fetch it, but it must be re-pinned to main once #423 merges and before
this lands.
Signed-off-by: Simon Schrottner <simon.schrottner@flagsmith.com>
aepfli
force-pushed
the
feat/provider-tck-spec-source
branch
from
August 24, 2026 09:50
f533fb2 to
fcb3660
Compare
This was referenced Aug 24, 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.
What
Moves the three language-agnostic spec artifacts out of this repo and sources them from the
open-feature/specsubmodule instead.src/main/resources/features/spec/specification/assets/provider-tck/gherkin/src/main/resources/flags/canonical-flags.jsonspec/specification/assets/provider-tck/flags/src/main/resources/openapi/control-api.yamlspec/specification/assets/provider-tck/openapi/Why
These are not Java artifacts. They are language-agnostic definitions of the provider contract that every language's TCK must agree on byte for byte, and that backend vendors implement in whatever language their testbed is written in. They only lived in this module because the proof of concept had to start somewhere — the original PR said as much in a
NOTE ON THE SOURCE OF TRUTHcomment and a README section, both of which this PR replaces with the real thing.How
Exactly the mechanism
tools/flagd-api-testkitalready uses for the flagd test harness:exec-maven-pluginatinitialize→git submodule update --init specmaven-resources-pluginatgenerate-resources→ threecopy-resourcesexecutions intosrc/main/resources/The copies are git-ignored and carry a do-not-edit note in
.gitignore, the POM comment and the README. Changes belong inopen-feature/specand arrive here by bumping the submodule.Consumers are unaffected. The artifacts are still packaged into the release JAR,
@SelectClasspathResource("features")still resolves, and nobody needs a submodule of their own.Verification
Deleted
src/main/resources/{features,flags,openapi}entirely, rebuilt from a clean target, and checked the result against the originals onfeat/provider-tck:Byte-identical after the full round trip, and the in-memory suite still reports 29 scenarios / 26 passed / 3 skipped. Jar contents confirmed to still carry all six files.
That round trip is also why open-feature/spec#423 adds a
.gitattributesnormalising these assets to LF: without it a Windows checkout of the submodule produced CRLF copies, which would make the published JAR differ depending on who built it. For artifacts whose whole claim is byte-for-byte agreement across languages, that matters.CI
The
provider-tckjob added in #1837 now checks out submodules — without them there is no suite to run. Themainmatrix job already usedsubmodules: recursive.Before merging
The submodule is pinned to
42b047b9on open-feature/spec#423's branch, not to a commit on spec'smain. The commit is reachable on the remote so CI can fetch it, but this must be re-pinned tomainonce #423 merges:Kept as a separate PR from #1837 for exactly this reason — the in-process work has no external dependency and can land on its own timeline.