feat: Replace the gulp UI toolchain with Vite#874
Open
lfrancke wants to merge 6 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
Scoped away from the inherited upstream src/ files until the planned upstream re-sync, so the diff against antora-ui-default stays readable. prettier --check runs as part of npm run lint (and therefore in CI). knip is deliberately not added: handlebars templates and classic browser scripts have no import graph, and most dependencies are referenced from playbook YAML or css, so it would need to ignore nearly everything to stay quiet.
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
Review and merge #873 first
This PR does a bunch of "cleanup" and modernisation. The version of gulp we use has been EoL since 2019 or so. The upstream repo has not done any changes here in years so I finally decided to tackle it and bring it in line with our other frontend projects by using Vite etc.
This can be split into multiple PRs if you like but those 67 changed files look scarier than it really is. There are maybe 5 files worth looking at.
The main file is
build.mjswhich takes everything the gulp plugins did and bundles it in one build file.I had Claude build it using this version and the old gulp build and checked for differences: There are 0 diffs. In other words: This produces the same output as the old one.
I do plan more changes to improve on this later but for now I just wanted to switch the build system.