Skip to content

feat: migrate documentation site to OINK 1.0 - #466

Open
imbajin wants to merge 8 commits into
masterfrom
cx-oink-1-migration
Open

feat: migrate documentation site to OINK 1.0#466
imbajin wants to merge 8 commits into
masterfrom
cx-oink-1-migration

Conversation

@imbajin

@imbajin imbajin commented Aug 30, 2026

Copy link
Copy Markdown
Member

Before → after

Before After
Docsy shell tied to Hugo 0.95 and Node/PostCSS OINK v1.0.0 pinned with Hugo Extended 0.165.0 and Go 1.27
One mutable site build One central shell rendering latest, 1.7, and 1.5 from exact resolved commits
Version history was not published as an isolated contract Latest stays at /; archived Docs/Download live below /versions/1.7/ and /versions/1.5/
Local production-shape build only Independent production and ASF-staging builds, strict artifact validation, then collision-safe aggregation
flowchart LR
  A[prepare manifest] --> B[resolve exact SHAs]
  B --> C[3 versions × 2 origins]
  C --> D[strict build + artifact validator]
  D --> E[required deploy aggregate]
  E --> F[production artifact]
  E --> G[ASF staging artifact]
  F --> H[asf-site only after reviewed master push]
Loading

What changed

  • replace the Docsy shell with the pinned OINK module and migrate bilingual landing, navigation, footer, search, print, machine-readable outputs, 404, and legacy details content;
  • add a fail-closed version manifest and central renderer for latest, 1.7, and 1.5, including exact-SHA provenance and version-aware GitHub actions;
  • scope search, canonical, hreflang, LLMS, NAVJSON, assets, and links to the correct origin, language, and version;
  • preserve latest-only Home/Blog/Community/About/client-go surfaces while historical snapshots contain Docs/Download only;
  • keep the required deploy status, pin every Action to a commit SHA, publish reviewed production output only from master, and retain asf-site history.

Resolved sources

Version Source
latest 4d43cf3231b5655f6e3b9224da696cd0280df1f3
1.7 a036f550bf412ea2950271390888d63bbffef6ba
1.5 34bbc87147f60db49888b2ce718cc051973c943e

Historical release branches intentionally remain maintainable. Each workflow run resolves them once and carries the immutable result through build and aggregation.

Live visual and runtime evidence

The first live publish exposed Apache's reserved root /icons/ alias. The site logo was moved to /img/logo.svg; the final ASF preview now serves root and versioned logos with 200 image/svg+xml.

Verification

  • six clean strict Hugo builds: 3 versions × production/staging origins, zero warnings;
  • two clean aggregates; the exact-head CI staging artifact contains 2,233 files and has path/content checksum dfa8601061a9615d172694caaec1b257e6721a021b3b8f94d39b8f2a52987a85;
  • URL contract: 24 latest routes and 17 routes per historical version;
  • 12 unit/integration tests covering manifest drift, SHA mismatch, unsafe URLs, staging-origin rewriting, scoped URLs, and safe output cleanup;
  • source link validation, Ruff, Actionlint, JSON validation, and diff checks pass;
  • exact canonical/hreflang, NAVJSON/LLMS/search isolation, search MD5, licenses, assistant boundary, archive notices, 404 shell, and aggregate collisions are validated;
  • ASF DNS/TLS/headers/CSP, representative routes/assets, HStore and Chinese 配置 search, language/version switching, 404, light/dark themes, and 390×844 layout were tested in a real browser; no warning/error console logs were captured.
  • exact-head CI run: prepare, all six production/staging version builds, and required deploy passed; PR publish remained skipped;
  • ASF preview commit 3f653c53d5d481ceb4f52a3443da94af03c2d495 was created directly from that CI artifact and preserves both case-distinct README/ and readme/ routes.

Three independent read-only review lanes (correctness, design/deployment, and security) completed the final delta with no actionable findings.

Rollback and exclusions

  • asf-site was not modified during migration or staging; its preserved head is 4c9cb819bf5277982a5b2dacfe9b788924e3e940.
  • Existing asf-staging was not overwritten; the isolated preview is generated from asf-staging-oink.
  • Source rollback is a normal revert of this PR; generated preview history retains both the initial artifact and the hosted-path fix.
  • Route-aware same-page version switching, EOL-wide noindex, broad IA rewriting, and a Redoc PoC remain outside this first migration.

- pin OINK, Go, Hugo, and GitHub Actions versions
- replace Docsy landing and bilingual configuration
- add strict production and staging artifact validation
- preserve aliases, machine outputs, and license notices
- convert 45 bilingual details blocks with OINK tooling
- verify tables, nested code, and long JSON examples
- remove obsolete Node and S3 Docsy entry points
- retain zero residual legacy constructs
- resolve latest, 1.7, and 1.5 to exact commit SHAs
- build isolated production and staging artifacts
- validate URL, language, metadata, and license contracts
- aggregate reviewed outputs before staging or production publish
- move the site logo from the Apache /icons alias
- update OINK branding to use /img/logo.svg
- enforce the hosted asset path in the URL contract
@dosubot dosubot Bot added size:M This PR changes 30-99 lines, ignoring generated files. enhancement New feature or request labels Aug 30, 2026
- resolve PR builds from the exact source head
- keep shell, scripts, content, and metadata aligned
- verify the pinned OINK checksum, identity, and replacement
- restore the original homepage copy and brand artwork
- localize CSP-sensitive images and add responsive assets
- fix bilingual search, version, 404, and accessibility behavior
- harden historical builds and output security validation
- restore the real three-link historical overlay contract
- normalize archived Server headings outside fenced code
- keep 404 pages out of canonical and hreflang clusters
- close srcset and aggregate security validation gaps
- scope missing translations to the current artifact base
- validate language actions against hreflang contracts
- cover URL, metadata, active-state, and escape regressions
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request size:M This PR changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant