regit-cli
Version:
git helper cli
66 lines (53 loc) • 1.69 kB
text/typescript
import { Command } from 'commander'
import { branchPreview } from '../../const.js'
import {
assertCurrentBranchIsClean,
mergeBranch,
pushBranch,
warmupGitRepo,
} from '../../services/gitHelpers.js'
import {
assertPreviewExists,
promptSelectSinglePreview,
} from '../../services/previewHelpers.js'
import {
promptSelectNextVersion,
startRelease,
} from '../../services/releaseHelpers.js'
import { logger } from '../../services/logger.js'
const releasePreviewWithName = async (name: string) => {
await warmupGitRepo()
assertPreviewExists(name)
const previewBranchName = `${branchPreview}${name}`
const versionToUse = await promptSelectNextVersion(
'What version do you want to release?'
)
const { name: releaseBranchName } = await startRelease(versionToUse)
await mergeBranch(previewBranchName)
logger.success(
`Preview ${previewBranchName} merged into ${releaseBranchName}`
)
await pushBranch(releaseBranchName)
}
const releasePreviewWithPrompt = async () => {
const selectedPreview = await promptSelectSinglePreview(
'Select preview to release'
)
const previewName = selectedPreview.replace(branchPreview, '')
await releasePreviewWithName(previewName)
}
const action = async (name?: string) => {
await assertCurrentBranchIsClean()
if (name) {
await releasePreviewWithName(name)
} else {
await releasePreviewWithPrompt()
}
}
export default (program: Command) => {
program
.command('release')
.argument('[name]', 'Name')
.description('Create a release branch from a preview branch')
.action(action)
}