Some checks failed
build-packages / resolve bundled mosh-client (push) Has been cancelled
build-packages / resolve bundled et-client (push) Has been cancelled
build-packages / build-macos (push) Has been cancelled
build-packages / build-windows (push) Has been cancelled
build-packages / build-linux-x64 (push) Has been cancelled
build-packages / build-linux-arm64 (push) Has been cancelled
build-packages / release (push) Has been cancelled
build-packages / update Nix release metadata (push) Has been cancelled
build-packages / bump homebrew tap (push) Has been cancelled
test / lint-and-test (push) Has been cancelled
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled
build-et-binaries / build-linux-x64 (push) Has been cancelled
build-et-binaries / build-linux-arm64 (push) Has been cancelled
build-et-binaries / build-macos-universal (push) Has been cancelled
build-et-binaries / build-windows-x64 (push) Has been cancelled
build-et-binaries / release (push) Has been cancelled
108 lines
3.2 KiB
JavaScript
108 lines
3.2 KiB
JavaScript
#!/usr/bin/env node
|
|
/* global process, console */
|
|
/**
|
|
* Verify @xterm/addon-webgl carries the upstream glyph-atlas safety fixes.
|
|
*
|
|
* Netcatty previously backported these as local string patches. With
|
|
* @xterm/addon-webgl >= 0.20.0-beta.291 they ship upstream:
|
|
*
|
|
* - xtermjs/xterm.js#6055 — shared atlas: clearTexture bumps _pageLayoutVersion
|
|
* - xtermjs/xterm.js#5987 — no generateMipmap on atlas upload (LINEAR filters)
|
|
* - xtermjs/xterm.js#6043 — _evictAllPages / maxAtlasPages capacity handling
|
|
*
|
|
* This script no longer mutates node_modules. It only fails closed when the
|
|
* pinned package is missing any of the above, so a silent downgrade cannot
|
|
* reintroduce garbled split-pane / mipmap / overflow bugs.
|
|
*/
|
|
"use strict";
|
|
const fs = require("node:fs");
|
|
const path = require("node:path");
|
|
|
|
const TARGET_FILES = [
|
|
"node_modules/@xterm/addon-webgl/lib/addon-webgl.mjs",
|
|
"node_modules/@xterm/addon-webgl/lib/addon-webgl.js",
|
|
];
|
|
|
|
/** Upstream #6055: clearTexture bumps page layout version so shared atlases rebuild. */
|
|
function hasUpstreamSharedAtlasClearFix(source) {
|
|
return (
|
|
source.includes("_pageLayoutVersion") &&
|
|
/clearTexture\(\)\{[^}]*_pageLayoutVersion\+\+/.test(source)
|
|
);
|
|
}
|
|
|
|
/** Upstream #5987: atlas texture upload must not call generateMipmap. */
|
|
function hasUpstreamMipmapFix(source) {
|
|
return !source.includes(".generateMipmap(");
|
|
}
|
|
|
|
/** Upstream #6043: capacity eviction when atlas pages overflow texture slots. */
|
|
function hasUpstreamCapacityFix(source) {
|
|
return source.includes("_evictAllPages()") && source.includes("maxAtlasPages");
|
|
}
|
|
|
|
let webglVersion = "";
|
|
try {
|
|
const packageJson = path.resolve(
|
|
process.cwd(),
|
|
"node_modules/@xterm/addon-webgl/package.json",
|
|
);
|
|
webglVersion = JSON.parse(fs.readFileSync(packageJson, "utf8")).version || "";
|
|
} catch {
|
|
// Handled below when files are missing.
|
|
}
|
|
|
|
const results = { ok: 0, missing: 0 };
|
|
|
|
for (const file of TARGET_FILES) {
|
|
const abs = path.resolve(process.cwd(), file);
|
|
let source;
|
|
try {
|
|
source = fs.readFileSync(abs, "utf8");
|
|
} catch {
|
|
console.warn(`[patch-xterm-webgl-atlas] ERROR: not found: ${file}`);
|
|
results.missing++;
|
|
continue;
|
|
}
|
|
|
|
const checks = [
|
|
{
|
|
name: "shared-atlas clear (#6055)",
|
|
ok: hasUpstreamSharedAtlasClearFix(source),
|
|
hint: "need clearTexture() { ... _pageLayoutVersion++ }",
|
|
},
|
|
{
|
|
name: "no atlas mipmaps (#5987)",
|
|
ok: hasUpstreamMipmapFix(source),
|
|
hint: "must not call gl.generateMipmap on atlas upload",
|
|
},
|
|
{
|
|
name: "atlas capacity eviction (#6043)",
|
|
ok: hasUpstreamCapacityFix(source),
|
|
hint: "need _evictAllPages() and maxAtlasPages",
|
|
},
|
|
];
|
|
|
|
const failed = checks.filter((check) => !check.ok);
|
|
if (failed.length === 0) {
|
|
results.ok++;
|
|
continue;
|
|
}
|
|
|
|
results.missing++;
|
|
for (const check of failed) {
|
|
console.warn(
|
|
`[patch-xterm-webgl-atlas] ERROR: missing ${check.name} in ${file} ` +
|
|
`(${check.hint}). Upgrade @xterm/addon-webgl ` +
|
|
`(current: ${webglVersion || "unknown"}).`,
|
|
);
|
|
}
|
|
}
|
|
|
|
console.log(
|
|
`[patch-xterm-webgl-atlas] verify version=${webglVersion || "unknown"} ` +
|
|
`ok=${results.ok} missing=${results.missing}`,
|
|
);
|
|
|
|
if (results.missing > 0) process.exitCode = 1;
|