mirror of
https://github.com/PaulHatch/semantic-version.git
synced 2026-04-12 02:34:18 +00:00
Add "pre-release" mode (MINOR)
This commit is contained in:
parent
8b3b8f89c6
commit
ddf8faf6a4
11 changed files with 93 additions and 5 deletions
|
|
@ -26,4 +26,6 @@ export class ActionConfig {
|
|||
public searchCommitBody: boolean = false;
|
||||
/** The output method used to generate list of users, 'csv' or 'json'. Default is 'csv'. */
|
||||
public userFormatType: string = "csv";
|
||||
/** Prevents pre-v1.0.0 version from automatically incrementing the major version. If enabled, when the major version is 0, major releases will be treated as minor and minor as patch. Note that the versionType output is unchanged. */
|
||||
public enablePrereleaseMode: boolean = false;
|
||||
}
|
||||
|
|
@ -836,4 +836,34 @@ test('Prerelease tags are ignored on current commit', async () => {
|
|||
await validate('1.1.0+3');
|
||||
repo.makeCommit(`Commit ${i++}`);
|
||||
await validate('1.1.0+4');
|
||||
}, 15000);
|
||||
|
||||
test('Pre-release mode does not update major version if major version is 0', async () => {
|
||||
const repo = createTestRepo({ tagPrefix: '', versionFormat: "${major}.${minor}.${patch}", enablePrereleaseMode: true });
|
||||
|
||||
repo.makeCommit('Initial Commit');
|
||||
expect(( await repo.runAction()).formattedVersion).toBe('0.0.1');
|
||||
repo.makeCommit('Second Commit (MINOR)');
|
||||
expect(( await repo.runAction()).formattedVersion).toBe('0.0.1');
|
||||
repo.makeCommit('Third Commit (MAJOR)');
|
||||
expect(( await repo.runAction()).formattedVersion).toBe('0.1.0');
|
||||
repo.exec('git tag 0.1.0');
|
||||
repo.makeCommit('Fourth Commit (MAJOR)');
|
||||
expect(( await repo.runAction()).formattedVersion).toBe('0.2.0');
|
||||
}, 15000);
|
||||
|
||||
test('Pre-release mode updates major version if major version is not 0', async () => {
|
||||
const repo = createTestRepo({ tagPrefix: '', versionFormat: "${major}.${minor}.${patch}", enablePrereleaseMode: true });
|
||||
|
||||
repo.makeCommit('Initial Commit');
|
||||
repo.exec('git tag 1.0.0');
|
||||
repo.makeCommit('Second Commit');
|
||||
expect(( await repo.runAction()).formattedVersion).toBe('1.0.1');
|
||||
repo.makeCommit('Third Commit (MINOR)');
|
||||
expect(( await repo.runAction()).formattedVersion).toBe('1.1.0');
|
||||
repo.makeCommit('Fourth Commit (MAJOR)');
|
||||
expect(( await repo.runAction()).formattedVersion).toBe('2.0.0');
|
||||
repo.exec('git tag 2.0.0');
|
||||
repo.makeCommit('Fifth Commit (MAJOR)');
|
||||
expect(( await repo.runAction()).formattedVersion).toBe('3.0.0');
|
||||
}, 15000);
|
||||
|
|
@ -48,7 +48,8 @@ export async function run() {
|
|||
namespace: core.getInput('namespace'),
|
||||
bumpEachCommit: core.getInput('bump_each_commit') === 'true',
|
||||
searchCommitBody: core.getInput('search_commit_body') === 'true',
|
||||
userFormatType: core.getInput('user_format_type')
|
||||
userFormatType: core.getInput('user_format_type'),
|
||||
enablePrereleaseMode: core.getInput('enable_prerelease_mode') === 'true',
|
||||
};
|
||||
|
||||
if (config.versionFormat === '' && core.getInput('format') !== '') {
|
||||
|
|
|
|||
|
|
@ -10,11 +10,13 @@ export class DefaultVersionClassifier implements VersionClassifier {
|
|||
|
||||
protected majorPattern: (commit: CommitInfo) => boolean;
|
||||
protected minorPattern: (commit: CommitInfo) => boolean;
|
||||
protected enablePrereleaseMode: boolean;
|
||||
|
||||
constructor(config: ActionConfig) {
|
||||
const searchBody = config.searchCommitBody;
|
||||
this.majorPattern = this.parsePattern(config.majorPattern, config.majorFlags, searchBody);
|
||||
this.minorPattern = this.parsePattern(config.minorPattern, config.minorFlags, searchBody);
|
||||
this.enablePrereleaseMode = config.enablePrereleaseMode;
|
||||
}
|
||||
|
||||
protected parsePattern(pattern: string, flags: string, searchBody: boolean): (pattern: CommitInfo) => boolean {
|
||||
|
|
@ -32,7 +34,21 @@ export class DefaultVersionClassifier implements VersionClassifier {
|
|||
}
|
||||
|
||||
protected getNextVersion(current: ReleaseInformation, type: VersionType): ({ major: number, minor: number, patch: number }) {
|
||||
|
||||
|
||||
if (this.enablePrereleaseMode && current.major === 0) {
|
||||
switch (type) {
|
||||
case VersionType.Major:
|
||||
return { major: current.major, minor: current.minor + 1, patch: 0 };
|
||||
case VersionType.Minor:
|
||||
case VersionType.Patch:
|
||||
return { major: current.major, minor: current.minor, patch: current.patch + 1 };
|
||||
case VersionType.None:
|
||||
return { major: current.major, minor: current.minor, patch: current.patch };
|
||||
default:
|
||||
throw new Error(`Unknown change type: ${type}`);
|
||||
}
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case VersionType.Major:
|
||||
return { major: current.major + 1, minor: 0, patch: 0 };
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue