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
This commit is contained in:
Baptiste Devessier
2025-03-18 12:45:51 +01:00
committed by GitHub
parent 3d34f477f9
commit f5195433f3
4 changed files with 33 additions and 3 deletions

View File

@ -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')}`;
},
}),
},
});

View File

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 72 KiB

View File

Before

Width:  |  Height:  |  Size: 158 KiB

After

Width:  |  Height:  |  Size: 158 KiB

View File

@ -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)
![](/images/releases/0.43.0/email-privacy.png)