[flutter_tool,fuchsia] Update the install flow for packaging migration. (#34447)
This commit is contained in:
parent
81bbd3e12c
commit
dfecafa4ab
@ -27,6 +27,12 @@ import 'fuchsia_pm.dart';
|
|||||||
// -x: do not disable other active sources (if the provided source is
|
// -x: do not disable other active sources (if the provided source is
|
||||||
// enabled)
|
// enabled)
|
||||||
//
|
//
|
||||||
|
// add_repo_cfg - add a repository config to the set of known repositories,
|
||||||
|
// using a source config
|
||||||
|
// -n: name of the update source (optional, with URL)
|
||||||
|
// -f: file path or url to a source config file
|
||||||
|
// -h: SHA256 hash of source config file (optional, with URL)
|
||||||
|
//
|
||||||
// rm_src - remove a source, if it exists
|
// rm_src - remove a source, if it exists
|
||||||
// -n: name of the update source
|
// -n: name of the update source
|
||||||
//
|
//
|
||||||
@ -73,4 +79,31 @@ class FuchsiaAmberCtl {
|
|||||||
await device.shell('amber_ctl get_up -n $packageName');
|
await device.shell('amber_ctl get_up -n $packageName');
|
||||||
return result.exitCode == 0;
|
return result.exitCode == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Converts the amber source config created when [server] was set up to a
|
||||||
|
/// pkg_resolver repo config, and teaches the pkg_resolver instance running
|
||||||
|
/// on [device] about the [FuchsiaPackageServer].
|
||||||
|
Future<bool> addRepoCfg(FuchsiaDevice device, FuchsiaPackageServer server) async {
|
||||||
|
final String configUrl = '${server.url}/config.json';
|
||||||
|
final RunResult result =
|
||||||
|
await device.shell('amber_ctl add_repo_cfg -n ${server.name} -f $configUrl');
|
||||||
|
return result.exitCode == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Instructs the pkg_resolver instance running on [device] to prefetch the
|
||||||
|
/// package [packageName].
|
||||||
|
Future<bool> pkgCtlResolve(FuchsiaDevice device, FuchsiaPackageServer server,
|
||||||
|
String packageName) async {
|
||||||
|
final String packageUrl = 'fuchsia-pkg://${server.name}/$packageName';
|
||||||
|
final RunResult result = await device.shell('pkgctl resolve $packageUrl');
|
||||||
|
return result.exitCode == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Instructs the pkg_resolver instance running on [device] to forget about
|
||||||
|
/// the Fuchsia package server that it was accessing via [serverUrl].
|
||||||
|
Future<bool> pkgCtlRepoRemove(FuchsiaDevice device, FuchsiaPackageServer server) async {
|
||||||
|
final String repoUrl = 'fuchsia-pkg://${server.name}';
|
||||||
|
final RunResult result = await device.shell('pkgctl repo remove --repo-url $repoUrl');
|
||||||
|
return result.exitCode == 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -265,7 +265,9 @@ class FuchsiaDevice extends Device {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Start up a package server.
|
// Start up a package server.
|
||||||
fuchsiaPackageServer = FuchsiaPackageServer(packageRepo.path, host, port);
|
const String packageServerName = 'flutter_tool';
|
||||||
|
fuchsiaPackageServer = FuchsiaPackageServer(
|
||||||
|
packageRepo.path, packageServerName, host, port);
|
||||||
if (!await fuchsiaPackageServer.start()) {
|
if (!await fuchsiaPackageServer.start()) {
|
||||||
printError('Failed to start the Fuchsia package server');
|
printError('Failed to start the Fuchsia package server');
|
||||||
return LaunchResult.failed();
|
return LaunchResult.failed();
|
||||||
@ -277,16 +279,17 @@ class FuchsiaDevice extends Device {
|
|||||||
return LaunchResult.failed();
|
return LaunchResult.failed();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Teach amber about the package server.
|
// Teach the package controller about the package server.
|
||||||
if (!await fuchsiaDeviceTools.amberCtl.addSrc(this, fuchsiaPackageServer)) {
|
if (!await fuchsiaDeviceTools.amberCtl.addRepoCfg(this, fuchsiaPackageServer)) {
|
||||||
printError('Failed to teach amber about the package server');
|
printError('Failed to teach amber about the package server');
|
||||||
return LaunchResult.failed();
|
return LaunchResult.failed();
|
||||||
}
|
}
|
||||||
serverRegistered = true;
|
serverRegistered = true;
|
||||||
|
|
||||||
// Tell amber to prefetch the app.
|
// Tell the package controller to prefetch the app.
|
||||||
if (!await fuchsiaDeviceTools.amberCtl.getUp(this, appName)) {
|
if (!await fuchsiaDeviceTools.amberCtl.pkgCtlResolve(
|
||||||
printError('Failed to get amber to prefetch the package');
|
this, fuchsiaPackageServer, appName)) {
|
||||||
|
printError('Failed to get pkgctl to prefetch the package');
|
||||||
return LaunchResult.failed();
|
return LaunchResult.failed();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -298,15 +301,16 @@ class FuchsiaDevice extends Device {
|
|||||||
|
|
||||||
// Instruct tiles_ctl to start the app.
|
// Instruct tiles_ctl to start the app.
|
||||||
final String fuchsiaUrl =
|
final String fuchsiaUrl =
|
||||||
'fuchsia-pkg://fuchsia.com/$appName#meta/$appName.cmx';
|
'fuchsia-pkg://$packageServerName/$appName#meta/$appName.cmx';
|
||||||
if (!await fuchsiaDeviceTools.tilesCtl.add(this, fuchsiaUrl, <String>[])) {
|
if (!await fuchsiaDeviceTools.tilesCtl.add(this, fuchsiaUrl, <String>[])) {
|
||||||
printError('Failed to add the app to tiles');
|
printError('Failed to add the app to tiles');
|
||||||
return LaunchResult.failed();
|
return LaunchResult.failed();
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
// Try to un-teach amber about the package server if needed.
|
// Try to un-teach the package controller about the package server if
|
||||||
|
// needed.
|
||||||
if (serverRegistered) {
|
if (serverRegistered) {
|
||||||
await fuchsiaDeviceTools.amberCtl.rmSrc(this, fuchsiaPackageServer);
|
await fuchsiaDeviceTools.amberCtl.pkgCtlRepoRemove(this, fuchsiaPackageServer);
|
||||||
}
|
}
|
||||||
// Shutdown the package server and delete the package repo;
|
// Shutdown the package server and delete the package repo;
|
||||||
fuchsiaPackageServer?.stop();
|
fuchsiaPackageServer?.stop();
|
||||||
|
@ -166,6 +166,7 @@ class FuchsiaPM {
|
|||||||
/// Example usage:
|
/// Example usage:
|
||||||
/// var server = FuchsiaPackageServer(
|
/// var server = FuchsiaPackageServer(
|
||||||
/// '/path/to/repo',
|
/// '/path/to/repo',
|
||||||
|
/// 'server_name',
|
||||||
/// await FuchsiaDevFinder.resolve(deviceName),
|
/// await FuchsiaDevFinder.resolve(deviceName),
|
||||||
/// await freshPort());
|
/// await freshPort());
|
||||||
/// try {
|
/// try {
|
||||||
@ -176,7 +177,7 @@ class FuchsiaPM {
|
|||||||
/// server.stop();
|
/// server.stop();
|
||||||
/// }
|
/// }
|
||||||
class FuchsiaPackageServer {
|
class FuchsiaPackageServer {
|
||||||
FuchsiaPackageServer(this._repo, this._host, this._port);
|
FuchsiaPackageServer(this._repo, this.name, this._host, this._port);
|
||||||
|
|
||||||
final String _repo;
|
final String _repo;
|
||||||
final String _host;
|
final String _host;
|
||||||
@ -187,6 +188,9 @@ class FuchsiaPackageServer {
|
|||||||
/// The url that can be used by the device to access this package server.
|
/// The url that can be used by the device to access this package server.
|
||||||
String get url => 'http://$_host:$_port';
|
String get url => 'http://$_host:$_port';
|
||||||
|
|
||||||
|
// The name used to reference the server by fuchsia-pkg:// urls.
|
||||||
|
final String name;
|
||||||
|
|
||||||
/// Usees [FuchiaPM.newrepo] and [FuchsiaPM.serve] to spin up a new Fuchsia
|
/// Usees [FuchiaPM.newrepo] and [FuchsiaPM.serve] to spin up a new Fuchsia
|
||||||
/// package server.
|
/// package server.
|
||||||
///
|
///
|
||||||
|
@ -695,6 +695,22 @@ class FakeFuchsiaAmberCtl implements FuchsiaAmberCtl {
|
|||||||
Future<bool> getUp(FuchsiaDevice device, String packageName) async {
|
Future<bool> getUp(FuchsiaDevice device, String packageName) async {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> addRepoCfg(FuchsiaDevice device, FuchsiaPackageServer server) async {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> pkgCtlResolve(FuchsiaDevice device, FuchsiaPackageServer server,
|
||||||
|
String packageName) async {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> pkgCtlRepoRemove(FuchsiaDevice device, FuchsiaPackageServer server) async {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class FailingAmberCtl implements FuchsiaAmberCtl {
|
class FailingAmberCtl implements FuchsiaAmberCtl {
|
||||||
@ -712,6 +728,22 @@ class FailingAmberCtl implements FuchsiaAmberCtl {
|
|||||||
Future<bool> getUp(FuchsiaDevice device, String packageName) async {
|
Future<bool> getUp(FuchsiaDevice device, String packageName) async {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> addRepoCfg(FuchsiaDevice device, FuchsiaPackageServer server) async {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> pkgCtlResolve(FuchsiaDevice device, FuchsiaPackageServer server,
|
||||||
|
String packageName) async {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> pkgCtlRepoRemove(FuchsiaDevice device, FuchsiaPackageServer server) async {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class FakeFuchsiaTilesCtl implements FuchsiaTilesCtl {
|
class FakeFuchsiaTilesCtl implements FuchsiaTilesCtl {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user