mirror of
https://github.com/supabase/setup-cli.git
synced 2026-06-28 01:46:58 +00:00
fix: v1 setup on Linux musl (#432)
## Summary - Detect Linux musl runners in the v1 action and download the Supabase CLI `.apk` asset for CLI versions `>= 2.99.0`. - Add the extracted `usr/bin` directory to `PATH` for `.apk` archives. - Backport the optional `github-token` input for authenticated `latest` release lookup, because the test matrix hit unauthenticated GitHub API rate limits. - Rebuild `dist/index.js` for the Node action. ## Validation - `npm run format:check` - `npm run lint` - `npm test` - `npm run package` - Local Docker smoke test in `node:20-alpine` with `INPUT_VERSION=2.100.1` - setup-cli-testing workflow: https://github.com/jgoux/setup-cli-testing/actions/runs/26165593808 The external workflow passed Alpine `2.100.1`, Alpine `latest`, and Ubuntu/macOS/Windows with both `2.100.1` and `latest`.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { getDownloadArchive, getDownloadUrl } from '../src/utils'
|
||||
import { getCliPath, getDownloadArchive, getDownloadUrl } from '../src/utils'
|
||||
import { CLI_CONFIG_REGISTRY } from '../src/main'
|
||||
import * as os from 'os'
|
||||
import * as process from 'process'
|
||||
@@ -47,6 +47,48 @@ test('gets download url to latest version', async () => {
|
||||
expect(url).toMatch(/\.tar\.gz$|\.zip$/)
|
||||
})
|
||||
|
||||
test('authenticates latest version lookup when a GitHub token is provided', async () => {
|
||||
const fetchMock = jest.spyOn(globalThis, 'fetch').mockResolvedValue(
|
||||
new Response(JSON.stringify({ tag_name: 'v2.99.0' }), {
|
||||
status: 200,
|
||||
statusText: 'OK'
|
||||
})
|
||||
)
|
||||
|
||||
await getDownloadUrl('latest', 'github-token')
|
||||
|
||||
expect(fetchMock).toHaveBeenCalledWith(
|
||||
'https://api.github.com/repos/supabase/cli/releases/latest',
|
||||
expect.objectContaining({
|
||||
headers: expect.objectContaining({
|
||||
Accept: 'application/vnd.github+json',
|
||||
Authorization: 'Bearer github-token',
|
||||
'X-GitHub-Api-Version': '2022-11-28'
|
||||
})
|
||||
})
|
||||
)
|
||||
})
|
||||
|
||||
test('omits authorization from latest version lookup without a GitHub token', async () => {
|
||||
const fetchMock = jest.spyOn(globalThis, 'fetch').mockResolvedValue(
|
||||
new Response(JSON.stringify({ tag_name: 'v2.99.0' }), {
|
||||
status: 200,
|
||||
statusText: 'OK'
|
||||
})
|
||||
)
|
||||
|
||||
await getDownloadUrl('latest')
|
||||
|
||||
expect(fetchMock).toHaveBeenCalledWith(
|
||||
'https://api.github.com/repos/supabase/cli/releases/latest',
|
||||
expect.objectContaining({
|
||||
headers: expect.not.objectContaining({
|
||||
Authorization: expect.any(String)
|
||||
})
|
||||
})
|
||||
)
|
||||
})
|
||||
|
||||
test('gets versioned archive url to binary from Supabase CLI v2.99.0', async () => {
|
||||
const archive = await getDownloadArchive('2.99.0', 'linux', 'x64')
|
||||
|
||||
@@ -56,6 +98,30 @@ test('gets versioned archive url to binary from Supabase CLI v2.99.0', async ()
|
||||
})
|
||||
})
|
||||
|
||||
test('gets apk archive url on Linux musl from Supabase CLI v2.99.0', async () => {
|
||||
const archive = await getDownloadArchive('2.99.0', 'linux', 'x64', true)
|
||||
|
||||
expect(archive).toEqual({
|
||||
url: 'https://github.com/supabase/cli/releases/download/v2.99.0/supabase_2.99.0_linux_amd64.apk',
|
||||
format: 'apk'
|
||||
})
|
||||
})
|
||||
|
||||
test('keeps tar archives before Supabase CLI v2.99.0 on Linux musl', async () => {
|
||||
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', () => {
|
||||
expect(getCliPath('/tmp/extracted', 'apk')).toBe('/tmp/extracted/usr/bin')
|
||||
expect(getCliPath('/tmp/extracted', 'tar')).toBe('/tmp/extracted')
|
||||
expect(getCliPath('/tmp/extracted', 'zip')).toBe('/tmp/extracted')
|
||||
})
|
||||
|
||||
test('gets versioned zip archive url on Windows from Supabase CLI v2.99.0', async () => {
|
||||
const archive = await getDownloadArchive('2.99.0', 'win32', 'x64')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user