Skip to content

Commit 9b98c7e

Browse files
committed
Merge remote-tracking branch 'remotes/origin/master' into octogonz/heft-web-rig-revamp
2 parents 99777c9 + 7116b93 commit 9b98c7e

File tree

60 files changed

+1294
-631
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+1294
-631
lines changed

apps/rush-lib/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@microsoft/rush-lib",
3-
"version": "5.61.4",
3+
"version": "5.62.0",
44
"description": "A library for writing scripts that interact with the Rush tool",
55
"repository": {
66
"type": "git",

apps/rush-lib/src/api/VersionPolicy.ts

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ export class LockStepVersionPolicy extends VersionPolicy {
220220
private _version: semver.SemVer;
221221
// nextBump is probably not needed. It can be prerelease only.
222222
// Other types of bumps can be passed in as a parameter to bump method, so can identifier.
223-
private _nextBump: BumpType;
223+
private _nextBump: BumpType | undefined;
224224
private _mainProject: string | undefined;
225225

226226
/**
@@ -229,7 +229,10 @@ export class LockStepVersionPolicy extends VersionPolicy {
229229
public constructor(versionPolicyJson: ILockStepVersionJson) {
230230
super(versionPolicyJson);
231231
this._version = new semver.SemVer(versionPolicyJson.version);
232-
this._nextBump = Enum.getValueByKey(BumpType, versionPolicyJson.nextBump);
232+
this._nextBump =
233+
versionPolicyJson.nextBump !== undefined
234+
? Enum.getValueByKey(BumpType, versionPolicyJson.nextBump)
235+
: undefined;
233236
this._mainProject = versionPolicyJson.mainProject;
234237
}
235238

@@ -243,7 +246,7 @@ export class LockStepVersionPolicy extends VersionPolicy {
243246
/**
244247
* The type of bump for next bump.
245248
*/
246-
public get nextBump(): BumpType {
249+
public get nextBump(): BumpType | undefined {
247250
return this._nextBump;
248251
}
249252

@@ -266,10 +269,12 @@ export class LockStepVersionPolicy extends VersionPolicy {
266269
const json: ILockStepVersionJson = {
267270
policyName: this.policyName,
268271
definitionName: VersionPolicyDefinitionName[this.definitionName],
269-
version: this.version,
270-
nextBump: BumpType[this.nextBump]
272+
version: this.version
271273
};
272-
if (this._mainProject) {
274+
if (this._nextBump !== undefined) {
275+
json.nextBump = BumpType[this._nextBump];
276+
}
277+
if (this._mainProject !== undefined) {
273278
json.mainProject = this._mainProject;
274279
}
275280
return json;
@@ -302,7 +307,14 @@ export class LockStepVersionPolicy extends VersionPolicy {
302307
* @param identifier - Prerelease identifier if bump type is prerelease.
303308
*/
304309
public bump(bumpType?: BumpType, identifier?: string): void {
305-
this._version.inc(this._getReleaseType(bumpType || this.nextBump), identifier);
310+
const nextBump: BumpType | undefined = bumpType ?? this.nextBump;
311+
312+
if (nextBump === undefined) {
313+
// let change files drive version bump.
314+
return;
315+
}
316+
317+
this._version.inc(this._getReleaseType(nextBump), identifier);
306318
}
307319

308320
/**

apps/rush-lib/src/api/VersionPolicyConfiguration.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { JsonFile, JsonSchema, FileSystem } from '@rushstack/node-core-library';
66

77
import { VersionPolicy, BumpType, LockStepVersionPolicy } from './VersionPolicy';
88
import { RushConfigurationProject } from './RushConfigurationProject';
9+
import { EOL } from 'os';
910

1011
export interface IVersionPolicyJson {
1112
policyName: string;
@@ -17,7 +18,7 @@ export interface IVersionPolicyJson {
1718

1819
export interface ILockStepVersionJson extends IVersionPolicyJson {
1920
version: string;
20-
nextBump: string;
21+
nextBump?: string;
2122
mainProject?: string;
2223
}
2324

@@ -135,14 +136,18 @@ export class VersionPolicyConfiguration {
135136
* @param versionPolicyName - version policy name
136137
* @param newVersion - new version
137138
*/
138-
public update(versionPolicyName: string, newVersion: string): void {
139+
public update(versionPolicyName: string, newVersion: string, shouldCommit?: boolean): void {
139140
const policy: VersionPolicy | undefined = this.versionPolicies.get(versionPolicyName);
140141
if (!policy || !policy.isLockstepped) {
141142
throw new Error(`Lockstep Version policy with name "${versionPolicyName}" cannot be found`);
142143
}
143144
const lockStepVersionPolicy: LockStepVersionPolicy = policy as LockStepVersionPolicy;
145+
const previousVersion: string = lockStepVersionPolicy.version;
144146
if (lockStepVersionPolicy.update(newVersion)) {
145-
this._saveFile(true);
147+
console.log(
148+
`${EOL}Update version policy ${versionPolicyName} from ${previousVersion} to ${newVersion}`
149+
);
150+
this._saveFile(!!shouldCommit);
146151
}
147152
}
148153

apps/rush-lib/src/api/test/VersionPolicy.test.ts

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,29 @@ describe('VersionPolicy', () => {
1111
describe('LockStepVersion', () => {
1212
const filename: string = path.resolve(__dirname, 'jsonFiles', 'rushWithLockVersion.json');
1313
const versionPolicyConfig: VersionPolicyConfiguration = new VersionPolicyConfiguration(filename);
14-
let versionPolicy: VersionPolicy;
14+
let versionPolicy1: VersionPolicy;
15+
let versionPolicy2: VersionPolicy;
1516

1617
beforeEach(() => {
17-
versionPolicy = versionPolicyConfig.getVersionPolicy('testPolicy1');
18+
versionPolicy1 = versionPolicyConfig.getVersionPolicy('testPolicy1');
19+
versionPolicy2 = versionPolicyConfig.getVersionPolicy('testPolicy2');
1820
});
1921

2022
it('loads configuration.', () => {
21-
expect(versionPolicy).toBeInstanceOf(LockStepVersionPolicy);
22-
const lockStepVersionPolicy: LockStepVersionPolicy = versionPolicy as LockStepVersionPolicy;
23-
expect(lockStepVersionPolicy.version).toEqual('1.1.0');
24-
expect(lockStepVersionPolicy.nextBump).toEqual(BumpType.patch);
23+
expect(versionPolicy1).toBeInstanceOf(LockStepVersionPolicy);
24+
const lockStepVersionPolicy1: LockStepVersionPolicy = versionPolicy1 as LockStepVersionPolicy;
25+
expect(lockStepVersionPolicy1.version).toEqual('1.1.0');
26+
expect(lockStepVersionPolicy1.nextBump).toEqual(BumpType.patch);
27+
28+
expect(versionPolicy2).toBeInstanceOf(LockStepVersionPolicy);
29+
const lockStepVersionPolicy2: LockStepVersionPolicy = versionPolicy2 as LockStepVersionPolicy;
30+
expect(lockStepVersionPolicy2.version).toEqual('1.2.0');
31+
expect(lockStepVersionPolicy2.nextBump).toEqual(undefined);
2532
});
2633

2734
it('skips packageJson if version is already the locked step version', () => {
28-
const lockStepVersionPolicy: LockStepVersionPolicy = versionPolicy as LockStepVersionPolicy;
35+
expect(versionPolicy1).toBeInstanceOf(LockStepVersionPolicy);
36+
const lockStepVersionPolicy: LockStepVersionPolicy = versionPolicy1 as LockStepVersionPolicy;
2937
expect(
3038
lockStepVersionPolicy.ensure({
3139
name: 'a',
@@ -35,7 +43,8 @@ describe('VersionPolicy', () => {
3543
});
3644

3745
it('updates packageJson if version is lower than the locked step version', () => {
38-
const lockStepVersionPolicy: LockStepVersionPolicy = versionPolicy as LockStepVersionPolicy;
46+
expect(versionPolicy1).toBeInstanceOf(LockStepVersionPolicy);
47+
const lockStepVersionPolicy: LockStepVersionPolicy = versionPolicy1 as LockStepVersionPolicy;
3948
const expectedPackageJson: IPackageJson = {
4049
name: 'a',
4150
version: '1.1.0'
@@ -48,7 +57,8 @@ describe('VersionPolicy', () => {
4857
});
4958

5059
it('throws exception if version is higher than the locked step version', () => {
51-
const lockStepVersionPolicy: LockStepVersionPolicy = versionPolicy as LockStepVersionPolicy;
60+
expect(versionPolicy1).toBeInstanceOf(LockStepVersionPolicy);
61+
const lockStepVersionPolicy: LockStepVersionPolicy = versionPolicy1 as LockStepVersionPolicy;
5262
const originalPackageJson: IPackageJson = {
5363
name: 'a',
5464
version: '2.1.0'
@@ -59,7 +69,8 @@ describe('VersionPolicy', () => {
5969
});
6070

6171
it('update version with force if version is higher than the locked step version', () => {
62-
const lockStepVersionPolicy: LockStepVersionPolicy = versionPolicy as LockStepVersionPolicy;
72+
expect(versionPolicy1).toBeInstanceOf(LockStepVersionPolicy);
73+
const lockStepVersionPolicy: LockStepVersionPolicy = versionPolicy1 as LockStepVersionPolicy;
6374
const originalPackageJson: IPackageJson = {
6475
name: 'a',
6576
version: '2.1.0'
@@ -71,22 +82,34 @@ describe('VersionPolicy', () => {
7182
expect(lockStepVersionPolicy.ensure(originalPackageJson, true)).toEqual(expectedPackageJson);
7283
});
7384

85+
it('doesnt bump version if nextBump is undefined', () => {
86+
expect(versionPolicy1).toBeInstanceOf(LockStepVersionPolicy);
87+
const lockStepVersionPolicy: LockStepVersionPolicy = versionPolicy2 as LockStepVersionPolicy;
88+
expect(lockStepVersionPolicy.nextBump).toEqual(undefined);
89+
lockStepVersionPolicy.bump();
90+
expect(lockStepVersionPolicy.version).toEqual('1.2.0');
91+
expect(lockStepVersionPolicy.nextBump).toEqual(undefined);
92+
});
93+
7494
it('bumps version for preminor release', () => {
75-
const lockStepVersionPolicy: LockStepVersionPolicy = versionPolicy as LockStepVersionPolicy;
95+
expect(versionPolicy1).toBeInstanceOf(LockStepVersionPolicy);
96+
const lockStepVersionPolicy: LockStepVersionPolicy = versionPolicy1 as LockStepVersionPolicy;
7697
lockStepVersionPolicy.bump(BumpType.preminor, 'pr');
7798
expect(lockStepVersionPolicy.version).toEqual('1.2.0-pr.0');
7899
expect(lockStepVersionPolicy.nextBump).toEqual(BumpType.patch);
79100
});
80101

81102
it('bumps version for minor release', () => {
82-
const lockStepVersionPolicy: LockStepVersionPolicy = versionPolicy as LockStepVersionPolicy;
103+
expect(versionPolicy1).toBeInstanceOf(LockStepVersionPolicy);
104+
const lockStepVersionPolicy: LockStepVersionPolicy = versionPolicy1 as LockStepVersionPolicy;
83105
lockStepVersionPolicy.bump(BumpType.minor);
84106
expect(lockStepVersionPolicy.version).toEqual('1.2.0');
85107
expect(lockStepVersionPolicy.nextBump).toEqual(BumpType.patch);
86108
});
87109

88110
it('can update version directly', () => {
89-
const lockStepVersionPolicy: LockStepVersionPolicy = versionPolicy as LockStepVersionPolicy;
111+
expect(versionPolicy1).toBeInstanceOf(LockStepVersionPolicy);
112+
const lockStepVersionPolicy: LockStepVersionPolicy = versionPolicy1 as LockStepVersionPolicy;
90113
const newVersion: string = '1.5.6-beta.0';
91114
lockStepVersionPolicy.update(newVersion);
92115
expect(lockStepVersionPolicy.version).toEqual(newVersion);

apps/rush-lib/src/api/test/jsonFiles/rushWithLockVersion.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,10 @@
44
"definitionName": "lockStepVersion",
55
"version": "1.1.0",
66
"nextBump": "patch"
7+
},
8+
{
9+
"policyName": "testPolicy2",
10+
"definitionName": "lockStepVersion",
11+
"version": "1.2.0"
712
}
813
]

apps/rush-lib/src/cli/actions/ChangeAction.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ export class ChangeAction extends BaseRushAction {
7373
'Examples are: Modifying a private API or fixing a bug in the logic ' +
7474
'of how an existing API works.',
7575
'',
76+
"NONE - these are changes that are backwards and forwards compatible and don't require an immediate release. " +
77+
'Examples are: Modifying dev tooling configuration like eslint.',
78+
'',
7679
'HOTFIX (EXPERIMENTAL) - these are changes that are hotfixes targeting a ' +
7780
'specific older version of the package. When a hotfix change is added, ' +
7881
'other changes will not be able to increment the version number. ' +
@@ -150,7 +153,7 @@ export class ChangeAction extends BaseRushAction {
150153

151154
this._bulkChangeBumpTypeParameter = this.defineChoiceParameter({
152155
parameterLongName: BULK_BUMP_TYPE_LONG_NAME,
153-
alternatives: [...Object.keys(this._getBumpOptions()), ChangeType[ChangeType.none]],
156+
alternatives: [...Object.keys(this._getBumpOptions())],
154157
description: `The bump type to apply to all changed projects if the ${BULK_LONG_NAME} flag is provided.`
155158
});
156159
}
@@ -496,7 +499,9 @@ export class ChangeAction extends BaseRushAction {
496499
'major - for changes that break compatibility, e.g. removing an API',
497500
[ChangeType[ChangeType.minor]]: 'minor - for backwards compatible changes, e.g. adding a new API',
498501
[ChangeType[ChangeType.patch]]:
499-
'patch - for changes that do not affect compatibility, e.g. fixing a bug'
502+
'patch - for changes that do not affect compatibility, e.g. fixing a bug',
503+
[ChangeType[ChangeType.none]]:
504+
'none - for changes that do not need an immediate release, e.g. eslint config change'
500505
};
501506

502507
if (packageName) {
@@ -506,8 +511,11 @@ export class ChangeAction extends BaseRushAction {
506511

507512
if (versionPolicy) {
508513
if (versionPolicy.definitionName === VersionPolicyDefinitionName.lockStepVersion) {
509-
// No need to ask for bump types if project is lockstep versioned.
510-
bumpOptions = {};
514+
const lockStepPolicy: LockStepVersionPolicy = versionPolicy as LockStepVersionPolicy;
515+
// No need to ask for bump types if project is lockstep versioned with an explicit nextBump
516+
if (lockStepPolicy.nextBump !== undefined) {
517+
bumpOptions = {};
518+
}
511519
} else if (versionPolicy.definitionName === VersionPolicyDefinitionName.individualVersion) {
512520
const individualPolicy: IndividualVersionPolicy = versionPolicy as IndividualVersionPolicy;
513521
if (individualPolicy.lockedMajor !== undefined) {

apps/rush-lib/src/cli/actions/PublishAction.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ export class PublishAction extends BaseRushAction {
278278
);
279279

280280
if (changeManager.hasChanges()) {
281-
const orderedChanges: IChangeInfo[] = changeManager.changes;
281+
const orderedChanges: IChangeInfo[] = changeManager.packageChanges;
282282
const tempBranchName: string = `publish-${Date.now()}`;
283283

284284
// Make changes in temp branch.

apps/rush-lib/src/cli/actions/VersionAction.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,8 +175,7 @@ export class VersionAction extends BaseRushAction {
175175
}
176176

177177
if (newVersion) {
178-
console.log(`Update version policy ${policy.policyName} from ${policy.version} to ${newVersion}`);
179-
versionConfig.update(this._versionPolicy.value, newVersion);
178+
versionConfig.update(this._versionPolicy.value, newVersion, true);
180179
}
181180
} else {
182181
throw new Error(

apps/rush-lib/src/cli/test/__snapshots__/CommandLineHelp.test.ts.snap

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -260,11 +260,13 @@ that is exported. MINOR - these are changes that are backwards compatible
260260
(but not forwards compatible). Examples are: adding a new public API or
261261
adding an optional parameter to a public API PATCH - these are changes that
262262
are backwards and forwards compatible. Examples are: Modifying a private API
263-
or fixing a bug in the logic of how an existing API works. HOTFIX
264-
(EXPERIMENTAL) - these are changes that are hotfixes targeting a specific
265-
older version of the package. When a hotfix change is added, other changes
266-
will not be able to increment the version number. Enable this feature by
267-
setting 'hotfixChangeEnabled' in your rush.json.
263+
or fixing a bug in the logic of how an existing API works. NONE - these are
264+
changes that are backwards and forwards compatible and don't require an
265+
immediate release. Examples are: Modifying dev tooling configuration like
266+
eslint. HOTFIX (EXPERIMENTAL) - these are changes that are hotfixes targeting
267+
a specific older version of the package. When a hotfix change is added, other
268+
changes will not be able to increment the version number. Enable this feature
269+
by setting 'hotfixChangeEnabled' in your rush.json.
268270
269271
Optional arguments:
270272
-h, --help Show this help message and exit.

0 commit comments

Comments
 (0)