Skip to content

Commit

Permalink
feat(cli): respect --no-auto-updates flag in CLI config (#7396)
Browse files Browse the repository at this point in the history
* feat: respect no-auto-updates flag in cli config

* test: add unit tests
  • Loading branch information
cngonzalez committed Aug 21, 2024
1 parent f53cd0e commit c83021e
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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

Expand Down
Original file line number Diff line number Diff line change
@@ -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)
})
})
27 changes: 27 additions & 0 deletions packages/sanity/src/_internal/cli/util/shouldAutoUpdate.ts
Original file line number Diff line number Diff line change
@@ -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
}

0 comments on commit c83021e

Please sign in to comment.