chore(website): rename twenty-website-new → twenty-website (#20745)
## Summary Follow-up to the Cloudflare/OpenNext migration (#20741). Now that the legacy `twenty-website` package was already removed in #20270, the `-new` suffix on the marketing site package is no longer meaningful. ## What changes - **Directory rename**: `git mv packages/twenty-website-new packages/twenty-website` (1213 files moved, no content change) - **Package + nx config**: `package.json` and `project.json` name fields updated, `sourceRoot` repointed - **Source refs**: `load-local-articles.ts` and `load-local-release-notes.ts` had a hardcoded `'twenty-website-new'` segment in their monorepo-root fallback path; `app/[locale]/releases/page.tsx` had display strings showing where to add content - **External refs**: root `package.json` workspaces, root `CLAUDE.md` / `README.md`, `twenty-sdk` + `create-twenty-app` READMEs, `.vscode/twenty.code-workspace`, `.cursor/rules/changelog-process.mdc`, Crowdin config + the three `website-i18n-*` CI workflows + `ci-website.yaml` - **Docker cleanup**: `packages/twenty-docker/twenty-website-new/Dockerfile` deleted; the two Makefile targets (`prod-website-new-build` / `prod-website-new-run`) that referenced it removed — EKS deploy was retired in the Cloudflare migration - **`yarn.lock`** regenerated against the new workspace path ## What's deliberately not in this PR The dev hostname `website-new.twenty-main.com` in `wrangler.jsonc` stays for now. Migrating it to `website.twenty-main.com` needs coordinated DNS deletion (current CNAME points at the legacy Docusaurus NLB and serves 503s) and removal of the matching legacy `website` Helm chart in `twenty-infra`. Flagged as a separate cleanup. Companion infra PR: https://github.com/twentyhq/twenty-infra/pull/682 (workflow paths + Terraform ECR + docs) ## Test plan - [x] `yarn install --immutable` resolves clean against the new path - [x] `npx nx typecheck twenty-website` passes - [x] `npx nx lint twenty-website` passes - [ ] CI on this PR confirms the same on a fresh checkout - [ ] After merge: trigger `Deploy Website` workflow against `environment=dev` to confirm the renamed working-directory deploys correctly
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
import { theme } from '@/theme';
|
||||
import { styled } from '@linaria/react';
|
||||
|
||||
const DividerOuter = styled.div`
|
||||
margin: ${theme.spacing(10)} 0;
|
||||
width: 100%;
|
||||
|
||||
@media (min-width: ${theme.breakpoints.md}px) {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
`;
|
||||
|
||||
const DividerLine = styled.div`
|
||||
background-color: ${theme.colors.primary.border[20]};
|
||||
height: 1px;
|
||||
width: 100%;
|
||||
|
||||
@media (min-width: ${theme.breakpoints.md}px) {
|
||||
margin-left: calc(132px + ${theme.spacing(10)});
|
||||
width: auto;
|
||||
flex: 1 1 0;
|
||||
}
|
||||
`;
|
||||
|
||||
export function Divider() {
|
||||
return (
|
||||
<DividerOuter aria-hidden>
|
||||
<DividerLine />
|
||||
</DividerOuter>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
import { formatReleaseDisplayDate } from '@/lib/releases/format-release-display-date';
|
||||
import { theme } from '@/theme';
|
||||
import { styled } from '@linaria/react';
|
||||
import { ReleaseMarkdown } from './ReleaseMarkdown';
|
||||
|
||||
const ArticleRow = styled.article`
|
||||
column-gap: ${theme.spacing(6)};
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 1fr);
|
||||
min-width: 0;
|
||||
row-gap: ${theme.spacing(4)};
|
||||
|
||||
@media (min-width: ${theme.breakpoints.md}px) {
|
||||
column-gap: ${theme.spacing(10)};
|
||||
grid-template-columns: minmax(96px, 132px) minmax(0, 1fr);
|
||||
row-gap: 0;
|
||||
}
|
||||
`;
|
||||
|
||||
const MetaColumn = styled.div`
|
||||
align-items: flex-start;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-width: 0;
|
||||
row-gap: ${theme.spacing(1)};
|
||||
|
||||
@media (min-width: ${theme.breakpoints.md}px) {
|
||||
padding-top: ${theme.spacing(2)};
|
||||
}
|
||||
`;
|
||||
|
||||
const Version = styled.span`
|
||||
color: ${theme.colors.primary.text[80]};
|
||||
font-size: ${theme.font.size(5)};
|
||||
font-weight: ${theme.font.weight.medium};
|
||||
line-height: 1.3;
|
||||
`;
|
||||
|
||||
const DateText = styled.span`
|
||||
color: ${theme.colors.primary.text[60]};
|
||||
font-size: ${theme.font.size(3)};
|
||||
white-space: nowrap;
|
||||
`;
|
||||
|
||||
const ContentColumn = styled.div`
|
||||
min-width: 0;
|
||||
`;
|
||||
|
||||
type ReleaseEntryProps = {
|
||||
content: string;
|
||||
date: string;
|
||||
release: string;
|
||||
};
|
||||
|
||||
export function ReleaseEntry({ content, date, release }: ReleaseEntryProps) {
|
||||
const displayDate = formatReleaseDisplayDate(date);
|
||||
|
||||
return (
|
||||
<ArticleRow id={release}>
|
||||
<MetaColumn>
|
||||
<Version>{release}</Version>
|
||||
<DateText>{displayDate || 'TBD'}</DateText>
|
||||
</MetaColumn>
|
||||
<ContentColumn>
|
||||
<ReleaseMarkdown markdown={content} />
|
||||
</ContentColumn>
|
||||
</ArticleRow>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
import { MarkdownProse } from '@/design-system/components/MarkdownProse';
|
||||
|
||||
type ReleaseMarkdownProps = {
|
||||
markdown: string;
|
||||
};
|
||||
|
||||
export function ReleaseMarkdown({ markdown }: ReleaseMarkdownProps) {
|
||||
return <MarkdownProse markdown={markdown} />;
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
import { Container } from '@/design-system/components';
|
||||
import { theme } from '@/theme';
|
||||
import { styled } from '@linaria/react';
|
||||
import type { ReactNode } from 'react';
|
||||
|
||||
const StyledSection = styled.section`
|
||||
background-color: ${theme.colors.primary.background[100]};
|
||||
min-width: 0;
|
||||
width: 100%;
|
||||
`;
|
||||
|
||||
const StyledContainer = styled(Container)`
|
||||
max-width: ${theme.layout.readingWide};
|
||||
padding-bottom: ${theme.spacing(20)};
|
||||
padding-left: ${theme.spacing(4)};
|
||||
padding-right: ${theme.spacing(4)};
|
||||
padding-top: ${theme.spacing(8)};
|
||||
|
||||
@media (min-width: ${theme.breakpoints.md}px) {
|
||||
padding-bottom: ${theme.spacing(28)};
|
||||
padding-left: ${theme.spacing(10)};
|
||||
padding-right: ${theme.spacing(10)};
|
||||
padding-top: ${theme.spacing(10)};
|
||||
}
|
||||
`;
|
||||
|
||||
const EmptyMessage = styled.p`
|
||||
color: ${theme.colors.primary.text[60]};
|
||||
font-size: ${theme.font.size(4)};
|
||||
line-height: 1.65;
|
||||
margin: 0;
|
||||
max-width: 40rem;
|
||||
|
||||
strong {
|
||||
color: ${theme.colors.primary.text[80]};
|
||||
font-family: ${theme.font.family.mono};
|
||||
font-size: ${theme.font.size(3)};
|
||||
font-weight: ${theme.font.weight.medium};
|
||||
}
|
||||
`;
|
||||
|
||||
type RootProps = {
|
||||
children: ReactNode;
|
||||
};
|
||||
|
||||
export function Root({ children }: RootProps) {
|
||||
return (
|
||||
<StyledSection aria-label="Releases">
|
||||
<StyledContainer>{children}</StyledContainer>
|
||||
</StyledSection>
|
||||
);
|
||||
}
|
||||
|
||||
export { EmptyMessage };
|
||||
@@ -0,0 +1,10 @@
|
||||
import { Divider } from './Divider';
|
||||
import { EmptyMessage, Root } from './Root';
|
||||
import { ReleaseEntry } from './ReleaseEntry';
|
||||
|
||||
export const ReleaseNotes = {
|
||||
Divider,
|
||||
EmptyMessage,
|
||||
ReleaseEntry,
|
||||
Root,
|
||||
};
|
||||
@@ -0,0 +1 @@
|
||||
export { ReleaseNotes } from './components';
|
||||
Reference in New Issue
Block a user