with one click
update-version
// Update Dockerman version and changelog. Use when releasing a new version with changelog content in markdown format.
// Update Dockerman version and changelog. Use when releasing a new version with changelog content in markdown format.
| name | update-version |
| description | Update Dockerman version and changelog. Use when releasing a new version with changelog content in markdown format. |
Updates the Dockerman website with a new version release.
Single sources of truth:
- Version lives in
apps/landing/src/app/siteConfig.tslatestVersion. All components (Navbar,Hero,SnapshotHero) and thedownloads.tsVERSIONconstant import from it; localehero.eyebrow/hero.metaVersionuse the{{version}}placeholder.- Release date lives in
apps/landing/src/config/downloads.tsRELEASE_DATE(ISO). It flows to the latesthistory[]entry, the Download page hero, and HerometaVersionviaformatDate(downloadsConfig.latest.releaseDate, locale)from@/lib/format+ a{{date}}placeholder.Do not reintroduce hardcoded version or date strings in those files.
The historical / per-release locations (changelog MDX entries, README badges, locale tagline highlight phrases, the
release-x-y-zslug) still need per-release edits, because they describe a specific release rather than "the latest version".
User provides changelog content in markdown format:
## vX.Y.Z
### โจ Features
- ๐ **Feature Name**: Description of the feature
### ๐จ Improvements
- โก **Improvement Name**: Description
Parse vX.Y.Z from the first ## vX.Y.Z heading. Use today's date as the release date.
Prepare the date in these formats โ you'll need them in different files:
| Format | Where used | Example (Apr 26, 2026) |
|---|---|---|
ISO YYYY-MM-DD | downloads.ts RELEASE_DATE (single source) | 2026-04-26 |
en Mon DD, YYYY | en changelog, README badge | Apr 26, 2026 |
zh YYYY ๅนด M ๆ D ๆฅ | zh changelog | 2026 ๅนด 4 ๆ 26 ๆฅ |
ja YYYY ๅนด M ๆ D ๆฅ | ja changelog | 2026 ๅนด 4 ๆ 26 ๆฅ |
es D de mes de YYYY | es changelog | 26 de abril de 2026 |
| URL-encoded en | README release-date badge URL | Apr%2026%2C%202026 |
Hero
metaVersionno longer needs a per-locale date string โ it interpolates{{date}}, withformatDate()deriving the localized date from the ISORELEASE_DATEautomatically.
apps/landing/src/app/siteConfig.ts (single source of truth for version)latestVersion: 'X.Y.Z', // no 'v' prefix
This automatically propagates to:
Navbar.tsx brand badge (v{siteConfig.latestVersion})Hero.tsx terminal animation line + eyebrow (interpolated via {{version}}) + metaVersion (interpolated via {{version}} and {{date}})SnapshotHero.tsx metaBuild fielddownloads.ts VERSION constant + latest history[] entryNever edit those files for the version literal โ they already read siteConfig.latestVersion or {{version}}.
apps/landing/src/config/downloads.tsTwo edits per release:
RELEASE_DATE to the new ISO date.history[] (keep prior entries):history: [
{ version: VERSION, date: RELEASE_DATE, summarySlug: 'release-x-y-z' },
// ...previous entries (literal versions/dates โ these are historical)
]
The latest history entry uses the VERSION and RELEASE_DATE constants directly. Older entries remain literal.
packages/shared/src/locales/Update all four (en.json, zh.json, ja.json, es.json). Two keys per file:
hero.eyebrow โ keep the v{{version}} โ prefix; rewrite the highlight phrases for the new release (translated per locale).
Pattern: "v{{version}} โ <highlight 1>, <highlight 2>, <highlight 3>"
hero.metaVersion โ pure template "v{{version}} ยท {{date}}". Do not edit per release โ both placeholders are filled at runtime from siteConfig.latestVersion and formatDate(downloadsConfig.latest.releaseDate, locale).
The {{version}} placeholder is filled with siteConfig.latestVersion and {{date}} with the localized release date, so don't write either literal here.
Per-locale changelog files (translate body for zh/ja/es):
apps/landing/src/content/changelog/en/page.mdxapps/landing/src/content/changelog/zh/page.mdxapps/landing/src/content/changelog/ja/page.mdxapps/landing/src/content/changelog/es/page.mdx<ChangelogEntry version="vX.Y.Z" date="<localized date>">โฆ</ChangelogEntry>**text:** patterns with <Bold>text:</Bold><ChangelogEntry version="vX.Y.Z" date="<localized date>">
## Short Release Title
Brief description of what this release introduces.
### โจ Features
- <Bold>Feature Name:</Bold> Description of the feature
### ๐ง Improvements
- <Bold>Improvement Name:</Bold> Description
### ๐ Bug Fixes
- <Bold>Fix Name:</Bold> Description
</ChangelogEntry>
The version literal does appear in <ChangelogEntry version="vX.Y.Z"> โ that's intentional, because each entry is a historical record of a specific release.
Update all four READMEs: README.md (en), README.zh-CN.md, README.ja.md, README.es.md.
Update version + release-date badges:
[](https://github.com/dockerman/dockerman/releases/tag/vX.Y.Z)
[](https://github.com/dockerman/dockerman/releases/tag/vX.Y.Z)
URL encoding: spaces โ %20, commas โ %2C.
Add new features to the Features section in all four READMEs:
| File | Per-release? | What changes |
|---|---|---|
apps/landing/src/app/siteConfig.ts | โ | latestVersion (single source of truth โ propagates to all UI) |
apps/landing/src/config/downloads.ts | โ | RELEASE_DATE + prepend history[] entry (uses VERSION/RELEASE_DATE consts) |
packages/shared/src/locales/{en,zh,ja,es}.json | โ | hero.eyebrow only (rewrite tagline highlights). hero.metaVersion is a pure template โ don't touch. |
apps/landing/src/content/changelog/{en,zh,ja,es}/page.mdx | โ | Prepend new <ChangelogEntry> (ร4 locales, body translated) |
README.md / README.zh-CN.md / README.ja.md / README.es.md | โ | Version + release-date badges + Features section |
apps/landing/src/components/{shell/Navbar,landing/Hero,snapshot/SnapshotHero}.tsx | โ | Already read siteConfig.latestVersion โ never touch for a version bump |
### โจ Features โ New functionality### ๐ง Improvements / ### ๐จ Improvements โ Enhancements (both emojis seen historically)### ๐ Bug Fixes โ Issue resolutions### โก Performance โ Performance optimizations### ๐ Internationalization โ i18n updates<ChangelogImage
src="/screenshots/X.Y.Z/image.png"
alt="Description"
/>
siteConfig.ts latestVersion updated (without v prefix)vX.Y.Z strings introduced in Navbar.tsx, Hero.tsx, SnapshotHero.tsx, or locale JSON filesdownloads.tsRELEASE_DATE updated (ISO format)history[] entry prepended (using VERSION / RELEASE_DATE consts), prior entries kepthero.eyebrow highlights rewritten (translated, v{{version}} placeholder kept)hero.metaVersion left untouched (it's "v{{version}} ยท {{date}}" โ both interpolated)<ChangelogEntry> prepended to each locale (body translated)<Bold> and <ChangelogEntry> tags closedgrep "v?<previous-version>" returns only legitimate historical references: changelog entries for that version, "Added in vโฆ" doc lines, downloads.ts history array, design specs in docs/superpowers/, and bun.lock (unrelated packages).grep "v?<new-version>" (literal) outside siteConfig.ts and the new changelog/README entries should return nothing โ if it does, you reintroduced a hardcoded version somewhere.