getVersionsForPackage static method

Future<List<(String, Version)>> getVersionsForPackage(
  1. String? root,
  2. String packageName, {
  3. String tagPrefix = 'v',
})

Gets version tags for a specific package in a workspace Tags are expected to be in format: {package-name}/v{version}

Implementation

static Future<List<(String, Version)>> getVersionsForPackage(
  String? root,
  String packageName, {
  String tagPrefix = 'v',
}) async {
  final allTags = await getTags(root);
  final packageTagPrefix = '$packageName/';

  final packageVersions = allTags
      .where((tag) => tag.isNotEmpty && tag.startsWith(packageTagPrefix))
      .map((tag) {
        // Extract version part after package-name/
        final versionPart = tag.substring(packageTagPrefix.length);
        String version = versionPart;
        if (versionPart.startsWith(tagPrefix)) {
          version = versionPart.substring(tagPrefix.length);
        }

        try {
          return (tag, Version.parse(version));
        } catch (e) {
          logger.detail('Skipping tag $tag. Not a valid version.');
          return null;
        }
      })
      .whereType<(String, Version)>()
      .toList();

  final sortedVersions = packageVersions.toList()..sort((a, b) => a.$2.compareTo(b.$2));

  return sortedVersions;
}