Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add sem_ver jsonLogic evaluator #675

Merged
merged 17 commits into from
May 31, 2023

Conversation

bacherfl
Copy link
Contributor

This PR adds additional jsonLogic evaluatorsfor sem_ver, which checks if the given property is a valid semantic version string that fulfills a certain criteria (e.g. if the version is lower/greater, equal to or not equal to a certain version) .The evaluator return a boolean, indicating whether the condition has been met.

The following example shows how the evaluators can be used in a flag targeting rule:

{
  "flags": {
    "headerColor": {
      "state": "ENABLED",
      "defaultVariant": "red",
      "variants": {
        "blue": "#0000FF",
        "green": "#00FF00",
        "red": "#FF0000",
        "yellow": "#FFFF00"
      },
      "targeting": {
        "if": [
          {
            "sem_ver": [
              {
                "var": "version"
              },
              ">",
              "1.0.0"
            ]
          },
          "red",
          "green"
        ]
      },
      "source": ""
    }
  }
}

This rule will resolve to the red variant of the headerColor flag, if the version property within the evaluationContext is a semantic version string that is greater than 1.0.0.

@codecov
Copy link

codecov bot commented May 25, 2023

Codecov Report

Merging #675 (a331028) into main (d2ce988) will increase coverage by 0.83%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##             main     #675      +/-   ##
==========================================
+ Coverage   73.81%   74.64%   +0.83%     
==========================================
  Files          25       26       +1     
  Lines        2440     2520      +80     
==========================================
+ Hits         1801     1881      +80     
  Misses        573      573              
  Partials       66       66              
Impacted Files Coverage Δ
core/pkg/eval/json_evaluator.go 89.81% <100.00%> (+0.15%) ⬆️
core/pkg/eval/semver_evaluation.go 100.00% <100.00%> (ø)

📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more

@bacherfl bacherfl changed the title Feat/semver json evaluator feat: semver json evaluator May 25, 2023
@bacherfl bacherfl changed the title feat: semver json evaluator feat: added sem_ver jsonLogic evaluator May 25, 2023
@bacherfl bacherfl changed the title feat: added sem_ver jsonLogic evaluator feat: add sem_ver jsonLogic evaluator May 25, 2023
@bacherfl bacherfl marked this pull request as ready for review May 30, 2023 07:03
@bacherfl bacherfl requested a review from a team as a code owner May 30, 2023 07:03
@toddbaert toddbaert self-requested a review May 30, 2023 19:49
Copy link
Member

@toddbaert toddbaert left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great to me! I really like the ~ and ^ additions, thanks. I think semver is a common-enough use case that this is easily justified, many vendors support it in rules.

@toddbaert toddbaert requested a review from thisthat May 30, 2023 20:00
bacherfl and others added 3 commits May 31, 2023 07:44
Co-authored-by: Todd Baert <[email protected]>
Signed-off-by: Florian Bacher <[email protected]>
Signed-off-by: Florian Bacher <[email protected]>
Copy link
Member

@thisthat thisthat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 👍

Signed-off-by: Florian Bacher <[email protected]>
@beeme1mr beeme1mr merged commit a8d8ab6 into open-feature:main May 31, 2023
@github-actions github-actions bot mentioned this pull request May 31, 2023
beeme1mr pushed a commit that referenced this pull request Jun 7, 2023
🤖 I have created a release *beep* *boop*
---


<details><summary>flagd: 0.5.4</summary>

##
[0.5.4](flagd/v0.5.3...flagd/v0.5.4)
(2023-06-07)


### 🧹 Chore

* update otel dependencies
([#649](#649))
([2114e41](2114e41))


### 🐛 Bug Fixes

* **deps:** update module github.com/open-feature/flagd/core to v0.5.3
([#634](#634))
([1bc7e99](1bc7e99))
* **deps:** update module
github.com/open-feature/go-sdk-contrib/providers/flagd to v0.1.12
([#635](#635))
([fe88061](fe88061))
* **deps:** update module
github.com/open-feature/go-sdk-contrib/tests/flagd to v1.2.2
([#651](#651))
([9776973](9776973))


### ✨ New Features

* telemetry improvements
([#653](#653))
([ea02cba](ea02cba))


### 🔄 Refactoring

* introduce additional linting rules + fix discrepancies
([#616](#616))
([aef0b90](aef0b90))
</details>

<details><summary>flagd-proxy: 0.2.4</summary>

##
[0.2.4](flagd-proxy/v0.2.3...flagd-proxy/v0.2.4)
(2023-06-07)


### 🐛 Bug Fixes

* **deps:** update module github.com/open-feature/flagd/core to v0.5.3
([#634](#634))
([1bc7e99](1bc7e99))


### 🧹 Chore

* update otel dependencies
([#649](#649))
([2114e41](2114e41))


### ✨ New Features

* telemetry improvements
([#653](#653))
([ea02cba](ea02cba))


### 🔄 Refactoring

* introduce additional linting rules + fix discrepancies
([#616](#616))
([aef0b90](aef0b90))
* introduce isyncstore interface
([#660](#660))
([c0e2fa0](c0e2fa0))
</details>

<details><summary>core: 0.5.4</summary>

##
[0.5.4](core/v0.5.3...core/v0.5.4)
(2023-06-07)


### ✨ New Features

* add `sem_ver` jsonLogic evaluator
([#675](#675))
([a8d8ab6](a8d8ab6))
* add `starts_with` and `ends_with` json evaluators
([#658](#658))
([f932b8f](f932b8f))
* telemetry improvements
([#653](#653))
([ea02cba](ea02cba))


### 🐛 Bug Fixes

* **deps:** update module github.com/bufbuild/connect-go to v1.8.0
([#683](#683))
([13bb13d](13bb13d))
* **deps:** update module github.com/bufbuild/connect-opentelemetry-go
to v0.3.0 ([#669](#669))
([e899435](e899435))
* **deps:** update module github.com/prometheus/client_golang to v1.15.1
([#636](#636))
([b22279d](b22279d))
* **deps:** update module github.com/stretchr/testify to v1.8.3
([#662](#662))
([2e06d58](2e06d58))
* **deps:** update module github.com/stretchr/testify to v1.8.4
([#678](#678))
([ca8c9d6](ca8c9d6))
* **deps:** update module golang.org/x/mod to v0.10.0
([#682](#682))
([16199ce](16199ce))
* **deps:** update module golang.org/x/net to v0.10.0
([#644](#644))
([ccd9d35](ccd9d35))
* **deps:** update module golang.org/x/sync to v0.2.0
([#638](#638))
([7f4a7db](7f4a7db))
* **deps:** update module google.golang.org/grpc to v1.55.0
([#640](#640))
([c0d7328](c0d7328))
* **deps:** update module sigs.k8s.io/controller-runtime to v0.15.0
([#665](#665))
([9490ed6](9490ed6))
* fix connect error code handling for disabled flags
([#670](#670))
([86a8012](86a8012))
* remove disabled flags from bulk evaluation
([#672](#672))
([d2ce988](d2ce988))


### 🔄 Refactoring

* introduce additional linting rules + fix discrepancies
([#616](#616))
([aef0b90](aef0b90))
* introduce isyncstore interface
([#660](#660))
([c0e2fa0](c0e2fa0))


### 🧹 Chore

* refactor json logic evaluator to pass custom operators as options
([#691](#691))
([1c9bff9](1c9bff9))
* update otel dependencies
([#649](#649))
([2114e41](2114e41))
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@github-actions github-actions bot mentioned this pull request Dec 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants