Skip to content

Commit

Permalink
👷 Check bootstrappable package as a prehook of melos and log checked …
Browse files Browse the repository at this point in the history
…packages (#2363)

Picked and updated from #2362
  • Loading branch information
AlexV525 authored Jan 24, 2025
1 parent 779ccf0 commit 83c57de
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 11 deletions.
4 changes: 4 additions & 0 deletions melos.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ ide:
command:
bootstrap:
runPubGetInParallel: false
hooks:
pre: |
# Check bootstrappable packages.
dart ./scripts/melos_packages.dart
clean:
hooks:
post: |
Expand Down
34 changes: 23 additions & 11 deletions scripts/melos_packages.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import 'dart:io';

import 'package:cli_util/cli_logging.dart' show Logger;
import 'package:melos/melos.dart'
show MelosLogger, MelosWorkspace, MelosWorkspaceConfig;
show MelosLogger, MelosWorkspace, MelosWorkspaceConfig, Package;
import 'package:path/path.dart' as p;
import 'package:pub_semver/pub_semver.dart';
import 'package:yaml/yaml.dart';
Expand Down Expand Up @@ -40,30 +40,42 @@ void main() async {
}
}

final current = Version.parse(
final currentDart = Version.parse(
RegExp(r'\d*\.\d*\.\d*').firstMatch(Platform.version)!.group(0)!,
);
final validPackages = packages.where((e) {
final overridePackages = <Package>[];
final ignoredPackages = <Package>[];
for (final e in packages) {
final dynamic package = e as dynamic;
bool allows;
try {
// Compatible with melos v6.3.
allows = package.pubspec.environment['sdk']!.allows(current);
allows = package.pubspec.environment['sdk']!.allows(currentDart);
} on NoSuchMethodError {
// Fallback to previous melos.
allows = package.pubSpec.environment!.sdkConstraint!.allows(current);
allows = package.pubSpec.environment!.sdkConstraint!.allows(currentDart);
}
return allows;
});
if (allows) {
overridePackages.add(e);
} else {
ignoredPackages.add(e);
}
}

// Create melos marker files
for (final package in validPackages) {
// Create melos marker files.
for (final package in overridePackages) {
File(p.join(package.path, '.melos_package')).createSync();
}

final validPackagesString = validPackages.map((p) => p.name).join(',');
final overridePackagesString = overridePackages.map((p) => p.name).join(',');
final ignoredPackagesString = ignoredPackages.map((p) => p.name).join(',');
print(
'Checked valid packages: \n'
' [override]: $overridePackagesString\n'
' [ignored]: $ignoredPackagesString',
);
File('$root/.melos_packages')
.writeAsStringSync('MELOS_PACKAGES=$validPackagesString');
.writeAsStringSync('MELOS_PACKAGES=$overridePackagesString');
}

extension YamlUtils on YamlNode {
Expand Down

0 comments on commit 83c57de

Please sign in to comment.