fix: bootstrap linuxbrew for skills
This commit is contained in:
59
src/infra/brew.test.ts
Normal file
59
src/infra/brew.test.ts
Normal file
@@ -0,0 +1,59 @@
|
||||
import fs from "node:fs/promises";
|
||||
import os from "node:os";
|
||||
import path from "node:path";
|
||||
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
import { resolveBrewExecutable, resolveBrewPathDirs } from "./brew.js";
|
||||
|
||||
describe("brew helpers", () => {
|
||||
it("resolves brew from ~/.linuxbrew/bin when executable exists", async () => {
|
||||
const tmp = await fs.mkdtemp(path.join(os.tmpdir(), "clawdbot-brew-"));
|
||||
try {
|
||||
const homebrewBin = path.join(tmp, ".linuxbrew", "bin");
|
||||
await fs.mkdir(homebrewBin, { recursive: true });
|
||||
const brewPath = path.join(homebrewBin, "brew");
|
||||
await fs.writeFile(brewPath, "#!/bin/sh\necho ok\n", "utf-8");
|
||||
await fs.chmod(brewPath, 0o755);
|
||||
|
||||
const env: NodeJS.ProcessEnv = {};
|
||||
expect(resolveBrewExecutable({ homeDir: tmp, env })).toBe(brewPath);
|
||||
} finally {
|
||||
await fs.rm(tmp, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
|
||||
it("prefers HOMEBREW_PREFIX/bin/brew when present", async () => {
|
||||
const tmp = await fs.mkdtemp(path.join(os.tmpdir(), "clawdbot-brew-"));
|
||||
try {
|
||||
const prefix = path.join(tmp, "prefix");
|
||||
const prefixBin = path.join(prefix, "bin");
|
||||
await fs.mkdir(prefixBin, { recursive: true });
|
||||
const prefixBrew = path.join(prefixBin, "brew");
|
||||
await fs.writeFile(prefixBrew, "#!/bin/sh\necho ok\n", "utf-8");
|
||||
await fs.chmod(prefixBrew, 0o755);
|
||||
|
||||
const homebrewBin = path.join(tmp, ".linuxbrew", "bin");
|
||||
await fs.mkdir(homebrewBin, { recursive: true });
|
||||
const homebrewBrew = path.join(homebrewBin, "brew");
|
||||
await fs.writeFile(homebrewBrew, "#!/bin/sh\necho ok\n", "utf-8");
|
||||
await fs.chmod(homebrewBrew, 0o755);
|
||||
|
||||
const env: NodeJS.ProcessEnv = { HOMEBREW_PREFIX: prefix };
|
||||
expect(resolveBrewExecutable({ homeDir: tmp, env })).toBe(prefixBrew);
|
||||
} finally {
|
||||
await fs.rm(tmp, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
|
||||
it("includes Linuxbrew bin/sbin in path candidates", () => {
|
||||
const env: NodeJS.ProcessEnv = { HOMEBREW_PREFIX: "/custom/prefix" };
|
||||
const dirs = resolveBrewPathDirs({ homeDir: "/home/test", env });
|
||||
expect(dirs).toContain("/custom/prefix/bin");
|
||||
expect(dirs).toContain("/custom/prefix/sbin");
|
||||
expect(dirs).toContain("/home/linuxbrew/.linuxbrew/bin");
|
||||
expect(dirs).toContain("/home/linuxbrew/.linuxbrew/sbin");
|
||||
expect(dirs).toContain("/home/test/.linuxbrew/bin");
|
||||
expect(dirs).toContain("/home/test/.linuxbrew/sbin");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user