Skip to content

Commit

Permalink
refactor(melos): move over versioning logic from conventional_commit
Browse files Browse the repository at this point in the history
  • Loading branch information
blaugold authored and Salakar committed Sep 23, 2022
1 parent e55edb5 commit 75a6fda
Show file tree
Hide file tree
Showing 7 changed files with 103 additions and 4 deletions.
1 change: 0 additions & 1 deletion packages/melos/lib/src/command_runner/version.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import 'dart:io';

import 'package:ansi_styles/ansi_styles.dart';
import 'package:collection/collection.dart';
import 'package:conventional_commit/conventional_commit.dart';
import 'package:glob/glob.dart';
import 'package:pub_semver/pub_semver.dart';

Expand Down
2 changes: 1 addition & 1 deletion packages/melos/lib/src/commands/runner.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import 'dart:math';
import 'package:ansi_styles/ansi_styles.dart';
import 'package:cli_util/cli_logging.dart';
import 'package:collection/collection.dart';
import 'package:conventional_commit/conventional_commit.dart';
import 'package:file/local.dart';
import 'package:meta/meta.dart';
import 'package:mustache_template/mustache.dart';
Expand All @@ -30,6 +29,7 @@ import '../common/platform.dart';
import '../common/utils.dart';
import '../common/utils.dart' as utils;
import '../common/versioning.dart' as versioning;
import '../common/versioning.dart';
import '../common/workspace_changelog.dart';
import '../global_options.dart';
import '../logging.dart';
Expand Down
1 change: 1 addition & 0 deletions packages/melos/lib/src/common/changelog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import 'git_commit.dart';
import 'git_repository.dart';
import 'io.dart';
import 'pending_package_update.dart';
import 'versioning.dart';

class Changelog {
Changelog(this.package, this.version, this.logger);
Expand Down
2 changes: 1 addition & 1 deletion packages/melos/lib/src/common/pending_package_update.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@

import 'dart:math' as math;

import 'package:conventional_commit/conventional_commit.dart';
import 'package:meta/meta.dart';
import 'package:pub_semver/pub_semver.dart';

Expand All @@ -27,6 +26,7 @@ import '../workspace.dart';
import 'changelog.dart';
import 'git_commit.dart';
import 'versioning.dart' as versioning;
import 'versioning.dart';

/// Enum representing why the version has been changed when running 'version'
/// command.
Expand Down
44 changes: 44 additions & 0 deletions packages/melos/lib/src/common/versioning.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,50 @@
import 'package:conventional_commit/conventional_commit.dart';
import 'package:pub_semver/pub_semver.dart';

/// Indicates the semver release type this commit message creates.
enum SemverReleaseType {
/// A patch release indicates non-breaking changes (e.g. bug fixes).
patch,

/// Indicates new API changes have been made (e.g. new features).
minor,

/// A major release is when the breaking changes have been introduced.
major,
}

extension ConventionalCommitVersioningExtension on ConventionalCommit {
/// Whether this commit should trigger a version bump in it's residing
/// package.
bool get isVersionableCommit {
if (isMergeCommit) return false;
return isBreakingChange ||
[
'docs',
'feat',
'fix',
'bug',
'perf',
'refactor',
'revert',
].contains(type);
}

/// Returns the [SemverReleaseType] for this commit, e.g.
/// [SemverReleaseType.major].
SemverReleaseType get semverReleaseType {
if (isBreakingChange) {
return SemverReleaseType.major;
}

if (isFeature) {
return SemverReleaseType.minor;
}

return SemverReleaseType.patch;
}
}

bool isValidVersion(String version) {
try {
Version.parse(version);
Expand Down
56 changes: 56 additions & 0 deletions packages/melos/test/common/versioning_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import 'package:conventional_commit/conventional_commit.dart';
import 'package:melos/src/common/versioning.dart';
import 'package:test/test.dart';

void main() {
test('isVersionableCommit', () {
expect(
ConventionalCommit.tryParse('chore!: foo bar')!.isVersionableCommit,
isTrue,
);
expect(
ConventionalCommit.tryParse('docs: foo bar')!.isVersionableCommit,
isTrue,
);
expect(
ConventionalCommit.tryParse('refactor(scope): foo bar')!
.isVersionableCommit,
isTrue,
);
expect(
ConventionalCommit.tryParse('revert(scope,dope)!: foo bar')!
.isVersionableCommit,
isTrue,
);
expect(
ConventionalCommit.tryParse('feat(*): foo bar')!.isVersionableCommit,
isTrue,
);
expect(
ConventionalCommit.tryParse('ci(scope,dope): foo bar')!
.isVersionableCommit,
isFalse,
);
});

test('semverReleaseType', () {
expect(
ConventionalCommit.tryParse('chore!: foo bar')!.semverReleaseType,
equals(SemverReleaseType.major),
);
expect(
ConventionalCommit.tryParse('docs: foo bar')!.semverReleaseType,
equals(SemverReleaseType.patch),
);
expect(
ConventionalCommit.tryParse('refactor(scope): foo bar')!
.semverReleaseType,
equals(SemverReleaseType.patch),
);
expect(
ConventionalCommit.tryParse('feat(scope,dope): foo bar')!
.semverReleaseType,
equals(SemverReleaseType.minor),
);
});
}
1 change: 0 additions & 1 deletion packages/melos/test/melos_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
*
*/

import 'package:conventional_commit/conventional_commit.dart';
import 'package:melos/src/common/versioning.dart';
import 'package:pub_semver/pub_semver.dart';
import 'package:test/test.dart';
Expand Down

0 comments on commit 75a6fda

Please sign in to comment.