mirror of
https://github.com/supabase/setup-cli.git
synced 2026-06-28 09:57:03 +00:00
fix: setup-cli on Linux musl containers (#431)
## Summary Fixes setup-cli in Alpine/Linux musl containers after the Supabase CLI v2.99+ release layout introduced a Bun/TypeScript `supabase` shim alongside `supabase-go`. This keeps the v2 action on Bun, but makes the musl paths explicit: - Detect Linux musl before running `oven-sh/setup-bun` and pass the matching `bun-linux-*-musl.zip` via `bun-download-url`. - Use POSIX `sh` for composite shell steps so the action can run in minimal Alpine containers without `bash`. - Detect Linux musl in the CLI installer and download the existing `.apk` release asset for CLI v2.99+. - Add the extracted APK `usr/bin` directory to PATH. - Keep existing tar/zip behavior for glibc Linux, macOS, and Windows. ## Root Cause `oven-sh/setup-bun` does not currently include libc detection in its automatic release asset selection, so Alpine containers received a glibc Bun binary. Separately, setup-cli downloaded the generic Linux `.tar.gz` Supabase CLI asset, whose `supabase` shim is glibc-linked in v2.99+; the `.apk` asset contains the musl-linked shim. ## Testing - `bun run ci` - Manual GitHub workflow in https://github.com/jgoux/setup-cli-testing/actions/runs/2616196598653
This commit is contained in:
@@ -196,6 +196,36 @@ test("uses versioned tar archives for Supabase CLI v2.99.0 and later", async ()
|
||||
});
|
||||
});
|
||||
|
||||
test("uses apk archives for Supabase CLI v2.99.0 and later on Linux musl", async () => {
|
||||
const { getDownloadArchive } = await getMainModule();
|
||||
|
||||
const archive = await getDownloadArchive("2.100.1", "linux", "x64", true);
|
||||
|
||||
expect(archive).toEqual({
|
||||
url: "https://github.com/supabase/cli/releases/download/v2.100.1/supabase_2.100.1_linux_amd64.apk",
|
||||
format: "apk",
|
||||
});
|
||||
});
|
||||
|
||||
test("keeps tar archives before Supabase CLI v2.99.0 on Linux musl", async () => {
|
||||
const { getDownloadArchive } = await getMainModule();
|
||||
|
||||
const archive = await getDownloadArchive("2.98.2", "linux", "x64", true);
|
||||
|
||||
expect(archive).toEqual({
|
||||
url: "https://github.com/supabase/cli/releases/download/v2.98.2/supabase_linux_amd64.tar.gz",
|
||||
format: "tar",
|
||||
});
|
||||
});
|
||||
|
||||
test("uses usr/bin as the CLI path for apk archives", async () => {
|
||||
const { getCliPath } = await getMainModule();
|
||||
|
||||
expect(getCliPath("/tmp/extracted", "apk")).toBe(path.join("/tmp/extracted", "usr", "bin"));
|
||||
expect(getCliPath("/tmp/extracted", "tar")).toBe("/tmp/extracted");
|
||||
expect(getCliPath("/tmp/extracted", "zip")).toBe("/tmp/extracted");
|
||||
});
|
||||
|
||||
test("keeps the unversioned tar archive layout before Supabase CLI v2.99.0", async () => {
|
||||
const { getDownloadArchive } = await getMainModule();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user