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: strategy variants #482

Merged
merged 7 commits into from
Jul 13, 2023
Merged

feat: strategy variants #482

merged 7 commits into from
Jul 13, 2023

Conversation

kwasniew
Copy link
Contributor

@kwasniew kwasniew commented Jul 10, 2023

About the changes

Adding support for strategy variants.

Screenshot 2023-07-12 at 16 15 18

Background: Unleash supports feature environment variants. This PR adds variants capability per strategy which is more flexible and easier to understand/implement. It makes it possible to use constraints and segments for variants.

How it's implemented?
If a strategy has a corresponding variant param it's used over the feature environment variant.

Important files

Discussion points

I'm thinking if we should have env var or config param to enable this new capability in addition to variant params detection.

@coveralls
Copy link

coveralls commented Jul 10, 2023

Coverage Status

coverage: 91.295% (+0.03%) from 91.269% when pulling 2c79ba1 on strategy-variants into b30488f on main.

@@ -74,40 +74,56 @@ export default class UnleashClient extends EventEmitter {
feature: FeatureInterface | undefined,
context: Context,
fallback: Function,
): boolean {
): [boolean, VariantDefinition | undefined] {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

in addition to boolean true/false was want to know the actual variant that the strategy resolved to if it was provided.

src/client.ts Outdated Show resolved Hide resolved
src/client.ts Outdated Show resolved Hide resolved
src/client.ts Outdated Show resolved Hide resolved
@@ -169,25 +185,33 @@ export default class UnleashClient extends EventEmitter {
fallbackVariant?: Variant,
): Variant {
const fallback = fallbackVariant || getDefaultVariant();
if (
typeof feature === 'undefined' ||
Copy link
Contributor Author

Choose a reason for hiding this comment

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

this is too early since variants can be on the strategy

Tymek
Tymek previously approved these changes Jul 10, 2023
@Tymek
Copy link
Member

Tymek commented Jul 10, 2023

Should should bump SDK compatibility in the future? It will allow us to add warnings if you're using old SDKs with new Variants.

const SUPPORTED_SPEC_VERSION = '4.2.0';

sighphyre
sighphyre previously approved these changes Jul 10, 2023
Copy link
Member

@sighphyre sighphyre left a comment

Choose a reason for hiding this comment

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

Okay wow, that's cool, spec tests pass and all!

@sighphyre
Copy link
Member

Should should bump SDK compatibility in the future? It will allow us to add warnings if you're using old SDKs with new Variants.

const SUPPORTED_SPEC_VERSION = '4.2.0';

Yeah! Needs a spec test before we do that though

@kwasniew kwasniew requested review from Tymek and sighphyre July 12, 2023 14:17
Copy link
Member

@sighphyre sighphyre left a comment

Choose a reason for hiding this comment

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

LGTM

@kwasniew kwasniew merged commit 74705c8 into main Jul 13, 2023
4 checks passed
@kwasniew kwasniew deleted the strategy-variants branch July 13, 2023 08:43
renovate bot added a commit to Unleash/unleash that referenced this pull request Aug 1, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [unleash-client](https://togithub.com/Unleash/unleash-client-node) |
[`4.1.0-beta.5` ->
`4.1.0`](https://renovatebot.com/diffs/npm/unleash-client/4.1.0-beta.5/4.1.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/unleash-client/4.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/unleash-client/4.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/unleash-client/4.1.0-beta.5/4.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/unleash-client/4.1.0-beta.5/4.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>Unleash/unleash-client-node (unleash-client)</summary>

###
[`v4.1.0`](https://togithub.com/Unleash/unleash-client-node/releases/tag/v4.1.0)

[Compare
Source](https://togithub.com/Unleash/unleash-client-node/compare/v4.1.0-beta.5...v4.1.0)

#### What's Changed

- feat: strategy variants by
[@&#8203;kwasniew](https://togithub.com/kwasniew) in
[Unleash/unleash-client-node#482
- fix: remove unused segment fields by
[@&#8203;kwasniew](https://togithub.com/kwasniew) in
[Unleash/unleash-client-node#489
- feat: expose config type by
[@&#8203;kwasniew](https://togithub.com/kwasniew) in
[Unleash/unleash-client-node#491
- fix:fetch lib with its deps by
[@&#8203;kwasniew](https://togithub.com/kwasniew) in
[Unleash/unleash-client-node#492
- fix: force get variant is back by
[@&#8203;kwasniew](https://togithub.com/kwasniew) in
[Unleash/unleash-client-node#493
- refactor: strategy variants inside strategy by
[@&#8203;kwasniew](https://togithub.com/kwasniew) in
[Unleash/unleash-client-node#494
- feat: variant on enabled toggle metrics by
[@&#8203;kwasniew](https://togithub.com/kwasniew) in
[Unleash/unleash-client-node#495
- chore(deps): update dependency nock to v13.3.2 by
[@&#8203;renovate](https://togithub.com/renovate) in
[Unleash/unleash-client-node#488
- chore(deps): update dependency eslint to v8.45.0 by
[@&#8203;renovate](https://togithub.com/renovate) in
[Unleash/unleash-client-node#490
- chore(deps): update typescript-eslint monorepo to v5.62.0 by
[@&#8203;renovate](https://togithub.com/renovate) in
[Unleash/unleash-client-node#483
- chore(deps): update dependency eslint-config-airbnb-typescript to
v17.1.0 by [@&#8203;renovate](https://togithub.com/renovate) in
[Unleash/unleash-client-node#487
- chore(deps): update dependency eslint-plugin-prettier to v5 by
[@&#8203;renovate](https://togithub.com/renovate) in
[Unleash/unleash-client-node#485
- feat: version bump non beta by
[@&#8203;kwasniew](https://togithub.com/kwasniew) in
[Unleash/unleash-client-node#496

**Full Changelog**:
Unleash/unleash-client-node@v4.0.2...v4.1.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/Unleash/unleash).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi4yNC4yIiwidXBkYXRlZEluVmVyIjoiMzYuMjQuMiIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

4 participants