getVersionsForPackage static method
Gets version tags for a specific package in a workspace Tags are expected to be in format: {package-name}{separator}{tagPrefix}{version}, e.g. my_pkg/v1.2.3 (default) or my_pkg-v1.2.3. The tagPrefix is optional when matching.
Implementation
static Future<List<(String, Version)>> getVersionsForPackage(
String? root,
String packageName, {
String tagPrefix = 'v',
String separator = '/',
}) async {
final allTags = await getTags(root);
final packageTagPrefix = '$packageName$separator';
final packageVersions = allTags
.where((tag) => tag.isNotEmpty && tag.startsWith(packageTagPrefix))
.map((tag) {
// Extract version part after the package name and separator
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;
}