fix an issue validating pre-release git publishing tags (#180)
* fix an issue validating pre-release git publishing tags
* fix changelog version parsing as well
* review feedback
diff --git a/pkgs/firehose/CHANGELOG.md b/pkgs/firehose/CHANGELOG.md
index 1c35aa8..8d80084 100644
--- a/pkgs/firehose/CHANGELOG.md
+++ b/pkgs/firehose/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.3.32
+
+- Fix an issue validating pre-release git publishing tags (#176).
+
## 0.3.31
- Add PR Health checks for breaking changes.
diff --git a/pkgs/firehose/lib/src/changelog.dart b/pkgs/firehose/lib/src/changelog.dart
index 59b4965..9eb1462 100644
--- a/pkgs/firehose/lib/src/changelog.dart
+++ b/pkgs/firehose/lib/src/changelog.dart
@@ -26,19 +26,15 @@
/// Pattern recognizing some SemVer formats.
///
/// Accepts:
- /// > digits '.' digits '.' digits
///
- /// optionally followed by `-` or `+` character
- /// and one or more "word characters", which are
- /// ASCII letters (`a`-`z`, `A`-`Z`), digits (`0`-`9`),
- /// underscore (`_`) and dollar-sign (`$`).
+ /// > digits '.' digits '.' digits
///
- /// This is not all complete SemVer version strings,
- /// since it doesn't allow `.` in the continuation,
- /// or a `+...` sequence after a `-` sequence.
- /// It should be enough for the user-cases we need it for
- /// in this package.
- static final _versionRegex = RegExp(r'\d+\.\d+\.\d+(?:[\-+]\w+)?');
+ /// optionally followed by `-` or `+` character and one of more non-whitespace
+ /// characters, without validating them as valid semver.
+ ///
+ /// This is not all complete SemVer version strings but it should be enough
+ /// for the user-cases we need it for in this package.
+ static final _versionRegex = RegExp(r'\d+\.\d+\.\d+(?:[+\-]\S*)?');
String? get latestVersion {
var input = latestHeading;
diff --git a/pkgs/firehose/lib/src/utils.dart b/pkgs/firehose/lib/src/utils.dart
index cc68c3c..9032083 100644
--- a/pkgs/firehose/lib/src/utils.dart
+++ b/pkgs/firehose/lib/src/utils.dart
@@ -44,25 +44,27 @@
class Tag {
/// RegExp matching a version tag at the start of a line.
///
- /// A version tag is an optional starting seqeuence
- /// of non-whitespace, which is the package name,
- /// followed by a `v` and a simplified SemVer version
+ /// A version tag is an optional starting seqeuence of non-whitespace, which
+ /// is the package name, followed by a `v` and a simplified SemVer version
/// number.
- /// The version number accepted is
+ ///
+ /// The version number accepted is:
+ ///
/// > digits '.' digits '.' digits
///
- /// and if followed by a `+`, then it includes the
- /// rest of the line.
+ /// and if followed by a `+` or `-`, then it includes the remaining
+ /// non-whitespace characters.
static final RegExp packageVersionTag =
- RegExp(r'^(?:(\S+)-)?v(\d+\.\d+\.\d+(?:\+.*)?)');
+ RegExp(r'^(?:(\S+)-)?v(\d+\.\d+\.\d+(?:[+\-]\S*)?)');
/// A package version tag.
///
/// Is expected to have the format:
+ ///
/// > (package-name)? 'v' SemVer-version
///
- /// If not, the tag is not [valid], and the [package] and [version]
- /// will both be `null`.
+ /// If not, the tag is not [valid], and the [package] and [version] will both
+ /// be `null`.
final String tag;
Tag(this.tag);
diff --git a/pkgs/firehose/pubspec.yaml b/pkgs/firehose/pubspec.yaml
index a2caf14..04cde48 100644
--- a/pkgs/firehose/pubspec.yaml
+++ b/pkgs/firehose/pubspec.yaml
@@ -1,6 +1,6 @@
name: firehose
description: A tool to automate publishing of Pub packages from GitHub actions.
-version: 0.3.31
+version: 0.3.32
repository: https://github.com/dart-lang/ecosystem/tree/main/pkgs/firehose
environment:
diff --git a/pkgs/firehose/test/changelog_test.dart b/pkgs/firehose/test/changelog_test.dart
index d22020d..ec1e72a 100644
--- a/pkgs/firehose/test/changelog_test.dart
+++ b/pkgs/firehose/test/changelog_test.dart
@@ -85,6 +85,16 @@
});
});
+ test('with prerelease tag 2', () {
+ withChangelog('''
+## 123.456.789-beta.2
+''', (file) {
+ var changelog = Changelog(file);
+ var version = changelog.latestVersion;
+ expect(version, '123.456.789-beta.2');
+ });
+ });
+
test('custom heading version', () {
withChangelog('''
## [4.7.0](https://github.com/...) (2023-05-06)
diff --git a/pkgs/firehose/test/utils_test.dart b/pkgs/firehose/test/utils_test.dart
index d7ad41b..a253712 100644
--- a/pkgs/firehose/test/utils_test.dart
+++ b/pkgs/firehose/test/utils_test.dart
@@ -22,6 +22,11 @@
expect(tag.version, '1.2.3');
});
+ test('pre-release package repo', () {
+ var tag = Tag('v1.2.3-beta');
+ expect(tag.version, '1.2.3-beta');
+ });
+
test('service release', () {
var tag = Tag('v1.2.3+1');
expect(tag.version, '1.2.3+1');
@@ -39,6 +44,12 @@
expect(tag.version, '1.2.3');
});
+ test('mono repo pre-release', () {
+ var tag = Tag('foo_bar-v1.2.3-dev.1');
+ expect(tag.package, 'foo_bar');
+ expect(tag.version, '1.2.3-dev.1');
+ });
+
test('mono repo bad', () {
var tag = Tag('foobar_v1.2.3');
expect(tag.valid, false);