|
8 | 8 | // tslint:disable:no-implicit-dependencies
|
9 | 9 | import { logging, tags } from '@angular-devkit/core';
|
10 | 10 | import { spawnSync } from 'child_process';
|
| 11 | +import * as semver from 'semver'; |
11 | 12 | import { packages } from '../lib/packages';
|
12 | 13 | import build from './build';
|
13 | 14 |
|
14 | 15 |
|
15 | 16 | export interface PublishArgs {
|
16 | 17 | tag?: string;
|
17 | 18 | branchCheck?: boolean;
|
| 19 | + versionCheck?: boolean; |
18 | 20 | }
|
19 | 21 |
|
20 | 22 |
|
@@ -51,11 +53,34 @@ function _branchCheck(args: PublishArgs, logger: logging.Logger) {
|
51 | 53 | }
|
52 | 54 |
|
53 | 55 |
|
| 56 | +function _versionCheck(args: PublishArgs, logger: logging.Logger) { |
| 57 | + logger.info('Checking version...'); |
| 58 | + // Find _any_ version that's beta or RC. |
| 59 | + let betaOrRc = false; |
| 60 | + let version = ''; |
| 61 | + Object.keys(packages).forEach((name: string) => { |
| 62 | + // If there's _ANY_ prerelease information, it's on. |
| 63 | + if (semver.prerelease(packages[name].version)) { |
| 64 | + betaOrRc = true; |
| 65 | + version = packages[name].version; |
| 66 | + } |
| 67 | + }); |
| 68 | + |
| 69 | + if (betaOrRc && args.tag !== 'next') { |
| 70 | + throw new Error(tags.oneLine` |
| 71 | + Releasing version ${JSON.stringify(version)} requires a next tag. |
| 72 | + Use --versionCheck=false to skip this check. |
| 73 | + `); |
| 74 | + } |
| 75 | +} |
| 76 | + |
54 | 77 | export default async function (args: PublishArgs, logger: logging.Logger) {
|
55 | 78 | if (args.branchCheck === undefined || args.branchCheck === true) {
|
56 | 79 | _branchCheck(args, logger);
|
57 | 80 | }
|
58 |
| - |
| 81 | + if (args.versionCheck === undefined || args.versionCheck === true) { |
| 82 | + _versionCheck(args, logger); |
| 83 | + } |
59 | 84 |
|
60 | 85 | logger.info('Building...');
|
61 | 86 | await build({}, logger.createChild('build'));
|
|
0 commit comments