86 lines
2.3 KiB
Markdown
86 lines
2.3 KiB
Markdown
---
|
|
description: flagd semver custom operation
|
|
---
|
|
|
|
# Semantic Version Operation
|
|
|
|
OpenFeature allows clients to pass contextual information which can then be used during a flag evaluation. For example, a client could pass the email address of the user.
|
|
|
|
In some scenarios, it is desirable to use that contextual information to segment the user population further and thus return dynamic values.
|
|
|
|
The `sem_ver` evaluation checks if the given property matches a semantic versioning condition.
|
|
It returns 'true', if the value of the given property meets the condition, 'false' if not.
|
|
Note that the 'sem_ver' evaluation rule must contain exactly three items:
|
|
|
|
1. Target property: this needs which both resolve to a semantic versioning string
|
|
2. Operator: One of the following: `=`, `!=`, `>`, `<`, `>=`, `<=`, `~` (match minor version), `^` (match major version)
|
|
3. Target value: this needs which both resolve to a semantic versioning string
|
|
|
|
The `sem_ver` evaluation returns a boolean, indicating whether the condition has been met.
|
|
|
|
```js
|
|
{
|
|
"if": [
|
|
{
|
|
"sem_ver": [{"var": "version"}, ">=", "1.0.0"]
|
|
},
|
|
"red", null
|
|
]
|
|
}
|
|
```
|
|
|
|
## Example for 'sem_ver' Evaluation
|
|
|
|
Flags defined as such:
|
|
|
|
```json
|
|
{
|
|
"$schema": "https://flagd.dev/schema/v0/flags.json",
|
|
"flags": {
|
|
"headerColor": {
|
|
"variants": {
|
|
"red": "#FF0000",
|
|
"blue": "#0000FF",
|
|
"green": "#00FF00"
|
|
},
|
|
"defaultVariant": "blue",
|
|
"state": "ENABLED",
|
|
"targeting": {
|
|
"if": [
|
|
{
|
|
"sem_ver": [{"var": "version"}, ">=", "1.0.0"]
|
|
},
|
|
"red", "green"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
will return variant `red`, if the value of the `version` is a semantic version that is greater than or equal to `1.0.0`.
|
|
|
|
Command:
|
|
|
|
```shell
|
|
curl -X POST "localhost:8013/flagd.evaluation.v1.Service/ResolveString" -d '{"flagKey":"headerColor","context":{"version": "1.0.1"}}' -H "Content-Type: application/json"
|
|
```
|
|
|
|
Result:
|
|
|
|
```json
|
|
{"value":"#00FF00","reason":"TARGETING_MATCH","variant":"red"}
|
|
```
|
|
|
|
Command:
|
|
|
|
```shell
|
|
curl -X POST "localhost:8013/flagd.evaluation.v1.Service/ResolveString" -d '{"flagKey":"headerColor","context":{"version": "0.1.0"}}' -H "Content-Type: application/json"
|
|
```
|
|
|
|
Result:
|
|
|
|
```shell
|
|
{"value":"#0000FF","reason":"TARGETING_MATCH","variant":"green"}
|
|
```
|