Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
cc8e091
feat(provider-tck): add Java conformance suite for OpenFeature providers
aepfli Jul 27, 2026
74cdb5f
feat(provider-tck): cover both flagd resolver modes, expand type mism…
aepfli Jul 27, 2026
c98089a
feat(provider-tck): gate lifecycle scenarios on @lifecycle, not @events
aepfli Aug 24, 2026
774fbb6
feat(provider-tck): move the adopter-facing API to this PR
aepfli Sep 11, 2026
13f5b13
refactor(provider-tck): extract BackendControl and split the base class
aepfli Aug 24, 2026
92b7d1c
feat(provider-tck): in-process backend control and an in-memory self-…
aepfli Aug 24, 2026
b26681a
test(provider-tck): also run the self-test against MultiProvider
aepfli Aug 24, 2026
fd53098
feat(provider-tck): source the spec artifacts from the open-feature/s…
aepfli Aug 24, 2026
077bd55
style(provider-tck): reformat the in-memory self-test to what spotles…
aepfli Sep 11, 2026
db1d467
feat(provider-tck): let adopters add scenarios by convention
aepfli Sep 11, 2026
2c79fa8
feat(provider-tck): own the declaration vocabulary here, so reporting…
aepfli Sep 11, 2026
b8f1f76
refactor(provider-tck): move the flagd adoption to its own change
aepfli Sep 11, 2026
3190b96
docs(provider-tck): drop the links to the flagd adoption, which is a …
aepfli Sep 11, 2026
3f95486
feat(provider-tck): implement the shutdown, metadata and error-messag…
aepfli Sep 11, 2026
00396a4
feat(provider-tck): model @large-integers as not applicable and seed …
aepfli Sep 11, 2026
d3b1709
fix(provider-tck): drop the suppression TckState no longer needs
aepfli Sep 11, 2026
36b9c7f
style(provider-tck): reformat the not-applicable paths to what spotle…
aepfli Sep 11, 2026
48e557a
fix(provider-tck): name the falsy flags what the SDK suite already na…
aepfli Sep 11, 2026
90a52aa
feat(provider-tck): gate reinitialisation, which 2.5.2 permits rather…
aepfli Sep 11, 2026
427d8b9
fix(provider-tck): report the feature paths Appendix F names
aepfli Sep 11, 2026
267144e
fix(provider-tck): seed the in-process control from the packaged flag…
aepfli Sep 11, 2026
b690d98
fix(provider-tck): one skip with a reason, not a second kind of decla…
aepfli Sep 11, 2026
0437aee
ci: run the provider-tck stacked pull requests
aepfli Sep 11, 2026
0a27467
feat(provider-tck): gate the variant, and make @targeting a real capa…
aepfli Sep 11, 2026
5940c7f
feat(provider-tck): gate a disabled flag on @disabled-flags
aepfli Sep 12, 2026
7536855
refactor(tck): rename provider-tck to tck, and start at 0.1.0
aepfli Sep 12, 2026
732831d
refactor(tck): drop the post-command settle, and keep the readiness p…
aepfli Sep 12, 2026
382b3b1
docs(tck): state both shapes a known deviation takes, and which to pr…
aepfli Sep 12, 2026
ee9829d
refactor(tck): name the compose concepts what the other three languag…
aepfli Sep 12, 2026
1624a8a
test(tck): cover the lifecycle feature without Docker
aepfli Sep 12, 2026
143fee4
refactor(tck)!: a control states which API drove it, and /restart is …
aepfli Sep 12, 2026
ee85898
refactor(tck)!: name the backend's configuration after the backend
aepfli Sep 12, 2026
ae38a13
build(tck): keep testcontainers off every adopter's classpath
aepfli Sep 12, 2026
f43f28e
docs(tck): follow the renames, and write down the CI exclusion
aepfli Sep 12, 2026
a90c7fe
test(tck): assert the control API request sequence without Docker
aepfli Sep 12, 2026
d535142
docs(tck): point at Appendix F for why a suite is excluded from CI
aepfli Sep 12, 2026
c8edcb6
feat(tck): fail the run when a scenario carries a reserved tag
aepfli Sep 12, 2026
5a9540c
feat(tck): gate the resolution reason behind @standard-reasons
aepfli Sep 13, 2026
1240f8d
test(tck): fail the build when a declarable capability gates nothing
aepfli Sep 13, 2026
d2648a8
chore(tck): re-pin the canonical assets to 89b1519a
aepfli Sep 13, 2026
ac29865
build(tck): fail the build when the packaged assets are not the pinne…
aepfli Sep 13, 2026
81121e3
feat(tck): refuse @large-integers, which no Java provider can be asked
aepfli Sep 13, 2026
cd45936
docs(tck): stop naming a report-branch class from the base
aepfli Sep 13, 2026
5822c23
feat(tck): refuse a deviation against a capability nothing asked
aepfli Sep 13, 2026
80ae9ad
docs(tck): one tag withheld twice, and the rule that decides which ab…
aepfli Sep 13, 2026
183e1f8
chore(tck): re-pin the canonical assets to aa2ad24f
aepfli Sep 13, 2026
62ff504
docs(tck): the documented command is a step, and the step is called tck
aepfli Sep 13, 2026
4938259
docs(tck): select the conformance suite by directory, not by filename
aepfli Sep 13, 2026
2cd900b
docs(tck): rewrite the README as an adoption guide
aepfli Sep 14, 2026
9f81dea
docs(tck): let Appendix F own the vocabulary and the declaring rules
aepfli Sep 14, 2026
15b8c96
docs(tck): @disabled-flags is gated on what the response says, not on…
aepfli Sep 14, 2026
df31fc5
feat(tck): add @string-typing, and re-pin the canonical assets to d47…
aepfli Sep 15, 2026
7ad89df
feat(tck): re-pin to bda599f1, and fail a capability tag the vocabula…
aepfli Sep 16, 2026
cb8bfc8
style(tck): wrap the capability-gate call the way spotless wants
aepfli Sep 16, 2026
4fb5ecc
chore(tck): follow the spec pin to the rebased appendix
aepfli Sep 16, 2026
318a02d
chore(tck): pin the assets branch, now split from the appendix
aepfli Oct 1, 2026
9d888d1
chore(tck): follow the assets pin onto the restacked branch
aepfli Oct 2, 2026
38a1725
docs(tck): cut comments the TCK does not own
aepfli Oct 7, 2026
5ef0558
chore(tck): follow the spec pin onto the restacked assets branch
aepfli Oct 8, 2026
72fb26a
chore(tck): follow the spec pin after #440 merged
aepfli Oct 8, 2026
6490fef
chore(tck): follow the spec pin to the current #423 tip
aepfli Oct 14, 2026
c4c051c
chore(tck): pin the spec assets to main now that #423 has merged
aepfli Oct 14, 2026
85ff4fd
chore(tck): follow the spec assets to their first release, v0.1.0
aepfli Oct 16, 2026
44664ce
fix(provider-tck): restore the spec submodule's url in .gitmodules
aepfli Oct 16, 2026
4bfc6a0
chore(tck): pin the spec submodule to the assets release tag
aepfli Oct 16, 2026
b416b97
fix(provider-tck): stop a failed startSuite leaking the backend, and …
aepfli Oct 16, 2026
0ebcd38
chore: trim comments, move more to internal (#1923)
toddbaert Oct 19, 2026
ae05dbc
docs(provider-tck): follow the API the suite now ships
aepfli Oct 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/component_owners.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ components:
- toddbaert
tools/flagd-http-connector:
- liran2000
tools/tck:
- aepfli

ignored-authors:
- renovate-bot
33 changes: 33 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,41 @@ on:
- reopened
branches:
- main
# temporary, so stacked tck PRs get CI; remove once merged (open-feature/spec#417)
- 'feat/provider-tck*'

jobs:
# fast no-docker tck canary (in-memory, multi, controllable providers)
# not a gate on main; runs in parallel
tck:
name: Provider TCK (no Docker)
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
with:
# spec submodule supplies the tck assets
submodules: recursive

- name: Set up JDK 21
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5
with:
java-version: 21
distribution: 'temurin'
cache: maven

- name: Cache local Maven repository
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}21-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}21-maven-

- name: Verify the TCK against the in-memory provider
# no e2e profile or docker needed
run: mvn --batch-mode --activate-profiles codequality -pl tools/tck -am clean verify

main:
strategy:
matrix:
Expand Down
4 changes: 4 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,7 @@
path = tools/flagd-api-testkit/test-harness
url = https://github.com/open-feature/test-harness.git
branch = v3.10.4
[submodule "tools/tck/spec"]
path = tools/tck/spec
url = https://github.com/open-feature/spec.git
branch = specification/assets/provider-tck/v0.1.0
1 change: 1 addition & 0 deletions .release-please-manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
"tools/flagd-api": "1.0.0",
"tools/flagd-api-testkit": "0.3.0",
"tools/flagd-core": "3.0.0",
"tools/tck": "0.1.0",
".": "1.0.0",
"providers/optimizely": "1.0.0"
}
1 change: 1 addition & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
</licenses>

<modules>
<module>tools/tck</module>
<module>tools/flagd-api-testkit</module>
<module>tools/flagd-api</module>
<module>tools/flagd-core</module>
Expand Down
11 changes: 11 additions & 0 deletions release-please-config.json
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,17 @@
"README.md"
]
},
"tools/tck": {
"package-name": "dev.openfeature.contrib.tools.tck",
"release-type": "simple",
"bump-minor-pre-major": true,
"bump-patch-for-minor-pre-major": true,
"versioning": "default",
"extra-files": [
"pom.xml",
"README.md"
]
},
"tools/flagd-api-testkit": {
"package-name": "dev.openfeature.contrib.tools.flagdapitestkit",
"release-type": "simple",
Expand Down
4 changes: 4 additions & 0 deletions tools/tck/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# copied from the spec submodule at build time; do not edit
src/main/resources/gherkin/
src/main/resources/flags/
src/main/resources/openapi/
Loading
Loading