diff --git a/packages/artifact_proxy/lib/src/artifact_proxy.dart b/packages/artifact_proxy/lib/src/artifact_proxy.dart index 00d58310..a608418b 100644 --- a/packages/artifact_proxy/lib/src/artifact_proxy.dart +++ b/packages/artifact_proxy/lib/src/artifact_proxy.dart @@ -4,7 +4,7 @@ import 'package:artifact_proxy/artifact_proxy.dart'; import 'package:artifact_proxy/config.dart'; import 'package:shelf/shelf.dart'; -const String explainerHtml = """ +const String _explainerHtml = """ Shorebird Artifact Proxy @@ -40,7 +40,10 @@ Handler artifactProxyHandler({required ArtifactManifestClient client}) { return (Request request) async { final path = request.url.path; if (path.isEmpty) { - return Response.ok(explainerHtml, headers: {'content-type': 'text/html'}); + return Response.ok( + _explainerHtml, + headers: {'content-type': 'text/html'}, + ); } RegExpMatch? engineArtifactMatch; diff --git a/packages/cutler/README.md b/packages/cutler/README.md index 4da7a39c..8b06302a 100644 --- a/packages/cutler/README.md +++ b/packages/cutler/README.md @@ -3,4 +3,54 @@ A tool for managing our fork of Flutter "Someone who makes or sells cutlery is a cutler." - Wikipedia -"Forks are considered cutlery, right?" - Me \ No newline at end of file +"Forks are considered cutlery, right?" - Me + + +## Usage + +Typical usage: +``` +dart run cutler --root=$HOME/Documents/GitHub --dry-run +``` + +If you're running `cutler` repeatedly, you might also use `--no-update` after +the first run to avoid waiting to try and update git repos. + +You can also see what the current stable changes would look like applied to +another Flutter channel with `--flutter-channel`, e.g.: +``` +dart run cutler --root=$HOME/Documents/GitHub --dry-run --flutter-channel=beta +``` + +`--dry-run` will show you the changes it plans to make. Actually making the +changes might work, but hasn't been tested yet. + +Example invocation, exploring porting a 3.7.12 based fork onto 3.10 (beta): +``` +% dart run cutler --root=$HOME/Documents/GitHub --dry-run --no-update --flutter-channel=beta +Building package executable... +Built cutler:cutler. +Shorebird stable: + flutter 83305b5088e6fe327fb3334a73ff190828d85713 + engine c415419390e4751ddfa3110e0808e7abb3d45a18 + buildroot 7383548fa2306b5d53979ac5e9d176b35258811b +Forkpoints: + flutter 4d9e56e694b656610ab87fcf2efbcd226e0ed8cf (3.7.12) + engine 1a65d409c7a1438a34d21b60bf30a6fd5db59314 (3.7.12) + buildroot 8747bce41d0dc6d9dc45c4d1b46d2100bb9ee688 +Upstream beta: + flutter b1c77b7ed32346fe829c0ca97bd85d19290d54ae (3.10.0-1.5.pre) + engine 50e509c2bd0d7788feb675e38321cc5711c8d2d6 (3.10.0-1.5.pre) + buildroot f24f62fa5381c0e415b6ca2000600fc0600c11c8 +Rebasing buildroot... +git rebase --onto f24f62fa5381c0e415b6ca2000600fc0600c11c8 8747bce41d0dc6d9dc45c4d1b46d2100bb9ee688 7383548fa2306b5d53979ac5e9d176b35258811b +Rebasing engine... +git rebase --onto 3.10.0-1.5.pre 3.7.12 c415419390e4751ddfa3110e0808e7abb3d45a18 +Rebasing flutter... +git rebase --onto 3.10.0-1.5.pre 3.7.12 83305b5088e6fe327fb3334a73ff190828d85713 +Updating engine DEPS... +Would have changed DEPS lines: +( 'src': 'https://github.com/shorebirdtech/buildroot.git' + '@' + 'new-buildroot-hash',) +Updating shorebird flutter version... + Change flutter.version: new-flutter-hash from 83305b5088e6fe327fb3334a73ff190828d85713 +``` diff --git a/packages/cutler/bin/cutler.dart b/packages/cutler/bin/cutler.dart index 92c029a2..17b4474f 100644 --- a/packages/cutler/bin/cutler.dart +++ b/packages/cutler/bin/cutler.dart @@ -76,10 +76,10 @@ extension RepoCommands on Repo { return output.split('\n'); } - Version getForkPoint() { + Version getForkPoint(String forkBranch) { final hash = runCommand( 'git', - ['merge-base', '--fork-point', upstreamBranch, releaseBranch], + ['merge-base', '--fork-point', upstreamBranch, forkBranch], workingDirectory: _workingDirectory, ); return versionFrom(hash); @@ -131,8 +131,8 @@ String printLatestForBranch(Repo repo, String branch) { } void printVersions(VersionSet versions, int indent) { - print("${' ' * indent}engine ${versions.engine}"); print("${' ' * indent}flutter ${versions.flutter}"); + print("${' ' * indent}engine ${versions.engine}"); print("${' ' * indent}buildroot ${versions.buildroot}"); } @@ -163,24 +163,6 @@ String parseBuildRoot(String depsContents) { return match.group(0)!; } -VersionSet getForkpoints() { - final flutterForkpoint = Repo.flutter.getForkPoint(); - // final engineForkpoint = Repo.engine.getForkPoint(); - // final buildrootForkpoint = Repo.buildroot.getForkPoint(); - // return VersionSet( - // engine: engineForkpoint, - // flutter: flutterForkpoint, - // buildroot: buildrootForkpoint, - // ); - - // This is slightly error-prone in that we're assuming that our engine and - // buildroot forks started from the correct commit. But I'm not sure how - // to determine the forkpoint otherwise. engine and buildroot don't have - // a stable branch, yet they do seem to "branch" for stable releases at the - // x.x.0 release. - return getFlutterVersions(flutterForkpoint.hash); -} - /// Generate rebase commands for the repo given the version sets. String rebaseRepo( Repo repo, { @@ -216,6 +198,7 @@ String rebaseRepo( void main(List args) { config = parseArgs(args); if (config.doUpdate) { + print('Updating checkouts (use --no-update to skip)'); for (final repo in Repo.values) { print('Updating ${repo.name}...'); runCommand( @@ -231,27 +214,30 @@ void main(List args) { // printLatestForBranch(repo, repo.releaseBranch); // } - // FIXME: This is wrong, but 0.0.7 doesn't have a flutter.version file yet. - final shorebirdFlutter = - Repo.flutter.getLatestCommit(Repo.flutter.releaseBranch); - // final shorebirdStable = - // Repo.shorebird.getLatestCommit(Repo.shorebird.releaseBranch); - // final shorebirdFlutter = Repo.flutter - // .contentsAtPath(shorebirdStable, 'bin/internal/flutter.version'); + final shorebirdStable = + Repo.shorebird.getLatestCommit(config.shorebirdReleaseBranch); + final shorebirdFlutter = Repo.shorebird + .contentsAtPath(shorebirdStable, 'bin/internal/flutter.version'); final shorebird = getFlutterVersions(shorebirdFlutter); print('Shorebird stable:'); printVersions(shorebird, 2); - final forkpoints = getForkpoints(); + final flutterForkpoint = Repo.flutter.getForkPoint(shorebird.flutter.hash); + // This is slightly error-prone in that we're assuming that our engine and + // buildroot forks started from the correct commit. But I'm not sure how + // to determine the forkpoint otherwise. engine and buildroot don't have + // a stable branch, yet they do seem to "branch" for stable releases at the + // x.x.0 release. + final forkpoints = getFlutterVersions(flutterForkpoint.hash); print('Forkpoints:'); printVersions(forkpoints, 2); // Figure out the latest version of Flutter. final upstreamFlutter = - Repo.flutter.getLatestCommit(Repo.flutter.upstreamBranch); + Repo.flutter.getLatestCommit('upstream/${config.flutterChannel}'); // Figure out what versions that Flutter depends on. final upstream = getFlutterVersions(upstreamFlutter); - print('Upstream stable:'); + print('Upstream ${config.flutterChannel}:'); printVersions(upstream, 2); Version doRebase(Repo repo) { diff --git a/packages/cutler/lib/config.dart b/packages/cutler/lib/config.dart index 5a5f2d80..17f496bf 100644 --- a/packages/cutler/lib/config.dart +++ b/packages/cutler/lib/config.dart @@ -27,11 +27,15 @@ class Config { required this.verbose, required this.dryRun, required this.doUpdate, + required this.flutterChannel, }); final String checkoutsRoot; final bool verbose; final bool dryRun; final bool doUpdate; + final String flutterChannel; + + final String shorebirdReleaseBranch = 'origin/stable'; } late final Config config; @@ -44,6 +48,11 @@ Config parseArgs(List args) { defaultsTo: '.', help: 'Directory in which to find checkouts.', ) + ..addOption( + 'flutter-channel', + defaultsTo: 'stable', + help: 'Upstream channel to propose rebasing onto.', + ) ..addFlag('dry-run', defaultsTo: true, help: 'Do not actually run git.') ..addFlag('update', defaultsTo: true, help: 'Update checkouts.'); final results = parser.parse(args); @@ -52,5 +61,6 @@ Config parseArgs(List args) { checkoutsRoot: expandUser(results['root'] as String), dryRun: results['dry-run'] as bool, doUpdate: results['update'] as bool, + flutterChannel: results['flutter-channel'] as String, ); } diff --git a/packages/cutler/lib/model.dart b/packages/cutler/lib/model.dart index a25f7387..1e96ef4f 100644 --- a/packages/cutler/lib/model.dart +++ b/packages/cutler/lib/model.dart @@ -5,28 +5,24 @@ enum Repo { name: 'shorebird', path: '_shorebird/shorebird', url: 'https://github.com/shorebirdtech/shorebird.git', - releaseBranch: 'origin/stable', upstreamBranch: 'origin/main', ), flutter( name: 'flutter', path: 'flutter', url: 'https://github.com/shorebirdtech/flutter.git', - releaseBranch: 'origin/stable', upstreamBranch: 'upstream/stable', ), engine( name: 'engine', path: 'engine/src/flutter', url: 'https://github.com/shorebirdtech/engine.git', - releaseBranch: 'origin/stable_codepush', upstreamBranch: 'upstream/master', ), buildroot( name: 'buildroot', path: 'engine/src', url: 'https://github.com/shorebirdtech/builddoor.git', - releaseBranch: 'origin/stable_codepush', upstreamBranch: 'upstream/master', ); @@ -34,14 +30,12 @@ enum Repo { required this.name, required this.path, required this.url, - required this.releaseBranch, required this.upstreamBranch, }); final String name; final String path; final String url; - final String releaseBranch; final String upstreamBranch; } diff --git a/packages/shorebird_cli/lib/src/commands/releases/delete_releases_command.dart b/packages/shorebird_cli/lib/src/commands/releases/delete_releases_command.dart index 129de090..ff7eb42b 100644 --- a/packages/shorebird_cli/lib/src/commands/releases/delete_releases_command.dart +++ b/packages/shorebird_cli/lib/src/commands/releases/delete_releases_command.dart @@ -30,7 +30,6 @@ class DeleteReleasesCommand extends ShorebirdCommand 'flavor', help: 'The product flavor to use when deleting releases.', ); - ; } @override