| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- import execa from 'execa';
- import { Task } from '..';
- import { execTask } from '../utils/execTask';
- import { changeCwdToGrafanaUiDist, changeCwdToGrafanaUi } from '../utils/cwd';
- import semver from 'semver';
- import inquirer from 'inquirer';
- import chalk from 'chalk';
- import { startSpinner } from '../utils/startSpinner';
- import { savePackage } from './grafanaui.build';
- type VersionBumpType = 'patch' | 'minor' | 'major';
- const promptBumpType = async () => {
- return inquirer.prompt<{ type: VersionBumpType }>([
- {
- type: 'list',
- message: 'Select version bump',
- name: 'type',
- choices: ['patch', 'minor', 'major'],
- validate: answer => {
- if (answer.length < 1) {
- return 'You must choose something';
- }
- return true;
- },
- },
- ]);
- };
- const promptPrereleaseId = async () => {
- return inquirer.prompt<{ id: string }>([
- {
- type: 'list',
- message: 'Is this a prerelease?',
- name: 'id',
- choices: ['no', 'alpha', 'beta'],
- validate: answer => {
- if (answer.length < 1) {
- return 'You must choose something';
- }
- return true;
- },
- },
- ]);
- };
- const promptConfirm = async (message?: string) => {
- return inquirer.prompt<{ confirmed: boolean }>([
- {
- type: 'confirm',
- message: message || 'Is that correct?',
- name: 'confirmed',
- default: false,
- },
- ]);
- };
- const bumpVersion = async (version: string) => {
- const spinner = startSpinner(`Saving version ${version} to package.json`);
- changeCwdToGrafanaUi();
- try {
- await execa('npm', ['version', version]);
- spinner.succeed();
- } catch (e) {
- console.log(e);
- spinner.fail();
- }
- changeCwdToGrafanaUiDist();
- const pkg = require(`${process.cwd()}/package.json`);
- pkg.version = version;
- await savePackage(`${process.cwd()}/package.json`, pkg);
- };
- const publishPackage = async (name: string, version: string) => {
- changeCwdToGrafanaUiDist();
- console.log(chalk.yellowBright.bold(`\nReview dist package.json before proceeding!\n`));
- const { confirmed } = await promptConfirm('Are you ready to publish to npm?');
- if (!confirmed) {
- process.exit();
- }
- const spinner = startSpinner(`Publishing ${name} @ ${version} to npm registry...`);
- try {
- await execa('npm', ['publish']);
- spinner.succeed();
- } catch (e) {
- console.log(e);
- spinner.fail();
- process.exit(1);
- }
- };
- const releaseTask: Task<void> = async () => {
- await execTask('grafanaui.build');
- let releaseConfirmed = false;
- let nextVersion;
- changeCwdToGrafanaUiDist();
- const pkg = require(`${process.cwd()}/package.json`);
- console.log(`Current version: ${pkg.version}`);
- do {
- const { type } = await promptBumpType();
- const { id } = await promptPrereleaseId();
- if (id !== 'no') {
- nextVersion = semver.inc(pkg.version, `pre${type}`, id);
- } else {
- nextVersion = semver.inc(pkg.version, type);
- }
- console.log(chalk.yellowBright.bold(`You are going to release a new version of ${pkg.name}`));
- console.log(chalk.green(`Version bump: ${pkg.version} ->`), chalk.bold.yellowBright(`${nextVersion}`));
- const { confirmed } = await promptConfirm();
- releaseConfirmed = confirmed;
- } while (!releaseConfirmed);
- await bumpVersion(nextVersion);
- await publishPackage(pkg.name, nextVersion);
- console.log(chalk.green(`\nVersion ${nextVersion} of ${pkg.name} succesfully released!`));
- console.log(chalk.yellow(`\nUpdated @grafana/ui/package.json with version bump created - COMMIT THIS FILE!`));
- };
- export default releaseTask;
|