427 Commits
Author SHA1 Message Date
renovate[bot] 2b783b71bf Update dependency eslint to v10.11.0 2026-09-19 06:55:26 +02:00
Sylvestre Ledru 27c92d5ab8 also add nushell to the list 2026-09-17 20:50:37 +02:00
Sylvestre Ledru e7ae2ac985 docs: build the translated books in parallel
The "Build website artifacts" job spends most of its time here: the
l10n step builds ~36 language books one after another, each taking its
turn at mutating the shared coreutils checkout (swap the locale into
en-US.ftl, run uudoc, build mdbook, restore en-US.ftl). Nothing in it
uses more than one core.

Everything uudoc touches is relative to its working directory, so give
each language a throwaway copy of the checkout to work in and run
DOC_JOBS of them at a time (default nproc). The checkout itself becomes
read-only, which is what makes this safe and also removes the need to
restore en-US.ftl between languages. Copying the checkout costs ~0.2s
per language; target/, .git/ and docs/book*/ are left out, which is
almost all of its weight.

The per-language tldr download and repack moves into the worker too:
it was a second serial loop, ~36 archives fetched one at a time before
any book was built.

Measured on a 30-locale tree with DOC_JOBS=4, to match a GitHub runner:
10m04s at 107% CPU -> 1m59s at 387%. The 30 resulting books are
byte-for-byte identical to the ones the serial script produces.

Two notes on what this deliberately avoids, both found by running it on
a machine where uutils shadows GNU coreutils/findutils:

- The fan-out is a bash job pool rather than `xargs -P`. uutils' xargs
  accepts -P and silently ignores it ("[NOT IMPLEMENTED]"), so the
  parallel build would quietly stay serial there.
- The tldr merge keeps the original direction (English base, translated
  pages overlaid on top). Overlaying English onto the translation with
  `cp -rn` reads as equivalent, but uutils' cp stops merging a directory
  after the first existing file and still exits 0 — it copied 296 of
  4673 pages, and the Arabic book lost every Examples section.
2026-09-17 11:39:04 +02:00
Sylvestre Ledru 2be5d8c0bd playground: fix the coreutils command list
Upstream coreutils changed `feat_wasm` from an explicit list of utilities
to `feat_wasm = ["feat_common_core", "nproc"]`. The workflow scraped that
list with a sed range, which cannot resolve feature groups and, now that
feat_wasm is a one-liner, ran on to the next `]` and swallowed the body of
feat_os_unix. The deployed commands.js ended up as

  const WASM_COMMANDS = ["feat_Tier1","feat_common_core","feat_os_unix",
    "feat_require_unix","feat_require_unix_utmpx","nproc","grep",...];

and since executeCommandLine() gates dispatch on that array, every
coreutils command answered "command not found" in the playground without
ever reaching the WASM binary, which was fine all along.

Replace the scrape with scripts/wasm-command-list.py, which resolves the
feature through the [features] table down to the leaf optional
dependencies (the utility crates), drops `dep:`/`crate/feat` entries,
strips the `uu_` prefix (uu_test -> test) and fails loudly if the feature
resolves to no utilities.

The unit tests stayed green through all of this because the test page only
loaded wasm-terminal.js and therefore always exercised FALLBACK_COMMANDS,
never the generated file. Load /wasm/commands.js there too and assert that
the core utilities are present and that no feature group leaks in; against
the currently deployed commands.js that now fails 72 of 185 tests instead
of passing. Also refresh FALLBACK_COMMANDS with the utilities feat_wasm
gained (hostid, mktemp, nice, test, tty).
2026-09-17 10:42:56 +02:00
Sylvestre Ledru a5d0006e76 users: add AerynOS 2026-09-16 21:51:37 +02:00
renovate[bot] 20af1b1410 Update shalzz/zola-deploy-action action to v0.23.6 2026-09-13 12:28:15 +02:00
renovate[bot] 7d8adfc901 Update dependency eslint to v10.10.0 2026-09-04 17:49:22 +02:00
Sylvestre Ledru a61953dea0 video with Brodie 2026-09-04 13:01:46 +02:00
Sylvestre Ledru 777a43bb85 playground: fix the assertion 2026-09-02 08:50:07 +02:00
Sylvestre Ledru d91e9adf16 playground: add a french example 2026-09-01 23:30:26 +02:00
Sylvestre Ledru 6ce5e956fe playground;: it runs more than uutils 2026-08-31 23:00:56 +02:00
Sylvestre Ledru 3610d1967f improve the intro 2026-08-31 22:26:34 +02:00
Sylvestre Ledru e9cbcb42ca improve the intro 2026-08-31 22:06:55 +02:00
Sylvestre Ledru b2fa4b30c1 update of the date of the blog post 2026-08-31 21:49:26 +02:00
Sylvestre Ledru eb555ec1f4 publish the blog post 2026-08-31 20:44:11 +02:00
Sylvestre Ledru 1cc9f326c7 credit the uutils awk project 2026-08-31 20:43:51 +02:00
Sylvestre Ledru 0c461ce3d8 Merge pull request #77 from sylvestre/playground-lang-param
playground: allow setting the locale with a ?lang= URL parameter
2026-08-31 20:33:02 +02:00
Sylvestre Ledru e9669927b1 playground: allow setting the locale with a ?lang= URL parameter
A shared link can now carry the language alongside the command, e.g.
/playground?lang=fr-FR&cmd=cut+-f+1,4-2,9-12+fruits.txt to show a
localized error message.

The value accepts both the short (fr) and full (fr-FR) form, is
validated against the locales the build ships, and is applied before
the ?cmd= commands run. The share-link button appends it when the
locale is not the default, and the Language dropdown stays in sync
via a new uutils:locale-changed event.
2026-08-31 16:32:40 +02:00
Sylvestre Ledru 09e27e975f move it back as draft 2026-08-31 01:51:04 +02:00
Sylvestre Ledru c69cee3e58 playground: improve the presentation 2026-08-31 01:31:00 +02:00
Sylvestre Ledru f510ccd25c blog post: fix the date 2026-08-31 01:27:44 +02:00
Sylvestre Ledru 481e067c7c playground: add a row of error examples 💥
The caret diagnostics are the most demo-able thing in 0.11.0 and the
playground never showed them. Add a section of arguments that fail to parse
(tr set, cut range, sort key, expr and test operands, numfmt and printf
formats, head SIZE, csplit regex), all on files the playground ships, and
point at the blog post for the rest.
2026-08-31 01:06:39 +02:00
Sylvestre Ledru 328e2de805 Merge pull request #76 from sylvestre/playground-awk-diagnostics
prepare the 0.11.0 release
2026-08-31 00:51:06 +02:00
Sylvestre Ledru 1997d2d88d blog: only link the diagnostics examples the playground can run
chmod, mkfifo, mknod, install, stat, env, du, df and stdbuf are not in
feat_wasm, so their "try it" links could only ever answer "command not
found". Show those commands as plain code, drop the two inline playground
links for chmod and env, and say that the linked examples are the ones the
WebAssembly build ships.
2026-08-31 00:40:01 +02:00
Sylvestre Ledru 9e4ca7cabb website: build the wasm playground with feat_diagnostics
feat_diagnostics only comes in through coreutils' default feature set, and
the playground binary is built with --no-default-features, so uucore
compiled diagnostics_stub.rs: enabled() was a hardcoded false and every
utility printed the plain one-line error. `expr 9 + foo` in the playground
showed no caret at all.

browser_wasi_shim reports stderr as a character device with FD_WRITE and
neither FD_SEEK nor FD_TELL, which is what Rust's WASI is_terminal() takes
for a tty, so the reports render once the feature is on.
2026-08-31 00:40:01 +02:00