Skip to content

Commit

Permalink
Handle pre-releases in update check
Browse files Browse the repository at this point in the history
  • Loading branch information
passsy committed May 30, 2023
1 parent df411ea commit 3560070
Showing 1 changed file with 19 additions and 10 deletions.
29 changes: 19 additions & 10 deletions sidekick_core/lib/src/version_checker.dart
Expand Up @@ -29,11 +29,17 @@ abstract class VersionChecker {
required String dependency,
List<String>? pubspecKeys,
}) async {
final latest = await getLatestDependencyVersion(dependency);
final current = getMinimumVersionConstraint(
final Version? current = getMinimumVersionConstraint(
package,
pubspecKeys ?? ['dependencies', dependency],
);
if (current == null) {
return false;
}
final Version? latest = await getLatestDependencyVersion(
dependency,
preRelease: current.isPreRelease,
);

return latest == current;
}
Expand Down Expand Up @@ -160,6 +166,7 @@ abstract class VersionChecker {
static Future<Version?> getLatestDependencyVersion(
String dependency, {
Version? dartSdkVersion,
bool preRelease = false,
}) async {
if (testFakeGetLatestDependencyVersion != null) {
return testFakeGetLatestDependencyVersion!(
Expand All @@ -176,28 +183,30 @@ abstract class VersionChecker {
}

final json = jsonDecode(response.body) as Map<String, dynamic>;
final latestVersion =
(json['latest'] as Map<String, dynamic>)['version'] as String;

if (dartSdkVersion == null) {
return Version.parse(latestVersion);
}
// do not use json['latest']['version'] because it doesn't include pre-releases

// find the latest version that supports the given Dart SDK version
// versions is ordered from smallest semver to largest semver
final versions = json['versions'] as List<dynamic>;
// reverse to first check the newest
for (final release in versions.reversed) {
release as Map<String, dynamic>;
final pubspec = release['pubspec'] as Map<String, dynamic>;
final versionRaw = release['version'] as String;
final version = Version.parse(versionRaw);
if (version.isPreRelease) {
if (version.isPreRelease && !preRelease) {
// ignore pre-release versions
continue;
}
if (dartSdkVersion == null) {
// return latest when
return version;
}
// find the latest version that supports the given Dart SDK version
final environment = pubspec['environment'] as Map<String, dynamic>;
final sdk = environment['sdk'] as String?;
if (sdk != null && VersionConstraint.parse(sdk).allows(dartSdkVersion)) {
return Version.parse(latestVersion);
return version;
}
}

Expand Down

0 comments on commit 3560070

Please sign in to comment.