Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 11 additions & 9 deletions scripts/update-homebrew-tap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ interface GithubReleaseView {
readonly assets?: unknown;
}

interface ReleaseAssetInfo {
export interface ReleaseAssetInfo {
readonly name: string;
readonly sha256: string;
}
Expand Down Expand Up @@ -56,12 +56,14 @@ const HELP_TEXT = [
" --repo <owner/name> GitHub repo to query (default: hack-dance/hack)",
].join("\n");

const parsed = parseArgs({ argv: Bun.argv.slice(2) });
if (parsed.ok) {
process.exitCode = await main({ args: parsed.args });
} else {
process.stderr.write(`${parsed.message}\n`);
process.exitCode = 1;
if (import.meta.main) {
const parsed = parseArgs({ argv: Bun.argv.slice(2) });
if (parsed.ok) {
process.exitCode = await main({ args: parsed.args });
} else {
process.stderr.write(`${parsed.message}\n`);
process.exitCode = 1;
}
}

async function main({ args }: { readonly args: Args }): Promise<number> {
Expand Down Expand Up @@ -246,7 +248,7 @@ function parseAssets({
return out;
}

function renderFormula({
export function renderFormula({
repo,
tag,
version,
Expand Down Expand Up @@ -287,7 +289,7 @@ function renderFormula({
' libexec.install "hack"',
' (libexec/"assets").install Dir["assets/*"] if (buildpath/"assets").directory?',
' (libexec/"assets/binaries").install Dir["binaries/*"] if (buildpath/"binaries").directory?',
' bin.write_env_script libexec/"hack", HACK_ASSETS_DIR: libexec/"assets"',
' (bin/"hack").write_env_script libexec/"hack", HACK_ASSETS_DIR: libexec/"assets"',
" end",
"",
" test do",
Expand Down
33 changes: 33 additions & 0 deletions tests/update-homebrew-tap.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { expect, test } from "bun:test";

import { renderFormula } from "../scripts/update-homebrew-tap.ts";

test("renderFormula installs the wrapper at bin/hack", () => {
const formula = renderFormula({
repo: "hack-dance/hack",
tag: "v3.3.3",
version: "3.3.3",
darwinArm64: {
name: "hack-3.3.3-darwin-arm64.tar.gz",
sha256: "arm64-sha",
},
darwinX64: {
name: "hack-3.3.3-darwin-x86_64.tar.gz",
sha256: "x64-sha",
},
linuxX64: {
name: "hack-3.3.3-linux-x86_64.tar.gz",
sha256: "linux-sha",
},
});

expect(formula).toContain(
'(bin/"hack").write_env_script libexec/"hack", HACK_ASSETS_DIR: libexec/"assets"'
);
expect(formula).not.toContain(
'bin.write_env_script libexec/"hack", HACK_ASSETS_DIR: libexec/"assets"'
);
expect(formula).toContain(
'assert_match "hack", shell_output("#{bin}/hack --help")'
);
});
Loading