Skip to content

Commit

Permalink
refactor: remote versions of latest and alpha can be selected
Browse files Browse the repository at this point in the history
  • Loading branch information
a145789 committed Nov 17, 2023
1 parent ae65a60 commit 8dea243
Showing 1 changed file with 36 additions and 41 deletions.
77 changes: 36 additions & 41 deletions src/release.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { createSpinner } from 'nanospinner'
import fse from 'fs-extra'
import { execa } from 'execa'
import { type ExecaReturnBase, execa } from 'execa'
import logger from './logger'
import semver from 'semver'
import { glob } from 'glob'
Expand All @@ -15,56 +15,51 @@ const { prompt } = inquirer
const releaseTypes = ['premajor', 'preminor', 'prepatch', 'major', 'minor', 'patch'] as const

async function getRemoteVersion() {
const name = 'Please select the release type'
const { name: packageName, version } = readJSONSync(resolve(cwd, 'package.json'))

const s = createSpinner('Get Remote version...').start()
const choices = (
(
await Promise.allSettled([
execa('npm', ['view', `${packageName}@latest`, 'version']),
execa('npm', ['view', `${packageName}@alpha`, 'version']),
])
).filter((res) => res.status === 'fulfilled') as PromiseFulfilledResult<ExecaReturnBase<string>>[]
).map((res) => res.value.stdout)
s.stop()

if (choices.length) {
const name = 'Please select the version'
const ret = await prompt([
{
name,
type: 'list',
choices,
},
])

return ret[name] as string
}

const name = 'Get remote version error, if this is the first release, please select'
const ret = await prompt([
{
name,
type: 'list',
choices: [
{
name: 'latest',
value: 'latest',
name: 'Use default version 0.0.0',
value: '0.0.0',
},
{
name: 'alpha',
value: 'alpha',
name: 'Use package.json version',
value: version,
},
],
},
])

const releaseType = ret[name] as string

const s = createSpinner('Get Remote version').start()
const { name: packageName, version } = readJSONSync(resolve(cwd, 'package.json'))
try {
const { stdout } = await execa('npm', ['view', `${packageName}@${releaseType}`, 'version'])
s.stop()
return stdout
} catch (error: any) {
s.stop()
logger.error(error.toString())

const name = 'Get remote version error, if this is the first release, please select'
const ret = await prompt([
{
name,
type: 'list',
choices: [
{
name: 'Use default version 0.0.0',
value: '0.0.0',
},
{
name: 'Use package.json version',
value: version,
},
],
},
])

return ret[name] as string
}
return ret[name] as string
}

async function isWorktreeEmpty() {
Expand Down Expand Up @@ -200,9 +195,6 @@ export async function release(options: ReleaseCommandOptions) {
return
}

const currentVersion = await getRemoteVersion()
logger.title(`current version: ${currentVersion}`)

if (!(await confirmRefs(options.remote))) {
return
}
Expand All @@ -211,6 +203,9 @@ export async function release(options: ReleaseCommandOptions) {
return
}

const currentVersion = await getRemoteVersion()
logger.title(`current version: ${currentVersion}`)

const { expectVersion, isPreRelease } = await getExpectVersion(currentVersion)

if (!(await confirmVersion(currentVersion, expectVersion))) {
Expand Down

0 comments on commit 8dea243

Please sign in to comment.