This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris-website.git
The following commit(s) were added to refs/heads/master by this push:
new b4c66cfe7e8 [chore](download) withdraw the 4.1.4 binaries; add
version-choice, upgrade-notes and archive links under the quick download card
(#4155)
b4c66cfe7e8 is described below
commit b4c66cfe7e8d7bb9cbd22550cd4476216f886689
Author: Mingyu Chen (Rayner) <[email protected]>
AuthorDate: Sun Sep 20 11:52:30 2026 +0800
[chore](download) withdraw the 4.1.4 binaries; add version-choice,
upgrade-notes and archive links under the quick download card (#4155)
## Summary
Two changes to `/download/`. The 4.1.4 release notes on `/releases/` are
**not** touched.
### 1. Withdraw the Apache Doris 4.1.4 binaries from the download page
- `src/constant/download.data.ts`: drop the 4.1.4 entry from
`ALL_VERSIONS`, so 4.1.4 disappears from the quick download card, the
maintained release picker and the archive picker alike.
`ACTIVE_CORE_BRANCHES` is unchanged; `ACTIVE_HEADS` offers 4.1.3 as
**Latest** again. (The arm64 row had already been withdrawn in #4133.)
- `releasenotes/v4.1/release-4.1.4.md`, its zh-CN twin, both `core.md`
indexes and `sidebarsReleases.json` stay as they are — the release notes
remain published.
To put 4.1.4 back on the download page later, restore the `ALL_VERSIONS`
entry from `git show 3e0d5d9adf:src/constant/download.data.ts`.
### 2. Surface versioning, upgrade notes and the archive under the quick
download card
The quick download card ended in a single 14px grey sentence that linked
*release versioning* and *archived*. The archive link was easy to miss,
and nothing near the download button pointed an upgrading user at the
per-version upgrade notes.
That sentence becomes a three-tile strip on a hairline at the bottom of
the card:
| Tile | Links to |
|---|---|
| **Which version to choose** — What X.Y.Z means, how Latest differs
from Stable, and which binary fits your CPU. |
`/community/release-and-verify/release-versioning` |
| **Upgrade notes** *(new)* — Per-version precautions to read before
moving a cluster to a new release. |
`/docs/dev/admin-manual/cluster-management/upgrade#per-version-upgrade-notes`
|
| **Archived releases** — Older branches receive no further releases of
any kind, security patches included. | `#archive` (the archive section
further down the page) |
Each tile is one link: an icon chip, a bold title with an arrow that
nudges on hover, and a one-line description. The archive tile uses the
archive zone's drained / ended tones instead of brand green, following
the page's existing colour rule. Tiles stack into a single column below
960px.
Files: `src/components/download-form-next/DownloadFormNext.tsx`,
`download-page.scss`.
## Validation
- `node --test
doc-tools/skills/add-release/scripts/validate-release.test.mjs` — 6/6
passed
- `validate-release.mjs --component doris-core --version 4.1.3 --series
4.1 --source-version 4.1.3-rc02 --release-date 2026-07-13 --position
latest`: all download-data checks pass (4.1.3 is the newest 4.1 patch in
`ALL_VERSIONS`, all twelve 4.1.3 artifact URLs reachable). The one
failing check — *v4.1/release-4.1.3 must be the first sidebar item in
its series* — is expected: 4.1.4 deliberately stays first on the release
side.
- Download page rendered with `LANDING_ONLY=true yarn start` at 1280 /
900 / 390px; hover states and the `#archive` in-page scroll checked in
headless Chrome
- `#per-version-upgrade-notes` resolves on the live `docs/dev` upgrade
page (heading *Per-Version Upgrade Notes*)
- Scoped `tsc` on the touched component reports only the two
pre-existing errors (`JSX` namespace, `useRef()`), same as on master
- `git diff --check` — clean. `yarn build` / `yarn typecheck` were not
run.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: morningman <[email protected]>
Co-authored-by: Claude Opus 5 (1M context) <[email protected]>
---
.../download-form-next/DownloadFormNext.tsx | 93 ++++++++++++++-
.../download-form-next/download-page.scss | 127 +++++++++++++++++++--
src/constant/download.data.ts | 28 -----
3 files changed, 207 insertions(+), 41 deletions(-)
diff --git a/src/components/download-form-next/DownloadFormNext.tsx
b/src/components/download-form-next/DownloadFormNext.tsx
index f7d73b36680..2f5e016328d 100644
--- a/src/components/download-form-next/DownloadFormNext.tsx
+++ b/src/components/download-form-next/DownloadFormNext.tsx
@@ -27,6 +27,7 @@ import { LayoutNext } from
'@site/src/components/home-next/LayoutNext';
const KEYS_URL = 'https://downloads.apache.org/doris/KEYS';
const VERIFY_URL = '/community/release-and-verify/release-verify';
const VERSIONING_URL = '/community/release-and-verify/release-versioning';
+const UPGRADE_NOTES_URL =
'/docs/dev/admin-manual/cluster-management/upgrade#per-version-upgrade-notes';
const SECURITY_URL = '/community/security';
const ASF_ARCHIVE_URL = 'https://archive.apache.org/dist/doris/';
@@ -37,6 +38,58 @@ function releaseNotePath(branch: string, version: string) {
return `/releases/v${branch}/release-${version}`;
}
+const GUIDE_ICON = { width: 18, height: 18, viewBox: '0 0 18 18', fill: 'none'
} as const;
+const GUIDE_STROKE = {
+ stroke: 'currentColor',
+ strokeWidth: 1.6,
+ strokeLinecap: 'round',
+ strokeLinejoin: 'round',
+} as const;
+
+/**
+ * What to read next, shown as one strip under the quick download card so the
+ * versioning policy, the per-version upgrade notes and the archive are found
+ * together rather than in a footnote.
+ */
+const GUIDES = [
+ {
+ to: VERSIONING_URL,
+ title: 'Which version to choose',
+ desc: 'What X.Y.Z means, how Latest differs from Stable, and which
binary fits your CPU.',
+ icon: (
+ <svg {...GUIDE_ICON}>
+ <circle cx="5" cy="4" r="1.8" {...GUIDE_STROKE} />
+ <circle cx="5" cy="14" r="1.8" {...GUIDE_STROKE} />
+ <circle cx="13" cy="5" r="1.8" {...GUIDE_STROKE} />
+ <path d="M5 5.8v6.4M13 6.8c0 3.7-8 1.7-8 5.4"
{...GUIDE_STROKE} />
+ </svg>
+ ),
+ },
+ {
+ to: UPGRADE_NOTES_URL,
+ title: 'Upgrade notes',
+ desc: 'Per-version precautions to read before moving a cluster to a
new release.',
+ icon: (
+ <svg {...GUIDE_ICON}>
+ <path d="M9 12.5V3.5M5.5 7 9 3.5 12.5 7" {...GUIDE_STROKE} />
+ <path d="M3.5 11.5v2A1.5 1.5 0 0 0 5 15h8a1.5 1.5 0 0 0
1.5-1.5v-2" {...GUIDE_STROKE} />
+ </svg>
+ ),
+ },
+ {
+ to: '#archive',
+ title: 'Archived releases',
+ desc: 'Older branches receive no further releases of any kind,
security patches included.',
+ archive: true,
+ icon: (
+ <svg {...GUIDE_ICON}>
+ <rect x="2.5" y="3.5" width="13" height="3.5" rx="1"
{...GUIDE_STROKE} />
+ <path d="M4 7v6.5A1.5 1.5 0 0 0 5.5 15h7a1.5 1.5 0 0 0
1.5-1.5V7M7.5 10.5h3" {...GUIDE_STROKE} />
+ </svg>
+ ),
+ },
+];
+
export default function DownloadFormNext(): JSX.Element {
const defaultHead = ACTIVE_HEADS[0];
const [version, setVersion] = useState<string>(defaultHead?.version ?? '');
@@ -298,11 +351,41 @@ export default function DownloadFormNext(): JSX.Element {
</div>
)}
- <p className="download-next__quick-note">
- Apache Doris maintains the two most recent
minor branches, labelled Latest and Stable —
- see <Link to={VERSIONING_URL}>release
versioning</Link>. Releases from older branches
- are <Link to="#archive">archived</Link>.
- </p>
+ <div className="download-next__guides">
+ {GUIDES.map(guide => (
+ <Link
+ key={guide.title}
+ to={guide.to}
+
className={clsx('download-next__guide', { 'is-archive': guide.archive })}
+ >
+ <span
className="download-next__guide-icon" aria-hidden="true">
+ {guide.icon}
+ </span>
+ <span
className="download-next__guide-body">
+ <span
className="download-next__guide-title">
+ {guide.title}
+ <svg
+ aria-hidden="true"
+
xmlns="http://www.w3.org/2000/svg"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ fill="none"
+ >
+ <path
+ d="M2.5 7h9M7.5 3l4
4-4 4"
+ stroke="currentColor"
+ strokeWidth="1.6"
+ strokeLinecap="round"
+ strokeLinejoin="round"
+ />
+ </svg>
+ </span>
+ <span
className="download-next__guide-desc">{guide.desc}</span>
+ </span>
+ </Link>
+ ))}
+ </div>
</div>
</div>
</section>
diff --git a/src/components/download-form-next/download-page.scss
b/src/components/download-form-next/download-page.scss
index 3f71199ecd6..197e7af32ba 100644
--- a/src/components/download-form-next/download-page.scss
+++ b/src/components/download-form-next/download-page.scss
@@ -401,16 +401,103 @@
font-size: 13px;
}
-.download-next__quick-note {
- margin: 24px 0 0;
- text-align: center;
- color: var(--dl-text-subtle);
- font-size: 14px;
- line-height: 1.6;
+// What to read next. Three equal tiles on one hairline, so the versioning
+// policy, the upgrade notes and the archive sit beside the download button
+// instead of in a footnote under it.
+.download-next__guides {
+ display: grid;
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ gap: 28px 36px;
+ margin-top: 32px;
+ padding-top: 28px;
+ border-top: 1px solid var(--dl-border);
+}
- a {
+.download-next__guide {
+ display: flex;
+ align-items: flex-start;
+ gap: 14px;
+ min-width: 0;
+ color: var(--dl-text);
+ text-decoration: none !important;
+
+ &:hover {
+ color: var(--dl-text);
+ }
+
+ &:hover .download-next__guide-title {
color: var(--ifm-color-primary);
- text-decoration: underline;
+ }
+
+ &:hover .download-next__guide-title svg {
+ transform: translateX(3px);
+ }
+
+ &:hover .download-next__guide-icon {
+ background: var(--ifm-color-primary);
+ color: #ffffff;
+ }
+}
+
+.download-next__guide-icon {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ flex-shrink: 0;
+ width: 38px;
+ height: 38px;
+ border-radius: 8px;
+ background: var(--brand-primary-soft);
+ color: var(--brand-primary-darker);
+ transition:
+ background 0.18s ease,
+ color 0.18s ease;
+}
+
+.download-next__guide-body {
+ display: flex;
+ flex-direction: column;
+ gap: 4px;
+ min-width: 0;
+}
+
+.download-next__guide-title {
+ display: inline-flex;
+ align-items: center;
+ gap: 6px;
+ font-size: 15px;
+ font-weight: 600;
+ line-height: 1.4;
+ color: var(--dl-ink);
+ transition: color 0.18s ease;
+
+ svg {
+ flex-shrink: 0;
+ transition: transform 0.18s ease;
+ }
+}
+
+.download-next__guide-desc {
+ font-size: 13.5px;
+ line-height: 1.55;
+ color: var(--dl-text-muted);
+}
+
+// The archive tile points past the cut where the brand green stops, so it
+// carries the drained tones of that zone rather than the green of this one.
+.download-next__guide.is-archive {
+ .download-next__guide-icon {
+ background: var(--dl-drained-bg);
+ color: var(--dl-drained);
+ }
+
+ &:hover .download-next__guide-title {
+ color: var(--dl-ended);
+ }
+
+ &:hover .download-next__guide-icon {
+ background: var(--dl-ended);
+ color: #ffffff;
}
}
@@ -855,6 +942,11 @@
margin-bottom: 0;
}
+ .download-next__guides {
+ grid-template-columns: 1fr;
+ gap: 20px;
+ }
+
.download-next__archive {
margin-top: 56px;
padding: 36px 0 44px;
@@ -941,6 +1033,25 @@
margin: 6px 0 0;
}
+ .download-next__guides {
+ margin-top: 24px;
+ padding-top: 22px;
+ gap: 18px;
+ }
+
+ .download-next__guide-icon {
+ width: 34px;
+ height: 34px;
+ }
+
+ .download-next__guide-title {
+ font-size: 14.5px;
+ }
+
+ .download-next__guide-desc {
+ font-size: 13px;
+ }
+
.download-next__section {
padding: 48px 0 16px;
}
diff --git a/src/constant/download.data.ts b/src/constant/download.data.ts
index a7229599016..1797a110e9c 100644
--- a/src/constant/download.data.ts
+++ b/src/constant/download.data.ts
@@ -90,34 +90,6 @@ export const ALL_VERSIONS: AllVersionOption[] = [
label: '4.1',
value: '4.1',
children: [
- {
- label: '4.1.4',
- value: '4.1.4',
- majorVersion: '4.1',
- items: [
- {
- label: CPUEnum.X64,
- value: CPUEnum.X64,
- gz: `${ORIGIN}apache-doris-4.1.4-bin-x64.tar.gz`,
- asc: `${ORIGIN}apache-doris-4.1.4-bin-x64.tar.gz.asc`,
- sha512:
`${ORIGIN}apache-doris-4.1.4-bin-x64.tar.gz.sha512`,
- source:
'https://dist.apache.org/repos/dist/release/doris/4.1/4.1.4/',
- version: '4.1.4-rc04',
- },
- {
- label: CPUEnum.X64NoAvx2,
- value: CPUEnum.X64NoAvx2,
- gz:
`${ORIGIN}apache-doris-4.1.4-bin-x64-noavx2.tar.gz`,
- asc:
`${ORIGIN}apache-doris-4.1.4-bin-x64-noavx2.tar.gz.asc`,
- sha512:
`${ORIGIN}apache-doris-4.1.4-bin-x64-noavx2.tar.gz.sha512`,
- source:
'https://dist.apache.org/repos/dist/release/doris/4.1/4.1.4/',
- version: '4.1.4-rc04',
- },
- // The 4.1.4 arm64 binary was withdrawn because the build
is
- // broken; add the CPUEnum.ARM64 entry back once a fixed
- // build is published.
- ],
- },
{
label: '4.1.3',
value: '4.1.3',
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]