1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-11-10 01:19:53 +01:00
Commit Graph

14596 Commits

Author SHA1 Message Date
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
Thomas Heartman
2feb921a26
chore: disable "sortable" column headers for change requests table (#10936)
Makes all columns in the change requests table unsortable. The API
doesn't support sorting yet and it's not entirely clear that we want it
at the moment. As such, make it so that the column headers aren't
interactable to make it less misleading.
2025-11-07 09:48:05 +01:00
Mateusz Kwasniewski
ee6a346ca7
fix: ignore release plans in strategy diffing (#10938) 2025-11-06 15:42:27 +01:00
Thomas Heartman
a116405779
chore: Update "by" to "created by" in the global change request list (#10934)
<img width="132" height="132" alt="image"
src="https://github.com/user-attachments/assets/544bc469-0c3c-4a05-b524-6d9fbfe87215"
/>

Additionally, remove the redundant `id` properties from the column
accessors. They don't seem to have any effect and I didn't see them in
other code.
2025-11-06 14:33:25 +01:00
Thomas Heartman
4e2b39fcf8
chore: Reword "created" to "created by me" (#10935)
Changes the wording on the quick filter to be "created by me" instead of
just "created". This should make it clearer exactly what the filter
does.

Before:
<img width="525" height="141" alt="image"
src="https://github.com/user-attachments/assets/e7f0621a-469d-4967-99a6-66b6b583f20a"
/>


After:
<img width="556" height="145" alt="image"
src="https://github.com/user-attachments/assets/52ee5194-9284-4364-8e33-b56b61e20b32"
/>
2025-11-06 14:33:20 +01:00
Gastón Fournier
3d476c5113
feat: change how we calculate what to show new in Unleash (#10931)
## About the changes
This helps to specify how long to show new in Unleash so we don't forget
to remove it when doing a release. This doesn't mean we should keep this
list forever, but this helps us to keep it clean in the UI at least.

### Tests
We did unit test the logic as follows (manually because it's not an easy
piece of code to test in the UI):
```typescript
test('ui-test', () => {
    const showUntil = '7.3.0';
    expect(lt('6.9.3', showUntil)).toBe(true);
    expect(lt('7.2.3', showUntil)).toBe(true);
    expect(lt('7.3.0', showUntil)).toBe(false);
    expect(lt('7.3.1', showUntil)).toBe(false);
    expect(lt('7.4.0', showUntil)).toBe(false);
    expect(lt('8.0.0', showUntil)).toBe(false);
});
```
2025-11-06 13:13:37 +01:00
Thomas Heartman
5d1a8ca735
chore: add Change Requests to sidebar and fix command menu icon (#10932)
Adds the new change request overview to the sidebar and fixes the entry
in the command bar to use the right title and icon.

<img width="441" height="159" alt="image"
src="https://github.com/user-attachments/assets/a3eb4fdd-f440-470b-b42f-539ec53f0aa0"
/>
<img width="269" height="163" alt="image"
src="https://github.com/user-attachments/assets/a2fdf92d-73c5-4daf-af64-f9f5cfe56834"
/>


Additionally, standardize the change requests icon. Instead of using a
custom one from a svg, let's use the material icon (which is the same,
just -90deg rotated and flipped around an axis)

This standardization, makes the icon a tiny bit smaller in the new
project modal, but it's the same size (20x20) as the other icons, so I
don't think anyone's gonna notice or care, and I think it's better to
use the basic material icon.

Of course, we could scale it up (and add a `scale` prop to the change
request icon), but I'd rather leave it out for consistency and
simplicity for now.

old:
<img width="835" height="52" alt="image"
src="https://github.com/user-attachments/assets/00dc35f3-a536-4e10-8115-2a0dbde92bb1"
/>

new: 
<img width="823" height="63" alt="image"
src="https://github.com/user-attachments/assets/5870fde1-05c1-43ce-a1c1-7ddc2242fb6b"
/>



As for the scale, I've set it to 1.1, because that makes it damn near
identical on the change request page (where I've also updated the raw
svg to the new icon) (old one on left, new one on right):
<img width="500" height="796" alt="image"
src="https://github.com/user-attachments/assets/fbbbf44f-8f8d-4cb9-b466-4cf3e70bfb1a"
/>
2025-11-06 12:12:58 +00:00
Thomas Heartman
2f25f5fd8a
fix: don't spread props + nest li correctly (#10923)
Fixes a few errors appearing on the "assign user/group" on the project
settings pages. Namely:
- spreading "key" into props in two places (option list and selected
chips)
- incorrect HTML nesting ([`li`'s only permitted parents are `ul`, `ol`,
and
`menu`](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/li#technical_summary))
- missing key in the list (caused by nesting the `li`)

The renderOption type update is based on a [fix that was added in a more
recent version of
mui](https://github.com/mui/material-ui/pull/42689/files).

For some reason, the default tag rendering spreads the key in somehow,
so I've had to add a manual `renderTags` prop, and as such extracted the
`getOptionLabel` function. If you know a better way of sorting out the
fact that the `key` prop is spread into the default MUI chips, I'd be
very happy to implement that instead.
2025-11-06 13:05:16 +01:00
Thomas Heartman
7215e6bdfb
Chore: copy change request table improvements to project CR tables (#10920)
Ports some of the most significant updates from the new global change
request table to the old change request table.

Notably:
- Truncate the title if it's long
- Give more space to the title (especially useful because of the
truncation)
- Vertically align cell content to the top (to make it easy to scan in a
single row)

Before:

Without title truncation (extreme case)
<img width="4612" height="11744" alt="image"
src="https://github.com/user-attachments/assets/60511795-f113-41d1-9073-4c7752a82875"
/>

Column widths:
<img width="1496" height="212" alt="image"
src="https://github.com/user-attachments/assets/f92c3d2d-1c34-4de9-996c-039160ad9766"
/>
<img width="919" height="290" alt="image"
src="https://github.com/user-attachments/assets/babce5d3-a92d-4e5d-822a-6123a3a8e698"
/>



After:
With title truncation:
<img width="1533" height="617" alt="image"
src="https://github.com/user-attachments/assets/4ebfb587-b646-49f2-a087-1b7347a3bb26"
/>

Column widths:
<img width="1496" height="305" alt="image"
src="https://github.com/user-attachments/assets/d03be365-7df7-4c62-a3b7-d55e115fd6cb"
/>
<img width="933" height="304" alt="image"
src="https://github.com/user-attachments/assets/7cd5df64-5ee5-4a1e-a065-00e7a853ab16"
/>
2025-11-06 13:05:06 +01:00
Melinda Fekete
28fa4240b7
docs: updates for 7.3 (#10913) 2025-11-06 10:56:15 +01:00
Jaanus Sellin
fe2d63ad9b
feat: add safeguards migration (#10928)
Safeguards migration
2025-11-06 11:03:40 +02:00
Nuno Góis
9e7f68abc3
refactor: clean up dead code after removing newStrategyModal flag (#10926)
https://linear.app/unleash/issue/2-3885/clean-up-legacy-code

Cleans up dead code after removing the `newStrategyModal` feature flag.
2025-11-06 08:48:01 +00:00
Melinda Fekete
40d917d392
chore: remove custom strategy deprecation warnings from release tempates (#10929)
Remove two more deprecations for custom stategies
2025-11-06 09:00:01 +01:00
Simon Hornby
94554ed4f8
chore: remove deprecation warnings for custom strategies (#10924) 2025-11-05 15:17:11 +02:00
Thomas Heartman
88a42ac849
fix: cap rendered change request title height to 3 lines (#10922)
Caps the rendered change request title height to 3 lines and makes the
edit button rectangular-ish instead of circular. This will work better
as it can grow arbitrarily tall.

## Title capping
Before:
<img width="753" height="1260" alt="image"
src="https://github.com/user-attachments/assets/8ae278f9-cc97-4803-8c29-4f3fede99b52"
/>


After:
<img width="1506" height="216" alt="image"
src="https://github.com/user-attachments/assets/c5ca04e9-b1c7-4d36-b023-86f6fbb322db"
/>

## Edit button border fix
Before:
<img width="1441" height="251" alt="image"
src="https://github.com/user-attachments/assets/40df8747-a68f-4d36-af67-888c841cfcad"
/>


After:
<img width="1455" height="247" alt="image"
src="https://github.com/user-attachments/assets/c63380cb-ebe8-481d-a959-087dbf79b9fc"
/>
2025-11-05 13:31:00 +01:00
David Leek
a4885c45a3
chore(frontend): remove unused legacy featureoverview component (#10921) 2025-11-05 13:11:58 +01:00
unleash-bot[bot]
1030feee38
chore(AI): envAddStrategySuggestion flag cleanup (#10916) 2025-11-05 11:02:42 +01:00
Thomas Heartman
cd0eff35e2
Chore: remove aria-current; group buttons (#10919)
After some more consideration and reading, I don't think `aria-current`
is the right attribute here. Additionally, `aria-pressed` and
`aria-selected` are also not appropriate here. I can't find a suitable
alternative, so I'm falling back to the first rule of aria: if you don't
know what to do: don't do anything.

As such, I'm falling back to regular html data attributes.
2025-11-05 10:54:31 +01:00
Jaanus Sellin
79e439ea05
fix: hide usage when there is no limit (#10918) 2025-11-05 11:37:56 +02:00
Thomas Heartman
85fa04bc75
Chore: Vertically center change request quick filters (#10917)
Removes top padding that pushes the filters down.

Before:
<img width="683" height="260" alt="image"
src="https://github.com/user-attachments/assets/9eb43413-b988-435f-8ca0-8ee2e5e03a87"
/>


After:
<img width="553" height="244" alt="image"
src="https://github.com/user-attachments/assets/b1ed623c-f154-43d8-ab31-cc0df374fb19"
/>
2025-11-05 10:20:55 +01:00
unleash-bot[bot]
11a2860700
chore(AI): newStrategyModal flag cleanup (#10912)
This PR cleans up the newStrategyModal flag. These changes were
automatically generated by AI and should be reviewed carefully.

Fixes #10911



🧹 AI Flag Cleanup Summary

This change removes the newStrategyModal feature flag, making the new
"Add
strategy" modal the default and only experience for adding strategies to
a
feature.

I've removed the flag checks and the legacy code paths for the old
strategy
menu. The FeatureStrategyMenu component is now simplified to only render
the new
modal experience. I have also removed the flag from backend
configurations and
frontend interfaces.

🚮 Removed

• Feature Flag: newStrategyModal flag definition and configuration from
experimental.ts, server-dev.ts, and uiConfig.ts.
• Conditional Logic: All checks for the newStrategyModal flag in
FeatureStrategyMenu.tsx.
• Legacy Components: The old strategy menu
(LegacyFeatureStrategyMenuCards) and
related dialogs (LegacyReleasePlanReviewDialog) have been removed from
FeatureStrategyMenu.tsx.
• Unused Code: Unused state variables, functions
(openDefaultStrategyCreationModal, openReleasePlans), and imports
related to
the legacy strategy menu have been cleaned up.

🛠 Kept

• New "Add strategy" modal: The new modal for adding strategies is now
the only
implementation. Its user experience is preserved and made default.

📝 Why

The newStrategyModal feature has been completed, and the decision was to
keep
the new user experience. This cleanup removes the complexity of
maintaining two
different UI paths for adding strategies, making the code cleaner and
easier to
maintain.

---------

Co-authored-by: unleash-bot <194219037+unleash-bot[bot]@users.noreply.github.com>
Co-authored-by: Nuno Góis <github@nunogois.com>
2025-11-05 08:59:18 +00:00
unleash-bot[bot]
8d00eea66a
chore(AI): newUiConfigService flag cleanup (#10910)
This PR cleans up the newUiConfigService flag. These changes were
automatically generated by AI and should be reviewed carefully.

Fixes #10909

## 🧹 AI Flag Cleanup Summary
This PR removes the `newUiConfigService` feature flag and makes its
functionality permanent. The `UiConfigController` now exclusively uses
the
`UiConfigService` to generate the UI configuration, removing the old,
now-dead
code path.
As a result of this change, several services that were only used in the
old
implementation have been removed from `UiConfigController`, along with
their
associated types and imports, simplifying the controller significantly.
### 🚮 Removed
- **Flag Definitions**
- `newUiConfigService` flag definition from
`src/lib/types/experimental.ts`.
- Development override for `newUiConfigService` in `src/server-dev.ts`.
- **Conditional Logic**
- The `if` block checking for `newUiConfigService` in
`UiConfigController.getUiConfig`.
- **Dead Code**
- The legacy implementation of building the UI config object inside
`UiConfigController`.
- Several unused service dependencies (`VersionService`,
`SettingService`,
`EmailService`, `SessionService`, `MaintenanceService`) and
`IFlagResolver` from
`UiConfigController`.
### 🛠 Kept
- **New `getUiConfig` implementation**
- The `UiConfigController.getUiConfig` method now solely relies on
`UiConfigService` to fetch the UI configuration.
### 📝 Why
The `newUiConfigService` feature flag was fully rolled out and marked as
completed. This cleanup removes the flag and the legacy code path,
simplifying
the `UiConfigController` and making the new UI config service the
standard way
of providing UI configuration.

Co-authored-by: unleash-bot <194219037+unleash-bot[bot]@users.noreply.github.com>
2025-11-04 15:49:44 +00:00
mohammedlaniyan-unleash
366827de6f
feat: prioritize first production environments in FeatureExposureMetrics (#10891) 2025-11-04 11:53:41 +00:00
David Leek
a1ebd0d114
chore: swap edit and copy strategy button order (#10904) 2025-11-04 07:50:17 +01:00
dependabot[bot]
8f8e567d30
chore(deps): bump vite from 6.3.6 to 6.4.1 (#10832) 2025-11-03 21:08:28 +01:00
Nuno Góis
699f9e6ce2
fix: enterprise edge stats should take into account full month (#10898)
https://linear.app/unleash/issue/2-3993/fix-enterprise-edge-stats

Fixes Enterprise Edge stats to correctly reflect the average across the
whole month.

Now returns a rounded average with 3 decimal places.

Also includes the average of the last 12 months.
2025-11-03 13:45:38 +00:00
Mateusz Kwasniewski
bbff52eb7b
feat: milestone progression paused at (#10907) 2025-11-03 14:08:37 +01:00
Simon Hornby
0afcba27bf
chore: add a flag to deny streaming for non edge connections (#10905) 2025-11-03 14:45:23 +02:00
Mateusz Kwasniewski
d452e45f37
chore: safeguards flag (#10906) 2025-11-03 12:05:26 +01:00
Gastón Fournier
bf19b62079
feat: ability to disable custom strategies (#10885)
## About the changes
This adds the ability to disable custom strategy creation and editing by
using two env variables: `UNLEASH_DISABLE_CUSTOM_STRATEGY_CREATION` and
`UNLEASH_DISABLE_CUSTOM_STRATEGY_EDITING`.

Fixes: #9593

This could be useful if you want to remove the ability to create new
custom strategies and rely on the built-in ones
2025-11-03 09:27:15 +01:00
Jaanus Sellin
a52ee10827
feat: align milestone time formatting (#10903) 2025-10-31 16:40:28 +02:00
Mateusz Kwasniewski
b21c101439
refactor: extract different milestone button types (#10901) 2025-10-31 15:02:36 +01:00
Jaanus Sellin
2458e5d5aa
feat: make milestone progression more clear (#10899) 2025-10-31 13:53:05 +00:00
Mateusz Kwasniewski
96f7f2f1bf
refactor: explicit scheduled milestone modelling (#10900) 2025-10-31 13:28:37 +01:00
Mateusz Kwasniewski
45fc547049
feat: start now button with background (#10897) 2025-10-31 12:24:56 +01:00
Melinda Fekete
d721499bd4
docs: explain that IP allow list is configured by us (#10896) 2025-10-31 11:53:30 +01:00
Melinda Fekete
7d2a5d0ed8
docs: add guides overview page (#10895) 2025-10-31 09:35:08 +01:00
Melinda Fekete
a14c5c7f57
docs: update private project collaboration mode explanation (#10892) 2025-10-30 17:03:16 +01:00
Mateusz Kwasniewski
d089e771da
Revert "feat: milestone without prior automation (#10893)" (#10894) 2025-10-30 14:58:04 +01:00
Mateusz Kwasniewski
a2c8e80345
feat: milestone without prior automation (#10893) 2025-10-30 13:13:06 +00:00
renovate[bot]
f74c1dc482
fix(deps): update dependency normalize-url to v8 (#10193) 2025-10-29 14:30:51 +01:00
Gastón Fournier
d715fc6aad
fix(docs): Slack webhook URL documentation link (#10887)
Updated the Slack webhook URL documentation link to the latest Slack API
documentation.

Fixes: #10731

https://api.slack.com/incoming-webhooks is redirected to
https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/
2025-10-29 13:48:06 +01:00
Gastón Fournier
bcfad0a250
feat: include readiness check option (#10850)
## About the changes
This introduces a new endpoint to allow users to check for readiness of
Unleash to serve traffic, in particular validating that the DB is up.
It's an opt-in feature that has to be enabled with the environment
variable `CHECK_DB_ON_READY=true` or via the configuration option
`checkDbOnReady`.

Closes #10742
2025-10-29 13:11:23 +01:00
Mateusz Kwasniewski
eb87acd35a
feat: read milestone progressions from snapshot (#10886) 2025-10-29 11:57:47 +01:00
Mateusz Kwasniewski
b4208d2cf2
feat: milestone progression borders (#10884) 2025-10-29 11:02:53 +01:00
Mateusz Kwasniewski
9a23bc36f8
chore: remove unused events (#10883) 2025-10-29 10:29:04 +01:00
Mateusz Kwasniewski
c2ec77ba6e
feat: read only milestone progression in cr (#10882) 2025-10-29 09:54:39 +01:00
unleash-bot[bot]
25abe054a4
chore(AI): originMiddlewareRequestLogging flag cleanup (#10864)
This PR cleans up the originMiddlewareRequestLogging flag. These changes
were automatically generated by AI and should be reviewed carefully.

Fixes #10863

## 🧹 AI Flag Cleanup Summary
This change removes the `originMiddlewareRequestLogging` feature flag
and its
associated code. The flag's outcome was to be discarded, so the logging
it
controlled has been removed from `originMiddleware`.
### 🚮 Removed
- **Flag Definition**
- Removed `originMiddlewareRequestLogging` from the `IFlagKey` type in
`src/lib/types/experimental.ts`.
- Removed the flag from the development server configuration in
`src/server-dev.ts`.
- **Logic**
- Removed the conditional logging of API requests from
`originMiddleware`.
- **Tests**
- Removed the test case for API request logging in
`origin-middleware.test.ts`.
- Removed the flag setup from the test configuration.
### 🛠 Kept
- **Core functionality**
- The core logic of the `originMiddleware` for emitting `REQUEST_ORIGIN`
metric events for UI and API requests remains unchanged.
### 📝 Why
The `originMiddlewareRequestLogging` feature flag was completed and its
outcome
was 'discarded'. This cleanup removes the flag and the now-dead code
related to
it, simplifying the middleware and tests.

---------

Co-authored-by: unleash-bot <194219037+unleash-bot[bot]@users.noreply.github.com>
Co-authored-by: Gastón Fournier <gaston@getunleash.io>
2025-10-28 18:42:10 +01:00