Skip to content

test(e2e): share one tools stage across the Windows images and drop the MSIs - #40

Merged
linghengqian merged 4 commits into
mainfrom
windows-ci
Oct 17, 2026
Merged

linghengqian merged 4 commits into
mainfrom
windows-ci

Conversation

@linghengqian

@linghengqian linghengqian commented Oct 17, 2026 •

Copy link
Copy Markdown
Member
  • test(e2e): share one tools stage across the Windows images and drop the MSIs.
  • Build the compose runner and the per-combo image from one multi-stage Dockerfile, so pwsh, Git and Go install once per host and the suite's own build only copies the plugin in. Unpack pwsh and Go from their zips instead of msiexec, reuse the image Go for vfox@main instead of a second MSI install per combo, and run every Windows combo at once in CI.

…he MSIs

Build the compose runner and the per-combo image from one multi-stage
Dockerfile, so pwsh, Git and Go install once per host and the suite's own
build only copies the plugin in. Unpack pwsh and Go from their zips instead
of msiexec, reuse the image Go for vfox@main instead of a second MSI install
per combo, and run every Windows combo at once in CI.
@linghengqian linghengqian added the enhancement New feature or request label Oct 17, 2026
… tools

Replace the compose runner with tests/e2e/windows/run.ps1. It pulls the
servercore base image in the background while it fetches pwsh, PortableGit
and the pinned Go into a per-arch host cache, builds vfox@main once, and
compiles the suite. The cache is bind-mounted read-only at C:\tools into
every combo container, so the image no longer commits a layer of tens of
thousands of tool files, which took 2-6 minutes on the hosted runners.
PowerShell splits a bare -test.v into -test and .v, so the suite exited
with 'flag provided but not defined: -test'.
windows-11-arm spends about four minutes installing Go and building moby
before the suite can pull anything. Keep the binaries in
C:\vfox-docker\bin, restore that directory with actions/cache keyed on
install-docker-arm64.ps1, and skip setup-go and the build on a hit.
@linghengqian
linghengqian marked this pull request as ready for review October 17, 2026 14:27
@linghengqian
linghengqian merged commit 9ed20f6 into main Oct 17, 2026
20 checks passed
@linghengqian
linghengqian deleted the windows-ci branch October 17, 2026 14:28
linghengqian added a commit that referenced this pull request Oct 20, 2026
…d up (#41)

* fix: musl libatomic check, 32-bit ARM package and .nvmrc matching

Writing the new docs against vfox 1.0.12 and 1.0.13 turned up these bugs
in the hooks.

- musl: after the unpack, PostInstall runs `node --version` once and reads
  the dynamic loader's complaint. The musl builds of 26.8.0 and later need
  libatomic, which a stock Alpine does not have, so the install used to
  succeed and the first `node` failed with `Error loading shared library
  libatomic.so.1`. Now the install stops, nothing is registered, and the
  message names the package and the command that installs it (`apk add
  libatomic` on Alpine, `opkg install ...` on OpenWrt). The libstdc++
  message names its command too and no longer says the library "is
  normally installed automatically". Where no command can be run, or node
  fails for another reason, the install is left alone.
- 32-bit ARM Linux: vfox reports `arm` and Node.js names the package
  `linux-armv7l`. The plugin asked for `linux-arm`, which never existed, so
  every install on 32-bit ARM ended in "package ... is not listed".
- .nvmrc and .node-version under latest_installed and latest_available:
  releases are matched by their numbers, part by part, and the newest one
  wins. The text used to be a Lua pattern against vfox's text-sorted list,
  so `22` picked 22.9.0 over 22.23.3, `22.2` matched 22.23.3, `22.x`
  matched nothing and a file holding `(` raised `unfinished capture`.
  `22.x`, `22.x.x` and `22.*` now mean 22, text that is no release number
  (node, lts/-1, `(`) is returned as it is, and only a leading `v` is
  dropped, so an `lts/<codename>` with a `v` inside works. `^lts-` is
  escaped: it matched anything starting with `lt` and turned `lts/-1`
  into `lts//1`.
- PreInstall: `get checksum failed` says why, `HTTP 404 from <url>` or the
  network error, instead of hiding it.
- VFOX_NODEJS_MIRROR may end in several slashes, not only one.

The hook tests grow from 28 to 52 cases. The musl check is also covered
by running it against Alpine 3.24.1 with and without libstdc++ and
libatomic.

* docs: document the plugin the way vfox-java does

Rewrite the README and add a page per topic under docs/: versions and
names, platforms, .nvmrc and .node-version, npm and global packages,
troubleshooting, development and changes. The pages for the mirror, musl,
LTS, building from source and E2E gain the details they lacked.

The commands, messages and tables were taken from vfox 1.0.12 and 1.0.13
on Ubuntu 26.04 and Alpine 3.24.1. Pages that quote data give the day it
was taken (2026-10-21), and docs/development.md has the commands that
refresh it. What exists only on main, and not in 0.5.2, is marked
"Unreleased" with the 0.5.2 behaviour next to it and listed in
docs/changes.md. docs/development.md also lists the gaps that are still
open.

docs/e2e.md said the Windows suite keeps a Docker Compose runner; #40
replaced it with tests/e2e/windows/run.ps1.

* docs: add a Chinese translation

README_CN.md and docs/zh-CN/ translate the README and every page of docs/
under the same names. Each page, in both languages, starts with a link to
the other one, and docs/development.md says how the two are kept in step.

Code blocks and quoted messages stay in English, only their comments are
translated. A link to another page points at its Chinese heading, and a
link to the vfox guides at the zh-hans site. The terms follow vfox-java's
Chinese docs.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant