diff --git a/packages/sanity/src/_internal/cli/actions/build/buildAction.ts b/packages/sanity/src/_internal/cli/actions/build/buildAction.ts index abdf91d3100..62b9b8fe8d2 100644 --- a/packages/sanity/src/_internal/cli/actions/build/buildAction.ts +++ b/packages/sanity/src/_internal/cli/actions/build/buildAction.ts @@ -16,6 +16,7 @@ import {BuildTrace} from './build.telemetry' import {buildVendorDependencies} from '../../server/buildVendorDependencies' import {compareStudioDependencyVersions} from '../../util/compareStudioDependencyVersions' import {getAutoUpdateImportMap} from '../../util/getAutoUpdatesImportMap' +import {shouldAutoUpdate} from '../../util/shouldAutoUpdate' const rimraf = promisify(rimrafCallback) @@ -58,9 +59,7 @@ export default async function buildSanityStudio( return {didCompile: false} } - const autoUpdatesEnabled = - flags['auto-updates'] || - (cliConfig && 'autoUpdates' in cliConfig && cliConfig.autoUpdates === true) + const autoUpdatesEnabled = shouldAutoUpdate({flags, cliConfig}) // Get the version without any tags if any const coercedSanityVersion = semver.coerce(installedSanityVersion)?.version diff --git a/packages/sanity/src/_internal/cli/actions/deploy/deployAction.ts b/packages/sanity/src/_internal/cli/actions/deploy/deployAction.ts index 5a773d52b71..364aec55735 100644 --- a/packages/sanity/src/_internal/cli/actions/deploy/deployAction.ts +++ b/packages/sanity/src/_internal/cli/actions/deploy/deployAction.ts @@ -5,6 +5,7 @@ import zlib from 'node:zlib' import {type CliCommandArguments, type CliCommandContext} from '@sanity/cli' import tar from 'tar-fs' +import {shouldAutoUpdate} from '../../util/shouldAutoUpdate' import buildSanityStudio, {type BuildSanityStudioCommandFlags} from '../build/buildAction' import { checkDir, @@ -29,10 +30,8 @@ export default async function deployStudioAction( const flags = {build: true, ...args.extOptions} const customSourceDir = args.argsWithoutOptions[0] const sourceDir = path.resolve(process.cwd(), customSourceDir || path.join(workDir, 'dist')) - const isAutoUpdating = - flags['auto-updates'] || - (cliConfig && 'autoUpdates' in cliConfig && cliConfig.autoUpdates === true) || - false + const isAutoUpdating = shouldAutoUpdate({flags, cliConfig}) + const installedSanityVersion = await getInstalledSanityVersion() const configStudioHost = cliConfig && 'studioHost' in cliConfig && cliConfig.studioHost diff --git a/packages/sanity/src/_internal/cli/util/__tests__/shouldAutoUpdate.test.ts b/packages/sanity/src/_internal/cli/util/__tests__/shouldAutoUpdate.test.ts new file mode 100644 index 00000000000..5084ab44953 --- /dev/null +++ b/packages/sanity/src/_internal/cli/util/__tests__/shouldAutoUpdate.test.ts @@ -0,0 +1,40 @@ +import {describe, expect, it} from '@jest/globals' +import {type CliConfig} from '@sanity/cli' + +import {type BuildSanityStudioCommandFlags} from '../../actions/build/buildAction' +import {shouldAutoUpdate} from '../shouldAutoUpdate' + +describe('shouldAutoUpdate', () => { + it('should return true when flags["auto-updates"] is true', () => { + const flags: BuildSanityStudioCommandFlags = {'auto-updates': true} + expect(shouldAutoUpdate({flags})).toBe(true) + }) + + it('should return false when flags["auto-updates"] is false', () => { + const flags: BuildSanityStudioCommandFlags = {'auto-updates': false} + expect(shouldAutoUpdate({flags})).toBe(false) + }) + + it('should return true when cliConfig.autoUpdates is true and flags["auto-updates"] is not set', () => { + const flags: BuildSanityStudioCommandFlags = {} + const cliConfig: CliConfig = {autoUpdates: true} + expect(shouldAutoUpdate({flags, cliConfig})).toBe(true) + }) + + it('should return false when cliConfig.autoUpdates is false and flags["auto-updates"] is not set', () => { + const flags: BuildSanityStudioCommandFlags = {} + const cliConfig: CliConfig = {autoUpdates: false} + expect(shouldAutoUpdate({flags, cliConfig})).toBe(false) + }) + + it('should return false when both flags["auto-updates"] and cliConfig.autoUpdates are not set', () => { + const flags: BuildSanityStudioCommandFlags = {} + expect(shouldAutoUpdate({flags})).toBe(false) + }) + + it('should prioritize flags over cliConfig when both are set', () => { + const flags: BuildSanityStudioCommandFlags = {'auto-updates': false} + const cliConfig: CliConfig = {autoUpdates: true} + expect(shouldAutoUpdate({flags, cliConfig})).toBe(false) + }) +}) diff --git a/packages/sanity/src/_internal/cli/util/shouldAutoUpdate.ts b/packages/sanity/src/_internal/cli/util/shouldAutoUpdate.ts new file mode 100644 index 00000000000..2c6d547af1f --- /dev/null +++ b/packages/sanity/src/_internal/cli/util/shouldAutoUpdate.ts @@ -0,0 +1,27 @@ +import {type CliConfig} from '@sanity/cli' + +import {type BuildSanityStudioCommandFlags} from '../actions/build/buildAction' + +interface AutoUpdateSources { + flags: BuildSanityStudioCommandFlags + cliConfig?: CliConfig +} + +/** + * Compares parameters from various sources to determine whether or not to auto-update + * @param sources - The sources of the auto-update parameter, including CLI flags and the CLI config + * @returns boolean + * @internal + */ +export function shouldAutoUpdate({flags, cliConfig}: AutoUpdateSources): boolean { + // cli flags (for example, '--no-auto-updates') should take precedence + if ('auto-updates' in flags) { + return Boolean(flags['auto-updates']) + } + + if (cliConfig && 'autoUpdates' in cliConfig) { + return Boolean(cliConfig.autoUpdates) + } + + return false +}