80 lines
3.6 KiB
TypeScript
80 lines
3.6 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google LLC All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.io/license
|
|
*/
|
|
|
|
import {readFileSync} from 'fs';
|
|
import {join} from 'path';
|
|
|
|
import {ReleaseTrain} from '../../versioning/release-trains';
|
|
import {CutNextPrereleaseAction} from '../actions/cut-next-prerelease';
|
|
import {packageJsonPath} from '../constants';
|
|
|
|
import {expectStagingAndPublishWithCherryPick, expectStagingAndPublishWithoutCherryPick, parse, setupReleaseActionForTesting} from './test-utils';
|
|
|
|
describe('cut next pre-release action', () => {
|
|
it('should always be active regardless of release-trains', async () => {
|
|
expect(await CutNextPrereleaseAction.isActive()).toBe(true);
|
|
});
|
|
|
|
it('should cut a pre-release for the next branch if there is no FF/RC branch', async () => {
|
|
const action = setupReleaseActionForTesting(CutNextPrereleaseAction, {
|
|
releaseCandidate: null,
|
|
next: new ReleaseTrain('master', parse('10.2.0-next.0')),
|
|
latest: new ReleaseTrain('10.1.x', parse('10.1.2')),
|
|
});
|
|
|
|
await expectStagingAndPublishWithoutCherryPick(action, 'master', '10.2.0-next.1', 'next');
|
|
});
|
|
|
|
// This is test for a special case in the release tooling. Whenever we branch off for
|
|
// feature-freeze, we immediately bump the version in the `next` branch but do not publish
|
|
// it. This is because there are no new changes in the next branch that wouldn't be part of
|
|
// the branched-off feature-freeze release-train. Also while a FF/RC is active, we cannot
|
|
// publish versions to the NPM dist tag. This means that the version is later published, but
|
|
// still needs all the staging work (e.g. changelog). We special-case this by not incrementing
|
|
// the version if the version in the next branch has not been published yet.
|
|
it('should not bump version if current next version has not been published', async () => {
|
|
const action = setupReleaseActionForTesting(
|
|
CutNextPrereleaseAction, {
|
|
releaseCandidate: null,
|
|
next: new ReleaseTrain('master', parse('10.2.0-next.0')),
|
|
latest: new ReleaseTrain('10.1.x', parse('10.1.0')),
|
|
},
|
|
/* isNextPublishedToNpm */ false);
|
|
|
|
await expectStagingAndPublishWithoutCherryPick(action, 'master', '10.2.0-next.0', 'next');
|
|
|
|
const pkgJsonContents = readFileSync(join(action.testTmpDir, packageJsonPath), 'utf8');
|
|
const pkgJson = JSON.parse(pkgJsonContents);
|
|
expect(pkgJson.version).toBe('10.2.0-next.0', 'Expected version to not have changed.');
|
|
});
|
|
|
|
describe('with active feature-freeze', () => {
|
|
it('should create a proper new version and select correct branch', async () => {
|
|
const action = setupReleaseActionForTesting(CutNextPrereleaseAction, {
|
|
releaseCandidate: new ReleaseTrain('10.1.x', parse('10.1.0-next.4')),
|
|
next: new ReleaseTrain('master', parse('10.2.0-next.0')),
|
|
latest: new ReleaseTrain('10.0.x', parse('10.0.2')),
|
|
});
|
|
|
|
await expectStagingAndPublishWithCherryPick(action, '10.1.x', '10.1.0-next.5', 'next');
|
|
});
|
|
});
|
|
|
|
describe('with active release-candidate', () => {
|
|
it('should create a proper new version and select correct branch', async () => {
|
|
const action = setupReleaseActionForTesting(CutNextPrereleaseAction, {
|
|
releaseCandidate: new ReleaseTrain('10.1.x', parse('10.1.0-rc.0')),
|
|
next: new ReleaseTrain('master', parse('10.2.0-next.0')),
|
|
latest: new ReleaseTrain('10.0.x', parse('10.0.2')),
|
|
});
|
|
|
|
await expectStagingAndPublishWithCherryPick(action, '10.1.x', '10.1.0-rc.1', 'next');
|
|
});
|
|
});
|
|
});
|