mirror of
https://github.com/twentyhq/twenty
synced 2026-04-21 13:37:22 +00:00
## Summary - **Merge queue optimization**: Created a dedicated `ci-merge-queue.yaml` workflow that only runs Playwright E2E tests on `ubuntu-latest-8-cores`. Removed `merge_group` trigger from all 7 existing CI workflows (front, server, shared, website, sdk, zapier, docker-compose). The merge queue goes from ~30+ parallel jobs to a single focused E2E job. - **Label-based merge queue simulation**: Added `run-merge-queue` label support so developers can trigger the exact merge queue E2E pipeline on any open PR before it enters the queue. - **Prettier in lint**: Chained `prettier --check` into `lint` and `prettier --write` into `lint --configuration=fix` across `nx.json` defaults, `twenty-front`, and `twenty-server`. Prettier formatting errors are now caught by `lint` and fixed by `lint:fix` / `lint:diff-with-main --configuration=fix`. ## After merge (manual repo settings) Update GitHub branch protection required status checks: 1. Remove old per-workflow merge queue checks (`ci-front-status-check`, `ci-e2e-status-check`, `ci-server-status-check`, etc.) 2. Add `ci-merge-queue-status-check` as the required check for the merge queue
56 lines
1.6 KiB
TypeScript
56 lines
1.6 KiB
TypeScript
import {
|
|
StyledSettingsCardContent,
|
|
StyledSettingsCardDescription,
|
|
StyledSettingsCardIcon,
|
|
StyledSettingsCardTextContainer,
|
|
StyledSettingsCardTitle,
|
|
} from '@/settings/components/SettingsOptions/SettingsCardContentBase';
|
|
import { SettingsOptionIconCustomizer } from '@/settings/components/SettingsOptions/SettingsOptionIconCustomizer';
|
|
import { styled } from '@linaria/react';
|
|
import {
|
|
type IconComponent,
|
|
OverflowingTextWithTooltip,
|
|
} from 'twenty-ui/display';
|
|
import { isDefined } from 'twenty-shared/utils';
|
|
|
|
type SettingsOptionCardContentButtonProps = {
|
|
Icon?: IconComponent;
|
|
title: React.ReactNode;
|
|
description?: string;
|
|
disabled?: boolean;
|
|
Button?: React.ReactNode;
|
|
};
|
|
|
|
const StyledButtonContainer = styled.div`
|
|
flex-shrink: 0;
|
|
margin-left: auto;
|
|
`;
|
|
|
|
export const SettingsOptionCardContentButton = ({
|
|
Icon,
|
|
title,
|
|
description,
|
|
disabled = false,
|
|
Button,
|
|
}: SettingsOptionCardContentButtonProps) => {
|
|
return (
|
|
<StyledSettingsCardContent disabled={disabled}>
|
|
{Icon && (
|
|
<StyledSettingsCardIcon>
|
|
<SettingsOptionIconCustomizer Icon={Icon} />
|
|
</StyledSettingsCardIcon>
|
|
)}
|
|
<StyledSettingsCardTextContainer>
|
|
<StyledSettingsCardTitle>{title}</StyledSettingsCardTitle>
|
|
{description && (
|
|
<StyledSettingsCardDescription>
|
|
<OverflowingTextWithTooltip text={description} />
|
|
</StyledSettingsCardDescription>
|
|
)}
|
|
</StyledSettingsCardTextContainer>
|
|
{isDefined(Button) && (
|
|
<StyledButtonContainer>{Button}</StyledButtonContainer>
|
|
)}
|
|
</StyledSettingsCardContent>
|
|
);
|
|
};
|