feat: Replace the gulp UI toolchain with Vite#874
Open
lfrancke wants to merge 5 commits into
Open
Conversation
gulp-imagemin minified these on every build; the minified versions are committed so the build does not need an image pipeline.
The .gitlab-ci.yml and the docs/ component are inherited from antora-ui-default and were never used here.
Minification strips embedded license header comments from the built css/js, so the attributions (Font Awesome, highlight.js, Asciidoctor Tabs, Octicons, the OFL fonts, and the MPL-2.0 upstream fork) live in a NOTICE file. The build ships it in the UI bundle, which publishes it on the site.
Vite is what stackable-apps and stackable-cockpit build with, and the gulp pipeline was frozen: gulp-eslint/gulp-stylelint are unmaintained and pinned eslint 6 / stylelint 13. Upstream antora-ui-default still ships the same frozen toolchain, so there is no upstream modernisation to converge with. Everything starts on the current majors: vite 8, eslint 10, stylelint 17, archiver 8, Node 24. - build.mjs produces the identical bundle layout: js entries are built as self-contained classic scripts (one vite pass each), the css in a separate pass, static directories are copied, NOTICE and LICENSE are included, everything is zipped to build/ui-bundle.zip. Verified by building the full site with both toolchains: every page is byte-identical. - The vendor bundle sources become ESM and reference the browser build of @asciidoctor/tabs explicitly (vite does not honor the style and browser package fields the way browserify/postcss-import did). - CSS custom properties are no longer inlined at build time; every supported browser handles var(), and the upcoming design-token work needs them preserved. - The standalone gulp preview is gone; render UI changes with real content via 'make build-truly-local' or the deploy preview. - The stylelint config accepts the inherited upstream css conventions instead of reformatting everything right before the planned upstream re-sync. - package-lock.json is regenerated; @antora/* and pagefind are pinned to their previously locked versions so the rendered site and search assets stay identical (bumping those is Renovate's job). - Node 24 in .nvmrc/engines/CI, matching stackable-apps. The root .nvmrc also raises the Netlify build to Node 24.
background-color/min-width do not accept 'none'; browsers ignored the declarations, so removing them does not change rendering. Also an unused event parameter and a stale eslint-disable directive.
cceeea1 to
a67c1e6
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Phase 2a of the docs overhaul, stacked on #873 (GitHub retargets this to main when #873 merges). Five commits, reviewable independently - happy to split into separate PRs if preferred:
chore: Commit the minified images- gulp-imagemin ran on every build; the minified results are committed instead (-673 lines of SVG cruft).chore: Remove upstream leftovers from the UI-.gitlab-ci.ymland upstream's owndocs/component, never used here.chore: Add a NOTICE file- minification strips embedded license header comments from the built css/js, so the third-party attributions (Font Awesome CC BY 4.0/OFL/MIT, highlight.js BSD-3, Asciidoctor Tabs MIT, Octicons MIT, the OFL fonts, MPL-2.0 upstream fork) live inui/NOTICE, which the build ships in the bundle and therefore publishes on the site. The Octicons attribution inside the SVG's<desc>is preserved.feat: Replace the gulp UI toolchain with Vite- the main course, see below.fix: Remove invalid css declarations and lint leftovers-background-color: none/min-width: noneare invalid and were ignored by browsers; removing them changes nothing.The toolchain swap
ui/build.mjsproduces the identical bundle layout (js/,js/vendor/,css/,font/,webfonts/,img/,helpers/,layouts/,partials/,NOTICE,LICENSE→build/ui-bundle.zip). JS entries are built as self-contained classic scripts, one Vite pass each - rollup cannot code-split IIFE output, which is exactly what<script src>consumers need.@asciidoctor/tabs' browser build and css explicitly (Vite doesn't honor thestyle/browserpackage fields the way browserify/postcss-import did).var(), and the planned design-token work needs them preserved. This is the only intentional CSS output change.make build-truly-localor the deploy preview.package-lock.jsonhad to be regenerated; @antora/ and pagefind are pinned to their previously locked versions* (3.1.7 / 1.3.0) so the rendered site and search assets stay identical - bumping those is Renovate's job, not this PR's..nvmrcraises the Netlify build to Node 24.Verification
Full site built with the gulp bundle and the Vite bundle, every page compared: 0 differing pages out of 220 (after normalising the trailing whitespace that #873's lint commit removed from an inline script). Bundle file lists are identical except the standalone
css/vendor/fontawesome.csscopy, which nothing referenced (Font Awesome stays inlined in site.css - its removal is a separate, planned performance PR).npm run lint --workspace uiandmake build-uipass; the UI CI workflow now also runs the lint.