Compare commits

...

1402 Commits
0.0.3 ... main

Author SHA1 Message Date
renovate[bot] ac3344c7f6
chore(deps): update github/codeql-action digest to 7710ed1 (#1521)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-17 21:51:17 +00:00
renovate[bot] ecc8f7e3ad
chore(deps): update github/codeql-action digest to 03a2a17 (#1520)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-17 16:35:35 +02:00
renovate[bot] cbf7a58622
chore(deps): update dependency maven to v3.9.11 (#1519)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-16 06:57:06 +00:00
renovate[bot] 1382b367d9
chore(deps): update actions/setup-java digest to ae2b61d (#1518)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-16 03:54:58 +00:00
renovate[bot] 5b3e3656f6
chore(deps): update github/codeql-action digest to 0d17ea4 (#1517)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-15 23:46:35 +00:00
renovate[bot] 1d3fab6184
fix(deps): update dependency io.cucumber:cucumber-bom to v7.26.0 (#1516)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-14 16:00:25 +02:00
renovate[bot] 006ae75e2b
chore(deps): update github/codeql-action digest to 6f936b5 (#1515)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-14 15:49:08 +02:00
renovate[bot] aa0569379b
chore(deps): update github/codeql-action digest to f53ec7c (#1512)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-11 01:45:44 +00:00
renovate[bot] bf68cbdedf
fix(deps): update dependency io.cucumber:cucumber-bom to v7.25.0 (#1514)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-10 20:57:58 +00:00
renovate[bot] 62738f7f16
chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v2.45.0 (#1509)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-08 10:17:05 +02:00
renovate[bot] 1e8f5c880c
chore(deps): update dependency com.google.guava:guava to v33.4.8-jre (#1382)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-08 06:34:38 +00:00
renovate[bot] 488196656a
fix(deps): update dependency io.cucumber:cucumber-bom to v7.24.0 (#1510)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-08 08:28:26 +02:00
renovate[bot] 26716a51cf
chore(deps): update github/codeql-action digest to 624d0bc (#1507)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-08 03:14:51 +00:00
renovate[bot] 908755c2c2
chore(deps): update actions/setup-java digest to c190c18 (#1508)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-07 23:04:40 +00:00
OpenFeature Bot d2b1dc3a41
chore(main): release 1.16.0 (#1452)
Signed-off-by: OpenFeature Bot <109696520+openfeaturebot@users.noreply.github.com>
2025-07-07 14:54:59 -04:00
Todd Baert 85d89ee79a chore: update publish env vars
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-07-07 14:42:51 -04:00
Todd Baert 6194186b3e chore: skip tests on publish
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-07-07 14:39:17 -04:00
Todd Baert 5425a34a12 chore: migrate to new publish
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-07-07 14:30:18 -04:00
renovate[bot] 957c0d1ba3
fix(deps): update dependency org.junit:junit-bom to v5.13.3 (#1505)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-04 19:37:31 +00:00
chrfwow ebea0fdf1c
fix: Reduce locking and concurrency issues (#1478)
* Reduce locking and concurrency issues

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

* Reduce locking and concurrency issues

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

* formatting

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

* use concurrent data structure for hooks

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

* use concurrent data structure for hooks

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

---------

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2025-07-04 09:17:56 -04:00
renovate[bot] 08f549afd1
chore(deps): update actions/setup-java digest to 67aec00 (#1504)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-03 23:29:05 +00:00
renovate[bot] a5d1cbced4
chore(deps): update github/codeql-action digest to b694213 (#1503)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-03 19:13:17 +00:00
renovate[bot] 0fd9d3dcfb
chore(deps): update github/codeql-action digest to 33f8489 (#1502)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-03 00:11:36 +00:00
renovate[bot] 0515ad54c4
chore(deps): update dependency org.apache.maven.plugins:maven-gpg-plugin to v3.2.8 (#1501)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-02 13:05:20 +02:00
renovate[bot] 69519b1ef7
chore(deps): update github/codeql-action digest to dcc1a66 (#1499)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-30 20:37:12 +00:00
renovate[bot] 2e3b479cb1
chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.26.1 (#1498)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-30 01:58:05 +00:00
renovate[bot] 49214b7282
chore(deps): update github/codeql-action digest to 4c57370 (#1497)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-27 23:59:31 +00:00
renovate[bot] fc430c3e1d
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.9.3.2 (#1496)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-27 07:35:50 +02:00
renovate[bot] 86a5916f0d
chore(deps): update github/codeql-action digest to 8ef1782 (#1495)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-26 14:54:48 +02:00
renovate[bot] 34b22e8d93
fix(deps): update dependency org.junit:junit-bom to v5.13.2 (#1492)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-25 06:40:04 +00:00
renovate[bot] 300a705e0a
chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.26.0 (#1494)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-25 08:32:52 +02:00
renovate[bot] b64efe82d9
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.9.3.1 (#1493)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-25 02:49:37 +00:00
renovate[bot] 6f67b06f71
chore(deps): update github/codeql-action digest to 9b02dc2 (#1491)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-24 20:50:48 +00:00
renovate[bot] e67f598357
chore(deps): update actions/setup-java digest to ebb356c (#1490)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-23 22:42:58 +00:00
renovate[bot] 312b6df5d2
chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.25.1 (#1489)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-21 21:10:50 +00:00
renovate[bot] 8fad544b17
chore(deps): update github/codeql-action digest to ac30a39 (#1488)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-20 19:08:37 +00:00
renovate[bot] c3eaecdb8b
chore(deps): update github/codeql-action digest to 66d7255 (#1487)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-20 01:25:24 +00:00
renovate[bot] 7c2af57a36
chore(deps): update actions/cache digest to 640a1c2 (#1485)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-17 20:05:59 +00:00
renovate[bot] 8bf777a7e9
chore(deps): update github/codeql-action digest to ef36b69 (#1484)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-17 04:48:36 +00:00
renovate[bot] 936ff60fac
chore(deps): update dependency net.bytebuddy:byte-buddy-agent to v1.17.6 (#1483)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-16 16:50:34 +00:00
renovate[bot] 99a3006de8
chore(deps): update github/codeql-action digest to 3de706a (#1481)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-16 16:44:00 +00:00
renovate[bot] 8e51e6fe10
chore(deps): update dependency net.bytebuddy:byte-buddy to v1.17.6 (#1482)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-16 18:37:11 +02:00
renovate[bot] 844d5e244b
chore(deps): update github/codeql-action digest to be30325 (#1479)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-13 18:52:24 +00:00
renovate[bot] 0b57bcafc1
chore(deps): update github/codeql-action digest to 466d6ce (#1477)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-11 21:43:28 +00:00
chrfwow 3dd7d5d426
feat: add means of awaiting event emission, fix flaky build (#1463)
## This PR

- adds the ability to await event emissions by returning a new construct
- uses this construct in tests

⚠️ in rare cases, this could be a breaking change, but the events API is currently experimental, so we will not do a major version ubmp

### Related Issues

Fixes #1449
2025-06-10 11:27:15 -04:00
renovate[bot] 6cca721be5
chore(deps): update github/codeql-action digest to 7cb9b16 (#1476)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-10 01:27:44 +00:00
renovate[bot] 4481537ceb
chore(deps): update dependency maven to v3.9.10 (#1474)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-07 21:59:01 +00:00
renovate[bot] b5d873e44d
chore(deps): update actions/checkout digest to 09d2aca (#1473)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-07 17:39:13 +00:00
renovate[bot] 545d6aac09
fix(deps): update dependency org.junit:junit-bom to v5.13.1 (#1475)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-07 13:08:10 +00:00
renovate[bot] 2dcd6a1dd0
chore(deps): update github/codeql-action digest to b1e4dc3 (#1471)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-05 06:27:45 +00:00
Simon Schrottner 3ed65cfb0c
chore: remove unneeded version information (#1428)
Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
2025-06-04 14:44:38 +00:00
renovate[bot] 6597de7a98
chore(deps): update github/codeql-action digest to 075e08a (#1470)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-03 18:05:22 +00:00
renovate[bot] 376f81f5c3
chore(deps): update github/codeql-action digest to 4a00331 (#1469)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-02 19:28:18 +00:00
renovate[bot] 1558a86249
chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.25.0 (#1468)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-31 21:27:57 +00:00
renovate[bot] f8260a1c3a
fix(deps): update junit5 monorepo (#1467)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-30 21:02:38 +00:00
renovate[bot] 50a6b168a7
fix(deps): update dependency io.cucumber:cucumber-bom to v7.23.0 (#1466)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-30 05:38:25 +00:00
renovate[bot] b6ceff2ecb
chore(deps): update dependency org.codehaus.mojo:exec-maven-plugin to v3.5.1 (#1461)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-30 02:01:25 +00:00
renovate[bot] 2de7616676
chore(deps): update io.cucumber.version to v7.23.0 (#1465)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-29 23:00:03 +00:00
renovate[bot] f10aaaa357
chore(deps): update github/codeql-action digest to 7fd6215 (#1464)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-28 22:25:40 +00:00
renovate[bot] 40b319c5de
chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v2.44.5 (#1462)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-28 04:12:52 +00:00
renovate[bot] 5e922cf3ef
chore(deps): update github/codeql-action digest to bc02a25 (#1460)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-27 22:26:25 +00:00
renovate[bot] 6a95c008e9
chore(deps): update github/codeql-action digest to 7b0fb5a (#1459)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-22 22:59:22 +00:00
renovate[bot] dcbfd265a3
chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.24.0 (#1458)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-22 06:29:34 +00:00
renovate[bot] e17b0b2975
chore(deps): update dependency org.mockito:mockito-core to v5.18.0 (#1457)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-21 04:08:45 +00:00
renovate[bot] b45a937017
chore(deps): update github/codeql-action digest to 396fd27 (#1456)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-19 23:54:03 +00:00
renovate[bot] 36eed065e7
chore(deps): update github/codeql-action digest to 57eebf6 (#1455)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-16 15:06:06 +00:00
renovate[bot] e3379395e6
chore(deps): update codecov/codecov-action action to v5.4.3 (#1454)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-16 01:40:23 +00:00
renovate[bot] b667aa3251
chore(deps): update github/codeql-action digest to b86edfc (#1453)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-15 20:01:17 +00:00
Todd Baert 1714efe81a
chore: improvements to release workflow (#1451)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: chrfwow <christian.lutnik@dynatrace.com>
2025-05-15 11:22:10 -04:00
renovate[bot] d9a72d2aaf
chore(deps): update github/codeql-action digest to 510dfa3 (#1450)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-14 22:43:05 +00:00
OpenFeature Bot cfd9512728
chore(main): release 1.15.1 (#1448)
* chore(main): release 1.15.1

Signed-off-by: OpenFeature Bot <109696520+openfeaturebot@users.noreply.github.com>

* fixup: change version

Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>

---------

Signed-off-by: OpenFeature Bot <109696520+openfeaturebot@users.noreply.github.com>
Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
Co-authored-by: Simon Schrottner <simon.schrottner@dynatrace.com>
2025-05-14 14:12:11 +02:00
Todd Baert f6bd30db93
chore: update boostrap sha for release please
Creating a new build

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-05-14 07:57:13 -04:00
chrfwow e2813b2e5d
feat: add logging on provider state transitions (#1444)
* NOISSUE add logging on provider state transitions

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

* fix npe

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

* fix failing test

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

* fix failing test

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

* format

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

---------

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>
Co-authored-by: Simon Schrottner <simon.schrottner@dynatrace.com>
2025-05-14 11:11:36 +02:00
renovate[bot] bc10bacb5a
chore(deps): update github/codeql-action digest to 15bce5b (#1443)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-13 22:40:47 +00:00
OpenFeature Bot 7182a7fc41
chore(main): release 1.15.0 (#1431)
Signed-off-by: OpenFeature Bot <109696520+openfeaturebot@users.noreply.github.com>
2025-05-13 12:38:55 -04:00
Liran M d0ae548277
feat: add telemetry helper utils (#1346)
* feat: add telemetry helper utils

Signed-off-by: liran2000 <liran2000@gmail.com>

* updates

Signed-off-by: liran2000 <liran2000@gmail.com>

* fixup: apply changes according to the semconv

The semconv has changed, and some attributes have been
renamed. Furthermore, the body usage is deprecated
and should be part of the attributes.

see: https://github.com/open-telemetry/semantic-conventions/pull/1990/
Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>

* fixup: fix tests

Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>

* fixup: fix spotless

Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>

---------

Signed-off-by: liran2000 <liran2000@gmail.com>
Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
Co-authored-by: Simon Schrottner <simon.schrottner@dynatrace.com>
2025-05-13 09:45:16 +02:00
renovate[bot] e568f3a4f5
fix(deps): update dependency io.cucumber:cucumber-bom to v7.22.2 (#1442)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-12 07:07:53 +00:00
renovate[bot] 58454b4eaa
chore(deps): update io.cucumber.version to v7.22.2 (#1441)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-12 09:01:29 +02:00
renovate[bot] 78657ee79e
chore(deps): update dependency com.tngtech.archunit:archunit-junit5 to v1.4.1 (#1440)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-08 03:06:04 +00:00
renovate[bot] 3403510515
chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10 (#103)
* chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10

* Fix javadoc format

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

---------

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: christian.lutnik <christian.lutnik@dynatrace.com>
Co-authored-by: Simon Schrottner <simon.schrottner@dynatrace.com>
2025-05-06 06:19:41 +00:00
jarebudev 4dc988b637
feat!: Raise required Java version to 11 (#1393)
* bumped to java 11, altered CI to target java 11

Signed-off-by: jarebudev <23311805+jarebudev@users.noreply.github.com>

* changed profile and toolchain

Signed-off-by: jarebudev <23311805+jarebudev@users.noreply.github.com>

* corrected toolchain version

Signed-off-by: jarebudev <23311805+jarebudev@users.noreply.github.com>

---------

Signed-off-by: jarebudev <23311805+jarebudev@users.noreply.github.com>
Co-authored-by: Simon Schrottner <simon.schrottner@dynatrace.com>
2025-05-05 09:30:23 +00:00
renovate[bot] f2348ea370
chore(deps): update github/codeql-action digest to 5eb3ed6 (#1439)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-02 18:13:36 +00:00
renovate[bot] 85b200a08b
chore(deps): update github/codeql-action digest to 97a2bfd (#1438)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-01 18:38:45 +00:00
renovate[bot] f965cbcb37
chore(deps): update github/codeql-action digest to 40e16ed (#1437)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-30 23:46:35 +00:00
renovate[bot] b09e88798f
chore(deps): update github/codeql-action digest to ed51cb5 (#1436)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-29 19:28:15 +00:00
renovate[bot] 7e74f2aa3a
chore(deps): update github/codeql-action digest to 83605b3 (#1435)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-29 02:56:28 +00:00
renovate[bot] 62ba6db457
chore(deps): update amannn/action-semantic-pull-request digest to 3352882 (#1434)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-28 20:32:23 +00:00
Abhay Porwal 96cf9c7f54
docs: add try-catch example for setProviderAndWait usage (#1433)
* added the detailed instructions for the setProviderAndWait

Signed-off-by: Abhay <abhayakg123@gmail.com.com>

* fixup: checkstyle issues

Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>

---------

Signed-off-by: Abhay <abhayakg123@gmail.com.com>
Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
Co-authored-by: Abhay <abhayakg123@gmail.com.com>
Co-authored-by: Simon Schrottner <simon.schrottner@dynatrace.com>
2025-04-28 14:34:19 +02:00
renovate[bot] 99faaf88aa
chore(deps): update github/codeql-action digest to f843d94 (#1432)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-25 22:07:09 +00:00
Todd Baert 1cc851b293
chore: update release please action (#1430)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-04-24 21:41:37 -04:00
Todd Baert 32137bfa82
chore: add DCO to release please (#1429)
* chore: add DCO to release please

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* Update release-please-config.json

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

---------

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-04-24 21:14:07 -04:00
Todd Baert 45ec4b1b77
chore: add DCO to release please
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-04-24 20:58:47 -04:00
Todd Baert 014f8a59da
chore: use PAT for release please
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-04-24 19:32:45 -04:00
renovate[bot] 1c4d2efafd
fix(deps): update dependency io.cucumber:cucumber-bom to v7.22.1 (#1427)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-24 18:19:32 +00:00
renovate[bot] 844374a42b
chore(deps): update io.cucumber.version to v7.22.1 (#1426)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-24 15:19:34 +00:00
renovate[bot] a7828e73a8
chore(deps): update github/codeql-action digest to 4ffa236 (#1425)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-23 22:47:18 +00:00
renovate[bot] 6b6849f3a3
chore(deps): update github/codeql-action digest to 2a8cbad (#1423)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-22 19:25:23 +00:00
renovate[bot] 495da271be
chore(deps): update dependency com.h3xstream.findsecbugs:findsecbugs-plugin to v1.14.0 (#1422)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-20 10:02:26 +00:00
renovate[bot] e19ccaa35d
chore(deps): update dependency org.jacoco:jacoco-maven-plugin to v0.8.13 (#1407)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-18 08:15:55 +02:00
Simon Schrottner 498fd38265
chore: update codeowners to give global maintainers code ownership (#1412)
Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
2025-04-17 11:33:57 -04:00
renovate[bot] a3e2a59aeb
chore(deps): update actions/setup-java digest to f4f1212 (#1421)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-16 21:41:52 +00:00
Todd Baert 665dd51eb2
chore: add publish env (#1420)
* chore: add publish env

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* Update release.yml

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* Update merge.yml

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

---------

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-04-16 12:45:16 -04:00
renovate[bot] a6389e89f6
chore(deps): update codecov/codecov-action action to v5.4.2 (#1419)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-15 03:44:53 +00:00
renovate[bot] 97b442ed6e
fix(deps): update junit5 monorepo (#1418)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-11 21:45:27 +00:00
renovate[bot] 0c77c84460
chore(deps): update github/codeql-action digest to 4c3e536 (#1417)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-11 02:21:54 +00:00
renovate[bot] 4607c62f15
chore(deps): update github/codeql-action digest to 56dd02f (#1416)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-09 22:09:23 +00:00
renovate[bot] a5789038ac
chore(deps): update actions/setup-java digest to c5195ef (#1415)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-08 23:02:50 +00:00
renovate[bot] e066d3f749
chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v2.44.4 (#1414)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-08 06:34:39 +00:00
renovate[bot] 5b327eeb77
chore(deps): update github/codeql-action digest to d26c46a (#1413)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-08 01:31:00 +00:00
renovate[bot] e25181982a
fix(deps): update dependency io.cucumber:cucumber-bom to v7.22.0 (#1411)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-05 10:23:07 +00:00
renovate[bot] 3c69f2f36c
chore(deps): update io.cucumber.version to v7.22.0 (#1410)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-05 06:25:16 +00:00
renovate[bot] 345cdcfa10
chore(deps): update dependency org.mockito:mockito-core to v5.17.0 (#1409)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-04 18:42:05 +00:00
renovate[bot] ca160cab7c
chore(deps): update github/codeql-action digest to 362ef4c (#1408)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-03 18:12:31 +00:00
renovate[bot] e211397d51
chore(deps): update github/codeql-action digest to e13fe0d (#1406)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-03 02:18:17 +00:00
renovate[bot] 5b2f1513ab
chore(deps): update github/codeql-action digest to dab8a02 (#1405)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-02 17:47:53 +00:00
renovate[bot] f834e11acc
chore(deps): update actions/setup-java digest to 148017a (#1404)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-01 22:21:36 +00:00
renovate[bot] ef32f11571
fix(deps): update dependency org.projectlombok:lombok to v1.18.38 (#1403)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-01 03:02:58 +00:00
renovate[bot] 07301bda3f
chore(deps): update dependency net.bytebuddy:byte-buddy-agent to v1.17.5 (#1401)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-31 23:11:43 +00:00
renovate[bot] 384953d30e
chore(deps): update github/codeql-action digest to efffb48 (#1402)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-31 18:29:21 +00:00
renovate[bot] 1f2d071508
chore(deps): update dependency net.bytebuddy:byte-buddy to v1.17.5 (#1400)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-31 15:00:52 +00:00
renovate[bot] d6ebc161a9
chore(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.5.3 (#1399)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-31 10:47:07 +00:00
renovate[bot] 1fcf0e77d9
chore(deps): update dependency org.apache.maven.plugins:maven-failsafe-plugin to v3.5.3 (#1398)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-31 05:38:29 +00:00
renovate[bot] 37d76be697
chore(deps): update github/codeql-action digest to 9f45e74 (#1396)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-28 23:26:09 +00:00
renovate[bot] d7b591c9f9
chore(deps): update github/codeql-action digest to 9bd18b4 (#1394)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-27 23:40:23 +00:00
github-actions[bot] 7f54c334da
chore(main): release 1.14.2 (#1334)
* chore(main): release 1.15.0

* Update CHANGELOG.md

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* Update .release-please-manifest.json

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* Update CHANGELOG.md

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* Update version.txt

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* Update README.md

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* Update README.md

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* Update pom.xml

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

---------

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2025-03-27 15:48:06 -04:00
Todd Baert 24ef9dd290
fix: hooks not run in NOT_READY/FATAL (#1392)
* fix: hooks not run in NOT_READY/FATAL

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

---------

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2025-03-27 09:22:19 -04:00
renovate[bot] 753667925a
chore(deps): update actions/setup-java digest to 3b6c050 (#1391)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-26 07:41:23 +00:00
renovate[bot] 87c06d9edd
chore(deps): update amannn/action-semantic-pull-request digest to 04501d4 (#1390)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-25 16:35:34 +00:00
renovate[bot] 85fd5e0997
chore(deps): update github/codeql-action digest to 486ab5a (#1389)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-25 02:02:27 +00:00
renovate[bot] d8f6514598
chore(deps): update dependency net.bytebuddy:byte-buddy-agent to v1.17.4 (#1388)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-24 13:00:33 +00:00
renovate[bot] cb574d93b6
chore(deps): update dependency net.bytebuddy:byte-buddy to v1.17.4 (#1387)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-24 07:03:02 +00:00
renovate[bot] 4125ae8380
chore(deps): update dependency net.bytebuddy:byte-buddy-agent to v1.17.3 (#1385)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-22 10:02:36 +00:00
renovate[bot] 387e5f2e3b
chore(deps): update github/codeql-action digest to e0ea141 (#1386)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-22 05:11:28 +00:00
renovate[bot] b6becac2c4
chore(deps): update dependency net.bytebuddy:byte-buddy to v1.17.3 (#1384)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-22 03:00:07 +00:00
renovate[bot] 922e17e677
chore(deps): update github/codeql-action digest to bd1d9ab (#1383)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-21 22:54:41 +00:00
renovate[bot] d61c33e466
chore(deps): update github/codeql-action digest to c50c157 (#1379)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-20 07:07:31 +00:00
renovate[bot] 2239f054b9
chore(deps): update actions/setup-java digest to b8ebb8b (#1381)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-20 01:33:47 +00:00
renovate[bot] 8359ef13bb
chore(deps): update actions/cache digest to 5a3ec84 (#1380)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-19 21:41:15 +00:00
renovate[bot] dbf92df33b
chore(deps): update github/codeql-action digest to 6349095 (#1378)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-18 18:41:01 +00:00
renovate[bot] 706565581d
chore(deps): update github/codeql-action digest to 6a151cd (#1377)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-18 02:01:21 +00:00
renovate[bot] 9750f75d04
chore(deps): update dependency org.mockito:mockito-core to v5.16.1 (#1376)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-16 05:21:02 +00:00
renovate[bot] de3e213ac8
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.9.3.0 (#1375)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-16 02:24:15 +00:00
renovate[bot] 6b65e26c74
fix(deps): update junit5 monorepo (#1373)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-15 06:28:22 +00:00
renovate[bot] d233480912
chore(deps): update github/codeql-action digest to 70df9de (#1372)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-15 01:29:33 +00:00
chrfwow 69b571eda7
fix: equals and hashcode of several classes (#1364)
fix: equals and hashcode of several classes
2025-03-13 08:33:21 +01:00
renovate[bot] f8df5fb84a
chore(deps): update github/codeql-action digest to dc49dca (#1369)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-12 03:22:53 +00:00
renovate[bot] d54c68a8e9
chore(deps): update github/codeql-action digest to 7254660 (#1368)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-11 23:00:23 +00:00
renovate[bot] c550d59722
chore(deps): update github/codeql-action digest to b46b37a (#1367)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-10 22:21:34 +00:00
renovate[bot] d00e4b5b24
chore(deps): update github/codeql-action digest to b2e6519 (#1366)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-07 22:43:13 +00:00
chrfwow c37d249776
feat: implement gherkin tests for context merging (#1363)
feat: implement gherkin tests for context merging (#1363)
2025-03-07 11:04:46 +01:00
renovate[bot] 959e675e4c
chore(deps): update github/codeql-action digest to 56b25d5 (#1365)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-06 19:34:13 +00:00
renovate[bot] 67b34f84a3
chore(deps): update github/codeql-action digest to 608ccd6 (#1361)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-05 19:07:16 +00:00
renovate[bot] 30b6d004aa
chore(deps): update dependency org.mockito:mockito-core to v5.16.0 (#1358)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-04 15:10:03 +00:00
renovate[bot] ecea9df932
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.9.2.0 (#1360)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-04 10:30:29 +00:00
renovate[bot] 6c03e5d84a
chore(deps): update github/codeql-action digest to 80f9930 (#1357)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-04 06:25:17 +00:00
renovate[bot] 31444d6c8f
chore(deps): update actions/setup-java digest to 799ee7c (#1359)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-04 02:12:10 +00:00
renovate[bot] dd83114c4d
chore(deps): update dependency net.bytebuddy:byte-buddy-agent to v1.17.2 (#1356)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-03 23:33:51 +00:00
renovate[bot] 2a1adca8c2
chore(deps): update dependency net.bytebuddy:byte-buddy to v1.17.2 (#1355)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-03 17:40:45 +00:00
renovate[bot] 59017977a4
chore(deps): update actions/cache digest to d4323d4 (#1353)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-27 18:39:13 +00:00
renovate[bot] 989f4ae542
chore(deps): update github/codeql-action digest to 8392354 (#1352)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-27 16:13:25 +00:00
renovate[bot] b133c2fa52
chore(deps): update codecov/codecov-action action to v5.4.0 (#1351)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-27 06:59:17 +00:00
renovate[bot] 7df9565691
chore(deps): update github/codeql-action digest to 97aac9b (#1350)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-26 23:30:46 +00:00
renovate[bot] 2ec7c6c7ff
fix(deps): update dependency org.slf4j:slf4j-api to v2.0.17 (#1348)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-26 02:09:26 +00:00
renovate[bot] 698756856b
chore(deps): update github/codeql-action digest to 8c69433 (#1347)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-25 21:49:59 +00:00
renovate[bot] 5de33c02a6
chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v2.44.3 (#1341)
* chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v2.44.3

* fixup: fix spotless violation

Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>

---------

Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Simon Schrottner <simon.schrottner@dynatrace.com>
2025-02-25 08:15:15 +01:00
renovate[bot] de64eddfb3
chore(deps): update github/codeql-action digest to a8849fb (#1345)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-25 06:00:41 +00:00
renovate[bot] d95e270653
fix(deps): update junit5 monorepo (#1344)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-22 09:50:37 +00:00
renovate[bot] 1504d0f798
chore(deps): update dependency org.awaitility:awaitility to v4.3.0 (#1343)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-22 07:00:59 +00:00
renovate[bot] 88a778cc03
chore(deps): update dependency org.apache.maven.plugins:maven-compiler-plugin to v3.14.0 (#1342)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-22 01:27:57 +00:00
renovate[bot] 50b45b2be4
chore(deps): update github/codeql-action digest to ff79de6 (#1340)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-21 21:38:42 +00:00
chrfwow dd9227a924
feat: update test harness with metadata assertions #1467 (#1319)
* feat: implement gherkin tests

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

* fixup! feat: implement gherkin tests

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

* fixup! feat: implement gherkin tests

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

* fixup! feat: implement gherkin tests

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

* fixup: add version for dependency

Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>

---------

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>
Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
Co-authored-by: Simon Schrottner <simon.schrottner@dynatrace.com>
2025-02-19 16:27:46 +01:00
renovate[bot] cdcdc143ea
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.9.1.0 (#1332)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-19 10:06:15 +00:00
renovate[bot] 3920c638a4
chore(deps): update actions/cache digest to 7921ae2 (#1337)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-19 06:22:52 +00:00
renovate[bot] 4e535fd10f
chore(deps): update github/codeql-action digest to d99c7e8 (#1338)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-19 02:13:36 +00:00
renovate[bot] 4817864fd7
chore(deps): update dependency org.mockito:mockito-core to v5.15.2 (#1339)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-18 22:10:34 +01:00
Simon Schrottner 90217b2083
chore: update build and tooling to utilize new java version (#1321)
* chore: update build and tooling to utilize new java version

Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>

* Fix failing test

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

* chore: update build and tooling to utilize new java version

Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>

---------

Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>
Co-authored-by: christian.lutnik <christian.lutnik@dynatrace.com>
2025-02-18 21:58:17 +01:00
Simon Schrottner 88baa65dd0
test: Reduce usage of singelton within our tests and implementations (#1331)
Our tests are great, but often we rely on our own Singelton for testing purposes.
This can create concurrency issues or make testing really hard.
By instantiating a own API object for each test we ensure that we are not messing
with each other.
Furthermore we should not use `.getInstance()` within our own implementation.

Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2025-02-18 19:19:18 +01:00
renovate[bot] e163ce1c06
chore(deps): update github/codeql-action digest to 1bb15d0 (#1336)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-18 14:48:26 +00:00
renovate[bot] 5436eb0d5d
chore(deps): update github/codeql-action digest to acadfed (#1335)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-18 02:28:02 +00:00
renovate[bot] 859a36cbfa
chore(deps): update github/codeql-action digest to 8c1551c (#1333)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-17 18:05:19 +00:00
github-actions[bot] 9e782308d3
chore(main): release 1.14.1 (#1278)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-17 11:18:26 +01:00
renovate[bot] 4ba5695eee
chore(deps): update dependency net.bytebuddy:byte-buddy-agent to v1.17.1 (#1330)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-14 18:13:42 +00:00
renovate[bot] 9ab26182ea
chore(deps): update dependency net.bytebuddy:byte-buddy to v1.17.1 (#1329)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-14 14:13:05 +00:00
Philipp Fehre c33ac2d9b2
fix: possible event-related deadlocks with some providers (#1314)
* Move event emitting off the main thread to avoid deadlocks

When stacking event emitting inside an EventProvider, when using sychronization
the EventProvider can deadlock, to avoid this move the event emitting of the
main thread.

Signed-off-by: Philipp Fehre <philipp@fehre.co.uk>

* Test fixes

Test provider should respect the init-delay during all test

Signed-off-by: Philipp Fehre <philipp@fehre.co.uk>

* Add timeout to EventProviderTest

With the events being executed on a different thread, we need to wait to make
sure the thread is scheduled to have the events emitted.

Signed-off-by: Philipp Fehre <philipp@fehre.co.uk>

* Don't reuse the JVM Process

Signed-off-by: Philipp Fehre <philipp@fehre.co.uk>

---------

Signed-off-by: Philipp Fehre <philipp@fehre.co.uk>
Co-authored-by: Philipp Fehre <philipp.fehre@mollie.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2025-02-13 14:01:58 -05:00
Jonathan Norris 08c38fb553
fix: TrackingEventDetails interface to include numeric getValue() call (#1328)
Signed-off-by: Jonathan Norris <jonathan@taplytics.com>
2025-02-13 13:50:19 -05:00
renovate[bot] 3baf0df966
chore(deps): update github/codeql-action digest to 1c15a48 (#1325)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-13 02:02:06 +00:00
renovate[bot] 69cdc772a6
chore(deps): update actions/cache digest to 9fa7e61 (#1324)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-12 22:35:36 +00:00
renovate[bot] 8f3ced5907
chore(deps): update github/codeql-action digest to affec20 (#1323)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-12 11:46:13 +00:00
renovate[bot] 538140dfe7
chore(deps): update github/codeql-action digest to 6063925 (#1320)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-11 09:32:43 +00:00
renovate[bot] b7978832b7
fix(deps): update dependency io.cucumber:cucumber-bom to v7.21.1 (#1317)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-07 20:56:17 +00:00
renovate[bot] 26e1d7fff3
chore(deps): update github/codeql-action digest to 0a35e8f (#1316)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-07 17:53:29 +00:00
renovate[bot] 46903c6f27
chore(deps): update github/codeql-action digest to 24e1c2d (#1315)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-06 18:53:02 +00:00
renovate[bot] 37ed6a424c
chore(deps): update github/codeql-action digest to 08bc0cf (#1313)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-04 02:27:14 +00:00
renovate[bot] 208411e723
fix(deps): update dependency io.cucumber:cucumber-bom to v7.21.0 (#1312)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-03 09:58:39 +01:00
renovate[bot] 9a1e9abd64
chore(deps): update github/codeql-action digest to 0701025 (#1311)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-30 21:39:36 +00:00
renovate[bot] 40fa173338
chore(deps): update dependency net.bytebuddy:byte-buddy-agent to v1.17.0 (#1310)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-30 12:26:19 +00:00
renovate[bot] cda34053f7
chore(deps): update dependency net.bytebuddy:byte-buddy to v1.17.0 (#1309)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-30 09:03:12 +00:00
renovate[bot] 99d818572a
chore(deps): update github/codeql-action digest to e9987ad (#1308)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-30 04:28:35 +00:00
renovate[bot] 6f36434c52
chore(deps): update github/codeql-action digest to 54b1c84 (#1307)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-29 01:46:15 +00:00
renovate[bot] ba9cc4b85a
chore(deps): update actions/setup-java digest to 3a4f6e1 (#1306)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-28 22:03:11 +00:00
renovate[bot] 7916d76635
chore(deps): update github/codeql-action digest to 5f4f998 (#1305)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-28 13:26:01 +00:00
renovate[bot] 6874de64ce
chore(deps): update github/codeql-action digest to 43cffee (#1304)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-28 01:53:26 +00:00
renovate[bot] f9fa54be49
chore(deps): update codecov/codecov-action action to v5.3.1 (#1303)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-25 04:32:24 +00:00
renovate[bot] 78adc77c23
chore(deps): update github/codeql-action digest to e7c0c9d (#1302)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-25 01:31:55 +00:00
renovate[bot] f7f6586d72
chore(deps): update codecov/codecov-action action to v5.3.0 (#1301)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-24 05:39:08 +00:00
renovate[bot] 34919561b7
chore(deps): update github/codeql-action digest to 7e3036b (#1300)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-24 02:00:19 +00:00
renovate[bot] 531fc385b6
chore(deps): update codecov/codecov-action action to v5.2.0 (#1298)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-23 04:46:04 +00:00
renovate[bot] 305e0329e7
chore(deps): update github/codeql-action digest to b44b19f (#1297)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-23 00:49:44 +00:00
renovate[bot] 874e86df5c
chore(deps): update actions/setup-java digest to 28b532b (#1296)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-22 04:49:00 +00:00
renovate[bot] 122e82f843
chore(deps): update github/codeql-action digest to f89b8a7 (#1295)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-21 22:08:52 +00:00
renovate[bot] 5671184e7f
chore(deps): update github/codeql-action digest to d90e07f (#1294)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-21 01:24:58 +00:00
renovate[bot] 6071932cb4
chore(deps): update dependency net.bytebuddy:byte-buddy-agent to v1.16.1 (#1293)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-19 16:48:47 +00:00
renovate[bot] 0af9f2901f
chore(deps): update dependency net.bytebuddy:byte-buddy to v1.16.1 (#1292)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-19 12:47:02 +00:00
renovate[bot] a5eb21d1a2
chore(deps): update dependency org.assertj:assertj-core to v3.27.3 (#1291)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-18 17:02:55 +00:00
renovate[bot] 6c4205a008
chore(deps): update dependency net.bytebuddy:byte-buddy-agent to v1.16.0 (#1290)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-18 08:26:00 +00:00
renovate[bot] 0b5b423bdd
chore(deps): update dependency net.bytebuddy:byte-buddy to v1.16.0 (#1289)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-18 04:42:09 +00:00
renovate[bot] 882d2dd5bd
chore(deps): update github/codeql-action digest to 0f1559a (#1286)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-17 09:37:40 +00:00
renovate[bot] c69d3a4bd1
chore(deps): update actions/setup-java digest to 51ab6d2 (#1288)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-17 05:22:11 +00:00
renovate[bot] 640e35e853
chore(deps): update actions/checkout digest to 85e6279 (#1287)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-17 01:30:43 +00:00
renovate[bot] 32a39335de
chore(deps): update actions/setup-java digest to 99d3141 (#1285)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-16 21:00:50 +00:00
renovate[bot] 45b3995bda
chore(deps): update github/codeql-action digest to 93da9f2 (#1283)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-16 01:12:12 +00:00
renovate[bot] b390d5f0b0
chore(deps): update github/codeql-action digest to 3b4f4d9 (#1282)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-15 16:46:16 +00:00
renovate[bot] 8a1ab7ea18
chore(deps): update github/codeql-action digest to 1efc6bb (#1281)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-14 23:40:55 +00:00
renovate[bot] a3854d6ab1
chore(deps): update github/codeql-action digest to 10a3f07 (#1280)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-14 01:08:23 +00:00
renovate[bot] b997946db1
chore(deps): update github/codeql-action digest to db7177a (#1279)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-11 06:42:17 +00:00
renovate[bot] c2a82dbdba
chore(deps): update github/codeql-action digest to 87fc816 (#1277)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-10 21:58:22 +00:00
github-actions[bot] 9274c117ab
chore(main): release 1.14.0 (#1242)
* chore(main): release 1.14.0

* Update CHANGELOG.md

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

---------

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2025-01-10 15:10:55 -05:00
renovate[bot] 9c92ebb1bd
chore(deps): update github/codeql-action digest to e83e0a4 (#1275)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-10 10:17:41 +00:00
renovate[bot] d825ff8363
chore(deps): update actions/cache digest to 36f1e14 (#1274)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-10 06:08:41 +00:00
chrfwow ae85278c30
feat: Add evaluation details to finally hook stage #1246 (#1262)
Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2025-01-09 16:12:14 -05:00
renovate[bot] 3c97b7baaf
chore(deps): update github/codeql-action digest to fb65b6c (#1273)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-08 23:21:18 +00:00
renovate[bot] 4086dea703
chore(deps): update github/codeql-action digest to 3407610 (#1269)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-07 00:40:07 +00:00
renovate[bot] a1c558f4ff
chore(deps): update actions/cache digest to 53aa38c (#1270)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-06 21:06:18 +00:00
renovate[bot] 2e10d34920
chore(deps): update dependency org.assertj:assertj-core to v3.27.2 (#1268)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-04 15:14:06 +00:00
renovate[bot] 20bbb2337c
chore(deps): update dependency org.assertj:assertj-core to v3.27.1 (#1266)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-03 18:24:06 +00:00
Simon Schrottner 64ec68bcf5
build: change checkstyle to google code format, plus adding spotless (#1264)
Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
2025-01-03 19:06:22 +01:00
renovate[bot] f1817d8fef
chore(deps): update github/codeql-action digest to 5b6e617 (#1263)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-23 23:06:59 +00:00
renovate[bot] fc6f35e581
chore(deps): update github/codeql-action digest to 7876007 (#1260)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-21 00:46:09 +00:00
renovate[bot] c62ade3878
chore(deps): update dependency org.assertj:assertj-core to v3.27.0 (#1258)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-20 01:39:52 +00:00
renovate[bot] 6d60c962fb
chore(deps): update github/codeql-action digest to d01b25e (#1257)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-19 22:28:15 +00:00
renovate[bot] 992c00396c
chore(deps): update github/codeql-action digest to 64cc90b (#1256)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-19 04:03:19 +00:00
renovate[bot] d274cdac37
chore(deps): update codecov/codecov-action action to v5.1.2 (#1255)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-19 02:15:10 +00:00
renovate[bot] 6a7987455e
chore(deps): update github/codeql-action digest to 562042d (#1254)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-18 03:34:59 +00:00
renovate[bot] f39c4b5af5
chore(deps): update dependency com.google.guava:guava to v33.4.0-jre (#1253)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-17 06:20:23 +00:00
renovate[bot] 482a5aef10
chore(deps): update github/codeql-action digest to 9d59969 (#1252)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-16 22:56:34 +00:00
renovate[bot] 834f720718
fix(deps): update junit5 monorepo (#1251)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-16 18:39:04 +00:00
renovate[bot] 6772d3f394
chore(deps): update dependency net.bytebuddy:byte-buddy-agent to v1.15.11 (#1250)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-15 18:15:18 +00:00
renovate[bot] 6d169f55e2
chore(deps): update github/codeql-action digest to dd75594 (#1247)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-15 15:06:36 +00:00
renovate[bot] 4440cda6a5
chore(deps): update dependency net.bytebuddy:byte-buddy to v1.15.11 (#1249)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-15 12:48:35 +00:00
renovate[bot] 86e18c5d28
chore(deps): update actions/setup-java digest to 7a6d8a8 (#1248)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-13 01:31:22 +00:00
renovate[bot] 9acc8612a5
chore(deps): update actions/setup-java digest to 7136edc (#1244)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-12 00:54:52 +00:00
renovate[bot] fd1c1702c6
chore(deps): update github/codeql-action digest to 78d0136 (#1245)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-11 22:04:18 +00:00
renovate[bot] 884f8fbf77
chore(deps): update github/codeql-action digest to 4d64ab6 (#1243)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-11 01:28:12 +00:00
renovate[bot] b0abfd02cf
chore(deps): update github/codeql-action digest to 8975792 (#1241)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-10 01:20:08 +00:00
github-actions[bot] cacacc2615
chore(main): release 1.13.0 (#1185)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-12-09 08:48:34 -05:00
renovate[bot] c87c6e7a76
chore(deps): update dependency org.apache.maven.plugins:maven-javadoc-plugin to v3.11.2 (#1240)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-07 16:29:04 +00:00
renovate[bot] baaa78b7ec
chore(deps): update github/codeql-action digest to 6f9e628 (#1239)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-06 21:55:48 +00:00
warber 64ad644bdb
feat: add tracking as per spec (#1228)
feat: add tracking as per spec

---------

Signed-off-by: Bernd Warmuth <bernd.warmuth@dynatrace.com>
2024-12-06 10:19:36 -05:00
renovate[bot] c5ad1b4d4f
chore(deps): update codecov/codecov-action action to v5.1.1 (#1238)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-06 01:03:17 +00:00
renovate[bot] da725d89e0
chore(deps): update actions/cache digest to 1bd1e32 (#1237)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-05 23:08:11 +00:00
warber 473be8659c
test: Update gherkin test sub module (#1236)
Signed-off-by: Bernd Warmuth <bernd.warmuth@dynatrace.com>
2024-12-05 16:10:49 +00:00
renovate[bot] 409fd042f3
chore(deps): update github/codeql-action digest to 3096afe (#1235)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-04 17:02:17 +00:00
renovate[bot] bb3272d364
chore(deps): update github/codeql-action digest to 978ed82 (#1234)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-04 03:31:19 +00:00
renovate[bot] 5b460ead7e
chore(deps): update github/codeql-action digest to f1c289a (#1233)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-03 22:13:25 +00:00
renovate[bot] b3549a1b4a
chore(deps): update github/codeql-action digest to ef2fd42 (#1232)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-03 16:31:38 +00:00
renovate[bot] 4bbaf51753
chore(deps): update github/codeql-action digest to af49565 (#1231)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-02 20:25:33 +00:00
renovate[bot] 764d6650e6
chore(deps): update dependency org.cyclonedx:cyclonedx-maven-plugin to v2.9.1 (#1230)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-30 01:23:12 +00:00
renovate[bot] a0723ec2f8
chore(deps): update github/codeql-action digest to 3d3d628 (#1229)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-22 16:44:33 +00:00
renovate[bot] 234062cf33
chore(deps): update codecov/codecov-action action to v5.0.7 (#1227)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-21 08:03:20 +00:00
renovate[bot] 13811dcf25
chore(deps): update codecov/codecov-action action to v5.0.6 (#1226)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-20 22:34:42 +00:00
renovate[bot] 3227623425
chore(deps): update github/codeql-action digest to f8e782a (#1225)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-20 20:34:21 +00:00
renovate[bot] 19ed5c7c97
chore(deps): update codecov/codecov-action action to v5.0.4 (#1224)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-20 09:22:54 +00:00
renovate[bot] e91194ae16
chore(deps): update codecov/codecov-action action to v5.0.3 (#1223)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-20 01:33:05 +00:00
renovate[bot] bbc934c6d9
chore(deps): update github/codeql-action digest to a6c8729 (#1222)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-19 21:43:05 +00:00
renovate[bot] 37f0f06467
chore(deps): update github/codeql-action digest to cba5fb5 (#1221)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-19 06:19:31 +00:00
renovate[bot] 45d0656520
chore(deps): update github/codeql-action digest to e782c3a (#1220)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-19 01:32:36 +00:00
renovate[bot] 9cadc71d9d
fix(deps): update dependency org.projectlombok:lombok to v1.18.36 (#1219)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-16 00:02:00 +00:00
renovate[bot] 1b4947f108
chore(deps): update codecov/codecov-action action to v5.0.2 (#1218)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-15 18:10:46 +00:00
renovate[bot] 7aa77b8614
chore(deps): update codecov/codecov-action action to v5 (#1217)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-15 01:13:12 +00:00
renovate[bot] 6d3bb69420
chore(deps): update github/codeql-action digest to a1695c5 (#1215)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-14 21:40:29 +00:00
renovate[bot] 273efc62a7
chore(deps): update actions/checkout digest to cbb7224 (#1216)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-14 18:24:10 +00:00
renovate[bot] 9f37927eaa
chore(deps): update github/codeql-action digest to 6e3a010 (#1214)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-14 00:23:20 +00:00
renovate[bot] 92c87913ac
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.8.6.6 (#1213)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-13 13:34:11 +00:00
renovate[bot] d5228f5ccf
chore(deps): update amannn/action-semantic-pull-request digest to 40166f0 (#1212)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-13 10:56:56 +00:00
renovate[bot] 1df54411b7
chore(deps): update github/codeql-action digest to 024283f (#1211)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-13 02:52:28 +00:00
renovate[bot] a94bd37cff
chore(deps): update github/codeql-action digest to 5cb4249 (#1210)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-12 15:51:48 +00:00
renovate[bot] 1c21d2444b
chore(deps): update github/codeql-action digest to 4dc1519 (#1209)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-11 21:47:01 +00:00
renovate[bot] a3ced47e5d
chore(deps): update dependency org.simplify4u:slf4j2-mock to v2.4.0 (#1208)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-09 03:31:56 +00:00
renovate[bot] 21dbd3fc4c
chore(deps): update github/codeql-action digest to acb9cb1 (#1207)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-09 00:41:31 +00:00
renovate[bot] 446e2987e9
chore(deps): update actions/checkout digest to 3b9b8c8 (#1206)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-08 22:08:50 +00:00
renovate[bot] eb4f625561
chore(deps): update github/codeql-action digest to 3ef4c08 (#1205)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-07 21:14:36 +00:00
renovate[bot] 3a9fd60fd4
chore(deps): update github/codeql-action digest to 5ac2ddd (#1204)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-07 04:42:35 +00:00
renovate[bot] 2bb2ed3992
chore(deps): update dependency net.bytebuddy:byte-buddy-agent to v1.15.10 (#1203)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-04 08:19:14 +00:00
renovate[bot] d959059177
chore(deps): update dependency net.bytebuddy:byte-buddy to v1.15.10 (#1202)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-04 04:58:15 +00:00
renovate[bot] d2cb092b09
chore(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.5.2 (#1200)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-03 09:11:03 +00:00
renovate[bot] a2a57ab8f1
chore(deps): update dependency org.apache.maven.plugins:maven-javadoc-plugin to v3.11.1 (#1201)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-03 07:13:45 +00:00
renovate[bot] 08da9a3439
chore(deps): update dependency org.apache.maven.plugins:maven-failsafe-plugin to v3.5.2 (#1199)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-03 05:20:51 +00:00
renovate[bot] e32a712615
chore(deps): update dependency net.bytebuddy:byte-buddy-agent to v1.15.9 (#1198)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-03 02:15:10 +00:00
renovate[bot] 54a234519f
chore(deps): update dependency net.bytebuddy:byte-buddy to v1.15.9 (#1197)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-02 21:30:23 +00:00
renovate[bot] 30eb2ce082
chore(deps): update dependency net.bytebuddy:byte-buddy-agent to v1.15.8 (#1196)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-02 03:05:33 +00:00
renovate[bot] 309f28b520
chore(deps): update dependency net.bytebuddy:byte-buddy to v1.15.8 (#1195)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-02 00:57:59 +00:00
renovate[bot] 2dba3a737d
chore(deps): update github/codeql-action digest to cbe1897 (#1194)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-01 23:08:42 +00:00
renovate[bot] 8621944633
chore(deps): update github/codeql-action digest to 48c3e26 (#1193)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-31 20:31:28 +00:00
renovate[bot] f99de6fa55
chore(deps): update github/codeql-action digest to 9f93f47 (#1191)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-30 01:45:47 +00:00
renovate[bot] f3163dfbd4
chore(deps): update github/codeql-action digest to 6a38de6 (#1190)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-29 02:15:51 +00:00
renovate[bot] d5082cd5f6
chore(deps): update dependency org.apache.maven.plugins:maven-pmd-plugin to v3.26.0 (#1189)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-28 22:40:51 +00:00
renovate[bot] 89c7f85da4
chore(deps): update dependency org.apache.maven.plugins:maven-checkstyle-plugin to v3.6.0 (#1188)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-26 03:41:50 +00:00
renovate[bot] 5c7c28706e
chore(deps): update dependency org.apache.maven.plugins:maven-dependency-plugin to v3.8.1 (#1187)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-26 01:56:27 +00:00
renovate[bot] 4e3a329c40
chore(deps): update github/codeql-action digest to 3aa7135 (#1186)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-25 22:18:48 +00:00
renovate[bot] d0309eaa66
chore(deps): update github/codeql-action digest to b91f43b (#1184)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-25 15:15:09 +00:00
github-actions[bot] f1cee1ca4c
chore(main): release 1.12.2 (#1162)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-24 08:48:06 -04:00
Todd Baert fd7659a46f
perf: reduce hashmap allocations (#1178)
* chore: reduce hashmap allocations

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-10-24 08:41:55 -04:00
renovate[bot] 7a1eb9b9e9
chore(deps): update github/codeql-action digest to 467d7e6 (#1181)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-23 23:25:51 +00:00
renovate[bot] 74958fd261
chore(deps): update actions/checkout digest to 11bd719 (#1183)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-23 19:08:29 +00:00
Todd Baert 0009e23c7b
chore: improve benchmark realism; add more context (#1182)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-10-23 12:33:02 -04:00
renovate[bot] 36620f8408
chore(deps): update dependency net.bytebuddy:byte-buddy-agent to v1.15.7 (#1180)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-23 16:29:05 +00:00
renovate[bot] 0db0a50cf4
chore(deps): update dependency net.bytebuddy:byte-buddy to v1.15.7 (#1179)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-23 12:39:25 +00:00
renovate[bot] a08589664c
chore(deps): update github/codeql-action digest to b7cdb7f (#1177)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-22 22:12:34 +00:00
renovate[bot] cedad9c2c6
chore(deps): update actions/cache digest to 6849a64 (#1174)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-22 18:14:14 +00:00
renovate[bot] 9fb469f8e8
chore(deps): update github/codeql-action digest to b35b023 (#1176)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-22 15:33:38 +00:00
renovate[bot] c8c70e23e8
chore(deps): update dependency org.codehaus.mojo:exec-maven-plugin to v3.5.0 (#1175)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-22 12:21:42 +00:00
renovate[bot] b08e8d5537
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.8.6.5 (#1173)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-22 05:26:51 +00:00
renovate[bot] 59139a2186
chore(deps): update github/codeql-action digest to 0a30541 (#1170)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-22 00:26:41 +00:00
renovate[bot] a432760fc9
chore(deps): update actions/setup-java digest to 8df1039 (#1172)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-21 23:01:08 +00:00
renovate[bot] 02eed7a32c
fix(deps): update junit5 monorepo (#1171)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-21 18:53:27 +00:00
Todd Baert d6d284b6a3
chore: flaky test (#1169)
chore: blocking set-provider in test

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-10-18 10:10:28 -04:00
renovate[bot] 3f1cfed913
chore(deps): update actions/checkout digest to 163217d (#1168)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-18 10:27:50 +00:00
renovate[bot] 51a3410d8e
chore(deps): update dependency net.bytebuddy:byte-buddy-agent to v1.15.5 (#1166)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-17 22:48:33 +00:00
renovate[bot] 432ec438ef
chore(deps): update github/codeql-action digest to af56b04 (#1167)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-17 19:14:53 +00:00
renovate[bot] 2d3be2617b
chore(deps): update dependency net.bytebuddy:byte-buddy to v1.15.5 (#1165)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-17 15:02:37 +00:00
renovate[bot] 4e39b55bda
chore(deps): update github/codeql-action digest to c470063 (#1163)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-16 18:23:02 +00:00
Todd Baert 473a05784c chore: fix another flaky test
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-10-15 13:47:12 -04:00
Todd Baert 457da96e7b chore: fix flaky test
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-10-15 12:36:36 -04:00
github-actions[bot] 8037e343bd
chore(main): release 1.12.1 (#1117)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-15 12:18:46 -04:00
Todd Baert 90088188c9
perf: add heap benchmark and reduce allocations (#1156)
* chore: add heap benchmark and reduce allocations

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-10-15 09:47:51 -04:00
renovate[bot] b144763299
chore(deps): update github/codeql-action digest to 5636274 (#1161)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-15 01:06:35 +00:00
renovate[bot] f28cefe3b1
chore(deps): update github/codeql-action digest to ea2cd92 (#1160)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-12 00:09:51 +00:00
renovate[bot] a8813760d6
chore(deps): update github/codeql-action digest to 0c3e006 (#1159)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-11 19:01:23 +00:00
renovate[bot] 98a7ed0727
chore(deps): update actions/setup-java digest to 83a06ff (#1158)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-11 00:32:37 +00:00
renovate[bot] 20e3a5d3fe
chore(deps): update github/codeql-action digest to 38469af (#1157)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-10 22:11:03 +00:00
renovate[bot] 82a5eb5687
chore(deps): update dependency net.bytebuddy:byte-buddy-agent to v1.15.4 (#1155)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-10 03:34:24 +00:00
renovate[bot] 4f32abaf84
chore(deps): update dependency net.bytebuddy:byte-buddy to v1.15.4 (#1154)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-10 00:34:59 +00:00
renovate[bot] 7ccc896665
fix(deps): update dependency io.cucumber:cucumber-bom to v7.20.1 (#1153)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-09 21:32:16 +00:00
renovate[bot] e982216f70
chore(deps): update github/codeql-action digest to 9d1e406 (#1152)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-09 01:36:48 +00:00
renovate[bot] fdda5e94b6
chore(deps): update actions/cache digest to 8469c94 (#1151)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-08 22:26:06 +00:00
renovate[bot] 6d38b2c5a9
chore(deps): update dependency org.cyclonedx:cyclonedx-maven-plugin to v2.9.0 (#1150)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-08 09:20:13 +00:00
renovate[bot] 03e6604960
chore(deps): update github/codeql-action digest to 572cc52 (#1148)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-08 00:08:29 +00:00
renovate[bot] 16ec4e459b
chore(deps): update actions/checkout digest to eef6144 (#1149)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-07 21:56:19 +00:00
renovate[bot] aaab1598a1
chore(deps): update dependency org.apache.maven.plugins:maven-failsafe-plugin to v3.5.1 (#1147)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-07 13:34:24 +00:00
renovate[bot] 2489e40c29
chore(deps): update github/codeql-action digest to 56d1975 (#1145)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-07 10:32:50 +00:00
renovate[bot] 0c0c5f4ad9
chore(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.5.1 (#1144)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-06 15:49:54 +00:00
renovate[bot] 20ea6bd99d
fix(deps): update junit5 monorepo (#1141)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-05 06:49:33 +00:00
renovate[bot] 9eb64a7471
chore(deps): update github/codeql-action digest to 7cf65a5 (#1140)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-05 04:36:13 +00:00
renovate[bot] a0041c10e4
chore(deps): update actions/cache digest to 2cdf405 (#1143)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-05 00:04:32 +00:00
renovate[bot] e6573838a0
fix(deps): update dependency io.cucumber:cucumber-bom to v7.20.0 (#1142)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-04 21:02:56 +00:00
renovate[bot] 1f2c5a1b2a
chore(deps): update github/codeql-action digest to 8b33300 (#1139)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-04 00:04:44 +00:00
renovate[bot] 43f076a125
chore(deps): update actions/cache digest to a11fb02 (#1138)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-03 22:07:35 +00:00
renovate[bot] 0c8ff472f2
chore(deps): update actions/checkout digest to 6b42224 (#1137)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-03 13:22:17 +00:00
renovate[bot] 16e1dec928
chore(deps): update github/codeql-action digest to 8aba5f2 (#1136)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-03 07:36:07 +00:00
renovate[bot] 26659a3eed
chore(deps): update github/codeql-action digest to c4d433c (#1135)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-02 07:40:14 +00:00
renovate[bot] 626f5e17c0
chore(deps): update actions/checkout digest to de5a000 (#1134)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-02 03:01:48 +00:00
renovate[bot] d4dac274ee
chore(deps): update dependency org.apache.maven.plugins:maven-javadoc-plugin to v3.10.1 (#1131)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-02 00:30:11 +00:00
renovate[bot] c8722a2ac6
chore(deps): update github/codeql-action digest to a196a71 (#1133)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-01 21:53:02 +00:00
renovate[bot] f7d6202e13
chore(deps): update codecov/codecov-action action to v4.6.0 (#1132)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-01 19:34:00 +00:00
renovate[bot] 02f4ec1061
chore(deps): update github/codeql-action digest to cf5b0a9 (#1130)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-30 19:08:45 +00:00
Guido Breitenhuber 4f83d61306
build: Add Maven wrapper (#1129)
Signed-off-by: Guido Breitenhuber <guido.breitenhuber@dynatrace.com>
2024-09-30 12:11:53 -04:00
renovate[bot] 3816151b87
chore(deps): update dependency org.apache.maven.plugins:maven-gpg-plugin to v3.2.7 (#1128)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-27 21:03:14 +00:00
renovate[bot] 91fffb3560
fix(deps): update junit5 monorepo (#1121)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-27 19:17:02 +00:00
renovate[bot] 93f4feb818
chore(deps): update github/codeql-action digest to 2617ff2 (#1127)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-27 16:16:24 +00:00
renovate[bot] 8765cf3440
chore(deps): update dependency net.bytebuddy:byte-buddy-agent to v1.15.3 (#1126)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-27 07:59:42 +00:00
renovate[bot] 58635411bd
chore(deps): update dependency net.bytebuddy:byte-buddy to v1.15.3 (#1125)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-27 04:40:12 +00:00
renovate[bot] f2c37eacc2
chore(deps): update actions/setup-java digest to 292cc14 (#1124)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-26 10:38:29 +00:00
renovate[bot] db1bc75cde
chore(deps): update dependency org.cyclonedx:cyclonedx-maven-plugin to v2.8.2 (#1123)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-26 03:48:16 +00:00
renovate[bot] 2393924592
chore(deps): update actions/checkout digest to d632683 (#1122)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-26 00:41:23 +00:00
renovate[bot] c5bace6ff2
chore(deps): update dependency net.bytebuddy:byte-buddy-agent to v1.15.2 (#1120)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-25 20:03:51 +00:00
renovate[bot] b919333823
chore(deps): update dependency net.bytebuddy:byte-buddy to v1.15.2 (#1119)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-25 14:23:20 +00:00
renovate[bot] 90c65666e2
chore(deps): update github/codeql-action digest to 46e0c78 (#1118)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-24 22:44:43 +00:00
renovate[bot] ce06eee9df
chore(deps): update dependency com.google.guava:guava to v33.3.1-jre (#1116)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-24 06:50:02 +00:00
renovate[bot] 5d9780333a
chore(deps): update actions/setup-java digest to b36c23c (#1114)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-24 03:34:29 +00:00
renovate[bot] a2a55e8f31
chore(deps): update github/codeql-action digest to 426821d (#1115)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-24 01:33:16 +00:00
github-actions[bot] 48f0685051
chore(main): release 1.12.0 (#1112)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-23 12:51:01 -04:00
chrfwow 1b1e527e78
feat: make provider interface "stateless"; SDK maintains provider state (#1096)
* Make provider interface "stateless", SDK maintains provider state

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: christian.lutnik <christian.lutnik@dynatrace.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-09-23 12:45:34 -04:00
renovate[bot] dd8ba81f12
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.8.6.4 (#1113)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-21 11:08:08 +00:00
renovate[bot] 52e6d2b0ee
chore(deps): update github/codeql-action digest to 323f5ef (#1111)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-20 19:09:08 +00:00
github-actions[bot] 0f94ba890e
chore(main): release 1.11.0 (#1090)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-20 09:39:11 -04:00
renovate[bot] 2412f296b5
fix(deps): update dependency io.cucumber:cucumber-bom to v7.19.0 (#1110)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-20 00:37:30 +00:00
renovate[bot] 17a58efc7e
chore(deps): update github/codeql-action digest to 799e477 (#1108)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-19 21:43:56 +00:00
renovate[bot] 244f216582
chore(deps): update actions/setup-java digest to 40b9536 (#1109)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-19 20:21:42 +00:00
renovate[bot] 37b56ac2da
chore(deps): update actions/setup-java digest to 0a40ce6 (#1107)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-18 19:55:37 +00:00
renovate[bot] ce19ac91f6
chore(deps): update github/codeql-action digest to 64431c6 (#1106)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-18 16:14:50 +00:00
renovate[bot] 9d69ebd94a
chore(deps): update github/codeql-action digest to cb28816 (#1105)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-18 05:10:38 +00:00
renovate[bot] 7cb89087da
chore(deps): update github/codeql-action digest to 782de45 (#1104)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-17 16:06:06 +00:00
Simon Schrottner 6fc0b90610
feat: error resolution flow control without exceptions (#1095)
* Allowing flowcontrol with out exceptions

So far we used exception to handle our flowcontrol, but
Exceptions are costly. In the end we enriched our
evaluation Details with errorCode and errorMessage.
This can be also handled by the providers if desired,
to reduce the execution footprint in errornous cases,
which do not have to be exceptions.

Eg FlagNotFound - it might be the case, but in performance
critical environments, an exception rather than a normal
return, can cause overhead and can be already too costly.

Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>

* fix: adding reason, and removing stacktraces from errors

Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>

* Update src/main/java/dev/openfeature/sdk/exceptions/TypeMismatchError.java

Co-authored-by: Justin Abrahms <justin@abrah.ms>
Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>

---------

Signed-off-by: Simon Schrottner <simon.schrottner@dynatrace.com>
Co-authored-by: Justin Abrahms <justin@abrah.ms>
2024-09-17 09:15:43 -04:00
renovate[bot] 29901b87ea
chore(deps): update dependency org.apache.maven.plugins:maven-gpg-plugin to v3.2.6 (#1103)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-14 19:23:56 +00:00
renovate[bot] d1478c001a
chore(deps): update github/codeql-action digest to 5618c9f (#1102)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-13 21:47:30 +00:00
renovate[bot] b80fd6d307
chore(deps): update github/codeql-action digest to 4a01ec7 (#1101)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-12 21:49:04 +00:00
renovate[bot] c68f78e17b
chore(deps): update actions/setup-java digest to bcfbca5 (#1100)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-11 12:07:01 +00:00
renovate[bot] caec6e35e9
chore(deps): update github/codeql-action digest to e817992 (#1099)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-11 03:43:06 +00:00
renovate[bot] 64082617fa
chore(deps): update github/codeql-action digest to 8fd294e (#1097)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-10 01:02:53 +00:00
renovate[bot] 082f5746c8
chore(deps): update actions/setup-java digest to 2dfa201 (#1094)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-07 00:59:37 +00:00
renovate[bot] d60593fa11
chore(deps): update github/codeql-action digest to d8b1697 (#1093)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-06 16:16:30 +00:00
renovate[bot] 870fc27ed7
chore(deps): update github/codeql-action digest to 9b41ced (#1089)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-06 08:22:57 +00:00
renovate[bot] 58ead7fa91
chore(deps): update actions/setup-java digest to 7467385 (#1092)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-06 03:29:26 +00:00
renovate[bot] 9f6a40ec9b
chore(deps): update actions/checkout digest to 6d193bf (#1091)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-06 02:08:56 +00:00
renovate[bot] 7e0c70f7c5
chore(deps): update actions/checkout digest to b684943 (#1088)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-05 18:34:47 +00:00
github-actions[bot] 1f8d577a16
chore(main): release 1.10.0 (#1065)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-09-05 13:05:46 -04:00
Todd Baert 037826fe1b
feat: add logging hook, rm logging from evaluation (#1084)
* feat: add logging hook, rm logging from evaluation

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: remove public

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: debug, not info

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: move comment

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: underscoes

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: add to readme

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

---------

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-09-05 12:33:51 -04:00
renovate[bot] 78e3371c05
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.8.6.3 (#1087)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-05 07:01:18 +00:00
renovate[bot] dd7696f473
chore(deps): update github/codeql-action digest to 889597e (#1086)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-04 22:46:26 +00:00
renovate[bot] 90648d1c9d
chore(deps): update github/codeql-action digest to b4a8631 (#1083)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-03 14:44:42 +00:00
renovate[bot] 9196599f30
chore(deps): update actions/checkout digest to 2d7d9f7 (#1082)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-02 18:39:34 +00:00
renovate[bot] a4d428c83c
chore(deps): update github/codeql-action digest to 821ab42 (#1081)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-30 12:10:55 +00:00
renovate[bot] a3285df729
chore(deps): update dependency net.bytebuddy:byte-buddy-agent to v1.15.1 (#1079)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-30 03:25:51 +00:00
renovate[bot] 0cc5ca1397
chore(deps): update actions/setup-java digest to 8e04ddf (#1080)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-30 01:05:10 +00:00
renovate[bot] 98360061a8
chore(deps): update dependency net.bytebuddy:byte-buddy to v1.15.1 (#1078)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-29 21:13:06 +00:00
renovate[bot] 3f5294c734
chore(deps): update github/codeql-action digest to b43ac1c (#1077)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-29 16:56:18 +00:00
renovate[bot] eb5526d75f
chore(deps): update github/codeql-action digest to 7233ec5 (#1076)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-28 19:11:07 +00:00
renovate[bot] b772119977
chore(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.5.0 (#1075)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-28 03:55:03 +00:00
renovate[bot] 5ee38510a8
chore(deps): update dependency org.apache.maven.plugins:maven-pmd-plugin to v3.25.0 (#1074)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-28 00:41:42 +00:00
renovate[bot] 3eed950d3c
chore(deps): update dependency org.apache.maven.plugins:maven-javadoc-plugin to v3.10.0 (#1072)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-27 21:42:54 +00:00
renovate[bot] c8450358c0
chore(deps): update dependency org.apache.maven.plugins:maven-failsafe-plugin to v3.5.0 (#1073)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-27 18:07:36 +00:00
renovate[bot] 5668987274
chore(deps): update github/codeql-action digest to b8efe4d (#1071)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-27 15:41:48 +00:00
renovate[bot] ee6d8b094a
chore(deps): update github/codeql-action digest to 864b979 (#1070)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-27 03:45:55 +00:00
renovate[bot] 0e048c1ff5
chore(deps): update github/codeql-action digest to d36c7aa (#1069)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-26 21:43:20 +00:00
Todd Baert 35d4cc23c8
chore: various non-functional refactors (#1066)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-08-26 09:16:10 -04:00
renovate[bot] ea59e7fa58
chore(deps): update github/codeql-action digest to a895f2e (#1068)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-24 05:37:08 +00:00
renovate[bot] a07eb67865
chore(deps): update github/codeql-action digest to 7e27807 (#1067)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-23 20:07:49 +00:00
renovate[bot] dd53021153
chore(deps): update dependency net.bytebuddy:byte-buddy-agent to v1.15.0 (#1064)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-23 13:42:51 +00:00
renovate[bot] 7fea9b106c
chore(deps): update dependency net.bytebuddy:byte-buddy to v1.15.0 (#1063)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-23 11:12:31 +00:00
github-actions[bot] d7ed2a5de2
chore(main): release 1.9.1 (#996)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-08-22 16:01:38 -04:00
renovate[bot] 8370d4209d
chore(deps): update dependency org.apache.maven.plugins:maven-checkstyle-plugin to v3.5.0 (#1062)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-22 15:56:50 -04:00
Ryan Prayogo 32340a3e0e
fix: Pin byte-buddy(-agent) version to 1.14.19 to workaround Mockito issue (#1060)
* fix: Add the net.bytebuddy.experimental=true system property

Workaround to make Mockito tests to pass under Java 21

Signed-off-by: Ryan Prayogo <57620+ryanprayogo@users.noreply.github.com>

* fix: Pin byte-buddy and byte-buddy-agent to a newer version

Signed-off-by: Ryan Prayogo <57620+ryanprayogo@users.noreply.github.com>

* chore: Fix maven warning about deprecated expression

Signed-off-by: Ryan Prayogo <57620+ryanprayogo@users.noreply.github.com>

* chore: Add comments around the Mockito workaround

Signed-off-by: Ryan Prayogo <57620+ryanprayogo@users.noreply.github.com>

* Update pom.xml

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

---------

Signed-off-by: Ryan Prayogo <57620+ryanprayogo@users.noreply.github.com>
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-08-22 15:56:19 -04:00
Ryan Prayogo b7ed041eed
fix: Use ConcurrentHashMap for InMemoryProvider (#1057)
* fix: Use ConcurrentHashMap for InMemoryProvider

Signed-off-by: Ryan Prayogo <57620+ryanprayogo@users.noreply.github.com>

* fix: make the flags field variable final

Signed-off-by: Ryan Prayogo <57620+ryanprayogo@users.noreply.github.com>

* chore: Use Collections.singletonList instead of Arrays.asList

Signed-off-by: Ryan Prayogo <57620+ryanprayogo@users.noreply.github.com>

* chore: Update javadoc and parameter name

Signed-off-by: Ryan Prayogo <57620+ryanprayogo@users.noreply.github.com>

* fixup: await verify

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: remove test, key diffing

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

---------

Signed-off-by: Ryan Prayogo <57620+ryanprayogo@users.noreply.github.com>
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-08-22 15:48:45 -04:00
renovate[bot] a81957ff56
chore(deps): update dependency org.apache.maven.plugins:maven-dependency-plugin to v3.8.0 (#1061)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-22 14:40:10 +00:00
renovate[bot] b0f915bb09
chore(deps): update github/codeql-action digest to fd5fa13 (#1058)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-22 01:50:06 +00:00
renovate[bot] 61d821ae8a
chore(deps): update github/codeql-action digest to 202b3b9 (#1056)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-21 00:25:47 +00:00
Todd Baert dbf967a860
fix: updated context not passed to all hooks (#1049)
* fix: updated context not passed to all hooks

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: checkstyle

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

---------

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-08-20 15:33:34 -04:00
renovate[bot] 7cac1984f8
chore(deps): update github/codeql-action digest to 512e306 (#1055)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-20 15:02:17 +00:00
renovate[bot] aed4ea21d6
chore(deps): update github/codeql-action digest to 339aada (#1053)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-19 21:45:43 +00:00
renovate[bot] 13dd70f847
chore(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.4.0 (#1052)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-19 04:35:51 +00:00
renovate[bot] a36d2ab111
chore(deps): update dependency com.google.guava:guava to v33.3.0-jre (#1050)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-19 01:14:23 +00:00
renovate[bot] a1ceb1fbbf
chore(deps): update dependency org.apache.maven.plugins:maven-failsafe-plugin to v3.4.0 (#1051)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-18 23:21:46 +00:00
renovate[bot] 00bc0609eb
chore(deps): update github/codeql-action digest to 5c681ef (#1048)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-15 15:39:23 +00:00
renovate[bot] 5e77f8ad33
fix(deps): update junit5 monorepo (#1045)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-14 21:16:02 +00:00
renovate[bot] 2934195a8f
chore(deps): update github/codeql-action digest to a93f8c2 (#1046)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-14 18:49:57 +00:00
renovate[bot] d746dc0a11
chore(deps): update actions/cache digest to 81382a7 (#1044)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-14 15:58:59 +00:00
renovate[bot] f1ea4057fc
chore(deps): update github/codeql-action digest to 0d5982a (#1043)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-13 12:38:06 -04:00
renovate[bot] 37121e9939
chore(deps): update dependency org.codehaus.mojo:exec-maven-plugin to v3.4.1 (#1042)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-13 01:13:31 +00:00
renovate[bot] 69db287007
chore(deps): update github/codeql-action digest to d620faa (#1041)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-12 22:12:09 +00:00
renovate[bot] b215dec8b8
chore(deps): update dependency org.apache.maven.plugins:maven-gpg-plugin to v3.2.5 (#1040)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-12 14:11:06 +00:00
renovate[bot] beba1bd8d6
fix(deps): update dependency org.slf4j:slf4j-api to v2.0.16 (#1039)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-10 12:53:59 +00:00
renovate[bot] 75b9acd791
chore(deps): update github/codeql-action digest to 25ad3c8 (#1038)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-08 22:19:31 +00:00
renovate[bot] b4f0550a2b
chore(deps): update actions/setup-java digest to 67fbd72 (#1037)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-08 22:10:56 +00:00
renovate[bot] fed93942b8
fix(deps): update dependency org.slf4j:slf4j-api to v2.0.15 (#1036)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-08 18:09:46 +00:00
renovate[bot] 4591d3f1da
chore(deps): update dependency org.awaitility:awaitility to v4.2.2 (#1035)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-07 14:28:50 +00:00
renovate[bot] ccabb1856c
chore(deps): update dependency org.codehaus.mojo:exec-maven-plugin to v3.4.0 (#1034)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-07 07:55:55 +00:00
renovate[bot] 4ec155d91b
fix(deps): update dependency org.slf4j:slf4j-api to v2.0.14 (#1033)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-07 03:12:16 +00:00
renovate[bot] 1ed7fc1577
chore(deps): update github/codeql-action digest to 5c02493 (#1032)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-07 01:25:18 +00:00
renovate[bot] 22435a694a
chore(deps): update github/codeql-action digest to c24926b (#1031)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-06 19:47:12 +00:00
renovate[bot] 6990e21b47
chore(deps): update actions/cache digest to 57b8e40 (#1030)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-06 17:19:45 +00:00
renovate[bot] 89cb7479f4
chore(deps): update dependency org.cyclonedx:cyclonedx-maven-plugin to v2.8.1 (#1029)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-04 07:02:11 +00:00
renovate[bot] cd4c8239cd
chore(deps): update github/codeql-action digest to 9c646c2 (#1028)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-02 19:31:13 +00:00
renovate[bot] 09686741ad
chore(deps): update actions/setup-java digest to 6a0805f (#1027)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-01 21:50:25 +00:00
renovate[bot] 41128b86fb
chore(deps): update actions/cache digest to 40c3b67 (#1026)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-31 21:01:30 +00:00
renovate[bot] c574ec5c77
chore(deps): update github/codeql-action digest to 5cdd182 (#1025)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-31 16:39:08 +00:00
renovate[bot] d23a9115c8
chore(deps): update github/codeql-action digest to 16639b4 (#1024)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-30 13:43:51 +00:00
renovate[bot] 326a10ba01
chore(deps): update actions/checkout digest to 9a9194f (#1023)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-30 03:46:08 +00:00
renovate[bot] 865c3bb17a
chore(deps): update actions/cache digest to 4a28cbc (#1022)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-30 00:59:00 +00:00
renovate[bot] e57eafd86d
chore(deps): update github/codeql-action digest to aa96d09 (#1021)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-26 19:57:40 +00:00
renovate[bot] 7db6d8a3d3
chore(deps): update github/codeql-action digest to 4b1d7da (#1020)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-25 20:17:27 +00:00
renovate[bot] cf760e4cc4
chore(deps): update github/codeql-action digest to f8e94f9 (#1019)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-25 14:52:07 +00:00
renovate[bot] aa7f8b97f0
chore(deps): update github/codeql-action digest to 1b214db (#1018)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-24 21:07:51 +00:00
renovate[bot] baa13313e8
chore(deps): update github/codeql-action digest to f67c9cd (#1017)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-24 16:09:27 +00:00
renovate[bot] 5db43ad1aa
chore(deps): update github/codeql-action digest to b400d0f (#1016)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-24 00:42:54 +00:00
renovate[bot] f1b0eb154d
chore(deps): update github/codeql-action digest to 0e346f2 (#1014)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-23 01:46:52 +00:00
renovate[bot] 3d0cd62c98
chore(deps): update dependency org.apache.maven.plugins:maven-javadoc-plugin to v3.8.0 (#1013)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-20 14:01:02 +00:00
renovate[bot] eca299b3ad
chore(deps): update github/codeql-action digest to 44534b7 (#1012)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-19 22:07:05 +00:00
renovate[bot] 91fa8cf7d6
fix(deps): update dependency io.cucumber:cucumber-bom to v7.18.1 (#1011)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-18 23:28:44 +00:00
renovate[bot] 1d31726e57
chore(deps): update github/codeql-action digest to 270a29d (#1010)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-17 19:00:44 +00:00
renovate[bot] efbb69a998
chore(deps): update dependency org.apache.maven.plugins:maven-pmd-plugin to v3.24.0 (#1009)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-14 01:32:25 +00:00
renovate[bot] 9cc9241b01
chore(deps): update github/codeql-action digest to c2585ec (#1008)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-12 21:40:22 +00:00
renovate[bot] aab84b80af
chore(deps): update github/codeql-action digest to 857f661 (#1007)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-12 14:35:00 +00:00
renovate[bot] 2bb58d6e1b
chore(deps): update github/codeql-action digest to 9ab7277 (#1006)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-11 13:56:33 +00:00
renovate[bot] e8568a8ea2
chore(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.3.1 (#1005)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-11 04:52:40 +00:00
renovate[bot] 7ae703e1da
chore(deps): update dependency org.apache.maven.plugins:maven-failsafe-plugin to v3.3.1 (#1004)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-11 00:31:04 +00:00
renovate[bot] f3d9a55eb7
chore(deps): update github/codeql-action digest to be825d5 (#1003)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-10 14:32:44 +00:00
renovate[bot] 2f5deb1a3a
chore(deps): update dependency org.assertj:assertj-core to v3.26.3 (#1002)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-09 21:19:24 +00:00
renovate[bot] 145dfc70c2
chore(deps): update github/codeql-action digest to 6e04d51 (#1001)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-08 18:39:48 +00:00
renovate[bot] 42d2d776a8
chore(deps): update github/codeql-action digest to 064a406 (#1000)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-08 14:05:49 +00:00
renovate[bot] d0b3b35981
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.8.6.2 (#999)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-06 03:03:57 +00:00
renovate[bot] 62f95b651b
chore(deps): update github/codeql-action digest to 7adf9ac (#998)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-02 16:55:24 +00:00
renovate[bot] fc40209edc
chore(deps): update github/codeql-action digest to ee4ad8b (#997)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-01 22:21:04 +00:00
David Pilato 7bff3eebe6
docs: Small typo sonartype vs sonatype (#989)
Small type sonartype vs sonatype

Nothing important. Feel free to ignore ;)

Signed-off-by: David Pilato <david@pilato.fr>
2024-06-28 12:48:32 -07:00
renovate[bot] e2c70d9f0b
chore(deps): update github/codeql-action digest to 79e9a50 (#995)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-28 18:16:12 +00:00
github-actions[bot] 4e87fd25a4
chore(main): release 1.9.0 (#923)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-28 10:29:54 -07:00
renovate[bot] 32b101ed8f
chore(deps): update amannn/action-semantic-pull-request digest to 80c0371 (#994)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-28 12:14:40 +00:00
renovate[bot] 44b4b35431
fix(deps): update dependency org.projectlombok:lombok to v1.18.34 (#993)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-28 06:15:49 +00:00
renovate[bot] 0ec57a1b03
chore(deps): update actions/setup-java digest to fd08b9c (#992)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-28 03:03:08 +00:00
renovate[bot] 843b420cd1
chore(deps): update github/codeql-action digest to de94575 (#991)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-27 21:20:08 +00:00
renovate[bot] a2c04c1b23
fix(deps): update junit5 monorepo (#990)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-27 18:09:35 +00:00
renovate[bot] 616d7e7b05
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.8.6.1 (#987)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-27 16:36:33 +00:00
renovate[bot] f80a303e3f
chore(deps): update github/codeql-action digest to 9b7c22c (#988)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-25 15:26:19 +00:00
renovate[bot] 72b9ffe583
chore(deps): update github/codeql-action digest to 8723b5b (#986)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-24 19:59:32 +00:00
renovate[bot] 0dbdfa386d
chore(deps): update github/codeql-action digest to 3ce5d00 (#985)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-22 22:34:06 +00:00
renovate[bot] b128f13e0b
chore(deps): update dependency org.apache.maven.plugins:maven-dependency-plugin to v3.7.1 (#984)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-21 18:22:55 +00:00
renovate[bot] cc2989bb59
chore(deps): update dependency org.apache.maven.plugins:maven-jar-plugin to v3.4.2 (#983)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-19 22:25:22 +00:00
renovate[bot] 9ff353e509
chore(deps): update github/codeql-action digest to ce5603b (#982)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-18 17:18:27 +00:00
renovate[bot] 8e1709944f
chore(deps): update dependency com.github.spotbugs:spotbugs to v4.8.6 (#981)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-18 06:29:58 +00:00
renovate[bot] 8928bd4ab8
chore(deps): update github/codeql-action digest to 35619fb (#980)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-18 02:46:58 +00:00
renovate[bot] a79c0ee80a
chore(deps): update github/codeql-action digest to 1428e58 (#979)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-17 16:06:10 +00:00
renovate[bot] 078f94edd9
chore(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.3.0 (#978)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-15 01:12:23 +00:00
renovate[bot] 51721c2163
chore(deps): update dependency org.apache.maven.plugins:maven-failsafe-plugin to v3.3.0 (#977)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-14 21:22:51 +00:00
Todd Baert 4126b511fb
chore: javadoc and tests for api, context (#942)
* chore: javadoc and tests for api, context

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: lint

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

---------

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-06-14 10:14:49 -04:00
renovate[bot] a0b1d25f49
chore(deps): update github/codeql-action digest to bd2ebac (#976)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-14 13:47:37 +00:00
renovate[bot] 3fc7ccf88a
chore(deps): update github/codeql-action digest to 3990b56 (#975)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-13 18:55:20 +00:00
renovate[bot] 59f9779f19
chore(deps): update codecov/codecov-action action to v4.5.0 (#974)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-13 17:03:30 +00:00
renovate[bot] d8db02f872
chore(deps): update github/codeql-action digest to 5bf6dad (#973)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-13 12:43:37 +00:00
renovate[bot] 7cadadb8ec
chore(deps): update github/codeql-action digest to c36b5fc (#971)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-13 00:29:44 +00:00
renovate[bot] c3eb16cd75
chore(deps): update actions/checkout digest to 692973e (#972)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-12 21:56:21 +00:00
renovate[bot] 20ce4daa4a
chore(deps): update dependency org.apache.maven.plugins:maven-pmd-plugin to v3.23.0 (#969)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-12 04:09:43 +00:00
renovate[bot] f9ec8de7b6
chore(deps): update github/codeql-action digest to 81b8143 (#970)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-12 02:02:28 +00:00
renovate[bot] 82c265f168
chore(deps): update dependency org.apache.maven.plugins:maven-dependency-plugin to v3.7.0 (#968)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-11 22:46:59 +00:00
jarebudev 5c0aaaa8bc
feat: implement domain scoping (#934)
* initial changes for implementing domain scoping

Signed-off-by: jarebudev <23311805+jarebudev@users.noreply.github.com>

* completed the rest of the renaming and tidying up

Signed-off-by: jarebudev <23311805+jarebudev@users.noreply.github.com>

* applied code review suggested changes

Signed-off-by: jarebudev <23311805+jarebudev@users.noreply.github.com>

* introdcue a dedicated interface for client metadata

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>

* add deprecated default getName to be backward compatible as much as possible

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>

---------

Signed-off-by: jarebudev <23311805+jarebudev@users.noreply.github.com>
Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
Co-authored-by: Kavindu Dodanduwa <Kavindu-Dodan@users.noreply.github.com>
Co-authored-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
2024-06-11 09:49:46 -07:00
renovate[bot] 4ea74d8a0a
chore(deps): update github/codeql-action digest to c796494 (#967)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-11 15:01:04 +00:00
renovate[bot] dd33ec82cb
chore(deps): update amannn/action-semantic-pull-request digest to e32d7e6 (#966)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-10 19:47:11 +00:00
renovate[bot] 402cb1bc22
chore(deps): update github/codeql-action digest to 8f1a6fe (#963)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-05 23:02:04 +00:00
renovate[bot] 6d6bcd1dea
chore(deps): update dependency org.apache.maven.plugins:maven-checkstyle-plugin to v3.4.0 (#965)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-05 19:13:15 +00:00
Michael Beemer 515f38b3c7
docs: remove golang snippet and fix variable name (#964)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2024-06-04 14:58:43 -04:00
renovate[bot] b3ba6fe5a2
chore(deps): update github/codeql-action digest to 9c15e42 (#962)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-03 21:04:44 +00:00
renovate[bot] 4420bcaaa9
chore(deps): update dependency org.apache.maven.plugins:maven-javadoc-plugin to v3.7.0 (#961)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-01 05:18:05 +00:00
renovate[bot] 65e2bf3895
chore(deps): update dependency com.google.guava:guava to v33.2.1-jre (#960)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-06-01 01:34:38 +00:00
renovate[bot] c363bdd1ca
chore(deps): update github/codeql-action digest to add199b (#959)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-31 15:25:09 +00:00
jarebudev dbfeb72bc5
fix: run error hook when provider returns error code (#951)
Signed-off-by: jarebudev <23311805+jarebudev@users.noreply.github.com>
2024-05-30 16:47:23 -04:00
renovate[bot] 27c9114c58
chore(deps): update github/codeql-action digest to a095bf2 (#958)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-29 03:40:16 +00:00
renovate[bot] 71098a8569
chore(deps): update github/codeql-action digest to 9550da9 (#957)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-28 21:29:17 +00:00
renovate[bot] 62bbd571e7
chore(deps): update dependency org.sonatype.plugins:nexus-staging-maven-plugin to v1.7.0 (#956)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-28 16:46:10 +00:00
renovate[bot] a84f37562e
chore(deps): update github/codeql-action digest to 7927df0 (#955)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-28 14:39:28 +00:00
renovate[bot] 08e170e24a
chore(deps): update dependency org.sonatype.plugins:nexus-staging-maven-plugin to v1.6.14 (#954)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-27 19:53:51 +00:00
renovate[bot] 340dd9c27c
chore(deps): update dependency org.assertj:assertj-core to v3.26.0 (#953)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-26 13:04:42 +00:00
renovate[bot] 253f29da2b
chore(deps): update github/codeql-action digest to 8c4bc43 (#952)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-24 18:22:51 +00:00
renovate[bot] 767e1ef04a
chore(deps): update github/codeql-action digest to acdf238 (#950)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-23 01:54:19 +00:00
renovate[bot] 0467e999ee
chore(deps): update actions/setup-java digest to 2e74cbc (#949)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-22 22:54:57 +00:00
renovate[bot] c3c0fd2412
chore(deps): update dependency org.codehaus.mojo:exec-maven-plugin to v3.3.0 (#948)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-22 15:12:49 +00:00
renovate[bot] be833a07f2
chore(deps): update codecov/codecov-action action to v4.4.1 (#947)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-22 13:00:12 +00:00
renovate[bot] bca1f0bab6
chore(deps): update github/codeql-action digest to b1bd8da (#946)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-22 04:09:07 +00:00
renovate[bot] 015961b4fc
chore(deps): update actions/checkout digest to b80ff79 (#945)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-21 19:14:27 +00:00
renovate[bot] bdc19b2cc0
fix(deps): update dependency io.cucumber:cucumber-bom to v7.18.0 (#944)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-18 09:29:23 +00:00
renovate[bot] 1638b8974f
chore(deps): update github/codeql-action digest to 63d519c (#943)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-18 03:47:49 +00:00
renovate[bot] 08567f43c8
chore(deps): update actions/checkout digest to a5ac7e5 (#941)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-17 03:09:44 +00:00
Justin Abrahms e65b2a0ecb
chore: Adding information needed for spec-compliance tooling (#900)
Signed-off-by: Justin Abrahms <justin@abrah.ms>
2024-05-16 16:44:34 -04:00
renovate[bot] 00478ec57b
chore(deps): update github/codeql-action digest to 0d9161c (#938)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-16 00:27:08 +00:00
Dave 1a46aea242
fix: PMD warnings with new version (#936)
* chore(deps): update dependency org.apache.maven.plugins:maven-pmd-plugin to v3.22.0

* removed redundancy from eventdetails, SuppressWarnings in OpenfeatureAPI and Client

Signed-off-by: DBlanchard88 <davidblanchard88@gmail.com>

* Update src/main/java/dev/openfeature/sdk/OpenFeatureClient.java

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

---------

Signed-off-by: DBlanchard88 <davidblanchard88@gmail.com>
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-05-15 13:18:33 -04:00
renovate[bot] 0844c8f742
chore(deps): update codecov/codecov-action action to v4.4.0 (#937)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-14 23:21:47 +00:00
renovate[bot] 41213c7422
chore(deps): update github/codeql-action digest to 7fd4900 (#935)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-14 14:31:55 +00:00
renovate[bot] 2334906534
chore(deps): update google-github-actions/release-please-action digest to e4dc86b (#933)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-14 03:30:33 +00:00
renovate[bot] c94a0ba802
chore(deps): update github/codeql-action digest to 08487db (#932)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-13 18:51:03 +00:00
renovate[bot] 29e6a90b10
chore(deps): update github/codeql-action digest to 4a51972 (#931)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-10 22:05:12 +00:00
renovate[bot] 09c9a5c254
chore(deps): update github/codeql-action digest to 4995c49 (#930)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-10 14:11:12 +00:00
renovate[bot] 0c540f1f39
chore(deps): update github/codeql-action digest to def4d2c (#929)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-09 20:12:09 +00:00
renovate[bot] 0e3c10fd74
chore(deps): update github/codeql-action digest to 7d9b7a1 (#927)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-08 23:32:22 +00:00
renovate[bot] 23c01b9fa3
chore(deps): update github/codeql-action digest to 4b812a5 (#926)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-07 13:31:21 +00:00
renovate[bot] 81cba71190
chore(deps): update github/codeql-action digest to 1e21373 (#925)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-06 22:00:16 +00:00
renovate[bot] 3dfbfac268
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.8.5.0 (#924)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-05 21:37:18 +00:00
renovate[bot] 5097d7ca0f
chore(deps): update dependency com.github.spotbugs:spotbugs to v4.8.5 (#922)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-04 04:33:42 +00:00
github-actions[bot] 2962bfa179
chore(main): release 1.8.0 (#865)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-03 14:26:27 -04:00
renovate[bot] 95cf8b4857
chore(deps): update github/codeql-action digest to 84d6ead (#920)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-03 18:17:44 +00:00
Dave cd7470dd7a
fix: removed javax.nullable annotations (#921)
removing nullable annotation

Signed-off-by: DBlanchard88 <davidblanchard88@gmail.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-05-03 10:50:24 -07:00
renovate[bot] 3f8c009139
chore(deps): update actions/setup-java digest to a1c6c9c (#919)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-03 16:30:28 +00:00
renovate[bot] 0a3e0538f5
chore(deps): update github/codeql-action digest to 93b8232 (#918)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-03 13:45:14 +00:00
renovate[bot] 1a3a0b1952
chore(deps): update dependency com.google.guava:guava to v33.2.0-jre (#917)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-02 18:38:10 +00:00
Dave d69cf5d49b
fix: consistent method chainability (#913)
* mutablecontext settargetkey now return(s) this method chainable

Signed-off-by: DBlanchard88 <davidblanchard88@gmail.com>

* addHooks & setEvaluationContext are now chainable

Signed-off-by: DBlanchard88 <davidblanchard88@gmail.com>

* OpenFeatureAPI setEvaluationContext new chainable

Signed-off-by: DBlanchard88 <davidblanchard88@gmail.com>

* Update src/test/java/dev/openfeature/sdk/MutableContextTest.java

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

---------

Signed-off-by: DBlanchard88 <davidblanchard88@gmail.com>
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-05-02 12:04:09 -04:00
renovate[bot] f364ca52d8
chore(deps): update github/codeql-action digest to 41857ba (#916)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-01 21:57:44 +00:00
renovate[bot] 3728fddde8
chore(deps): update codecov/codecov-action action to v4.3.1 (#915)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-01 19:18:48 +00:00
renovate[bot] 8be250e57c
chore(deps): update actions/checkout digest to 44c2b7a (#914)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-30 22:16:22 +00:00
renovate[bot] b21125d9e2
chore(deps): update dependency org.jacoco:jacoco-maven-plugin to v0.8.12 (#875)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-30 15:21:18 -04:00
renovate[bot] 74c72eac90
chore(deps): update github/codeql-action digest to 8fcfedf (#912)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-30 01:13:14 +00:00
renovate[bot] 8edf1a636a
chore(deps): update github/codeql-action digest to 4ebadbc (#911)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-26 04:41:46 +00:00
renovate[bot] 99c4133758
chore(deps): update github/codeql-action digest to 0ad7791 (#909)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-25 01:01:06 +00:00
renovate[bot] 4f952fc485
chore(deps): update amannn/action-semantic-pull-request digest to cfb6070 (#908)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-24 22:00:32 +00:00
renovate[bot] 5fe18df2d3
chore(deps): update actions/checkout digest to 8459bc0 (#907)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-24 19:30:22 +00:00
renovate[bot] c7ebef3b8f
chore(deps): update actions/checkout digest to 43045ae (#903)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-24 00:46:35 +00:00
renovate[bot] 849a6c0a9f
chore(deps): update github/codeql-action digest to dbf2b17 (#905)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-23 21:30:16 +00:00
renovate[bot] 2cc9700af3
chore(deps): update amannn/action-semantic-pull-request digest to c24d6dd (#904)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-23 19:08:11 +00:00
renovate[bot] 82cb6f6771
chore(deps): update github/codeql-action digest to 4909c1f (#902)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-22 21:51:26 +00:00
renovate[bot] 08712b488e
chore(deps): update github/codeql-action digest to f45390c (#901)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-22 17:20:56 +00:00
renovate[bot] af5403125a
chore(deps): update dependency org.apache.maven.plugins:maven-jar-plugin to v3.4.1 (#899)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-20 09:02:28 +00:00
renovate[bot] b446fdc6f6
chore(deps): update dependency org.apache.maven.plugins:maven-gpg-plugin to v3.2.4 (#898)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-19 16:40:19 +00:00
renovate[bot] d7f074d79b
fix(deps): update dependency io.cucumber:cucumber-bom to v7.17.0 (#897)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-19 06:07:44 +00:00
renovate[bot] 21b2e9bb3b
chore(deps): update actions/checkout digest to 1d96c77 (#896)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-19 03:32:48 +00:00
renovate[bot] d3ae4259e5
chore(deps): update github/codeql-action digest to 82edfe2 (#895)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-17 16:45:15 +00:00
renovate[bot] 7e24154390
chore(deps): update github/codeql-action digest to c4fb451 (#894)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-17 00:40:54 +00:00
renovate[bot] 9e6ba1da33
chore(deps): update github/codeql-action digest to b8e2556 (#893)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-16 12:46:37 +00:00
renovate[bot] dcc698951c
chore(deps): update github/codeql-action digest to 24b71bd (#892)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-15 20:08:43 +00:00
renovate[bot] be948e710c
chore(deps): update github/codeql-action digest to 2b2cee5 (#891)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-15 13:49:47 +00:00
renovate[bot] b8de9e8de2
chore(deps): update dependency org.apache.maven.plugins:maven-jar-plugin to v3.4.0 (#890)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-13 10:17:27 +00:00
renovate[bot] 4cdd738f36
chore(deps): update github/codeql-action digest to d30d1ca (#889)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-12 21:15:16 +00:00
renovate[bot] f524fd5c7d
fix(deps): update dependency org.slf4j:slf4j-api to v2.0.13 (#888)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-12 18:09:19 +00:00
renovate[bot] 2c37cd593c
chore(deps): update dependency org.apache.maven.plugins:maven-gpg-plugin to v3.2.3 (#887)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-11 10:56:22 +00:00
renovate[bot] 0464fa64bf
chore(deps): update codecov/codecov-action action to v4.3.0 (#886)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-10 09:01:49 +00:00
renovate[bot] 8f00248e6b
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.8.4.0 (#885)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-10 05:17:45 +00:00
renovate[bot] 8d77aa8be2
chore(deps): update github/codeql-action digest to 24a0170 (#884)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-09 21:42:39 +00:00
renovate[bot] c1cd8f026d
chore(deps): update github/codeql-action digest to 21eac7c (#883)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-09 16:58:08 +00:00
renovate[bot] dd6d406d9c
chore(deps): update github/codeql-action digest to 24a95a0 (#882)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-08 21:53:01 +00:00
renovate[bot] 219afc1358
chore(deps): update dependency com.github.spotbugs:spotbugs to v4.8.4 (#881)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-08 18:38:14 +00:00
jarebudev 8dec14fbea
fix: shutdown method blocks until task executor shutdown completes (#873)
* shutdown method blocks until task executor shutdown completes

Signed-off-by: jarebudev <23311805+jarebudev@users.noreply.github.com>

* addressed sonar issue with not handling interrupt during waiting

Signed-off-by: jarebudev <23311805+jarebudev@users.noreply.github.com>

---------

Signed-off-by: jarebudev <23311805+jarebudev@users.noreply.github.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-04-06 07:47:42 -04:00
renovate[bot] dd671adfa3
chore(deps): update github/codeql-action digest to 1c270d0 (#880)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-05 19:05:48 +00:00
renovate[bot] 8a438c03c0
chore(deps): update dependency org.apache.maven.plugins:maven-source-plugin to v3.3.1 (#879)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-05 06:59:43 +00:00
renovate[bot] e1b563a671
chore(deps): update github/codeql-action digest to 7df281f (#878)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-05 05:12:20 +00:00
renovate[bot] 7e236b8038
chore(deps): update codecov/codecov-action action to v4.2.0 (#877)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-04 01:07:06 +00:00
renovate[bot] c731b22bae
chore(deps): update github/codeql-action digest to 3bd9c3e (#876)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-03 23:03:01 +00:00
renovate[bot] f97cdd79f5
chore(deps): update github/codeql-action digest to 99c9897 (#874)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-02 01:47:16 +00:00
Sviatoslav Sharaev de5aa6420f
feat: context propagation (#848)
Signed-off-by: Sviatoslav Sharaev <sviatoslav.sharaev@gmail.com>
Co-authored-by: Kavindu Dodanduwa <Kavindu-Dodan@users.noreply.github.com>
2024-03-28 21:17:22 -04:00
Kavindu Dodanduwa 46d04feb4b
chore: improve contrib guide (#863)
* improve contribution guide and remove deprecation

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>

* revert mockito bump

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>

* revert proposed change

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>

---------

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
2024-03-28 09:45:16 -04:00
renovate[bot] fb57fab7d3
chore(deps): update github/codeql-action digest to 84ba7fb (#871)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-27 16:07:17 +00:00
renovate[bot] 6a9a77817d
chore(deps): update codecov/codecov-action action to v4.1.1 (#870)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-26 19:05:50 +00:00
renovate[bot] bfe3b8d312
chore(deps): update dependency org.apache.maven.plugins:maven-gpg-plugin to v3.2.2 (#869)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-26 12:31:36 +00:00
renovate[bot] 145bf61504
chore(deps): update github/codeql-action digest to 956f09c (#868)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-25 21:48:09 +00:00
renovate[bot] 6765b31263
fix(deps): update dependency io.cucumber:cucumber-bom to v7.16.1 (#866)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-23 22:03:47 +00:00
renovate[bot] eb5c43d82c
chore(deps): update dependency org.cyclonedx:cyclonedx-maven-plugin to v2.8.0 (#864)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-23 16:40:39 +00:00
github-actions[bot] 4bedb5a402
chore(main): release 1.7.6 (#847)
* chore(main): release 1.7.6

* Update CHANGELOG.md

Signed-off-by: Kavindu Dodanduwa <Kavindu-Dodan@users.noreply.github.com>

---------

Signed-off-by: Kavindu Dodanduwa <Kavindu-Dodan@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Kavindu Dodanduwa <Kavindu-Dodan@users.noreply.github.com>
2024-03-22 22:02:51 +01:00
Adam Roberts d51cacbff6
fix: issue #859 (#860)
* fix: issue #859 Added failing tests

Signed-off-by: Adam Roberts <adam.roberts@collibra.com>

* fix: issue #859 Fixed the logic to allow the tests to pass by copying the passed in attributes

Signed-off-by: Adam Roberts <adam.roberts@collibra.com>

---------

Signed-off-by: Adam Roberts <adam.roberts@collibra.com>
2024-03-22 11:15:16 -07:00
renovate[bot] 675de140e4
chore(deps): update github/codeql-action digest to 3d81734 (#862)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-22 15:40:54 +00:00
Liran M 48a196c50d
fix: missing targeting key should return null (#849)
* missing targeting key should return null

Problem:
getTargetingKey of missing targeting key causing NullPointerException
Solution:
getTargetingKey of missing targeting key returns null

Signed-off-by: liran2000 <liran2000@gmail.com>

* add MutableContextTest for test coverage

Signed-off-by: liran2000 <liran2000@gmail.com>

---------

Signed-off-by: liran2000 <liran2000@gmail.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2024-03-22 10:41:56 -04:00
renovate[bot] 433f94a6ea
fix(deps): update dependency io.cucumber:cucumber-bom to v7.16.0 (#861)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-22 04:27:41 +00:00
renovate[bot] 83d7501551
chore(deps): update github/codeql-action digest to 09d4101 (#857)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-21 15:35:32 +00:00
renovate[bot] e1e15f4442
chore(deps): update github/codeql-action digest to 964f5e7 (#856)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-21 02:06:59 +00:00
renovate[bot] ee49872dd5
fix(deps): update dependency org.projectlombok:lombok to v1.18.32 (#854)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-20 03:11:53 +00:00
renovate[bot] 8b723232a1
chore(deps): update actions/cache digest to 0c45773 (#853)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-19 20:03:17 +00:00
renovate[bot] f4e17ccae6
chore(deps): update github/codeql-action digest to 294b6df (#851)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-19 02:04:53 +00:00
renovate[bot] d23e4d8916
chore(deps): update dependency org.apache.maven.plugins:maven-compiler-plugin to v3.13.0 (#852)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-18 22:24:33 +00:00
renovate[bot] b249bfb2ce
chore(deps): update dependency org.apache.maven.plugins:maven-gpg-plugin to v3.2.1 (#850)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-18 14:44:55 +00:00
renovate[bot] a763740e6b
chore(deps): update github/codeql-action digest to 1ecc277 (#846)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-15 21:13:47 +00:00
renovate[bot] 5b2813c659
chore(deps): update dependency org.awaitility:awaitility to v4.2.1 (#845)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-15 19:34:25 +00:00
github-actions[bot] 414c1f9744
chore(main): release 1.7.5 (#803)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-03-15 09:06:51 -04:00
renovate[bot] 25a387022c
chore(deps): update actions/setup-java digest to 99b8673 (#842)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-14 21:05:59 +00:00
renovate[bot] 1bdd2bd41e
chore(deps): update actions/checkout digest to cd7d8d6 (#841)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-14 19:08:30 +00:00
renovate[bot] d612c90838
chore(deps): update dependency com.google.guava:guava to v33.1.0-jre (#840)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-14 07:03:44 +00:00
renovate[bot] 4d13a134e7
chore(deps): update github/codeql-action digest to f055b5e (#839)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-14 01:26:31 +00:00
renovate[bot] 1fa8848354
chore(deps): update github/codeql-action digest to f195496 (#838)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-12 22:39:20 +00:00
renovate[bot] d33c54c142
chore(deps): update actions/setup-java digest to 5896cec (#837)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-12 18:17:27 +00:00
renovate[bot] f514960048
chore(deps): update actions/checkout digest to 8410ad0 (#836)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-12 16:33:08 +00:00
renovate[bot] 0d352eb128
chore(deps): update google-github-actions/release-please-action digest to a37ac6e (#835)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-12 01:41:48 +00:00
renovate[bot] b9eb22f7e6
chore(deps): update github/codeql-action digest to 69e120d (#834)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-11 21:50:42 +00:00
renovate[bot] 3e65d0b809
chore(deps): update dependency org.apache.maven.plugins:maven-gpg-plugin to v3.2.0 (#833)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-11 13:34:13 +00:00
renovate[bot] 6dea15c006
chore(deps): update github/codeql-action digest to 2fa207a (#832)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-09 00:40:01 +00:00
renovate[bot] c720334508
chore(deps): update actions/setup-java digest to 80ae3c2 (#831)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-08 22:13:32 +00:00
renovate[bot] 0458328c29
chore(deps): update github/codeql-action digest to 83a02f7 (#830)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-06 16:47:17 +00:00
renovate[bot] 9028fb88de
chore(deps): update actions/checkout digest to 8eb1f6a (#829)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-05 22:59:22 +00:00
renovate[bot] cc0a9b762b
chore(deps): update github/codeql-action digest to 5fa9b09 (#828)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-05 01:46:23 +00:00
renovate[bot] 11eb151b0c
chore(deps): update actions/cache digest to ab5e6d0 (#827)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-29 22:39:28 +00:00
renovate[bot] 1a0f6ae120
chore(deps): update github/codeql-action digest to baf3361 (#826)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-29 19:40:43 +00:00
renovate[bot] 4628a9b3ba
chore(deps): update github/codeql-action digest to 7bde906 (#825)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-28 21:19:04 +00:00
renovate[bot] 4abb67aa15
chore(deps): update actions/setup-java digest to 9704b39 (#824)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-28 10:46:06 +00:00
renovate[bot] 11bb3118cc
chore(deps): update github/codeql-action digest to cc3808e (#823)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-27 15:54:36 +00:00
renovate[bot] 6b1a89ab63
chore(deps): update codecov/codecov-action action to v4.1.0 (#822)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-27 04:42:54 +00:00
renovate[bot] 138309bd8d
chore(deps): update github/codeql-action digest to 25d334f (#821)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-27 00:57:33 +00:00
renovate[bot] 69a32a5b1b
chore(deps): update dependency com.h3xstream.findsecbugs:findsecbugs-plugin to v1.13.0 (#820)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-26 10:36:14 +00:00
renovate[bot] 3ad36c94f7
chore(deps): update codecov/codecov-action action to v4.0.2 (#818)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-23 21:56:30 +00:00
renovate[bot] 0eb0c74551
chore(deps): update github/codeql-action digest to 905ae4a (#817)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-23 16:43:11 +00:00
renovate[bot] 26ac6c5675
chore(deps): update github/codeql-action digest to a74dcdb (#816)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-23 00:23:32 +00:00
renovate[bot] 4b930fa530
chore(deps): update actions/checkout digest to b32f140 (#815)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-22 19:26:44 +00:00
renovate[bot] 8e516097cf
chore(deps): update github/codeql-action digest to 908a883 (#814)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-22 16:16:40 +00:00
renovate[bot] c8e91853a1
chore(deps): update actions/checkout digest to 2650dbd (#813)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-22 13:33:48 +00:00
renovate[bot] 64ef789f04
chore(deps): update dependency org.codehaus.mojo:exec-maven-plugin to v3.2.0 (#812)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-22 04:23:24 +00:00
renovate[bot] f9e02dc941
chore(deps): update github/codeql-action digest to 982d934 (#811)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-21 19:02:01 +00:00
renovate[bot] 8e8286225e
chore(deps): update actions/checkout digest to aadec89 (#810)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-21 17:07:27 +00:00
renovate[bot] 12ed823253
chore(deps): update actions/checkout digest to 473055b (#809)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-20 19:44:35 +00:00
renovate[bot] ec66946a6f
chore(deps): update github/codeql-action digest to 592977e (#808)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-20 17:11:10 +00:00
renovate[bot] f5d134cb47
chore(deps): update github/codeql-action digest to 0ce9708 (#807)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-16 12:17:08 +00:00
renovate[bot] 0c3790b0dd
chore(deps): update github/codeql-action digest to 65b0987 (#806)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-15 16:47:47 +00:00
Kavindu Dodanduwa f7a9d57421
fix: improve targetingKey handling in the context (#805)
improve targeting key handling

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
2024-02-14 15:17:58 -08:00
renovate[bot] ef56006da7
chore(deps): update github/codeql-action digest to 1a41e55 (#804)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-14 22:08:43 +00:00
renovate[bot] b998db2253
chore(deps): update github/codeql-action digest to bc64d12 (#802)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-14 00:14:08 +00:00
github-actions[bot] 911464f336
chore(main): release 1.7.4 (#767)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-02-13 11:57:53 -05:00
Kavindu Dodanduwa 6c8657d520
chore: various improvements as suggested by sonar (#797)
* various improvements as suggested by sonar

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>

* revert clonable change

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>

---------

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
2024-02-13 08:39:45 -08:00
renovate[bot] 69f95b1bfd
chore(deps): update github/codeql-action digest to 4075abf (#800)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-12 21:42:30 +00:00
renovate[bot] 8c9aa707b8
chore(deps): update dependency com.google.guava:guava to v33 (#738)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-12 15:25:27 -05:00
renovate[bot] 0291a11d91
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.8.3.1 (#799)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-11 07:52:43 +00:00
renovate[bot] 77446c973e
chore(deps): update github/codeql-action digest to 3ab1d29 (#798)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-10 00:04:01 +00:00
renovate[bot] 51599474cd
chore(deps): update github/codeql-action digest to 1515e2b (#796)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-08 21:14:00 +00:00
Todd Baert da47b7f9c0
fix: setProviderAndWait must throw (#794)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2024-02-08 15:19:20 -05:00
renovate[bot] d5a0620f59
chore(deps): update github/codeql-action digest to 932a7d5 (#795)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-08 12:20:18 +00:00
renovate[bot] 302f1688b3
chore(deps): update github/codeql-action digest to cf7e9f2 (#793)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-06 16:24:54 +00:00
renovate[bot] 202e7dd82f
fix(deps): update dependency org.slf4j:slf4j-api to v2.0.12 (#792)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-06 04:36:42 +00:00
renovate[bot] 1374a88006
chore(deps): update dependency org.assertj:assertj-core to v3.25.3 (#791)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-05 03:27:20 +00:00
renovate[bot] 1fb67125ce
fix(deps): update junit5 monorepo (#790)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-04 13:15:19 +00:00
renovate[bot] 74352ba720
chore(deps): update github/codeql-action digest to 39cc02b (#789)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-03 08:15:01 +00:00
renovate[bot] 993c4ba67b
chore(deps): update github/codeql-action digest to 81eb6b2 (#788)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-02 12:20:54 +00:00
renovate[bot] 8d6e33f334
chore(deps): update codecov/codecov-action action to v4.0.1 (#787)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-02 01:21:58 +00:00
renovate[bot] 9c2cbe3d5d
chore(deps): update github/codeql-action digest to 483bef1 (#786)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-01 18:35:46 +00:00
renovate[bot] 8e9ff90985
chore(deps): update github/codeql-action digest to e345133 (#785)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-01 03:55:45 +00:00
renovate[bot] d2b380f9f4
chore(deps): update codecov/codecov-action action to v4 (#784)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-31 21:32:50 +00:00
renovate[bot] bab83aeaa9
chore(deps): update codecov/codecov-action action to v3.1.6 (#783)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-31 01:05:03 +00:00
renovate[bot] d8f77e6ce0
chore(deps): update github/codeql-action digest to eab49d7 (#781)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-30 18:12:28 +00:00
renovate[bot] fa5ae68e30
chore(deps): update github/codeql-action digest to 25f779c (#780)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-26 23:44:40 +00:00
renovate[bot] 2ccc8557fa
chore(deps): update codecov/codecov-action action to v3.1.5 (#779)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-26 00:19:28 +00:00
renovate[bot] ae511d09a3
chore(deps): update github/codeql-action digest to 1615032 (#778)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-25 18:04:20 +00:00
renovate[bot] 70a7abecc9
chore(deps): update dependency org.assertj:assertj-core to v3.25.2 (#777)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-24 21:37:55 +00:00
renovate[bot] 9d9ad85e1f
chore(deps): update github/codeql-action digest to bd67d8d (#776)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-24 18:41:11 +00:00
renovate[bot] 0f5ee6556a
chore(deps): update github/codeql-action digest to 65c7496 (#775)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-23 18:39:15 +00:00
renovate[bot] c028fa3c15
chore(deps): update github/codeql-action digest to 2eaf014 (#774)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-22 22:46:58 +00:00
renovate[bot] c894337c8e
chore(deps): update github/codeql-action digest to d0c8484 (#773)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-19 19:34:39 +00:00
renovate[bot] 4da6edd3b0
chore(deps): update actions/cache digest to a2ed59d (#772)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-17 21:53:51 +00:00
renovate[bot] 692653035a
chore(deps): update github/codeql-action digest to f65ecd0 (#771)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-17 04:06:44 +00:00
renovate[bot] 877fa07e5f
chore(deps): update actions/cache digest to 13aacd8 (#770)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-17 01:25:05 +00:00
renovate[bot] 1eba495ace
chore(deps): update github/codeql-action digest to 4d75a10 (#769)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-16 19:34:05 +00:00
renovate[bot] 27a9ac68f5
chore(deps): update dependency org.cyclonedx:cyclonedx-maven-plugin to v2.7.11 (#768)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-16 15:00:26 +00:00
renovate[bot] 92f8e9908c
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.8.3.0 (#766)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-15 08:34:26 +00:00
github-actions[bot] 74209fdeae
chore(main): release 1.7.3 (#734)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-01-13 13:20:08 -08:00
renovate[bot] dee4cff547
chore(deps): update github/codeql-action digest to 9653106 (#765)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-12 21:03:51 +00:00
renovate[bot] ccf00fc08d
chore(deps): update github/codeql-action digest to eb14aeb (#764)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-11 22:37:01 +00:00
renovate[bot] 8d7976cfa8
chore(deps): update actions/cache digest to e12d46a (#763)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-11 19:55:00 +00:00
renovate[bot] ce1db8cc48
chore(deps): update github/codeql-action digest to cd94990 (#762)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-11 03:23:38 +00:00
renovate[bot] dbe73654be
chore(deps): update github/codeql-action digest to 3b54300 (#761)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-10 22:27:37 +00:00
renovate[bot] 21a118da95
chore(deps): update dependency org.apache.maven.plugins:maven-failsafe-plugin to v3.2.5 (#760)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-10 20:03:17 +00:00
renovate[bot] 7d0dbf9cb5
chore(deps): update github/codeql-action digest to b8e349d (#759)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-10 10:10:00 +00:00
renovate[bot] f66f2d143a
chore(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.2.5 (#758)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-10 01:23:16 +00:00
Akira Fujiu 9851d4ba1c
chore: fix typo and indent in tutorial (#754)
Signed-off-by: Akira Fujiu <fujiuakira.1006@gmail.com>
2024-01-09 07:40:07 -05:00
renovate[bot] 01637f040c
chore(deps): update github/codeql-action digest to 3516b7f (#757)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-09 04:34:41 +00:00
renovate[bot] 8e4f18c45f
fix(deps): update dependency org.slf4j:slf4j-api to v2.0.11 (#756)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-09 02:17:22 +00:00
renovate[bot] 6caca62ac1
chore(deps): update github/codeql-action digest to e6a47e2 (#755)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-08 22:33:37 +00:00
renovate[bot] 1b6e160177
chore(deps): update github/codeql-action digest to 8516954 (#753)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-05 22:20:22 +00:00
renovate[bot] 137a2410d0
chore(deps): update github/codeql-action digest to 08ae9bf (#751)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-05 15:59:58 +00:00
renovate[bot] 82144eba96
chore(deps): update github/codeql-action digest to 216127f (#750)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-04 19:56:50 +00:00
renovate[bot] bf4a9d1857
chore(deps): update dependency org.assertj:assertj-core to v3.25.1 (#749)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-03 04:02:58 +00:00
renovate[bot] 19deb846c6
chore(deps): update github/codeql-action digest to e345646 (#748)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-02 22:19:55 +00:00
renovate[bot] 208a166038
chore(deps): update github/codeql-action digest to ee9b8ab (#747)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-02 15:28:32 +00:00
renovate[bot] 671c4a3868
chore(deps): update dependency org.assertj:assertj-core to v3.25.0 (#746)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-31 22:12:39 +00:00
renovate[bot] c641ba6f05
fix(deps): update dependency org.slf4j:slf4j-api to v2.0.10 (#745)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-29 01:59:37 +00:00
renovate[bot] 7c2c46e686
chore(deps): update github/codeql-action digest to 596b173 (#744)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-28 04:40:43 +00:00
renovate[bot] 82302776a5
chore(deps): update dependency org.apache.maven.plugins:maven-compiler-plugin to v3.12.1 (#743)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-24 16:12:09 +00:00
Giovanni Liva 36f5832727
perf: improve error handling (#739)
* perf: improve error handling

Signed-off-by: Giovanni Liva <giovanni.liva@dynatrace.com>

* add synchronized keyword

Signed-off-by: Giovanni Liva <giovanni.liva@dynatrace.com>

---------

Signed-off-by: Giovanni Liva <giovanni.liva@dynatrace.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2023-12-22 12:56:48 -05:00
renovate[bot] 99bd988f66
chore(deps): update github/codeql-action digest to 6f5223d (#742)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-22 08:00:42 +00:00
renovate[bot] 3d6d974661
chore(deps): update actions/setup-java digest to 7a445ee (#741)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-21 13:56:04 +00:00
renovate[bot] a67465ac7e
chore(deps): update github/codeql-action digest to 49812ec (#740)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-21 01:39:24 +00:00
renovate[bot] a8907b3a4f
chore(deps): update dependency org.apache.maven.plugins:maven-compiler-plugin to v3.12.0 (#736)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-19 06:04:12 +00:00
renovate[bot] 82f60cea88
chore(deps): update google-github-actions/release-please-action digest to cc61a07 (#737)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-19 04:34:34 +00:00
renovate[bot] 5dcc43687b
chore(deps): update github/codeql-action digest to 7e187e1 (#735)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-19 00:16:13 +00:00
renovate[bot] df6f8ad365
chore(deps): update actions/setup-java digest to 3232623 (#733)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-14 21:43:43 +00:00
github-actions[bot] 6b30f6e036
chore(main): release 1.7.2 (#723)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-14 09:40:43 -05:00
renovate[bot] 3fdb4c0be0
chore(deps): update google-github-actions/release-please-action digest to ba1c241 (#732)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-14 09:41:32 +00:00
renovate[bot] d2ba7f91a3
chore(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.2.3 (#730)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-13 21:31:36 +00:00
renovate[bot] 90a9d1799d
chore(deps): update github/codeql-action digest to 511f073 (#731)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-13 19:23:37 +00:00
renovate[bot] 39a3d2d461
chore(deps): update dependency org.apache.maven.plugins:maven-failsafe-plugin to v3.2.3 (#729)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-13 17:10:01 +00:00
renovate[bot] c204a03739
chore(deps): update dependency com.github.spotbugs:spotbugs to v4.8.3 (#728)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-13 14:14:28 +00:00
renovate[bot] a4db19b340
chore(deps): update github/codeql-action digest to b995212 (#727)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-13 00:05:31 +00:00
Kavindu Dodanduwa 3319e55870
fix: tolerate duplicate provider registrations (#725)
* fix provider mulitple regiration issue

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>

* fix lint

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>

* fix tests

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>

* improve test and add check for unused imports

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>

---------

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
2023-12-12 12:43:14 -08:00
renovate[bot] 07ea4c02cb
fix(deps): update dependency io.cucumber:cucumber-bom to v7.15.0 (#726)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-12 00:29:47 +00:00
renovate[bot] 449630a3d7
chore(deps): update github/codeql-action digest to fe23b5a (#724)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-11 22:30:54 +00:00
renovate[bot] 1fd11c4e5b
chore(deps): update google-github-actions/release-please-action digest to a2d8d68 (#721)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-08 00:23:28 +00:00
github-actions[bot] deeb13dc5d
chore(main): release 1.7.1 (#670)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-12-07 16:14:17 -05:00
Kavindu Dodanduwa 425621d441
chore: releases to release (#722)
releases to release

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
2023-12-07 16:04:20 -05:00
Todd Baert 63c8a9fb5d
chore: Update release-please-config.json
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-12-07 15:19:55 -05:00
Kavindu Dodanduwa ec9c6589b2
chore: attempt to fix rp workflow (#720)
attempt to fix rp workflow

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
2023-12-07 15:11:56 -05:00
renovate[bot] f4c20cccab
chore(deps): update github/codeql-action digest to 382a50a (#719)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-07 16:27:22 +00:00
renovate[bot] 462b3f23f1
chore(deps): update github/codeql-action digest to 3675be0 (#718)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-06 00:41:31 +00:00
renovate[bot] 9c6580d962
chore(deps): update google-github-actions/release-please-action digest to 18e07cc (#717)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-05 03:48:25 +00:00
renovate[bot] 1ff97bce03
chore(deps): update github/codeql-action digest to bc50092 (#716)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-05 01:03:33 +00:00
renovate[bot] 763d49e414
chore(deps): update github/codeql-action digest to a16ac98 (#715)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-04 16:26:39 +00:00
renovate[bot] 216bff583c
chore(deps): update amannn/action-semantic-pull-request digest to 67cbd7a (#714)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-04 12:46:50 +00:00
renovate[bot] 826b551a0d
chore(deps): update dependency org.apache.maven.plugins:maven-javadoc-plugin to v3.6.3 (#713)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-03 23:39:26 +00:00
renovate[bot] 2fb505808e
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.8.2.0 (#712)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-03 03:10:17 +00:00
renovate[bot] 759fb77e24
chore(deps): update google-github-actions/release-please-action digest to 6effe5c (#711)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 05:21:33 +00:00
renovate[bot] bd9a37fa84
chore(deps): update github/codeql-action digest to b929cca (#710)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-02 00:03:01 +00:00
renovate[bot] a66f644f79
chore(deps): update actions/setup-java digest to 16ef37f (#709)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-01 16:20:37 +00:00
renovate[bot] d09b5f1407
chore(deps): update google-github-actions/release-please-action digest to 546de4e (#708)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-12-01 00:48:54 +00:00
renovate[bot] 683307a6a1
chore(deps): update google-github-actions/release-please-action digest to c5182cc (#707)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-30 00:52:35 +00:00
renovate[bot] 41d3d44223
chore(deps): update actions/setup-java digest to 387ac29 (#706)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-29 20:26:39 +00:00
renovate[bot] 3598ee929d
chore(deps): update dependency com.github.spotbugs:spotbugs to v4.8.2 (#705)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-29 16:33:15 +00:00
renovate[bot] e8d800c800
chore(deps): update github/codeql-action digest to db40ac4 (#704)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-28 23:42:30 +00:00
renovate[bot] 898a5305d4
chore(deps): update github/codeql-action digest to 4712487 (#703)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-28 02:00:50 +00:00
renovate[bot] b4e8962c4d
fix(deps): update dependency io.cucumber:cucumber-bom to v7.14.1 (#702)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-25 22:12:25 +00:00
renovate[bot] 56d9933227
chore(deps): update github/codeql-action digest to 2da9ad5 (#701)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-23 15:26:51 +00:00
renovate[bot] 7cef6732ad
chore(deps): update actions/setup-java digest to 9eda6b5 (#700)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-22 19:36:41 +00:00
renovate[bot] 62576391fb
chore(deps): update github/codeql-action digest to 192ad9b (#699)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-22 15:56:10 +00:00
renovate[bot] dbbd4f7d4e
chore(deps): update github/codeql-action digest to 9f150ba (#698)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-21 03:05:57 +00:00
renovate[bot] bbb817736f
chore(deps): update dependency org.codehaus.mojo:exec-maven-plugin to v3.1.1 (#697)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-17 06:30:41 +00:00
renovate[bot] c9197d8f16
chore(deps): update github/codeql-action digest to 4b6aa0b (#696)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-16 17:05:13 +00:00
renovate[bot] 5c16534a21
chore(deps): update github/codeql-action digest to 0d0a53c (#695)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-16 00:44:01 +00:00
renovate[bot] 31916e04f1
chore(deps): update github/codeql-action digest to ab6dd28 (#694)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-14 19:08:36 +00:00
renovate[bot] e2114eceda
chore(deps): update github/codeql-action digest to 8c8c7b4 (#693)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-13 21:55:30 +00:00
renovate[bot] 4403d1acb5
chore(deps): update github/codeql-action digest to e280207 (#692)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-13 16:14:25 +00:00
renovate[bot] a51ea0f07f
chore(deps): update dependency org.jacoco:jacoco-maven-plugin to v0.8.11 (#656)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-10 10:25:30 -08:00
renovate[bot] dfc4848786
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.8.1.0 (#690)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-07 19:36:37 +00:00
renovate[bot] c2cbac0645
chore(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.2.2 (#688)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-07 15:37:21 +00:00
renovate[bot] 7a03586318
chore(deps): update dependency org.apache.maven.plugins:maven-javadoc-plugin to v3.6.2 (#687)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-07 13:23:20 +00:00
renovate[bot] 4c48bc719f
chore(deps): update google-github-actions/release-please-action digest to 1ddb669 (#691)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-07 09:05:58 +00:00
renovate[bot] 2f81481b1c
chore(deps): update dependency com.github.spotbugs:spotbugs to v4.8.1 (#689)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-07 07:35:35 +00:00
renovate[bot] 2b99b6cdbf
chore(deps): update dependency org.apache.maven.plugins:maven-failsafe-plugin to v3.2.2 (#686)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-07 04:15:07 +00:00
renovate[bot] 6efeb39df2
chore(deps): update google-github-actions/release-please-action digest to db8f2c6 (#685)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-07 00:23:18 +00:00
renovate[bot] 256d115657
fix(deps): update junit5 monorepo (#684)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-05 21:03:22 +00:00
renovate[bot] a8f2566782
chore(deps): update amannn/action-semantic-pull-request digest to 95af3b9 (#682)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-03 14:15:37 +00:00
renovate[bot] a01c728c0c
chore(deps): update dependency org.apache.maven.plugins:maven-pmd-plugin to v3.21.2 (#681)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-03 03:43:37 +00:00
renovate[bot] 35389b9545
chore(deps): update google-github-actions/release-please-action digest to 9108012 (#680)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-03 00:40:51 +00:00
renovate[bot] 36ab1e2763
chore(deps): update github/codeql-action digest to 137a1e0 (#679)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-02 18:32:36 +00:00
renovate[bot] 6fbf7ba123
chore(deps): update google-github-actions/release-please-action digest to c18751a (#678)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-02 04:56:45 +00:00
renovate[bot] dd7300a4ea
chore(deps): update google-github-actions/release-please-action digest to c3f4481 (#677)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-11-01 21:38:30 +00:00
Michael Beemer 9bbf135e96
chore: update spec release link
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-10-31 15:23:05 -04:00
renovate[bot] 26b2382231
chore(deps): update github/codeql-action digest to c73d8a6 (#676)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-30 21:14:29 +00:00
renovate[bot] a22673614f
chore(deps): update github/codeql-action digest to df32e39 (#675)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-30 15:26:40 +00:00
renovate[bot] fd283ba8ee
chore(deps): update dependency org.cyclonedx:cyclonedx-maven-plugin to v2.7.10 (#674)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-30 03:08:19 +00:00
renovate[bot] 7f66afa8e6
chore(deps): update github/codeql-action digest to a3795eb (#673)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-27 15:23:01 +00:00
renovate[bot] b8c3aa18f8
chore(deps): update github/codeql-action digest to c7abe9c (#672)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-26 21:37:02 +00:00
renovate[bot] f845d1ca55
chore(deps): update github/codeql-action digest to 4888104 (#671)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-26 16:29:19 +00:00
renovate[bot] 4133cfd628
chore(deps): update github/codeql-action digest to edb8265 (#669)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-25 19:48:33 +00:00
github-actions[bot] 4d5794e5d8
chore(main): release 1.7.0 (#606)
* chore(main): release 1.7.0

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-24 15:32:10 -04:00
Todd Baert 3ab330a759
fix: null handling with Structure, Value (#663)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: Giovanni Liva <giovanni.liva@dynatrace.com>
2023-10-24 14:46:26 -04:00
renovate[bot] 75ff31e354
chore(deps): update dependency org.apache.maven.plugins:maven-checkstyle-plugin to v3.3.1 (#668)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-24 14:15:13 +00:00
renovate[bot] 9dc2cb4e05
chore(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.2.1 (#667)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-24 08:05:33 +00:00
renovate[bot] 72f168b97c
chore(deps): update dependency org.apache.maven.plugins:maven-failsafe-plugin to v3.2.1 (#666)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-24 03:42:09 +00:00
renovate[bot] 2554026e58
chore(deps): update dependency org.apache.maven.plugins:maven-dependency-plugin to v3.6.1 (#665)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-24 01:13:55 +00:00
renovate[bot] f838369217
chore(deps): update github/codeql-action digest to 9734ecd (#664)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-23 22:46:05 +00:00
Todd Baert fe5a20f2c3
feat: implement spec 0.7.0 changes (#655)
* feat: implement spec 0.7.0 changes

* run any event handler immediately if the provider is in the associated state, not just ready
* add providerName to event details
* add STALE provider state
* update/add associated tests
* also fixed spec/test associations mismatches from previous changes

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: Thiyagu GK <thiyagu103@gmail.com>
2023-10-23 10:04:52 -04:00
renovate[bot] fb4d369615
chore(deps): update github/codeql-action digest to a291b7c (#662)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-20 19:28:34 +00:00
renovate[bot] 799a5bae5b
chore(deps): update github/codeql-action digest to 6347027 (#661)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-19 22:27:25 +00:00
renovate[bot] c625721132
chore(deps): update github/codeql-action digest to 4a368f6 (#660)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-19 03:35:57 +00:00
renovate[bot] 7bd35c1069
chore(deps): update github/codeql-action digest to 77bbb99 (#659)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-18 04:09:35 +00:00
renovate[bot] a0190b4311
chore(deps): update actions/checkout digest to b4ffde6 (#658)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-17 21:43:56 +00:00
renovate[bot] ed9ffb307b
chore(deps): update actions/setup-java digest to 78078da (#657)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-17 14:49:43 +00:00
renovate[bot] 1a7f7de6e4
chore(deps): update github/codeql-action digest to d859d17 (#654)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-13 20:23:45 +00:00
renovate[bot] b9312cfd43
chore(deps): update actions/checkout digest to 8530928 (#653)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-13 18:38:27 +00:00
renovate[bot] 39a2c18b2e
chore(deps): update github/codeql-action digest to 82ba90b (#651)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-12 21:29:02 +00:00
Todd Baert 8c595b0227
fix: RejectedExecutionException on shutdown (#652)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-10-12 16:15:48 -04:00
renovate[bot] b77e44e983
chore(deps): update github/codeql-action digest to 8a2cbab (#649)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-11 15:17:00 +00:00
renovate[bot] 8b5d8a5f31
chore(deps): update dependency com.google.guava:guava to v32.1.3-jre (#648)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-11 03:11:27 +00:00
renovate[bot] 3a1d13842e
chore(deps): update github/codeql-action digest to a67b110 (#645)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-10 21:23:27 +00:00
renovate[bot] 8eff8d9eff
chore(deps): update actions/checkout digest to 7cdaf2f (#646)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-10 18:37:14 +00:00
renovate[bot] ed415a7fcf
chore(deps): update github/codeql-action digest to 4ab9237 (#644)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-09 16:33:22 +00:00
renovate[bot] 5737439269
chore(deps): update github/codeql-action digest to 0d5c2e0 (#643)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-07 03:46:28 +00:00
renovate[bot] c1dec9e6c5
chore(deps): update github/codeql-action digest to 3f7850a (#642)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-06 00:16:24 +00:00
renovate[bot] 15dae81665
chore(deps): update github/codeql-action digest to 3dd4ad8 (#641)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-04 04:21:29 +00:00
renovate[bot] e99f7c44f7
chore(deps): update github/codeql-action digest to b686e07 (#640)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-03 21:59:07 +00:00
renovate[bot] 5d35c9dcf2
chore(deps): update github/codeql-action digest to 90f8ed1 (#638)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-03 03:54:40 +00:00
renovate[bot] c2da0b1631
chore(deps): update google-github-actions/release-please-action digest to 2921787 (#639)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-10-03 00:33:05 +00:00
renovate[bot] 899191a171
chore(deps): update github/codeql-action digest to a370ce3 (#637)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-29 05:12:24 +00:00
renovate[bot] 1fb173db66
chore(deps): update google-github-actions/release-please-action digest to 4c5670f (#636)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-28 21:44:10 +00:00
renovate[bot] b6d4e7eec0
chore(deps): update github/codeql-action digest to e7a6fa9 (#635)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-28 00:03:50 +00:00
renovate[bot] a671984dbd
chore(deps): update github/codeql-action digest to 2cc1651 (#634)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-27 19:48:13 +00:00
renovate[bot] ab185168bb
chore(deps): update github/codeql-action digest to 27cb1e1 (#633)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-26 21:54:50 +00:00
renovate[bot] ac784779ce
chore(deps): update github/codeql-action digest to 650a85e (#632)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-25 18:39:27 +00:00
renovate[bot] f86899b108
chore(deps): update amannn/action-semantic-pull-request digest to 47b15d5 (#631)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-25 15:14:57 +00:00
renovate[bot] d5a9867365
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.7.3.6 (#630)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-25 06:23:52 +00:00
renovate[bot] ead77c113c
chore(deps): update github/codeql-action digest to 3078f51 (#629)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-23 00:44:44 +00:00
renovate[bot] f819ead577
chore(deps): update actions/checkout digest to 8ade135 (#628)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-22 22:36:05 +00:00
renovate[bot] 59a792f836
chore(deps): update github/codeql-action digest to 49aaa9a (#627)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-21 18:59:24 +00:00
renovate[bot] 059572a3d8
chore(deps): update actions/setup-java digest to 0ab4596 (#626)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-20 16:55:19 +00:00
renovate[bot] 23bb4974aa
fix(deps): update dependency org.projectlombok:lombok to v1.18.30 (#625)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-20 06:31:14 +00:00
renovate[bot] 9684687c2d
chore(deps): update github/codeql-action digest to 8e0b1c7 (#624)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-20 00:29:08 +00:00
renovate[bot] 210a9dcc06
chore(deps): update github/codeql-action digest to 01b8760 (#623)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-19 15:54:51 +00:00
renovate[bot] a0342b7e20
chore(deps): update github/codeql-action digest to dd1128f (#622)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-19 01:00:02 +00:00
renovate[bot] 7e100de6d6
chore(deps): update github/codeql-action digest to 4254f3a (#621)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-18 14:15:50 +00:00
renovate[bot] 59c1c277aa
chore(deps): update dependency org.apache.maven.plugins:maven-javadoc-plugin to v3.6.0 (#620)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-16 00:06:30 +00:00
renovate[bot] ee8a411026
chore(deps): update github/codeql-action digest to c459726 (#619)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-15 21:23:12 +00:00
renovate[bot] 514d463245
chore(deps): update github/codeql-action digest to f3051ed (#618)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-15 16:26:48 +00:00
renovate[bot] f887fe8656
chore(deps): update github/codeql-action digest to 5f18c9a (#617)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-14 21:52:03 +00:00
Yash 818131b77e
docs: document setProviderAndWait in README (#610)
* Update setProviderAndWait in README.md

Signed-off-by: Yash <93548927+code4Y@users.noreply.github.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2023-09-14 11:35:40 -04:00
Todd Baert bdddeb19b2
chore: disable action pinning, revert codecov (#616)
* chore: disable action pinning

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-09-14 11:22:02 -04:00
renovate[bot] 41e9ebb818
chore(deps): update github/codeql-action digest to e982de4 (#615)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-14 15:12:44 +00:00
renovate[bot] f0734f7c91
chore(deps): update codecov/codecov-action digest to b65fbdc (#614)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-14 05:18:49 +00:00
renovate[bot] 7a7c7e868f
chore(deps): update github/codeql-action digest to c6c77c8 (#613)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-13 23:11:52 +00:00
renovate[bot] 27fbe4521c
chore(deps): update github/codeql-action digest to 8efd40b (#612)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-13 16:17:49 -04:00
renovate[bot] c05609ae4c
chore(deps): update codecov/codecov-action digest to c4cf8a4 (#611)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-13 18:28:32 +00:00
renovate[bot] af55f21687
chore(deps): update codecov/codecov-action digest to c9e4b73 (#609)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-13 14:23:14 +00:00
renovate[bot] 29efc6c62f
chore(deps): update codecov/codecov-action digest to c9e0f0b (#608)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-13 02:24:26 +00:00
David Hirsch 6fd752d59d
docs: Update README.md (#604)
Signed-off-by: David Hirsch <david.hirsch@dynatrace.com>
2023-09-12 16:10:31 -04:00
renovate[bot] fd774e3547
chore(deps): update github/codeql-action digest to 6a6a824 (#607)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-12 18:53:23 +00:00
renovate[bot] 692c368d74
chore(deps): update google-github-actions/release-please-action digest to 48f9873 (#605)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-12 02:17:43 +00:00
github-actions[bot] 693b0ba4b2
chore(main): release 1.6.1 (#588)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-09-11 08:29:29 -07:00
renovate[bot] 68f97c6c08
chore(deps): update github/codeql-action digest to 43750fe (#597)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-09 19:18:10 +00:00
renovate[bot] 5fd86b6444
fix(deps): update dependency io.cucumber:cucumber-bom to v7.14.0 (#602)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-09 15:53:20 +00:00
renovate[bot] c2d2e0dedd
chore(deps): update codecov/codecov-action digest to 398b9de (#598)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-08 23:56:33 +00:00
Kavindu Dodanduwa c66b99579f
fix: make executor threads deamon (#601)
* make executor threads deamon

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>

* unify annotation usage

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>

---------

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
2023-09-08 11:54:01 -07:00
renovate[bot] 4c686c9623
chore(deps): update actions/cache digest to 704facf (#596)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-08 00:42:29 +00:00
renovate[bot] 1441c2c12e
chore(deps): update github/codeql-action digest to 4764dce (#594)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-07 21:35:00 +00:00
Liran M d063bf292c
fix: NPE on named provider init/shutdown (#595)
* fix NPE on named provider init
* add condition for not calling shutdown on null old provider

Signed-off-by: liran2000 <liran2000@gmail.com>
2023-09-07 16:11:58 -04:00
renovate[bot] a2e4894807
chore(deps): update codecov/codecov-action digest to a08d532 (#593)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-07 01:28:02 +00:00
renovate[bot] 1ad0129a79
chore(deps): update codecov/codecov-action digest to 7811627 (#591)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-06 03:34:06 +00:00
renovate[bot] 2763c8f7a6
chore(deps): update github/codeql-action digest to 798e74c (#590)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-05 22:23:49 +00:00
renovate[bot] 1aea7843ba
chore(deps): update actions/checkout digest to 72f2cec (#589)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-05 18:31:41 +00:00
renovate[bot] 742ad0bc17
chore(deps): update actions/checkout digest to 3df4ab1 (#587)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-04 16:30:28 +00:00
github-actions[bot] e92cfda3a9
chore(main): release 1.6.0 (#565)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-09-04 07:56:29 -07:00
renovate[bot] 84f72ac70d
fix(deps): update dependency org.slf4j:slf4j-api to v2.0.9 (#586)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-03 23:20:21 +00:00
renovate[bot] 9ae440786f
chore(deps): update actions/checkout digest to 8b5e8b7 (#585)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-09-01 23:25:23 +00:00
renovate[bot] 91f7552745
chore(deps): update github/codeql-action digest to 07d42ec (#584)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-31 16:26:58 +00:00
renovate[bot] 8a38d12360
chore(deps): update actions/setup-java digest to 4075bfc (#583)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-31 07:03:37 +00:00
renovate[bot] a4113c6308
chore(deps): update github/codeql-action digest to c5acfe3 (#582)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-30 00:54:53 +00:00
renovate[bot] 30942afe84
chore(deps): update codecov/codecov-action digest to 04adceb (#581)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-29 22:31:07 +00:00
renovate[bot] 816950a895
chore(deps): update actions/checkout digest to 97a652b (#580)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-29 20:13:30 +00:00
renovate[bot] 2a0da511a7
chore(deps): update github/codeql-action digest to 8ecc33d (#579)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-29 15:36:27 +00:00
renovate[bot] 3142c43c05
chore(deps): update github/codeql-action digest to b88b550 (#578)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-28 23:22:21 +00:00
Liran M 506e89fd34
feat: add method to set provider and block during init (#563)
* feat: spec 1.1.8 - setProviderAndWait

The API SHOULD provide functions to set a provider and wait for the initialize function to return or throw

Signed-off-by: liran2000 <liran2000@gmail.com>

* remove method overloading from package private class

Signed-off-by: liran2000 <liran2000@gmail.com>

* add test case for spec 2.4.5

Signed-off-by: liran2000 <liran2000@gmail.com>

* minor updates

Signed-off-by: liran2000 <liran2000@gmail.com>

---------

Signed-off-by: liran2000 <liran2000@gmail.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-08-28 15:43:59 -04:00
renovate[bot] 7b1eb1c035
chore(deps): update github/codeql-action digest to 1009124 (#576)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-25 23:17:59 +00:00
renovate[bot] 300c5054b9
chore(deps): update codecov/codecov-action digest to 6991c70 (#575)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-25 16:14:55 -04:00
renovate[bot] dffa593440
chore(deps): update github/codeql-action digest to ff9cb43 (#574)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-25 00:53:23 +00:00
renovate[bot] 49e49cc9e4
chore(deps): update codecov/codecov-action digest to de1b515 (#573)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-24 22:38:07 +00:00
renovate[bot] 46bbdccf0f
chore(deps): update actions/checkout digest to f43a0e5 (#572)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-24 19:57:34 +00:00
renovate[bot] e260022cf5
chore(deps): update google-github-actions/release-please-action digest to 01b3219 (#571)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-24 00:22:03 +00:00
renovate[bot] 5d4230f0fd
chore(deps): update codecov/codecov-action digest to 8ccb892 (#570)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-23 22:49:40 +00:00
renovate[bot] e423726254
chore(deps): update github/codeql-action digest to 9a53fd0 (#569)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-23 18:19:38 +00:00
renovate[bot] 666f784c2e
chore(deps): update codecov/codecov-action digest to c17956f (#568)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-23 02:01:49 +00:00
renovate[bot] 9e146330df
chore(deps): update github/codeql-action digest to 14877a1 (#567)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-21 23:04:52 +00:00
renovate[bot] 04adc3eb4d
chore(deps): update github/codeql-action digest to e426271 (#566)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-18 21:15:46 +00:00
renovate[bot] adfb58764a
chore(deps): update actions/checkout digest to 7739b9b (#564)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-17 00:09:41 +00:00
github-actions[bot] 703551f54c
chore(main): release 1.5.0 (#558)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-16 16:19:01 -04:00
renovate[bot] 4a4d81367b
chore(deps): update actions/setup-java digest to 5b86b67 (#562)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-16 19:15:57 +00:00
Todd Baert 3496366ae8
docs: update README to be auto-included in openfeature.dev (#560)
* chore: update README to be auto-included in openfeatre.dev
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: Kavindu Dodanduwa <Kavindu-Dodan@users.noreply.github.com>
2023-08-16 12:44:39 -04:00
Todd Baert 1f28921fec
chore: fix jacoco coverage minimum, throw in memory provider (#561)
chore: fix codecov, throw in memory provider

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-08-16 12:37:21 -04:00
Todd Baert 94a5a869d8 chore: fix e2e profile
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-08-15 15:20:22 -04:00
Liran M a741568762
feat: In-memory provider for e2e testing and minimal usage (#546)
* Adds InMemoryProvider to enable simple testing and basic usage

Signed-off-by: liran2000 <liran2000@gmail.com>
Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
2023-08-15 15:04:55 -04:00
renovate[bot] 6c52ee464f
chore(deps): update github/codeql-action digest to e683046 (#559)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-15 01:33:46 +00:00
renovate[bot] 350196c688
chore(deps): update github/codeql-action digest to 3ecf990 (#557)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-14 18:46:39 +00:00
github-actions[bot] b17a20e43f
chore(main): release 1.4.3 (#554)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-11 10:55:35 -07:00
Kavindu Dodanduwa fb42a92e9b
fix: ability to set provider after shutdown (#556)
* fix shutdown

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>

* Grammer fix for code comment 

Signed-off-by: Kavindu Dodanduwa <Kavindu-Dodan@users.noreply.github.com>

---------

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
Signed-off-by: Kavindu Dodanduwa <Kavindu-Dodan@users.noreply.github.com>
2023-08-11 13:48:14 -04:00
renovate[bot] a6eabc391d
chore(deps): update github/codeql-action digest to 2160dd3 (#555)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-11 16:50:07 +00:00
renovate[bot] d8c64d91c4
chore(deps): update github/codeql-action digest to 2ec74e3 (#553)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-10 18:52:05 +00:00
github-actions[bot] 644afb09c1
chore(main): release 1.4.2 (#527)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-08-10 11:38:53 -07:00
renovate[bot] 4d04996571
chore(deps): update google/clusterfuzzlite digest to 884713a (#551)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-10 01:28:44 +00:00
renovate[bot] 6ce68de437
chore(deps): update github/codeql-action digest to 9e4932e (#550)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-09 22:15:51 +00:00
renovate[bot] a73083def4
chore(deps): update actions/cache digest to f7ebb81 (#549)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-09 19:06:33 +00:00
renovate[bot] 5985005dda
chore(deps): update github/codeql-action digest to 4e9f8a2 (#548)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-08 18:02:18 +00:00
renovate[bot] 0336c02eeb
chore(deps): update github/codeql-action digest to 878ae4a (#547)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-07 23:01:41 +00:00
renovate[bot] 9f03c0ea32
chore(deps): update github/codeql-action digest to 1f63aba (#544)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-04 21:35:32 +00:00
Todd Baert 37fd2be673
fix: getState now mandatory on EventProvider (#531)
* fix: getState mandatory on EventProvider

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: update test class

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* Update src/test/java/dev/openfeature/sdk/EventProviderTest.java

Co-authored-by: Giovanni Liva <giovanni.liva@dynatrace.com>
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

---------

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: Giovanni Liva <giovanni.liva@dynatrace.com>
2023-08-04 15:45:25 -04:00
Todd Baert 8789f90d33
chore: fix race with events tests (#545)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-08-04 15:31:39 -04:00
Todd Baert 4972291276
chore: add todos, fix submodule pull (#543)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-08-03 15:22:44 -07:00
renovate[bot] c545ed5680
chore(deps): update github/codeql-action digest to 2192e34 (#542)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-02 15:23:35 +00:00
renovate[bot] 0ecf7b5984
chore(deps): update github/codeql-action digest to 7b79062 (#541)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-01 22:51:41 +00:00
renovate[bot] 7d4981f429
chore(deps): update codecov/codecov-action digest to e1dd05c (#540)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-01 19:29:08 +00:00
renovate[bot] 18b4fc0958
chore(deps): update github/codeql-action digest to e7e35ba (#539)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-01 12:37:13 +00:00
renovate[bot] 0676f4d24b
chore(deps): update dependency com.google.guava:guava to v32.1.2-jre (#538)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-01 11:09:51 +00:00
renovate[bot] f0126043f2
chore(deps): update github/codeql-action digest to a6b0ced (#537)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-31 16:37:28 +00:00
renovate[bot] 90c931acd9
chore(deps): update actions/setup-java digest to b943a4e (#536)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-31 13:35:45 +00:00
renovate[bot] 323083d7e9
chore(deps): update github/codeql-action digest to 81ae676 (#534)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-28 18:32:43 +00:00
renovate[bot] fc034c3284
chore(deps): update actions/setup-java digest to c16064d (#533)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-27 15:50:20 +00:00
renovate[bot] 6ccefbb8bc
chore(deps): update github/codeql-action digest to 6276217 (#532)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-27 00:20:33 +00:00
renovate[bot] 5c4bc86139
chore(deps): update github/codeql-action digest to 055b396 (#530)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-26 16:12:52 +00:00
renovate[bot] b8194ec13e
chore(deps): update github/codeql-action digest to 1a48007 (#529)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-26 04:24:40 +00:00
renovate[bot] 3a8e262da4
chore(deps): update github/codeql-action digest to c57b27e (#528)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-25 21:50:12 +00:00
renovate[bot] 6590d84f6e
chore(deps): update github/codeql-action digest to 57a11be (#526)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-24 23:12:28 +00:00
github-actions[bot] 496c4d0332
chore(main): release 1.4.1 (#509)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-24 22:30:14 +02:00
renovate[bot] b208c23362
chore(deps): update github/codeql-action digest to 7b6664f (#525)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-24 15:11:48 +00:00
renovate[bot] a2ee70e8d6
fix(deps): update junit5 monorepo (#524)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-23 19:16:11 +00:00
renovate[bot] 965bb19410
chore(deps): update actions/setup-java digest to cd89f46 (#522)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-21 16:39:54 +00:00
renovate[bot] dd7d02466c
chore(deps): update google-github-actions/release-please-action digest to ca6063f (#521)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-20 18:07:35 +00:00
renovate[bot] d1596924f0
chore(deps): update github/codeql-action digest to ce84bed (#520)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-20 13:41:28 +00:00
renovate[bot] b4bae84bc1
chore(deps): update github/codeql-action digest to d0dd7d7 (#519)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-19 23:10:19 +00:00
renovate[bot] fe3be7df73
chore(deps): update github/codeql-action digest to 6ae46f7 (#518)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-18 18:25:41 +00:00
renovate[bot] 7993c360d6
chore(deps): update github/codeql-action digest to d2ed0a0 (#517)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-18 17:09:51 +00:00
renovate[bot] fd2262f058
chore(deps): update actions/setup-java digest to 4fb3975 (#516)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-18 14:39:44 +00:00
renovate[bot] ef199b94fd
chore(deps): update github/codeql-action digest to 942acab (#515)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-18 00:55:50 +00:00
renovate[bot] e9044af48e
chore(deps): update github/codeql-action digest to 262017a (#514)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-17 15:53:07 +00:00
Thomas Poignant 6253aee3b3
fix: Implement equals for the ImmutableMetadata object (#512) 2023-07-17 16:52:00 +02:00
renovate[bot] bbb4008b38
chore(deps): update github/codeql-action digest to 013a1d0 (#510)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-14 19:56:15 +00:00
renovate[bot] 4e1675d9c3
chore(deps): update github/codeql-action digest to a148c58 (#508)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-14 00:42:04 +00:00
github-actions[bot] 9a3a07f774
chore(main): release 1.4.0 (#364)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-07-13 15:52:03 -04:00
Todd Baert c115e96ae6
chore: update readme for events (#507)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-07-13 15:49:39 -04:00
renovate[bot] 40d1f0a1d5
chore(deps): update github/codeql-action digest to c552617 (#506)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-13 16:01:15 +00:00
Todd Baert bad5b0a7f5
feat: events (#476)
* feat: events

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: fix bad import, fix test

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: add more coverage of internal

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: remove unused imports

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: unsed imports

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: make inner static

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: more tests, run ready immediately

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: improve reliability of error tests

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* Update src/main/java/dev/openfeature/sdk/OpenFeatureAPI.java

Co-authored-by: Giovanni Liva <giovanni.liva@dynatrace.com>
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: review feedback, add comments

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: add provider repo tests, fitest warnings

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* Update src/main/java/dev/openfeature/sdk/OpenFeatureAPI.java

Co-authored-by: Kavindu Dodanduwa <Kavindu-Dodan@users.noreply.github.com>
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: shorten javadoc links, shutdown tasks, use methods refs

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: flaky test

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* Update src/main/java/dev/openfeature/sdk/OpenFeatureClient.java

Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: feedback from justin

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: improve javadoc

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* fixup: test race condition fixes

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

---------

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Co-authored-by: Giovanni Liva <giovanni.liva@dynatrace.com>
Co-authored-by: Kavindu Dodanduwa <Kavindu-Dodan@users.noreply.github.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
2023-07-12 09:22:16 -07:00
renovate[bot] 893d0da612
chore(deps): update github/codeql-action digest to 12aa0a6 (#505)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-12 12:04:19 +00:00
renovate[bot] 00c8120459
chore(deps): update github/codeql-action digest to 95a5fda (#504)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-11 00:59:17 +00:00
renovate[bot] 2d3b644896
chore(deps): update actions/setup-java digest to 75c6561 (#503)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-10 18:22:38 +00:00
renovate[bot] b0201c7d43
chore(deps): update github/codeql-action digest to 6a07b2a (#502)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-10 13:40:28 +00:00
renovate[bot] 4f6d7ff46d
chore(deps): update github/codeql-action digest to 85c77f1 (#500)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-07 18:49:35 +00:00
renovate[bot] da00304083
fix(deps): update dependency io.cucumber:cucumber-bom to v7.13.0 (#499)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-07 12:33:56 +00:00
renovate[bot] 10bee74d16
chore(deps): update github/codeql-action digest to 84c0579 (#498)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-06 20:05:33 +00:00
renovate[bot] 2f028f6990
chore(deps): update github/codeql-action digest to a2d725d (#497)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-06 13:28:48 +00:00
renovate[bot] 9ddc9f1cb2
chore(deps): update github/codeql-action digest to a42c0ca (#496)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-05 19:26:56 +00:00
renovate[bot] a7c7d42879
chore(deps): update dependency com.google.guava:guava to v32.1.1-jre (#494)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-03 16:18:36 +00:00
renovate[bot] a8e34100a0
chore(deps): update github/codeql-action digest to bcb460d (#495)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-07-03 13:02:50 +00:00
renovate[bot] 331d5110da
chore(deps): update github/codeql-action digest to 46a6823 (#493)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-30 20:50:33 +00:00
renovate[bot] 207a221d46
chore(deps): update dependency com.google.guava:guava to v32.1.0-jre (#492)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-30 01:36:12 +00:00
Todd Baert 693721e36c
feat: add empty constructors to data classes (#491)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-06-28 10:40:10 -04:00
renovate[bot] 8b9e050092
chore(deps): update amannn/action-semantic-pull-request digest to 00282d6 (#490)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-26 14:07:52 +00:00
renovate[bot] 7f01deda5b
chore(deps): update google-github-actions/release-please-action digest to 01f98cb (#489)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-23 22:26:14 +00:00
Michael Beemer 6cd208198c
chore: update copy and links on the readme (#488)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: Todd Baert <toddbaert@gmail.com>
2023-06-23 15:23:58 -04:00
renovate[bot] 6cd588b87a
chore(deps): update github/codeql-action digest to cff3d9e (#486)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-21 19:55:34 +00:00
renovate[bot] dac79f0bd5
chore(deps): update github/codeql-action digest to 8ba77ef (#485)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-20 21:50:17 +00:00
renovate[bot] c3528da702
chore(deps): update actions/setup-java digest to 1f2faad (#484)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-20 18:46:52 +00:00
renovate[bot] b8b927ef4a
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.7.3.5 (#482)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-20 05:46:22 +00:00
renovate[bot] ea54bff9cc
chore(deps): update github/codeql-action digest to c6dff34 (#481)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-19 21:41:06 +00:00
renovate[bot] bd3042ba0d
chore(deps): update github/codeql-action digest to de74ca6 (#480)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-19 15:18:09 +00:00
Todd Baert ecfeddf0f6
chore: rename flag metadata (#478)
Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
2023-06-16 13:53:31 -04:00
renovate[bot] 3501425f48
chore(deps): update github/codeql-action digest to 0ac1815 (#477)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-15 22:05:32 +00:00
renovate[bot] ec6d44ae89
chore(deps): update actions/setup-java digest to 45058d7 (#479)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-15 19:21:22 +00:00
renovate[bot] d309d16330
chore(deps): update github/codeql-action digest to b8f204c (#474)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-14 00:45:26 +00:00
renovate[bot] 6d456ca618
chore(deps): update actions/cache digest to 67b839e (#473)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-12 22:50:33 +00:00
renovate[bot] fa94c0e0dd
chore(deps): update github/codeql-action digest to e287d85 (#472)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-12 17:31:24 +00:00
renovate[bot] fe42073385
chore(deps): update actions/checkout digest to 96f5310 (#471)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-12 17:10:58 +00:00
Kavindu Dodanduwa 31f2148264
chore: seperate release plugins to a profile (#467)
seperate deploy plugins to a profile

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
2023-06-09 08:01:59 -07:00
Kavindu Dodanduwa 93dde1d259
chore: expose get value for metadata (#468)
expose get value for metadata

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
2023-06-09 07:57:08 -07:00
renovate[bot] 3946211c5d
chore(deps): update dependency com.google.guava:guava to v32.0.1-jre (#470)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-09 03:41:13 +00:00
renovate[bot] 89cedb9d2e
chore(deps): update actions/setup-java digest to 87c1c70 (#469)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-08 13:03:50 +00:00
Michael Beemer 56c1bbc820
ci: add codecov token (#466)
Setting a Codecov token helps avoid throttling issues.

https://github.com/codecov/codecov-action/issues/557#issuecomment-1216749652

Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-06-07 12:23:18 -04:00
renovate[bot] 5888aead97
chore(deps): update dependency com.google.guava:guava to v32 (#455)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-07 06:59:40 -07:00
renovate[bot] 6107e91be4
chore(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.1.2 (#465)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-07 04:57:26 +00:00
Kavindu Dodanduwa 3ed40a3887
feat: add flag metadata (#459)
Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
2023-06-06 21:44:49 -04:00
Lars Opitz 5f173ff860
feat: add initialize and shutdown behavior (#456)
Signed-off-by: Lars Opitz <Lars@Lars-Opitz.de>
Co-authored-by: Todd Baert <toddbaert@gmail.com>
2023-06-06 21:36:47 -04:00
renovate[bot] 24f092319d
chore(deps): update dependency org.apache.maven.plugins:maven-failsafe-plugin to v3.1.2 (#464)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-07 01:06:43 +00:00
renovate[bot] 736cf24cbf
chore(deps): update github/codeql-action digest to cdcdbb5 (#463)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-06 22:02:51 +00:00
renovate[bot] 7f9194231c
chore(deps): update github/codeql-action digest to 8b0f2cf (#462)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-05 22:03:20 +00:00
renovate[bot] c26b75593e
fix(deps): update dependency io.cucumber:cucumber-bom to v7.12.1 (#461)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-02 19:14:30 +00:00
renovate[bot] 0b1315eaaf
chore(deps): update github/codeql-action digest to 926a489 (#460)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-01 22:56:23 +00:00
renovate[bot] 401d7a8a5f
chore(deps): update github/codeql-action digest to 96f2840 (#458)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-31 22:46:18 +00:00
renovate[bot] e1a0432ae9
chore(deps): update github/codeql-action digest to 9d2dd7c (#457)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-31 15:19:24 +00:00
renovate[bot] cc155b354c
chore(deps): update github/codeql-action digest to 6bd8101 (#454)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-27 01:25:06 +00:00
renovate[bot] 1dddd68c42
chore(deps): update github/codeql-action digest to f8b1cb6 (#453)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-26 17:13:30 +00:00
renovate[bot] 58df782b76
chore(deps): update google-github-actions/release-please-action digest to 51ee8ae (#452)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-26 05:33:15 +00:00
renovate[bot] fa1e14451d
chore(deps): update github/codeql-action digest to 2d031a3 (#451)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-26 01:26:40 +00:00
renovate[bot] 79222e1cf7
chore(deps): update github/codeql-action digest to 5f061ca (#450)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-25 14:19:30 +00:00
renovate[bot] 8d675ca387
chore(deps): update github/codeql-action digest to 11ea309 (#447)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-25 07:35:01 +00:00
renovate[bot] dfb214c52f
fix(deps): update dependency org.projectlombok:lombok to v1.18.28 (#448)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-25 05:21:21 +00:00
renovate[bot] eb6f9e69ef
chore(deps): update dependency org.apache.maven.plugins:maven-dependency-plugin to v3.6.0 (#445)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-23 02:33:52 +00:00
renovate[bot] e393b64715
chore(deps): update github/codeql-action digest to 1245696 (#446)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-22 23:43:19 +00:00
renovate[bot] f9523ecd8b
chore(deps): update dependency org.apache.maven.plugins:maven-checkstyle-plugin to v3.3.0 (#444)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-22 18:37:20 +00:00
renovate[bot] 5388fa12b6
chore(deps): update dependency dev.openfeature.contrib.providers:flagd to v0.5.10 (#429)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-21 11:00:17 -07:00
renovate[bot] bcbaff8e4f
chore(deps): update dependency org.apache.maven.plugins:maven-source-plugin to v3.3.0 (#443)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-21 11:44:10 +00:00
Justin Abrahms d4c43d74bc
feat: Support mapping a client to a given provider. (#388)
* Support mapping a client to a given provider.

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* Add a few javadocs.

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* Special case the null client name

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* Add some missing test cases.

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* Moving to an object map unwraps the values.

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* Fix equality test.

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* Carry targeting key when copying over null object.

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* Test provider name, not object equality.

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* Client-based getProvider is now an overload; Use read lock, not write lock.

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* Update src/main/java/dev/openfeature/sdk/OpenFeatureAPI.java

Co-authored-by: Lars Opitz <lars@lars-opitz.de>
Signed-off-by: Justin Abrahms <justin@abrah.ms>

* Simplify locking logic around providers.

There's no such thing as "API without a provider set" anymore. We now default to NoOpProvider in the API (not client).

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* Add a few missing tests

Signed-off-by: Justin Abrahms <justin@abrah.ms>

---------

Signed-off-by: Justin Abrahms <justin@abrah.ms>
Co-authored-by: Lars Opitz <lars@lars-opitz.de>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-05-19 15:27:31 -07:00
renovate[bot] 1af8e966a4
chore(deps): update github/codeql-action digest to 6cfb483 (#439)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-18 17:42:57 +00:00
renovate[bot] c3e82e97dd
chore(deps): update dependency org.cyclonedx:cyclonedx-maven-plugin to v2.7.9 (#438)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-17 03:23:10 +00:00
renovate[bot] 468c42d4e3
chore(deps): update github/codeql-action digest to ca6b925 (#436)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-16 23:52:01 +00:00
renovate[bot] 88e7d6054f
chore(deps): update amannn/action-semantic-pull-request digest to 3bb5af3 (#435)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-16 15:18:40 +00:00
renovate[bot] 4d655900d9
chore(deps): update dependency org.apache.maven.plugins:maven-pmd-plugin to v3.21.0 (#434)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-16 07:34:59 +00:00
renovate[bot] 3ff9995a43
chore(deps): update codecov/codecov-action digest to eaaf4be (#433)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-16 02:58:55 +00:00
renovate[bot] aa495b2847
chore(deps): update dependency org.codehaus.mojo:build-helper-maven-plugin to v3.4.0 (#432)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-12 04:37:13 +00:00
renovate[bot] 106df4661d
chore(deps): update codecov/codecov-action digest to 49c20db (#431)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-12 00:11:40 +00:00
renovate[bot] 6405100b27
chore(deps): update github/codeql-action digest to 130884e (#430)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-11 19:55:18 +00:00
renovate[bot] 59d8a10ba3
chore(deps): update codecov/codecov-action digest to cf8e3e4 (#428)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-09 07:49:45 +00:00
renovate[bot] 20628a2305
chore(deps): update github/codeql-action digest to 95cfca7 (#427)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-09 00:49:52 +00:00
renovate[bot] 0ccf337384
chore(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.1.0 (#426)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-08 01:04:51 +00:00
renovate[bot] 839fddb927
chore(deps): update dependency org.apache.maven.plugins:maven-failsafe-plugin to v3.1.0 (#425)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-07 23:59:37 +00:00
renovate[bot] 64f79cd513
chore(deps): update dependency org.apache.maven.plugins:maven-gpg-plugin to v3.1.0 (#423)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-06 12:16:28 +00:00
renovate[bot] af3e3d60dc
chore(deps): update github/codeql-action digest to deb312c (#422)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-06 03:26:36 +00:00
renovate[bot] 7aade9a875
chore(deps): update github/codeql-action digest to 1e1aca8 (#421)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-05 00:30:58 +00:00
renovate[bot] 42b931776a
chore(deps): update github/codeql-action digest to 318bcc7 (#420)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-04 07:11:17 +00:00
renovate[bot] b7dd2fc5a2
chore(deps): update codecov/codecov-action digest to b4dfea7 (#419)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-03 20:36:58 +00:00
renovate[bot] 434da5a608
chore(deps): update dependency dev.openfeature.contrib.providers:flagd to v0.5.9 (#416)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-02 21:55:39 -07:00
Todd Baert a5c93aca0a
chore: rename integration tests e2e (#417)
* chore: rename integration tests e2e

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>

* Update pom.xml

Co-authored-by: Giovanni Liva <giovanni.liva@dynatrace.com>
Signed-off-by: Todd Baert <toddbaert@gmail.com>

---------

Signed-off-by: Todd Baert <todd.baert@dynatrace.com>
Signed-off-by: Todd Baert <toddbaert@gmail.com>
Co-authored-by: Giovanni Liva <giovanni.liva@dynatrace.com>
2023-05-03 04:36:22 +00:00
renovate[bot] 19415edb71
chore(deps): update codecov/codecov-action digest to 5bf2504 (#418)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-03 01:13:59 +00:00
renovate[bot] 0de764db19
chore(deps): update github/codeql-action digest to 8ca5570 (#415)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-02 02:22:38 +00:00
renovate[bot] 9d7d3d41f6
chore(deps): update codecov/codecov-action digest to 1dd0ce3 (#414)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-05-01 22:47:46 +00:00
renovate[bot] f0f5d28416
fix(deps): update dependency io.cucumber:cucumber-bom to v7.12.0 (#413)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-29 23:37:52 +00:00
renovate[bot] 854d0be0f4
fix(deps): update junit5 monorepo (#410)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-28 14:13:03 -04:00
renovate[bot] 5b10d399cb
chore(deps): update dependency org.jacoco:jacoco-maven-plugin to v0.8.10 (#407)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-28 14:06:33 -04:00
renovate[bot] be9d6523ff
chore(deps): update github/codeql-action digest to f31a31c (#412)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-28 03:55:44 +00:00
renovate[bot] 2df3205c74
chore(deps): update github/codeql-action digest to dcf71cf (#411)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-27 03:35:33 +00:00
renovate[bot] 5abe971bdb
chore(deps): update github/codeql-action digest to da583b0 (#409)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-26 08:09:03 +00:00
renovate[bot] c426e6646f
chore(deps): update dependency org.cyclonedx:cyclonedx-maven-plugin to v2.7.8 (#408)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-26 02:30:09 +00:00
renovate[bot] cd27e38f67
chore(deps): update google-github-actions/release-please-action digest to 8475937 (#406)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-25 11:59:23 +00:00
renovate[bot] a5f076b37c
chore(deps): update github/codeql-action digest to a9648ea (#405)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-25 06:07:59 +00:00
renovate[bot] 6898514fca
chore(deps): update github/codeql-action digest to c5f3f01 (#404)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-22 06:02:50 +00:00
renovate[bot] 311b73fe35
chore(deps): update dependency org.apache.maven.plugins:maven-checkstyle-plugin to v3.2.2 (#403)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-21 07:26:38 +00:00
renovate[bot] 212590e5e2
chore(deps): update codecov/codecov-action digest to 894ff02 (#402)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-21 02:33:20 +00:00
renovate[bot] c92cd2ccfe
chore(deps): update github/codeql-action digest to a8affb0 (#401)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-20 21:27:29 +00:00
renovate[bot] 427d5a6272
chore(deps): update codecov/codecov-action digest to 6757614 (#400)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-20 12:29:31 +00:00
renovate[bot] 30155712bc
chore(deps): update actions/checkout digest to f095bcc (#398)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-19 19:48:49 +00:00
renovate[bot] b55ed6cf74
chore(deps): update github/codeql-action digest to afdf30f (#397)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-19 01:46:49 +00:00
renovate[bot] a5eaf79cf9
chore(deps): update dependency org.cyclonedx:cyclonedx-maven-plugin to v2.7.7 (#396)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-18 03:01:24 +00:00
renovate[bot] 2ff65b8344
chore(deps): update github/codeql-action digest to 9a866ed (#395)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-18 00:32:17 +00:00
renovate[bot] 28e191d423
chore(deps): update github/codeql-action digest to be2b53b (#394)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-15 05:41:49 +00:00
renovate[bot] 43a75d080c
chore(deps): update actions/checkout digest to 47fbe2d (#393)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-15 01:13:12 +00:00
Michael Beemer 0f76349a50
update doc links 2023-04-14 16:40:26 -04:00
renovate[bot] 813c7e21ab
chore(deps): update github/codeql-action digest to dc04638 (#392)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-13 22:09:55 +00:00
renovate[bot] 9c98e83ed6
chore(deps): update actions/checkout digest to 8e5e7e5 (#391)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-13 10:38:27 -07:00
renovate[bot] 519c32a087
chore(deps): update github/codeql-action digest to d944b34 (#390)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-13 16:21:16 +00:00
renovate[bot] f3e65db54e
chore(deps): update actions/checkout digest to 83b7061 (#389)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-12 21:07:50 +00:00
renovate[bot] 702957c517
chore(deps): update google-github-actions/release-please-action digest to c078ea3 (#387)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-12 15:57:00 +00:00
renovate[bot] f1ecfac6aa
chore(deps): update github/codeql-action digest to ed6c499 (#386)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-12 08:26:45 +00:00
renovate[bot] 5072553166
chore(deps): update codecov/codecov-action digest to 40a12dc (#385)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-12 02:15:10 +00:00
renovate[bot] ade4878abc
chore(deps): update dependency org.jacoco:jacoco-maven-plugin to v0.8.9 (#374)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Kavindu Dodanduwa <Kavindu-Dodan@users.noreply.github.com>
2023-04-11 13:40:31 -07:00
Todd Baert f51d0201c6
chore: update readme using template (#382)
* chore: update readme using template

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* fixup: add complete API documentation

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* Update README.md

Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
Signed-off-by: Todd Baert <toddbaert@gmail.com>

* Update README.md

Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
Signed-off-by: Todd Baert <toddbaert@gmail.com>

---------

Signed-off-by: Todd Baert <toddbaert@gmail.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
2023-04-11 15:27:57 -04:00
renovate[bot] 22828d1d3f
chore(deps): update google-github-actions/release-please-action digest to f7edb9e (#384)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-11 13:59:29 +00:00
renovate[bot] a737c3a36b
chore(deps): update actions/setup-java digest to ddb82ce (#381)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-11 08:22:19 +00:00
renovate[bot] 037d61128e
chore(deps): update github/codeql-action digest to 98f7bbd (#383)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-11 03:01:43 +00:00
renovate[bot] ec3111f5d7
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.7.3.4 (#380)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-07 07:06:21 +00:00
renovate[bot] 9b77827796
chore(deps): update github/codeql-action digest to 988e1bc (#379)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-06 22:40:35 +00:00
renovate[bot] ae307892a5
chore(deps): update github/codeql-action digest to f32426b (#378)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-06 00:56:58 +00:00
renovate[bot] 5c335d4539
chore(deps): update github/codeql-action digest to 66aeadb (#377)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-05 15:59:03 +00:00
renovate[bot] 23c4c4cef9
chore(deps): update github/codeql-action digest to fa7cce4 (#376)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-05 07:54:38 +00:00
renovate[bot] bdb08d7af8
chore(deps): update actions/setup-java digest to 191ba8c (#375)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-04 20:30:10 +00:00
renovate[bot] 6a8c911287
chore(deps): update github/codeql-action digest to f0a422f (#373)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-04 05:32:55 +00:00
renovate[bot] dfa08b90e1
chore(deps): update codecov/codecov-action digest to 91e1847 (#372)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-03 16:53:59 -04:00
renovate[bot] 0ce5b43a81
chore(deps): update actions/setup-java digest to e42168c (#371)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-03 20:01:41 +00:00
renovate[bot] d7b3ca0513
chore(deps): update dependency org.cyclonedx:cyclonedx-maven-plugin to v2.7.6 (#370)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-01 03:08:44 +00:00
renovate[bot] 5e648f6332
chore(deps): update github/codeql-action digest to bb28e7e (#368)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-31 02:17:33 +00:00
renovate[bot] bac2af3033
chore(deps): update github/codeql-action digest to dc81ae3 (#367)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-30 01:41:45 +00:00
renovate[bot] 6d7c43d120
chore(deps): update google-github-actions/release-please-action digest to ee9822e (#366)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-29 18:59:31 +00:00
renovate[bot] 3ae2a541a1
chore(deps): update github/codeql-action digest to fff3a80 (#365)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-29 11:00:23 +00:00
renovate[bot] de9a928f93
chore(deps): update dependency dev.openfeature.contrib.providers:flagd to v0.5.8 (#360)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-28 15:09:30 -04:00
github-actions[bot] f5ceeb06b4
chore(main): release 1.3.1 (#331)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-03-28 13:33:51 -04:00
Adam Roberts cfd70863cc
fix: added an automatic module name (#362) (#363)
* fix: added an automatic module name (#362)

Signed-off-by: Adam Roberts <adam.roberts@collibra.com>

* derive module name

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>

---------

Signed-off-by: Adam Roberts <adam.roberts@collibra.com>
Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
Co-authored-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
2023-03-28 10:26:09 -07:00
renovate[bot] 996cbd853a
chore(deps): update github/codeql-action digest to f9c159f (#359)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-28 09:23:03 +00:00
renovate[bot] 5195f375f9
chore(deps): update codecov/codecov-action digest to cc7fb3f (#358)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-28 03:10:38 +00:00
renovate[bot] 5c6777f4b9
chore(deps): update dependency org.apache.maven.plugins:maven-failsafe-plugin to v3 (#332)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-24 22:11:38 -07:00
renovate[bot] 09b50536fb
chore(deps): update codecov/codecov-action digest to fee4896 (#357)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-24 12:43:58 -07:00
renovate[bot] 074066dfb3
chore(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3 (#333)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-24 11:53:08 -07:00
renovate[bot] ecc2ad2cb3
chore(deps): update actions/checkout digest to 8f4b7f8 (#356)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-24 17:06:53 +00:00
renovate[bot] c1262a2e0d
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.7.3.3 (#354)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-24 10:32:46 +00:00
renovate[bot] e4e9ecb16d
chore(deps): update dependency dev.openfeature.contrib.providers:flagd to v0.5.7 (#349)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-24 04:38:14 +00:00
renovate[bot] b26dd5833d
fix(deps): update dependency io.cucumber:cucumber-bom to v7.11.2 (#355)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-23 21:34:15 -07:00
renovate[bot] 8d22a64f04
chore(deps): update github/codeql-action digest to a21bb7f (#353)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-24 01:56:47 +00:00
Todd Baert 8079274cf9
chore: update CODEOWNERS
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2023-03-23 15:24:11 -04:00
renovate[bot] 3d0ba8bb9a
chore(deps): update codecov/codecov-action digest to ddd8c1b (#352)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-23 06:49:16 +00:00
renovate[bot] eac212d4ba
chore(deps): update github/codeql-action digest to 04f256d (#351)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-23 02:19:38 +00:00
Kavindu Dodanduwa d8e7d9e10c
fix: validate list content to be values (#350)
validate list content

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
2023-03-22 16:46:53 +00:00
renovate[bot] 77890303c3
chore(deps): update github/codeql-action digest to 760583e (#348)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-21 23:56:10 +00:00
renovate[bot] aec31b1a68
chore(deps): update amannn/action-semantic-pull-request digest to ff373f4 (#347)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-21 20:44:19 +00:00
renovate[bot] 9df00dd489
chore(deps): update actions/setup-java digest to 5ffc13f (#346)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-21 18:08:11 +00:00
renovate[bot] 66f995d550
chore(deps): update actions/cache digest to 04f198b (#345)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-21 15:09:58 +00:00
renovate[bot] d72b068559
chore(deps): update github/codeql-action digest to ebbe965 (#344)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-21 06:23:31 +00:00
renovate[bot] f6363e3d4b
fix(deps): update dependency org.slf4j:slf4j-api to v2.0.7 (#343)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-19 09:08:31 +00:00
renovate[bot] aee10c3a3d
chore(deps): update github/codeql-action digest to fb75ebd (#342)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-19 07:53:37 +00:00
renovate[bot] d3ef8927a2
chore(deps): update amannn/action-semantic-pull-request digest to c3cd5d1 (#341)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-19 05:25:04 +00:00
renovate[bot] 61a87cf408
chore(deps): update actions/cache digest to ea05037 (#340)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-19 02:23:32 +00:00
renovate[bot] dfff114b15
chore(deps): update google-github-actions/release-please-action digest to 9997fc9 (#338)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-19 01:57:03 +00:00
renovate[bot] 953b48041a
chore(deps): update github/codeql-action digest to d230601 (#336)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-16 05:12:38 +00:00
renovate[bot] fa613fcddc
chore(deps): update actions/setup-java digest to 669e072 (#335)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-16 02:17:23 +00:00
renovate[bot] c8d14dedb1
chore(deps): update actions/checkout digest to 24cb908 (#337)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-15 23:02:05 +00:00
renovate[bot] d4480382ca
chore(deps): update github/codeql-action digest to 433fe88 (#334)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-15 02:04:53 +00:00
renovate[bot] 33bf772158
chore(deps): update github/codeql-action digest to 19f00dc (#330)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-14 04:28:34 +00:00
renovate[bot] c7c9546a29
chore(deps): update actions/cache digest to 9c7b3e9 (#329)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-14 01:15:27 +00:00
github-actions[bot] f19d5d7083
chore(main): release 1.3.0 (#294)
* chore(main): release 1.3.0

* note breaking change

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>

---------

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
2023-03-13 19:54:29 +00:00
renovate[bot] c92c271f09
chore(deps): update github/codeql-action digest to 204eada (#328)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-12 18:42:37 +00:00
renovate[bot] cbd4618871
chore(deps): update codecov/codecov-action digest to 9b87723 (#327)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-11 04:21:37 +00:00
renovate[bot] 33ee57a862
chore(deps): update actions/setup-java digest to 888b400 (#326)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-10 17:36:31 +00:00
renovate[bot] 7753bfec07
chore(deps): update github/codeql-action digest to e12a2ec (#324)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-09 22:42:57 -08:00
renovate[bot] 0f34a95174
chore(deps): update codecov/codecov-action digest to 13d8b07 (#325)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-10 04:10:13 +00:00
renovate[bot] 71c5fc2c0f
chore(deps): update actions/setup-java digest to 0de5c66 (#322)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-10 00:20:12 +00:00
renovate[bot] c4d7b71f09
chore(deps): update actions/checkout digest to 27135e3 (#323)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-09 21:57:12 +00:00
renovate[bot] ec8f129ffc
chore(deps): update actions/cache digest to 940f3d7 (#321)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-09 18:13:28 +00:00
renovate[bot] 20a9da6194
chore(deps): update github/codeql-action digest to f13b180 (#319)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-09 01:48:59 +00:00
Michael Beemer cb18a099c5
chore: add changelog sections (#320)
Extend the changelog with more sections... and emojis!

Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-03-08 12:33:13 -08:00
apulbere 0a27a77fc1
fix: handling of double and integer (#316)
Signed-off-by: apulbere <apulbere@yahoo.com>
2023-03-08 08:49:05 -05:00
renovate[bot] 09824e7c52
chore(deps): update google-github-actions/release-please-action digest to e0b9d18 (#317)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-08 04:05:00 +00:00
renovate[bot] db114507da
chore(deps): update github/codeql-action digest to e4b846c (#318)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-08 02:08:17 +00:00
renovate[bot] 8ee4d89c0b
chore(deps): update github/codeql-action digest to 6ef6e50 (#314)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-07 10:59:18 +00:00
renovate[bot] 80fe25ae28
chore(deps): update google-github-actions/release-please-action digest to 57bb5dc (#315)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-03-07 07:31:10 +00:00
renovate[bot] 579f8ab750
chore(deps): update codecov/codecov-action digest to 4b062cb (#313)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-28 22:38:00 +00:00
renovate[bot] 7b79bc818a
chore(deps): update github/codeql-action digest to a589d40 (#312)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-28 03:28:59 +00:00
renovate[bot] 44443e4e54
chore(deps): update actions/cache digest to e0d6227 (#311)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-27 22:53:01 +00:00
renovate[bot] 1d731f6fa3
chore(deps): update dependency org.apache.maven.plugins:maven-compiler-plugin to v3.11.0 (#310)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-27 18:22:23 +00:00
renovate[bot] a3a9d0eafd
chore(deps): update github/codeql-action digest to 903be79 (#309)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-27 14:04:21 +00:00
renovate[bot] a8caae6e29
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.7.3.2 (#308)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-26 06:52:23 +00:00
renovate[bot] 69a1a8fad3
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.7.3.1 (#306)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-24 12:58:21 +00:00
renovate[bot] 883a4cd515
chore(deps): update github/codeql-action digest to 237a258 (#305)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-23 22:15:58 +00:00
renovate[bot] 259a749a5f
chore(deps): update codecov/codecov-action digest to ce0bcc6 (#304)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-23 20:01:16 +00:00
renovate[bot] 45d3c0fcc1
chore(deps): update actions/cache digest to 69d9d44 (#303)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-21 18:46:40 +00:00
renovate[bot] 59429ed55d
chore(deps): update github/codeql-action digest to 3dde1f3 (#302)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-18 06:10:40 +00:00
Ryan Lamb 464820d5da
fix: Do not throw null reference exception accessing a missing item. (#300)
Signed-off-by: Ryan Lamb <4955475+kinyoklion@users.noreply.github.com>
2023-02-16 12:20:51 -08:00
renovate[bot] 7459eaa028
chore(deps): update dependency org.cyclonedx:cyclonedx-maven-plugin to v2.7.5 (#301)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-16 07:49:14 +00:00
renovate[bot] 4296aa48bd
chore(deps): update dependency org.apache.maven.plugins:maven-javadoc-plugin to v3.5.0 (#299)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-15 17:04:49 +00:00
renovate[bot] 4098bc86e8
chore(deps): update actions/cache digest to 81b7281 (#298)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-14 16:04:07 +00:00
renovate[bot] 514a99e5ad
chore(deps): update google-github-actions/release-please-action digest to d3c71f9 (#297)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-14 11:28:33 +00:00
renovate[bot] 7a19ac84ce
chore(deps): update github/codeql-action digest to e00cd12 (#296)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-14 08:57:12 +00:00
renovate[bot] 1b72aeb0e0
chore(deps): update codecov/codecov-action digest to 83bb3d0 (#295)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-14 03:28:52 +00:00
renovate[bot] c9f5899128
chore(deps): update github/codeql-action digest to 89c5165 (#293)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-11 06:43:42 +00:00
renovate[bot] 237a0bcbba
chore(deps): update amannn/action-semantic-pull-request digest to b6bca70 (#292)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-11 02:23:08 +00:00
Thiyagu GK d78c99ce16
feat: remove the deprecated setTargetingKey method in EvaluationContext. (#290)
remove the deprecated setTargetingKey method in EvaluationContext.

Signed-off-by: thiyagu06 <thiyagu103@gmail.com>
2023-02-10 15:32:34 -05:00
github-actions[bot] 4102495dd2
chore(main): release 1.2.0 (#272)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
2023-02-10 20:20:04 +00:00
Justin Abrahms 07ecea1bf9
chore: Update slf4j (#284)
* Update slf4j

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>

* Move to a different log testing method

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>

* Fix logger in another place too

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>

---------

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>
2023-02-10 14:09:57 -05:00
renovate[bot] 24c237e228
chore(deps): update actions/cache digest to 6998d13 (#291)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-10 14:43:27 +00:00
renovate[bot] 7695883418
chore(deps): update github/codeql-action digest to 7ba5ed7 (#287)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-09 08:29:27 +00:00
renovate[bot] f41fe211bd
chore(deps): update codecov/codecov-action digest to 742000a (#288)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-09 04:48:08 +00:00
Javier Collado bd4e12e16f
fix: MutableContext and ImmutableContext merge are made recursive (#280)
MutableContext and ImmutableContext merge are made recursive

Signed-off-by: Javier Collado <javicv@gmail.com>
Co-authored-by: Thiyagu GK <thiyagu103@gmail.com>
Co-authored-by: Todd Baert <toddbaert@gmail.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-02-08 12:22:43 -05:00
renovate[bot] fe8698feb0
chore(deps): update actions/setup-java digest to ea15b3b (#285)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-08 11:38:01 -05:00
renovate[bot] ed2e963a2a
chore(deps): update github/codeql-action digest to 4369dda (#283)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-08 03:43:59 +00:00
renovate[bot] 258b60666d
chore(deps): update actions/setup-java digest to 3f07048 (#282)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-07 23:26:30 +00:00
renovate[bot] c004e757cc
chore(deps): update github/codeql-action digest to 9ab6aa6 (#281)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-07 05:35:34 +00:00
renovate[bot] e054d414e8
chore(deps): update github/codeql-action digest to b95df0b (#279)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-04 01:28:26 +00:00
Kavindu Dodanduwa 93499975d0
fix: improve error logs for evaluation failure (#276)
improve error logs for evaluation failure

Signed-off-by: Kavindu Dodanduwa <kavindudodanduwa@gmail.com>
2023-02-03 11:36:51 -05:00
renovate[bot] 648518d0e0
chore(deps): update actions/cache digest to 2b8105b (#278)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-03 12:23:50 +00:00
renovate[bot] aad036a011
fix(deps): update dependency org.projectlombok:lombok to v1.18.26 (#277)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-02-03 07:06:43 +00:00
renovate[bot] 8845242330
fix(deps): update dependency io.cucumber:cucumber-bom to v7.11.1 (#271)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-31 22:06:23 +00:00
renovate[bot] 8a3455cbc6
chore(deps): update actions/cache digest to 22d3da7 (#274)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-31 17:46:12 +00:00
renovate[bot] 036ac25ee3
chore(deps): update actions/setup-java digest to 9b86bbe (#273)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-31 13:11:06 +00:00
Thiyagu GK 6c14d87c2e
feat: added implementation of immutable evaluation context (#210)
added immutable context implementation

Signed-off-by: thiyagu06 <thiyagu103@gmail.com>
Co-authored-by: Todd Baert <toddbaert@gmail.com>
2023-01-30 23:29:50 -05:00
renovate[bot] 43aea3b505
chore(deps): update actions/cache digest to 627f0f4 (#269)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-30 18:21:24 +00:00
renovate[bot] b14094f9f0
chore(deps): update github/codeql-action digest to 0b2a40f (#268)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-27 18:34:03 +00:00
renovate[bot] eed5d64f63
chore(deps): update actions/cache digest to 8e3048d (#267)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-27 14:38:00 +00:00
Todd Baert 6cb3fe485b
chore: update test annotations, spec badge (#265)
Update the test annotations with new spec verbiage, and update the spec compliance badge.
The functional changes have already been merged/released.

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2023-01-26 18:52:58 +00:00
renovate[bot] 4d6851a237
chore(deps): update github/codeql-action digest to b2e1676 (#266)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-26 13:48:01 -05:00
renovate[bot] a08c684e84
chore(deps): update github/codeql-action digest to 24ca6b0 (#264)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-26 00:44:07 +00:00
github-actions[bot] cd288e1b26
chore(main): release 1.1.0 (#198)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2023-01-25 02:47:16 +00:00
renovate[bot] c9c1445e40
chore(deps): update github/codeql-action digest to a58e90a (#263)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-24 23:49:09 +00:00
renovate[bot] 01dbff9c6d
chore(deps): update github/codeql-action digest to af42a70 (#262)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-24 17:57:16 +00:00
renovate[bot] 229cd61116
chore(deps): update github/codeql-action digest to 824a20f (#261)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-24 01:53:43 +00:00
renovate[bot] 7524aea473
chore(deps): update github/codeql-action digest to 5794d96 (#260)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-23 13:02:16 -05:00
renovate[bot] f14ca34f58
chore(deps): update actions/cache digest to 2b5a782 (#259)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-22 19:42:06 +00:00
renovate[bot] 3a1d6a8ffb
chore(deps): update dependency org.mockito:mockito-core to v4.11.0 (#209)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-21 08:22:46 +00:00
renovate[bot] 5ee7675f3e
chore(deps): update dependency org.assertj:assertj-core to v3.24.2 (#223)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-21 00:18:47 -08:00
renovate[bot] 618c90beab
chore(deps): update dependency org.apache.maven.plugins:maven-dependency-plugin to v3.5.0 (#235)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-21 05:58:34 +00:00
renovate[bot] 99dc562893
chore(deps): update dependency org.cyclonedx:cyclonedx-maven-plugin to v2.7.4 (#220)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-21 02:44:03 +00:00
renovate[bot] b2b41851ce
chore(deps): update github/codeql-action digest to 421a1b3 (#258)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-20 22:53:39 +00:00
renovate[bot] 1b822341d6
chore(deps): update dependency org.apache.maven.plugins:maven-checkstyle-plugin to v3.2.1 (#234)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-20 19:50:24 +00:00
renovate[bot] 6103dd2d39
fix(deps): update dependency io.cucumber:cucumber-bom to v7.11.0 (#208)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-20 11:12:02 -05:00
renovate[bot] da55f024bf
chore(deps): update dependency dev.openfeature.contrib.providers:flagd to v0.5.6 (#207)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-20 10:59:44 -05:00
renovate[bot] b79a6535b6
chore(deps): update actions/cache digest to 6c2de3b (#257)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-20 09:46:20 +00:00
renovate[bot] 7451f696c8
chore(deps): update google-github-actions/release-please-action digest to 514bc6c (#254)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-19 19:59:51 +00:00
renovate[bot] 5c78acbbe0
chore(deps): update actions/setup-java digest to 8f12c5c (#256)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-19 16:03:13 +00:00
renovate[bot] e30c21e992
chore(deps): update github/codeql-action digest to 60e5868 (#255)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-19 12:55:55 +00:00
Todd Baert d069a8fa9d
feat: add STATIC, CACHED reasons (#240)
feat: add STATIC, CACHED reasons.

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2023-01-19 07:18:52 +00:00
renovate[bot] 19b5946a19
chore(deps): update github/codeql-action digest to 40a7518 (#252)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-19 01:39:20 +00:00
renovate[bot] d688685417
chore(deps): update actions/cache digest to 9b7ef12 (#251)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-18 17:20:30 +00:00
renovate[bot] b5c1e4cc84
chore(deps): update github/codeql-action digest to 40cfcb0 (#250)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-18 07:57:01 +00:00
renovate[bot] 08e6359108
chore(deps): update actions/cache digest to 4791017 (#248)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-17 15:26:20 +00:00
renovate[bot] 44b5eccb5b
chore(deps): update github/codeql-action digest to 32be38e (#247)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-16 23:47:54 +00:00
renovate[bot] 52e3d02426
chore(deps): update actions/cache digest to 22cbf49 (#246)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-16 14:36:27 -05:00
renovate[bot] 229b46ea49
chore(deps): update dependency org.apache.maven.plugins:maven-pmd-plugin to v3.20.0 (#236)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-16 14:32:13 -05:00
renovate[bot] c2b5689e56
chore(deps): update google-github-actions/release-please-action digest to e673b0b (#244)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-14 03:38:37 +00:00
renovate[bot] 4aaedfa2c3
chore(deps): update github/codeql-action digest to 2073a69 (#242)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-13 09:27:44 +00:00
renovate[bot] 7312b9e265
chore(deps): update actions/setup-java digest to e113519 (#241)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-13 06:00:08 +00:00
renovate[bot] 75bd6538cf
chore(deps): update actions/cache digest to efacb02 (#239)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-13 02:27:19 +00:00
renovate[bot] 67b15c6e10
fix(deps): update junit5 monorepo (#230)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-12 13:20:00 -05:00
Skye Gill c1bd636bb6
chore: renovate regex manager to monitor test-harness version (#238)
Signed-off-by: Skye Gill <gill.skye95@gmail.com>
2023-01-12 12:42:10 -05:00
renovate[bot] 1a3115fb36
chore(deps): update github/codeql-action digest to 70fdddf (#233)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-12 00:00:47 +00:00
renovate[bot] 6af8e92df2
chore(deps): update github/codeql-action digest to 42d6d35 (#232)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-11 05:19:50 +00:00
Todd Baert f8ac46f00a
chore: update cuke submodule, tests (#231)
* chore: update cuke submodule, tests

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* fixup: add note about flagd caching

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2023-01-10 09:28:17 -08:00
renovate[bot] 5e53fbf048
chore(deps): update github/codeql-action digest to 166d98c (#229)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-09 20:54:38 +00:00
renovate[bot] 9254b141f9
chore(deps): update actions/cache digest to 87396fe (#228)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-09 16:47:26 +00:00
renovate[bot] 1d0e24a8e9
chore(deps): update actions/setup-java digest to 285fb31 (#227)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-09 12:53:39 +00:00
renovate[bot] 9e199342fd
chore(deps): update actions/cache digest to 58c146c (#226)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-09 09:33:51 +00:00
renovate[bot] 44b1b2445d
chore(deps): update google-github-actions/release-please-action digest to 385de71 (#225)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-07 01:55:22 +00:00
renovate[bot] f6e176a7f0
chore(deps): update github/codeql-action digest to cf1437a (#224)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-06 22:49:03 +00:00
renovate[bot] 4e5a39f670
chore(deps): update actions/cache digest to 6fd2d45 (#222)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-05 18:25:12 +00:00
renovate[bot] 3b1ce92bb6
chore(deps): update actions/cache digest to 1f41429 (#221)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-05 11:10:28 +00:00
renovate[bot] edb09f0c3e
chore(deps): update github/codeql-action digest to ff3337e (#219)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-04 14:38:02 +00:00
renovate[bot] 8303ae4947
chore(deps): update github/codeql-action digest to 484236c (#218)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-04 02:04:13 +00:00
renovate[bot] 801992e50c
chore(deps): update actions/cache digest to 365406c (#216)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-30 08:16:54 +00:00
renovate[bot] a2afa5cce0
chore(deps): update actions/checkout digest to ac59398 (#215)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-29 02:36:02 +00:00
renovate[bot] 6e3e1853a2
chore(deps): update actions/cache digest to 4723a57 (#214)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-27 16:57:38 +00:00
renovate[bot] e399174371
chore(deps): update actions/setup-java digest to 308abcb (#213)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-27 13:40:48 +00:00
renovate[bot] a03ae8d252
chore(deps): update actions/cache digest to d1507cc (#212)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-26 15:45:50 +00:00
renovate[bot] 53bc865dc5
chore(deps): update actions/cache digest to 60c7666 (#211)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-26 09:20:57 +00:00
renovate[bot] 5120778010
chore(deps): update google-github-actions/release-please-action digest to 5c07f8b (#194)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-24 00:13:12 +00:00
renovate[bot] 1a69c64a76
chore(deps): update github/codeql-action digest to 579411f (#193)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-23 21:24:56 +00:00
renovate[bot] c132322093
chore(deps): update actions/setup-java digest to d401f0c (#206)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-23 19:03:17 +00:00
renovate[bot] 25511fd139
chore(deps): update actions/checkout digest to 3ba5ee6 (#196)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-23 16:24:15 +00:00
renovate[bot] 20291b6add
chore(deps): update actions/cache digest to c1a5de8 (#191)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-23 16:07:06 +00:00
renovate[bot] f25b6cedd5
chore(deps): pin google/clusterfuzzlite action to 1e163f0 (#205)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-23 15:59:07 +00:00
Michael Beemer 5da2cccd95
chore: update renovate bot configuration (#204) 2022-12-23 10:47:40 -05:00
Todd Baert 77867620a9
chore: automerge action updates (#200)
Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-12-13 10:38:38 -08:00
renovate[bot] 3c560897f4
chore(deps): update actions/setup-java digest to 1df8dbe (#197)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-13 10:40:51 -05:00
Todd Baert 591e23bff9
chore: renovate automerge for minor/patch on 1+ pkgs (#199)
Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-12-13 07:34:28 -08:00
renovate[bot] 0544597511
fix(deps): update dependency io.cucumber:cucumber-bom to v7.10.0 (#195)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-13 09:55:39 -05:00
renovate[bot] cc4bcb4b57
chore(deps): update actions/setup-java digest to c3ac5dd (#192)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-05 14:33:04 -05:00
renovate[bot] a05ef562b4
chore(deps): update github/codeql-action digest to 9af9a11 (#190)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-05 14:04:23 -05:00
renovate[bot] 1a283b3e19
chore(deps): update dependency org.apache.maven.plugins:maven-dependency-plugin to v3.4.0 (#188)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-01 08:28:38 -08:00
github-actions[bot] 51a38c64d4
chore(main): release 1.0.1 (#174)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-11-30 17:45:52 +00:00
renovate[bot] 519f92e2c7
chore(deps): update github/codeql-action digest to a631f4b (#189)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-30 09:39:10 -08:00
renovate[bot] 5048074625
chore(deps): update actions/cache digest to e2d6144 (#186)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-30 09:18:28 -08:00
renovate[bot] 37091bd03d
chore(deps): update github/codeql-action digest to 160613c (#187)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-29 14:17:53 -08:00
Justin Abrahms ba78048ae3
chore: The language is jvm, not java. (#184)
The language is jvm, not java.

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>
2022-11-29 08:06:27 +00:00
renovate[bot] 60d2cbbc14
chore(deps): update dependency dev.openfeature.contrib.providers:flagd to v0.5.2 (#181)
* chore(deps): update dependency dev.openfeature.contrib.providers:flagd to v0.5.2

* chore: relax gRPC deadline in integration test

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Todd Baert <toddbaert@gmail.com>
2022-11-28 14:53:49 -05:00
renovate[bot] 1c4a821315
chore(deps): update github/codeql-action digest to 9dac9f7 (#185)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-28 00:30:46 -08:00
renovate[bot] b886c63a2f
chore(deps): update github/codeql-action digest to 40542d3 (#160)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-27 20:04:03 +00:00
renovate[bot] 17504af1b0
chore(deps): update dependency org.mockito:mockito-core to v4.9.0 (#179)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-27 19:53:19 +00:00
renovate[bot] 4a437d5776
chore(deps): update actions/cache digest to 6babf20 (#182)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-27 10:26:50 -08:00
renovate[bot] c3e2de779c
chore(deps): update actions/setup-java digest to de1bb2b (#153)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-23 19:29:53 +00:00
renovate[bot] 72fe979cfb
chore(deps): update google-github-actions/release-please-action digest to ed61e76 (#183)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-23 14:23:28 -05:00
Todd Baert 1a40c97d23
chore: fix issues with compilation on later JDKs (#178)
chore: fix compile/lint issues on  8+

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-11-20 23:25:45 -08:00
Justin Abrahms 1b59dc4d3d
chore: Run fuzzing every night (#162)
Run fuzzing every night

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>
2022-11-16 21:56:14 +00:00
Justin Abrahms bf985b9bdd
chore: Pass in a token to codecov to prevent build breaks (#180)
Signed-off-by: Justin Abrahms <jabrahms@ebay.com>
2022-11-16 18:38:25 +00:00
renovate[bot] 79cc1250fb
chore(deps): update dependency org.mockito:mockito-core to v4.8.1 (#166)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-16 17:57:25 +00:00
renovate[bot] 02d9cb9a65
chore(deps): update actions/checkout digest to 1f9a0c2 (#154)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-16 17:51:53 +00:00
renovate[bot] 727e01340c
chore(deps): update actions/cache digest to 5c79b3f (#176)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-16 09:46:57 -08:00
renovate[bot] ea14348edc
chore(deps): update amannn/action-semantic-pull-request digest to 0b14f54 (#151)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-16 15:30:39 +00:00
renovate[bot] d6c45c3f07
chore(deps): update dependency org.cyclonedx:cyclonedx-maven-plugin to v2.7.3 (#177)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-16 10:01:09 -05:00
renovate[bot] ca68ae7871
chore(deps): update google-github-actions/release-please-action digest to 44c30b3 (#169)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-15 17:54:22 -05:00
renovate[bot] 7f06b9af83
chore(deps): update dependency dev.openfeature.contrib.providers:flagd to v0.5.0 (#170)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-09 14:37:49 -05:00
renovate[bot] fcc8972022
fix(deps): update dependency io.cucumber:cucumber-bom to v7.9.0 (#172)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-09 13:21:38 -05:00
renovate[bot] 785470213e
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.7.3.0 (#175)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-09 13:12:15 -05:00
Pramesh 113b5e5f2e
fix(deps): Spot bug scope change (#173)
* chore: add integration tests (#77)

* chore: add integration tests

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* improve POM spacing

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(main): release dev.openfeature.javasdk 0.2.2 (#76)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* feat!: errorCode as enum, reason as string (#80)

* feat!: errorCode as enum, reason as string

- makes errorCode an enum
- makes reason a string
- adds errorMessage to resolution/evaluation details

Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore: add CODEOWNERS (#85)

Create CODEOWNERS

refs https://github.com/open-feature/java-sdk/issues/83

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore: Configure Renovate (#86)

chore(deps): add renovate.json

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update dependency com.github.spotbugs:spotbugs to v4.7.2 (#87)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.7.2.0 (#88)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update dependency org.apache.maven.plugins:maven-javadoc-plugin to v3.4.1 (#90)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update dependency org.sonatype.plugins:nexus-staging-maven-plugin to v1.6.13 (#91)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* fix(deps): update junit5 monorepo (#92)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update dependency org.apache.maven.plugins:maven-pmd-plugin to v3.19.0 (#97)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* fix(deps): update dependency io.cucumber:cucumber-bom to v7.8.0 (#100)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update dependency org.mockito:mockito-core to v4.8.0 (#99)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update codecov/codecov-action action to v3 (#102)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update dependency org.apache.maven.plugins:maven-gpg-plugin to v1.6 (#96)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update dependency org.apache.maven.plugins:maven-source-plugin to v3 (#105)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update dependency org.apache.maven.plugins:maven-compiler-plugin to v3.10.1 (#95)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update dependency org.apache.maven.plugins:maven-gpg-plugin to v3 (#104)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update dependency org.apache.maven.plugins:maven-checkstyle-plugin to v3.2.0 (#94)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update actions/cache action to v3 (#101)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update dependency com.puppycrawl.tools:checkstyle to v8.45.1 (#93)

* chore(deps): update dependency com.puppycrawl.tools:checkstyle to v8.45.1

* scope property went away in the latest version

https://github.com/jshiell/checkstyle-idea/issues/525#issuecomment-832084505

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>

* scope wasn't deleted on the other one

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* refactor!: Change the package name. Everyone knows it's java (or it doesn't matter) (#111)

* Change the package name. Everyone knows it's java (or it doesn't matter)

Fixes #82

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* Missed 2 strings

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* remove broken flagd import until changes absorbed

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Justin Abrahms <justin@abrah.ms>
Signed-off-by: Todd Baert <toddbaert@gmail.com>
Co-authored-by: Todd Baert <toddbaert@gmail.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore: Write perms should be as tightly scoped as possible. (#107)

* Add a dependabot file to keep deps up to date

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* Move write permissions to the specific job, rather than globally

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* Run code scanning (slow auto-build) weekly

Signed-off-by: Justin Abrahms <justin@abrah.ms>

Signed-off-by: Justin Abrahms <justin@abrah.ms>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore: fix dependabot pr titles (#118)

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore: Bump cucumber-bom from 7.8.0 to 7.8.1 (#115)

Bump cucumber-bom from 7.8.0 to 7.8.1

Bumps [cucumber-bom](https://github.com/cucumber/cucumber-jvm) from 7.8.0 to 7.8.1.
- [Release notes](https://github.com/cucumber/cucumber-jvm/releases)
- [Changelog](https://github.com/cucumber/cucumber-jvm/blob/main/CHANGELOG.md)
- [Commits](https://github.com/cucumber/cucumber-jvm/compare/v7.8.0...v7.8.1)

---
updated-dependencies:
- dependency-name: io.cucumber:cucumber-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore: add SAST scanning (#108)

* add SAST scanning

Refs #84

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* Java scanning only

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* Try codeql on the normal build to see how much longer it is.

Signed-off-by: Justin Abrahms <justin@abrah.ms>

Signed-off-by: Justin Abrahms <justin@abrah.ms>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* feat!: use evaluation context interface (#112)

* POC - use evaluation context interface

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* make .merge non-static

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* improve naming

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* add @override

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* Update src/main/java/dev/openfeature/sdk/EvaluationContext.java

Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
Signed-off-by: Todd Baert <toddbaert@gmail.com>

* Update src/main/java/dev/openfeature/sdk/MutableContext.java

Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
Signed-off-by: Todd Baert <toddbaert@gmail.com>

* address PR feedback

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* feat: Support for generating CycloneDX sboms (#119)

Signed-off-by: Justin Abrahms <justin@abrah.ms>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore: [StepSecurity] ci: Harden GitHub Actions (#120)

* [StepSecurity] ci: Harden GitHub Actions in release.yml

* [StepSecurity] ci: Harden GitHub Actions in static-code-scanning.yaml

* [StepSecurity] ci: Harden GitHub Actions in lint-pr.yml

* [StepSecurity] ci: Harden GitHub Actions in merge.yml

* [StepSecurity] ci: Harden GitHub Actions in pullrequest.yml

Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore: I don't think we use that permission? (#123)

I don't think we use that permission?

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore: Document where to find our SBOMs (#124)

Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update actions/cache digest to a3f5edc (#121)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update actions/setup-java digest to e150063 (#125)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore: Remove more perms (#130)

Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update dependency org.cyclonedx:cyclonedx-maven-plugin to v2.7.1 (#128)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update github/codeql-action digest to 3d39294 (#127)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update codecov/codecov-action digest to e0fbd59 (#126)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore: Bump actions/checkout from 3.0.2 to 3.1.0 (#139)

Bumps [actions/checkout](https://github.com/actions/checkout) from 3.0.2 to 3.1.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](2541b1294d...93ea575cb5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore: Bump actions/setup-java from e150063ee446b60ce2e35b040e81846da9001576 to a82e6d00200608b0b4c131bc9a89f7349786bd33 (#140)

chore: Bump actions/setup-java

Bumps [actions/setup-java](https://github.com/actions/setup-java) from e150063ee446b60ce2e35b040e81846da9001576 to a82e6d00200608b0b4c131bc9a89f7349786bd33.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](e150063ee4...a82e6d0020)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore: bump spotbugs-maven-plugin from 4.7.2.0 to 4.7.2.1 (#136)

Bumps [spotbugs-maven-plugin](https://github.com/spotbugs/spotbugs-maven-plugin) from 4.7.2.0 to 4.7.2.1.
- [Release notes](https://github.com/spotbugs/spotbugs-maven-plugin/releases)
- [Commits](https://github.com/spotbugs/spotbugs-maven-plugin/compare/spotbugs-maven-plugin-4.7.2.0...spotbugs-maven-plugin-4.7.2.1)

---
updated-dependencies:
- dependency-name: com.github.spotbugs:spotbugs-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore: exclude component in git tag (#143)

Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>

Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update dependency org.cyclonedx:cyclonedx-maven-plugin to v2.7.2 (#141)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* feat!: add rw locks to client/api, hook accessor name (#131)

* fix: add read/write locks to client/api

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* dont lock entire evaluation

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* add tests

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* fixup comment

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* fixup pom comment

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* increase lock granularity, imporove tests

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* fix spotbugs

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* remove commented test

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update actions/setup-java digest to 3617c43 (#132)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update amannn/action-semantic-pull-request digest to b314c1b (#135)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore: Remove dependabot. I like renovate better (#142)

Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update amannn/action-semantic-pull-request digest to 7c194c2 (#144)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update github/codeql-action digest to 44edb7c (#133)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update actions/checkout digest to 8230315 (#122)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(main): release 0.3.0 (#114)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore: re-enable integration tests (#146)

Update test harness and re-enable integration test profile

Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update actions/cache digest to 9b0c1fc (#145)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* fix: merge eval context (#149)

fix merge eval context

Signed-off-by: Robert Grassian <robert.grassian@split.io>

Signed-off-by: Robert Grassian <robert.grassian@split.io>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(main): release 0.3.1 (#150)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update github/codeql-action digest to 297ec80 (#147)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore: update test/spec association numbers, badge (#156)

* chore: update test/spec association numbers

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* chore: update spec tag

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update actions/cache digest to 2b04a41 (#158)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(security): [Snyk] Security upgrade com.github.spotbugs:spotbugs from 4.7.2 to 4.7.3 (#157)

fix: pom.xml to reduce vulnerabilities

The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JAVA-ORGAPACHECOMMONS-3043138

Co-authored-by: snyk-bot <snyk-bot@snyk.io>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore: Add docs link (#165)

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore: Mark project as active. (#167)

Mark project as active.

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(main): release 1.0.0 (#168)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* chore(deps): update actions/cache digest to 8bec1e4 (#159)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

* changes spotbug scope to provided.

Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
Signed-off-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>
Signed-off-by: Justin Abrahms <jabrahms@ebay.com>
Signed-off-by: Justin Abrahms <justin@abrah.ms>
Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Signed-off-by: Robert Grassian <robert.grassian@split.io>
Signed-off-by: Pramesh <p_bhandari@hotmail.com>
Co-authored-by: Todd Baert <toddbaert@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Step Security Bot <bot@stepsecurity.io>
Co-authored-by: Michael Beemer <beeme1mr@users.noreply.github.com>
Co-authored-by: Robert Grassian <89157164+rgrassian-split@users.noreply.github.com>
Co-authored-by: snyk-bot <snyk-bot@snyk.io>
Co-authored-by: Bhandari, Pramesh(AWF) <pabhandari@ebay.com>
2022-11-03 17:18:37 -07:00
renovate[bot] 2761e661b5
chore(deps): update actions/cache digest to 8bec1e4 (#159)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-27 15:34:48 -04:00
github-actions[bot] 5a01ed0ba1
chore(main): release 1.0.0 (#168)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-10-25 11:21:02 -07:00
Todd Baert c9ba9c9275
chore: release 1.0.0 (#163)
Release-As: 1.0.0
2022-10-25 14:10:25 -04:00
Justin Abrahms 4b0fa1b4b5
chore: Mark project as active. (#167)
Mark project as active.

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>
2022-10-25 12:15:01 -04:00
Todd Baert cc44618537
chore: Add docs link (#165)
Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-10-25 08:45:34 -07:00
Michael Beemer d67932052b
chore(security): [Snyk] Security upgrade com.github.spotbugs:spotbugs from 4.7.2 to 4.7.3 (#157)
fix: pom.xml to reduce vulnerabilities

The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JAVA-ORGAPACHECOMMONS-3043138

Co-authored-by: snyk-bot <snyk-bot@snyk.io>
2022-10-19 11:16:55 -07:00
renovate[bot] f0a82975da
chore(deps): update actions/cache digest to 2b04a41 (#158)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-18 00:03:52 -07:00
Todd Baert 6a299d7228
chore: update test/spec association numbers, badge (#156)
* chore: update test/spec association numbers

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* chore: update spec tag

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-10-17 14:05:26 -07:00
renovate[bot] 27661615f7
chore(deps): update github/codeql-action digest to 297ec80 (#147)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-16 12:40:16 -07:00
github-actions[bot] 3af68113dd
chore(main): release 0.3.1 (#150)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-10-14 13:19:36 +00:00
Robert Grassian fad0f35fc8
fix: merge eval context (#149)
fix merge eval context

Signed-off-by: Robert Grassian <robert.grassian@split.io>

Signed-off-by: Robert Grassian <robert.grassian@split.io>
2022-10-13 16:24:25 -07:00
renovate[bot] 54fbf081ed
chore(deps): update actions/cache digest to 9b0c1fc (#145)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
2022-10-13 17:34:08 +00:00
Todd Baert 5da918205b
chore: re-enable integration tests (#146)
Update test harness and re-enable integration test profile
2022-10-13 12:55:03 -04:00
github-actions[bot] d7fabaf003
chore(main): release 0.3.0 (#114)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
2022-10-13 06:03:51 +00:00
renovate[bot] 118fe7dec2
chore(deps): update actions/checkout digest to 8230315 (#122)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-12 21:31:19 -07:00
renovate[bot] a33030c545
chore(deps): update github/codeql-action digest to 44edb7c (#133)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-12 21:21:04 -07:00
renovate[bot] 125b9c1bde
chore(deps): update amannn/action-semantic-pull-request digest to 7c194c2 (#144)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-12 10:04:50 -04:00
Justin Abrahms 60341ff163
chore: Remove dependabot. I like renovate better (#142) 2022-10-12 13:30:33 +00:00
renovate[bot] b063a621ab
chore(deps): update amannn/action-semantic-pull-request digest to b314c1b (#135)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
2022-10-12 06:00:04 +00:00
renovate[bot] 90f569991b
chore(deps): update actions/setup-java digest to 3617c43 (#132)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-11 22:51:30 -07:00
Todd Baert 2192932863
feat!: add rw locks to client/api, hook accessor name (#131)
* fix: add read/write locks to client/api

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* dont lock entire evaluation

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* add tests

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* fixup comment

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* fixup pom comment

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* increase lock granularity, imporove tests

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* fix spotbugs

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* remove commented test

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-10-11 22:43:50 +00:00
renovate[bot] 71a5699f18
chore(deps): update dependency org.cyclonedx:cyclonedx-maven-plugin to v2.7.2 (#141)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-11 15:09:32 -07:00
Michael Beemer e04de2ae46
chore: exclude component in git tag (#143)
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>

Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2022-10-11 11:46:37 -07:00
dependabot[bot] 64a9affa92
chore: bump spotbugs-maven-plugin from 4.7.2.0 to 4.7.2.1 (#136)
Bumps [spotbugs-maven-plugin](https://github.com/spotbugs/spotbugs-maven-plugin) from 4.7.2.0 to 4.7.2.1.
- [Release notes](https://github.com/spotbugs/spotbugs-maven-plugin/releases)
- [Commits](https://github.com/spotbugs/spotbugs-maven-plugin/compare/spotbugs-maven-plugin-4.7.2.0...spotbugs-maven-plugin-4.7.2.1)

---
updated-dependencies:
- dependency-name: com.github.spotbugs:spotbugs-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
2022-10-10 19:12:18 +00:00
dependabot[bot] 348e3ebb96
chore: Bump actions/setup-java from e150063ee446b60ce2e35b040e81846da9001576 to a82e6d00200608b0b4c131bc9a89f7349786bd33 (#140)
chore: Bump actions/setup-java

Bumps [actions/setup-java](https://github.com/actions/setup-java) from e150063ee446b60ce2e35b040e81846da9001576 to a82e6d00200608b0b4c131bc9a89f7349786bd33.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](e150063ee4...a82e6d0020)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-10 12:09:19 -07:00
dependabot[bot] bb36557f52
chore: Bump actions/checkout from 3.0.2 to 3.1.0 (#139)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3.0.2 to 3.1.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](2541b1294d...93ea575cb5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-10 06:59:40 -07:00
renovate[bot] 5fb7c1f8be
chore(deps): update codecov/codecov-action digest to e0fbd59 (#126)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-10 06:50:25 -07:00
renovate[bot] 64ec731068
chore(deps): update github/codeql-action digest to 3d39294 (#127)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-07 10:23:44 +00:00
renovate[bot] b8a0850e10
chore(deps): update dependency org.cyclonedx:cyclonedx-maven-plugin to v2.7.1 (#128)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-07 03:20:13 -07:00
Justin Abrahms da7a662334
chore: Remove more perms (#130) 2022-10-06 21:54:15 -04:00
renovate[bot] ce89ecf1e7
chore(deps): update actions/setup-java digest to e150063 (#125)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-06 21:02:36 +00:00
renovate[bot] e7ba3f65e8
chore(deps): update actions/cache digest to a3f5edc (#121)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-06 13:59:08 -07:00
Justin Abrahms 2c0190793f
chore: Document where to find our SBOMs (#124) 2022-10-06 16:33:11 -04:00
Justin Abrahms e52fe0bae5
chore: I don't think we use that permission? (#123)
I don't think we use that permission?

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>
2022-10-06 15:01:55 -04:00
Step Security Bot 73cc784491
chore: [StepSecurity] ci: Harden GitHub Actions (#120)
* [StepSecurity] ci: Harden GitHub Actions in release.yml

* [StepSecurity] ci: Harden GitHub Actions in static-code-scanning.yaml

* [StepSecurity] ci: Harden GitHub Actions in lint-pr.yml

* [StepSecurity] ci: Harden GitHub Actions in merge.yml

* [StepSecurity] ci: Harden GitHub Actions in pullrequest.yml
2022-10-06 09:29:47 -07:00
Justin Abrahms 9647c3f04d
feat: Support for generating CycloneDX sboms (#119)
Signed-off-by: Justin Abrahms <justin@abrah.ms>
2022-10-06 14:31:35 +00:00
Todd Baert e9732b582d
feat!: use evaluation context interface (#112)
* POC - use evaluation context interface

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* make .merge non-static

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* improve naming

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* add @override

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* Update src/main/java/dev/openfeature/sdk/EvaluationContext.java

Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
Signed-off-by: Todd Baert <toddbaert@gmail.com>

* Update src/main/java/dev/openfeature/sdk/MutableContext.java

Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
Signed-off-by: Todd Baert <toddbaert@gmail.com>

* address PR feedback

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
2022-10-06 05:32:29 +00:00
Justin Abrahms 3788a3be8e
chore: add SAST scanning (#108)
* add SAST scanning

Refs #84

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* Java scanning only

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* Try codeql on the normal build to see how much longer it is.

Signed-off-by: Justin Abrahms <justin@abrah.ms>

Signed-off-by: Justin Abrahms <justin@abrah.ms>
2022-10-05 22:06:47 -04:00
dependabot[bot] faca91764f
chore: Bump cucumber-bom from 7.8.0 to 7.8.1 (#115)
Bump cucumber-bom from 7.8.0 to 7.8.1

Bumps [cucumber-bom](https://github.com/cucumber/cucumber-jvm) from 7.8.0 to 7.8.1.
- [Release notes](https://github.com/cucumber/cucumber-jvm/releases)
- [Changelog](https://github.com/cucumber/cucumber-jvm/blob/main/CHANGELOG.md)
- [Commits](https://github.com/cucumber/cucumber-jvm/compare/v7.8.0...v7.8.1)

---
updated-dependencies:
- dependency-name: io.cucumber:cucumber-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-05 15:37:45 -04:00
Todd Baert f245ef5e95
chore: fix dependabot pr titles (#118)
Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-10-05 12:09:08 -07:00
Justin Abrahms 29f32939f8
chore: Write perms should be as tightly scoped as possible. (#107)
* Add a dependabot file to keep deps up to date

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* Move write permissions to the specific job, rather than globally

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* Run code scanning (slow auto-build) weekly

Signed-off-by: Justin Abrahms <justin@abrah.ms>

Signed-off-by: Justin Abrahms <justin@abrah.ms>
2022-10-05 15:02:59 -04:00
Justin Abrahms 6eeeddd2ea
refactor!: Change the package name. Everyone knows it's java (or it doesn't matter) (#111)
* Change the package name. Everyone knows it's java (or it doesn't matter)

Fixes #82

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* Missed 2 strings

Signed-off-by: Justin Abrahms <justin@abrah.ms>

* remove broken flagd import until changes absorbed

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Justin Abrahms <justin@abrah.ms>
Signed-off-by: Todd Baert <toddbaert@gmail.com>
Co-authored-by: Todd Baert <toddbaert@gmail.com>
2022-10-05 11:46:04 -07:00
renovate[bot] 715fd032cf
chore(deps): update dependency com.puppycrawl.tools:checkstyle to v8.45.1 (#93)
* chore(deps): update dependency com.puppycrawl.tools:checkstyle to v8.45.1

* scope property went away in the latest version

https://github.com/jshiell/checkstyle-idea/issues/525#issuecomment-832084505

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>

* scope wasn't deleted on the other one

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
2022-10-01 21:40:12 -07:00
renovate[bot] a79ae45a4a
chore(deps): update actions/cache action to v3 (#101)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-01 21:11:09 -07:00
renovate[bot] 26a14ab2d4
chore(deps): update dependency org.apache.maven.plugins:maven-checkstyle-plugin to v3.2.0 (#94)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-01 20:58:59 -07:00
renovate[bot] 819a98defb
chore(deps): update dependency org.apache.maven.plugins:maven-gpg-plugin to v3 (#104)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-01 20:47:44 -07:00
renovate[bot] 40c521913a
chore(deps): update dependency org.apache.maven.plugins:maven-compiler-plugin to v3.10.1 (#95)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-01 19:52:18 -07:00
renovate[bot] ba1c528fca
chore(deps): update dependency org.apache.maven.plugins:maven-source-plugin to v3 (#105)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-01 19:50:45 -07:00
renovate[bot] 5f850fa3d8
chore(deps): update dependency org.apache.maven.plugins:maven-gpg-plugin to v1.6 (#96)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Justin Abrahms <jabrahms@ebay.com>
2022-10-01 22:28:51 +00:00
renovate[bot] 6a7012ec3f
chore(deps): update codecov/codecov-action action to v3 (#102)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-01 15:27:22 -07:00
renovate[bot] 3d1a2337b6
chore(deps): update dependency org.mockito:mockito-core to v4.8.0 (#99)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-01 14:28:47 -07:00
renovate[bot] 5e96d140c1
fix(deps): update dependency io.cucumber:cucumber-bom to v7.8.0 (#100)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-01 14:01:13 -07:00
renovate[bot] 2579fc6a80
chore(deps): update dependency org.apache.maven.plugins:maven-pmd-plugin to v3.19.0 (#97)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-01 15:43:54 +00:00
renovate[bot] 8ca655a788
fix(deps): update junit5 monorepo (#92)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-01 08:42:05 -07:00
renovate[bot] 7556d5278d
chore(deps): update dependency org.sonatype.plugins:nexus-staging-maven-plugin to v1.6.13 (#91)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-01 05:57:00 +00:00
renovate[bot] 7bd7815d30
chore(deps): update dependency org.apache.maven.plugins:maven-javadoc-plugin to v3.4.1 (#90)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-09-30 22:55:20 -07:00
renovate[bot] c4210f1607
chore(deps): update dependency com.github.spotbugs:spotbugs-maven-plugin to v4.7.2.0 (#88)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-01 05:49:51 +00:00
renovate[bot] 0be28a007b
chore(deps): update dependency com.github.spotbugs:spotbugs to v4.7.2 (#87)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-09-30 22:48:17 -07:00
renovate[bot] 475f3c02c1
chore: Configure Renovate (#86)
chore(deps): add renovate.json

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-01 02:38:43 +00:00
Justin Abrahms da788c2a51
chore: add CODEOWNERS (#85)
Create CODEOWNERS

refs https://github.com/open-feature/java-sdk/issues/83

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>

Signed-off-by: Justin Abrahms <jabrahms@ebay.com>
2022-09-30 19:35:33 -07:00
Todd Baert 84f220d813
feat!: errorCode as enum, reason as string (#80)
* feat!: errorCode as enum, reason as string

- makes errorCode an enum
- makes reason a string
- adds errorMessage to resolution/evaluation details
2022-09-30 12:41:48 -04:00
github-actions[bot] e108666a27
chore(main): release dev.openfeature.javasdk 0.2.2 (#76)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-09-23 09:35:31 -04:00
Todd Baert f8d62eea2f
chore: add integration tests (#77)
* chore: add integration tests

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* improve POM spacing

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-09-20 09:48:34 -04:00
Thomas Poignant 2eec1a5519
feat: Add asObjectMap to get the EvaluationContext as Map<String,Object> (#75)
* Add asObjectMap to get the EvaluationContext as Map<String,Object>

Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>

* Fix liniting issue

Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>

* fix PMD issue

Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>

Signed-off-by: Thomas Poignant <thomas.poignant@gofeatureflag.org>
2022-09-16 15:17:58 +01:00
Michael Beemer 5db90f1a38
chore: update release please to manage versions on the readme (#74)
update release please to manage versions on the readme

Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>

Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2022-09-14 15:44:33 -07:00
github-actions[bot] 9ec42f9869
chore(main): release dev.openfeature.javasdk 0.2.1 (#71)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-09-13 15:35:49 -07:00
Robert Grassian 81ab0710ea
fix: isList check in Value checks type of list (#70)
* isList check of Value checks type of list

Signed-off-by: Robert Grassian <robert.grassian@split.io>

* test for empty list

Signed-off-by: Robert Grassian <robert.grassian@split.io>

Signed-off-by: Robert Grassian <robert.grassian@split.io>
2022-09-13 15:09:59 -07:00
github-actions[bot] 00af2f88f8
chore(main): release dev.openfeature.javasdk 0.2.0 (#69)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-09-13 12:44:11 -07:00
Todd Baert 887b62951a
chore: correct initial version (#68)
Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-09-13 14:43:31 -04:00
Todd Baert 7e38e546b3
chore: Add release plz (#66)
* Add release plz

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* Update release doc

Signed-off-by: Todd Baert <toddbaert@gmail.com>

* Add notes about adding release content

Signed-off-by: Todd Baert <toddbaert@gmail.com>

Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-09-13 11:36:42 -07:00
Justin Abrahms 89ea36363f
Merge pull request #65 from open-feature/breaking-changes
Collection of small, breaking changes
2022-09-13 06:06:14 -07:00
Todd Baert 60fad0507a
Throw on invalid values
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-09-09 13:59:18 -04:00
Todd Baert 5d262470e8
feat!: use value for object resolver
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-09-09 11:27:29 -04:00
Todd Baert 3e62414222
feat!: use instant not zoneddatetime
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-09-09 10:46:00 -04:00
Todd Baert 0152a1eef9
feat: add object to value wrapper
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-09-09 10:44:12 -04:00
Justin Abrahms 35c9c7e06f
Merge pull request #63 from open-feature/fix/consistent-ctx-setter
!feat: Make evaluation accessors setters consistent
2022-09-08 09:40:31 -07:00
Todd Baert 4fa0a08389
!feat: Make evaluation context setters consistent
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-09-08 11:14:29 -04:00
Todd Baert b626789693
Merge pull request #61 from open-feature/numbers-in-structs
breaking: store all numbers as doubles
2022-09-07 13:44:22 -04:00
Todd Baert 7e6259c14f
breaking: store all numbers as doubles
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-09-07 12:31:40 -04:00
Todd Baert c701a6c4eb
Merge pull request #57 from open-feature/remove-snapshot-via-maven
use mvn version to remove -SNAPSHOT, bump 0.1.1
2022-09-03 23:49:49 -04:00
Todd Baert 0d6ae8c132
use mvn version to remove -SNAPSHOT, bump 0.1.1
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-09-03 21:06:27 -04:00
Todd Baert d5bd0fbf02
Remove dupe javadoc execution
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-08-30 10:53:52 -04:00
Todd Baert 878ac937d2
sign in package phase
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-08-30 10:25:41 -04:00
Todd Baert 68bc16b3c6
Clean before deploy in snapshots
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-08-30 10:05:13 -04:00
Todd Baert a38c2d2321
Sign in deploy phase, clean before deploy
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-08-30 10:02:43 -04:00
Justin Abrahms 56ca085dd8
We shouldn't need to verify again, since it was done in a previous step and the artifact is still around 2022-08-29 14:14:53 -07:00
Justin Abrahms b5687268d7
Does the filesystem persist across steps? 2022-08-29 14:08:37 -07:00
Justin Abrahms 171f7f33f3
not snapshots 2022-08-29 13:58:13 -07:00
Justin Abrahms 852de680cf
ls build dir? 2022-08-29 13:55:44 -07:00
Justin Abrahms 3886182440
jar dir 2022-08-29 13:53:51 -07:00
Justin Abrahms b2c986f258
Indentation 2022-08-29 13:51:23 -07:00
Justin Abrahms 6a85cd328f
Verify the snapshot? 2022-08-29 13:47:41 -07:00
Justin Abrahms fe2a361e05
Pass codecov token to prevent errors due to inability to do lookups 2022-08-29 13:20:41 -07:00
Justin Abrahms fe59a2354a
Add scriptable retry 2022-08-29 13:20:19 -07:00
Justin Abrahms 659075b666
Turn off pinentry for gpg, print known keys before signing. 2022-08-29 13:14:40 -07:00
Justin Abrahms f5e81e631c
Maybe signing in the first build fixes it? 2022-08-29 11:54:58 -07:00
Justin Abrahms 4efb032eea
gpg namespace 2022-08-29 11:44:24 -07:00
Justin Abrahms a65e6471b7
Dangling xml node 2022-08-29 11:42:57 -07:00
Justin Abrahms 99d43eb6db
Sign the artifact before deploying
I believe that the pom change makes it come after the actual push-to-sonatype step
2022-08-29 11:40:07 -07:00
Justin Abrahms da4901acda
Bump to 0.1.0 2022-08-29 11:26:21 -07:00
Justin Abrahms aa120bdc51
Link working version of the specification 2022-08-29 11:20:13 -07:00
Justin Abrahms 7fa39bcd04
Keep tests in line with spec changes 2022-08-29 11:18:46 -07:00
Justin Abrahms 50225388af
Remove unused parameter 2022-08-29 10:53:40 -07:00
Justin Abrahms 4ec5258d95
Remove flag eval options from provider API 2022-08-29 10:50:54 -07:00
Todd Baert 52c97309d2
Merge pull request #54 from open-feature/fix/update-provider
fix: update provider object eval, T -> Structure
2022-08-28 11:53:46 -04:00
Todd Baert 3cf5a6ffbb
fix: update provider object eval, T -> Structure
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-08-28 11:43:41 -04:00
Justin Abrahms 405e812687
Merge pull request #51 from open-feature/structure-changes
BREAKING CHANGE: Add generic structure type, use context/getObject
2022-08-26 09:37:54 -07:00
Justin Abrahms 4662444f7a
PMD fixes
Signed-off-by: Justin Abrahms <justin@abrah.ms>
2022-08-26 09:36:43 -07:00
Justin Abrahms c86b4c1886
Docs for Value
Clear up warning of parameterized types.

Signed-off-by: Justin Abrahms <justin@abrah.ms>
2022-08-26 08:56:04 -07:00
Justin Abrahms 8ad85bcfe3
Update Structure example in README
Fix a few intellij complains in the README as well

Signed-off-by: Justin Abrahms <justin@abrah.ms>
2022-08-26 08:56:01 -07:00
Justin Abrahms aeb14f61e3
Show what using EvaluationContext looks like in dev experience tests
Signed-off-by: Justin Abrahms <justin@abrah.ms>
2022-08-26 08:55:57 -07:00
Justin Abrahms 2ad492a79c
@Delegate was copying over methods we didn't care about, which made usage of the API ambiguous.
Signed-off-by: Justin Abrahms <justin@abrah.ms>
2022-08-26 08:55:54 -07:00
Justin Abrahms 2e5b26f2e4
Document what a Structure is as well as why we need to use it for providers.
Signed-off-by: Justin Abrahms <justin@abrah.ms>
2022-08-26 08:55:50 -07:00
Todd Baert 84dbd4c819
store times as ZonedDateTime
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-08-26 10:58:37 -04:00
Todd Baert 6eed1a3107
Remove unused enum
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-08-25 13:11:04 -04:00
Todd Baert b81b944561
Adding JSON node value abstraction
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-08-25 10:06:26 -04:00
Todd Baert a862325354
Encapsuate instead of inherent Strcuture
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-08-24 12:41:50 -04:00
Todd Baert a8cffb0a91
Sign in deploy phase
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-08-24 11:23:44 -04:00
Todd Baert f36b641395
Add proxy methods context->structure
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-08-24 11:03:22 -04:00
Todd Baert 360d2b7013
Add generic structure type, use context/getObject
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-08-23 16:54:08 -04:00
Justin Abrahms 465d1139d5
Remove guava dependency. Ensure unused dependencies are removed from pom.xml 2022-08-22 16:26:36 -07:00
Justin Abrahms 3051790370
Provide a mechanism to get all flags as Object 2022-08-18 08:20:51 -07:00
Todd Baert 960af76097
Merge pull request #49 from open-feature/fix/default-no-op
fix: Set no-op provider by default, handle null providers
2022-08-15 14:30:55 -04:00
Todd Baert cb189f1c2a
Add back spec test 2.8
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-08-15 13:09:15 -04:00
Todd Baert a307cea536
Handle null provider, all author code in try/catch
Signed-off-by: Todd Baert <toddbaert@gmail.com>
2022-08-15 08:57:55 -04:00
Justin Abrahms c75d556858
Merge pull request #48 from open-feature/47-add-hook-interface-for-a-double
add double hook interface
2022-08-13 18:18:55 -07:00
Michael Beemer 4dd0017e89
add double hook interface
Signed-off-by: Michael Beemer <beeme1mr@users.noreply.github.com>
2022-08-12 16:33:11 -04:00
Justin Abrahms e4093c2482
Support passing targetingKey in as param to EvalContext 2022-08-11 15:52:39 -07:00
Justin Abrahms d1c39316e2
Merge pull request #44 from rgrassian-split/EvalContextMergeFix
fix merge of eval context targeting key
2022-08-11 15:51:06 -07:00
Robert Grassian e7b2a4503b test
Signed-off-by: Robert Grassian <robert.grassian@split.io>
2022-08-11 14:57:40 -07:00
Robert Grassian 54faaf99ae fix merge of eval context targeting key
Signed-off-by: Robert Grassian <robert.grassian@split.io>
2022-08-11 14:57:40 -07:00
206 changed files with 17136 additions and 2945 deletions

12
.clomonitor.yml Normal file
View File

@ -0,0 +1,12 @@
# CLOMonitor metadata file
# This file must be located at the root of the repository
# Checks exemptions
# Check identifiers are here https://github.com/cncf/clomonitor/blob/main/docs/checks.md#exemptions (look for "id")
exemptions:
- check: signed_releases
reason: "Our releases are signed on Maven Central"
- check: artifacthub_badge
reason: "Java library, not a k8s thing. We use Maven Central"

72
.editorconfig Normal file
View File

@ -0,0 +1,72 @@
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
tab_width = 4
trim_trailing_whitespace = true
ij_continuation_indent_size = 8
[*.md]
max_line_length = off
trim_trailing_whitespace = false
# Following the rules of the Google Java Style Guide.
# See https://google.github.io/styleguide/javaguide.html
[*.java]
max_line_length = 120
ij_java_do_not_wrap_after_single_annotation_in_parameter = true
ij_java_insert_inner_class_imports = false
ij_java_class_count_to_use_import_on_demand = 999
ij_java_names_count_to_use_import_on_demand = 999
ij_java_packages_to_use_import_on_demand = unset
ij_java_imports_layout = $*,|,*
ij_java_doc_align_param_comments = true
ij_java_doc_align_exception_comments = true
ij_java_doc_add_p_tag_on_empty_lines = false
ij_java_doc_do_not_wrap_if_one_line = true
ij_java_doc_keep_empty_parameter_tag = false
ij_java_doc_keep_empty_throws_tag = false
ij_java_doc_keep_empty_return_tag = false
ij_java_doc_preserve_line_breaks = true
ij_java_doc_indent_on_continuation = true
ij_java_keep_control_statement_in_one_line = false
ij_java_keep_blank_lines_in_code = 1
ij_java_align_multiline_parameters = false
ij_java_align_multiline_resources = false
ij_java_align_multiline_for = true
ij_java_space_before_array_initializer_left_brace = true
ij_java_call_parameters_wrap = normal
ij_java_method_parameters_wrap = normal
ij_java_extends_list_wrap = normal
ij_java_throws_keyword_wrap = normal
ij_java_method_call_chain_wrap = normal
ij_java_binary_operation_wrap = normal
ij_java_binary_operation_sign_on_next_line = true
ij_java_ternary_operation_wrap = normal
ij_java_ternary_operation_signs_on_next_line = true
ij_java_keep_simple_methods_in_one_line = true
ij_java_keep_simple_lambdas_in_one_line = true
ij_java_keep_simple_classes_in_one_line = true
ij_java_for_statement_wrap = normal
ij_java_array_initializer_wrap = normal
ij_java_wrap_comments = true
ij_java_if_brace_force = always
ij_java_do_while_brace_force = always
ij_java_while_brace_force = always
ij_java_for_brace_force = always
ij_java_space_after_closing_angle_bracket_in_type_argument = false
[{*.json,*.json5}]
indent_size = 2
tab_width = 2
ij_smart_tabs = false
[*.yaml]
indent_size = 2
tab_width = 2

1
.gitattributes vendored
View File

@ -3,4 +3,3 @@
#
# These are explicitly windows files and should use crlf
*.bat text eol=crlf

38
.github/workflows/cflite_batch.yml vendored Normal file
View File

@ -0,0 +1,38 @@
name: ClusterFuzzLite batch fuzzing
on:
schedule:
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12 or JAN-DEC)
# │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT)
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ │
# * * * * *
- cron: '0 0 * * *' # Every 6th hour. Change this to whatever is suitable.
permissions: read-all
jobs:
BatchFuzzing:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
sanitizer:
- address
- undefined
steps:
- name: Build Fuzzers (${{ matrix.sanitizer }})
id: build
uses: google/clusterfuzzlite/actions/build_fuzzers@884713a6c30a92e5e8544c39945cd7cb630abcd1 # v1
with:
language: jvm
sanitizer: ${{ matrix.sanitizer }}
- name: Run Fuzzers (${{ matrix.sanitizer }})
id: run
uses: google/clusterfuzzlite/actions/run_fuzzers@884713a6c30a92e5e8544c39945cd7cb630abcd1 # v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
fuzz-seconds: 3600
mode: 'batch'
sanitizer: ${{ matrix.sanitizer }}

23
.github/workflows/lint-pr.yml vendored Normal file
View File

@ -0,0 +1,23 @@
name: 'Lint PR'
on:
pull_request_target:
types:
- opened
- edited
- synchronize
permissions: # added using https://github.com/step-security/secure-workflows
contents: read
jobs:
main:
permissions:
pull-requests: read # for amannn/action-semantic-pull-request to analyze PRs
statuses: write # for amannn/action-semantic-pull-request to mark status of analyzed PR
name: Validate PR title
runs-on: ubuntu-latest
steps:
- uses: amannn/action-semantic-pull-request@335288255954904a41ddda8947c8f2c844b8bfeb
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -9,36 +9,36 @@ name: on-merge
on:
push:
branches: [ master, main ]
branches:
- main
permissions:
packages: write
contents: read
jobs:
build:
environment: publish
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 8
uses: actions/setup-java@v3
- uses: actions/checkout@09d2acae674a48949e3602304ab46fd20ae0c42f
- name: Set up JDK 17
uses: actions/setup-java@ae2b61dbc685e60e4427b2e8ed4f0135c6ea8597
with:
java-version: '8'
java-version: '17'
distribution: 'temurin'
cache: maven
server-id: ossrh
server-username: ${{ secrets.OSSRH_USERNAME }}
server-password: ${{ secrets.OSSRH_PASSWORD }}
server-id: central
server-username: ${{ secrets.CENTRAL_USERNAME }}
server-password: ${{ secrets.CENTRAL_PASSWORD }}
- name: Cache local Maven repository
uses: actions/cache@v2
uses: actions/cache@640a1c2554105b57832a23eea0b4672fc7a790d5
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
key: ${{ runner.os }}-17-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
${{ runner.os }}-17-maven-
- name: Configure GPG Key
run: |
@ -50,18 +50,22 @@ jobs:
run: mvn --batch-mode --update-snapshots verify
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v2
uses: codecov/codecov-action@v5.4.3
with:
token: ${{ secrets.CODECOV_TOKEN }} # not required for public repos
flags: unittests # optional
name: coverage # optional
fail_ci_if_error: true # optional (default = false)
verbose: true # optional (default = false)
# Add -SNAPSHOT before deploy
- name: Add SNAPSHOT
run: mvn versions:set -DnewVersion='${project.version}-SNAPSHOT'
- name: Deploy
run: |
mvn -P gpg_verify \
--no-transfer-progress \
--batch-mode \
--file pom.xml -s release/m2-settings.xml verify deploy
mvn --batch-mode \
--settings release/m2-settings.xml -DskipTests clean deploy
env:
OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }}
OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
CENTRAL_USERNAME: ${{ secrets.CENTRAL_USERNAME }}
CENTRAL_PASSWORD: ${{ secrets.CENTRAL_PASSWORD }}

View File

@ -3,49 +3,56 @@ on:
pull_request:
branches: [ master, main ]
permissions:
packages: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
os: [ubuntu-latest]
build:
- java: 17
profile: codequality
- java: 11
profile: java11
name: with Java ${{ matrix.build.java }}
runs-on: ${{ matrix.os}}
steps:
- name: Check out the code
uses: actions/checkout@v3
- name: Set up JDK 8
uses: actions/setup-java@v3
uses: actions/checkout@09d2acae674a48949e3602304ab46fd20ae0c42f
- name: Set up JDK 11
uses: actions/setup-java@ae2b61dbc685e60e4427b2e8ed4f0135c6ea8597
with:
java-version: '8'
distribution: 'temurin'
cache: maven
java-version: ${{ matrix.build.java }}
distribution: 'temurin'
cache: maven
- name: Initialize CodeQL
uses: github/codeql-action/init@7710ed11e398ea99c7f7004c2b2e0f580458db42
with:
languages: java
- name: Cache local Maven repository
uses: actions/cache@v2
uses: actions/cache@640a1c2554105b57832a23eea0b4672fc7a790d5
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
path: ~/.m2/repository
key: ${{ runner.os }}${{ matrix.build.java }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}${{ matrix.build.java }}-maven-
- name: Configure GPG Key
if: github.event.pull_request.head.repo.full_name == github.repository
run: |
echo -n "$GPG_SIGNING_KEY" | base64 --decode | gpg --import
env:
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }}
- name: Verify with Maven
run: mvn --batch-mode --update-snapshots --activate-profiles e2e,${{ matrix.build.profile }} verify
- name: Build with Maven
run: |
if [ ${{ github.event.pull_request.head.repo.full_name }} = ${{ github.repository }} ]; then
mvn --batch-mode --update-snapshots verify
else
mvn --batch-mode --update-snapshots verify -Dgpg.skip
fi
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v2
- if: matrix.build.java == '17'
name: Upload coverage to Codecov
uses: codecov/codecov-action@v5.4.3
with:
token: ${{ secrets.CODECOV_TOKEN }} # not required for public repos
flags: unittests # optional
name: coverage # optional
fail_ci_if_error: true # optional (default = false)
verbose: true # optional (default = false)
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@7710ed11e398ea99c7f7004c2b2e0f580458db42

View File

@ -1,60 +1,64 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
# maven deploy commands via via https://tech.clevertap.com/automate-releases-to-maven-central-via-github-actions/
name: Release
# This workflow creates a running release please PR, which tracks all changes
# based on semantic PR titles. When that PR is merged, a publish occurs after
# release please increments the version.
on:
release:
types: [created]
push:
branches:
- main
name: Run Release Please
permissions: # added using https://github.com/step-security/secure-workflows
contents: read
jobs:
build:
release-please:
runs-on: ubuntu-latest
permissions:
contents: write # for googleapis/release-please-action to create release commit
pull-requests: write # for googleapis/release-please-action to create release PR
issues: write # for googleapis/release-please-action to create labels
# Release-please creates a PR that tracks all changes
steps:
- uses: googleapis/release-please-action@v4
id: release
with:
token: ${{secrets.RELEASE_PLEASE_ACTION_TOKEN}}
outputs:
release_created: ${{ fromJSON(steps.release.outputs.paths_released)[0] != null }} # if we have a single release path, do the release
publish:
environment: publish
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
needs: release-please
if: ${{ fromJSON(needs.release-please.outputs.release_created || false) }}
steps:
- uses: actions/checkout@v3
- name: Set up JDK 8
uses: actions/setup-java@v3
with:
java-version: '8'
distribution: 'temurin'
cache: maven
server-id: ossrh
server-username: ${{ secrets.OSSRH_USERNAME }}
server-password: ${{ secrets.OSSRH_PASSWORD }}
- name: Checkout Repository
uses: actions/checkout@09d2acae674a48949e3602304ab46fd20ae0c42f
- name: Configure GPG Key
run: |
echo -n "$GPG_SIGNING_KEY" | base64 --decode | gpg --import
env:
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }}
- name: Set up JDK 17
uses: actions/setup-java@ae2b61dbc685e60e4427b2e8ed4f0135c6ea8597
with:
java-version: '17'
distribution: 'temurin'
cache: maven
server-id: central
server-username: ${{ secrets.CENTRAL_USERNAME }}
server-password: ${{ secrets.CENTRAL_PASSWORD }}
- name: Build with Maven
run: mvn --batch-mode --update-snapshots verify -Dversion.modifier=''
- name: Configure GPG Key
run: |
echo -n "$GPG_SIGNING_KEY" | base64 --decode | gpg --import
env:
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }}
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v2
with:
flags: unittests # optional
name: coverage # optional
fail_ci_if_error: true # optional (default = false)
verbose: true # optional (default = false)
- name: Deploy
run: |
mvn -P gpg_verify \
--no-transfer-progress \
--batch-mode \
--file pom.xml -s release/m2-settings.xml verify deploy -Dversion.modifier=''
env:
OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }}
OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
- name: Deploy
run: |
mvn --batch-mode \
--settings release/m2-settings.xml -DskipTests clean deploy
env:
CENTRAL_USERNAME: ${{ secrets.CENTRAL_USERNAME }}
CENTRAL_PASSWORD: ${{ secrets.CENTRAL_PASSWORD }}

View File

@ -0,0 +1,44 @@
name: "Code Scanning - Action"
# Docs for this at https://github.com/github/codeql-action#usage
on:
schedule:
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12 or JAN-DEC)
# │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT)
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ │
# * * * * *
- cron: '30 1 * * 1'
permissions: # added using https://github.com/step-security/secure-workflows
contents: read
jobs:
CodeQL-Build:
# CodeQL runs on ubuntu-latest, windows-latest, and macos-latest
runs-on: ubuntu-latest
permissions:
# required for all workflows
security-events: write
steps:
- name: Checkout repository
uses: actions/checkout@09d2acae674a48949e3602304ab46fd20ae0c42f
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@7710ed11e398ea99c7f7004c2b2e0f580458db42
with:
languages: java
- name: Autobuild
uses: github/codeql-action/autobuild@7710ed11e398ea99c7f7004c2b2e0f580458db42
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@7710ed11e398ea99c7f7004c2b2e0f580458db42

6
.gitignore vendored
View File

@ -7,3 +7,9 @@ build
specification.json
target
.DS_Store
# vscode stuff - we may want to use a more specific pattern later if we'd like to suggest editor configurations
.vscode/
# used for spec compliance tooling
java-report.json

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "spec"]
path = spec
url = https://github.com/open-feature/spec/

19
.mvn/wrapper/maven-wrapper.properties vendored Normal file
View File

@ -0,0 +1,19 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
wrapperVersion=3.3.2
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.11/apache-maven-3.9.11-bin.zip

View File

@ -0,0 +1 @@
{".":"1.16.0"}

5
.specrc Normal file
View File

@ -0,0 +1,5 @@
[spec]
file_extension=java
multiline_regex=@Specification\((?P<innards>.*?)\)\s*$
number_subregex=number\s*=\s*['"](.*?)['"]
text_subregex=text\s*=\s*['"](.*)['"]

1613
CHANGELOG.md Normal file

File diff suppressed because it is too large Load Diff

6
CODEOWNERS Normal file
View File

@ -0,0 +1,6 @@
# These owners will be the default owners for everything in
# the repo. Unless a later match takes precedence
#
# Managed by Peribolos: https://github.com/open-feature/community/blob/main/config/open-feature/sdk-java/workgroup.yaml
#
* @open-feature/sdk-java-maintainers @open-feature/maintainers

View File

@ -1,4 +1,4 @@
Welcome! Super happy to have you here.
## Welcome! Super happy to have you here.
A few things.
@ -8,12 +8,75 @@ be a jerk.
We're not keen on vendor-specific stuff in this library, but if there are changes that need to happen in the spec to enable vendor-specific stuff in user code or other extension points, check out [the spec](https://github.com/open-feature/spec).
Any contributions you make are expected to be tested with unit tests. You can validate these work with `gradle test`, or the automation itself will run them for you when you make a PR.
Any contributions you make are expected to be tested with unit tests. You can validate these work with `mvn test`.
Further, it is recommended to verify code styling and static code analysis with `mvn verify -P !deploy`.
Regardless, the automation itself will run them for you when you open a PR.
Your code is supposed to work with Java 11+.
> [!TIP]
> For easier usage maven wrapper is available. Example usage: `./mvnw verify`
Your code is supposed to work with Java 8+.
If you think we might be out of date with the spec, you can check that by invoking `python spec_finder.py` in the root of the repository. This will validate we have tests defined for all of the specification entries we know about.
If you're adding tests to cover something in the spec, use the `@Specification` annotation like you see throughout the test suites.
## Code Styles
### Overview
Our project follows strict code formatting standards to maintain consistency and readability across the codebase. We use [Spotless](https://github.com/diffplug/spotless) integrated with the [Palantir Java Format](https://github.com/palantir/palantir-java-format) for code formatting.
**Spotless** ensures that all code complies with the formatting rules automatically, reducing style-related issues during code reviews.
### How to Format Your Code
1. **Before Committing Changes:**
Run the Spotless plugin to format your code. This will apply the Palantir Java Format style:
```bash
mvn spotless:apply
```
2. **Verify Formatting:**
To check if your code adheres to the style guidelines without making changes:
```bash
mvn spotless:check
```
- If this command fails, your code does not follow the required formatting. Use `mvn spotless:apply` to fix it.
### CI/CD Integration
Our Continuous Integration (CI) pipeline automatically checks code formatting using the Spotless plugin. Any code that does not pass the `spotless:check` step will cause the build to fail.
### Best Practices
- Regularly run `mvn spotless:apply` during your work to ensure your code remains aligned with the standards.
- Configure your IDE (e.g., IntelliJ IDEA or Eclipse) to follow the Palantir Java format guidelines to reduce discrepancies during development.
### Support
If you encounter issues with code formatting, please raise a GitHub issue or contact the maintainers.
## End-to-End Tests
The continuous integration runs a set of [gherkin e2e tests](https://github.com/open-feature/spec/blob/main/specification/assets/gherkin/evaluation.feature) using `InMemoryProvider`.
to run alone:
```
mvn test -P e2e
```
## Benchmarking
There is a small JMH benchmark suite for testing allocations that can be run with:
```sh
mvn -P benchmark clean compile test-compile jmh:benchmark -Djmh.f=1 -Djmh.prof='dev.openfeature.sdk.benchmark.AllocationProfiler'
```
If you are concerned about the repercussions of a change on memory usage, run this an compare the results to the committed. `benchmark.txt` file.
Note that the ONLY MEANINGFUL RESULTS of this benchmark are the `totalAllocatedBytes` and the `totalAllocatedInstances`.
The `run` score, and maven task time are not relevant since this benchmark is purely memory-related and has nothing to do with speed.
You can also view the heap breakdown to see which objects are taking up the most memory.
## Releasing
See [releasing](./docs/release.md).
Thanks and looking forward to your issues and pull requests.

485
README.md
View File

@ -1,69 +1,68 @@
# OpenFeature SDK for Java
<!-- markdownlint-disable MD033 -->
<!-- x-hide-in-docs-start -->
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/open-feature/community/0e23508c163a6a1ac8c0ced3e4bd78faafe627c7/assets/logo/horizontal/white/openfeature-horizontal-white.svg" />
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/open-feature/community/0e23508c163a6a1ac8c0ced3e4bd78faafe627c7/assets/logo/horizontal/black/openfeature-horizontal-black.svg" />
<img align="center" alt="OpenFeature Logo">
</picture>
</p>
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/dev.openfeature/javasdk/badge.svg)](https://maven-badges.herokuapp.com/maven-central/dev.openfeature/javasdk)
[![javadoc](https://javadoc.io/badge2/dev.openfeature/javasdk/javadoc.svg)](https://javadoc.io/doc/dev.openfeature/javasdk)
[![Project Status: WIP Initial development is in progress, but there has not yet been a stable, usable release suitable for the public.](https://www.repostatus.org/badges/latest/wip.svg)](https://www.repostatus.org/#wip)
[![Known Vulnerabilities](https://snyk.io/test/github/open-feature/java-sdk/badge.svg)](https://snyk.io/test/github/open-feature/java-sdk)
[![on-merge](https://github.com/open-feature/java-sdk/actions/workflows/merge.yml/badge.svg)](https://github.com/open-feature/java-sdk/actions/workflows/merge.yml)
[![codecov](https://codecov.io/gh/open-feature/java-sdk/branch/main/graph/badge.svg?token=XMS9L7PBY1)](https://codecov.io/gh/open-feature/java-sdk)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/6241/badge)](https://bestpractices.coreinfrastructure.org/projects/6241)
<h2 align="center">OpenFeature Java SDK</h2>
<!-- x-hide-in-docs-end -->
<!-- The 'github-badges' class is used in the docs -->
<p align="center" class="github-badges">
<a href="https://github.com/open-feature/spec/releases/tag/v0.7.0">
<img alt="Specification" src="https://img.shields.io/static/v1?label=specification&message=v0.7.0&color=yellow&style=for-the-badge" />
</a>
<!-- x-release-please-start-version -->
This is the Java implementation of [OpenFeature](https://openfeature.dev), a vendor-agnostic abstraction library for evaluating feature flags.
<a href="https://github.com/open-feature/java-sdk/releases/tag/v1.16.0">
<img alt="Release" src="https://img.shields.io/static/v1?label=release&message=v1.16.0&color=blue&style=for-the-badge" />
</a>
We support multiple data types for flags (numbers, strings, booleans, objects) as well as hooks, which can alter the lifecycle of a flag evaluation.
<!-- x-release-please-end -->
<br/>
<a href="https://javadoc.io/doc/dev.openfeature/sdk">
<img alt="Javadoc" src="https://javadoc.io/badge2/dev.openfeature/sdk/javadoc.svg" />
</a>
<a href="https://maven-badges.herokuapp.com/maven-central/dev.openfeature/sdk">
<img alt="Maven Central" src="https://maven-badges.herokuapp.com/maven-central/dev.openfeature/sdk/badge.svg" />
</a>
<a href="https://codecov.io/gh/open-feature/java-sdk">
<img alt="Codecov" src="https://codecov.io/gh/open-feature/java-sdk/branch/main/graph/badge.svg?token=XMS9L7PBY1" />
</a>
<a href="https://bestpractices.coreinfrastructure.org/projects/6241">
<img alt="CII Best Practices" src="https://bestpractices.coreinfrastructure.org/projects/6241/badge" />
</a>
</p>
<!-- x-hide-in-docs-start -->
This library is intended to be used in server-side contexts and has not been evaluated for use in mobile devices.
[OpenFeature](https://openfeature.dev) is an open specification that provides a vendor-agnostic, community-driven API for feature flagging that works with your favorite feature flag management tool.
## Usage
<!-- x-hide-in-docs-end -->
## 🚀 Quick start
While `Boolean` provides the simplest introduction, we offer a variety of flag types.
### Requirements
```java
class MyClass {
public UI booleanExample() {
// Should we render the redesign? Or the default webpage?
if (client.getBooleanValue("redesign_enabled", false)) {
return render_redesign();
}
return render_normal();
}
public Template stringExample() {
// Get the template to load for the custom new homepage
String template = client.getStringValue("homepage_template", "default-homepage.html")
return render_template(template);
}
public List<Module> numberExample() {
// How many modules should we be fetching?
Integer count = client.getIntegerValue("module-fetch-count", 4);
return fetch_modules(count);
}
public Module structureExample() {
// This deserializes into the Module structure for you.
Module heroModule = client.getObjectValue("hero-module", myExampleModule);
return heroModule;
}
}
```
- Java 11+ (compiler target is 11)
## Requirements
- Java 8+
Note that this library is intended to be used in server-side contexts and has not been evaluated for use on mobile devices.
## Installation
### Add it to your build
### Install
#### Maven
<!-- x-release-please-start-version -->
```xml
<dependency>
<groupId>dev.openfeature</groupId>
<artifactId>javasdk</artifactId>
<version>0.0.3-SNAPSHOT</version>
<artifactId>sdk</artifactId>
<version>1.16.0</version>
</dependency>
```
<!-- x-release-please-end-version -->
If you would like snapshot builds, this is the relevant repository information:
@ -73,43 +72,397 @@ If you would like snapshot builds, this is the relevant repository information:
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>sonartype</id>
<name>Sonartype Repository</name>
<id>sonatype</id>
<name>Sonatype Repository</name>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
</repository>
</repositories>
```
#### Gradle
<!-- x-release-please-start-version -->
```groovy
dependencies {
implementation 'dev.openfeature:javasdk:0.0.3-SNAPSHOT'
implementation 'dev.openfeature:sdk:1.16.0'
}
```
<!-- x-release-please-end-version -->
### Usage
```java
public void example(){
// flags defined in memory
Map<String, Flag<?>> myFlags = new HashMap<>();
myFlags.put("v2_enabled", Flag.builder()
.variant("on", true)
.variant("off", false)
.defaultVariant("on")
.build());
// configure a provider
OpenFeatureAPI api = OpenFeatureAPI.getInstance();
try {
api.setProviderAndWait(new InMemoryProvider(myFlags));
} catch (Exception e) {
// handle initialization failure
e.printStackTrace();
}
// create a client
Client client = api.getClient();
// get a bool flag value
boolean flagValue = client.getBooleanValue("v2_enabled", false);
}
```
### Configure it
To configure it, you'll need to add a provider to the global singleton `OpenFeatureAPI`. From there, you can generate a `Client` which is usable by your code. While you'll likely want a provider for your specific backend, we've provided a `NoOpProvider`, which simply returns the default passed in.
### API Reference
See [here](https://javadoc.io/doc/dev.openfeature/sdk/latest/) for the Javadocs.
## 🌟 Features
| Status | Features | Description |
| ------ |---------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ✅ | [Providers](#providers) | Integrate with a commercial, open source, or in-house feature management tool. |
| ✅ | [Targeting](#targeting) | Contextually-aware flag evaluation using [evaluation context](https://openfeature.dev/docs/reference/concepts/evaluation-context). |
| ✅ | [Hooks](#hooks) | Add functionality to various stages of the flag evaluation life-cycle. |
| ✅ | [Tracking](#tracking) | Associate user actions with feature flag evaluations. |
| ✅ | [Logging](#logging) | Integrate with popular logging packages. |
| ✅ | [Domains](#domains) | Logically bind clients with providers. |
| ✅ | [Eventing](#eventing) | React to state changes in the provider or flag management system. |
| ✅ | [Shutdown](#shutdown) | Gracefully clean up a provider during application shutdown. |
| ✅ | [Transaction Context Propagation](#transaction-context-propagation) | Set a specific [evaluation context](https://openfeature.dev/docs/reference/concepts/evaluation-context) for a transaction (e.g. an HTTP request or a thread). |
| ✅ | [Extending](#extending) | Extend OpenFeature with custom providers and hooks. |
<sub>Implemented: ✅ | In-progress: ⚠️ | Not implemented yet: ❌</sub>
### Providers
[Providers](https://openfeature.dev/docs/reference/concepts/provider) are an abstraction between a flag management system and the OpenFeature SDK.
Look [here](https://openfeature.dev/ecosystem?instant_search%5BrefinementList%5D%5Btype%5D%5B0%5D=Provider&instant_search%5BrefinementList%5D%5Btechnology%5D%5B0%5D=Java) for a complete list of available providers.
If the provider you're looking for hasn't been created yet, see the [develop a provider](#develop-a-provider) section to learn how to build it yourself.
Once you've added a provider as a dependency, it can be registered with OpenFeature like this:
#### Synchronous
To register a provider in a blocking manner to ensure it is ready before further actions are taken, you can use the `setProviderAndWait` method as shown below:
```java
class MyApp {
public void example(){
OpenFeatureAPI api = OpenFeatureAPI.getInstance();
api.setProvider(new NoOpProvider());
Client client = api.getClient();
// Now use your `client` instance to evaluate some feature flags!
OpenFeatureAPI api = OpenFeatureAPI.getInstance();
try {
api.setProviderAndWait(new MyProvider());
} catch (Exception e) {
// handle initialization failure
e.printStackTrace();
}
```
#### Asynchronous
To register a provider in a non-blocking manner, you can use the `setProvider` method as shown below:
```java
OpenFeatureAPI.getInstance().setProvider(new MyProvider());
```
In some situations, it may be beneficial to register multiple providers in the same application.
This is possible using [domains](#domains), which is covered in more detail below.
### Targeting
Sometimes, the value of a flag must consider some dynamic criteria about the application or user, such as the user's location, IP, email address, or the server's location.
In OpenFeature, we refer to this as [targeting](https://openfeature.dev/specification/glossary#targeting).
If the flag management system you're using supports targeting, you can provide the input data using the [evaluation context](https://openfeature.dev/docs/reference/concepts/evaluation-context).
```java
// set a value to the global context
OpenFeatureAPI api = OpenFeatureAPI.getInstance();
Map<String, Value> apiAttrs = new HashMap<>();
apiAttrs.put("region", new Value(System.getEnv("us-east-1")));
EvaluationContext apiCtx = new ImmutableContext(apiAttrs);
api.setEvaluationContext(apiCtx);
// set a value to the client context
Map<String, Value> clientAttrs = new HashMap<>();
clientAttrs.put("region", new Value(System.getEnv("us-east-1")));
EvaluationContext clientCtx = new ImmutableContext(clientAttrs);
Client client = api.getInstance().getClient();
client.setEvaluationContext(clientCtx);
// set a value to the invocation context
Map<String, Value> requestAttrs = new HashMap<>();
requestAttrs.put("email", new Value(session.getAttribute("email")));
requestAttrs.put("product", new Value("productId"));
String targetingKey = session.getId();
EvaluationContext reqCtx = new ImmutableContext(targetingKey, requestAttrs);
boolean flagValue = client.getBooleanValue("some-flag", false, reqCtx);
```
### Hooks
[Hooks](https://openfeature.dev/docs/reference/concepts/hooks) allow for custom logic to be added at well-defined points of the flag evaluation life-cycle
Look [here](https://openfeature.dev/ecosystem?instant_search%5BrefinementList%5D%5Btype%5D%5B0%5D=Hook&instant_search%5BrefinementList%5D%5Btechnology%5D%5B0%5D=Java) for a complete list of available hooks.
If the hook you're looking for hasn't been created yet, see the [develop a hook](#develop-a-hook) section to learn how to build it yourself.
Once you've added a hook as a dependency, it can be registered at the global, client, or flag invocation level.
```java
// add a hook globally, to run on all evaluations
OpenFeatureAPI api = OpenFeatureAPI.getInstance();
api.addHooks(new ExampleHook());
// add a hook on this client, to run on all evaluations made by this client
Client client = api.getClient();
client.addHooks(new ExampleHook());
// add a hook for this evaluation only
Boolean retval = client.getBooleanValue(flagKey, false, null,
FlagEvaluationOptions.builder().hook(new ExampleHook()).build());
```
### Tracking
The [tracking API](https://openfeature.dev/specification/sections/tracking/) allows you to use OpenFeature abstractions to associate user actions with feature flag evaluations.
This is essential for robust experimentation powered by feature flags. Note that, unlike methods that handle feature flag evaluations, calling `track(...)` may throw an `IllegalArgumentException` if an empty string is passed as the `trackingEventName`.
```java
OpenFeatureAPI api = OpenFeatureAPI.getInstance();
api.getClient().track("visited-promo-page", new MutableTrackingEventDetails(99.77).add("currency", "USD"));
```
### Logging
The Java SDK uses SLF4J. See the [SLF4J manual](https://slf4j.org/manual.html) for complete documentation.
Note that in accordance with the OpenFeature specification, the SDK doesn't generally log messages during flag evaluation.
#### Logging Hook
The Java SDK includes a `LoggingHook`, which logs detailed information at key points during flag evaluation, using SLF4J's structured logging API.
This hook can be particularly helpful for troubleshooting and debugging; simply attach it at the global, client or invocation level and ensure your log level is set to "debug".
See [hooks](#hooks) for more information on configuring hooks.
### Domains
Clients can be assigned to a domain.
A domain is a logical identifier which can be used to associate clients with a particular provider.
If a domain has no associated provider, the global provider is used.
```java
FeatureProvider scopedProvider = new MyProvider();
// registering the default provider
OpenFeatureAPI.getInstance().setProvider(LocalProvider());
// registering a provider to a domain
OpenFeatureAPI.getInstance().setProvider("my-domain", new CachedProvider());
// A client bound to the default provider
Client clientDefault = OpenFeatureAPI.getInstance().getClient();
// A client bound to the CachedProvider provider
Client domainScopedClient = OpenFeatureAPI.getInstance().getClient("my-domain");
```
Providers for domains can be set in a blocking or non-blocking way.
For more details, please refer to the [providers](#providers) section.
### Eventing
Events allow you to react to state changes in the provider or underlying flag management system, such as flag definition changes, provider readiness, or error conditions.
Initialization events (`PROVIDER_READY` on success, `PROVIDER_ERROR` on failure) are dispatched for every provider.
Some providers support additional events, such as `PROVIDER_CONFIGURATION_CHANGED`.
Please refer to the documentation of the provider you're using to see what events are supported.
```java
// add an event handler to a client
Client client = OpenFeatureAPI.getInstance().getClient();
client.onProviderConfigurationChanged((EventDetails eventDetails) -> {
// do something when the provider's flag settings change
});
// add an event handler to the global API
OpenFeatureAPI.getInstance().onProviderStale((EventDetails eventDetails) -> {
// do something when the provider's cache goes stale
});
```
### Shutdown
The OpenFeature API provides a close function to perform a cleanup of all registered providers.
This should only be called when your application is in the process of shutting down.
```java
// shut down all providers
OpenFeatureAPI.getInstance().shutdown();
```
### Transaction Context Propagation
Transaction context is a container for transaction-specific evaluation context (e.g. user id, user agent, IP).
Transaction context can be set where specific data is available (e.g. an auth service or request handler) and by using the transaction context propagator it will automatically be applied to all flag evaluations within a transaction (e.g. a request or thread).
By default, the `NoOpTransactionContextPropagator` is used, which doesn't store anything.
To register a `ThreadLocal` context propagator, you can use the `setTransactionContextPropagator` method as shown below.
```java
// registering the ThreadLocalTransactionContextPropagator
OpenFeatureAPI.getInstance().setTransactionContextPropagator(new ThreadLocalTransactionContextPropagator());
```
Once you've registered a transaction context propagator, you can propagate the data into request-scoped transaction context.
```java
// adding userId to transaction context
OpenFeatureAPI api = OpenFeatureAPI.getInstance();
Map<String, Value> transactionAttrs = new HashMap<>();
transactionAttrs.put("userId", new Value("userId"));
EvaluationContext transactionCtx = new ImmutableContext(transactionAttrs);
api.setTransactionContext(transactionCtx);
```
Additionally, you can develop a custom transaction context propagator by implementing the `TransactionContextPropagator` interface and registering it as shown above.
## Extending
### Develop a provider
To develop a provider, you need to create a new project and include the OpenFeature SDK as a dependency.
This can be a new repository or included in [the existing contrib repository](https://github.com/open-feature/java-sdk-contrib) available under the OpenFeature organization.
Youll then need to write the provider by implementing the `FeatureProvider` interface exported by the OpenFeature SDK.
```java
public class MyProvider implements FeatureProvider {
@Override
public Metadata getMetadata() {
return () -> "My Provider";
}
@Override
public void initialize(EvaluationContext evaluationContext) throws Exception {
// start up your provider
}
@Override
public void shutdown() {
// shut down your provider
}
@Override
public ProviderEvaluation<Boolean> getBooleanEvaluation(String key, Boolean defaultValue, EvaluationContext ctx) {
// resolve a boolean flag value
}
@Override
public ProviderEvaluation<String> getStringEvaluation(String key, String defaultValue, EvaluationContext ctx) {
// resolve a string flag value
}
@Override
public ProviderEvaluation<Integer> getIntegerEvaluation(String key, Integer defaultValue, EvaluationContext ctx) {
// resolve an int flag value
}
@Override
public ProviderEvaluation<Double> getDoubleEvaluation(String key, Double defaultValue, EvaluationContext ctx) {
// resolve a double flag value
}
@Override
public ProviderEvaluation<Value> getObjectEvaluation(String key, Value defaultValue, EvaluationContext ctx) {
// resolve an object flag value
}
}
```
## Contacting us
We hold regular meetings which you can see [here](https://github.com/open-feature/community/#meetings-and-events).
We are also present on the `#openfeature` channel in the [CNCF slack](https://slack.cncf.io/).
If you'd like your provider to support firing events, such as events for when flags are changed in the flag management system, extend `EventProvider`.
## Contributors
```java
class MyEventProvider extends EventProvider {
@Override
public Metadata getMetadata() {
return () -> "My Event Provider";
}
Thanks so much to our contributors.
@Override
public void initialize(EvaluationContext evaluationContext) throws Exception {
// emit events when flags are changed in a hypothetical REST API
this.restApiClient.onFlagsChanged(() -> {
ProviderEventDetails details = ProviderEventDetails.builder().message("flags changed in API!").build();
this.emitProviderConfigurationChanged(details);
});
}
@Override
public void shutdown() {
// shut down your provider
}
// remaining provider methods...
}
```
Providers no longer need to manage their own state, this is done by the SDK itself. If desired, the state of a provider
can be queried through the client that uses the provider.
```java
OpenFeatureAPI.getInstance().getClient().getProviderState();
```
> Built a new provider? [Let us know](https://github.com/open-feature/openfeature.dev/issues/new?assignees=&labels=provider&projects=&template=document-provider.yaml&title=%5BProvider%5D%3A+) so we can add it to the docs!
### Develop a hook
To develop a hook, you need to create a new project and include the OpenFeature SDK as a dependency.
This can be a new repository or included in [the existing contrib repository](https://github.com/open-feature/java-sdk-contrib) available under the OpenFeature organization.
Implement your own hook by conforming to the `Hook interface`.
```java
class MyHook implements Hook {
@Override
public Optional before(HookContext ctx, Map hints) {
// code that runs before the flag evaluation
}
@Override
public void after(HookContext ctx, FlagEvaluationDetails details, Map hints) {
// code that runs after the flag evaluation succeeds
}
@Override
public void error(HookContext ctx, Exception error, Map hints) {
// code that runs when there's an error during a flag evaluation
}
@Override
public void finallyAfter(HookContext ctx, FlagEvaluationDetails details, Map hints) {
// code that runs regardless of success or error
}
};
```
> Built a new hook? [Let us know](https://github.com/open-feature/openfeature.dev/issues/new?assignees=&labels=hook&projects=&template=document-hook.yaml&title=%5BHook%5D%3A+) so we can add it to the docs!
<!-- x-hide-in-docs-start -->
## ⭐️ Support the project
- Give this repo a ⭐️!
- Follow us on social media:
- Twitter: [@openfeature](https://twitter.com/openfeature)
- LinkedIn: [OpenFeature](https://www.linkedin.com/company/openfeature/)
- Join us on [Slack](https://cloud-native.slack.com/archives/C0344AANLA1)
- For more, check out our [community page](https://openfeature.dev/community/)
## 🤝 Contributing
Interested in contributing? Great, we'd love your help! To get started, take a look at the [CONTRIBUTING](CONTRIBUTING.md) guide.
### Thanks to everyone who has already contributed
<a href="https://github.com/open-feature/java-sdk/graphs/contributors">
<img src="https://contrib.rocks/image?repo=open-feature/java-sdk" />
<img src="https://contrib.rocks/image?repo=open-feature/java-sdk" alt="Pictures of the folks who have contributed to the project" />
</a>
Made with [contrib.rocks](https://contrib.rocks).
<!-- x-hide-in-docs-end -->

294
benchmark.txt Normal file
View File

@ -0,0 +1,294 @@
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------< dev.openfeature:sdk >-------------------------
[INFO] Building OpenFeature Java SDK 1.12.1
[INFO] from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[WARNING] Parameter 'encoding' is unknown for plugin 'maven-checkstyle-plugin:3.5.0:check (validate)'
[WARNING] Parameter 'encoding' is unknown for plugin 'maven-checkstyle-plugin:3.5.0:check (validate)'
[WARNING] Parameter 'encoding' is unknown for plugin 'maven-checkstyle-plugin:3.5.0:check (validate)'
[INFO]
[INFO] --- clean:3.2.0:clean (default-clean) @ sdk ---
[INFO] Deleting /home/todd/git/java-sdk/target
[INFO]
[INFO] --- checkstyle:3.5.0:check (validate) @ sdk ---
[INFO] Starting audit...
Audit done.
[INFO] You have 0 Checkstyle violations.
[INFO]
[INFO] --- jacoco:0.8.12:prepare-agent (prepare-agent) @ sdk ---
[INFO] surefireArgLine set to -javaagent:/home/todd/.m2/repository/org/jacoco/org.jacoco.agent/0.8.12/org.jacoco.agent-0.8.12-runtime.jar=destfile=/home/todd/git/java-sdk/target/coverage-reports/jacoco-ut.exec
[INFO]
[INFO] --- resources:3.3.1:resources (default-resources) @ sdk ---
[INFO] skip non existing resourceDirectory /home/todd/git/java-sdk/src/main/resources
[INFO]
[INFO] --- compiler:3.13.0:compile (default-compile) @ sdk ---
[INFO] Recompiling the module because of changed source code.
[INFO] Compiling 65 source files with javac [debug target 1.8] to target/classes
[WARNING] bootstrap class path not set in conjunction with -source 8
[WARNING] source value 8 is obsolete and will be removed in a future release
[WARNING] target value 8 is obsolete and will be removed in a future release
[WARNING] To suppress warnings about obsolete options, use -Xlint:-options.
[INFO] Annotation processing is enabled because one or more processors were found
on the class path. A future release of javac may disable annotation processing
unless at least one processor is specified by name (-processor), or a search
path is specified (--processor-path, --processor-module-path), or annotation
processing is enabled explicitly (-proc:only, -proc:full).
Use -Xlint:-options to suppress this message.
Use -proc:none to disable annotation processing.
[WARNING] /home/todd/git/java-sdk/src/main/java/dev/openfeature/sdk/MutableStructure.java:[19,1] Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object. If this is intentional, add '@EqualsAndHashCode(callSuper=false)' to your type.
[WARNING] /home/todd/git/java-sdk/src/main/java/dev/openfeature/sdk/ImmutableStructure.java:[22,1] Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object. If this is intentional, add '@EqualsAndHashCode(callSuper=false)' to your type.
[WARNING] /home/todd/git/java-sdk/src/main/java/dev/openfeature/sdk/EventDetails.java:[9,1] Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object. If this is intentional, add '@EqualsAndHashCode(callSuper=false)' to your type.
[WARNING] /home/todd/git/java-sdk/src/main/java/dev/openfeature/sdk/Value.java:[27,26] finalize() in java.lang.Object has been deprecated and marked for removal
[INFO] /home/todd/git/java-sdk/src/main/java/dev/openfeature/sdk/NoOpProvider.java: Some input files use or override a deprecated API.
[INFO] /home/todd/git/java-sdk/src/main/java/dev/openfeature/sdk/NoOpProvider.java: Recompile with -Xlint:deprecation for details.
[INFO] /home/todd/git/java-sdk/src/main/java/dev/openfeature/sdk/Value.java: Some input files use unchecked or unsafe operations.
[INFO] /home/todd/git/java-sdk/src/main/java/dev/openfeature/sdk/Value.java: Recompile with -Xlint:unchecked for details.
[INFO]
[INFO] --- checkstyle:3.5.0:check (validate) @ sdk ---
[INFO] Starting audit...
Audit done.
[INFO] You have 0 Checkstyle violations.
[INFO]
[INFO] --- jacoco:0.8.12:prepare-agent (prepare-agent) @ sdk ---
[INFO] surefireArgLine set to -javaagent:/home/todd/.m2/repository/org/jacoco/org.jacoco.agent/0.8.12/org.jacoco.agent-0.8.12-runtime.jar=destfile=/home/todd/git/java-sdk/target/coverage-reports/jacoco-ut.exec
[INFO]
[INFO] --- resources:3.3.1:resources (default-resources) @ sdk ---
[INFO] skip non existing resourceDirectory /home/todd/git/java-sdk/src/main/resources
[INFO]
[INFO] --- compiler:3.13.0:compile (default-compile) @ sdk ---
[INFO] Nothing to compile - all classes are up to date.
[INFO]
[INFO] --- resources:3.3.1:testResources (default-testResources) @ sdk ---
[INFO] Copying 2 resources from src/test/resources to target/test-classes
[INFO]
[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ sdk ---
[INFO] Recompiling the module because of changed dependency.
[INFO] Compiling 52 source files with javac [debug target 1.8] to target/test-classes
[WARNING] bootstrap class path not set in conjunction with -source 8
[WARNING] source value 8 is obsolete and will be removed in a future release
[WARNING] target value 8 is obsolete and will be removed in a future release
[WARNING] To suppress warnings about obsolete options, use -Xlint:-options.
[INFO] Annotation processing is enabled because one or more processors were found
on the class path. A future release of javac may disable annotation processing
unless at least one processor is specified by name (-processor), or a search
path is specified (--processor-path, --processor-module-path), or annotation
processing is enabled explicitly (-proc:only, -proc:full).
Use -Xlint:-options to suppress this message.
Use -proc:none to disable annotation processing.
[INFO] /home/todd/git/java-sdk/src/test/java/dev/openfeature/sdk/EventsTest.java: Some input files use or override a deprecated API.
[INFO] /home/todd/git/java-sdk/src/test/java/dev/openfeature/sdk/EventsTest.java: Recompile with -Xlint:deprecation for details.
[INFO] /home/todd/git/java-sdk/src/test/java/dev/openfeature/sdk/HookSpecTest.java: Some input files use unchecked or unsafe operations.
[INFO] /home/todd/git/java-sdk/src/test/java/dev/openfeature/sdk/HookSpecTest.java: Recompile with -Xlint:unchecked for details.
[INFO]
[INFO] >>> jmh:0.2.2:benchmark (default-cli) > process-test-resources @ sdk >>>
[INFO]
[INFO] --- checkstyle:3.5.0:check (validate) @ sdk ---
[INFO] Starting audit...
Audit done.
[INFO] You have 0 Checkstyle violations.
[INFO]
[INFO] --- jacoco:0.8.12:prepare-agent (prepare-agent) @ sdk ---
[INFO] surefireArgLine set to -javaagent:/home/todd/.m2/repository/org/jacoco/org.jacoco.agent/0.8.12/org.jacoco.agent-0.8.12-runtime.jar=destfile=/home/todd/git/java-sdk/target/coverage-reports/jacoco-ut.exec
[INFO]
[INFO] --- resources:3.3.1:resources (default-resources) @ sdk ---
[INFO] skip non existing resourceDirectory /home/todd/git/java-sdk/src/main/resources
[INFO]
[INFO] --- compiler:3.13.0:compile (default-compile) @ sdk ---
[INFO] Nothing to compile - all classes are up to date.
[INFO]
[INFO] --- resources:3.3.1:testResources (default-testResources) @ sdk ---
[INFO] Copying 2 resources from src/test/resources to target/test-classes
[INFO]
[INFO] <<< jmh:0.2.2:benchmark (default-cli) < process-test-resources @ sdk <<<
[INFO]
[INFO]
[INFO] --- jmh:0.2.2:benchmark (default-cli) @ sdk ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 52 source files to /home/todd/git/java-sdk/target/test-classes
[INFO] /home/todd/git/java-sdk/src/test/java/dev/openfeature/sdk/LockingTest.java: Some input files use or override a deprecated API.
[INFO] /home/todd/git/java-sdk/src/test/java/dev/openfeature/sdk/LockingTest.java: Recompile with -Xlint:deprecation for details.
[INFO] /home/todd/git/java-sdk/src/test/java/dev/openfeature/sdk/internal/TriConsumerTest.java: Some input files use unchecked or unsafe operations.
[INFO] /home/todd/git/java-sdk/src/test/java/dev/openfeature/sdk/internal/TriConsumerTest.java: Recompile with -Xlint:unchecked for details.
[INFO] Executing the JMH benchmarks
# JMH version: 1.37
# VM version: JDK 21.0.4, OpenJDK 64-Bit Server VM, 21.0.4+7
# VM invoker: /usr/lib/jvm/java-21-openjdk/bin/java
# VM options: -Xmx1024m -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC
# Blackhole mode: compiler (auto-detected, use -Djmh.blackhole.autoDetect=false to disable)
# Warmup: <none>
# Measurement: 1 iterations, single-shot each
# Timeout: 10 min per iteration
# Threads: 1 thread
# Benchmark mode: Single shot invocation time
# Benchmark: dev.openfeature.sdk.benchmark.AllocationBenchmark.run
# Run progress: 0.00% complete, ETA 00:00:00
# Fork: 1 of 1
[0.001s][warning][gc,init] Consider setting -Xms equal to -Xmx to avoid resizing hiccups
[0.001s][warning][gc,init] Consider enabling -XX:+AlwaysPreTouch to avoid memory commit hiccups
Iteration 1: num #instances #bytes class name (module)
-------------------------------------------------------
1: 480234 23051232 java.util.HashMap (java.base@21.0.4)
2: 150497 12050088 [Ljava.util.HashMap$Node; (java.base@21.0.4)
3: 332017 10624544 java.util.HashMap$Node (java.base@21.0.4)
4: 47815 9732480 [B (java.base@21.0.4)
5: 305991 8105872 [Ljava.lang.Object; (java.base@21.0.4)
6: 366682 5866912 java.util.Optional (java.base@21.0.4)
7: 183332 5866624 java.util.HashMap$EntryIterator (java.base@21.0.4)
8: 172970 5535040 java.util.Collections$UnmodifiableMap (java.base@21.0.4)
9: 100000 4000000 dev.openfeature.sdk.HookContext
10: 100000 4000000 dev.openfeature.sdk.HookContext$HookContextBuilder
11: 230006 3680096 dev.openfeature.sdk.Value
12: 200062 3200992 java.util.HashMap$EntrySet (java.base@21.0.4)
13: 132870 3188880 java.util.ArrayList (java.base@21.0.4)
14: 192292 3076672 dev.openfeature.sdk.ImmutableStructure
15: 182292 2916672 dev.openfeature.sdk.ImmutableContext
16: 50000 2000000 dev.openfeature.sdk.FlagEvaluationDetails
17: 50000 2000000 dev.openfeature.sdk.ProviderEvaluation
18: 122968 1967488 java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet (java.base@21.0.4)
19: 149 1884376 [Ljdk.internal.vm.FillerElement; (java.base@21.0.4)
20: 56476 1807232 java.util.ArrayList$Itr (java.base@21.0.4)
21: 37481 1799088 dev.openfeature.sdk.FlagEvaluationDetails$FlagEvaluationDetailsBuilder
22: 100001 1600016 dev.openfeature.sdk.NoOpProvider$$Lambda/0x000076e79c02fa78
23: 50000 1600000 [Ldev.openfeature.sdk.EvaluationContext;
24: 50000 1600000 [Ljava.util.List; (java.base@21.0.4)
25: 100000 1600000 dev.openfeature.sdk.OpenFeatureClient$$Lambda/0x000076e79c082800
26: 36720 1468800 dev.openfeature.sdk.ProviderEvaluation$ProviderEvaluationBuilder
27: 87481 1399696 dev.openfeature.sdk.ImmutableMetadata
28: 50000 1200000 dev.openfeature.sdk.FlagEvaluationOptions
29: 74201 1187216 dev.openfeature.sdk.ImmutableMetadata$ImmutableMetadataBuilder
30: 73235 1171760 java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry (java.base@21.0.4)
31: 45869 1100856 java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$1 (java.base@21.0.4)
32: 43776 1050624 dev.openfeature.sdk.FlagEvaluationOptions$FlagEvaluationOptionsBuilder
33: 40016 960384 dev.openfeature.sdk.HookSupport$$Lambda/0x000076e79c081b78
34: 39967 959208 dev.openfeature.sdk.HookSupport$$Lambda/0x000076e79c081da8
35: 57783 924528 dev.openfeature.sdk.internal.AutoCloseableReentrantReadWriteLock$$Lambda/0x000076e79c02eae8
36: 4490 721440 [I (java.base@21.0.4)
37: 26594 638256 java.lang.String (java.base@21.0.4)
38: 1461 390008 [J (java.base@21.0.4)
39: 2361 288784 java.lang.Class (java.base@21.0.4)
40: 4632 259392 jdk.internal.org.objectweb.asm.SymbolTable$Entry (java.base@21.0.4)
41: 10001 240024 java.lang.Double (java.base@21.0.4)
42: 2502 180144 java.lang.reflect.Field (java.base@21.0.4)
43: 6007 144168 java.lang.StringBuilder (java.base@21.0.4)
44: 180 140968 [Ljdk.internal.org.objectweb.asm.SymbolTable$Entry; (java.base@21.0.4)
45: 3827 122464 java.util.concurrent.ConcurrentHashMap$Node (java.base@21.0.4)
46: 48 122168 [C (java.base@21.0.4)
47: 1440 113512 [S (java.base@21.0.4)
48: 1201 105688 java.lang.reflect.Method (java.base@21.0.4)
49: 3031 79600 [Ljava.lang.Class; (java.base@21.0.4)
50: 1351 75656 jdk.internal.org.objectweb.asm.Label (java.base@21.0.4)
51: 1561 74928 java.lang.invoke.MemberName (java.base@21.0.4)
52: 334 74816 jdk.internal.org.objectweb.asm.MethodWriter (java.base@21.0.4)
53: 1799 71960 java.lang.invoke.MethodType (java.base@21.0.4)
54: 1089 69696 java.net.URL (java.base@21.0.4)
55: 121 50512 [Ljava.util.concurrent.ConcurrentHashMap$Node; (java.base@21.0.4)
56: 3147 50352 jdk.internal.util.StrongReferenceKey (java.base@21.0.4)
57: 1057 42280 java.io.ObjectStreamField (java.base@21.0.4)
58: 1225 39200 java.io.File (java.base@21.0.4)
59: 779 37392 jdk.internal.org.objectweb.asm.Frame (java.base@21.0.4)
60: 243 25272 java.util.jar.JarFile$JarFileEntry (java.base@21.0.4)
61: 794 25248 [Ljava.lang.String; (java.base@21.0.4)
62: 622 24880 java.lang.NoSuchFieldException (java.base@21.0.4)
63: 571 22840 java.util.LinkedHashMap$Entry (java.base@21.0.4)
64: 474 22752 jdk.internal.ref.CleanerImpl$PhantomCleanableRef (java.base@21.0.4)
65: 690 22080 jdk.internal.util.WeakReferenceKey (java.base@21.0.4)
66: 828 19872 jdk.internal.org.objectweb.asm.ByteVector (java.base@21.0.4)
67: 248 18848 [Ljava.lang.ref.SoftReference; (java.base@21.0.4)
68: 118 17936 jdk.internal.org.objectweb.asm.ClassWriter (java.base@21.0.4)
69: 380 16824 [Ljava.lang.invoke.LambdaForm$Name; (java.base@21.0.4)
70: 625 15000 java.lang.Long (java.base@21.0.4)
71: 463 14816 java.lang.invoke.LambdaForm$Name (java.base@21.0.4)
72: 904 14464 java.lang.Object (java.base@21.0.4)
73: 198 14256 java.lang.reflect.Constructor (java.base@21.0.4)
74: 249 13944 java.util.zip.ZipFile$ZipFileInputStream (java.base@21.0.4)
75: 334 13360 jdk.internal.org.objectweb.asm.Handler (java.base@21.0.4)
76: 202 12928 java.util.concurrent.ConcurrentHashMap (java.base@21.0.4)
77: 201 12864 jdk.internal.org.objectweb.asm.FieldWriter (java.base@21.0.4)
78: 316 12640 java.util.WeakHashMap$Entry (java.base@21.0.4)
79: 102 12240 java.io.ObjectStreamClass (java.base@21.0.4)
80: 249 11952 java.util.zip.ZipFile$ZipFileInflaterInputStream (java.base@21.0.4)
81: 359 11488 jdk.internal.org.objectweb.asm.Type (java.base@21.0.4)
82: 465 11160 java.lang.invoke.ResolvedMethodName (java.base@21.0.4)
83: 464 11136 jdk.internal.org.objectweb.asm.Edge (java.base@21.0.4)
84: 341 10912 jdk.internal.math.FDBigInteger (java.base@21.0.4)
85: 94 10728 [Ljava.lang.reflect.Field; (java.base@21.0.4)
86: 266 10640 java.lang.NoSuchMethodException (java.base@21.0.4)
87: 266 10640 java.security.CodeSource (java.base@21.0.4)
88: 221 10608 java.lang.invoke.DirectMethodHandle$Constructor (java.base@21.0.4)
89: 264 10560 sun.security.util.KnownOIDs (java.base@21.0.4)
90: 75 10200 sun.nio.fs.UnixFileAttributes (java.base@21.0.4)
91: 245 9800 java.lang.ref.SoftReference (java.base@21.0.4)
92: 118 9440 jdk.internal.event.DeserializationEvent (java.base@21.0.4)
93: 115 9200 [Ljava.util.WeakHashMap$Entry; (java.base@21.0.4)
94: 368 8832 java.lang.module.ModuleDescriptor$Exports (java.base@21.0.4)
95: 63 8384 [Ljava.lang.invoke.MethodHandle; (java.base@21.0.4)
96: 146 8176 java.io.FileCleanable (java.base@21.0.4)
97: 125 8000 java.lang.Class$ReflectionData (java.base@21.0.4)
98: 323 7752 java.util.ImmutableCollections$Set12 (java.base@21.0.4)
99: 121 7744 jdk.internal.org.objectweb.asm.SymbolTable (java.base@21.0.4)
100: 70 7280 java.lang.invoke.InnerClassLambdaMetafactory (java.base@21.0.4)
101: 144 6912 jdk.internal.org.objectweb.asm.AnnotationWriter (java.base@21.0.4)
102: 167 6680 jdk.internal.loader.URLClassPath$JarLoader$2 (java.base@21.0.4)
103: 199 6368 java.lang.invoke.MethodHandles$Lookup (java.base@21.0.4)
104: 156 6240 java.util.StringJoiner (java.base@21.0.4)
105: 153 6120 java.io.FileDescriptor (java.base@21.0.4)
106: 126 6048 java.lang.invoke.LambdaForm (java.base@21.0.4)
107: 77 6016 [Ljava.lang.reflect.Method; (java.base@21.0.4)
108: 249 5976 java.util.zip.ZipFile$InflaterCleanupAction (java.base@21.0.4)
109: 373 5968 java.lang.Byte (java.base@21.0.4)
110: 74 5920 java.util.zip.ZipFile$Source (java.base@21.0.4)
111: 82 5720 [Ljava.io.ObjectStreamField; (java.base@21.0.4)
112: 40 5640 [Ljava.lang.ClassValue$Entry; (java.base@21.0.4)
113: 234 5616 java.util.jar.Attributes$Name (java.base@21.0.4)
114: 174 5568 java.util.concurrent.locks.ReentrantLock$NonfairSync (java.base@21.0.4)
115: 98 5488 java.lang.Module (java.base@21.0.4)
116: 219 5256 java.lang.PublicMethods$MethodList (java.base@21.0.4)
117: 65 5200 java.net.URI (java.base@21.0.4)
118: 215 5104 [Ljdk.internal.org.objectweb.asm.Type; (java.base@21.0.4)
truncated...
Total 4452140 139359040
0.186 s/op
+totalAllocatedBytes: 139359040.000 bytes
+totalAllocatedInstances: 4452140.000 instances
+totalHeap: 521412608.000 bytes
Secondary result "dev.openfeature.sdk.benchmark.AllocationBenchmark.run:+totalAllocatedBytes":
139359040.000 bytes
Secondary result "dev.openfeature.sdk.benchmark.AllocationBenchmark.run:+totalAllocatedInstances":
4452140.000 instances
Secondary result "dev.openfeature.sdk.benchmark.AllocationBenchmark.run:+totalHeap":
521412608.000 bytes
# Run complete. Total time: 00:00:00
REMEMBER: The numbers below are just data. To gain reusable insights, you need to follow up on
why the numbers are the way they are. Use profilers (see -prof, -lprof), design factorial
experiments, perform baseline and negative tests that provide experimental control, make sure
the benchmarking environment is safe on JVM/OS/HW level, ask for reviews from the domain experts.
Do not assume the numbers tell you what you want them to tell.
NOTE: Current JVM experimentally supports Compiler Blackholes, and they are in use. Please exercise
extra caution when trusting the results, look into the generated code to check the benchmark still
works, and factor in a small probability of new VM bugs. Additionally, while comparisons between
different JVMs are already problematic, the performance difference caused by different Blackhole
modes can be very significant. Please make sure you use the consistent Blackhole mode for comparisons.
Benchmark Mode Cnt Score Error Units
AllocationBenchmark.run ss 0.186 s/op
AllocationBenchmark.run:+totalAllocatedBytes ss 139359040.000 bytes
AllocationBenchmark.run:+totalAllocatedInstances ss 4452140.000 instances
AllocationBenchmark.run:+totalHeap ss 521412608.000 bytes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.280 s
[INFO] Finished at: 2024-10-23T12:37:24-04:00
[INFO] ------------------------------------------------------------------------

View File

@ -0,0 +1,7 @@
<?xml version="1.0"?>
<!DOCTYPE suppressions PUBLIC "-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN" "https://checkstyle.org/dtds/suppressions_1_2.dtd">
<suppressions>
<!-- checkstyle suppressions can go here -->
</suppressions>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
"https://checkstyle.org/dtds/configuration_1_3.dtd">
"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
"https://checkstyle.org/dtds/configuration_1_3.dtd">
<!--
Checkstyle configuration that checks the Google coding conventions from Google Java Style
@ -13,17 +13,18 @@
To completely disable a check, just comment it out or delete it from the file.
To suppress certain violations please review suppression filters.
Authors: Max Vetrenko, Ruslan Diachenko, Roman Ivanov.
Authors: Max Vetrenko, Mauryan Kansara, Ruslan Diachenko, Roman Ivanov.
-->
<module name = "Checker">
<module name="Checker">
<property name="charset" value="UTF-8"/>
<property name="severity" value="error"/>
<property name="fileExtensions" value="java, properties, xml"/>
<!-- Excludes all 'module-info.java' files -->
<!-- See https://checkstyle.org/config_filefilters.html -->
<!-- See https://checkstyle.org/filefilters/index.html -->
<module name="BeforeExecutionExclusionFileFilter">
<property name="fileNamePattern" value="module\-info\.java$"/>
</module>
@ -34,8 +35,16 @@
<property name="optional" value="true"/>
</module>
<!-- https://checkstyle.org/filters/suppresswithnearbytextfilter.html -->
<!--<module name="SuppressWithNearbyTextFilter">
<property name="nearbyTextPattern"
value="CHECKSTYLE.SUPPRESS\: (\w+) for ([+-]\d+) lines"/>
<property name="checkPattern" value="$1"/>
<property name="lineRange" value="$2"/>
</module>-->
<!-- Checks for whitespace -->
<!-- See http://checkstyle.org/config_whitespace.html -->
<!-- See http://checkstyle.org/checks/whitespace/index.html -->
<module name="FileTabCharacter">
<property name="eachLine" value="true"/>
</module>
@ -46,53 +55,90 @@
<property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
</module>
<module name="SuppressWarningsFilter" />
<module name="TreeWalker">
<!-- needed for SuppressWarningsFilter -->
<module name="SuppressWarningsHolder" />
<module name="SuppressWarnings">
<property name="id" value="checkstyle:suppresswarnings"/>
</module>
<!-- https://checkstyle.org/config_filters.html#SuppressionXpathFilter -->
<module name="SuppressionXpathFilter">
<property name="file" value="${org.checkstyle.google.suppressionxpathfilter.config}"
default="checkstyle-xpath-suppressions.xml" />
<property name="optional" value="true"/>
</module>
<module name="UnusedImports"/>
<module name="OuterTypeFilename"/>
<module name="IllegalTokenText">
<property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
<property name="format"
value="\\u00(09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/>
value="\\u00(09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/>
<property name="message"
value="Consider using special escape sequence instead of octal value or Unicode escaped value."/>
value="Consider using special escape sequence instead of octal value or Unicode escaped value."/>
</module>
<module name="AvoidEscapedUnicodeCharacters">
<property name="allowEscapesForControlCharacters" value="true"/>
<property name="allowByTailComment" value="true"/>
<property name="allowNonPrintableEscapes" value="true"/>
</module>
<module name="AvoidStarImport"/>
<module name="OneTopLevelClass"/>
<module name="NoLineWrap">
<property name="tokens" value="PACKAGE_DEF, IMPORT, STATIC_IMPORT"/>
</module>
<module name="EmptyBlock">
<property name="option" value="TEXT"/>
<property name="tokens"
value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
</module>
<module name="NeedBraces">
<property name="tokens"
value="LITERAL_DO, LITERAL_ELSE, LITERAL_FOR, LITERAL_IF, LITERAL_WHILE"/>
value="LITERAL_DO, LITERAL_ELSE, LITERAL_FOR, LITERAL_IF, LITERAL_WHILE"/>
</module>
<module name="LeftCurly">
<property name="id" value="LeftCurlyEol"/>
<property name="tokens"
value="ANNOTATION_DEF, CLASS_DEF, CTOR_DEF, ENUM_CONSTANT_DEF, ENUM_DEF,
INTERFACE_DEF, LAMBDA, LITERAL_CASE, LITERAL_CATCH, LITERAL_DEFAULT,
LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF,
LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, METHOD_DEF,
OBJBLOCK, STATIC_INIT"/>
value="ANNOTATION_DEF, CLASS_DEF, CTOR_DEF, ENUM_CONSTANT_DEF, ENUM_DEF,
INTERFACE_DEF, LITERAL_CATCH,
LITERAL_DO, LITERAL_ELSE, LITERAL_FOR, LITERAL_IF,
LITERAL_WHILE, METHOD_DEF,
OBJBLOCK, STATIC_INIT, RECORD_DEF, COMPACT_CTOR_DEF"/>
</module>
<module name="LeftCurly">
<property name="id" value="LeftCurlyNl"/>
<property name="option" value="nl"/>
<property name="tokens"
value=" LITERAL_DEFAULT"/>
</module>
<module name="SuppressionXpathSingleFilter">
<!-- LITERAL_DEFAULT are reused in SWITCH_RULE -->
<property name="id" value="LeftCurlyNl"/>
<property name="query" value="//SWITCH_RULE/SLIST"/>
</module>
<module name="RightCurly">
<property name="id" value="RightCurlySame"/>
<property name="tokens"
value="LITERAL_TRY, LITERAL_CATCH, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE,
value="LITERAL_IF, LITERAL_ELSE,
LITERAL_DO"/>
</module>
<module name="RightCurly">
<property name="id" value="RightCurlyAlone"/>
<property name="option" value="alone"/>
<property name="tokens"
value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, STATIC_INIT,
INSTANCE_INIT, ANNOTATION_DEF, ENUM_DEF"/>
value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, STATIC_INIT,
INSTANCE_INIT, ANNOTATION_DEF, ENUM_DEF, INTERFACE_DEF, RECORD_DEF,
COMPACT_CTOR_DEF"/>
</module>
<module name="SuppressionXpathSingleFilter">
<!-- suppression is required till https://github.com/checkstyle/checkstyle/issues/7541 -->
<property name="id" value="RightCurlyAlone"/>
<property name="query" value="//RCURLY[parent::SLIST[count(./*)=1]
or preceding-sibling::*[last()][self::LCURLY]]"/>
</module>
<module name="WhitespaceAfter">
<property name="tokens"
value="COMMA, SEMI, TYPECAST, LITERAL_IF, LITERAL_ELSE,
LITERAL_WHILE, LITERAL_DO, LITERAL_FOR, DO_WHILE"/>
</module>
<module name="WhitespaceAround">
<property name="allowEmptyConstructors" value="true"/>
@ -100,18 +146,35 @@
<property name="allowEmptyMethods" value="true"/>
<property name="allowEmptyTypes" value="true"/>
<property name="allowEmptyLoops" value="true"/>
<!--<property name="allowEmptySwitchBlockStatements" value="true"/>-->
<property name="ignoreEnhancedForColon" value="false"/>
<property name="tokens"
value="ASSIGN, BAND, BAND_ASSIGN, BOR, BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR,
BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN, DO_WHILE, EQUAL, GE, GT, LAMBDA, LAND,
LCURLY, LE, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY,
LITERAL_FOR, LITERAL_IF, LITERAL_RETURN, LITERAL_SWITCH, LITERAL_SYNCHRONIZED,
LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS, MINUS_ASSIGN, MOD, MOD_ASSIGN,
NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION, RCURLY, SL, SLIST, SL_ASSIGN, SR,
SR_ASSIGN, STAR, STAR_ASSIGN, LITERAL_ASSERT, TYPE_EXTENSION_AND"/>
value="ASSIGN, BAND, BAND_ASSIGN, BOR, BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR,
BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN, DO_WHILE, EQUAL, GE, GT, LAND,
LCURLY, LE, LITERAL_DO, LITERAL_ELSE,
LITERAL_FOR, LITERAL_IF,
LITERAL_WHILE, LOR, LT, MINUS, MINUS_ASSIGN, MOD, MOD_ASSIGN,
NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION, RCURLY, SL, SLIST, SL_ASSIGN, SR,
SR_ASSIGN, STAR, STAR_ASSIGN, LITERAL_ASSERT,
TYPE_EXTENSION_AND"/>
<message key="ws.notFollowed"
value="WhitespaceAround: ''{0}'' is not followed by whitespace. Empty blocks may only be represented as '{}' when not part of a multi-block statement (4.1.3)"/>
value="WhitespaceAround: ''{0}'' is not followed by whitespace. Empty blocks
may only be represented as '{}' when not part of a multi-block statement (4.1.3)"/>
<message key="ws.notPreceded"
value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/>
value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/>
</module>
<module name="SuppressionXpathSingleFilter">
<property name="checks" value="WhitespaceAround"/>
<property name="query" value="//*[self::LITERAL_IF or self::LITERAL_ELSE or self::STATIC_INIT
or self::LITERAL_TRY or self::LITERAL_CATCH]/SLIST[count(./*)=1]
| //*[self::STATIC_INIT or self::LITERAL_TRY or self::LITERAL_IF]
//*[self::RCURLY][parent::SLIST[count(./*)=1]]"/>
</module>
<module name="RegexpSinglelineJava">
<property name="format" value="\{[ ]+\}"/>
<property name="message" value="Empty blocks should have no spaces. Empty blocks
may only be represented as '{}' when not part of a
multi-block statement (4.1.3)"/>
</module>
<module name="OneStatementPerLine"/>
<module name="MultipleVariableDeclarations"/>
@ -122,8 +185,9 @@
<module name="ModifierOrder"/>
<module name="EmptyLineSeparator">
<property name="tokens"
value="PACKAGE_DEF, IMPORT, STATIC_IMPORT, CLASS_DEF, INTERFACE_DEF, ENUM_DEF,
STATIC_INIT, INSTANCE_INIT, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
value="PACKAGE_DEF, IMPORT, STATIC_IMPORT, CLASS_DEF, INTERFACE_DEF, ENUM_DEF,
STATIC_INIT, INSTANCE_INIT, METHOD_DEF, CTOR_DEF, VARIABLE_DEF, RECORD_DEF,
COMPACT_CTOR_DEF"/>
<property name="allowNoEmptyLineBetweenFields" value="true"/>
</module>
<module name="SeparatorWrap">
@ -137,13 +201,13 @@
<property name="option" value="EOL"/>
</module>
<module name="SeparatorWrap">
<!-- ELLIPSIS is EOL until https://github.com/google/styleguide/issues/258 -->
<!-- ELLIPSIS is EOL until https://github.com/google/styleguide/issues/259 -->
<property name="id" value="SeparatorWrapEllipsis"/>
<property name="tokens" value="ELLIPSIS"/>
<property name="option" value="EOL"/>
</module>
<module name="SeparatorWrap">
<!-- ARRAY_DECLARATOR is EOL until https://github.com/google/styleguide/issues/259 -->
<!-- ARRAY_DECLARATOR is EOL until https://github.com/google/styleguide/issues/258 -->
<property name="id" value="SeparatorWrapArrayDeclarator"/>
<property name="tokens" value="ARRAY_DECLARATOR"/>
<property name="option" value="EOL"/>
@ -156,22 +220,23 @@
<module name="PackageName">
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
<message key="name.invalidPattern"
value="Package name ''{0}'' must match pattern ''{1}''."/>
value="Package name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="TypeName">
<property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, ANNOTATION_DEF"/>
<property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF,
ANNOTATION_DEF, RECORD_DEF"/>
<message key="name.invalidPattern"
value="Type name ''{0}'' must match pattern ''{1}''."/>
value="Type name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="MemberName">
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
<message key="name.invalidPattern"
value="Member name ''{0}'' must match pattern ''{1}''."/>
value="Member name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="ParameterName">
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
<message key="name.invalidPattern"
value="Parameter name ''{0}'' must match pattern ''{1}''."/>
value="Parameter name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="LambdaParameterName">
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
@ -181,38 +246,53 @@
<module name="CatchParameterName">
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
<message key="name.invalidPattern"
value="Catch parameter name ''{0}'' must match pattern ''{1}''."/>
value="Catch parameter name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="LocalVariableName">
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
<message key="name.invalidPattern"
value="Local variable name ''{0}'' must match pattern ''{1}''."/>
value="Local variable name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="PatternVariableName">
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
<message key="name.invalidPattern"
value="Pattern variable name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="ClassTypeParameterName">
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
<message key="name.invalidPattern"
value="Class type name ''{0}'' must match pattern ''{1}''."/>
value="Class type name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="RecordComponentName">
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
<message key="name.invalidPattern"
value="Record component name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="RecordTypeParameterName">
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
<message key="name.invalidPattern"
value="Record type name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="MethodTypeParameterName">
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
<message key="name.invalidPattern"
value="Method type name ''{0}'' must match pattern ''{1}''."/>
value="Method type name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="InterfaceTypeParameterName">
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
<message key="name.invalidPattern"
value="Interface type name ''{0}'' must match pattern ''{1}''."/>
value="Interface type name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="NoFinalizer"/>
<module name="GenericWhitespace">
<message key="ws.followed"
value="GenericWhitespace ''{0}'' is followed by whitespace."/>
value="GenericWhitespace ''{0}'' is followed by whitespace."/>
<message key="ws.preceded"
value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
<message key="ws.illegalFollow"
value="GenericWhitespace ''{0}'' should followed by whitespace."/>
value="GenericWhitespace ''{0}'' should followed by whitespace."/>
<message key="ws.notPreceded"
value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
</module>
<module name="Indentation">
<property name="basicOffset" value="4"/>
@ -222,44 +302,62 @@
<property name="lineWrappingIndentation" value="4"/>
<property name="arrayInitIndent" value="4"/>
</module>
<!-- Suppression for block code until we find a way to detect them properly
until https://github.com/checkstyle/checkstyle/issues/15769 -->
<module name="SuppressionXpathSingleFilter">
<property name="checks" value="Indentation"/>
<property name="query" value="//SLIST[not(parent::CASE_GROUP)]/SLIST
| //SLIST[not(parent::CASE_GROUP)]/SLIST/RCURLY"/>
</module>
<module name="AbbreviationAsWordInName">
<property name="ignoreFinal" value="false"/>
<property name="ignoreFinal" value="true"/>
<property name="allowedAbbreviations" value="API" />
<property name="allowedAbbreviationLength" value="1"/>
<property name="tokens"
value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, ANNOTATION_DEF, ANNOTATION_FIELD_DEF,
PARAMETER_DEF, VARIABLE_DEF, METHOD_DEF"/>
value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, ANNOTATION_DEF, ANNOTATION_FIELD_DEF,
PARAMETER_DEF, VARIABLE_DEF, METHOD_DEF, PATTERN_VARIABLE_DEF, RECORD_DEF,
RECORD_COMPONENT_DEF"/>
</module>
<module name="NoWhitespaceBeforeCaseDefaultColon"/>
<module name="OverloadMethodsDeclarationOrder"/>
<!--<module name="ConstructorsDeclarationGrouping"/>-->
<module name="VariableDeclarationUsageDistance"/>
<module name="CustomImportOrder">
<property name="sortImportsInGroupAlphabetically" value="true"/>
<property name="separateLineBetweenGroups" value="true"/>
<property name="customImportOrderRules" value="STATIC###THIRD_PARTY_PACKAGE"/>
<property name="tokens" value="IMPORT, STATIC_IMPORT, PACKAGE_DEF"/>
</module>
<module name="MethodParamPad">
<property name="tokens"
value="CTOR_DEF, LITERAL_NEW, METHOD_CALL, METHOD_DEF,
value="CTOR_DEF, LITERAL_NEW, METHOD_CALL, METHOD_DEF,
SUPER_CTOR_CALL, ENUM_CONSTANT_DEF"/>
</module>
<module name="NoWhitespaceBefore">
<property name="tokens"
value="COMMA, SEMI, POST_INC, POST_DEC, DOT, ELLIPSIS, METHOD_REF"/>
value="COMMA, SEMI, POST_INC, POST_DEC, DOT,
LABELED_STAT, METHOD_REF"/>
<property name="allowLineBreaks" value="true"/>
</module>
<module name="ParenPad">
<property name="tokens"
value="ANNOTATION, ANNOTATION_FIELD_DEF, CTOR_CALL, CTOR_DEF, DOT, ENUM_CONSTANT_DEF,
EXPR, LITERAL_CATCH, LITERAL_DO, LITERAL_FOR, LITERAL_IF, LITERAL_NEW,
LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_WHILE, METHOD_CALL,
METHOD_DEF, QUESTION, RESOURCE_SPECIFICATION, SUPER_CTOR_CALL, LAMBDA"/>
value="ANNOTATION, ANNOTATION_FIELD_DEF, CTOR_DEF, DOT, ENUM_CONSTANT_DEF,
EXPR, LITERAL_DO, LITERAL_FOR, LITERAL_IF, LITERAL_NEW,
LITERAL_WHILE, METHOD_CALL,
METHOD_DEF, QUESTION, RESOURCE_SPECIFICATION, SUPER_CTOR_CALL"/>
</module>
<module name="OperatorWrap">
<property name="option" value="NL"/>
<property name="tokens"
value="BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR,
LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR, METHOD_REF "/>
value="BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR,
LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR, METHOD_REF,
TYPE_EXTENSION_AND "/>
</module>
<module name="AnnotationLocation">
<property name="id" value="AnnotationLocationMostCases"/>
<property name="tokens"
value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"/>
<property name="allowSamelineMultipleAnnotations" value="true"/>
value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF,
RECORD_DEF, COMPACT_CTOR_DEF"/>
</module>
<module name="AnnotationLocation">
<property name="id" value="AnnotationLocationVariables"/>
@ -271,47 +369,83 @@
<module name="JavadocTagContinuationIndentation"/>
<module name="SummaryJavadoc">
<property name="forbiddenSummaryFragments"
value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"/>
value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"/>
</module>
<module name="JavadocParagraph"/>
<module name="JavadocParagraph">
</module>
<module name="RequireEmptyLineBeforeBlockTagGroup"/>
<module name="AtclauseOrder">
<property name="tagOrder" value="@param, @return, @throws, @deprecated"/>
<property name="target"
value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
</module>
<module name="JavadocMethod">
<property name="scope" value="public"/>
<property name="accessModifiers" value="public"/>
<property name="allowMissingParamTags" value="true"/>
<property name="allowMissingReturnTag" value="true"/>
<property name="allowedAnnotations" value="Override, Test"/>
<property name="tokens" value="METHOD_DEF, CTOR_DEF, ANNOTATION_FIELD_DEF"/>
<property name="tokens" value="METHOD_DEF, CTOR_DEF, ANNOTATION_FIELD_DEF, COMPACT_CTOR_DEF"/>
</module>
<module name="MissingJavadocMethod">
<property name="scope" value="public"/>
<property name="minLineCount" value="2"/>
<property name="allowMissingPropertyJavadoc" value="true"/>
<property name="allowedAnnotations" value="Override, Test"/>
<property name="tokens" value="METHOD_DEF, CTOR_DEF, ANNOTATION_FIELD_DEF"/>
<property name="tokens" value="METHOD_DEF, CTOR_DEF, ANNOTATION_FIELD_DEF,
COMPACT_CTOR_DEF"/>
</module>
<module name="SuppressionXpathSingleFilter">
<property name="checks" value="MissingJavadocMethod"/>
<property name="query" value="//*[self::METHOD_DEF or self::CTOR_DEF
or self::ANNOTATION_FIELD_DEF or self::COMPACT_CTOR_DEF]
[ancestor::*[self::INTERFACE_DEF or self::CLASS_DEF
or self::RECORD_DEF or self::ENUM_DEF]
[not(./MODIFIERS/LITERAL_PUBLIC)]]"/>
</module>
<module name="MissingJavadocType">
<property name="scope" value="protected"/>
<property name="tokens"
value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF,
RECORD_DEF, ANNOTATION_DEF"/>
<property name="excludeScope" value="nothing"/>
</module>
<module name="MethodName">
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$"/>
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
<message key="name.invalidPattern"
value="Method name ''{0}'' must match pattern ''{1}''."/>
value="Method name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="SingleLineJavadoc">
<property name="ignoreInlineTags" value="false"/>
<module name="SuppressionXpathSingleFilter">
<property name="checks" value="MethodName"/>
<property name="query" value="//METHOD_DEF[
./MODIFIERS/ANNOTATION//IDENT[contains(@text, 'Test')]
]/IDENT"/>
<property name="message" value="'[a-z][a-z0-9][a-zA-Z0-9]*(?:_[a-z][a-z0-9][a-zA-Z0-9]*)*'"/>
</module>
<module name="SingleLineJavadoc"/>
<module name="EmptyCatchBlock">
<property name="exceptionVariableName" value="expected"/>
</module>
<module name="CommentsIndentation">
<property name="tokens" value="SINGLE_LINE_COMMENT, BLOCK_COMMENT_BEGIN"/>
</module>
<!-- https://checkstyle.org/config_filters.html#SuppressionXpathFilter -->
<!-- https://checkstyle.org/filters/suppressionxpathfilter.html -->
<module name="SuppressionXpathFilter">
<property name="file" value="${org.checkstyle.google.suppressionxpathfilter.config}"
default="checkstyle-xpath-suppressions.xml" />
<property name="optional" value="true"/>
</module>
<module name="SuppressWarningsHolder" />
<module name="SuppressionCommentFilter">
<property name="offCommentFormat" value="CHECKSTYLE.OFF\: ([\w\|]+)" />
<property name="onCommentFormat" value="CHECKSTYLE.ON\: ([\w\|]+)" />
<property name="checkFormat" value="$1" />
</module>
<module name="SuppressWithNearbyCommentFilter">
<property name="commentFormat" value="CHECKSTYLE.SUPPRESS\: ([\w\|]+)"/>
<!-- $1 refers to the first match group in the regex defined in commentFormat -->
<property name="checkFormat" value="$1"/>
<!-- The check is suppressed in the next line of code after the comment -->
<property name="influenceFormat" value="1"/>
</module>
</module>
</module>

11
docs/release.md Normal file
View File

@ -0,0 +1,11 @@
# Releases
This repo uses _Release Please_ to release packages. Release Please sets up a running PR that tracks all changes in the library, and maintains the versions according to [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/), generated when [PRs are merged](https://github.com/amannn/action-semantic-pull-request), based on the PR title. The semantics of the PR title are enforced by the `lint-pr.yml` workflow. When Release Please's running PR is merged, a new release is created, and the associated artifacts are published.
## Customization of changelog and release notes.
If you'd like to add custom content to a release, you can do this by editing the content in a Release Please PR's description. This content will be added to the notes for that release. If you'd like to add content to the changelog, simply push updates to the changelog in the Release Please PR.
## Configuration
The `release-please-config.json` defines the release please configuration. See schema [here](https://github.com/googleapis/release-please/blob/main/schemas/config.json) to understand all the options. We use the "simple" release strategy and annotate the POM with an element to help release please find the correct XML entity to update (the version element). Release Please stores it's understanding of the current version in the `version.txt` file.

259
mvnw vendored Normal file
View File

@ -0,0 +1,259 @@
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Apache Maven Wrapper startup batch script, version 3.3.2
#
# Optional ENV vars
# -----------------
# JAVA_HOME - location of a JDK home dir, required when download maven via java source
# MVNW_REPOURL - repo url base for downloading maven distribution
# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
# ----------------------------------------------------------------------------
set -euf
[ "${MVNW_VERBOSE-}" != debug ] || set -x
# OS specific support.
native_path() { printf %s\\n "$1"; }
case "$(uname)" in
CYGWIN* | MINGW*)
[ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")"
native_path() { cygpath --path --windows "$1"; }
;;
esac
# set JAVACMD and JAVACCMD
set_java_home() {
# For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
if [ -n "${JAVA_HOME-}" ]; then
if [ -x "$JAVA_HOME/jre/sh/java" ]; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
JAVACCMD="$JAVA_HOME/jre/sh/javac"
else
JAVACMD="$JAVA_HOME/bin/java"
JAVACCMD="$JAVA_HOME/bin/javac"
if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then
echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2
echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2
return 1
fi
fi
else
JAVACMD="$(
'set' +e
'unset' -f command 2>/dev/null
'command' -v java
)" || :
JAVACCMD="$(
'set' +e
'unset' -f command 2>/dev/null
'command' -v javac
)" || :
if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then
echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2
return 1
fi
fi
}
# hash string like Java String::hashCode
hash_string() {
str="${1:-}" h=0
while [ -n "$str" ]; do
char="${str%"${str#?}"}"
h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296))
str="${str#?}"
done
printf %x\\n $h
}
verbose() { :; }
[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; }
die() {
printf %s\\n "$1" >&2
exit 1
}
trim() {
# MWRAPPER-139:
# Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
# Needed for removing poorly interpreted newline sequences when running in more
# exotic environments such as mingw bash on Windows.
printf "%s" "${1}" | tr -d '[:space:]'
}
# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
while IFS="=" read -r key value; do
case "${key-}" in
distributionUrl) distributionUrl=$(trim "${value-}") ;;
distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
esac
done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties"
[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties"
case "${distributionUrl##*/}" in
maven-mvnd-*bin.*)
MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/
case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in
*AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;;
:Darwin*x86_64) distributionPlatform=darwin-amd64 ;;
:Darwin*arm64) distributionPlatform=darwin-aarch64 ;;
:Linux*x86_64*) distributionPlatform=linux-amd64 ;;
*)
echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2
distributionPlatform=linux-amd64
;;
esac
distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
;;
maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
esac
# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}"
distributionUrlName="${distributionUrl##*/}"
distributionUrlNameMain="${distributionUrlName%.*}"
distributionUrlNameMain="${distributionUrlNameMain%-bin}"
MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}"
MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")"
exec_maven() {
unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD"
}
if [ -d "$MAVEN_HOME" ]; then
verbose "found existing MAVEN_HOME at $MAVEN_HOME"
exec_maven "$@"
fi
case "${distributionUrl-}" in
*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;;
*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;;
esac
# prepare tmp dir
if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then
clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; }
trap clean HUP INT TERM EXIT
else
die "cannot create temp dir"
fi
mkdir -p -- "${MAVEN_HOME%/*}"
# Download and Install Apache Maven
verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
verbose "Downloading from: $distributionUrl"
verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
# select .zip or .tar.gz
if ! command -v unzip >/dev/null; then
distributionUrl="${distributionUrl%.zip}.tar.gz"
distributionUrlName="${distributionUrl##*/}"
fi
# verbose opt
__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR=''
[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v
# normalize http auth
case "${MVNW_PASSWORD:+has-password}" in
'') MVNW_USERNAME='' MVNW_PASSWORD='' ;;
has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;;
esac
if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then
verbose "Found wget ... using wget"
wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl"
elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then
verbose "Found curl ... using curl"
curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl"
elif set_java_home; then
verbose "Falling back to use Java to download"
javaSource="$TMP_DOWNLOAD_DIR/Downloader.java"
targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName"
cat >"$javaSource" <<-END
public class Downloader extends java.net.Authenticator
{
protected java.net.PasswordAuthentication getPasswordAuthentication()
{
return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
}
public static void main( String[] args ) throws Exception
{
setDefault( new Downloader() );
java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
}
}
END
# For Cygwin/MinGW, switch paths to Windows format before running javac and java
verbose " - Compiling Downloader.java ..."
"$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java"
verbose " - Running Downloader.java ..."
"$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")"
fi
# If specified, validate the SHA-256 sum of the Maven distribution zip file
if [ -n "${distributionSha256Sum-}" ]; then
distributionSha256Result=false
if [ "$MVN_CMD" = mvnd.sh ]; then
echo "Checksum validation is not supported for maven-mvnd." >&2
echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
exit 1
elif command -v sha256sum >/dev/null; then
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then
distributionSha256Result=true
fi
elif command -v shasum >/dev/null; then
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then
distributionSha256Result=true
fi
else
echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
exit 1
fi
if [ $distributionSha256Result = false ]; then
echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2
echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2
exit 1
fi
fi
# unzip and move
if command -v unzip >/dev/null; then
unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip"
else
tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
fi
printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url"
mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
clean || :
exec_maven "$@"

149
mvnw.cmd vendored Normal file
View File

@ -0,0 +1,149 @@
<# : batch portion
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Apache Maven Wrapper startup batch script, version 3.3.2
@REM
@REM Optional ENV vars
@REM MVNW_REPOURL - repo url base for downloading maven distribution
@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output
@REM ----------------------------------------------------------------------------
@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0)
@SET __MVNW_CMD__=
@SET __MVNW_ERROR__=
@SET __MVNW_PSMODULEP_SAVE=%PSModulePath%
@SET PSModulePath=
@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @(
IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B)
)
@SET PSModulePath=%__MVNW_PSMODULEP_SAVE%
@SET __MVNW_PSMODULEP_SAVE=
@SET __MVNW_ARG0_NAME__=
@SET MVNW_USERNAME=
@SET MVNW_PASSWORD=
@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*)
@echo Cannot start maven from wrapper >&2 && exit /b 1
@GOTO :EOF
: end batch / begin powershell #>
$ErrorActionPreference = "Stop"
if ($env:MVNW_VERBOSE -eq "true") {
$VerbosePreference = "Continue"
}
# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties
$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl
if (!$distributionUrl) {
Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
}
switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) {
"maven-mvnd-*" {
$USE_MVND = $true
$distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip"
$MVN_CMD = "mvnd.cmd"
break
}
default {
$USE_MVND = $false
$MVN_CMD = $script -replace '^mvnw','mvn'
break
}
}
# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
if ($env:MVNW_REPOURL) {
$MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" }
$distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')"
}
$distributionUrlName = $distributionUrl -replace '^.*/',''
$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''
$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain"
if ($env:MAVEN_USER_HOME) {
$MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain"
}
$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"
if (Test-Path -Path "$MAVEN_HOME" -PathType Container) {
Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME"
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
exit $?
}
if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) {
Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl"
}
# prepare tmp dir
$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile
$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir"
$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null
trap {
if ($TMP_DOWNLOAD_DIR.Exists) {
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
}
}
New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null
# Download and Install Apache Maven
Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
Write-Verbose "Downloading from: $distributionUrl"
Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
$webclient = New-Object System.Net.WebClient
if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) {
$webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD)
}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null
# If specified, validate the SHA-256 sum of the Maven distribution zip file
$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum
if ($distributionSha256Sum) {
if ($USE_MVND) {
Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties."
}
Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash
if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) {
Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property."
}
}
# unzip and move
Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null
Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null
try {
Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null
} catch {
if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) {
Write-Error "fail to move MAVEN_HOME"
}
} finally {
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
}
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"

1054
pom.xml

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,73 @@
{
"bootstrap-sha": "d7b591c9f910afad303d6d814f65c7f9dab33b89",
"signoff": "OpenFeature Bot <109696520+openfeaturebot@users.noreply.github.com>",
"packages": {
".": {
"package-name": "dev.openfeature.sdk",
"monorepo-tags": false,
"release-type": "simple",
"include-component-in-tag": false,
"bump-minor-pre-major": true,
"bump-patch-for-minor-pre-major": true,
"versioning": "default",
"extra-files": [
"pom.xml",
"README.md"
],
"changelog-sections": [
{
"type": "fix",
"section": "🐛 Bug Fixes"
},
{
"type": "feat",
"section": "✨ New Features"
},
{
"type": "chore",
"section": "🧹 Chore"
},
{
"type": "docs",
"section": "📚 Documentation"
},
{
"type": "perf",
"section": "🚀 Performance"
},
{
"type": "build",
"hidden": true,
"section": "🛠️ Build"
},
{
"type": "deps",
"section": "📦 Dependencies"
},
{
"type": "ci",
"hidden": true,
"section": "🚦 CI"
},
{
"type": "refactor",
"section": "🔄 Refactoring"
},
{
"type": "revert",
"section": "🔙 Reverts"
},
{
"type": "style",
"hidden": true,
"section": "🎨 Styling"
},
{
"type": "test",
"hidden": true,
"section": "🧪 Tests"
}
]
}
}
}

View File

@ -5,5 +5,10 @@
<username>${env.OSSRH_USERNAME}</username>
<password>${env.OSSRH_PASSWORD}</password>
</server>
<server>
<id>central</id>
<username>${env.CENTRAL_USERNAME}</username>
<password>${env.CENTRAL_PASSWORD}</password>
</server>
</servers>
</settings>

25
renovate.json Normal file
View File

@ -0,0 +1,25 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:base"
],
"packageRules": [
{
"matchUpdateTypes": ["minor", "patch"],
"matchCurrentVersion": "!/^0/",
"automerge": true
},
{
"matchManagers": ["github-actions"],
"automerge": true
}
],
"regexManagers": [
{
"fileMatch": ["^README.md$", "^.github/workflows/pullrequest.yml$"],
"matchStrings": ["ghcr\\.io\\/open-feature\\/flagd-testbed:(?<currentValue>.*?)\\n"],
"depNameTemplate": "open-feature/test-harness",
"datasourceTemplate": "github-releases"
}
]
}

1
spec Submodule

@ -0,0 +1 @@
Subproject commit d4a9a910946eded57cf82d6fd4921785a5e64c2b

View File

@ -1,111 +0,0 @@
#!/usr/bin/env python
import urllib.request
import json
import re
import difflib
import os
import sys
def _demarkdown(t):
return t.replace('**', '').replace('`', '').replace('"', '')
def get_spec(force_refresh=False):
spec_path = './specification.json'
data = ""
if os.path.exists(spec_path):
with open(spec_path) as f:
data = ''.join(f.readlines())
else:
# TODO: Status code check
spec_response = urllib.request.urlopen('https://raw.githubusercontent.com/open-feature/spec/main/specification.json')
raw = []
for i in spec_response.readlines():
raw.append(i.decode('utf-8'))
data = ''.join(raw)
with open(spec_path, 'w') as f:
f.write(data)
return json.loads(data)
def main(refresh_spec=False, diff_output=False, limit_numbers=None):
actual_spec = get_spec(refresh_spec)
spec_map = {}
for entry in actual_spec['rules']:
number = re.search('[\d.]+', entry['id']).group()
if 'requirement' in entry['machine_id']:
spec_map[number] = _demarkdown(entry['content'])
if len(entry['children']) > 0:
for ch in entry['children']:
number = re.search('[\d.]+', ch['id']).group()
if 'requirement' in ch['machine_id']:
spec_map[number] = _demarkdown(ch['content'])
java_specs = {}
missing = set(spec_map.keys())
import os
for root, dirs, files in os.walk(".", topdown=False):
for name in files:
F = os.path.join(root, name)
if '.java' not in name:
continue
with open(F) as f:
data = ''.join(f.readlines())
for match in re.findall('@Specification\((?P<innards>.*?)"\)', data.replace('\n', ''), re.MULTILINE | re.DOTALL):
number = re.findall('number\s*=\s*"(.*?)"', match)[0]
if number in missing:
missing.remove(number)
text_with_concat_chars = re.findall('text\s*=\s*(.*)', match)
try:
# We have to match for ") to capture text with parens inside, so we add the trailing " back in.
text = _demarkdown(eval(''.join(text_with_concat_chars) + '"'))
entry = java_specs[number] = {
'number': number,
'text': text,
}
except:
print(f"Skipping {match} b/c we couldn't parse it")
bad_num = len(missing)
for number, entry in java_specs.items():
if limit_numbers is not None and len(limit_numbers) > 0 and number not in limit_numbers:
continue
if number in spec_map:
txt = entry['text']
if txt == spec_map[number]:
# print(f'{number} is good')
continue
else:
print(f"{number} is bad")
bad_num += 1
if diff_output:
print(number + '\n' + '\n'.join([li for li in difflib.ndiff([txt], [spec_map[number]]) if not li.startswith(' ')]))
continue
print(f"{number} is defined in our tests, but couldn't find it in the spec")
print("")
if len(missing) > 0:
print('In the spec, but not in our tests: ')
for m in missing:
print(f" {m}: {spec_map[m]}")
sys.exit(bad_num)
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser(description='Parse the spec to make sure our tests cover it')
parser.add_argument('--refresh-spec', action='store_true', help='Re-downloads the spec')
parser.add_argument('--diff-output', action='store_true', help='print the text differences')
parser.add_argument('specific_numbers', metavar='num', type=str, nargs='*',
help='limit this to specific numbers')
args = parser.parse_args()
main(refresh_spec=args.refresh_spec, diff_output=args.diff_output, limit_numbers=args.specific_numbers)

View File

@ -6,18 +6,50 @@
<!-- I'm reasonably confident that the singleton pattern isn't exposing internal representation -->
<And>
<Class name="dev.openfeature.javasdk.OpenFeatureAPI"/>
<Class name="dev.openfeature.sdk.OpenFeatureAPI"/>
<Bug pattern="MS_EXPOSE_REP"/>
</And>
<!-- similarly, client using the singleton doesn't seem bad -->
<!-- evaluation context and hooks are mutable if mutable impl is used -->
<And>
<Class name="dev.openfeature.javasdk.OpenFeatureClient"/>
<Class name="dev.openfeature.sdk.OpenFeatureClient"/>
<Bug pattern="EI_EXPOSE_REP"/>
</And>
<And>
<Class name="dev.openfeature.sdk.OpenFeatureClient"/>
<Bug pattern="EI_EXPOSE_REP2"/>
</And>
<And>
<Class name="dev.openfeature.sdk.OpenFeatureAPI"/>
<Bug pattern="EI_EXPOSE_REP"/>
</And>
<And>
<Class name="dev.openfeature.sdk.OpenFeatureAPI"/>
<Bug pattern="EI_EXPOSE_REP2"/>
</And>
<And>
Added in spotbugs 4.8.0 - EventProvider shares a name with something from the standard lib (confusing), but change would be breaking
<Class name="dev.openfeature.sdk.EventProvider"/>
<Bug pattern="PI_DO_NOT_REUSE_PUBLIC_IDENTIFIERS_CLASS_NAMES"/>
</And>
<And>
Added in spotbugs 4.8.0 - Metadata shares a name with something from the standard lib (confusing), but change would be breaking
<Class name="dev.openfeature.sdk.Metadata"/>
<Bug pattern="PI_DO_NOT_REUSE_PUBLIC_IDENTIFIERS_CLASS_NAMES"/>
</And>
<And>
Added in spotbugs 4.8.0 - Reason shares a name with something from the standard lib (confusing), but change would be breaking
<Class name="dev.openfeature.sdk.Reason"/>
<Bug pattern="PI_DO_NOT_REUSE_PUBLIC_IDENTIFIERS_CLASS_NAMES"/>
</And>
<And>
Added in spotbugs 4.8.0 - FlagValueType.STRING shares a name with something from the standard lib (confusing), but change would be breaking
<Class name="dev.openfeature.sdk.FlagValueType"/>
<Bug pattern="PI_DO_NOT_REUSE_PUBLIC_IDENTIFIERS_FIELD_NAMES"/>
</And>
<!-- Test class that should be excluded -->
<Match>
<Class name="dev.openfeature.javasdk.DoSomethingProvider"/>
<Class name="dev.openfeature.sdk.DoSomethingProvider"/>
</Match>
<!-- All bugs in test classes, except for JUnit-specific bugs -->
<Match>

View File

@ -1,9 +0,0 @@
package dev.openfeature.javasdk;
public interface BooleanHook extends Hook<Boolean> {
@Override
default boolean supportsFlagValueType(FlagValueType flagValueType) {
return FlagValueType.BOOLEAN == flagValueType;
}
}

View File

@ -1,5 +0,0 @@
package dev.openfeature.javasdk;
public enum ErrorCode {
PROVIDER_NOT_READY, FLAG_NOT_FOUND, PARSE_ERROR, TYPE_MISMATCH, GENERAL
}

View File

@ -1,146 +0,0 @@
package dev.openfeature.javasdk;
import dev.openfeature.javasdk.internal.Pair;
import lombok.*;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
@ToString @EqualsAndHashCode
@SuppressWarnings("PMD.BeanMembersShouldSerialize")
public class EvaluationContext {
@Setter @Getter private String targetingKey;
private final Map<String, Pair<FlagValueType, Object>> attributes;
public EvaluationContext() {
this.targetingKey = "";
this.attributes = new HashMap<>();
}
// TODO Not sure if I should have sneakythrows or checked exceptions here..
@SneakyThrows
public <T> EvaluationContext addStructureAttribute(String key, T value) {
attributes.put(key, new Pair<>(FlagValueType.OBJECT, value));
return this;
}
@SneakyThrows
public <T> T getStructureAttribute(String key) {
return getAttributeByType(key, FlagValueType.OBJECT);
}
public Map<String, String> getStructureAttributes() {
return getAttributesByType(FlagValueType.OBJECT);
}
public EvaluationContext addStringAttribute(String key, String value) {
attributes.put(key, new Pair<>(FlagValueType.STRING, value));
return this;
}
public String getStringAttribute(String key) {
return getAttributeByType(key, FlagValueType.STRING);
}
private <T> Map<String, T> getAttributesByType(FlagValueType type) {
HashMap<String, T> hm = new HashMap<>();
for (Map.Entry<String, Pair<FlagValueType, Object>> entry : attributes.entrySet()) {
String key = entry.getKey();
if (entry.getValue().getFirst() == type) {
hm.put(key, (T) entry.getValue().getSecond());
}
}
return hm;
}
private <T> T getAttributeByType(String key, FlagValueType type) {
Pair<FlagValueType, Object> val = attributes.get(key);
if (val == null) {
return null;
}
if (val.getFirst() == type) {
return (T) val.getSecond();
}
return null;
}
public Map<String, String> getStringAttributes() {
return getAttributesByType(FlagValueType.STRING);
}
public EvaluationContext addIntegerAttribute(String key, Integer value) {
attributes.put(key, new Pair<>(FlagValueType.INTEGER, value));
return this;
}
public Integer getIntegerAttribute(String key) {
return getAttributeByType(key, FlagValueType.INTEGER);
}
public Map<String, Integer> getIntegerAttributes() {
return getAttributesByType(FlagValueType.INTEGER);
}
public Boolean getBooleanAttribute(String key) {
return getAttributeByType(key, FlagValueType.BOOLEAN);
}
public EvaluationContext addBooleanAttribute(String key, Boolean b) {
attributes.put(key, new Pair<>(FlagValueType.BOOLEAN, b));
return this;
}
public Map<String, Boolean> getBooleanAttributes() {
return getAttributesByType(FlagValueType.BOOLEAN);
}
public EvaluationContext addDatetimeAttribute(String key, ZonedDateTime value) {
attributes.put(key, new Pair<>(FlagValueType.STRING, value.format(DateTimeFormatter.ISO_ZONED_DATE_TIME)));
return this;
}
/**
* Fetch date-time relevant key.
* @param key feature key
* @return date time object.
* @throws java.time.format.DateTimeParseException if it's not a datetime
*/
public ZonedDateTime getDatetimeAttribute(String key) {
String attr = getAttributeByType(key, FlagValueType.STRING);
if (attr == null) {
return null;
}
return ZonedDateTime.parse(attr, DateTimeFormatter.ISO_ZONED_DATE_TIME);
}
/**
* Merges two EvaluationContext objects with the second overriding the first in case of conflict.
*
* @param ctx1 base context
* @param ctx2 overriding context
* @return resulting merged context
*/
public static EvaluationContext merge(EvaluationContext ctx1, EvaluationContext ctx2) {
EvaluationContext ec = new EvaluationContext();
if (ctx1 == null) {
return ctx2;
} else if (ctx2 == null) {
return ctx1;
}
ec.attributes.putAll(ctx1.attributes);
ec.attributes.putAll(ctx2.attributes);
if (ctx1.getTargetingKey() != null) {
ec.setTargetingKey(ctx1.getTargetingKey());
}
if (ctx2.getTargetingKey() != null) {
ec.setTargetingKey(ctx2.getTargetingKey());
}
return ec;
}
}

View File

@ -1,31 +0,0 @@
package dev.openfeature.javasdk;
import com.google.common.collect.Lists;
import java.util.List;
/**
* The interface implemented by upstream flag providers to resolve flags for their service.
*/
public interface FeatureProvider {
Metadata getMetadata();
default List<Hook> getProviderHooks() {
return Lists.newArrayList();
}
ProviderEvaluation<Boolean> getBooleanEvaluation(String key, Boolean defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options);
ProviderEvaluation<String> getStringEvaluation(String key, String defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options);
ProviderEvaluation<Integer> getIntegerEvaluation(String key, Integer defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options);
ProviderEvaluation<Double> getDoubleEvaluation(String key, Double defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options);
<T> ProviderEvaluation<T> getObjectEvaluation(String key, T defaultValue, EvaluationContext invocationContext,
FlagEvaluationOptions options);
}

View File

@ -1,36 +0,0 @@
package dev.openfeature.javasdk;
import lombok.Builder;
import lombok.Data;
import javax.annotation.Nullable;
/**
* Contains information about how the evaluation happened, including any resolved values.
* @param <T> the type of the flag being evaluated.
*/
@Data @Builder
public class FlagEvaluationDetails<T> implements BaseEvaluation<T> {
private String flagKey;
private T value;
@Nullable private String variant;
private Reason reason;
@Nullable private String errorCode;
/**
* Generate detail payload from the provider response.
* @param providerEval provider response
* @param flagKey key for the flag being evaluated
* @param <T> type of flag being returned
* @return detail payload
*/
public static <T> FlagEvaluationDetails<T> from(ProviderEvaluation<T> providerEval, String flagKey) {
return FlagEvaluationDetails.<T>builder()
.flagKey(flagKey)
.value(providerEval.getValue())
.variant(providerEval.getVariant())
.reason(providerEval.getReason())
.errorCode(providerEval.getErrorCode())
.build();
}
}

View File

@ -1,14 +0,0 @@
package dev.openfeature.javasdk;
import java.util.*;
import lombok.*;
@Value
@Builder
public class FlagEvaluationOptions {
@Singular
List<Hook> hooks;
@Builder.Default
Map<String, Object> hookHints = new HashMap<>();
}

View File

@ -1,5 +0,0 @@
package dev.openfeature.javasdk;
public enum FlagValueType {
STRING, INTEGER, DOUBLE, OBJECT, BOOLEAN;
}

View File

@ -1,90 +0,0 @@
package dev.openfeature.javasdk;
import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.stream.Stream;
@Slf4j
@RequiredArgsConstructor
@SuppressWarnings({"unchecked", "rawtypes"})
class HookSupport {
public void errorHooks(FlagValueType flagValueType, HookContext hookCtx, Exception e, List<Hook> hooks,
Map<String, Object> hints) {
executeHooks(flagValueType, hooks, "error", hook -> hook.error(hookCtx, e, hints));
}
public void afterAllHooks(FlagValueType flagValueType, HookContext hookCtx, List<Hook> hooks,
Map<String, Object> hints) {
executeHooks(flagValueType, hooks, "finally", hook -> hook.finallyAfter(hookCtx, hints));
}
public void afterHooks(FlagValueType flagValueType, HookContext hookContext, FlagEvaluationDetails details,
List<Hook> hooks, Map<String, Object> hints) {
executeHooksUnchecked(flagValueType, hooks, hook -> hook.after(hookContext, details, hints));
}
private <T> void executeHooks(
FlagValueType flagValueType, List<Hook> hooks,
String hookMethod,
Consumer<Hook<T>> hookCode
) {
hooks
.stream()
.filter(hook -> hook.supportsFlagValueType(flagValueType))
.forEach(hook -> executeChecked(hook, hookCode, hookMethod));
}
private <T> void executeHooksUnchecked(
FlagValueType flagValueType, List<Hook> hooks,
Consumer<Hook<T>> hookCode
) {
hooks
.stream()
.filter(hook -> hook.supportsFlagValueType(flagValueType))
.forEach(hookCode::accept);
}
private <T> void executeChecked(Hook<T> hook, Consumer<Hook<T>> hookCode, String hookMethod) {
try {
hookCode.accept(hook);
} catch (Exception exception) {
log.error("Exception when running {} hooks {}", hookMethod, hook.getClass(), exception);
}
}
public EvaluationContext beforeHooks(FlagValueType flagValueType, HookContext hookCtx, List<Hook> hooks,
Map<String, Object> hints) {
Stream<EvaluationContext> result = callBeforeHooks(flagValueType, hookCtx, hooks, hints);
return EvaluationContext.merge(hookCtx.getCtx(), collectContexts(result));
}
private Stream<EvaluationContext> callBeforeHooks(FlagValueType flagValueType, HookContext hookCtx,
List<Hook> hooks, Map<String, Object> hints) {
// These traverse backwards from normal.
return Lists
.reverse(hooks)
.stream()
.filter(hook -> hook.supportsFlagValueType(flagValueType))
.map(hook -> hook.before(hookCtx, hints))
.filter(Objects::nonNull)
.filter(Optional::isPresent)
.map(Optional::get)
.map(EvaluationContext.class::cast);
}
//for whatever reason, an error `error: incompatible types: invalid method reference` is thrown on compilation
// with javac
//when the reduce call is appended directly as stream call chain above. moving it to its own method works however...
private EvaluationContext collectContexts(Stream<EvaluationContext> result) {
return result
.reduce(new EvaluationContext(), EvaluationContext::merge, EvaluationContext::merge);
}
}

View File

@ -1,9 +0,0 @@
package dev.openfeature.javasdk;
public interface IntegerHook extends Hook<Integer> {
@Override
default boolean supportsFlagValueType(FlagValueType flagValueType) {
return FlagValueType.INTEGER == flagValueType;
}
}

View File

@ -1,66 +0,0 @@
package dev.openfeature.javasdk;
import lombok.Getter;
import lombok.Setter;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* A global singleton which holds base configuration for the OpenFeature library.
* Configuration here will be shared across all {@link Client}s.
*/
public class OpenFeatureAPI {
private static OpenFeatureAPI api;
@Getter
@Setter
private FeatureProvider provider;
@Getter
@Setter
private EvaluationContext ctx;
@Getter
private List<Hook> apiHooks;
public OpenFeatureAPI() {
this.apiHooks = new ArrayList<>();
}
/**
* Provisions the {@link OpenFeatureAPI} singleton (if needed) and returns it.
* @return The singleton instance.
*/
public static OpenFeatureAPI getInstance() {
synchronized (OpenFeatureAPI.class) {
if (api == null) {
api = new OpenFeatureAPI();
}
}
return api;
}
public Metadata getProviderMetadata() {
return provider.getMetadata();
}
public Client getClient() {
return getClient(null, null);
}
public Client getClient(@Nullable String name) {
return getClient(name, null);
}
public Client getClient(@Nullable String name, @Nullable String version) {
return new OpenFeatureClient(this, name, version);
}
public void addHooks(Hook... hooks) {
this.apiHooks.addAll(Arrays.asList(hooks));
}
public void clearHooks() {
this.apiHooks.clear();
}
}

View File

@ -1,286 +0,0 @@
package dev.openfeature.javasdk;
import dev.openfeature.javasdk.exceptions.GeneralError;
import dev.openfeature.javasdk.internal.ObjectUtils;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import java.util.*;
@Slf4j
@SuppressWarnings({"PMD.DataflowAnomalyAnalysis", "PMD.BeanMembersShouldSerialize", "unchecked", "rawtypes"})
public class OpenFeatureClient implements Client {
private final OpenFeatureAPI openfeatureApi;
@Getter
private final String name;
@Getter
private final String version;
@Getter
private final List<Hook> clientHooks;
private final HookSupport hookSupport;
@Getter
@Setter
private EvaluationContext evaluationContext;
/**
* Client for evaluating the flag. There may be multiples of these floating around.
* @param openFeatureAPI Backing global singleton
* @param name Name of the client (used by observability tools).
* @param version Version of the client (used by observability tools).
*/
public OpenFeatureClient(OpenFeatureAPI openFeatureAPI, String name, String version) {
this.openfeatureApi = openFeatureAPI;
this.name = name;
this.version = version;
this.clientHooks = new ArrayList<>();
this.hookSupport = new HookSupport();
}
@Override
public void addHooks(Hook... hooks) {
this.clientHooks.addAll(Arrays.asList(hooks));
}
private <T> FlagEvaluationDetails<T> evaluateFlag(FlagValueType type, String key, T defaultValue,
EvaluationContext ctx, FlagEvaluationOptions options) {
FlagEvaluationOptions flagOptions = ObjectUtils.defaultIfNull(options,
() -> FlagEvaluationOptions.builder().build());
FeatureProvider provider = openfeatureApi.getProvider();
Map<String, Object> hints = Collections.unmodifiableMap(flagOptions.getHookHints());
if (ctx == null) {
ctx = new EvaluationContext();
}
HookContext<T> hookCtx = HookContext.from(key, type, this.getMetadata(),
openfeatureApi.getProvider().getMetadata(), ctx, defaultValue);
List<Hook> mergedHooks = ObjectUtils.merge(provider.getProviderHooks(), flagOptions.getHooks(), clientHooks,
openfeatureApi.getApiHooks());
FlagEvaluationDetails<T> details = null;
try {
EvaluationContext ctxFromHook = hookSupport.beforeHooks(type, hookCtx, mergedHooks, hints);
EvaluationContext invocationCtx = EvaluationContext.merge(ctx, ctxFromHook);
// merge of: API.context, client.context, invocation.context
EvaluationContext mergedCtx = EvaluationContext.merge(
EvaluationContext.merge(
openfeatureApi.getCtx(),
this.getEvaluationContext()
),
invocationCtx
);
ProviderEvaluation<T> providerEval = (ProviderEvaluation<T>) createProviderEvaluation(type, key,
defaultValue, options, provider, mergedCtx);
details = FlagEvaluationDetails.from(providerEval, key);
hookSupport.afterHooks(type, hookCtx, details, mergedHooks, hints);
} catch (Exception e) {
log.error("Unable to correctly evaluate flag with key {} due to exception {}", key, e.getMessage());
if (details == null) {
details = FlagEvaluationDetails.<T>builder().build();
}
details.setValue(defaultValue);
details.setReason(Reason.ERROR);
details.setErrorCode(e.getMessage());
hookSupport.errorHooks(type, hookCtx, e, mergedHooks, hints);
} finally {
hookSupport.afterAllHooks(type, hookCtx, mergedHooks, hints);
}
return details;
}
private <T> ProviderEvaluation<?> createProviderEvaluation(
FlagValueType type,
String key,
T defaultValue,
FlagEvaluationOptions options,
FeatureProvider provider,
EvaluationContext invocationContext
) {
switch (type) {
case BOOLEAN:
return provider.getBooleanEvaluation(key, (Boolean) defaultValue, invocationContext, options);
case STRING:
return provider.getStringEvaluation(key, (String) defaultValue, invocationContext, options);
case INTEGER:
return provider.getIntegerEvaluation(key, (Integer) defaultValue, invocationContext, options);
case DOUBLE:
return provider.getDoubleEvaluation(key, (Double) defaultValue, invocationContext, options);
case OBJECT:
return provider.getObjectEvaluation(key, defaultValue, invocationContext, options);
default:
throw new GeneralError("Unknown flag type");
}
}
@Override
public Boolean getBooleanValue(String key, Boolean defaultValue) {
return getBooleanDetails(key, defaultValue).getValue();
}
@Override
public Boolean getBooleanValue(String key, Boolean defaultValue, EvaluationContext ctx) {
return getBooleanDetails(key, defaultValue, ctx).getValue();
}
@Override
public Boolean getBooleanValue(String key, Boolean defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options) {
return getBooleanDetails(key, defaultValue, ctx, options).getValue();
}
@Override
public FlagEvaluationDetails<Boolean> getBooleanDetails(String key, Boolean defaultValue) {
return getBooleanDetails(key, defaultValue, new EvaluationContext());
}
@Override
public FlagEvaluationDetails<Boolean> getBooleanDetails(String key, Boolean defaultValue, EvaluationContext ctx) {
return getBooleanDetails(key, defaultValue, ctx, FlagEvaluationOptions.builder().build());
}
@Override
public FlagEvaluationDetails<Boolean> getBooleanDetails(String key, Boolean defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options) {
return this.evaluateFlag(FlagValueType.BOOLEAN, key, defaultValue, ctx, options);
}
@Override
public String getStringValue(String key, String defaultValue) {
return getStringDetails(key, defaultValue).getValue();
}
@Override
public String getStringValue(String key, String defaultValue, EvaluationContext ctx) {
return getStringDetails(key, defaultValue, ctx).getValue();
}
@Override
public String getStringValue(String key, String defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options) {
return getStringDetails(key, defaultValue, ctx, options).getValue();
}
@Override
public FlagEvaluationDetails<String> getStringDetails(String key, String defaultValue) {
return getStringDetails(key, defaultValue, null);
}
@Override
public FlagEvaluationDetails<String> getStringDetails(String key, String defaultValue, EvaluationContext ctx) {
return getStringDetails(key, defaultValue, ctx, FlagEvaluationOptions.builder().build());
}
@Override
public FlagEvaluationDetails<String> getStringDetails(String key, String defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options) {
return this.evaluateFlag(FlagValueType.STRING, key, defaultValue, ctx, options);
}
@Override
public Integer getIntegerValue(String key, Integer defaultValue) {
return getIntegerDetails(key, defaultValue).getValue();
}
@Override
public Integer getIntegerValue(String key, Integer defaultValue, EvaluationContext ctx) {
return getIntegerDetails(key, defaultValue, ctx).getValue();
}
@Override
public Integer getIntegerValue(String key, Integer defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options) {
return getIntegerDetails(key, defaultValue, ctx, options).getValue();
}
@Override
public FlagEvaluationDetails<Integer> getIntegerDetails(String key, Integer defaultValue) {
return getIntegerDetails(key, defaultValue, new EvaluationContext());
}
@Override
public FlagEvaluationDetails<Integer> getIntegerDetails(String key, Integer defaultValue, EvaluationContext ctx) {
return getIntegerDetails(key, defaultValue, ctx, FlagEvaluationOptions.builder().build());
}
@Override
public FlagEvaluationDetails<Integer> getIntegerDetails(String key, Integer defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options) {
return this.evaluateFlag(FlagValueType.INTEGER, key, defaultValue, ctx, options);
}
@Override
public Double getDoubleValue(String key, Double defaultValue) {
return getDoubleValue(key, defaultValue, null);
}
@Override
public Double getDoubleValue(String key, Double defaultValue, EvaluationContext ctx) {
return getDoubleValue(key, defaultValue, ctx, null);
}
@Override
public Double getDoubleValue(String key, Double defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options) {
return this.evaluateFlag(FlagValueType.DOUBLE, key, defaultValue, ctx, options).getValue();
}
@Override
public FlagEvaluationDetails<Double> getDoubleDetails(String key, Double defaultValue) {
return getDoubleDetails(key, defaultValue, null);
}
@Override
public FlagEvaluationDetails<Double> getDoubleDetails(String key, Double defaultValue, EvaluationContext ctx) {
return getDoubleDetails(key, defaultValue, ctx, null);
}
@Override
public FlagEvaluationDetails<Double> getDoubleDetails(String key, Double defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options) {
return this.evaluateFlag(FlagValueType.DOUBLE, key, defaultValue, ctx, options);
}
@Override
public <T> T getObjectValue(String key, T defaultValue) {
return getObjectDetails(key, defaultValue).getValue();
}
@Override
public <T> T getObjectValue(String key, T defaultValue, EvaluationContext ctx) {
return getObjectDetails(key, defaultValue, ctx).getValue();
}
@Override
public <T> T getObjectValue(String key, T defaultValue, EvaluationContext ctx, FlagEvaluationOptions options) {
return getObjectDetails(key, defaultValue, ctx, options).getValue();
}
@Override
public <T> FlagEvaluationDetails<T> getObjectDetails(String key, T defaultValue) {
return getObjectDetails(key, defaultValue, null);
}
@Override
public <T> FlagEvaluationDetails<T> getObjectDetails(String key, T defaultValue, EvaluationContext ctx) {
return getObjectDetails(key, defaultValue, ctx, FlagEvaluationOptions.builder().build());
}
@Override
public <T> FlagEvaluationDetails<T> getObjectDetails(String key, T defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options) {
return this.evaluateFlag(FlagValueType.OBJECT, key, defaultValue, ctx, options);
}
@Override
public Metadata getMetadata() {
return () -> name;
}
}

View File

@ -1,14 +0,0 @@
package dev.openfeature.javasdk;
import lombok.Builder;
import lombok.Data;
import javax.annotation.Nullable;
@Data @Builder
public class ProviderEvaluation<T> implements BaseEvaluation<T> {
T value;
@Nullable String variant;
Reason reason;
@Nullable String errorCode;
}

View File

@ -1,5 +0,0 @@
package dev.openfeature.javasdk;
public enum Reason {
DISABLED, SPLIT, TARGETING_MATCH, DEFAULT, UNKNOWN, ERROR
}

View File

@ -1,9 +0,0 @@
package dev.openfeature.javasdk;
public interface StringHook extends Hook<String> {
@Override
default boolean supportsFlagValueType(FlagValueType flagValueType) {
return FlagValueType.STRING == flagValueType;
}
}

View File

@ -1,11 +0,0 @@
package dev.openfeature.javasdk.exceptions;
import dev.openfeature.javasdk.ErrorCode;
import lombok.Getter;
import lombok.experimental.StandardException;
@StandardException
public class FlagNotFoundError extends OpenFeatureError {
private static final long serialVersionUID = 1L;
@Getter private final ErrorCode errorCode = ErrorCode.GENERAL;
}

View File

@ -1,13 +0,0 @@
package dev.openfeature.javasdk.exceptions;
import dev.openfeature.javasdk.ErrorCode;
import lombok.Getter;
import lombok.experimental.StandardException;
@StandardException
public class ParseError extends OpenFeatureError {
private static final long serialVersionUID = 1L;
@Getter private final ErrorCode errorCode = ErrorCode.PARSE_ERROR;
}

View File

@ -1,13 +0,0 @@
package dev.openfeature.javasdk.exceptions;
import dev.openfeature.javasdk.ErrorCode;
import lombok.Getter;
import lombok.experimental.StandardException;
@StandardException
public class TypeMismatchError extends OpenFeatureError {
private static final long serialVersionUID = 1L;
@Getter private final ErrorCode errorCode = ErrorCode.TYPE_MISMATCH;
}

View File

@ -1,9 +0,0 @@
package dev.openfeature.javasdk.internal;
import lombok.Value;
@Value
public class Pair<K,V> {
private K first;
private V second;
}

View File

@ -0,0 +1,51 @@
package dev.openfeature.sdk;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import lombok.EqualsAndHashCode;
@SuppressWarnings({"PMD.BeanMembersShouldSerialize", "checkstyle:MissingJavadocType"})
@EqualsAndHashCode
abstract class AbstractStructure implements Structure {
protected final Map<String, Value> attributes;
@Override
public boolean isEmpty() {
return attributes == null || attributes.isEmpty();
}
AbstractStructure() {
this.attributes = new HashMap<>();
}
AbstractStructure(Map<String, Value> attributes) {
this.attributes = attributes;
}
/**
* Returns an unmodifiable representation of the internal attribute map.
*
* @return immutable map
*/
public Map<String, Value> asUnmodifiableMap() {
return Collections.unmodifiableMap(attributes);
}
/**
* Get all values as their underlying primitives types.
*
* @return all attributes on the structure into a Map
*/
@Override
public Map<String, Object> asObjectMap() {
return attributes.entrySet().stream()
// custom collector, workaround for Collectors.toMap in JDK8
// https://bugs.openjdk.org/browse/JDK-8148463
.collect(
HashMap::new,
(accumulated, entry) -> accumulated.put(entry.getKey(), convertValue(entry.getValue())),
HashMap::putAll);
}
}

View File

@ -0,0 +1,44 @@
package dev.openfeature.sdk;
/**
* A class to help with synchronization by allowing the optional awaiting of the associated action.
*/
public class Awaitable {
/**
* An already-completed Awaitable. Awaiting this will return immediately.
*/
public static final Awaitable FINISHED = new Awaitable(true);
private boolean isDone = false;
public Awaitable() {}
private Awaitable(boolean isDone) {
this.isDone = isDone;
}
/**
* Lets the calling thread wait until some other thread calls {@link Awaitable#wakeup()}. If
* {@link Awaitable#wakeup()} has been called before the current thread invokes this method, it will return
* immediately.
*/
@SuppressWarnings("java:S2142")
public synchronized void await() {
while (!isDone) {
try {
this.wait();
} catch (InterruptedException ignored) {
// ignored, do not propagate the interrupted state
}
}
}
/**
* Wakes up all threads that have called {@link Awaitable#await()} and lets them proceed.
*/
public synchronized void wakeup() {
isDone = true;
this.notifyAll();
}
}

View File

@ -1,31 +1,44 @@
package dev.openfeature.javasdk;
package dev.openfeature.sdk;
/**
* This is a common interface between the evaluation results that providers return and what is given to the end users.
*
* @param <T> The type of flag being evaluated.
*/
public interface BaseEvaluation<T> {
/**
* Returns the resolved value of the evaluation.
*
* @return {T} the resolve value
*/
T getValue();
/**
* Returns an identifier for this value, if applicable.
*
* @return {String} value identifier
*/
String getVariant();
/**
* Describes how we came to the value that we're returning.
*
* @return {Reason}
*/
Reason getReason();
String getReason();
/**
* The error code, if applicable. Should only be set when the Reason is ERROR.
*
* @return {ErrorCode}
*/
String getErrorCode();
ErrorCode getErrorCode();
/**
* The error message (usually from exception.getMessage()), if applicable.
* Should only be set when the Reason is ERROR.
*
* @return {String}
*/
String getErrorMessage();
}

View File

@ -0,0 +1,15 @@
package dev.openfeature.sdk;
/**
* An extension point which can run around flag resolution. They are intended to be used as a way to add custom logic
* to the lifecycle of flag evaluation.
*
* @see Hook
*/
public interface BooleanHook extends Hook<Boolean> {
@Override
default boolean supportsFlagValueType(FlagValueType flagValueType) {
return FlagValueType.BOOLEAN == flagValueType;
}
}

View File

@ -1,24 +1,26 @@
package dev.openfeature.javasdk;
package dev.openfeature.sdk;
import java.util.List;
/**
* Interface used to resolve flags of varying types.
*/
public interface Client extends Features {
Metadata getMetadata();
public interface Client extends Features, Tracking, EventBus<Client> {
ClientMetadata getMetadata();
/**
* Return an optional client-level evaluation context.
*
* @return {@link EvaluationContext}
*/
EvaluationContext getEvaluationContext();
/**
* Set the client-level evaluation context.
*
* @param ctx Client level context.
*/
void setEvaluationContext(EvaluationContext ctx);
Client setEvaluationContext(EvaluationContext ctx);
/**
* Adds hooks for evaluation.
@ -26,11 +28,19 @@ public interface Client extends Features {
*
* @param hooks The hook to add.
*/
void addHooks(Hook... hooks);
Client addHooks(Hook... hooks);
/**
* Fetch the hooks associated to this client.
*
* @return A list of {@link Hook}s.
*/
List<Hook> getClientHooks();
List<Hook> getHooks();
/**
* Returns the current state of the associated provider.
*
* @return the provider state
*/
ProviderState getProviderState();
}

View File

@ -0,0 +1,14 @@
package dev.openfeature.sdk;
/**
* Metadata specific to an OpenFeature {@code Client}.
*/
public interface ClientMetadata {
String getDomain();
@Deprecated
// this is here for compatibility with getName() exposed from {@link Metadata}
default String getName() {
return getDomain();
}
}

View File

@ -0,0 +1,15 @@
package dev.openfeature.sdk;
/**
* An extension point which can run around flag resolution. They are intended to be used as a way to add custom logic
* to the lifecycle of flag evaluation.
*
* @see Hook
*/
public interface DoubleHook extends Hook<Double> {
@Override
default boolean supportsFlagValueType(FlagValueType flagValueType) {
return FlagValueType.DOUBLE == flagValueType;
}
}

View File

@ -0,0 +1,13 @@
package dev.openfeature.sdk;
@SuppressWarnings("checkstyle:MissingJavadocType")
public enum ErrorCode {
PROVIDER_NOT_READY,
FLAG_NOT_FOUND,
PARSE_ERROR,
TYPE_MISMATCH,
TARGETING_KEY_MISSING,
INVALID_CONTEXT,
GENERAL,
PROVIDER_FATAL
}

View File

@ -0,0 +1,63 @@
package dev.openfeature.sdk;
import java.util.Map;
import java.util.Map.Entry;
import java.util.function.Function;
/**
* The EvaluationContext is a container for arbitrary contextual data
* that can be used as a basis for dynamic evaluation.
*/
@SuppressWarnings("PMD.BeanMembersShouldSerialize")
public interface EvaluationContext extends Structure {
String TARGETING_KEY = "targetingKey";
String getTargetingKey();
/**
* Merges this EvaluationContext object with the second overriding the this in
* case of conflict.
*
* @param overridingContext overriding context
* @return resulting merged context
*/
EvaluationContext merge(EvaluationContext overridingContext);
/**
* Recursively merges the overriding map into the base Value map.
* The base map is mutated, the overriding map is not.
* Null maps will cause no-op.
*
* @param newStructure function to create the right structure(s) for Values
* @param base base map to merge
* @param overriding overriding map to merge
*/
static void mergeMaps(
Function<Map<String, Value>, Structure> newStructure,
Map<String, Value> base,
Map<String, Value> overriding) {
if (base == null) {
return;
}
if (overriding == null || overriding.isEmpty()) {
return;
}
for (Entry<String, Value> overridingEntry : overriding.entrySet()) {
String key = overridingEntry.getKey();
if (overridingEntry.getValue().isStructure()
&& base.containsKey(key)
&& base.get(key).isStructure()) {
Structure mergedValue = base.get(key).asStructure();
Structure overridingValue = overridingEntry.getValue().asStructure();
Map<String, Value> newMap = mergedValue.asMap();
mergeMaps(newStructure, newMap, overridingValue.asUnmodifiableMap());
base.put(key, new Value(newStructure.apply(newMap)));
} else {
base.put(key, overridingEntry.getValue());
}
}
}
}

View File

@ -0,0 +1,24 @@
package dev.openfeature.sdk;
import java.util.HashMap;
import java.util.Map;
import lombok.Builder;
import lombok.Getter;
import lombok.Singular;
/**
* Represents an evaluation event.
*/
@Builder
@Getter
public class EvaluationEvent {
private String name;
@Singular("attribute")
private Map<String, Object> attributes;
public Map<String, Object> getAttributes() {
return new HashMap<>(attributes);
}
}

View File

@ -0,0 +1,64 @@
package dev.openfeature.sdk;
import java.util.function.Consumer;
/**
* Interface for attaching event handlers.
*/
public interface EventBus<T> {
/**
* Add a handler for the {@link ProviderEvent#PROVIDER_READY} event.
* Shorthand for {@link #on(ProviderEvent, Consumer)}
*
* @param handler behavior to add with this event
* @return this
*/
T onProviderReady(Consumer<EventDetails> handler);
/**
* Add a handler for the {@link ProviderEvent#PROVIDER_CONFIGURATION_CHANGED} event.
* Shorthand for {@link #on(ProviderEvent, Consumer)}
*
* @param handler behavior to add with this event
* @return this
*/
T onProviderConfigurationChanged(Consumer<EventDetails> handler);
/**
* Add a handler for the {@link ProviderEvent#PROVIDER_STALE} event.
* Shorthand for {@link #on(ProviderEvent, Consumer)}
*
* @param handler behavior to add with this event
* @return this
*/
T onProviderError(Consumer<EventDetails> handler);
/**
* Add a handler for the {@link ProviderEvent#PROVIDER_ERROR} event.
* Shorthand for {@link #on(ProviderEvent, Consumer)}
*
* @param handler behavior to add with this event
* @return this
*/
T onProviderStale(Consumer<EventDetails> handler);
/**
* Add a handler for the specified {@link ProviderEvent}.
*
* @param event event type
* @param handler behavior to add with this event
* @return this
*/
T on(ProviderEvent event, Consumer<EventDetails> handler);
/**
* Remove the previously attached handler by reference.
* If the handler doesn't exists, no-op.
*
* @param event event type
* @param handler to be removed
* @return this
*/
T removeHandler(ProviderEvent event, Consumer<EventDetails> handler);
}

View File

@ -0,0 +1,31 @@
package dev.openfeature.sdk;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.SuperBuilder;
/**
* The details of a particular event.
*/
@EqualsAndHashCode(callSuper = true)
@Data
@SuperBuilder(toBuilder = true)
public class EventDetails extends ProviderEventDetails {
private String domain;
private String providerName;
static EventDetails fromProviderEventDetails(ProviderEventDetails providerEventDetails, String providerName) {
return fromProviderEventDetails(providerEventDetails, providerName, null);
}
static EventDetails fromProviderEventDetails(
ProviderEventDetails providerEventDetails, String providerName, String domain) {
return builder()
.domain(domain)
.providerName(providerName)
.flagsChanged(providerEventDetails.getFlagsChanged())
.eventMetadata(providerEventDetails.getEventMetadata())
.message(providerEventDetails.getMessage())
.build();
}
}

View File

@ -0,0 +1,147 @@
package dev.openfeature.sdk;
import dev.openfeature.sdk.internal.TriConsumer;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import lombok.extern.slf4j.Slf4j;
/**
* Abstract EventProvider. Providers must extend this class to support events.
* Emit events with {@link #emit(ProviderEvent, ProviderEventDetails)}. Please
* note that the SDK will automatically emit
* {@link ProviderEvent#PROVIDER_READY } or
* {@link ProviderEvent#PROVIDER_ERROR } accordingly when
* {@link FeatureProvider#initialize(EvaluationContext)} completes successfully
* or with error, so these events need not be emitted manually during
* initialization.
*
* @see FeatureProvider
*/
@Slf4j
public abstract class EventProvider implements FeatureProvider {
private EventProviderListener eventProviderListener;
private final ExecutorService emitterExecutor = Executors.newCachedThreadPool();
void setEventProviderListener(EventProviderListener eventProviderListener) {
this.eventProviderListener = eventProviderListener;
}
private TriConsumer<EventProvider, ProviderEvent, ProviderEventDetails> onEmit = null;
/**
* "Attach" this EventProvider to an SDK, which allows events to propagate from this provider.
* No-op if the same onEmit is already attached.
*
* @param onEmit the function to run when a provider emits events.
* @throws IllegalStateException if attempted to bind a new emitter for already bound provider
*/
void attach(TriConsumer<EventProvider, ProviderEvent, ProviderEventDetails> onEmit) {
if (this.onEmit != null && this.onEmit != onEmit) {
// if we are trying to attach this provider to a different onEmit, something has gone wrong
throw new IllegalStateException("Provider " + this.getMetadata().getName() + " is already attached.");
} else {
this.onEmit = onEmit;
}
}
/**
* "Detach" this EventProvider from an SDK, stopping propagation of all events.
*/
void detach() {
this.onEmit = null;
}
/**
* Stop the event emitter executor and block until either termination has completed
* or timeout period has elapsed.
*/
@Override
public void shutdown() {
emitterExecutor.shutdown();
try {
if (!emitterExecutor.awaitTermination(EventSupport.SHUTDOWN_TIMEOUT_SECONDS, TimeUnit.SECONDS)) {
log.warn("Emitter executor did not terminate before the timeout period had elapsed");
emitterExecutor.shutdownNow();
}
} catch (InterruptedException e) {
emitterExecutor.shutdownNow();
Thread.currentThread().interrupt();
}
}
/**
* Emit the specified {@link ProviderEvent}.
*
* @param event The event type
* @param details The details of the event
*/
public Awaitable emit(final ProviderEvent event, final ProviderEventDetails details) {
final var localEventProviderListener = this.eventProviderListener;
final var localOnEmit = this.onEmit;
if (localEventProviderListener == null && localOnEmit == null) {
return Awaitable.FINISHED;
}
final var awaitable = new Awaitable();
// These calls need to be executed on a different thread to prevent deadlocks when the provider initialization
// relies on a ready event to be emitted
emitterExecutor.submit(() -> {
try (var ignored = OpenFeatureAPI.lock.readLockAutoCloseable()) {
if (localEventProviderListener != null) {
localEventProviderListener.onEmit(event, details);
}
if (localOnEmit != null) {
localOnEmit.accept(this, event, details);
}
} finally {
awaitable.wakeup();
}
});
return awaitable;
}
/**
* Emit a {@link ProviderEvent#PROVIDER_READY} event.
* Shorthand for {@link #emit(ProviderEvent, ProviderEventDetails)}
*
* @param details The details of the event
*/
public Awaitable emitProviderReady(ProviderEventDetails details) {
return emit(ProviderEvent.PROVIDER_READY, details);
}
/**
* Emit a
* {@link ProviderEvent#PROVIDER_CONFIGURATION_CHANGED}
* event. Shorthand for {@link #emit(ProviderEvent, ProviderEventDetails)}
*
* @param details The details of the event
*/
public Awaitable emitProviderConfigurationChanged(ProviderEventDetails details) {
return emit(ProviderEvent.PROVIDER_CONFIGURATION_CHANGED, details);
}
/**
* Emit a {@link ProviderEvent#PROVIDER_STALE} event.
* Shorthand for {@link #emit(ProviderEvent, ProviderEventDetails)}
*
* @param details The details of the event
*/
public Awaitable emitProviderStale(ProviderEventDetails details) {
return emit(ProviderEvent.PROVIDER_STALE, details);
}
/**
* Emit a {@link ProviderEvent#PROVIDER_ERROR} event.
* Shorthand for {@link #emit(ProviderEvent, ProviderEventDetails)}
*
* @param details The details of the event
*/
public Awaitable emitProviderError(ProviderEventDetails details) {
return emit(ProviderEvent.PROVIDER_ERROR, details);
}
}

View File

@ -0,0 +1,6 @@
package dev.openfeature.sdk;
@FunctionalInterface
interface EventProviderListener {
void onEmit(ProviderEvent event, ProviderEventDetails details);
}

View File

@ -0,0 +1,177 @@
package dev.openfeature.sdk;
import java.util.Collection;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import lombok.extern.slf4j.Slf4j;
/**
* Util class for storing and running handlers.
*/
@Slf4j
class EventSupport {
public static final int SHUTDOWN_TIMEOUT_SECONDS = 3;
// we use a v4 uuid as a "placeholder" for anonymous clients, since
// ConcurrentHashMap doesn't support nulls
private static final String DEFAULT_CLIENT_UUID = UUID.randomUUID().toString();
private final Map<String, HandlerStore> handlerStores = new ConcurrentHashMap<>();
private final HandlerStore globalHandlerStore = new HandlerStore();
private final ExecutorService taskExecutor = Executors.newCachedThreadPool();
/**
* Run all the event handlers associated with this domain.
* If the domain is null, handlers attached to unnamed clients will run.
*
* @param domain the domain to run event handlers for, or null
* @param event the event type
* @param eventDetails the event details
*/
public void runClientHandlers(String domain, ProviderEvent event, EventDetails eventDetails) {
domain = Optional.ofNullable(domain).orElse(DEFAULT_CLIENT_UUID);
// run handlers if they exist
Optional.ofNullable(handlerStores.get(domain))
.map(store -> store.handlerMap.get(event))
.ifPresent(handlers -> handlers.forEach(handler -> runHandler(handler, eventDetails)));
}
/**
* Run all the API (global) event handlers.
*
* @param event the event type
* @param eventDetails the event details
*/
public void runGlobalHandlers(ProviderEvent event, EventDetails eventDetails) {
globalHandlerStore.handlerMap.get(event).forEach(handler -> {
runHandler(handler, eventDetails);
});
}
/**
* Add a handler for the specified domain, or all unnamed clients.
*
* @param domain the domain to add handlers for, or else unnamed
* @param event the event type
* @param handler the handler function to run
*/
public void addClientHandler(String domain, ProviderEvent event, Consumer<EventDetails> handler) {
final String name = Optional.ofNullable(domain).orElse(DEFAULT_CLIENT_UUID);
// lazily create and cache a HandlerStore if it doesn't exist
HandlerStore store = Optional.ofNullable(this.handlerStores.get(name)).orElseGet(() -> {
HandlerStore newStore = new HandlerStore();
this.handlerStores.put(name, newStore);
return newStore;
});
store.addHandler(event, handler);
}
/**
* Remove a client event handler for the specified event type.
*
* @param domain the domain of the client handler to remove, or null to remove
* from unnamed clients
* @param event the event type
* @param handler the handler ref to be removed
*/
public void removeClientHandler(String domain, ProviderEvent event, Consumer<EventDetails> handler) {
domain = Optional.ofNullable(domain).orElse(DEFAULT_CLIENT_UUID);
this.handlerStores.get(domain).removeHandler(event, handler);
}
/**
* Add a global event handler of the specified event type.
*
* @param event the event type
* @param handler the handler to be added
*/
public void addGlobalHandler(ProviderEvent event, Consumer<EventDetails> handler) {
this.globalHandlerStore.addHandler(event, handler);
}
/**
* Remove a global event handler for the specified event type.
*
* @param event the event type
* @param handler the handler ref to be removed
*/
public void removeGlobalHandler(ProviderEvent event, Consumer<EventDetails> handler) {
this.globalHandlerStore.removeHandler(event, handler);
}
/**
* Get all domain names for which we have event handlers registered.
*
* @return set of domain names
*/
public Set<String> getAllDomainNames() {
return this.handlerStores.keySet();
}
/**
* Run the passed handler on the taskExecutor.
*
* @param handler the handler to run
* @param eventDetails the event details
*/
public void runHandler(Consumer<EventDetails> handler, EventDetails eventDetails) {
taskExecutor.submit(() -> {
try {
handler.accept(eventDetails);
} catch (Exception e) {
log.error("Exception in event handler {}", handler, e);
}
});
}
/**
* Stop the event handler task executor and block until either termination has completed
* or timeout period has elapsed.
*/
public void shutdown() {
taskExecutor.shutdown();
try {
if (!taskExecutor.awaitTermination(SHUTDOWN_TIMEOUT_SECONDS, TimeUnit.SECONDS)) {
log.warn("Task executor did not terminate before the timeout period had elapsed");
taskExecutor.shutdownNow();
}
} catch (InterruptedException e) {
taskExecutor.shutdownNow();
Thread.currentThread().interrupt();
}
}
// Handler store maintains a set of handlers for each event type.
// Each client in the SDK gets it's own handler store, which is lazily
// instantiated when a handler is added to that client.
static class HandlerStore {
private final Map<ProviderEvent, Collection<Consumer<EventDetails>>> handlerMap;
HandlerStore() {
handlerMap = new ConcurrentHashMap<>();
handlerMap.put(ProviderEvent.PROVIDER_READY, new ConcurrentLinkedQueue<>());
handlerMap.put(ProviderEvent.PROVIDER_CONFIGURATION_CHANGED, new ConcurrentLinkedQueue<>());
handlerMap.put(ProviderEvent.PROVIDER_ERROR, new ConcurrentLinkedQueue<>());
handlerMap.put(ProviderEvent.PROVIDER_STALE, new ConcurrentLinkedQueue<>());
}
void addHandler(ProviderEvent event, Consumer<EventDetails> handler) {
handlerMap.get(event).add(handler);
}
void removeHandler(ProviderEvent event, Consumer<EventDetails> handler) {
handlerMap.get(event).remove(handler);
}
}
}

View File

@ -0,0 +1,84 @@
package dev.openfeature.sdk;
import java.util.ArrayList;
import java.util.List;
/**
* The interface implemented by upstream flag providers to resolve flags for
* their service. If you want to support realtime events with your provider, you
* should extend {@link EventProvider}
*/
public interface FeatureProvider {
Metadata getMetadata();
default List<Hook> getProviderHooks() {
return new ArrayList<>();
}
ProviderEvaluation<Boolean> getBooleanEvaluation(String key, Boolean defaultValue, EvaluationContext ctx);
ProviderEvaluation<String> getStringEvaluation(String key, String defaultValue, EvaluationContext ctx);
ProviderEvaluation<Integer> getIntegerEvaluation(String key, Integer defaultValue, EvaluationContext ctx);
ProviderEvaluation<Double> getDoubleEvaluation(String key, Double defaultValue, EvaluationContext ctx);
ProviderEvaluation<Value> getObjectEvaluation(String key, Value defaultValue, EvaluationContext ctx);
/**
* This method is called before a provider is used to evaluate flags. Providers
* can overwrite this method,
* if they have special initialization needed prior being called for flag
* evaluation.
*
* <p>
* It is ok if the method is expensive as it is executed in the background. All
* runtime exceptions will be
* caught and logged.
* </p>
*/
default void initialize(EvaluationContext evaluationContext) throws Exception {
// Intentionally left blank
}
/**
* This method is called when a new provider is about to be used to evaluate
* flags, or the SDK is shut down.
* Providers can overwrite this method, if they have special shutdown actions
* needed.
*
* <p>
* It is ok if the method is expensive as it is executed in the background. All
* runtime exceptions will be
* caught and logged.
* </p>
*/
default void shutdown() {
// Intentionally left blank
}
/**
* Returns a representation of the current readiness of the provider.
* If the provider needs to be initialized, it should return {@link ProviderState#NOT_READY}.
* If the provider is in an error state, it should return {@link ProviderState#ERROR}.
* If the provider is functioning normally, it should return {@link ProviderState#READY}.
*
* <p><i>Providers which do not implement this method are assumed to be ready immediately.</i></p>
*
* @return ProviderState
* @deprecated The state is handled by the SDK internally. Query the state from the {@link Client} instead.
*/
@Deprecated
default ProviderState getState() {
return ProviderState.READY;
}
/**
* Feature provider implementations can opt in for to support Tracking by implementing this method.
*
* @param eventName The name of the tracking event
* @param context Evaluation context used in flag evaluation (Optional)
* @param details Data pertinent to a particular tracking event (Optional)
*/
default void track(String eventName, EvaluationContext context, TrackingEventDetails details) {}
}

View File

@ -0,0 +1,88 @@
package dev.openfeature.sdk;
import dev.openfeature.sdk.exceptions.OpenFeatureError;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import lombok.extern.slf4j.Slf4j;
@Slf4j
class FeatureProviderStateManager implements EventProviderListener {
private final FeatureProvider delegate;
private final AtomicBoolean isInitialized = new AtomicBoolean();
private final AtomicReference<ProviderState> state = new AtomicReference<>(ProviderState.NOT_READY);
public FeatureProviderStateManager(FeatureProvider delegate) {
this.delegate = delegate;
if (delegate instanceof EventProvider) {
((EventProvider) delegate).setEventProviderListener(this);
}
}
public void initialize(EvaluationContext evaluationContext) throws Exception {
if (isInitialized.getAndSet(true)) {
return;
}
try {
delegate.initialize(evaluationContext);
setState(ProviderState.READY);
} catch (OpenFeatureError openFeatureError) {
if (ErrorCode.PROVIDER_FATAL.equals(openFeatureError.getErrorCode())) {
setState(ProviderState.FATAL);
} else {
setState(ProviderState.ERROR);
}
isInitialized.set(false);
throw openFeatureError;
} catch (Exception e) {
setState(ProviderState.ERROR);
isInitialized.set(false);
throw e;
}
}
public void shutdown() {
delegate.shutdown();
setState(ProviderState.NOT_READY);
isInitialized.set(false);
}
@Override
public void onEmit(ProviderEvent event, ProviderEventDetails details) {
if (ProviderEvent.PROVIDER_ERROR.equals(event)) {
if (details != null && details.getErrorCode() == ErrorCode.PROVIDER_FATAL) {
setState(ProviderState.FATAL);
} else {
setState(ProviderState.ERROR);
}
} else if (ProviderEvent.PROVIDER_STALE.equals(event)) {
setState(ProviderState.STALE);
} else if (ProviderEvent.PROVIDER_READY.equals(event)) {
setState(ProviderState.READY);
}
}
private void setState(ProviderState state) {
ProviderState oldState = this.state.getAndSet(state);
if (oldState != state) {
String providerName;
if (delegate.getMetadata() == null || delegate.getMetadata().getName() == null) {
providerName = "unknown";
} else {
providerName = delegate.getMetadata().getName();
}
log.info("Provider {} transitioned from state {} to state {}", providerName, oldState, state);
}
}
public ProviderState getState() {
return state.get();
}
FeatureProvider getProvider() {
return delegate;
}
public boolean hasSameProvider(FeatureProvider featureProvider) {
return this.delegate.equals(featureProvider);
}
}

View File

@ -1,4 +1,4 @@
package dev.openfeature.javasdk;
package dev.openfeature.sdk;
/**
* An API for the type-specific fetch methods offered to users.
@ -15,8 +15,8 @@ public interface Features {
FlagEvaluationDetails<Boolean> getBooleanDetails(String key, Boolean defaultValue, EvaluationContext ctx);
FlagEvaluationDetails<Boolean> getBooleanDetails(String key, Boolean defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options);
FlagEvaluationDetails<Boolean> getBooleanDetails(
String key, Boolean defaultValue, EvaluationContext ctx, FlagEvaluationOptions options);
String getStringValue(String key, String defaultValue);
@ -28,8 +28,8 @@ public interface Features {
FlagEvaluationDetails<String> getStringDetails(String key, String defaultValue, EvaluationContext ctx);
FlagEvaluationDetails<String> getStringDetails(String key, String defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options);
FlagEvaluationDetails<String> getStringDetails(
String key, String defaultValue, EvaluationContext ctx, FlagEvaluationOptions options);
Integer getIntegerValue(String key, Integer defaultValue);
@ -41,8 +41,8 @@ public interface Features {
FlagEvaluationDetails<Integer> getIntegerDetails(String key, Integer defaultValue, EvaluationContext ctx);
FlagEvaluationDetails<Integer> getIntegerDetails(String key, Integer defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options);
FlagEvaluationDetails<Integer> getIntegerDetails(
String key, Integer defaultValue, EvaluationContext ctx, FlagEvaluationOptions options);
Double getDoubleValue(String key, Double defaultValue);
@ -54,19 +54,19 @@ public interface Features {
FlagEvaluationDetails<Double> getDoubleDetails(String key, Double defaultValue, EvaluationContext ctx);
FlagEvaluationDetails<Double> getDoubleDetails(String key, Double defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options);
FlagEvaluationDetails<Double> getDoubleDetails(
String key, Double defaultValue, EvaluationContext ctx, FlagEvaluationOptions options);
<T> T getObjectValue(String key, T defaultValue);
Value getObjectValue(String key, Value defaultValue);
<T> T getObjectValue(String key, T defaultValue, EvaluationContext ctx);
Value getObjectValue(String key, Value defaultValue, EvaluationContext ctx);
<T> T getObjectValue(String key, T defaultValue, EvaluationContext ctx, FlagEvaluationOptions options);
Value getObjectValue(String key, Value defaultValue, EvaluationContext ctx, FlagEvaluationOptions options);
<T> FlagEvaluationDetails<T> getObjectDetails(String key, T defaultValue);
FlagEvaluationDetails<Value> getObjectDetails(String key, Value defaultValue);
<T> FlagEvaluationDetails<T> getObjectDetails(String key, T defaultValue, EvaluationContext ctx);
FlagEvaluationDetails<Value> getObjectDetails(String key, Value defaultValue, EvaluationContext ctx);
<T> FlagEvaluationDetails<T> getObjectDetails(String key, T defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options);
FlagEvaluationDetails<Value> getObjectDetails(
String key, Value defaultValue, EvaluationContext ctx, FlagEvaluationOptions options);
}

View File

@ -0,0 +1,51 @@
package dev.openfeature.sdk;
import java.util.Optional;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* Contains information about how the provider resolved a flag, including the
* resolved value.
*
* @param <T> the type of the flag being evaluated.
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class FlagEvaluationDetails<T> implements BaseEvaluation<T> {
private String flagKey;
private T value;
private String variant;
private String reason;
private ErrorCode errorCode;
private String errorMessage;
@Builder.Default
private ImmutableMetadata flagMetadata = ImmutableMetadata.builder().build();
/**
* Generate detail payload from the provider response.
*
* @param providerEval provider response
* @param flagKey key for the flag being evaluated
* @param <T> type of flag being returned
* @return detail payload
*/
public static <T> FlagEvaluationDetails<T> from(ProviderEvaluation<T> providerEval, String flagKey) {
return FlagEvaluationDetails.<T>builder()
.flagKey(flagKey)
.value(providerEval.getValue())
.variant(providerEval.getVariant())
.reason(providerEval.getReason())
.errorMessage(providerEval.getErrorMessage())
.errorCode(providerEval.getErrorCode())
.flagMetadata(Optional.ofNullable(providerEval.getFlagMetadata())
.orElse(ImmutableMetadata.builder().build()))
.build();
}
}

View File

@ -0,0 +1,18 @@
package dev.openfeature.sdk;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import lombok.Builder;
import lombok.Singular;
@SuppressWarnings("checkstyle:MissingJavadocType")
@lombok.Value
@Builder
public class FlagEvaluationOptions {
@Singular
List<Hook> hooks;
@Builder.Default
Map<String, Object> hookHints = new HashMap<>();
}

View File

@ -0,0 +1,10 @@
package dev.openfeature.sdk;
@SuppressWarnings("checkstyle:MissingJavadocType")
public enum FlagValueType {
STRING,
INTEGER,
DOUBLE,
OBJECT,
BOOLEAN;
}

View File

@ -1,4 +1,4 @@
package dev.openfeature.javasdk;
package dev.openfeature.sdk;
import java.util.Map;
import java.util.Optional;
@ -16,7 +16,7 @@ public interface Hook<T> {
* @param ctx Information about the particular flag evaluation
* @param hints An immutable mapping of data for users to communicate to the hooks.
* @return An optional {@link EvaluationContext}. If returned, it will be merged with the EvaluationContext
* instances from other hooks, the client and API.
* instances from other hooks, the client and API.
*/
default Optional<EvaluationContext> before(HookContext<T> ctx, Map<String, Object> hints) {
return Optional.empty();
@ -29,8 +29,7 @@ public interface Hook<T> {
* @param details Information about how the flag was resolved, including any resolved values.
* @param hints An immutable mapping of data for users to communicate to the hooks.
*/
default void after(HookContext<T> ctx, FlagEvaluationDetails<T> details, Map<String, Object> hints) {
}
default void after(HookContext<T> ctx, FlagEvaluationDetails<T> details, Map<String, Object> hints) {}
/**
* Run when evaluation encounters an error. This will always run. Errors thrown will be swallowed.
@ -39,8 +38,7 @@ public interface Hook<T> {
* @param error The exception that was thrown.
* @param hints An immutable mapping of data for users to communicate to the hooks.
*/
default void error(HookContext<T> ctx, Exception error, Map<String, Object> hints) {
}
default void error(HookContext<T> ctx, Exception error, Map<String, Object> hints) {}
/**
* Run after flag evaluation, including any error processing. This will always run. Errors will be swallowed.
@ -48,8 +46,7 @@ public interface Hook<T> {
* @param ctx Information about the particular flag evaluation
* @param hints An immutable mapping of data for users to communicate to the hooks.
*/
default void finallyAfter(HookContext<T> ctx, Map<String, Object> hints) {
}
default void finallyAfter(HookContext<T> ctx, FlagEvaluationDetails<T> details, Map<String, Object> hints) {}
default boolean supportsFlagValueType(FlagValueType flagValueType) {
return true;

View File

@ -1,4 +1,4 @@
package dev.openfeature.javasdk;
package dev.openfeature.sdk;
import lombok.Builder;
import lombok.NonNull;
@ -10,28 +10,40 @@ import lombok.With;
*
* @param <T> the type for the flag being evaluated
*/
@Value @Builder @With
@Value
@Builder
@With
public class HookContext<T> {
@NonNull String flagKey;
@NonNull FlagValueType type;
@NonNull T defaultValue;
@NonNull EvaluationContext ctx;
Metadata clientMetadata;
ClientMetadata clientMetadata;
Metadata providerMetadata;
/**
* Builds a {@link HookContext} instances from request data.
* @param key feature flag key
* @param type flag value type
* @param clientMetadata info on which client is calling
*
* @param key feature flag key
* @param type flag value type
* @param clientMetadata info on which client is calling
* @param providerMetadata info on the provider
* @param ctx Evaluation Context for the request
* @param defaultValue Fallback value
* @param <T> type that the flag is evaluating against
* @param ctx Evaluation Context for the request
* @param defaultValue Fallback value
* @param <T> type that the flag is evaluating against
* @return resulting context for hook
*/
public static <T> HookContext<T> from(String key, FlagValueType type, Metadata clientMetadata,
Metadata providerMetadata, EvaluationContext ctx, T defaultValue) {
public static <T> HookContext<T> from(
String key,
FlagValueType type,
ClientMetadata clientMetadata,
Metadata providerMetadata,
EvaluationContext ctx,
T defaultValue) {
return HookContext.<T>builder()
.flagKey(key)
.type(type)

View File

@ -0,0 +1,101 @@
package dev.openfeature.sdk;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Consumer;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RequiredArgsConstructor
@SuppressWarnings({"unchecked", "rawtypes"})
class HookSupport {
public EvaluationContext beforeHooks(
FlagValueType flagValueType, HookContext hookCtx, List<Hook> hooks, Map<String, Object> hints) {
return callBeforeHooks(flagValueType, hookCtx, hooks, hints);
}
public void afterHooks(
FlagValueType flagValueType,
HookContext hookContext,
FlagEvaluationDetails details,
List<Hook> hooks,
Map<String, Object> hints) {
executeHooksUnchecked(flagValueType, hooks, hook -> hook.after(hookContext, details, hints));
}
public void afterAllHooks(
FlagValueType flagValueType,
HookContext hookCtx,
FlagEvaluationDetails details,
List<Hook> hooks,
Map<String, Object> hints) {
executeHooks(flagValueType, hooks, "finally", hook -> hook.finallyAfter(hookCtx, details, hints));
}
public void errorHooks(
FlagValueType flagValueType,
HookContext hookCtx,
Exception e,
List<Hook> hooks,
Map<String, Object> hints) {
executeHooks(flagValueType, hooks, "error", hook -> hook.error(hookCtx, e, hints));
}
private <T> void executeHooks(
FlagValueType flagValueType, List<Hook> hooks, String hookMethod, Consumer<Hook<T>> hookCode) {
if (hooks != null) {
for (Hook hook : hooks) {
if (hook.supportsFlagValueType(flagValueType)) {
executeChecked(hook, hookCode, hookMethod);
}
}
}
}
// before, error, and finally hooks shouldn't throw
private <T> void executeChecked(Hook<T> hook, Consumer<Hook<T>> hookCode, String hookMethod) {
try {
hookCode.accept(hook);
} catch (Exception exception) {
log.error(
"Unhandled exception when running {} hook {} (only 'after' hooks should throw)",
hookMethod,
hook.getClass(),
exception);
}
}
// after hooks can throw in order to do validation
private <T> void executeHooksUnchecked(FlagValueType flagValueType, List<Hook> hooks, Consumer<Hook<T>> hookCode) {
if (hooks != null) {
for (Hook hook : hooks) {
if (hook.supportsFlagValueType(flagValueType)) {
hookCode.accept(hook);
}
}
}
}
private EvaluationContext callBeforeHooks(
FlagValueType flagValueType, HookContext hookCtx, List<Hook> hooks, Map<String, Object> hints) {
// These traverse backwards from normal.
List<Hook> reversedHooks = new ArrayList<>(hooks);
Collections.reverse(reversedHooks);
EvaluationContext context = hookCtx.getCtx();
for (Hook hook : reversedHooks) {
if (hook.supportsFlagValueType(flagValueType)) {
Optional<EvaluationContext> optional =
Optional.ofNullable(hook.before(hookCtx, hints)).orElse(Optional.empty());
if (optional.isPresent()) {
context = context.merge(optional.get());
}
}
}
return context;
}
}

View File

@ -0,0 +1,106 @@
package dev.openfeature.sdk;
import dev.openfeature.sdk.internal.ExcludeFromGeneratedCoverageReport;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Delegate;
/**
* The EvaluationContext is a container for arbitrary contextual data
* that can be used as a basis for dynamic evaluation.
* The ImmutableContext is an EvaluationContext implementation which is
* threadsafe, and whose attributes can
* not be modified after instantiation.
*/
@ToString
@EqualsAndHashCode
@SuppressWarnings("PMD.BeanMembersShouldSerialize")
public final class ImmutableContext implements EvaluationContext {
@Delegate(excludes = DelegateExclusions.class)
private final ImmutableStructure structure;
/**
* Create an immutable context with an empty targeting_key and attributes
* provided.
*/
public ImmutableContext() {
this(new HashMap<>());
}
/**
* Create an immutable context with given targeting_key provided.
*
* @param targetingKey targeting key
*/
public ImmutableContext(String targetingKey) {
this(targetingKey, new HashMap<>());
}
/**
* Create an immutable context with an attributes provided.
*
* @param attributes evaluation context attributes
*/
public ImmutableContext(Map<String, Value> attributes) {
this(null, attributes);
}
/**
* Create an immutable context with given targetingKey and attributes provided.
*
* @param targetingKey targeting key
* @param attributes evaluation context attributes
*/
public ImmutableContext(String targetingKey, Map<String, Value> attributes) {
if (targetingKey != null && !targetingKey.trim().isEmpty()) {
this.structure = new ImmutableStructure(targetingKey, attributes);
} else {
this.structure = new ImmutableStructure(attributes);
}
}
/**
* Retrieve targetingKey from the context.
*/
@Override
public String getTargetingKey() {
Value value = this.getValue(TARGETING_KEY);
return value == null ? null : value.asString();
}
/**
* Merges this EvaluationContext object with the passed EvaluationContext,
* overriding in case of conflict.
*
* @param overridingContext overriding context
* @return new, resulting merged context
*/
@Override
public EvaluationContext merge(EvaluationContext overridingContext) {
if (overridingContext == null || overridingContext.isEmpty()) {
return new ImmutableContext(this.asUnmodifiableMap());
}
if (this.isEmpty()) {
return new ImmutableContext(overridingContext.asUnmodifiableMap());
}
Map<String, Value> attributes = this.asMap();
EvaluationContext.mergeMaps(ImmutableStructure::new, attributes, overridingContext.asUnmodifiableMap());
return new ImmutableContext(attributes);
}
@SuppressWarnings("all")
private static class DelegateExclusions {
@ExcludeFromGeneratedCoverageReport
public <T extends Structure> Map<String, Value> merge(
Function<Map<String, Value>, Structure> newStructure,
Map<String, Value> base,
Map<String, Value> overriding) {
return null;
}
}
}

View File

@ -0,0 +1,198 @@
package dev.openfeature.sdk;
import java.util.HashMap;
import java.util.Map;
import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j;
/**
* Immutable Flag Metadata representation. Implementation is backed by a {@link Map} and immutability is provided
* through builder and accessors.
*/
@Slf4j
@EqualsAndHashCode
public class ImmutableMetadata {
private final Map<String, Object> metadata;
private ImmutableMetadata(Map<String, Object> metadata) {
this.metadata = metadata;
}
/**
* Retrieve a {@link String} value for the given key. A {@code null} value is returned if the key does not exist
* or if the value is of a different type.
*
* @param key flag metadata key to retrieve
*/
public String getString(final String key) {
return getValue(key, String.class);
}
/**
* Retrieve a {@link Integer} value for the given key. A {@code null} value is returned if the key does not exist
* or if the value is of a different type.
*
* @param key flag metadata key to retrieve
*/
public Integer getInteger(final String key) {
return getValue(key, Integer.class);
}
/**
* Retrieve a {@link Long} value for the given key. A {@code null} value is returned if the key does not exist
* or if the value is of a different type.
*
* @param key flag metadata key to retrieve
*/
public Long getLong(final String key) {
return getValue(key, Long.class);
}
/**
* Retrieve a {@link Float} value for the given key. A {@code null} value is returned if the key does not exist
* or if the value is of a different type.
*
* @param key flag metadata key to retrieve
*/
public Float getFloat(final String key) {
return getValue(key, Float.class);
}
/**
* Retrieve a {@link Double} value for the given key. A {@code null} value is returned if the key does not exist
* or if the value is of a different type.
*
* @param key flag metadata key to retrieve
*/
public Double getDouble(final String key) {
return getValue(key, Double.class);
}
/**
* Retrieve a {@link Boolean} value for the given key. A {@code null} value is returned if the key does not exist
* or if the value is of a different type.
*
* @param key flag metadata key to retrieve
*/
public Boolean getBoolean(final String key) {
return getValue(key, Boolean.class);
}
/**
* Generic value retrieval for the given key.
*/
public <T> T getValue(final String key, final Class<T> type) {
final Object o = metadata.get(key);
if (o == null) {
log.debug("Metadata key " + key + "does not exist");
return null;
}
try {
return type.cast(o);
} catch (ClassCastException e) {
log.debug("Error retrieving value for key " + key, e);
return null;
}
}
public boolean isEmpty() {
return metadata.isEmpty();
}
public boolean isNotEmpty() {
return !metadata.isEmpty();
}
/**
* Obtain a builder for {@link ImmutableMetadata}.
*/
public static ImmutableMetadataBuilder builder() {
return new ImmutableMetadataBuilder();
}
/**
* Immutable builder for {@link ImmutableMetadata}.
*/
public static class ImmutableMetadataBuilder {
private final Map<String, Object> metadata;
private ImmutableMetadataBuilder() {
metadata = new HashMap<>();
}
/**
* Add String value to the metadata.
*
* @param key flag metadata key to add
* @param value flag metadata value to add
*/
public ImmutableMetadataBuilder addString(final String key, final String value) {
metadata.put(key, value);
return this;
}
/**
* Add Integer value to the metadata.
*
* @param key flag metadata key to add
* @param value flag metadata value to add
*/
public ImmutableMetadataBuilder addInteger(final String key, final Integer value) {
metadata.put(key, value);
return this;
}
/**
* Add Long value to the metadata.
*
* @param key flag metadata key to add
* @param value flag metadata value to add
*/
public ImmutableMetadataBuilder addLong(final String key, final Long value) {
metadata.put(key, value);
return this;
}
/**
* Add Float value to the metadata.
*
* @param key flag metadata key to add
* @param value flag metadata value to add
*/
public ImmutableMetadataBuilder addFloat(final String key, final Float value) {
metadata.put(key, value);
return this;
}
/**
* Add Double value to the metadata.
*
* @param key flag metadata key to add
* @param value flag metadata value to add
*/
public ImmutableMetadataBuilder addDouble(final String key, final Double value) {
metadata.put(key, value);
return this;
}
/**
* Add Boolean value to the metadata.
*
* @param key flag metadata key to add
* @param value flag metadata value to add
*/
public ImmutableMetadataBuilder addBoolean(final String key, final Boolean value) {
metadata.put(key, value);
return this;
}
/**
* Retrieve {@link ImmutableMetadata} with provided key,value pairs.
*/
public ImmutableMetadata build() {
return new ImmutableMetadata(this.metadata);
}
}
}

View File

@ -0,0 +1,87 @@
package dev.openfeature.sdk;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.Set;
import lombok.EqualsAndHashCode;
import lombok.ToString;
/**
* {@link ImmutableStructure} represents a potentially nested object type which
* is used to represent
* structured data.
* The ImmutableStructure is a Structure implementation which is threadsafe, and
* whose attributes can
* not be modified after instantiation. All references are clones.
*/
@ToString
@EqualsAndHashCode(callSuper = true)
@SuppressWarnings({"PMD.BeanMembersShouldSerialize", "checkstyle:MissingJavadocType"})
public final class ImmutableStructure extends AbstractStructure {
/**
* create an immutable structure with the empty attributes.
*/
public ImmutableStructure() {
super();
}
/**
* create immutable structure with the given attributes.
*
* @param attributes attributes.
*/
public ImmutableStructure(Map<String, Value> attributes) {
super(copyAttributes(attributes, null));
}
ImmutableStructure(String targetingKey, Map<String, Value> attributes) {
super(copyAttributes(attributes, targetingKey));
}
@Override
public Set<String> keySet() {
return new HashSet<>(this.attributes.keySet());
}
// getters
@Override
public Value getValue(String key) {
Value value = attributes.get(key);
return value != null ? value.clone() : null;
}
/**
* Get all values.
*
* @return all attributes on the structure
*/
@Override
public Map<String, Value> asMap() {
return copyAttributes(attributes);
}
private static Map<String, Value> copyAttributes(Map<String, Value> in) {
return copyAttributes(in, null);
}
private static Map<String, Value> copyAttributes(Map<String, Value> in, String targetingKey) {
Map<String, Value> copy = new HashMap<>();
if (in != null) {
for (Entry<String, Value> entry : in.entrySet()) {
copy.put(
entry.getKey(),
Optional.ofNullable(entry.getValue())
.map((Value val) -> val.clone())
.orElse(null));
}
}
if (targetingKey != null) {
copy.put(EvaluationContext.TARGETING_KEY, new Value(targetingKey));
}
return copy;
}
}

View File

@ -0,0 +1,51 @@
package dev.openfeature.sdk;
import dev.openfeature.sdk.internal.ExcludeFromGeneratedCoverageReport;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import lombok.experimental.Delegate;
/**
* ImmutableTrackingEventDetails represents data pertinent to a particular tracking event.
*/
public class ImmutableTrackingEventDetails implements TrackingEventDetails {
@Delegate(excludes = DelegateExclusions.class)
private final ImmutableStructure structure;
private final Number value;
public ImmutableTrackingEventDetails() {
this.value = null;
this.structure = new ImmutableStructure();
}
public ImmutableTrackingEventDetails(final Number value) {
this.value = value;
this.structure = new ImmutableStructure();
}
public ImmutableTrackingEventDetails(final Number value, final Map<String, Value> attributes) {
this.value = value;
this.structure = new ImmutableStructure(attributes);
}
/**
* Returns the optional tracking value.
*/
public Optional<Number> getValue() {
return Optional.ofNullable(value);
}
@SuppressWarnings("all")
private static class DelegateExclusions {
@ExcludeFromGeneratedCoverageReport
public <T extends Structure> Map<String, Value> merge(
Function<Map<String, Value>, Structure> newStructure,
Map<String, Value> base,
Map<String, Value> overriding) {
return null;
}
}
}

View File

@ -0,0 +1,15 @@
package dev.openfeature.sdk;
/**
* An extension point which can run around flag resolution. They are intended to be used as a way to add custom logic
* to the lifecycle of flag evaluation.
*
* @see Hook
*/
public interface IntegerHook extends Hook<Integer> {
@Override
default boolean supportsFlagValueType(FlagValueType flagValueType) {
return FlagValueType.INTEGER == flagValueType;
}
}

View File

@ -1,4 +1,4 @@
package dev.openfeature.javasdk;
package dev.openfeature.sdk;
/**
* Holds identifying information about a given entity.

View File

@ -0,0 +1,175 @@
package dev.openfeature.sdk;
import dev.openfeature.sdk.internal.ExcludeFromGeneratedCoverageReport;
import java.time.Instant;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Delegate;
/**
* The EvaluationContext is a container for arbitrary contextual data
* that can be used as a basis for dynamic evaluation.
* The MutableContext is an EvaluationContext implementation which is not threadsafe, and whose attributes can
* be modified after instantiation.
*/
@ToString
@EqualsAndHashCode
@SuppressWarnings("PMD.BeanMembersShouldSerialize")
public class MutableContext implements EvaluationContext {
@Delegate(excludes = DelegateExclusions.class)
private final MutableStructure structure;
public MutableContext() {
this(new HashMap<>());
}
public MutableContext(String targetingKey) {
this(targetingKey, new HashMap<>());
}
public MutableContext(Map<String, Value> attributes) {
this(null, new HashMap<>(attributes));
}
/**
* Create a mutable context with given targetingKey and attributes provided. TargetingKey should be non-null
* and non-empty to be accepted.
*
* @param targetingKey targeting key
* @param attributes evaluation context attributes
*/
public MutableContext(String targetingKey, Map<String, Value> attributes) {
this.structure = new MutableStructure(new HashMap<>(attributes));
if (targetingKey != null && !targetingKey.trim().isEmpty()) {
this.structure.attributes.put(TARGETING_KEY, new Value(targetingKey));
}
}
// override @Delegate methods so that we can use "add" methods and still return MutableContext, not Structure
public MutableContext add(String key, Boolean value) {
this.structure.add(key, value);
return this;
}
public MutableContext add(String key, String value) {
this.structure.add(key, value);
return this;
}
public MutableContext add(String key, Integer value) {
this.structure.add(key, value);
return this;
}
public MutableContext add(String key, Double value) {
this.structure.add(key, value);
return this;
}
public MutableContext add(String key, Instant value) {
this.structure.add(key, value);
return this;
}
public MutableContext add(String key, Structure value) {
this.structure.add(key, value);
return this;
}
public MutableContext add(String key, List<Value> value) {
this.structure.add(key, value);
return this;
}
/**
* Override or set targeting key for this mutable context. Value should be non-null and non-empty to be accepted.
*/
public MutableContext setTargetingKey(String targetingKey) {
if (targetingKey != null && !targetingKey.trim().isEmpty()) {
this.add(TARGETING_KEY, targetingKey);
}
return this;
}
/**
* Retrieve targetingKey from the context.
*/
@Override
public String getTargetingKey() {
Value value = this.getValue(TARGETING_KEY);
return value == null ? null : value.asString();
}
/**
* Merges this EvaluationContext objects with the second overriding the in case of conflict.
*
* @param overridingContext overriding context
* @return resulting merged context
*/
@Override
public EvaluationContext merge(EvaluationContext overridingContext) {
if (overridingContext == null || overridingContext.isEmpty()) {
return this;
}
if (this.isEmpty()) {
return overridingContext;
}
Map<String, Value> attributes = this.asMap();
EvaluationContext.mergeMaps(MutableStructure::new, attributes, overridingContext.asUnmodifiableMap());
return new MutableContext(attributes);
}
/**
* Hidden class to tell Lombok not to copy these methods over via delegation.
*/
@SuppressWarnings("all")
private static class DelegateExclusions {
@ExcludeFromGeneratedCoverageReport
public <T extends Structure> Map<String, Value> merge(
Function<Map<String, Value>, Structure> newStructure,
Map<String, Value> base,
Map<String, Value> overriding) {
return null;
}
public MutableStructure add(String ignoredKey, Boolean ignoredValue) {
return null;
}
public MutableStructure add(String ignoredKey, Double ignoredValue) {
return null;
}
public MutableStructure add(String ignoredKey, String ignoredValue) {
return null;
}
public MutableStructure add(String ignoredKey, Value ignoredValue) {
return null;
}
public MutableStructure add(String ignoredKey, Integer ignoredValue) {
return null;
}
public MutableStructure add(String ignoredKey, List<Value> ignoredValue) {
return null;
}
public MutableStructure add(String ignoredKey, Structure ignoredValue) {
return null;
}
public MutableStructure add(String ignoredKey, Instant ignoredValue) {
return null;
}
}
}

View File

@ -0,0 +1,91 @@
package dev.openfeature.sdk;
import java.time.Instant;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import lombok.EqualsAndHashCode;
import lombok.ToString;
/**
* {@link MutableStructure} represents a potentially nested object type which is used to represent
* structured data.
* The MutableStructure is a Structure implementation which is not threadsafe, and whose attributes can
* be modified after instantiation.
*/
@ToString
@SuppressWarnings({"PMD.BeanMembersShouldSerialize", "checkstyle:MissingJavadocType"})
@EqualsAndHashCode(callSuper = true)
public class MutableStructure extends AbstractStructure {
public MutableStructure() {
super();
}
public MutableStructure(Map<String, Value> attributes) {
super(attributes);
}
@Override
public Set<String> keySet() {
return attributes.keySet();
}
// getters
@Override
public Value getValue(String key) {
return attributes.get(key);
}
// adders
public MutableStructure add(String key, Value value) {
attributes.put(key, value);
return this;
}
public MutableStructure add(String key, Boolean value) {
attributes.put(key, new Value(value));
return this;
}
public MutableStructure add(String key, String value) {
attributes.put(key, new Value(value));
return this;
}
public MutableStructure add(String key, Integer value) {
attributes.put(key, new Value(value));
return this;
}
public MutableStructure add(String key, Double value) {
attributes.put(key, new Value(value));
return this;
}
public MutableStructure add(String key, Instant value) {
attributes.put(key, new Value(value));
return this;
}
public MutableStructure add(String key, Structure value) {
attributes.put(key, new Value(value));
return this;
}
public MutableStructure add(String key, List<Value> value) {
attributes.put(key, new Value(value));
return this;
}
/**
* Get all values.
*
* @return all attributes on the structure
*/
@Override
public Map<String, Value> asMap() {
return new HashMap<>(attributes);
}
}

View File

@ -0,0 +1,94 @@
package dev.openfeature.sdk;
import dev.openfeature.sdk.internal.ExcludeFromGeneratedCoverageReport;
import java.time.Instant;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Delegate;
/**
* MutableTrackingEventDetails represents data pertinent to a particular tracking event.
*/
@EqualsAndHashCode
@ToString
public class MutableTrackingEventDetails implements TrackingEventDetails {
private final Number value;
@Delegate(excludes = MutableTrackingEventDetails.DelegateExclusions.class)
private final MutableStructure structure;
public MutableTrackingEventDetails() {
this.value = null;
this.structure = new MutableStructure();
}
public MutableTrackingEventDetails(final Number value) {
this.value = value;
this.structure = new MutableStructure();
}
/**
* Returns the optional tracking value.
*/
public Optional<Number> getValue() {
return Optional.ofNullable(value);
}
// override @Delegate methods so that we can use "add" methods and still return MutableTrackingEventDetails,
// not Structure
public MutableTrackingEventDetails add(String key, Boolean value) {
this.structure.add(key, value);
return this;
}
public MutableTrackingEventDetails add(String key, String value) {
this.structure.add(key, value);
return this;
}
public MutableTrackingEventDetails add(String key, Integer value) {
this.structure.add(key, value);
return this;
}
public MutableTrackingEventDetails add(String key, Double value) {
this.structure.add(key, value);
return this;
}
public MutableTrackingEventDetails add(String key, Instant value) {
this.structure.add(key, value);
return this;
}
public MutableTrackingEventDetails add(String key, Structure value) {
this.structure.add(key, value);
return this;
}
public MutableTrackingEventDetails add(String key, List<Value> value) {
this.structure.add(key, value);
return this;
}
public MutableTrackingEventDetails add(String key, Value value) {
this.structure.add(key, value);
return this;
}
@SuppressWarnings("all")
private static class DelegateExclusions {
@ExcludeFromGeneratedCoverageReport
public <T extends Structure> Map<String, Value> merge(
Function<Map<String, Value>, Structure> newStructure,
Map<String, Value> base,
Map<String, Value> overriding) {
return null;
}
}
}

View File

@ -1,4 +1,4 @@
package dev.openfeature.javasdk;
package dev.openfeature.sdk;
import lombok.Getter;
@ -7,67 +7,64 @@ import lombok.Getter;
*/
public class NoOpProvider implements FeatureProvider {
public static final String PASSED_IN_DEFAULT = "Passed in default";
@Getter
private final String name = "No-op Provider";
// The Noop provider is ALWAYS NOT_READY, otherwise READY handlers would run immediately when attached.
@Override
public Metadata getMetadata() {
return new Metadata() {
@Override
public String getName() {
return name;
}
};
public ProviderState getState() {
return ProviderState.NOT_READY;
}
@Override
public ProviderEvaluation<Boolean> getBooleanEvaluation(String key, Boolean defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options) {
public Metadata getMetadata() {
return () -> name;
}
@Override
public ProviderEvaluation<Boolean> getBooleanEvaluation(String key, Boolean defaultValue, EvaluationContext ctx) {
return ProviderEvaluation.<Boolean>builder()
.value(defaultValue)
.variant(PASSED_IN_DEFAULT)
.reason(Reason.DEFAULT)
.reason(Reason.DEFAULT.toString())
.build();
}
@Override
public ProviderEvaluation<String> getStringEvaluation(String key, String defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options) {
public ProviderEvaluation<String> getStringEvaluation(String key, String defaultValue, EvaluationContext ctx) {
return ProviderEvaluation.<String>builder()
.value(defaultValue)
.variant(PASSED_IN_DEFAULT)
.reason(Reason.DEFAULT)
.reason(Reason.DEFAULT.toString())
.build();
}
@Override
public ProviderEvaluation<Integer> getIntegerEvaluation(String key, Integer defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options) {
public ProviderEvaluation<Integer> getIntegerEvaluation(String key, Integer defaultValue, EvaluationContext ctx) {
return ProviderEvaluation.<Integer>builder()
.value(defaultValue)
.variant(PASSED_IN_DEFAULT)
.reason(Reason.DEFAULT)
.reason(Reason.DEFAULT.toString())
.build();
}
@Override
public ProviderEvaluation<Double> getDoubleEvaluation(String key, Double defaultValue, EvaluationContext ctx,
FlagEvaluationOptions options) {
public ProviderEvaluation<Double> getDoubleEvaluation(String key, Double defaultValue, EvaluationContext ctx) {
return ProviderEvaluation.<Double>builder()
.value(defaultValue)
.variant(PASSED_IN_DEFAULT)
.reason(Reason.DEFAULT)
.reason(Reason.DEFAULT.toString())
.build();
}
@Override
public <T> ProviderEvaluation<T> getObjectEvaluation(String key, T defaultValue,
EvaluationContext invocationContext,
FlagEvaluationOptions options) {
return ProviderEvaluation.<T>builder()
public ProviderEvaluation<Value> getObjectEvaluation(
String key, Value defaultValue, EvaluationContext invocationContext) {
return ProviderEvaluation.<Value>builder()
.value(defaultValue)
.variant(PASSED_IN_DEFAULT)
.reason(Reason.DEFAULT)
.reason(Reason.DEFAULT.toString())
.build();
}
}

View File

@ -0,0 +1,23 @@
package dev.openfeature.sdk;
/**
* A {@link TransactionContextPropagator} that simply returns empty context.
*/
public class NoOpTransactionContextPropagator implements TransactionContextPropagator {
/**
* {@inheritDoc}
*
* @return empty immutable context
*/
@Override
public EvaluationContext getTransactionContext() {
return new ImmutableContext();
}
/**
* {@inheritDoc}
*/
@Override
public void setTransactionContext(EvaluationContext evaluationContext) {}
}

View File

@ -0,0 +1,461 @@
package dev.openfeature.sdk;
import dev.openfeature.sdk.exceptions.OpenFeatureError;
import dev.openfeature.sdk.internal.AutoCloseableLock;
import dev.openfeature.sdk.internal.AutoCloseableReentrantReadWriteLock;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import lombok.extern.slf4j.Slf4j;
/**
* A global singleton which holds base configuration for the OpenFeature
* library.
* Configuration here will be shared across all {@link Client}s.
*/
@Slf4j
@SuppressWarnings("PMD.UnusedLocalVariable")
public class OpenFeatureAPI implements EventBus<OpenFeatureAPI> {
// package-private multi-read/single-write lock
static AutoCloseableReentrantReadWriteLock lock = new AutoCloseableReentrantReadWriteLock();
private final ConcurrentLinkedQueue<Hook> apiHooks;
private ProviderRepository providerRepository;
private EventSupport eventSupport;
private final AtomicReference<EvaluationContext> evaluationContext = new AtomicReference<>();
private TransactionContextPropagator transactionContextPropagator;
protected OpenFeatureAPI() {
apiHooks = new ConcurrentLinkedQueue<>();
providerRepository = new ProviderRepository(this);
eventSupport = new EventSupport();
transactionContextPropagator = new NoOpTransactionContextPropagator();
}
private static class SingletonHolder {
private static final OpenFeatureAPI INSTANCE = new OpenFeatureAPI();
}
/**
* Provisions the {@link OpenFeatureAPI} singleton (if needed) and returns it.
*
* @return The singleton instance.
*/
public static OpenFeatureAPI getInstance() {
return SingletonHolder.INSTANCE;
}
/**
* Get metadata about the default provider.
*
* @return the provider metadata
*/
public Metadata getProviderMetadata() {
return getProvider().getMetadata();
}
/**
* Get metadata about a registered provider using the client name.
* An unbound or empty client name will return metadata from the default provider.
*
* @param domain an identifier which logically binds clients with providers
* @return the provider metadata
*/
public Metadata getProviderMetadata(String domain) {
return getProvider(domain).getMetadata();
}
/**
* A factory function for creating new, OpenFeature client.
* Clients can contain their own state (e.g. logger, hook, context).
* Multiple clients can be used to segment feature flag configuration.
* All un-named or unbound clients use the default provider.
*
* @return a new client instance
*/
public Client getClient() {
return getClient(null, null);
}
/**
* A factory function for creating new domainless OpenFeature client.
* Clients can contain their own state (e.g. logger, hook, context).
* Multiple clients can be used to segment feature flag configuration.
* If there is already a provider bound to this domain, this provider will be used.
* Otherwise, the default provider is used until a provider is assigned to that domain.
*
* @param domain an identifier which logically binds clients with providers
* @return a new client instance
*/
public Client getClient(String domain) {
return getClient(domain, null);
}
/**
* A factory function for creating new domainless OpenFeature client.
* Clients can contain their own state (e.g. logger, hook, context).
* Multiple clients can be used to segment feature flag configuration.
* If there is already a provider bound to this domain, this provider will be used.
* Otherwise, the default provider is used until a provider is assigned to that domain.
*
* @param domain a identifier which logically binds clients with providers
* @param version a version identifier
* @return a new client instance
*/
public Client getClient(String domain, String version) {
return new OpenFeatureClient(this, domain, version);
}
/**
* Sets the global evaluation context, which will be used for all evaluations.
*
* @param evaluationContext the context
* @return api instance
*/
public OpenFeatureAPI setEvaluationContext(EvaluationContext evaluationContext) {
this.evaluationContext.set(evaluationContext);
return this;
}
/**
* Gets the global evaluation context, which will be used for all evaluations.
*
* @return evaluation context
*/
public EvaluationContext getEvaluationContext() {
return evaluationContext.get();
}
/**
* Return the transaction context propagator.
*/
public TransactionContextPropagator getTransactionContextPropagator() {
try (AutoCloseableLock ignored = lock.readLockAutoCloseable()) {
return this.transactionContextPropagator;
}
}
/**
* Sets the transaction context propagator.
*
* @throws IllegalArgumentException if {@code transactionContextPropagator} is null
*/
public void setTransactionContextPropagator(TransactionContextPropagator transactionContextPropagator) {
if (transactionContextPropagator == null) {
throw new IllegalArgumentException("Transaction context propagator cannot be null");
}
try (AutoCloseableLock ignored = lock.writeLockAutoCloseable()) {
this.transactionContextPropagator = transactionContextPropagator;
}
}
/**
* Returns the currently defined transaction context using the registered transaction
* context propagator.
*
* @return {@link EvaluationContext} The current transaction context
*/
EvaluationContext getTransactionContext() {
return this.transactionContextPropagator.getTransactionContext();
}
/**
* Sets the transaction context using the registered transaction context propagator.
*/
public void setTransactionContext(EvaluationContext evaluationContext) {
this.transactionContextPropagator.setTransactionContext(evaluationContext);
}
/**
* Set the default provider.
*/
public void setProvider(FeatureProvider provider) {
try (AutoCloseableLock ignored = lock.writeLockAutoCloseable()) {
providerRepository.setProvider(
provider,
this::attachEventProvider,
this::emitReady,
this::detachEventProvider,
this::emitError,
false);
}
}
/**
* Add a provider for a domain.
*
* @param domain The domain to bind the provider to.
* @param provider The provider to set.
*/
public void setProvider(String domain, FeatureProvider provider) {
try (AutoCloseableLock ignored = lock.writeLockAutoCloseable()) {
providerRepository.setProvider(
domain,
provider,
this::attachEventProvider,
this::emitReady,
this::detachEventProvider,
this::emitError,
false);
}
}
/**
* Sets the default provider and waits for its initialization to complete.
*
* <p>Note: If the provider fails during initialization, an {@link OpenFeatureError} will be thrown.
* It is recommended to wrap this call in a try-catch block to handle potential initialization failures gracefully.
*
* @param provider the {@link FeatureProvider} to set as the default.
* @throws OpenFeatureError if the provider fails during initialization.
*/
public void setProviderAndWait(FeatureProvider provider) throws OpenFeatureError {
try (AutoCloseableLock ignored = lock.writeLockAutoCloseable()) {
providerRepository.setProvider(
provider,
this::attachEventProvider,
this::emitReady,
this::detachEventProvider,
this::emitErrorAndThrow,
true);
}
}
/**
* Add a provider for a domain and wait for initialization to finish.
*
* <p>Note: If the provider fails during initialization, an {@link OpenFeatureError} will be thrown.
* It is recommended to wrap this call in a try-catch block to handle potential initialization failures gracefully.
*
* @param domain The domain to bind the provider to.
* @param provider The provider to set.
* @throws OpenFeatureError if the provider fails during initialization.
*/
public void setProviderAndWait(String domain, FeatureProvider provider) throws OpenFeatureError {
try (AutoCloseableLock ignored = lock.writeLockAutoCloseable()) {
providerRepository.setProvider(
domain,
provider,
this::attachEventProvider,
this::emitReady,
this::detachEventProvider,
this::emitErrorAndThrow,
true);
}
}
private void attachEventProvider(FeatureProvider provider) {
if (provider instanceof EventProvider) {
((EventProvider) provider).attach(this::runHandlersForProvider);
}
}
private void emitReady(FeatureProvider provider) {
runHandlersForProvider(
provider,
ProviderEvent.PROVIDER_READY,
ProviderEventDetails.builder().build());
}
private void detachEventProvider(FeatureProvider provider) {
if (provider instanceof EventProvider) {
((EventProvider) provider).detach();
}
}
private void emitError(FeatureProvider provider, OpenFeatureError exception) {
runHandlersForProvider(
provider,
ProviderEvent.PROVIDER_ERROR,
ProviderEventDetails.builder().message(exception.getMessage()).build());
}
private void emitErrorAndThrow(FeatureProvider provider, OpenFeatureError exception) throws OpenFeatureError {
this.emitError(provider, exception);
throw exception;
}
/**
* Return the default provider.
*/
public FeatureProvider getProvider() {
return providerRepository.getProvider();
}
/**
* Fetch a provider for a domain. If not found, return the default.
*
* @param domain The domain to look for.
* @return A named {@link FeatureProvider}
*/
public FeatureProvider getProvider(String domain) {
return providerRepository.getProvider(domain);
}
/**
* Adds hooks for globally, used for all evaluations.
* Hooks are run in the order they're added in the before stage. They are run in reverse order for all other stages.
*
* @param hooks The hook to add.
*/
public void addHooks(Hook... hooks) {
this.apiHooks.addAll(Arrays.asList(hooks));
}
/**
* Fetch the hooks associated to this client.
*
* @return A list of {@link Hook}s.
*/
public List<Hook> getHooks() {
return new ArrayList<>(this.apiHooks);
}
/**
* Returns a reference to the collection of {@link Hook}s.
*
* @return The collection of {@link Hook}s.
*/
Collection<Hook> getMutableHooks() {
return this.apiHooks;
}
/**
* Removes all hooks.
*/
public void clearHooks() {
this.apiHooks.clear();
}
/**
* Shut down and reset the current status of OpenFeature API.
* This call cleans up all active providers and attempts to shut down internal
* event handling mechanisms.
* Once shut down is complete, API is reset and ready to use again.
*/
public void shutdown() {
try (AutoCloseableLock ignored = lock.writeLockAutoCloseable()) {
providerRepository.shutdown();
eventSupport.shutdown();
providerRepository = new ProviderRepository(this);
eventSupport = new EventSupport();
}
}
/**
* {@inheritDoc}
*/
@Override
public OpenFeatureAPI onProviderReady(Consumer<EventDetails> handler) {
return this.on(ProviderEvent.PROVIDER_READY, handler);
}
/**
* {@inheritDoc}
*/
@Override
public OpenFeatureAPI onProviderConfigurationChanged(Consumer<EventDetails> handler) {
return this.on(ProviderEvent.PROVIDER_CONFIGURATION_CHANGED, handler);
}
/**
* {@inheritDoc}
*/
@Override
public OpenFeatureAPI onProviderStale(Consumer<EventDetails> handler) {
return this.on(ProviderEvent.PROVIDER_STALE, handler);
}
/**
* {@inheritDoc}
*/
@Override
public OpenFeatureAPI onProviderError(Consumer<EventDetails> handler) {
return this.on(ProviderEvent.PROVIDER_ERROR, handler);
}
/**
* {@inheritDoc}
*/
@Override
public OpenFeatureAPI on(ProviderEvent event, Consumer<EventDetails> handler) {
try (AutoCloseableLock ignored = lock.writeLockAutoCloseable()) {
this.eventSupport.addGlobalHandler(event, handler);
return this;
}
}
/**
* {@inheritDoc}
*/
@Override
public OpenFeatureAPI removeHandler(ProviderEvent event, Consumer<EventDetails> handler) {
try (AutoCloseableLock ignored = lock.writeLockAutoCloseable()) {
this.eventSupport.removeGlobalHandler(event, handler);
}
return this;
}
void removeHandler(String domain, ProviderEvent event, Consumer<EventDetails> handler) {
try (AutoCloseableLock ignored = lock.writeLockAutoCloseable()) {
eventSupport.removeClientHandler(domain, event, handler);
}
}
void addHandler(String domain, ProviderEvent event, Consumer<EventDetails> handler) {
try (AutoCloseableLock ignored = lock.writeLockAutoCloseable()) {
// if the provider is in the state associated with event, run immediately
if (Optional.ofNullable(this.providerRepository.getProviderState(domain))
.orElse(ProviderState.READY)
.matchesEvent(event)) {
eventSupport.runHandler(
handler, EventDetails.builder().domain(domain).build());
}
eventSupport.addClientHandler(domain, event, handler);
}
}
FeatureProviderStateManager getFeatureProviderStateManager(String domain) {
return providerRepository.getFeatureProviderStateManager(domain);
}
/**
* Runs the handlers associated with a particular provider.
*
* @param provider the provider from where this event originated
* @param event the event type
* @param details the event details
*/
private void runHandlersForProvider(FeatureProvider provider, ProviderEvent event, ProviderEventDetails details) {
try (AutoCloseableLock ignored = lock.readLockAutoCloseable()) {
List<String> domainsForProvider = providerRepository.getDomainsForProvider(provider);
final String providerName = Optional.ofNullable(provider.getMetadata())
.map(Metadata::getName)
.orElse(null);
// run the global handlers
eventSupport.runGlobalHandlers(event, EventDetails.fromProviderEventDetails(details, providerName));
// run the handlers associated with domains for this provider
domainsForProvider.forEach(domain -> eventSupport.runClientHandlers(
domain, event, EventDetails.fromProviderEventDetails(details, providerName, domain)));
if (providerRepository.isDefaultProvider(provider)) {
// run handlers for clients that have no bound providers (since this is the default)
Set<String> allDomainNames = eventSupport.getAllDomainNames();
Set<String> boundDomains = providerRepository.getAllBoundDomains();
allDomainNames.removeAll(boundDomains);
allDomainNames.forEach(domain -> eventSupport.runClientHandlers(
domain, event, EventDetails.fromProviderEventDetails(details, providerName, domain)));
}
}
}
}

View File

@ -0,0 +1,518 @@
package dev.openfeature.sdk;
import dev.openfeature.sdk.exceptions.ExceptionUtils;
import dev.openfeature.sdk.exceptions.FatalError;
import dev.openfeature.sdk.exceptions.GeneralError;
import dev.openfeature.sdk.exceptions.OpenFeatureError;
import dev.openfeature.sdk.exceptions.ProviderNotReadyError;
import dev.openfeature.sdk.internal.ObjectUtils;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
/**
* OpenFeature Client implementation.
* You should not instantiate this or reference this class.
* Use the dev.openfeature.sdk.Client interface instead.
*
* @see Client
* @deprecated // TODO: eventually we will make this non-public. See issue #872
*/
@Slf4j
@SuppressWarnings({
"PMD.DataflowAnomalyAnalysis",
"PMD.BeanMembersShouldSerialize",
"PMD.UnusedLocalVariable",
"unchecked",
"rawtypes"
})
@Deprecated() // TODO: eventually we will make this non-public. See issue #872
public class OpenFeatureClient implements Client {
private final OpenFeatureAPI openfeatureApi;
@Getter
private final String domain;
@Getter
private final String version;
private final ConcurrentLinkedQueue<Hook> clientHooks;
private final HookSupport hookSupport;
private final AtomicReference<EvaluationContext> evaluationContext = new AtomicReference<>();
/**
* Deprecated public constructor. Use OpenFeature.API.getClient() instead.
*
* @param openFeatureAPI Backing global singleton
* @param domain An identifier which logically binds clients with
* providers (used by observability tools).
* @param version Version of the client (used by observability tools).
* @deprecated Do not use this constructor. It's for internal use only.
* Clients created using it will not run event handlers.
* Use the OpenFeatureAPI's getClient factory method instead.
*/
@Deprecated() // TODO: eventually we will make this non-public. See issue #872
public OpenFeatureClient(OpenFeatureAPI openFeatureAPI, String domain, String version) {
this.openfeatureApi = openFeatureAPI;
this.domain = domain;
this.version = version;
this.clientHooks = new ConcurrentLinkedQueue<>();
this.hookSupport = new HookSupport();
}
/**
* {@inheritDoc}
*/
@Override
public ProviderState getProviderState() {
return openfeatureApi.getFeatureProviderStateManager(domain).getState();
}
/**
* {@inheritDoc}
*/
@Override
public void track(String trackingEventName) {
validateTrackingEventName(trackingEventName);
invokeTrack(trackingEventName, null, null);
}
/**
* {@inheritDoc}
*/
@Override
public void track(String trackingEventName, EvaluationContext context) {
validateTrackingEventName(trackingEventName);
Objects.requireNonNull(context);
invokeTrack(trackingEventName, context, null);
}
/**
* {@inheritDoc}
*/
@Override
public void track(String trackingEventName, TrackingEventDetails details) {
validateTrackingEventName(trackingEventName);
Objects.requireNonNull(details);
invokeTrack(trackingEventName, null, details);
}
/**
* {@inheritDoc}
*/
@Override
public void track(String trackingEventName, EvaluationContext context, TrackingEventDetails details) {
validateTrackingEventName(trackingEventName);
Objects.requireNonNull(context);
Objects.requireNonNull(details);
invokeTrack(trackingEventName, mergeEvaluationContext(context), details);
}
/**
* {@inheritDoc}
*/
@Override
public OpenFeatureClient addHooks(Hook... hooks) {
this.clientHooks.addAll(Arrays.asList(hooks));
return this;
}
/**
* {@inheritDoc}
*/
@Override
public List<Hook> getHooks() {
return new ArrayList<>(this.clientHooks);
}
/**
* {@inheritDoc}
*/
@Override
public OpenFeatureClient setEvaluationContext(EvaluationContext evaluationContext) {
this.evaluationContext.set(evaluationContext);
return this;
}
/**
* {@inheritDoc}
*/
@Override
public EvaluationContext getEvaluationContext() {
return this.evaluationContext.get();
}
@SuppressFBWarnings(
value = {"REC_CATCH_EXCEPTION"},
justification = "We don't want to allow any exception to reach the user. "
+ "Instead, we return an evaluation result with the appropriate error code.")
private <T> FlagEvaluationDetails<T> evaluateFlag(
FlagValueType type, String key, T defaultValue, EvaluationContext ctx, FlagEvaluationOptions options) {
var flagOptions = ObjectUtils.defaultIfNull(
options, () -> FlagEvaluationOptions.builder().build());
var hints = Collections.unmodifiableMap(flagOptions.getHookHints());
FlagEvaluationDetails<T> details = null;
List<Hook> mergedHooks = null;
HookContext<T> afterHookContext = null;
try {
var stateManager = openfeatureApi.getFeatureProviderStateManager(this.domain);
// provider must be accessed once to maintain a consistent reference
var provider = stateManager.getProvider();
var state = stateManager.getState();
mergedHooks = ObjectUtils.merge(
provider.getProviderHooks(), flagOptions.getHooks(), clientHooks, openfeatureApi.getMutableHooks());
var mergedCtx = hookSupport.beforeHooks(
type,
HookContext.from(
key,
type,
this.getMetadata(),
provider.getMetadata(),
mergeEvaluationContext(ctx),
defaultValue),
mergedHooks,
hints);
afterHookContext =
HookContext.from(key, type, this.getMetadata(), provider.getMetadata(), mergedCtx, defaultValue);
// "short circuit" if the provider is in NOT_READY or FATAL state
if (ProviderState.NOT_READY.equals(state)) {
throw new ProviderNotReadyError("Provider not yet initialized");
}
if (ProviderState.FATAL.equals(state)) {
throw new FatalError("Provider is in an irrecoverable error state");
}
var providerEval =
(ProviderEvaluation<T>) createProviderEvaluation(type, key, defaultValue, provider, mergedCtx);
details = FlagEvaluationDetails.from(providerEval, key);
if (details.getErrorCode() != null) {
var error =
ExceptionUtils.instantiateErrorByErrorCode(details.getErrorCode(), details.getErrorMessage());
enrichDetailsWithErrorDefaults(defaultValue, details);
hookSupport.errorHooks(type, afterHookContext, error, mergedHooks, hints);
} else {
hookSupport.afterHooks(type, afterHookContext, details, mergedHooks, hints);
}
} catch (Exception e) {
if (details == null) {
details = FlagEvaluationDetails.<T>builder().flagKey(key).build();
}
if (e instanceof OpenFeatureError) {
details.setErrorCode(((OpenFeatureError) e).getErrorCode());
} else {
details.setErrorCode(ErrorCode.GENERAL);
}
details.setErrorMessage(e.getMessage());
enrichDetailsWithErrorDefaults(defaultValue, details);
hookSupport.errorHooks(type, afterHookContext, e, mergedHooks, hints);
} finally {
hookSupport.afterAllHooks(type, afterHookContext, details, mergedHooks, hints);
}
return details;
}
private static <T> void enrichDetailsWithErrorDefaults(T defaultValue, FlagEvaluationDetails<T> details) {
details.setValue(defaultValue);
details.setReason(Reason.ERROR.toString());
}
private static void validateTrackingEventName(String str) {
Objects.requireNonNull(str);
if (str.isEmpty()) {
throw new IllegalArgumentException("trackingEventName cannot be empty");
}
}
private void invokeTrack(String trackingEventName, EvaluationContext context, TrackingEventDetails details) {
openfeatureApi
.getFeatureProviderStateManager(domain)
.getProvider()
.track(trackingEventName, mergeEvaluationContext(context), details);
}
/**
* Merge invocation contexts with API, transaction and client contexts.
* Does not merge before context.
*
* @param invocationContext invocation context
* @return merged evaluation context
*/
private EvaluationContext mergeEvaluationContext(EvaluationContext invocationContext) {
final EvaluationContext apiContext = openfeatureApi.getEvaluationContext();
final EvaluationContext clientContext = evaluationContext.get();
final EvaluationContext transactionContext = openfeatureApi.getTransactionContext();
return mergeContextMaps(apiContext, transactionContext, clientContext, invocationContext);
}
private EvaluationContext mergeContextMaps(EvaluationContext... contexts) {
// avoid any unnecessary context instantiations and stream usage here; this is
// called with every evaluation.
Map merged = new HashMap<>();
for (EvaluationContext evaluationContext : contexts) {
if (evaluationContext != null && !evaluationContext.isEmpty()) {
EvaluationContext.mergeMaps(ImmutableStructure::new, merged, evaluationContext.asUnmodifiableMap());
}
}
return new ImmutableContext(merged);
}
private <T> ProviderEvaluation<?> createProviderEvaluation(
FlagValueType type,
String key,
T defaultValue,
FeatureProvider provider,
EvaluationContext invocationContext) {
switch (type) {
case BOOLEAN:
return provider.getBooleanEvaluation(key, (Boolean) defaultValue, invocationContext);
case STRING:
return provider.getStringEvaluation(key, (String) defaultValue, invocationContext);
case INTEGER:
return provider.getIntegerEvaluation(key, (Integer) defaultValue, invocationContext);
case DOUBLE:
return provider.getDoubleEvaluation(key, (Double) defaultValue, invocationContext);
case OBJECT:
return provider.getObjectEvaluation(key, (Value) defaultValue, invocationContext);
default:
throw new GeneralError("Unknown flag type");
}
}
@Override
public Boolean getBooleanValue(String key, Boolean defaultValue) {
return getBooleanDetails(key, defaultValue).getValue();
}
@Override
public Boolean getBooleanValue(String key, Boolean defaultValue, EvaluationContext ctx) {
return getBooleanDetails(key, defaultValue, ctx).getValue();
}
@Override
public Boolean getBooleanValue(
String key, Boolean defaultValue, EvaluationContext ctx, FlagEvaluationOptions options) {
return getBooleanDetails(key, defaultValue, ctx, options).getValue();
}
@Override
public FlagEvaluationDetails<Boolean> getBooleanDetails(String key, Boolean defaultValue) {
return getBooleanDetails(key, defaultValue, null);
}
@Override
public FlagEvaluationDetails<Boolean> getBooleanDetails(String key, Boolean defaultValue, EvaluationContext ctx) {
return getBooleanDetails(
key, defaultValue, ctx, FlagEvaluationOptions.builder().build());
}
@Override
public FlagEvaluationDetails<Boolean> getBooleanDetails(
String key, Boolean defaultValue, EvaluationContext ctx, FlagEvaluationOptions options) {
return this.evaluateFlag(FlagValueType.BOOLEAN, key, defaultValue, ctx, options);
}
@Override
public String getStringValue(String key, String defaultValue) {
return getStringDetails(key, defaultValue).getValue();
}
@Override
public String getStringValue(String key, String defaultValue, EvaluationContext ctx) {
return getStringDetails(key, defaultValue, ctx).getValue();
}
@Override
public String getStringValue(
String key, String defaultValue, EvaluationContext ctx, FlagEvaluationOptions options) {
return getStringDetails(key, defaultValue, ctx, options).getValue();
}
@Override
public FlagEvaluationDetails<String> getStringDetails(String key, String defaultValue) {
return getStringDetails(key, defaultValue, null);
}
@Override
public FlagEvaluationDetails<String> getStringDetails(String key, String defaultValue, EvaluationContext ctx) {
return getStringDetails(
key, defaultValue, ctx, FlagEvaluationOptions.builder().build());
}
@Override
public FlagEvaluationDetails<String> getStringDetails(
String key, String defaultValue, EvaluationContext ctx, FlagEvaluationOptions options) {
return this.evaluateFlag(FlagValueType.STRING, key, defaultValue, ctx, options);
}
@Override
public Integer getIntegerValue(String key, Integer defaultValue) {
return getIntegerDetails(key, defaultValue).getValue();
}
@Override
public Integer getIntegerValue(String key, Integer defaultValue, EvaluationContext ctx) {
return getIntegerDetails(key, defaultValue, ctx).getValue();
}
@Override
public Integer getIntegerValue(
String key, Integer defaultValue, EvaluationContext ctx, FlagEvaluationOptions options) {
return getIntegerDetails(key, defaultValue, ctx, options).getValue();
}
@Override
public FlagEvaluationDetails<Integer> getIntegerDetails(String key, Integer defaultValue) {
return getIntegerDetails(key, defaultValue, null);
}
@Override
public FlagEvaluationDetails<Integer> getIntegerDetails(String key, Integer defaultValue, EvaluationContext ctx) {
return getIntegerDetails(
key, defaultValue, ctx, FlagEvaluationOptions.builder().build());
}
@Override
public FlagEvaluationDetails<Integer> getIntegerDetails(
String key, Integer defaultValue, EvaluationContext ctx, FlagEvaluationOptions options) {
return this.evaluateFlag(FlagValueType.INTEGER, key, defaultValue, ctx, options);
}
@Override
public Double getDoubleValue(String key, Double defaultValue) {
return getDoubleValue(key, defaultValue, null);
}
@Override
public Double getDoubleValue(String key, Double defaultValue, EvaluationContext ctx) {
return getDoubleValue(key, defaultValue, ctx, null);
}
@Override
public Double getDoubleValue(
String key, Double defaultValue, EvaluationContext ctx, FlagEvaluationOptions options) {
return this.evaluateFlag(FlagValueType.DOUBLE, key, defaultValue, ctx, options)
.getValue();
}
@Override
public FlagEvaluationDetails<Double> getDoubleDetails(String key, Double defaultValue) {
return getDoubleDetails(key, defaultValue, null);
}
@Override
public FlagEvaluationDetails<Double> getDoubleDetails(String key, Double defaultValue, EvaluationContext ctx) {
return getDoubleDetails(key, defaultValue, ctx, null);
}
@Override
public FlagEvaluationDetails<Double> getDoubleDetails(
String key, Double defaultValue, EvaluationContext ctx, FlagEvaluationOptions options) {
return this.evaluateFlag(FlagValueType.DOUBLE, key, defaultValue, ctx, options);
}
@Override
public Value getObjectValue(String key, Value defaultValue) {
return getObjectDetails(key, defaultValue).getValue();
}
@Override
public Value getObjectValue(String key, Value defaultValue, EvaluationContext ctx) {
return getObjectDetails(key, defaultValue, ctx).getValue();
}
@Override
public Value getObjectValue(String key, Value defaultValue, EvaluationContext ctx, FlagEvaluationOptions options) {
return getObjectDetails(key, defaultValue, ctx, options).getValue();
}
@Override
public FlagEvaluationDetails<Value> getObjectDetails(String key, Value defaultValue) {
return getObjectDetails(key, defaultValue, null);
}
@Override
public FlagEvaluationDetails<Value> getObjectDetails(String key, Value defaultValue, EvaluationContext ctx) {
return getObjectDetails(
key, defaultValue, ctx, FlagEvaluationOptions.builder().build());
}
@Override
public FlagEvaluationDetails<Value> getObjectDetails(
String key, Value defaultValue, EvaluationContext ctx, FlagEvaluationOptions options) {
return this.evaluateFlag(FlagValueType.OBJECT, key, defaultValue, ctx, options);
}
@Override
public ClientMetadata getMetadata() {
return () -> domain;
}
/**
* {@inheritDoc}
*/
@Override
public Client onProviderReady(Consumer<EventDetails> handler) {
return on(ProviderEvent.PROVIDER_READY, handler);
}
/**
* {@inheritDoc}
*/
@Override
public Client onProviderConfigurationChanged(Consumer<EventDetails> handler) {
return on(ProviderEvent.PROVIDER_CONFIGURATION_CHANGED, handler);
}
/**
* {@inheritDoc}
*/
@Override
public Client onProviderError(Consumer<EventDetails> handler) {
return on(ProviderEvent.PROVIDER_ERROR, handler);
}
/**
* {@inheritDoc}
*/
@Override
public Client onProviderStale(Consumer<EventDetails> handler) {
return on(ProviderEvent.PROVIDER_STALE, handler);
}
/**
* {@inheritDoc}
*/
@Override
public Client on(ProviderEvent event, Consumer<EventDetails> handler) {
openfeatureApi.addHandler(domain, event, handler);
return this;
}
/**
* {@inheritDoc}
*/
@Override
public Client removeHandler(ProviderEvent event, Consumer<EventDetails> handler) {
openfeatureApi.removeHandler(domain, event, handler);
return this;
}
}

View File

@ -0,0 +1,26 @@
package dev.openfeature.sdk;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* Contains information about how the a flag was evaluated, including the resolved value.
*
* @param <T> the type of the flag being evaluated.
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProviderEvaluation<T> implements BaseEvaluation<T> {
T value;
String variant;
private String reason;
ErrorCode errorCode;
private String errorMessage;
@Builder.Default
private ImmutableMetadata flagMetadata = ImmutableMetadata.builder().build();
}

View File

@ -0,0 +1,11 @@
package dev.openfeature.sdk;
/**
* Provider event types.
*/
public enum ProviderEvent {
PROVIDER_READY,
PROVIDER_CONFIGURATION_CHANGED,
PROVIDER_ERROR,
PROVIDER_STALE;
}

View File

@ -0,0 +1,17 @@
package dev.openfeature.sdk;
import java.util.List;
import lombok.Data;
import lombok.experimental.SuperBuilder;
/**
* The details of a particular event.
*/
@Data
@SuperBuilder(toBuilder = true)
public class ProviderEventDetails {
private List<String> flagsChanged;
private String message;
private ImmutableMetadata eventMetadata;
private ErrorCode errorCode;
}

View File

@ -0,0 +1,283 @@
package dev.openfeature.sdk;
import dev.openfeature.sdk.exceptions.GeneralError;
import dev.openfeature.sdk.exceptions.OpenFeatureError;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import lombok.extern.slf4j.Slf4j;
@Slf4j
class ProviderRepository {
private final Map<String, FeatureProviderStateManager> stateManagers = new ConcurrentHashMap<>();
private final AtomicReference<FeatureProviderStateManager> defaultStateManger =
new AtomicReference<>(new FeatureProviderStateManager(new NoOpProvider()));
private final ExecutorService taskExecutor = Executors.newCachedThreadPool(runnable -> {
final Thread thread = new Thread(runnable);
thread.setDaemon(true);
return thread;
});
private final Object registerStateManagerLock = new Object();
private final OpenFeatureAPI openFeatureAPI;
public ProviderRepository(OpenFeatureAPI openFeatureAPI) {
this.openFeatureAPI = openFeatureAPI;
}
FeatureProviderStateManager getFeatureProviderStateManager() {
return defaultStateManger.get();
}
FeatureProviderStateManager getFeatureProviderStateManager(String domain) {
if (domain == null) {
return defaultStateManger.get();
}
FeatureProviderStateManager fromMap = this.stateManagers.get(domain);
if (fromMap == null) {
return this.defaultStateManger.get();
} else {
return fromMap;
}
}
/**
* Return the default provider.
*/
public FeatureProvider getProvider() {
return defaultStateManger.get().getProvider();
}
/**
* Fetch a provider for a domain. If not found, return the default.
*
* @param domain The domain to look for.
* @return A named {@link FeatureProvider}
*/
public FeatureProvider getProvider(String domain) {
return getFeatureProviderStateManager(domain).getProvider();
}
public ProviderState getProviderState() {
return getFeatureProviderStateManager().getState();
}
public ProviderState getProviderState(FeatureProvider featureProvider) {
if (featureProvider instanceof FeatureProviderStateManager) {
return ((FeatureProviderStateManager) featureProvider).getState();
}
FeatureProviderStateManager defaultProvider = this.defaultStateManger.get();
if (defaultProvider.hasSameProvider(featureProvider)) {
return defaultProvider.getState();
}
for (FeatureProviderStateManager wrapper : stateManagers.values()) {
if (wrapper.hasSameProvider(featureProvider)) {
return wrapper.getState();
}
}
return null;
}
public ProviderState getProviderState(String domain) {
return Optional.ofNullable(domain)
.map(this.stateManagers::get)
.orElse(this.defaultStateManger.get())
.getState();
}
public List<String> getDomainsForProvider(FeatureProvider provider) {
return stateManagers.entrySet().stream()
.filter(entry -> entry.getValue().hasSameProvider(provider))
.map(Map.Entry::getKey)
.collect(Collectors.toList());
}
public Set<String> getAllBoundDomains() {
return stateManagers.keySet();
}
public boolean isDefaultProvider(FeatureProvider provider) {
return this.getProvider().equals(provider);
}
/**
* Set the default provider.
*/
public void setProvider(
FeatureProvider provider,
Consumer<FeatureProvider> afterSet,
Consumer<FeatureProvider> afterInit,
Consumer<FeatureProvider> afterShutdown,
BiConsumer<FeatureProvider, OpenFeatureError> afterError,
boolean waitForInit) {
if (provider == null) {
throw new IllegalArgumentException("Provider cannot be null");
}
prepareAndInitializeProvider(null, provider, afterSet, afterInit, afterShutdown, afterError, waitForInit);
}
/**
* Add a provider for a domain.
*
* @param domain The domain to bind the provider to.
* @param provider The provider to set.
* @param waitForInit When true, wait for initialization to finish, then returns.
* Otherwise, initialization happens in the background.
*/
public void setProvider(
String domain,
FeatureProvider provider,
Consumer<FeatureProvider> afterSet,
Consumer<FeatureProvider> afterInit,
Consumer<FeatureProvider> afterShutdown,
BiConsumer<FeatureProvider, OpenFeatureError> afterError,
boolean waitForInit) {
if (provider == null) {
throw new IllegalArgumentException("Provider cannot be null");
}
if (domain == null) {
throw new IllegalArgumentException("domain cannot be null");
}
prepareAndInitializeProvider(domain, provider, afterSet, afterInit, afterShutdown, afterError, waitForInit);
}
private void prepareAndInitializeProvider(
String domain,
FeatureProvider newProvider,
Consumer<FeatureProvider> afterSet,
Consumer<FeatureProvider> afterInit,
Consumer<FeatureProvider> afterShutdown,
BiConsumer<FeatureProvider, OpenFeatureError> afterError,
boolean waitForInit) {
final FeatureProviderStateManager newStateManager;
final FeatureProviderStateManager oldStateManager;
synchronized (registerStateManagerLock) {
FeatureProviderStateManager existing = getExistingStateManagerForProvider(newProvider);
if (existing == null) {
newStateManager = new FeatureProviderStateManager(newProvider);
// only run afterSet if new provider is not already attached
afterSet.accept(newProvider);
} else {
newStateManager = existing;
}
// provider is set immediately, on this thread
oldStateManager = domain != null
? this.stateManagers.put(domain, newStateManager)
: this.defaultStateManger.getAndSet(newStateManager);
}
if (waitForInit) {
initializeProvider(newStateManager, afterInit, afterShutdown, afterError, oldStateManager);
} else {
taskExecutor.submit(() -> {
// initialization happens in a different thread if we're not waiting for it
initializeProvider(newStateManager, afterInit, afterShutdown, afterError, oldStateManager);
});
}
}
private FeatureProviderStateManager getExistingStateManagerForProvider(FeatureProvider provider) {
for (FeatureProviderStateManager stateManager : stateManagers.values()) {
if (stateManager.hasSameProvider(provider)) {
return stateManager;
}
}
FeatureProviderStateManager defaultFeatureProviderStateManager = defaultStateManger.get();
if (defaultFeatureProviderStateManager.hasSameProvider(provider)) {
return defaultFeatureProviderStateManager;
}
return null;
}
private void initializeProvider(
FeatureProviderStateManager newManager,
Consumer<FeatureProvider> afterInit,
Consumer<FeatureProvider> afterShutdown,
BiConsumer<FeatureProvider, OpenFeatureError> afterError,
FeatureProviderStateManager oldManager) {
try {
if (ProviderState.NOT_READY.equals(newManager.getState())) {
newManager.initialize(openFeatureAPI.getEvaluationContext());
afterInit.accept(newManager.getProvider());
}
shutDownOld(oldManager, afterShutdown);
} catch (OpenFeatureError e) {
log.error(
"Exception when initializing feature provider {}",
newManager.getProvider().getClass().getName(),
e);
afterError.accept(newManager.getProvider(), e);
} catch (Exception e) {
log.error(
"Exception when initializing feature provider {}",
newManager.getProvider().getClass().getName(),
e);
afterError.accept(newManager.getProvider(), new GeneralError(e));
}
}
private void shutDownOld(FeatureProviderStateManager oldManager, Consumer<FeatureProvider> afterShutdown) {
if (oldManager != null && !isStateManagerRegistered(oldManager)) {
shutdownProvider(oldManager);
afterShutdown.accept(oldManager.getProvider());
}
}
/**
* Helper to check if manager is already known (registered).
*
* @param manager manager to check for registration
* @return boolean true if already registered, false otherwise
*/
private boolean isStateManagerRegistered(FeatureProviderStateManager manager) {
return manager != null
&& (this.stateManagers.containsValue(manager)
|| this.defaultStateManger.get().equals(manager));
}
private void shutdownProvider(FeatureProviderStateManager manager) {
if (manager == null) {
return;
}
shutdownProvider(manager.getProvider());
}
private void shutdownProvider(FeatureProvider provider) {
taskExecutor.submit(() -> {
try {
provider.shutdown();
} catch (Exception e) {
log.error(
"Exception when shutting down feature provider {}",
provider.getClass().getName(),
e);
}
});
}
/**
* Shuts down this repository which includes shutting down all FeatureProviders
* that are registered,
* including the default feature provider.
*/
public void shutdown() {
Stream.concat(Stream.of(this.defaultStateManger.get()), this.stateManagers.values().stream())
.distinct()
.forEach(this::shutdownProvider);
this.stateManagers.clear();
taskExecutor.shutdown();
}
}

View File

@ -0,0 +1,24 @@
package dev.openfeature.sdk;
/**
* Indicates the state of the provider.
*/
public enum ProviderState {
READY,
NOT_READY,
ERROR,
STALE,
FATAL;
/**
* Returns true if the passed ProviderEvent maps to this ProviderState.
*
* @param event event to compare
* @return boolean if matches.
*/
boolean matchesEvent(ProviderEvent event) {
return this == READY && event == ProviderEvent.PROVIDER_READY
|| this == STALE && event == ProviderEvent.PROVIDER_STALE
|| this == ERROR && event == ProviderEvent.PROVIDER_ERROR;
}
}

View File

@ -0,0 +1,15 @@
package dev.openfeature.sdk;
/**
* Predefined resolution reasons.
*/
public enum Reason {
DISABLED,
SPLIT,
TARGETING_MATCH,
DEFAULT,
UNKNOWN,
CACHED,
STATIC,
ERROR
}

View File

@ -0,0 +1,15 @@
package dev.openfeature.sdk;
/**
* An extension point which can run around flag resolution. They are intended to be used as a way to add custom logic
* to the lifecycle of flag evaluation.
*
* @see Hook
*/
public interface StringHook extends Hook<String> {
@Override
default boolean supportsFlagValueType(FlagValueType flagValueType) {
return FlagValueType.STRING == flagValueType;
}
}

View File

@ -0,0 +1,123 @@
package dev.openfeature.sdk;
import static dev.openfeature.sdk.Value.objectToValue;
import dev.openfeature.sdk.exceptions.ValueNotConvertableError;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* {@link Structure} represents a potentially nested object type which is used to represent
* structured data.
*/
@SuppressWarnings("PMD.BeanMembersShouldSerialize")
public interface Structure {
/**
* Boolean indicating if this structure is empty.
*
* @return boolean for emptiness
*/
boolean isEmpty();
/**
* Get all keys.
*
* @return the set of keys
*/
Set<String> keySet();
/**
* Get the value indexed by key.
*
* @param key String the key.
* @return the Value
*/
Value getValue(String key);
/**
* Get all values, as a map of Values.
*
* @return all attributes on the structure into a Map
*/
Map<String, Value> asMap();
/**
* Get all values, as a map of Values.
*
* @return all attributes on the structure into a Map
*/
Map<String, Value> asUnmodifiableMap();
/**
* Get all values, with as a map of Object.
*
* @return all attributes on the structure into a Map
*/
Map<String, Object> asObjectMap();
/**
* Converts the Value into its equivalent primitive type.
*
* @param value - Value object to convert
* @return an Object containing the primitive type, or null.
*/
default Object convertValue(Value value) {
if (value == null || value.isNull()) {
return null;
}
if (value.isBoolean()) {
return value.asBoolean();
}
if (value.isNumber() && !value.isNull()) {
Number numberValue = (Number) value.asObject();
if (numberValue instanceof Double) {
return numberValue.doubleValue();
} else if (numberValue instanceof Integer) {
return numberValue.intValue();
}
}
if (value.isString()) {
return value.asString();
}
if (value.isInstant()) {
return value.asInstant();
}
if (value.isList()) {
return value.asList().stream().map(this::convertValue).collect(Collectors.toList());
}
if (value.isStructure()) {
Structure s = value.asStructure();
return s.asUnmodifiableMap().entrySet().stream()
.collect(
HashMap::new,
(accumulated, entry) -> accumulated.put(entry.getKey(), convertValue(entry.getValue())),
HashMap::putAll);
}
throw new ValueNotConvertableError();
}
/**
* Transform an object map to a {@link Structure} type.
*
* @param map map of objects
* @return a Structure object in the SDK format
*/
static Structure mapToStructure(Map<String, Object> map) {
return new MutableStructure(map.entrySet().stream()
.collect(
HashMap::new,
(accumulated, entry) -> accumulated.put(entry.getKey(), objectToValue(entry.getValue())),
HashMap::putAll));
}
}

View File

@ -0,0 +1,95 @@
package dev.openfeature.sdk;
/**
* The Telemetry class provides constants and methods for creating OpenTelemetry compliant
* evaluation events.
*/
public class Telemetry {
private Telemetry() {}
/*
The OpenTelemetry compliant event attributes for flag evaluation.
Specification: https://opentelemetry.io/docs/specs/semconv/feature-flags/feature-flags-logs/
*/
public static final String TELEMETRY_KEY = "feature_flag.key";
public static final String TELEMETRY_ERROR_CODE = "error.type";
public static final String TELEMETRY_VARIANT = "feature_flag.result.variant";
public static final String TELEMETRY_VALUE = "feature_flag.result.value";
public static final String TELEMETRY_CONTEXT_ID = "feature_flag.context.id";
public static final String TELEMETRY_ERROR_MSG = "feature_flag.evaluation.error.message";
public static final String TELEMETRY_REASON = "feature_flag.result.reason";
public static final String TELEMETRY_PROVIDER = "feature_flag.provider.name";
public static final String TELEMETRY_FLAG_SET_ID = "feature_flag.set.id";
public static final String TELEMETRY_VERSION = "feature_flag.version";
// Well-known flag metadata attributes for telemetry events.
// Specification: https://openfeature.dev/specification/appendix-d#flag-metadata
public static final String TELEMETRY_FLAG_META_CONTEXT_ID = "contextId";
public static final String TELEMETRY_FLAG_META_FLAG_SET_ID = "flagSetId";
public static final String TELEMETRY_FLAG_META_VERSION = "version";
public static final String FLAG_EVALUATION_EVENT_NAME = "feature_flag.evaluation";
/**
* Creates an EvaluationEvent using the provided HookContext and ProviderEvaluation.
*
* @param hookContext the context containing flag evaluation details
* @param evaluationDetails the evaluation result from the provider
*
* @return an EvaluationEvent populated with telemetry data
*/
public static EvaluationEvent createEvaluationEvent(
HookContext<?> hookContext, FlagEvaluationDetails<?> evaluationDetails) {
EvaluationEvent.EvaluationEventBuilder evaluationEventBuilder = EvaluationEvent.builder()
.name(FLAG_EVALUATION_EVENT_NAME)
.attribute(TELEMETRY_KEY, hookContext.getFlagKey())
.attribute(TELEMETRY_PROVIDER, hookContext.getProviderMetadata().getName());
if (evaluationDetails.getReason() != null) {
evaluationEventBuilder.attribute(
TELEMETRY_REASON, evaluationDetails.getReason().toLowerCase());
} else {
evaluationEventBuilder.attribute(
TELEMETRY_REASON, Reason.UNKNOWN.name().toLowerCase());
}
if (evaluationDetails.getVariant() != null) {
evaluationEventBuilder.attribute(TELEMETRY_VARIANT, evaluationDetails.getVariant());
} else {
evaluationEventBuilder.attribute(TELEMETRY_VALUE, evaluationDetails.getValue());
}
String contextId = evaluationDetails.getFlagMetadata().getString(TELEMETRY_FLAG_META_CONTEXT_ID);
if (contextId != null) {
evaluationEventBuilder.attribute(TELEMETRY_CONTEXT_ID, contextId);
} else {
evaluationEventBuilder.attribute(
TELEMETRY_CONTEXT_ID, hookContext.getCtx().getTargetingKey());
}
String setID = evaluationDetails.getFlagMetadata().getString(TELEMETRY_FLAG_META_FLAG_SET_ID);
if (setID != null) {
evaluationEventBuilder.attribute(TELEMETRY_FLAG_SET_ID, setID);
}
String version = evaluationDetails.getFlagMetadata().getString(TELEMETRY_FLAG_META_VERSION);
if (version != null) {
evaluationEventBuilder.attribute(TELEMETRY_VERSION, version);
}
if (Reason.ERROR.name().equals(evaluationDetails.getReason())) {
if (evaluationDetails.getErrorCode() != null) {
evaluationEventBuilder.attribute(TELEMETRY_ERROR_CODE, evaluationDetails.getErrorCode());
} else {
evaluationEventBuilder.attribute(TELEMETRY_ERROR_CODE, ErrorCode.GENERAL);
}
if (evaluationDetails.getErrorMessage() != null) {
evaluationEventBuilder.attribute(TELEMETRY_ERROR_MSG, evaluationDetails.getErrorMessage());
}
}
return evaluationEventBuilder.build();
}
}

View File

@ -0,0 +1,28 @@
package dev.openfeature.sdk;
/**
* A {@link ThreadLocalTransactionContextPropagator} is a transactional context propagator
* that uses a ThreadLocal to persist a transactional context for the duration of a single thread.
*
* @see TransactionContextPropagator
*/
public class ThreadLocalTransactionContextPropagator implements TransactionContextPropagator {
private final ThreadLocal<EvaluationContext> evaluationContextThreadLocal = new ThreadLocal<>();
/**
* {@inheritDoc}
*/
@Override
public EvaluationContext getTransactionContext() {
return this.evaluationContextThreadLocal.get();
}
/**
* {@inheritDoc}
*/
@Override
public void setTransactionContext(EvaluationContext evaluationContext) {
this.evaluationContextThreadLocal.set(evaluationContext);
}
}

View File

@ -0,0 +1,42 @@
package dev.openfeature.sdk;
/**
* Interface for Tracking events.
*/
public interface Tracking {
/**
* Performs tracking of a particular action or application state.
*
* @param trackingEventName Event name to track
* @throws IllegalArgumentException if {@code trackingEventName} is null
*/
void track(String trackingEventName);
/**
* Performs tracking of a particular action or application state.
*
* @param trackingEventName Event name to track
* @param context Evaluation context used in flag evaluation
* @throws IllegalArgumentException if {@code trackingEventName} is null
*/
void track(String trackingEventName, EvaluationContext context);
/**
* Performs tracking of a particular action or application state.
*
* @param trackingEventName Event name to track
* @param details Data pertinent to a particular tracking event
* @throws IllegalArgumentException if {@code trackingEventName} is null
*/
void track(String trackingEventName, TrackingEventDetails details);
/**
* Performs tracking of a particular action or application state.
*
* @param trackingEventName Event name to track
* @param context Evaluation context used in flag evaluation
* @param details Data pertinent to a particular tracking event
* @throws IllegalArgumentException if {@code trackingEventName} is null
*/
void track(String trackingEventName, EvaluationContext context, TrackingEventDetails details);
}

View File

@ -0,0 +1,14 @@
package dev.openfeature.sdk;
import java.util.Optional;
/**
* Data pertinent to a particular tracking event.
*/
public interface TrackingEventDetails extends Structure {
/**
* Returns the optional numeric tracking value.
*/
Optional<Number> getValue();
}

View File

@ -0,0 +1,28 @@
package dev.openfeature.sdk;
/**
* {@link TransactionContextPropagator} is responsible for persisting a transactional context
* for the duration of a single transaction.
* Examples of potential transaction specific context include: a user id, user agent, IP.
* Transaction context is merged with evaluation context prior to flag evaluation.
*
* <p>
* The precedence of merging context can be seen in
* <a href=https://openfeature.dev/specification/sections/evaluation-context#requirement-323>the specification</a>.
* </p>
*/
public interface TransactionContextPropagator {
/**
* Returns the currently defined transaction context using the registered transaction
* context propagator.
*
* @return {@link EvaluationContext} The current transaction context
*/
EvaluationContext getTransactionContext();
/**
* Sets the transaction context.
*/
void setTransactionContext(EvaluationContext evaluationContext);
}

View File

@ -0,0 +1,319 @@
package dev.openfeature.sdk;
import static dev.openfeature.sdk.Structure.mapToStructure;
import dev.openfeature.sdk.exceptions.TypeMismatchError;
import java.time.Instant;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import lombok.EqualsAndHashCode;
import lombok.SneakyThrows;
import lombok.ToString;
/**
* Values serve as a generic return type for structure data from providers.
* Providers may deal in JSON, protobuf, XML or some other data-interchange format.
* This intermediate representation provides a good medium of exchange.
*/
@ToString
@EqualsAndHashCode
@SuppressWarnings({"PMD.BeanMembersShouldSerialize", "checkstyle:MissingJavadocType", "checkstyle:NoFinalizer"})
public class Value implements Cloneable {
private final Object innerObject;
protected final void finalize() {
// DO NOT REMOVE, spotbugs: CT_CONSTRUCTOR_THROW
}
/**
* Construct a new null Value.
*/
public Value() {
this.innerObject = null;
}
/**
* Construct a new Value with an Object.
*
* @param value to be wrapped.
* @throws InstantiationException if value is not a valid type
* (boolean, string, int, double, list, structure, instant)
*/
public Value(Object value) throws InstantiationException {
this.innerObject = value;
if (!this.isNull()
&& !this.isBoolean()
&& !this.isString()
&& !this.isNumber()
&& !this.isStructure()
&& !this.isList()
&& !this.isInstant()) {
throw new InstantiationException("Invalid value type: " + value.getClass());
}
}
public Value(Value value) {
this.innerObject = value.innerObject;
}
public Value(Boolean value) {
this.innerObject = value;
}
public Value(String value) {
this.innerObject = value;
}
public Value(Integer value) {
this.innerObject = value;
}
public Value(Double value) {
this.innerObject = value;
}
public Value(Structure value) {
this.innerObject = value;
}
public Value(List<Value> value) {
this.innerObject = value;
}
public Value(Instant value) {
this.innerObject = value;
}
/**
* Check if this Value represents null.
*
* @return boolean
*/
public boolean isNull() {
return this.innerObject == null;
}
/**
* Check if this Value represents a Boolean.
*
* @return boolean
*/
public boolean isBoolean() {
return this.innerObject instanceof Boolean;
}
/**
* Check if this Value represents a String.
*
* @return boolean
*/
public boolean isString() {
return this.innerObject instanceof String;
}
/**
* Check if this Value represents a numeric value.
*
* @return boolean
*/
public boolean isNumber() {
return this.innerObject instanceof Number;
}
/**
* Check if this Value represents a Structure.
*
* @return boolean
*/
public boolean isStructure() {
return this.innerObject instanceof Structure;
}
/**
* Check if this Value represents a List of Values.
*
* @return boolean
*/
public boolean isList() {
if (!(this.innerObject instanceof List)) {
return false;
}
List<?> list = (List<?>) this.innerObject;
if (list.isEmpty()) {
return true;
}
for (Object obj : list) {
if (!(obj instanceof Value)) {
return false;
}
}
return true;
}
/**
* Check if this Value represents an Instant.
*
* @return boolean
*/
public boolean isInstant() {
return this.innerObject instanceof Instant;
}
/**
* Retrieve the underlying Boolean value, or null.
*
* @return Boolean
*/
@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
value = "NP_BOOLEAN_RETURN_NULL",
justification = "This is not a plain true/false method. It's understood it can return null.")
public Boolean asBoolean() {
if (this.isBoolean()) {
return (Boolean) this.innerObject;
}
return null;
}
/**
* Retrieve the underlying object.
*
* @return Object
*/
public Object asObject() {
return this.innerObject;
}
/**
* Retrieve the underlying String value, or null.
*
* @return String
*/
public String asString() {
if (this.isString()) {
return (String) this.innerObject;
}
return null;
}
/**
* Retrieve the underlying numeric value as an Integer, or null.
* If the value is not an integer, it will be rounded using Math.round().
*
* @return Integer
*/
public Integer asInteger() {
if (this.isNumber() && !this.isNull()) {
return ((Number) this.innerObject).intValue();
}
return null;
}
/**
* Retrieve the underlying numeric value as a Double, or null.
*
* @return Double
*/
public Double asDouble() {
if (this.isNumber() && !isNull()) {
return ((Number) this.innerObject).doubleValue();
}
return null;
}
/**
* Retrieve the underlying Structure value, or null.
*
* @return Structure
*/
public Structure asStructure() {
if (this.isStructure()) {
return (Structure) this.innerObject;
}
return null;
}
/**
* Retrieve the underlying List value, or null.
*
* @return List
*/
public List<Value> asList() {
if (this.isList()) {
//noinspection rawtypes,unchecked
return (List) this.innerObject;
}
return null;
}
/**
* Retrieve the underlying Instant value, or null.
*
* @return Instant
*/
public Instant asInstant() {
if (this.isInstant()) {
return (Instant) this.innerObject;
}
return null;
}
/**
* Perform deep clone of value object.
*
* @return Value
*/
@SneakyThrows
@Override
protected Value clone() {
if (this.isList()) {
List<Value> copy = this.asList().stream().map(Value::new).collect(Collectors.toList());
return new Value(copy);
}
if (this.isStructure()) {
return new Value(new ImmutableStructure(this.asStructure().asUnmodifiableMap()));
}
if (this.isInstant()) {
Instant copy = Instant.ofEpochMilli(this.asInstant().toEpochMilli());
return new Value(copy);
}
return new Value(this.asObject());
}
/**
* Wrap an object into a Value.
*
* @param object the object to wrap
* @return the wrapped object
*/
public static Value objectToValue(Object object) {
if (object instanceof Value) {
return (Value) object;
} else if (object == null) {
return new Value();
} else if (object instanceof String) {
return new Value((String) object);
} else if (object instanceof Boolean) {
return new Value((Boolean) object);
} else if (object instanceof Integer) {
return new Value((Integer) object);
} else if (object instanceof Double) {
return new Value((Double) object);
} else if (object instanceof Structure) {
return new Value((Structure) object);
} else if (object instanceof List) {
return new Value(
((List<Object>) object).stream().map(o -> objectToValue(o)).collect(Collectors.toList()));
} else if (object instanceof Instant) {
return new Value((Instant) object);
} else if (object instanceof Map) {
return new Value(mapToStructure((Map<String, Object>) object));
} else {
throw new TypeMismatchError("Flag value " + object + " had unexpected type " + object.getClass() + ".");
}
}
}

Some files were not shown because too many files have changed in this diff Show More