|
|
@@ -1,14 +1,15 @@
|
|
|
-import execa from 'execa';
|
|
|
+import execa = require('execa');
|
|
|
import { execTask } from '../utils/execTask';
|
|
|
import { changeCwdToGrafanaUiDist, changeCwdToGrafanaUi, restoreCwd } from '../utils/cwd';
|
|
|
-import semver from 'semver';
|
|
|
-import inquirer from 'inquirer';
|
|
|
+import { ReleaseType, inc } from 'semver';
|
|
|
+import { prompt } from 'inquirer';
|
|
|
import chalk from 'chalk';
|
|
|
import { useSpinner } from '../utils/useSpinner';
|
|
|
import { savePackage, buildTask, clean } from './grafanaui.build';
|
|
|
import { TaskRunner, Task } from './task';
|
|
|
|
|
|
type VersionBumpType = 'prerelease' | 'patch' | 'minor' | 'major';
|
|
|
+
|
|
|
interface ReleaseTaskOptions {
|
|
|
publishToNpm: boolean;
|
|
|
usePackageJsonVersion: boolean;
|
|
|
@@ -16,43 +17,29 @@ interface ReleaseTaskOptions {
|
|
|
}
|
|
|
|
|
|
const promptBumpType = async () => {
|
|
|
- return inquirer.prompt<{ type: VersionBumpType }>([
|
|
|
+ return prompt<{ type: VersionBumpType }>([
|
|
|
{
|
|
|
type: 'list',
|
|
|
message: 'Select version bump',
|
|
|
name: 'type',
|
|
|
choices: ['prerelease', 'patch', 'minor', 'major'],
|
|
|
- validate: answer => {
|
|
|
- if (answer.length < 1) {
|
|
|
- return 'You must choose something';
|
|
|
- }
|
|
|
-
|
|
|
- return true;
|
|
|
- },
|
|
|
},
|
|
|
]);
|
|
|
};
|
|
|
|
|
|
const promptPrereleaseId = async (message = 'Is this a prerelease?', allowNo = true) => {
|
|
|
- return inquirer.prompt<{ id: string }>([
|
|
|
+ return prompt<{ id: string }>([
|
|
|
{
|
|
|
type: 'list',
|
|
|
message: message,
|
|
|
name: 'id',
|
|
|
choices: allowNo ? ['no', 'alpha', 'beta'] : ['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 }>([
|
|
|
+ return prompt<{ confirmed: boolean }>([
|
|
|
{
|
|
|
type: 'confirm',
|
|
|
message: message || 'Is that correct?',
|
|
|
@@ -64,11 +51,18 @@ const promptConfirm = async (message?: string) => {
|
|
|
|
|
|
// Since Grafana core depends on @grafana/ui highly, we run full check before release
|
|
|
const runChecksAndTests = async () =>
|
|
|
+ // @ts-ignore
|
|
|
useSpinner<void>(`Running checks and tests`, async () => {
|
|
|
- await execa('npm', ['run', 'test']);
|
|
|
+ try {
|
|
|
+ await execa('npm', ['run', 'test']);
|
|
|
+ } catch (e) {
|
|
|
+ console.log(e);
|
|
|
+ throw e;
|
|
|
+ }
|
|
|
})();
|
|
|
|
|
|
const bumpVersion = (version: string) =>
|
|
|
+ // @ts-ignore
|
|
|
useSpinner<void>(`Saving version ${version} to package.json`, async () => {
|
|
|
changeCwdToGrafanaUi();
|
|
|
await execa('npm', ['version', version]);
|
|
|
@@ -79,6 +73,7 @@ const bumpVersion = (version: string) =>
|
|
|
})();
|
|
|
|
|
|
const publishPackage = (name: string, version: string) =>
|
|
|
+ // @ts-ignore
|
|
|
useSpinner<void>(`Publishing ${name} @ ${version} to npm registry...`, async () => {
|
|
|
changeCwdToGrafanaUiDist();
|
|
|
await execa('npm', ['publish', '--access', 'public']);
|
|
|
@@ -95,6 +90,7 @@ const ensureMasterBranch = async () => {
|
|
|
};
|
|
|
|
|
|
const prepareVersionCommitAndPush = async (version: string) =>
|
|
|
+ // @ts-ignore
|
|
|
useSpinner<void>('Commiting and pushing @grafana/ui version update', async () => {
|
|
|
await execa.stdout('git', ['commit', '-a', '-m', `Upgrade @grafana/ui version to v${version}`]);
|
|
|
await execa.stdout('git', ['push']);
|
|
|
@@ -106,6 +102,7 @@ const releaseTaskRunner: TaskRunner<ReleaseTaskOptions> = async ({
|
|
|
createVersionCommit,
|
|
|
}) => {
|
|
|
changeCwdToGrafanaUi();
|
|
|
+ // @ts-ignore
|
|
|
await clean(); // Clean previous build if exists
|
|
|
restoreCwd();
|
|
|
|
|
|
@@ -117,7 +114,7 @@ const releaseTaskRunner: TaskRunner<ReleaseTaskOptions> = async ({
|
|
|
|
|
|
await runChecksAndTests();
|
|
|
|
|
|
- await execTask(buildTask)();
|
|
|
+ await execTask(buildTask)({} as any);
|
|
|
|
|
|
let releaseConfirmed = false;
|
|
|
let nextVersion;
|
|
|
@@ -133,13 +130,13 @@ const releaseTaskRunner: TaskRunner<ReleaseTaskOptions> = async ({
|
|
|
console.log(type);
|
|
|
if (type === 'prerelease') {
|
|
|
const { id } = await promptPrereleaseId('What kind of prerelease?', false);
|
|
|
- nextVersion = semver.inc(pkg.version, type, id);
|
|
|
+ nextVersion = inc(pkg.version, type, id as any);
|
|
|
} else {
|
|
|
const { id } = await promptPrereleaseId();
|
|
|
if (id !== 'no') {
|
|
|
- nextVersion = semver.inc(pkg.version, `pre${type}`, id);
|
|
|
+ nextVersion = inc(pkg.version, `pre${type}` as ReleaseType, id as any);
|
|
|
} else {
|
|
|
- nextVersion = semver.inc(pkg.version, type);
|
|
|
+ nextVersion = inc(pkg.version, type as ReleaseType);
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
@@ -190,6 +187,4 @@ const releaseTaskRunner: TaskRunner<ReleaseTaskOptions> = async ({
|
|
|
}
|
|
|
};
|
|
|
|
|
|
-export const releaseTask = new Task<ReleaseTaskOptions>();
|
|
|
-releaseTask.setName('@grafana/ui release');
|
|
|
-releaseTask.setRunner(releaseTaskRunner);
|
|
|
+export const releaseTask = new Task<ReleaseTaskOptions>('@grafana/ui release', releaseTaskRunner);
|