1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-11-24 20:06:55 +01:00
Commit Graph

14643 Commits

Author SHA1 Message Date
Mateusz Kwasniewski
00166f4875
refactor: milestone progression methods (#11002) 2025-11-19 14:57:53 +01:00
Mateusz Kwasniewski
7ea14b8d22
feat: resume milestone progressions (#10999) 2025-11-19 12:47:47 +01:00
Nuno Góis
416bd27859
chore: show hosting in connected edges (#10995)
https://linear.app/unleash/issue/2-4037/show-hosting-in-connected-edges-edge-observability

Show "hosting" in Connected Edges.

This can be one of:
 - Cloud
 - Self-hosted
 - Unknown

<img width="326" height="691" alt="image"
src="https://github.com/user-attachments/assets/baba1fbb-6f22-46f5-8271-4f4a0c3fcc8a"
/>
2025-11-19 10:41:46 +00:00
Jaanus Sellin
35680f87eb
feat: hide milestone progression on paused state (#10998) 2025-11-19 12:41:18 +02:00
Mateusz Kwasniewski
d3981baf2c
fix: handle no app name impact metric (#10997) 2025-11-19 09:50:56 +01:00
Jaanus Sellin
ccbf375a13
feat: add safeguard events (#10994) 2025-11-19 10:10:44 +02:00
Mateusz Kwasniewski
b2eaff670c
feat: delete safeguard confirmation (#10993) 2025-11-17 16:47:04 +01:00
Mateusz Kwasniewski
29de419e20
refactor: delete safeguard api update (#10992) 2025-11-17 15:53:34 +01:00
Mateusz Kwasniewski
778328aa98
feat: release plan automations paused alert (#10991) 2025-11-17 15:39:05 +01:00
Nuno Góis
f06eabf7e6
chore: export default metrics register (#10989)
https://linear.app/unleash/issue/2-4035/avoid-prom-client-dependency-in-enterprise-cloud

This exports the default metrics register so consumers can tap into it
if needed.
2025-11-17 13:40:13 +00:00
David Leek
7fdc0df9f2
fix(frontend): use extendedUsageMetrics flag in metrics UI (#10987) 2025-11-17 13:32:45 +01:00
renovate[bot]
84e47c6d8f
chore(deps): update dependency js-yaml to v4.1.1 [security] (#10986)
This PR contains the following updates:

| Package | Change | Age | Confidence |
|---|---|---|---|
| [js-yaml](https://redirect.github.com/nodeca/js-yaml) | [`4.1.0` ->
`4.1.1`](https://renovatebot.com/diffs/npm/js-yaml/4.1.0/4.1.1) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/js-yaml/4.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/js-yaml/4.1.0/4.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

### GitHub Vulnerability Alerts

####
[CVE-2025-64718](https://redirect.github.com/nodeca/js-yaml/security/advisories/GHSA-mh29-5h37-fv8m)

### Impact

In js-yaml 4.1.0 and below, it's possible for an attacker to modify the
prototype of the result of a parsed yaml document via prototype
pollution (`__proto__`). All users who parse untrusted yaml documents
may be impacted.

### Patches

Problem is patched in js-yaml 4.1.1.

### Workarounds

You can protect against this kind of attack on the server by using `node
--disable-proto=delete` or `deno` (in Deno, pollution protection is on
by default).

### References


https://cheatsheetseries.owasp.org/cheatsheets/Prototype_Pollution_Prevention_Cheat_Sheet.html

---

### Release Notes

<details>
<summary>nodeca/js-yaml (js-yaml)</summary>

###
[`v4.1.1`](https://redirect.github.com/nodeca/js-yaml/blob/HEAD/CHANGELOG.md#411---2025-11-12)

[Compare
Source](https://redirect.github.com/nodeca/js-yaml/compare/4.1.0...4.1.1)

##### Security

- Fix prototype pollution issue in yaml merge (<<) operator.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "" in timezone Europe/Madrid,
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/Unleash/unleash).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-15 10:51:07 +00:00
Melinda Fekete
54a68f63f1
docs: add auto-generated MCP docs (#10984) 2025-11-14 16:47:13 +01:00
Jaanus Sellin
218f0fcdef
feat: add paused state to release plan milestone progression (#10983) 2025-11-14 16:18:15 +02:00
Jaanus Sellin
ca61906e3c
chore: generate orval (#10980) 2025-11-14 13:50:31 +02:00
Jaanus Sellin
8c6efeb48d
chore: fix safeguards schema (#10982) 2025-11-14 13:30:35 +02:00
Nuno Góis
3c392510f1
chore: unique project names validation on creation (#10970)
https://linear.app/unleash/issue/2-4024/we-should-validate-that-new-project-names-are-unique-ui-only

Validates that new project names must be unique.

Covers both:
 - Creating a new project
 - Editing an existing project

---------

Co-authored-by: Thomas Heartman <thomas@getunleash.io>
2025-11-14 11:29:06 +00:00
Jaanus Sellin
ba25d7ada9
chore: fix transitionCondition (#10981) 2025-11-14 13:01:13 +02:00
Jaanus Sellin
25c4f6fa3b
chore: update schema to match reality (#10979) 2025-11-14 09:11:22 +00:00
Thomas Heartman
df3f7c21a5
fix: remove old archived flags tooltip (#10977) 2025-11-14 08:46:37 +01:00
David Leek
3598ed1c87
chore: change release_plans to release-plans in endpoints/hooks (#10978) 2025-11-14 08:30:41 +01:00
Jaanus Sellin
9de82e87f2
chore: start validating getFeature endpoint (#10975) 2025-11-14 08:47:31 +02:00
Jaanus Sellin
06b9d1939b
fix: add missing nested types (#10976) 2025-11-13 13:41:23 +02:00
Mateusz Kwasniewski
71099247e7
feat: delete safeguard button (#10974) 2025-11-13 12:01:53 +01:00
Jaanus Sellin
684a0ff48c
feat: add safeguards schema to oss (#10972)
TypeScript throws `TS7056` because the schema object becomes too large
for the compiler to fully serialize when using deep literal inference.
Splitting the components object and explicitly reconstructing the type
prevents the error while preserving correct type inference.
2025-11-13 09:30:15 +00:00
Thomas Heartman
1795e68a67
test: add extra test to ensure we don't return a disabled variant (#10968)
Adds a test to ensure that the `getAll` method of the flag resolver
doesn't return the disabled variant if a flag is defined as a boolean in
the settings.

We have some places in the UI where we check `if
(uiConfig.flags.<flagname>) {...}`. If one of these flags were suddenly
returned as the disabled variant instead of `false`, then it'd be
impossible to turn it off.

As such, to maintain backwards compatibility and adhere to the principle
of least surprise, I'd like to add this test to ensure this doesn't
change going forward.
2025-11-13 10:18:36 +01:00
Mateusz Kwasniewski
de04e816df
feat: adjust safeguard form elements size (#10973) 2025-11-13 10:06:24 +01:00
Simon Hornby
8689afe7be
chore: information message when you have no connected edge enterprise instances (#10969) 2025-11-13 09:32:51 +02:00
Mateusz Kwasniewski
3b07b66712
feat: safeguards form edit and display (#10967) 2025-11-12 21:24:07 +01:00
Thomas Heartman
89a3578826
fix: allow external flag resolver to override false experiments with variants in getAll (#10966)
Fixes a bug / uncovered edge case in the flag resolver in Unleash:
If a local experiment was defined as false (the typical default value),
then that flag could only ever be returned as a boolean from the
`ui-config` endpoint. In other words, even if the external resolver has
a variant for that flag, the UI would never get the variant.

The fix is to not just check `isEnabled` for false flags, but instead:
- use `getVariant`
- then check `variant.enabled` (in which case we have a variant and can
return it)
- else check `variant.feature_enabled`, falling back to `isEnabled` only
if `feature_enabled` is null/undefined.
2025-11-12 12:00:27 +01:00
Gastón Fournier
6732278e65
Revert "chore: upgrade swagger-parser" (#10965)
Reverts Unleash/unleash#10946 also impacting
https://github.com/bricks-software/unleash-enterprise/pull/639

Swagger parser resulted in an increase in the memory baseline or at
least seems to be the culprit, due to loading ajv validations upfront.
2025-11-12 09:27:01 +01:00
Simon Hornby
c5f0b50b30
chore: slightly simpler quick start setup (#10933)
Co-authored-by: Melinda Fekete <melinda.fekete@getunleash.io>
2025-11-11 17:10:27 +02:00
Thomas Heartman
1fc39ade33
chore: allow custom messages in maintenance mode banner (UI) (#10961)
Updates the maintenance mode banner to accept string variants, allowing
for custom maintenance mode messages.

Because the banner is almost the same as the existing banner component
we have, we can simplify the impl and just reuse the existing banner
instead. The one difference is that the maintenance mode banner used to
be taller. However, after talking to UX, we agreed that the banner
should be the same size, anyway.

<img width="1552" height="120" alt="image"
src="https://github.com/user-attachments/assets/fc9dc8ad-26ba-411a-846e-a79e1b855f37"
/>
2025-11-11 13:37:32 +00:00
Thomas Heartman
b33abf036b
chore: configure the 'maintenanceMode' flag to accept variants (#10956)
Configure the `maintenanceMode` flag type to be `boolean | Variant` and
update the env parsing to allow passing strings from the env.

The [first
impl](3bbfc9e681)
required you to set a full, variant -- stringified as json -- in the
env, but this is both error-prone and not very user friendly.
Additionally, the name of the variant isn't really important, and if
you're passing a string, you probably want it to be true.

As such, the [second
impl](c38357baa4)
updates the env parsing to read the full string value into a
pre-formatted variant if it's not parseable as a boolean.

As such, to set a custom message, you can now do:

```sh
UNLEASH_EXPERIMENTAL_MAINTENANCE_MODE='Custom message from plain env var string' yarn dev
```

With the [updates to the
UI](https://github.com/Unleash/unleash/pull/10961), it'll look a little
something like this:

<img width="388" height="64" alt="image"
src="https://github.com/user-attachments/assets/6b8a174b-d75f-4748-8f1a-1ad4ebce2073"
/>

## Rationale

This allows locking down Unleash instances with a custom message.
Previously, you'd have to use both maintenance mode and a custom banner
for this, but that requires more work to set properly and it shows two
banners, when you really only want the one.
2025-11-11 12:52:49 +01:00
Jaanus Sellin
6f02edce2d
chore: move delta diffing to a different feature flag (#10962)
Move delta diffing to a different feature flag
2025-11-11 10:55:37 +00:00
Jaanus Sellin
5d65600864
fix: when adding new milestone progression, prevent default form submit (#10960)
Fixed form submitting the form and reloading page.
2025-11-11 11:04:54 +02:00
Mateusz Kwasniewski
34a34364fb
feat: safeguards api frontend (#10959) 2025-11-10 16:52:07 +01:00
Mateusz Kwasniewski
4479d0478e
feat: safeguard form reads real data (#10957) 2025-11-10 16:13:27 +01:00
Jaanus Sellin
96118836d5
chore: remove release plans from getFeature endpoint (#10955) 2025-11-10 15:06:21 +02:00
Mateusz Kwasniewski
529726decf
feat: safeguard form draft (#10954) 2025-11-10 13:56:54 +01:00
Gastón Fournier
142b5a5d95
chore: decrease log level of acquire job lock (#10952)
This was done in order to debug the functionality, now it serves no
purpose
2025-11-10 10:38:15 +00:00
Mateusz Kwasniewski
8da2fa83cc
feat: milestone progression keyboard navigation (#10950) 2025-11-10 11:11:22 +01:00
Thomas Heartman
1cab7eaa78
chore: replace deprecated getDefaultVariant with defaultVariant (#10944)
Updates the flag resolver and other references to the unleash client's
deprecated `getDefaultVariant` to instead point to the `defaultVariant`
property instead, as described by the deprecation notice:


46bf068d26/src/variant.ts (L55-L60)
2025-11-10 11:11:00 +01:00
unleash-bot[bot]
8c56c375c7
chore(AI): trafficBillingDisplay flag cleanup (#10949) 2025-11-10 10:35:33 +02:00
Gastón Fournier
101ed4d3f7
chore: upgrade swagger-parser (#10946)
## Why

- @apidevtools/swagger-parser 12.1.0 switched its schema validator to
Ajv’s compile‑and‑reuse model, so validating our large OpenAPI document
no longer instantiates fresh Ajv/Z‑Schema instances per run. That lowers
the resident set size during spec validation.
- The bundled @apidevtools/json-schema-ref-parser dependency is now
14.x, which avoids mutating the input schema and uses a leaner
dereference cache, further trimming retained objects while we build the
OpenAPI spec.

In the previous 10.1.x line, lib/validators/schema.js was instantiating
Ajv (and even Z‑Schema in older builds) per invocation and mutating
large schema objects in place, which meant every validation spun up
fresh parser state plus lots of temporary objects.
2025-11-07 15:25:24 +01:00
Mateusz Kwasniewski
0bcdf82e37
feat: add safeguard button and borders (#10943) 2025-11-07 13:51:14 +01:00
Github Actions Bot
eea76d7131 7.3.0 2025-11-07 10:37:51 +00:00
Github Actions Bot
9e28166ed7 docs: Update CHANGELOG.md 2025-11-07 10:37:41 +00:00
unleash-bot[bot]
547c8ffd58
chore(AI): lifecycleGraphs flag cleanup (#10942)
This PR cleans up the lifecycleGraphs flag. These changes were
automatically generated by AI and should be reviewed carefully.

Fixes #10941

## 🧹 AI Flag Cleanup Summary
This change removes the `lifecycleGraphs` feature flag and makes the
associated
feature permanently available. The lifecycle graphs on the insights page
are now
enabled for all Enterprise users.
### 🚮 Removed
- **Configuration**
- `lifecycleGraphs` flag definition from `IFlagKey` and `flags` object
in
`src/lib/types/experimental.ts`.
- `lifecycleGraphs` flag from `UiFlags` in
`frontend/src/interfaces/uiConfig.ts`.
- `lifecycleGraphs: true` from `src/server-dev.ts` development config.
- **UI**
- The `useUiFlag('lifecycleGraphs')` hook call and associated
conditional
rendering logic in `PerformanceInsights.tsx`.
### 🛠 Kept
- **UI**
- The "New flags in production" and "Flags archived vs flags created"
widgets
are now always shown for Enterprise instances on the Performance
Insights page.
### 📝 Why
The `lifecycleGraphs` feature flag has been fully rolled out and is now
considered a permanent part of the application. This cleanup removes the
obsolete flag and its related conditional logic to simplify the
codebase.

---------

Co-authored-by: unleash-bot <194219037+unleash-bot[bot]@users.noreply.github.com>
Co-authored-by: Thomas Heartman <thomas@getunleash.io>
2025-11-07 10:36:49 +00:00
Thomas Heartman
8c626c8f4f
fix: don't clear "implicit" filters when updating table state outside quick filters (#10937)
Fixes bug that would only occur if the first thing you do (when there's
no url query params) on the page is to try to change the sort order or
change the number of results per page.

In those cases, the table state would be replaced with only the new
state from the sorting/page limit (and probably page).

In more specific terms: if you're on the page with no query params, then
that means that you're seeing your open change requests.

But if you tried to change the sorting, say, then the "state" and
"createdBy" filters would be cleared, and you would end up showing "all
change requests ever".

The fix is to spread the implicit table state into the new state before
updating the actual state, such that implicit filters become explicit
when that happens.

## Implicit filters?

So why do we have implicit filters? Partly aesthetic, partly because
that's how it works on github (github.com/pulls), and partly because
that makes it easier to share with coworkers. You just need to go to the
change requests page and copy the url. With no query params, they'll see
their own results instead of yours.
2025-11-07 09:48:16 +01:00