yarn: add Alpine Linux support in integration tests (#11943)

* test(yarn): add Alpine Linux support via apk

Install nodejs and yarn via apk on Alpine, sharing the functional
test block with the existing non-Alpine (pre-built binary) path.
Extracts the test block into tests.yml to avoid duplication.

Fixes #4270

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(yarn): skip Node.js runtime warnings in stderr processing

Node.js 24 emits DeprecationWarning lines to stderr (e.g. for url.parse())
that are not JSON, causing _process_yarn_error to fail with "Unexpected
stderr output from Yarn". Skip lines starting with "(node:" before
attempting JSON parsing.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* test(yarn): add changelog fragment for #11943

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(yarn): only JSON-parse lines starting with '{' in stderr

Node.js 24 emits multi-line DeprecationWarnings to stderr (e.g. the hint
line "(Use `node --trace-deprecation ...`") that are not JSON and were
tripping the "Unexpected stderr output from Yarn" failure. Yarn's
structured output always starts with '{', so skip any line that doesn't.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* test(yarn): install sqlite on Alpine to fix nodejs 22 symbol error

On Alpine 3.21 nodejs 22 requires SQLite session extension symbols
(sqlite3session_*) that are not present in sqlite-libs; installing
the full sqlite package provides them.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* test(yarn): refresh apk cache and upgrade sqlite-libs before installing nodejs

The CI Alpine container may have a stale sqlite-libs that lacks the
session extension symbols (sqlite3session_*) required by nodejs 22+.
Force a cache refresh and upgrade sqlite-libs to the latest revision.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(yarn): warn on non-JSON stderr lines instead of silently skipping

Non-JSON lines in stderr (e.g. Node.js runtime DeprecationWarnings) are
surfaced to the user via module.warn() rather than being silently ignored,
since their content and meaning are not known in advance.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* prefix yarn output line

* Update changelogs/fragments/11943-yarn-nodejs-runtime-warnings.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
Alexei Znamensky
2026-05-07 05:25:10 +12:00
committed by GitHub
parent d87a8a167f
commit 38d49d240e
6 changed files with 240 additions and 199 deletions

View File

@@ -187,8 +187,13 @@ class Yarn:
def _process_yarn_error(self, err):
try:
# We need to filter for errors, since Yarn warnings are included in stderr
# We need to filter for errors, since Yarn warnings are included in stderr.
# Non-JSON lines (e.g. Node.js runtime warnings) are surfaced via module.warn()
# rather than treated as errors, since their meaning is unknown.
for line in err.splitlines():
if not line.startswith("{"):
self.module.warn(f"yarn stderr: {line}")
continue
if json.loads(line)["type"] == "error":
self.module.fail_json(msg=err)
except Exception: