feat: Windows .bat launcher for codewhale (v2, rebased + review fixes) (#1861)
* fix: Windows .bat launcher with correct JS escaping and codewhale rebrand * fix: complete Windows bat release asset handling --------- Co-authored-by: cy2311 <cy2311@users.noreply.github.com> Co-authored-by: Hunter B <hmbown@gmail.com>
This commit is contained in:
@@ -14,7 +14,7 @@ const ASSET_MATRIX = {
|
|||||||
arm64: ["codewhale-macos-arm64", "codewhale-tui-macos-arm64"],
|
arm64: ["codewhale-macos-arm64", "codewhale-tui-macos-arm64"],
|
||||||
},
|
},
|
||||||
win32: {
|
win32: {
|
||||||
x64: ["codewhale-windows-x64.exe", "codewhale-tui-windows-x64.exe"],
|
x64: ["codewhale-windows-x64.exe", "codewhale-tui-windows-x64.exe", "codewhale.bat"],
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -112,8 +112,8 @@ function releaseBinaryDirectory() {
|
|||||||
function allAssetNames() {
|
function allAssetNames() {
|
||||||
const names = [];
|
const names = [];
|
||||||
for (const platformAssets of Object.values(ASSET_MATRIX)) {
|
for (const platformAssets of Object.values(ASSET_MATRIX)) {
|
||||||
for (const pair of Object.values(platformAssets)) {
|
for (const assets of Object.values(platformAssets)) {
|
||||||
names.push(pair[0], pair[1]);
|
names.push(...assets);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Array.from(new Set(names));
|
return Array.from(new Set(names));
|
||||||
|
|||||||
@@ -65,3 +65,12 @@ test("known platforms are unaffected by alias map", () => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("allAssetNames includes every matrix entry", () => {
|
||||||
|
const { allAssetNames, allReleaseAssetNames } = require(ARTIFACTS_PATH);
|
||||||
|
const assetNames = allAssetNames();
|
||||||
|
assert.ok(assetNames.includes("codewhale-windows-x64.exe"));
|
||||||
|
assert.ok(assetNames.includes("codewhale-tui-windows-x64.exe"));
|
||||||
|
assert.ok(assetNames.includes("codewhale.bat"));
|
||||||
|
assert.ok(allReleaseAssetNames().includes("codewhale.bat"));
|
||||||
|
});
|
||||||
|
|||||||
@@ -10,6 +10,9 @@ const {
|
|||||||
detectBinaryNames,
|
detectBinaryNames,
|
||||||
} = require("../../npm/codewhale/scripts/artifacts");
|
} = require("../../npm/codewhale/scripts/artifacts");
|
||||||
|
|
||||||
|
const WINDOWS_LAUNCHER = "codewhale.bat";
|
||||||
|
const WINDOWS_CLI_ASSET = "codewhale-windows-x64.exe";
|
||||||
|
|
||||||
async function sha256(filePath) {
|
async function sha256(filePath) {
|
||||||
const content = await fs.readFile(filePath);
|
const content = await fs.readFile(filePath);
|
||||||
return crypto.createHash("sha256").update(content).digest("hex");
|
return crypto.createHash("sha256").update(content).digest("hex");
|
||||||
@@ -41,6 +44,9 @@ async function main() {
|
|||||||
|
|
||||||
if (prepareAllAssets) {
|
if (prepareAllAssets) {
|
||||||
for (const assetName of allAssetNames()) {
|
for (const assetName of allAssetNames()) {
|
||||||
|
if (assetName === WINDOWS_LAUNCHER) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (assets.some((asset) => asset.target === assetName)) {
|
if (assets.some((asset) => asset.target === assetName)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -62,6 +68,25 @@ async function main() {
|
|||||||
manifestLines.push(`${await sha256(outputPath)} ${asset.target}`);
|
manifestLines.push(`${await sha256(outputPath)} ${asset.target}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (assets.some((asset) => asset.target === WINDOWS_CLI_ASSET)) {
|
||||||
|
const batContent = [
|
||||||
|
"@echo off",
|
||||||
|
"where wt >nul 2>nul",
|
||||||
|
"set NO_ANIMATIONS=1",
|
||||||
|
'if "%ERRORLEVEL%"=="0" (',
|
||||||
|
' wt --title CodeWhale cmd /k "%~dp0codewhale-windows-x64.exe"',
|
||||||
|
") else (",
|
||||||
|
' "%~dp0codewhale-windows-x64.exe"',
|
||||||
|
")",
|
||||||
|
"",
|
||||||
|
].join("\r\n");
|
||||||
|
const batPath = path.join(outputDir, WINDOWS_LAUNCHER);
|
||||||
|
await fs.writeFile(batPath, batContent, "utf8");
|
||||||
|
const batHash = await sha256(batPath);
|
||||||
|
manifestLines.push(`${batHash} ${WINDOWS_LAUNCHER}`);
|
||||||
|
console.log(`Generated ${batPath}`);
|
||||||
|
}
|
||||||
|
|
||||||
manifestLines.sort();
|
manifestLines.sort();
|
||||||
const manifestPath = path.join(outputDir, CHECKSUM_MANIFEST);
|
const manifestPath = path.join(outputDir, CHECKSUM_MANIFEST);
|
||||||
await fs.writeFile(manifestPath, `${manifestLines.join("\n")}\n`, "utf8");
|
await fs.writeFile(manifestPath, `${manifestLines.join("\n")}\n`, "utf8");
|
||||||
|
|||||||
Reference in New Issue
Block a user