Skip to content

Commit

Permalink
Merge branch 'main' of github.com:Unleash/unleash into change-request…
Browse files Browse the repository at this point in the history
…-applied-diff
  • Loading branch information
kwasniew committed Nov 26, 2024
2 parents 56d2d7f + 14403d7 commit 28ff583
Show file tree
Hide file tree
Showing 36 changed files with 1,052 additions and 174 deletions.
26 changes: 17 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,27 @@

## What is Unleash?

Unleash is a powerful open source solution for feature management. It streamlines your development workflow, accelerates software delivery, and empowers teams to control how and when they roll out new features to end users. With Unleash, you can deploy code to production in smaller, more manageable releases at your own pace.
Unleash is a powerful open-source solution for feature management. It streamlines your development workflow, accelerates software delivery, and empowers teams to control how and when they roll out new features to end users. With Unleash, you can deploy code to production in smaller, more manageable releases at your own pace.

Feature flags in Unleash let you test your code with real production data, reducing the risk of negatively impacting your users' experience. It also enables your team to work on multiple features simultaneously without the need for separate feature branches.

Unleash is the most popular open source solution for feature flagging on GitHub. It supports 15 official client and server SDKs and over 15 community SDKs. You can even create your own SDK if you wish. Unleash is compatible with any language and framework.
Unleash is the most popular open-source solution for feature flagging on GitHub. It supports 15 official client and server SDKs and over 15 community SDKs. You can even create your own SDK if you wish. Unleash is compatible with any language and framework.

<br/>

## Getting Started with Unleash
## Get started with Unleash

### 1. Setting Up Unleash
### Set up Unleash

To get started with Unleash, you need [`git`](https://git-scm.com/) and [`docker`](https://www.docker.com/) installed on your machine.
To get started with Unleash, you can either explore [Unleash Enterprise](#set-up-unleash-enterprise) with a free trial or [get started locally](#set-up-unleash-locally) with our open-source solution.

#### Unleash Enterprise

To start with Unleash Enterprise, [request a free trial](https://www.getunleash.io/plans/enterprise-payg?utm_source=oss&utm_medium=readme&utm_content=unleash-enterprise-start). This gives you access to a hosted instance with unlimited projects and environments and features such as [role-based access control](https://docs.getunleash.io/reference/rbac), [change requests](https://docs.getunleash.io/reference/change-requests), [single sign-on](https://docs.getunleash.io/reference/sso), and [SCIM](https://docs.getunleash.io/reference/scim) for automatic user provisioning.

#### Unleash Open Source

To set up Unleash locally, you'll need [`git`](https://git-scm.com/) and [`docker`](https://www.docker.com/) installed on your machine.

Execute the following commands:

Expand All @@ -44,7 +52,7 @@ Then point your browser to `localhost:4242` and log in using:

If you'd rather run the source code in this repo directly via Node.js, see the [step-by-step instructions to get up and running in the contributing guide](./CONTRIBUTING.md#how-to-run-the-project).

### 2. Connect your SDK
### Connect your SDK

Find your preferred SDK in [our list of official SDKs](#unleash-sdks) and import it into your project. Follow the setup guides for your specific SDK.

Expand Down Expand Up @@ -109,7 +117,7 @@ We know that learning a new tool can be hard and time-consuming. We have a growi

## Contribute to Unleash

Unleash is the largest [open source feature flag solution](https://www.getunleash.io/) on GitHub. Building Unleash is a collaborative effort, and we owe a lot of gratitude to many smart and talented individuals. Building it together with the community ensures that we build a product that solves real problems for real people. We'd love to have your help too: Please feel free to open issues or provide pull requests.
Unleash is the largest [open-source feature flag solution](https://www.getunleash.io/) on GitHub. Building Unleash is a collaborative effort, and we owe a lot of gratitude to many smart and talented individuals. Building it together with the community ensures that we build a product that solves real problems for real people. We'd love to have your help too: Please feel free to open issues or provide pull requests.

Check out [the CONTRIBUTING.md file](./CONTRIBUTING.md) for contribution guidelines and the [Unleash developer guide](./website/docs/contributing/developer-guide.md) for tips on environment setup, running the tests, and running Unleash from source.

Expand Down Expand Up @@ -138,7 +146,7 @@ Check out [the CONTRIBUTING.md file](./CONTRIBUTING.md) for contribution guideli
- Out-of-the-box integrations with popular tools ([Slack](https://docs.getunleash.io/addons/slack), [Microsoft Teams](https://docs.getunleash.io/addons/teams), [Datadog](https://docs.getunleash.io/addons/datadog)) + integrate with anything with [webhooks](https://docs.getunleash.io/addons/webhook)
- [Dashboard for managing technical debt](https://docs.getunleash.io/reference/technical-debt) and [stale flags](https://docs.getunleash.io/reference/technical-debt#stale-and-potentially-stale-toggles)
- API-first: _everything_ can be automated. No exceptions.
- [12 official client SDKs](https://docs.getunleash.io/reference/sdks#official-sdks), and ten [community-contributed client SDKs](https://docs.getunleash.io/reference/sdks#community-sdks)
- [12 official client SDKs](https://docs.getunleash.io/reference/sdks#official-sdks), and 10 [community-contributed client SDKs](https://docs.getunleash.io/reference/sdks#community-sdks)
- Run it via Docker with the [official Docker image](https://hub.docker.com/r/unleashorg/unleash-server) or as a pure Node.js application

### Security and performance
Expand Down Expand Up @@ -189,7 +197,7 @@ To connect your application to Unleash you'll need to use a client SDK for your

**Official front-end SDKs:**

The front-end SDKs connects via the [Unleash Proxy](https://docs.getunleash.io/reference/unleash-proxy) in order to ensure privacy, scalability and security.
The front-end SDKs connect via the [Unleash Proxy](https://docs.getunleash.io/reference/unleash-proxy) in order to ensure privacy, scalability and security.

- [Android Proxy SDK](https://docs.getunleash.io/reference/sdks/android-proxy)
- [Flutter Proxy SDK](https://docs.getunleash.io/reference/sdks/flutter)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { type ReactNode, useEffect, useMemo, useState } from 'react';
import { PageContent } from 'component/common/PageContent/PageContent';
import { PageHeader } from 'component/common/PageHeader/PageHeader';
import {
Expand All @@ -13,7 +14,6 @@ import { SearchHighlightProvider } from 'component/common/Table/SearchHighlightC
import { Box, styled, Tab, Tabs, useMediaQuery } from '@mui/material';
import { Link, useSearchParams } from 'react-router-dom';
import { sortTypes } from 'utils/sortTypes';
import { useEffect, useMemo, useState } from 'react';
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
import { Search } from 'component/common/Search/Search';
import { featuresPlaceholder } from 'component/feature/FeatureToggleList/FeatureToggleListTable';
Expand All @@ -34,6 +34,7 @@ export interface IChangeRequestTableProps {
changeRequests: any[];
loading: boolean;
projectId: string;
placeholder?: ReactNode;
}

const defaultSort: SortingRule<string> & {
Expand Down Expand Up @@ -63,6 +64,7 @@ const ConftigurationLinkBox = styled(Box)(({ theme }) => ({

export const ChangeRequestsTabs = ({
changeRequests = [],
placeholder,
loading,
projectId,
}: IChangeRequestTableProps) => {
Expand Down Expand Up @@ -368,7 +370,8 @@ export const ChangeRequestsTabs = ({
}
elseShow={
<TablePlaceholder>
None of the changes were submitted yet.
{placeholder ||
'None of the changes were submitted yet.'}
</TablePlaceholder>
}
/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
import { PageContent } from 'component/common/PageContent/PageContent';
import { PremiumFeature } from 'component/common/PremiumFeature/PremiumFeature';
import { useProjectOverviewNameOrId } from 'hooks/api/getters/useProjectOverview/useProjectOverview';
import { useChangeRequestConfig } from 'hooks/api/getters/useChangeRequestConfig/useChangeRequestConfig';
import { Link } from 'react-router-dom';

export const ProjectChangeRequests = () => {
const projectId = useRequiredPathParam('projectId');
Expand All @@ -15,6 +17,11 @@ export const ProjectChangeRequests = () => {
usePageTitle(`Change requests – ${projectName}`);

const { changeRequests, loading } = useProjectChangeRequests(projectId);
const { data: configData, loading: configLoading } =
useChangeRequestConfig(projectId);
const isConfigured = configData.some(
(config) => config.changeRequestEnabled,
);

if (isOss() || isPro()) {
return (
Expand All @@ -29,6 +36,19 @@ export const ProjectChangeRequests = () => {
changeRequests={changeRequests}
projectId={projectId}
loading={loading}
placeholder={
!configLoading && !isConfigured ? (
<p>
Change requests are not configured for this project.
<br />
<Link
to={`/projects/${projectId}/settings/change-requests`}
>
Configure change requests
</Link>
</p>
) : undefined
}
/>
);
};
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import type { IReleasePlanTemplate } from 'interfaces/releasePlans';
import { useReleasePlansApi } from 'hooks/api/actions/useReleasePlansApi/useReleasePlansApi';
import useToast from 'hooks/useToast';
import { formatUnknownError } from 'utils/formatUnknownError';
import { useReleasePlans } from 'hooks/api/getters/useReleasePlans/useReleasePlans';

const StyledIcon = styled('div')(({ theme }) => ({
width: theme.spacing(4),
Expand Down Expand Up @@ -60,6 +61,7 @@ export const FeatureReleasePlanCard = ({
}: IFeatureReleasePlanCardProps) => {
const Icon = getFeatureStrategyIcon('releasePlanTemplate');
const { trackEvent } = usePlausibleTracker();
const { refetch } = useReleasePlans(projectId, featureId, environmentId);
const { addReleasePlanToFeature } = useReleasePlansApi();
const { setToastApiError, setToastData } = useToast();

Expand All @@ -75,6 +77,7 @@ export const FeatureReleasePlanCard = ({
type: 'success',
title: 'Release plan added',
});
refetch();
} catch (error: unknown) {
setToastApiError(formatUnknownError(error));
}
Expand Down
Loading

0 comments on commit 28ff583

Please sign in to comment.