mirror of
https://github.com/supabase/setup-cli.git
synced 2026-09-27 05:07:02 +00:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1dedf2c611 | ||
|
|
8b97e5256c |
2
.github/workflows/start.yml
vendored
2
.github/workflows/start.yml
vendored
@@ -33,6 +33,8 @@ jobs:
|
||||
exclude:
|
||||
- version: 1.178.2
|
||||
pg_major: 17
|
||||
- version: latest
|
||||
pg_major: 14
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: ./
|
||||
|
||||
@@ -1,18 +1,21 @@
|
||||
import { getCliPath, getDownloadArchive, getDownloadUrl } from '../src/utils'
|
||||
import { CLI_CONFIG_REGISTRY } from '../src/main'
|
||||
import * as os from 'os'
|
||||
import * as process from 'process'
|
||||
import * as cp from 'child_process'
|
||||
import * as path from 'path'
|
||||
import * as fs from 'fs'
|
||||
import * as yaml from 'js-yaml'
|
||||
import * as url from 'url'
|
||||
import { shouldPinGhcrRegistry } from '../src/main'
|
||||
import { afterEach, expect, jest, test } from '@jest/globals'
|
||||
|
||||
afterEach(() => {
|
||||
jest.restoreAllMocks()
|
||||
})
|
||||
|
||||
test('pins GHCR for legacy CLI versions until registry fallback support', () => {
|
||||
expect(shouldPinGhcrRegistry('1.28.0', undefined)).toBe(true)
|
||||
expect(shouldPinGhcrRegistry('2.107.0', undefined)).toBe(true)
|
||||
expect(shouldPinGhcrRegistry('2.108.0', undefined)).toBe(false)
|
||||
})
|
||||
|
||||
test('preserves a configured image registry', () => {
|
||||
expect(shouldPinGhcrRegistry('2.107.0', 'registry.example.test')).toBe(false)
|
||||
})
|
||||
|
||||
test('gets download url to binary', async () => {
|
||||
const url = await getDownloadUrl('1.28.0')
|
||||
expect(
|
||||
@@ -138,26 +141,3 @@ test('keeps unversioned archive url to binary before Supabase CLI v2.99.0', asyn
|
||||
expect(url).not.toContain('supabase_2.98.2_')
|
||||
expect(url).toMatch(/\.tar\.gz$/)
|
||||
})
|
||||
|
||||
// shows how the runner will run a javascript action with env / stdout protocol
|
||||
test('runs main action', () => {
|
||||
const { env, execPath } = process
|
||||
const repo = path.dirname(path.dirname(url.fileURLToPath(import.meta.url)))
|
||||
const config = path.join(repo, 'action.yml')
|
||||
const action = yaml.load(fs.readFileSync(config, 'utf8')) as {
|
||||
inputs: { version: { default: string } }
|
||||
}
|
||||
const ip = path.join(repo, 'dist', 'index.js')
|
||||
const stdout = cp
|
||||
.execFileSync(execPath, [ip], {
|
||||
env: {
|
||||
...env,
|
||||
RUNNER_TEMP: os.tmpdir(),
|
||||
INPUT_VERSION: action.inputs.version.default
|
||||
}
|
||||
})
|
||||
.toString()
|
||||
expect
|
||||
.stringContaining(`::set-env name=${CLI_CONFIG_REGISTRY}::`)
|
||||
.asymmetricMatch(stdout)
|
||||
})
|
||||
|
||||
9
dist/index.js
generated
vendored
9
dist/index.js
generated
vendored
@@ -60567,6 +60567,11 @@ const determineInstalledVersion = async () => {
|
||||
};
|
||||
|
||||
const CLI_CONFIG_REGISTRY = 'SUPABASE_INTERNAL_IMAGE_REGISTRY';
|
||||
const REGISTRY_VERSION = '1.28.0';
|
||||
const FALLBACK_VERSION = '2.108.0';
|
||||
const shouldPinGhcrRegistry = (installedVersion, configuredRegistry) => !configuredRegistry &&
|
||||
semverExports.gte(installedVersion, REGISTRY_VERSION) &&
|
||||
semverExports.lt(installedVersion, FALLBACK_VERSION);
|
||||
/**
|
||||
* The main function for the action.
|
||||
*
|
||||
@@ -60591,8 +60596,8 @@ async function run() {
|
||||
// Expose installed tool version
|
||||
const determinedVersion = await determineInstalledVersion();
|
||||
setOutput('version', determinedVersion);
|
||||
// Use GHCR mirror by default
|
||||
if (version.toLowerCase() === 'latest' || semverExports.gte(version, '1.28.0')) {
|
||||
// Use GHCR for CLI versions without registry fallback support.
|
||||
if (shouldPinGhcrRegistry(determinedVersion.replace(/^supabase\s+/i, '').replace(/^v/i, ''), process.env[CLI_CONFIG_REGISTRY])) {
|
||||
exportVariable(CLI_CONFIG_REGISTRY, 'ghcr.io');
|
||||
}
|
||||
}
|
||||
|
||||
2
dist/index.js.map
generated
vendored
2
dist/index.js.map
generated
vendored
File diff suppressed because one or more lines are too long
21
src/main.ts
21
src/main.ts
@@ -1,6 +1,6 @@
|
||||
import * as core from '@actions/core'
|
||||
import * as tc from '@actions/tool-cache'
|
||||
import { gte } from 'semver'
|
||||
import { gte, lt } from 'semver'
|
||||
import {
|
||||
getDownloadArchive,
|
||||
determineInstalledVersion,
|
||||
@@ -9,6 +9,16 @@ import {
|
||||
} from './utils.js'
|
||||
|
||||
export const CLI_CONFIG_REGISTRY = 'SUPABASE_INTERNAL_IMAGE_REGISTRY'
|
||||
const REGISTRY_VERSION = '1.28.0'
|
||||
const FALLBACK_VERSION = '2.108.0'
|
||||
|
||||
export const shouldPinGhcrRegistry = (
|
||||
installedVersion: string,
|
||||
configuredRegistry: string | undefined
|
||||
): boolean =>
|
||||
!configuredRegistry &&
|
||||
gte(installedVersion, REGISTRY_VERSION) &&
|
||||
lt(installedVersion, FALLBACK_VERSION)
|
||||
|
||||
/**
|
||||
* The main function for the action.
|
||||
@@ -47,8 +57,13 @@ export async function run(): Promise<void> {
|
||||
const determinedVersion = await determineInstalledVersion()
|
||||
core.setOutput('version', determinedVersion)
|
||||
|
||||
// Use GHCR mirror by default
|
||||
if (version.toLowerCase() === 'latest' || gte(version, '1.28.0')) {
|
||||
// Use GHCR for CLI versions without registry fallback support.
|
||||
if (
|
||||
shouldPinGhcrRegistry(
|
||||
determinedVersion.replace(/^supabase\s+/i, '').replace(/^v/i, ''),
|
||||
process.env[CLI_CONFIG_REGISTRY]
|
||||
)
|
||||
) {
|
||||
core.exportVariable(CLI_CONFIG_REGISTRY, 'ghcr.io')
|
||||
}
|
||||
} catch (error) {
|
||||
|
||||
Reference in New Issue
Block a user