Remove localization feature flag and improve CI workflow (#10208)
This commit is contained in:
50
.github/workflows/i18n-compile.yaml
vendored
50
.github/workflows/i18n-compile.yaml
vendored
@ -1,50 +0,0 @@
|
|||||||
name: 'Compile translations'
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: ['i18n']
|
|
||||||
pull_request:
|
|
||||||
branches: ['i18n']
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
compile_translations:
|
|
||||||
name: Compile translations
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
pull-requests: write
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
token: ${{ github.token }}
|
|
||||||
ref: i18n
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
uses: ./.github/workflows/actions/yarn-install
|
|
||||||
|
|
||||||
- name: Build twenty-shared
|
|
||||||
run: npx nx build twenty-shared
|
|
||||||
|
|
||||||
- name: Compile translations
|
|
||||||
id: compile_translations
|
|
||||||
run: |
|
|
||||||
npx nx run twenty-server:lingui:compile
|
|
||||||
npx nx run twenty-emails:lingui:compile
|
|
||||||
npx nx run twenty-front:lingui:compile
|
|
||||||
|
|
||||||
- name: Check and commit compiled files
|
|
||||||
run: |
|
|
||||||
git config --global user.name 'github-actions'
|
|
||||||
git config --global user.email 'github-actions@twenty.com'
|
|
||||||
git add .
|
|
||||||
if ! git diff --staged --quiet --exit-code; then
|
|
||||||
git commit -m "chore: compile translations [skip ci]"
|
|
||||||
git push origin HEAD:i18n
|
|
||||||
fi
|
|
||||||
31
.github/workflows/i18n-pull.yaml
vendored
31
.github/workflows/i18n-pull.yaml
vendored
@ -80,8 +80,37 @@ jobs:
|
|||||||
github_base_url: 'github.com'
|
github_base_url: 'github.com'
|
||||||
github_user_name: 'Crowdin Bot'
|
github_user_name: 'Crowdin Bot'
|
||||||
github_user_email: 'support+bot@crowdin.com'
|
github_user_email: 'support+bot@crowdin.com'
|
||||||
|
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
GITHUB_TOKEN: ${{ github.token }}
|
||||||
CROWDIN_PROJECT_ID: '1'
|
CROWDIN_PROJECT_ID: '1'
|
||||||
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
||||||
|
|
||||||
|
- name: Compile translations
|
||||||
|
if: inputs.force_pull || steps.compile_translations.outcome == 'failure'
|
||||||
|
run: |
|
||||||
|
npx nx run twenty-server:lingui:compile
|
||||||
|
npx nx run twenty-emails:lingui:compile
|
||||||
|
npx nx run twenty-front:lingui:compile
|
||||||
|
|
||||||
|
- name: Check and commit compiled files
|
||||||
|
id: check_changes
|
||||||
|
run: |
|
||||||
|
git config --global user.name 'github-actions'
|
||||||
|
git config --global user.email 'github-actions@twenty.com'
|
||||||
|
git add .
|
||||||
|
if ! git diff --staged --quiet --exit-code; then
|
||||||
|
git commit -m "chore: compile translations [skip ci]"
|
||||||
|
echo "changes_detected=true" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "changes_detected=false" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Push changes
|
||||||
|
if: steps.check_changes.outputs.changes_detected == 'true'
|
||||||
|
run: git push origin HEAD:i18n
|
||||||
|
|
||||||
|
- name: Create pull request
|
||||||
|
if: steps.check_changes.outputs.changes_detected == 'true'
|
||||||
|
run: gh pr create -B main -H i18n --title 'i18n - translations' --body 'Created by Github action' || true
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|||||||
7
.github/workflows/i18n-push.yaml
vendored
7
.github/workflows/i18n-push.yaml
vendored
@ -28,6 +28,7 @@ jobs:
|
|||||||
if ! git ls-remote --heads origin i18n | grep i18n; then
|
if ! git ls-remote --heads origin i18n | grep i18n; then
|
||||||
git checkout -b i18n
|
git checkout -b i18n
|
||||||
else
|
else
|
||||||
|
git fetch origin i18n
|
||||||
git checkout i18n
|
git checkout i18n
|
||||||
git merge origin/main
|
git merge origin/main
|
||||||
fi
|
fi
|
||||||
@ -44,6 +45,12 @@ jobs:
|
|||||||
npx nx run twenty-emails:lingui:extract
|
npx nx run twenty-emails:lingui:extract
|
||||||
npx nx run twenty-front:lingui:extract
|
npx nx run twenty-front:lingui:extract
|
||||||
|
|
||||||
|
- name: Compile translations
|
||||||
|
run: |
|
||||||
|
npx nx run twenty-server:lingui:compile
|
||||||
|
npx nx run twenty-emails:lingui:compile
|
||||||
|
npx nx run twenty-front:lingui:compile
|
||||||
|
|
||||||
- name: Check and commit any files created
|
- name: Check and commit any files created
|
||||||
id: check_changes
|
id: check_changes
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@ -528,7 +528,6 @@ export enum FeatureFlagKey {
|
|||||||
IsCustomDomainEnabled = 'IsCustomDomainEnabled',
|
IsCustomDomainEnabled = 'IsCustomDomainEnabled',
|
||||||
IsEventObjectEnabled = 'IsEventObjectEnabled',
|
IsEventObjectEnabled = 'IsEventObjectEnabled',
|
||||||
IsJsonFilterEnabled = 'IsJsonFilterEnabled',
|
IsJsonFilterEnabled = 'IsJsonFilterEnabled',
|
||||||
IsLocalizationEnabled = 'IsLocalizationEnabled',
|
|
||||||
IsNewRelationEnabled = 'IsNewRelationEnabled',
|
IsNewRelationEnabled = 'IsNewRelationEnabled',
|
||||||
IsPermissionsEnabled = 'IsPermissionsEnabled',
|
IsPermissionsEnabled = 'IsPermissionsEnabled',
|
||||||
IsPostgreSQLIntegrationEnabled = 'IsPostgreSQLIntegrationEnabled',
|
IsPostgreSQLIntegrationEnabled = 'IsPostgreSQLIntegrationEnabled',
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { gql } from '@apollo/client';
|
|
||||||
import * as Apollo from '@apollo/client';
|
import * as Apollo from '@apollo/client';
|
||||||
|
import { gql } from '@apollo/client';
|
||||||
export type Maybe<T> = T | null;
|
export type Maybe<T> = T | null;
|
||||||
export type InputMaybe<T> = Maybe<T>;
|
export type InputMaybe<T> = Maybe<T>;
|
||||||
export type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };
|
export type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };
|
||||||
@ -460,7 +460,6 @@ export enum FeatureFlagKey {
|
|||||||
IsCustomDomainEnabled = 'IsCustomDomainEnabled',
|
IsCustomDomainEnabled = 'IsCustomDomainEnabled',
|
||||||
IsEventObjectEnabled = 'IsEventObjectEnabled',
|
IsEventObjectEnabled = 'IsEventObjectEnabled',
|
||||||
IsJsonFilterEnabled = 'IsJsonFilterEnabled',
|
IsJsonFilterEnabled = 'IsJsonFilterEnabled',
|
||||||
IsLocalizationEnabled = 'IsLocalizationEnabled',
|
|
||||||
IsNewRelationEnabled = 'IsNewRelationEnabled',
|
IsNewRelationEnabled = 'IsNewRelationEnabled',
|
||||||
IsPermissionsEnabled = 'IsPermissionsEnabled',
|
IsPermissionsEnabled = 'IsPermissionsEnabled',
|
||||||
IsPostgreSQLIntegrationEnabled = 'IsPostgreSQLIntegrationEnabled',
|
IsPostgreSQLIntegrationEnabled = 'IsPostgreSQLIntegrationEnabled',
|
||||||
|
|||||||
@ -4,10 +4,8 @@ import { SettingsPageContainer } from '@/settings/components/SettingsPageContain
|
|||||||
import { SettingsPath } from '@/types/SettingsPath';
|
import { SettingsPath } from '@/types/SettingsPath';
|
||||||
import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer';
|
import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer';
|
||||||
import { useColorScheme } from '@/ui/theme/hooks/useColorScheme';
|
import { useColorScheme } from '@/ui/theme/hooks/useColorScheme';
|
||||||
import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
|
|
||||||
|
|
||||||
import { Trans, useLingui } from '@lingui/react/macro';
|
import { Trans, useLingui } from '@lingui/react/macro';
|
||||||
import { FeatureFlagKey } from '~/generated/graphql';
|
|
||||||
import { DateTimeSettings } from '~/pages/settings/profile/appearance/components/DateTimeSettings';
|
import { DateTimeSettings } from '~/pages/settings/profile/appearance/components/DateTimeSettings';
|
||||||
import { LocalePicker } from '~/pages/settings/profile/appearance/components/LocalePicker';
|
import { LocalePicker } from '~/pages/settings/profile/appearance/components/LocalePicker';
|
||||||
import { getSettingsPath } from '~/utils/navigation/getSettingsPath';
|
import { getSettingsPath } from '~/utils/navigation/getSettingsPath';
|
||||||
@ -15,10 +13,6 @@ import { getSettingsPath } from '~/utils/navigation/getSettingsPath';
|
|||||||
export const SettingsExperience = () => {
|
export const SettingsExperience = () => {
|
||||||
const { colorScheme, setColorScheme } = useColorScheme();
|
const { colorScheme, setColorScheme } = useColorScheme();
|
||||||
|
|
||||||
const isLocalizationEnabled = useIsFeatureEnabled(
|
|
||||||
FeatureFlagKey.IsLocalizationEnabled,
|
|
||||||
);
|
|
||||||
|
|
||||||
const { t } = useLingui();
|
const { t } = useLingui();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -51,15 +45,13 @@ export const SettingsExperience = () => {
|
|||||||
<DateTimeSettings />
|
<DateTimeSettings />
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
{isLocalizationEnabled && (
|
<Section>
|
||||||
<Section>
|
<H2Title
|
||||||
<H2Title
|
title={t`Language`}
|
||||||
title={t`Language`}
|
description={t`Select your preferred language`}
|
||||||
description={t`Select your preferred language`}
|
/>
|
||||||
/>
|
<LocalePicker />
|
||||||
<LocalePicker />
|
</Section>
|
||||||
</Section>
|
|
||||||
)}
|
|
||||||
</SettingsPageContainer>
|
</SettingsPageContainer>
|
||||||
</SubMenuTopBarContainer>
|
</SubMenuTopBarContainer>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -70,11 +70,6 @@ export const seedFeatureFlags = async (
|
|||||||
workspaceId: workspaceId,
|
workspaceId: workspaceId,
|
||||||
value: true,
|
value: true,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
key: FeatureFlagKey.IsLocalizationEnabled,
|
|
||||||
workspaceId: workspaceId,
|
|
||||||
value: true,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
key: FeatureFlagKey.IsRichTextV2Enabled,
|
key: FeatureFlagKey.IsRichTextV2Enabled,
|
||||||
workspaceId: workspaceId,
|
workspaceId: workspaceId,
|
||||||
|
|||||||
@ -7,23 +7,11 @@ type FeatureFlagMetadata = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export type PublicFeatureFlag = {
|
export type PublicFeatureFlag = {
|
||||||
key: Extract<
|
key: Extract<FeatureFlagKey, FeatureFlagKey.IsWorkflowEnabled>;
|
||||||
FeatureFlagKey,
|
|
||||||
FeatureFlagKey.IsLocalizationEnabled | FeatureFlagKey.IsWorkflowEnabled
|
|
||||||
>;
|
|
||||||
metadata: FeatureFlagMetadata;
|
metadata: FeatureFlagMetadata;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const PUBLIC_FEATURE_FLAGS: PublicFeatureFlag[] = [
|
export const PUBLIC_FEATURE_FLAGS: PublicFeatureFlag[] = [
|
||||||
{
|
|
||||||
key: FeatureFlagKey.IsLocalizationEnabled,
|
|
||||||
metadata: {
|
|
||||||
label: 'Localization',
|
|
||||||
description:
|
|
||||||
"Enable this and go to Settings > Experience to change your account's language. You can also help us improve the translations on Github.",
|
|
||||||
imagePath: 'https://twenty.com/images/releases/labs/translation.png',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
key: FeatureFlagKey.IsWorkflowEnabled,
|
key: FeatureFlagKey.IsWorkflowEnabled,
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -11,7 +11,6 @@ export enum FeatureFlagKey {
|
|||||||
IsCommandMenuV2Enabled = 'IS_COMMAND_MENU_V2_ENABLED',
|
IsCommandMenuV2Enabled = 'IS_COMMAND_MENU_V2_ENABLED',
|
||||||
IsJsonFilterEnabled = 'IS_JSON_FILTER_ENABLED',
|
IsJsonFilterEnabled = 'IS_JSON_FILTER_ENABLED',
|
||||||
IsCustomDomainEnabled = 'IS_CUSTOM_DOMAIN_ENABLED',
|
IsCustomDomainEnabled = 'IS_CUSTOM_DOMAIN_ENABLED',
|
||||||
IsLocalizationEnabled = 'IS_LOCALIZATION_ENABLED',
|
|
||||||
IsBillingPlansEnabled = 'IS_BILLING_PLANS_ENABLED',
|
IsBillingPlansEnabled = 'IS_BILLING_PLANS_ENABLED',
|
||||||
IsRichTextV2Enabled = 'IS_RICH_TEXT_V2_ENABLED',
|
IsRichTextV2Enabled = 'IS_RICH_TEXT_V2_ENABLED',
|
||||||
IsNewRelationEnabled = 'IS_NEW_RELATION_ENABLED',
|
IsNewRelationEnabled = 'IS_NEW_RELATION_ENABLED',
|
||||||
|
|||||||
Reference in New Issue
Block a user