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

2668 Commits

Author SHA1 Message Date
Thomas Heartman
243088fdca
fix: Add strategy and more strategies button are different heights (#9300)
Fixes the height discrepancy between add strategy and more strategies
buttons, both with and without the flag enabled.

The essence of the fix is to make the "more strategies" button's height
dynamic and grow to match the height of the other button.



Before (flag enabled):

![image](https://github.com/user-attachments/assets/4dda44b3-3add-40cd-93ed-48150e73ac35)

After (flag enabled):

![image](https://github.com/user-attachments/assets/2788f141-fe64-4733-9202-f9f115396001)


Before (flag disabled):

![image](https://github.com/user-attachments/assets/c3a9d396-cb30-4a61-9400-45458189d3f2)

After (flag disabled):

![image](https://github.com/user-attachments/assets/0570ff85-401a-4e6f-93e7-d1619a4cd848)

As a bonus: also enables the ui font redesign flag for server-dev.

If you're very sharp-eyed, you might notice a few things:

1. There's more padding on the new button. This was done in concert with
UX when we noticed there was more padding on other buttons. So as a
result, we set the button type to the default instead of "small".

1. The kebab button isn't perfectly square with the flag on. There's a
few issues here, but essentially: to use `aspect-ratio: 1`, you need
either a height or a width set. Because we want everything here to be
auto-generated (use the button's intrinsic height), I couldn't make it
work. In the end, I think this is close enough. If you have other ideas,
you're very welcome to try and fix it.
2025-02-12 13:54:06 +01:00
Nuno Góis
151db95c2d
feat: frontend API POST endpoint (#9291)
https://linear.app/unleash/issue/2-3260/implement-post-request-support-in-unleashs-frontend-api

Implements the POST endpoint in Unleash's frontend API.
2025-02-12 11:56:51 +00:00
David Leek
5921f0ea09
chore: add migration that backfills scim user email hashes (#9295) 2025-02-12 09:05:36 +01:00
Mateusz Kwasniewski
54766fd4a0
feat: connection count usage (#9294) 2025-02-11 16:15:45 +01:00
Tymoteusz Czech
cac38b0cee
fix: font size flag change to boolean (#9290)
## About the changes
Fix for `uiGlobalFontSize` flag being returned as an object, which is truthy.
2025-02-11 13:24:18 +01:00
Gastón Fournier
5e9698fe63
chore: Create test db from template (#9265)
## About the changes
Based on the first hypothesis from
https://github.com/Unleash/unleash/pull/9264, I decided to find an
alternative way of initializing the DB, mainly trying to run migrations
only once and removing that from the actual test run.

I found in [Postgres template
databases](https://www.postgresql.org/docs/current/manage-ag-templatedbs.html)
an interesting option in combination with jest global initializer.

### Changes on how we use DBs for testing

Previously, we were relying on a single DB with multiple schemas to
isolate tests, but each schema was empty and required migrations or
custom DB initialization scripts.

With this method, we don't need to use different schema names
(apparently there's no templating for schemas), and we can use new
databases. We can also eliminate custom initialization code.

### Legacy tests

This method also highlighted some wrong assumptions in existing tests.
One example is the existence of `default` environment, that because of
being deprecated is no longer available, but because tests are creating
the expected db state manually, they were not updated to match the
existing db state.

To keep tests running green, I've added a configuration to use the
`legacy` test setup (24 tests). By migrating these, we'll speed up
tests, but the code of these tests has to be modified, so I leave this
for another PR.

## Downsides
1. The template db initialization happens at the beginning of any test,
so local development may suffer from slower unit tests. As a workaround
we could define an environment variable to disable the db migration
2. Proliferation of test dbs. In ephemeral environments, this is not a
problem, but for local development we should clean up from time to time.
There's the possibility of cleaning up test dbs using the db name as a
pattern:
2ed2e1c274/scripts/jest-setup.ts (L13-L18)
but I didn't want to add this code yet. Opinions?

## Benefits
1. It allows us migrate only once and still get the benefits of having a
well known state for tests.
3. It removes some of the custom setup for tests (which in some cases
ends up testing something not realistic)
4. It removes the need of testing migrations:
https://github.com/Unleash/unleash/blob/main/src/test/e2e/migrator.e2e.test.ts
as migrations are run at the start
5. Forces us to keep old tests up to date when we modify our database
2025-02-11 13:01:43 +01:00
Simon Hornby
bf9fdd4f8d
feat: allow SCIM user deletion (#9190)
Co-authored-by: Gastón Fournier <gaston@getunleash.io>
2025-02-10 14:17:46 +02:00
Jaanus Sellin
fb68692247
feat: add delta api streaming flag (#9269)
Lets add separate flag for delta streaming.
2025-02-10 11:22:16 +02:00
Ivar Conradi Østhus
ac1d8b9b70
fix: change log-level to info for filterExistingFlagNames 2025-02-09 22:50:04 +01:00
Ivar Conradi Østhus
d1b9ca00a0
fix: Killwitch to block usage-metrics from non-exiting flag-names (#9266)
Adds a killswitch called "filterExistingFlagNames". When enabled it will
filter out reported SDK metrics and remove all reported metrics for
names that does not match an exiting feature flag in Unleash.

This have proven critical in the rare case of an SDK that start sending
random flag-names back to unleash, and thus filling up the database. At
some point the database will start slowing down due to the noisy data.

In order to not resolve the flagNames all the time we have added a small
cache (10s) for feature flag names. This gives a small delay (10s) from
flag is created until we start allow metrics for the flag when
kill-switch is enabled. We should probably listen to the event-stream
and use that invalidate the cache when a flag is created.
2025-02-09 22:45:44 +01:00
Fredrik Strand Oseberg
af516537bd
fix: return if empty array (#9254)
Fixes an issue where segment-updated event would be added to cache even
though there were no correlated events. Tests needs to be added in
Enterprise.
2025-02-07 14:39:43 +01:00
Tymoteusz Czech
aa5c70f70e
fix: project roles - include change request config in project update (#9256)
Change request settings as a subset of "update project" role.
2025-02-07 13:42:48 +01:00
Jaanus Sellin
43e418e40a
feat: emit delta updated event (#9250)
Start emitting delta updated event and make delta cache service
singleton.
2025-02-07 10:52:11 +02:00
Tymoteusz Czech
4e36d2285e
chore: remove sortProjectRoles flag (#9226) 2025-02-06 19:40:10 +01:00
Tymoteusz Czech
54e4fd2190
chore: remove lifecycle v2 flag (#9224) 2025-02-06 14:54:45 +01:00
David Leek
9a8607b07e
chore: clear scim fields when deleting user + migration for existing cases (#9217) 2025-02-05 15:45:51 +01:00
Jaanus Sellin
a15d63672f
feat: client spec to support deltaApi (#9222)
Add client spec version for delta API.
2025-02-05 15:02:44 +02:00
Mateusz Kwasniewski
a11c965bec
feat: productivity report unsubscribed users (#9220) 2025-02-05 11:28:01 +01:00
Mateusz Kwasniewski
ebcbd7b637
feat: productivity report only for seen users (#9204) 2025-02-05 10:05:35 +01:00
Jaanus Sellin
640db0c057
chore: pull delta controller out of OSS (#9206)
We are moving delta controller to enterprise. This sets it up.
2025-02-04 14:37:39 +02:00
Jaanus Sellin
d8a47ce39d
fix: now hydration event is being returned if revision does not exist in cache (#9203)
Now when customer is coming with revision ID that does not exist in
cache, we return hydration.
2025-02-04 13:21:17 +02:00
Melinda Fekete
ef8191c68d
Update API tokens and client keys pages (#9143) 2025-02-04 09:32:32 +01:00
Nuno Góis
138410eafd
chore: drop release plan template view permissions (#9195)
https://linear.app/unleash/issue/2-3225/drop-the-release-template-view-permissions

Drops the release plan template view permissions in favor of an "open by
default" approach.

Should merge the Enterprise PR first.
2025-02-03 16:24:25 +00:00
Gastón Fournier
6f19ce090d
feat: move create user validations to the input (#9189)
## About the changes
Validations in the constructor were executed on the way out (i.e. when
reading users). Instead we should validate when we insert the users.

We're also relaxing the email validation to support top domain emails
(e.g. `...@jp`)
2025-02-03 15:18:20 +01:00
Mateusz Kwasniewski
3b76c31838
fix: relax email checking (#9183) 2025-01-31 15:10:18 +01:00
Mateusz Kwasniewski
9f568b79b2
fix: relax email checking (#9182) 2025-01-31 14:50:24 +01:00
Mateusz Kwasniewski
77cb30a82f
feat: drop x- header prefix (#9175) 2025-01-30 16:09:26 +01:00
Mateusz Kwasniewski
07d4693f6d
fix: original url for uniqueness tracking (#9172) 2025-01-29 21:58:43 +01:00
Mateusz Kwasniewski
cbe0ac475c
feat: separate frontend backend counting (#9167) 2025-01-29 13:31:37 +01:00
Mateusz Kwasniewski
05e608ab09
chore: gather metrics every hour (#9163) 2025-01-29 10:01:38 +01:00
Jaanus Sellin
d993b1963a
feat: segment implementation in delta (#9148)
This is implementing the segments events for delta API. Previous version
of delta API, we were just sending all of the segments. Now we will have
`segment-updated` and `segment-removed `events coming to SDK.
2025-01-28 13:38:11 +02:00
Fredrik Strand Oseberg
378bbe5133
feat: configurable global font size (#9155)
This PR sets up the application to accept a value from a variant we
control to set the font size of the application on a global level. If it
fails, the value falls back to the previously set CSS value.
2025-01-27 14:43:32 +01:00
Thomas Heartman
ab3531dd51
fix: correct name order -> traffic usage data -> traffic data usage (#9156)
Correcting a slight oversight from when we created the new methods. This
brings the name in line with the other store methods.
2025-01-27 11:20:04 +01:00
Thomas Heartman
85ae6f3b95
chore(1-3293): add new query for daily data that uses date ranges (#9150)
Add new methods to the store behind data usage metrics that accept date
ranges instead of a single month. The old data collection methods
re-route to the new ones instead, so the new methods are tested
implicitly.

Also deprecates the new endpoint that's not in use anywhere except in an
unused service method in Enterprise yet.

## Discussion point:

Accepts from and to params as dates for type safety. You can send unparseable strings, but if you send a date object, you know it'll work.

Leaves the use of the old method in `src/lib/features/instance-stats/instance-stats-service.ts` to keep changes small.
2025-01-27 10:16:36 +01:00
Gastón Fournier
fb95415d27
chore: remove feature toggle kill switch for admin token UI (#9154)
## About the changes
This was released with 6.6 and now this flag is no longer needed
2025-01-27 10:01:35 +01:00
Jaanus Sellin
280710f22a
feat: delta rework (#9133)
We are changing how the Delta API works, as discussed:

1. We have removed the `updated` and `removed` arrays and now keep
everything in the `events` array.
2. We decided to keep the hydration cache separate from the events array
internally. Since the hydration cache has a special structure and may
contain not just one feature but potentially 1,000 features, it behaved
differently, requiring a lot of special logic to handle it.
3. Implemented `nameprefix` filtering, which we were missing before.


Things still to implement:

1.  Segment hydration and updates to it.
2025-01-22 13:57:42 +02:00
Thomas Heartman
4bbff0c554
feat(1-3260): store support for data traffic from a range (#9127)
Add support for querying the traffic data usage store for the aggregated data for an arbitrary number of months back.

Adds a new `getTrafficDataForMonthRange(monthsBack: number)` method to the store that aggregates data on a monthly basis by status code and traffic group. Returns a new type with month data instead of day data.
2025-01-22 09:48:51 +01:00
David Leek
09872ae760
chore: create the releasePlanChangeRequests feature flag (#9126) 2025-01-21 14:26:22 +01:00
Thomas Heartman
857c91b803
feat(1-3262): initial impl of new month/range picker (#9122)
This PR implements a first version of the new month/range picker for the
data usage graphs. It's minimally hooked up to the existing
functionality to not take anything away.

This primary purpose of this PR is to get the design and interaction out
on sandbox so that UX can have a look and we can make adjustments.

As such, there are a few things in the code that we'll want to clean up
before removing the flag later:
- for faster iteration, I've used a lot of CSS nesting and element
selectors. this isn't usually how we do it here, so we'll probably want
to extract into styled components later
- there is a temporary override of the value in the period selector so
that you can select ranges. It won't affect the chart state, but it
affects the selector state. Again, this lets you see how it acts and
works.
- I've added a `NewHeader` component because the existing setup smushed
the selector (it's a MUI grid setup, which isn't very flexible). I don't
know what we want to do with this in the end, but the existing chart
*does* have some problems when you resize your window, at least
(although this is likely due to the chart, and can be solved in the same
way that we did for the personal dashboards).


![image](https://github.com/user-attachments/assets/f3ce3ff9-bab3-4d00-afbe-56f5624fbe16)
2025-01-21 12:15:43 +01:00
Tymoteusz Czech
08a28c99d6
fix: align project roles checkboxes (#9123)
Fix checkbox alignment and grouping
2025-01-21 10:34:20 +00:00
Mateusz Kwasniewski
e9db8ab8f0
feat: max parallel sessions config (#9109) 2025-01-20 11:51:50 +01:00
Mateusz Kwasniewski
54aebe7b5c
feat: connection id counting fallback (#9115) 2025-01-20 09:18:31 +01:00
Fredrik Strand Oseberg
25c09c3627
feat: transparent header (#9108)
This PR adds header redesign behind a feature flag
2025-01-17 09:45:45 +01:00
Jaanus Sellin
013ddd348d
fix: remove deleted event from being update event (#9106)
The feature was getting into updated array due to feature-deleted event.
2025-01-16 11:52:07 +02:00
Jaanus Sellin
3a50750a33
fix: feature-dependencies-removed event should not be created always (#9100)
Currently, every time you archived feature, it created
feature-dependencies-removed event.

This PR adds a check to only create events for those features that have
dependency.
2025-01-15 11:55:01 +02:00
Jaanus Sellin
d6ec0f1776
fix: add removed back after deleting from updated (#9099) 2025-01-15 10:40:28 +02:00
Tymoteusz Czech
a2b78df0ad
feat: new lifecycle icons (#9098)
- Feature flag added
- New assets
2025-01-15 08:53:07 +01:00
Nuno Góis
4a000b3a40
chore: prioritize milestone strategies in sorting (#9081)
https://linear.app/unleash/issue/2-3100/sorting-issues-with-milestone-strategies-and-regular-strategies

This PR ensures that milestone strategies are always prioritized and
evaluated before regular strategies. It ensures that the order displayed
in the UI matches the internal evaluation order.
2025-01-14 15:25:33 +00:00
Tymoteusz Czech
b5f0d3e86a
refactor: project permissions list (#9082)
Re-organized project permissions.
2025-01-14 14:24:25 +01:00
Thomas Heartman
6a7dcb9c46
fix(1-3247): remove explicit "in project" text from change request event text (#9091)
We got an event for a scheduled application success today that looked a
little something like this:

> Successfully applied the scheduled change request #1168 in the
production environment in project eg by gaston in project eg.

Notice that we're stating the project twice (once with a link (removed
here) and once without).

This PR removes the redundancy in CR events:


The project is already included in the `changeRequest` variable, which
is populated in `src/lib/addons/feature-event-formatter-md.ts` by
the `generateChangeRequestLink` function.

The (current) definition is:

```typescript
    generateChangeRequestLink(event: IEvent): string | undefined {
        const { preData, data, project, environment } = event;
        const changeRequestId =
            data?.changeRequestId || preData?.changeRequestId;
        if (project && changeRequestId) {
            const url = `${this.unleashUrl}/projects/${project}/change-requests/${changeRequestId}`;
            const text = `#${changeRequestId}`;
            const featureLink = this.generateFeatureLink(event);
            const featureText = featureLink
                ? ` for feature flag ${this.bold(featureLink)}`
                : '';
            const environmentText = environment
                ? ` in the ${this.bold(environment)} environment`
                : '';
            const projectLink = this.generateProjectLink(event);
            const projectText = project
                ? ` in project ${this.bold(projectLink)}`
                : '';
            if (this.linkStyle === LinkStyle.SLACK) {
                return `${this.bold(`<${url}|${text}>`)}${featureText}${environmentText}${projectText}`;
            } else {
                return `${this.bold(`[${text}](${url})`)}${featureText}${environmentText}${projectText}`;
            }
        }
    }
```

Which includes links, env, and project info already.
2025-01-14 09:54:19 +01:00