From f5195433f30f06724cc26dd32a8aaf2852718329 Mon Sep 17 00:00:00 2001 From: Baptiste Devessier Date: Tue, 18 Mar 2025 12:45:51 +0100 Subject: [PATCH] Configure Keystatic for release images (#10889) - Add validation for the `release` field of the releases collection - The `release` must follow semver format - The `slug` matches the `release` by default and must follow semver format, too - Order the releases properly - `0.10.0` appears before `0.3.0`; I made the comparison against `0000.0010.0000` and `0000.0003.0000` - Set up images for release's contents - Refactor the release notes of the version `0.43.0` to be editable in Keystatic; it will serve as an example ## Demo https://github.com/user-attachments/assets/d82851e9-11e7-4e27-b645-cf86a93d77bf --- packages/twenty-website/keystatic.config.ts | 32 +++++++++++++++++- .../email-privacy.png} | Bin .../search-upgrade.png} | Bin .../src/content/releases/0.43.0.mdx | 4 +-- 4 files changed, 33 insertions(+), 3 deletions(-) rename packages/twenty-website/public/images/releases/{0.43/0.43-email-privacy.png => 0.43.0/email-privacy.png} (100%) rename packages/twenty-website/public/images/releases/{0.43/0.43-search-upgrade.png => 0.43.0/search-upgrade.png} (100%) diff --git a/packages/twenty-website/keystatic.config.ts b/packages/twenty-website/keystatic.config.ts index 1b01a0f34..5ada0e204 100644 --- a/packages/twenty-website/keystatic.config.ts +++ b/packages/twenty-website/keystatic.config.ts @@ -38,13 +38,43 @@ export default config({ path: 'src/content/releases/*', format: { contentField: 'content' }, schema: { - release: fields.slug({ name: { label: 'Release' } }), + release: fields.slug({ + name: { + label: 'Release', + validation: { + pattern: { + regex: /^\d+\.\d+\.\d+$/, + message: 'The release must be in the format major.minor.patch', + }, + }, + }, + slug: { + generate: (name) => name, + validation: { + pattern: { + regex: /^\d+\.\d+\.\d+$/, + message: 'The release must be in the format major.minor.patch', + }, + }, + }, + }), // TODO: Define the date with a normalized format Date: fields.text({ label: 'Date' }), content: fields.mdx({ label: 'Content', + options: { + image: { + directory: 'public/images/releases', + publicPath: '/images/releases/', + }, + }, }), }, + parseSlugForSort: (slug) => { + const [major, minor, patch] = slug.split('.'); + + return `${major.padStart(4, '0')}.${minor.padStart(4, '0')}.${patch.padStart(4, '0')}`; + }, }), }, }); diff --git a/packages/twenty-website/public/images/releases/0.43/0.43-email-privacy.png b/packages/twenty-website/public/images/releases/0.43.0/email-privacy.png similarity index 100% rename from packages/twenty-website/public/images/releases/0.43/0.43-email-privacy.png rename to packages/twenty-website/public/images/releases/0.43.0/email-privacy.png diff --git a/packages/twenty-website/public/images/releases/0.43/0.43-search-upgrade.png b/packages/twenty-website/public/images/releases/0.43.0/search-upgrade.png similarity index 100% rename from packages/twenty-website/public/images/releases/0.43/0.43-search-upgrade.png rename to packages/twenty-website/public/images/releases/0.43.0/search-upgrade.png diff --git a/packages/twenty-website/src/content/releases/0.43.0.mdx b/packages/twenty-website/src/content/releases/0.43.0.mdx index 776d8386c..ca98a6453 100644 --- a/packages/twenty-website/src/content/releases/0.43.0.mdx +++ b/packages/twenty-website/src/content/releases/0.43.0.mdx @@ -7,10 +7,10 @@ Date: March 4th 2025 The search feature now includes ranking scores. This helps you find the most relevant results faster. -![](/images/releases/0.43/0.43-search-upgrade.png) +![](/images/releases/0.43.0/search-upgrade.png) # Internal Email Privacy Internal team emails won't sync, protecting privacy by preventing access to internal discussions. -![](/images/releases/0.43/0.43-email-privacy.png) \ No newline at end of file +![](/images/releases/0.43.0/email-privacy.png) \ No newline at end of file