From: Joel Winarske Date: Wed, 7 Sep 2022 00:02:55 +0000 (-0700) Subject: meta-agl-flutter updates X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=commitdiff_plain;h=ee6873ad9024399cc69f81bab2745eb3a0bb3649;hp=0457026fc28c1914d4e12a444c61f1a25ca257dd;p=AGL%2Fmeta-agl-devel.git meta-agl-flutter updates -layer README -flutter workspace configuration file -consolidation of gallery json files -remove flutter sdk version pin; now happens upstream -add engine_sdk.zip to all images (non-production) -add SSH server to debug and profile images -factor out flutter-auto xdg-shell-app-id patch Signed-off-by: Joel Winarske Change-Id: I6fdf1277bb4011126103f74eda5e230f34f497d7 --- diff --git a/meta-agl-devel.md b/meta-agl-devel.md index ee4d0236..84bcfd1e 100644 --- a/meta-agl-devel.md +++ b/meta-agl-devel.md @@ -40,5 +40,7 @@ The following list provides a summary of these sub-layers: * `meta-oem-production-readiness`: Provides libraries and software packages of IVI product readiness +* `meta-agl-flutter`: Provides Flutter support. + * `templates`: Feature templates that support the `meta-agl-devel` layer. diff --git a/meta-agl-flutter/README.md b/meta-agl-flutter/README.md new file mode 100644 index 00000000..86b4f75b --- /dev/null +++ b/meta-agl-flutter/README.md @@ -0,0 +1,221 @@ +# meta-agl-flutter + +_This documentation is expecting user to be running Ubuntu 20.04_ + +## Steps to build `agl-ivi-demo-platform-flutter` image + +``` + export AGL_TOP=$HOME/workspace_agl + mkdir -p $AGL_TOP && cd $AGL_TOP + repo init -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo -b master + repo sync -j $(nproc) + source meta-agl/scripts/aglsetup.sh -m qemux86-64 agl-demo + bitbake agl-ivi-demo-platform-flutter +``` + +This builds AGL demo image that includes Flutter runtime=release. + + +## Steps to build a minimal flutter image + +``` + export AGL_TOP=$HOME/workspace_agl + mkdir -p $AGL_TOP && cd $AGL_TOP + repo init -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo -b master + repo sync -j `grep -c ^processor /proc/cpuinfo` + source meta-agl/scripts/aglsetup.sh -m qemux86-64 agl-devel agl-flutter +``` + +Build one of the minimal Flutter images below using `bitbake` + +1. `agl-image-flutter-runtimedebug` + * includes Flutter Engine SDK + * includes SSH server + * live debugging with target via host + +2. `agl-image-flutter-runtimeprofile` + * includes Flutter Engine SDK + * includes SSH server + * runs only Flutter Applications built as AOT profile images + * live profiling with target via host + +3. `agl-image-flutter-runtimerelease` + * includes Flutter Engine SDK + * runs only Flutter Applications built as AOT release images + * Does not include SSH server + + +## Flutter Engine SDK + +If recipe `flutter-engine-runtime-sdk-dev` is included in your AGL image, `engine_sdk.zip` will be present in `/usr/share/flutter/`. + +engine_sdk.zip contains +* sdk/flutter_sdk.version - The Flutter SDK version +* sdk/engine.version - The git commit of the Flutter Engine +* sdk/clang_x64/gen_snapshot - used for creating release/profile AOT image + +This recipe should be excluded from image in a production release. + + +## Flutter Workspace Automation + +``` + mkdir -p && cd + curl --proto '=https' --tlsv1.2 -sSf https://gerrit.automotivelinux.org/gerrit/gitweb?p=AGL/meta-agl-devel.git;a=blob_plain;f=meta-agl-flutter/tools/flutter_workspace_config.json;hb=HEAD -o flutter_workspace_config.json + curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/meta-flutter/meta-flutter/kirkstone/tools/setup_flutter_workspace.py | python3 +``` + +Additional documentation available [here](https://github.com/meta-flutter/meta-flutter/tree/kirkstone/tools#flutter-workspace-automation) + + +## Startup Service + +If you include `flutter-gallery-runtime-init` it will install a systemd user service, which starts the Flutter Gallery on boot. This is not included in the minimal images. + +At runtime you can edit `/usr/share/flutter/default.json` to point to any Flutter bundle. + + +## `/usr/share/flutter/default.json` + +For more JSON key value options see [here](https://github.com/toyota-connected/ivi-homescreen/blob/agl/README.md#json-configuration-keys) + + +## Custom Devices + +### desktop-auto + +This is a desktop build of flutter-auto. The default configuration for backend is set to `egl` backend. To change this to use the `vulkan` backend, change the `backend` key value in `meta-agl-flutter/tools/flutter_workspace_config.json` from `egl` to `vulkan`. If you use the workspace configuration from meta-flutter it defaults to `vulkan`. + +If you are running a Gnome Display Manager (GDM) Wayland session, then it will be an available custom-device platform. To enable a Wayland session, you select the gear icon at the login window. If you don't have a gear icon available on your login screen, then you will need to adjust your system settings to enable a Wayland session. + +Append `--device-id=desktop-auto` to `flutter ` to select this device. + +### QEMU-agl + +This is a QEMU minimal Flutter image as referenced [here](#steps-to-build-a-minimal-flutter-image). The required runtime packages are installed as part of setup_flutter_workspace.py. + +If qemu_run was sucessfully invoked, then this platform will be an available `custom-device`. If QEMU instance is not running on port 2222, then this custom-device platform will not be available. + +Append `--device-id=AGL-qemu` to `flutter ` to select this device. + + +## Steps to Test Flutter Images + +### Debug + +1. Set up Flutter Workspace per [Flutter Workspace Automation](#flutter-workspace-automation). + +2. Run the following commands on the host's terminal, a QEMU window and a new terminal for AGL will be brought up. + +``` + cd $FLUTTER_WORKSPACE + source ./setup_env.sh + qemu_run +``` + +3. If running an updated QEMU image, edit `~/.ssh/known_hosts` and remove previous connection. + +4. Wait for QEMU image to boot to idle the run +``` + ssh -p 2222 root@localhost who +``` +_Answering with `y` appends QEMU connection to `~/.ssh/known_hosts`_ + +5. From the same host terminal open Visual Studio Code Select + * **Run and Debug** + * **gallery(AGL-qemu)** from the drop down combo box + * **run** - this launches the Flutter gallery app in the QEMU window​ + +6. Or run from the same terminal as qemu_run was executed via +``` + cd $FLUTTER_WORKSPACE/app/gallery + flutter run --device-id=AGL-qemu +``` + + +### Release + +1. Change AGL-qemu flutter_runtime value in $AGL_TOP/sources/meta-agl-devel/meta-agl-flutter/tools/flutter_workspace_config.json to `release`. + +``` + { + "id": "AGL-qemu", + "type": "qemu", + "arch": "x86_64", + "flutter_runtime": "release", + "runtime": { +``` + +This enables download of QEMU `release` variant. + +2. Run the flutter workspace script + +3. Run the following commands on the host's terminal, a QEMU window and a new terminal for AGL will be brought up. + +``` + cd $FLUTTER_WORKSPACE + unset QEMU_IMAGE + source ./setup_env.sh + qemu_run +``` + +4. Login AGL as `root`, and execute `passwd -d agl-driver`. Type `exit` and login as `agl-driver`. Run the Flutter Gallery example with the command in AGL's terminal. + +``` + flutter-auto --window-type="BG" --b=/usr/share/flutter/gallery --f +``` + + +### Profile + +1. Change AGL-qemu flutter_runtime value in $AGL_TOP/sources/meta-agl-devel/meta-agl-flutter/tools/flutter_workspace_config.json to `profile`. + +``` + { + "id": "AGL-qemu", + "type": "qemu", + "arch": "x86_64", + "flutter_runtime": "profile", + "runtime": { +``` + +This enables download of QEMU `profile` variant. + +2. Run the flutter workspace script + +3. Run the following commands on the host's terminal, a QEMU window and a new terminal for AGL will be brought up. + +``` + cd $FLUTTER_WORKSPACE + unset QEMU_IMAGE + source ./setup_env.sh + qemu_run +``` + +4. If running an updated QEMU image, edit `~/.ssh/known_hosts` and remove previous connection. + +5. After waiting for QEMU image to boot to idle issue +``` + ssh -p 2222 root@localhost who +``` +Answering with `y` appends QEMU connection to `~/.ssh/known_hosts` + +6. Login AGL as `agl-driver`, and issue the following command +``` + flutter-auto --window-type="BG" --b=/usr/share/flutter/gallery --f --observatory-host=0.0.0.0 --observatory-port=1234 +``` + +The last line of the output message should look similar to this: +``` + flutter: The Dart VM service is listening on http://0.0.0.0:1234/xxxxxxxxxxx=/ +``` + +7. Run the following command in the host terminal, using the correct hash suffix. +``` + flutter attach --device-id=AGL-qemu --debug-url=http://127.0.0.1:1234/xxxxxxxxxxx=/ +``` +​ +8. Then you should see the output as below. It tells us the URL of the Flutter DevTools debugger and profiler on AGL x86_64 QEMU Image. +`An Observatory debugger and profiler on AGL x86_64 QEMU Image is available at: http://127.0.0.1:37383/xxxxxxxxxxx=/` +​ +9. in the terminal type `v` to launch the debugger. diff --git a/meta-agl-flutter/conf/include/agl-flutter.inc b/meta-agl-flutter/conf/include/agl-flutter.inc index a24400c8..7d6fce6d 100644 --- a/meta-agl-flutter/conf/include/agl-flutter.inc +++ b/meta-agl-flutter/conf/include/agl-flutter.inc @@ -1,5 +1,5 @@ AGL_FEATURES += "agl-flutter" -# Over-ride Flutter SDK tag to ensure reproducible builds. -# This should be updated as required to match meta-flutter updates. -FLUTTER_SDK_TAG = "3.0.5" +######################################### +# FLUTTER_SDK_TAG is now Pinned upstream +######################################### diff --git a/meta-agl-flutter/recipes-graphics/flutter-apps/flutter-gallery/flutter-gallery.service b/meta-agl-flutter/recipes-graphics/flutter-apps/flutter-gallery/flutter-gallery.service index 71ab791d..3d4ecbf1 100644 --- a/meta-agl-flutter/recipes-graphics/flutter-apps/flutter-gallery/flutter-gallery.service +++ b/meta-agl-flutter/recipes-graphics/flutter-apps/flutter-gallery/flutter-gallery.service @@ -3,7 +3,7 @@ Requires=agl-compositor.service After=agl-compositor.service [Service] -ExecStart=/usr/bin/flutter-auto --j=/usr/share/flutter/default.json +ExecStart=/usr/bin/flutter-auto --j=/usr/share/flutter/default.json --b=/usr/share/flutter/gallery --f Restart=on-failure [Install] diff --git a/meta-agl-flutter/recipes-graphics/flutter-apps/flutter-gallery/gallery_on_bg-debug.json b/meta-agl-flutter/recipes-graphics/flutter-apps/flutter-gallery/gallery_on_bg-debug.json deleted file mode 100644 index 5a84a0bd..00000000 --- a/meta-agl-flutter/recipes-graphics/flutter-apps/flutter-gallery/gallery_on_bg-debug.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "view" : [ { - "window_type" : "BG", - "bundle_path" : "/usr/share/flutter/gallery", - "vm_args":["--observatory-host", "0.0.0.0", "--observatory-port", "1234"], - "width" : 1920, - "height": 1080, - "fullscreen": true - } - ] -} diff --git a/meta-agl-flutter/recipes-graphics/flutter-apps/flutter-gallery/gallery_on_bg-profile.json b/meta-agl-flutter/recipes-graphics/flutter-apps/flutter-gallery/gallery_on_bg-profile.json deleted file mode 100644 index 3309fde4..00000000 --- a/meta-agl-flutter/recipes-graphics/flutter-apps/flutter-gallery/gallery_on_bg-profile.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "view" : [ { - "window_type" : "BG", - "bundle_path" : "/usr/share/flutter/gallery", - "vm_args":["--observatory-host", "0.0.0.0", "--observatory-port", "1234", "--start-paused"], - "width" : 1920, - "height": 1080, - "fullscreen": true - } - ] -} diff --git a/meta-agl-flutter/recipes-graphics/flutter-apps/flutter-gallery/gallery_on_bg-release.json b/meta-agl-flutter/recipes-graphics/flutter-apps/flutter-gallery/gallery_on_bg-release.json deleted file mode 100644 index 6a2a8448..00000000 --- a/meta-agl-flutter/recipes-graphics/flutter-apps/flutter-gallery/gallery_on_bg-release.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "view" : [ { - "window_type" : "BG", - "bundle_path" : "/usr/share/flutter/gallery", - "width" : 1920, - "height": 1080, - "fullscreen": true - } - ] -} diff --git a/meta-agl-flutter/recipes-graphics/flutter-apps/flutter-gallery_aglflutter.inc b/meta-agl-flutter/recipes-graphics/flutter-apps/flutter-gallery_aglflutter.inc index 533bdd71..c618a2fe 100644 --- a/meta-agl-flutter/recipes-graphics/flutter-apps/flutter-gallery_aglflutter.inc +++ b/meta-agl-flutter/recipes-graphics/flutter-apps/flutter-gallery_aglflutter.inc @@ -2,15 +2,8 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/flutter-gallery:" SRC_URI += " \ file://flutter-gallery.service \ - file://gallery_on_bg-debug.json \ - file://gallery_on_bg-profile.json \ - file://gallery_on_bg-release.json \ " -APP_CONFIG = "gallery_on_bg-release.json" -APP_CONFIG:class-runtimedebug = "gallery_on_bg-debug.json" -APP_CONFIG:class-runtimeprofile = "gallery_on_bg-profile.json" - # To avoid conflicts with the systemd template scheme added via bbappend in # meta-agl-demo, package the standalone systemd unit separately. This is not # needed when meta-agl-flutter is used without meta-agl-demo, but that is not @@ -26,14 +19,10 @@ do_install:append() { install -D -m 0644 ${WORKDIR}/flutter-gallery.service ${D}${systemd_user_unitdir}/flutter-gallery.service install -d ${D}${systemd_user_unitdir}/agl-session.target.wants ln -s ../flutter-gallery.service ${D}${systemd_user_unitdir}/agl-session.target.wants/flutter-gallery.service - - install -D -m 0644 ${WORKDIR}/${APP_CONFIG} ${D}${datadir}/flutter/default.json } PACKAGE_BEFORE_PN += "${PN}-init" -FILES:${PN} += "${datadir}" - FILES:${PN}-init = "${systemd_user_unitdir}" RDEPENDS:${PN}-init = "${PN}" \ No newline at end of file diff --git a/meta-agl-flutter/recipes-graphics/flutter-engine/flutter-engine_git.bbappend b/meta-agl-flutter/recipes-graphics/flutter-engine/flutter-engine_git.bbappend deleted file mode 100644 index b3ca883f..00000000 --- a/meta-agl-flutter/recipes-graphics/flutter-engine/flutter-engine_git.bbappend +++ /dev/null @@ -1 +0,0 @@ -do_install[network] = "1" diff --git a/meta-agl-flutter/recipes-graphics/toyota/files/0001-Add-xdg-shell-app-id-command-line-argument.patch b/meta-agl-flutter/recipes-graphics/toyota/files/0001-Add-xdg-shell-app-id-command-line-argument.patch deleted file mode 100644 index 854c8dc8..00000000 --- a/meta-agl-flutter/recipes-graphics/toyota/files/0001-Add-xdg-shell-app-id-command-line-argument.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 394f48a1e535f464879fa94196ee6d73b86894f5 Mon Sep 17 00:00:00 2001 -From: Scott Murray -Date: Thu, 4 Aug 2022 14:36:08 -0400 -Subject: [PATCH] Add xdg-shell-app-id command-line argument - -Add a command-line argument for specifying the app id, so that basic -applications do not need to supply a full JSON configuration just to -do so. - -Signed-off-by: Scott Murray ---- - shell/main.cc | 10 ++++++++++ - 1 file changed, 10 insertions(+) - -diff --git a/shell/main.cc b/shell/main.cc -index deb4876..ba35acc 100644 ---- a/shell/main.cc -+++ b/shell/main.cc -@@ -161,6 +161,16 @@ int main(int argc, char** argv) { - FML_DLOG(INFO) << "Window Type: " << config.view.window_type; - RemoveArgument(config.view.vm_args, "--window-type=" + config.view.window_type); - } -+ if (cl.HasOption("xdg-shell-app-id")) { -+ cl.GetOptionValue("xdg-shell-app-id", &config.app_id); -+ if (config.app_id.empty()) { -+ FML_LOG(ERROR) -+ << "--xdg-shell-app-id option requires an argument (e.g. --xdg-shell-app-id=gallery)"; -+ return EXIT_FAILURE; -+ } -+ FML_DLOG(INFO) << "Application ID: " << config.app_id; -+ RemoveArgument(config.view.vm_args, "--xdg-shell-app-id=" + config.app_id); -+ } - } - - auto vm_arg_count = config.view.vm_args.size(); --- -2.35.3 - diff --git a/meta-agl-flutter/recipes-graphics/toyota/flutter-auto_aglflutter.inc b/meta-agl-flutter/recipes-graphics/toyota/flutter-auto_aglflutter.inc index 0b580c2a..1fb1a3b4 100644 --- a/meta-agl-flutter/recipes-graphics/toyota/flutter-auto_aglflutter.inc +++ b/meta-agl-flutter/recipes-graphics/toyota/flutter-auto_aglflutter.inc @@ -1,12 +1,4 @@ -FILESEXTRAPATHS:append := "${THISDIR}/files:" - -SRC_URI += " \ - file://0001-Add-xdg-shell-app-id-command-line-argument.patch \ -" # For now disable gstreamer to avoid needing to enable "commercial" # licenses for the stated ffmpeg dependency. PACKAGECONFIG:remove = "gstreamer" - -# Enable verbose logging on runtimedebug image -PACKAGECONFIG:append:runtimedebug = "verbose" diff --git a/meta-agl-flutter/recipes-platform/images/agl-image-flutter-runtimedebug.bb b/meta-agl-flutter/recipes-platform/images/agl-image-flutter-runtimedebug.bb index af3688e2..b9260bf3 100644 --- a/meta-agl-flutter/recipes-platform/images/agl-image-flutter-runtimedebug.bb +++ b/meta-agl-flutter/recipes-platform/images/agl-image-flutter-runtimedebug.bb @@ -10,10 +10,8 @@ IMAGE_INSTALL:append = "\ flutter-auto-runtimedebug \ \ flutter-engine-runtimedebug-sdk-dev \ - \ - flutter-gallery-runtimedebug \ - flutter-gallery-runtimedebug-init \ - flutter-test-texture-egl-runtimedebug \ - flutter-test-secure-storage-runtimedebug \ - flutter-test-localization-runtimedebug \ + " + +IMAGE_FEATURES:append = "\ + ssh-server-openssh \ " diff --git a/meta-agl-flutter/recipes-platform/images/agl-image-flutter-runtimeprofile.bb b/meta-agl-flutter/recipes-platform/images/agl-image-flutter-runtimeprofile.bb index 031000a9..8b819922 100644 --- a/meta-agl-flutter/recipes-platform/images/agl-image-flutter-runtimeprofile.bb +++ b/meta-agl-flutter/recipes-platform/images/agl-image-flutter-runtimeprofile.bb @@ -9,9 +9,18 @@ IMAGE_INSTALL:append = "\ \ flutter-auto-runtimeprofile \ \ + flutter-engine-runtimeprofile-sdk-dev \ + \ flutter-gallery-runtimeprofile \ - flutter-gallery-runtimeprofile-init \ + flutter-test-animated-background-runtimeprofile \ flutter-test-texture-egl-runtimeprofile \ flutter-test-secure-storage-runtimeprofile \ flutter-test-localization-runtimeprofile \ + \ + flutter-app-igalia-homescreen-runtimeprofile \ + flutter-app-pumped-fuel-ped-runtimeprofile \ + " + +IMAGE_FEATURES:append = "\ + ssh-server-openssh \ " diff --git a/meta-agl-flutter/recipes-platform/images/agl-image-flutter-runtimerelease.bb b/meta-agl-flutter/recipes-platform/images/agl-image-flutter-runtimerelease.bb index 8220e313..ffc19e84 100644 --- a/meta-agl-flutter/recipes-platform/images/agl-image-flutter-runtimerelease.bb +++ b/meta-agl-flutter/recipes-platform/images/agl-image-flutter-runtimerelease.bb @@ -9,9 +9,14 @@ IMAGE_INSTALL:append = "\ \ flutter-auto-runtimerelease \ \ + flutter-engine-runtimerelease-sdk-dev \ + \ flutter-gallery-runtimerelease \ - flutter-gallery-runtimerelease-init \ + flutter-test-animated-background-runtimerelease \ flutter-test-texture-egl-runtimerelease \ flutter-test-secure-storage-runtimerelease \ flutter-test-localization-runtimerelease \ + \ + flutter-app-igalia-homescreen-runtimerelease \ + flutter-app-pumped-fuel-ped-runtimerelease \ " diff --git a/meta-agl-flutter/tools/flutter_workspace_config.json b/meta-agl-flutter/tools/flutter_workspace_config.json new file mode 100644 index 00000000..bb7f23cc --- /dev/null +++ b/meta-agl-flutter/tools/flutter_workspace_config.json @@ -0,0 +1,156 @@ +{ + "flutter-version": "3.3.1", + "platforms": [ + { + "id": "desktop-auto", + "type": "host", + "arch": "x86_64", + "flutter_runtime": "debug", + "runtime": { + "backend": "egl", + "config": { + "width": 1920, + "height": 1080, + "cursor_theme": "DMZ-White" + }, + "install_dependent_packages": true, + "artifact_source": "github", + "github_owner": "toyota-connected", + "github_repo": "ivi-homescreen", + "github_workflow": "flutter-auto-linux.yml", + "github_artifact": "flutter-auto-${BACKEND}-dbg.amd64.deb.zip" + }, + "overwrite-existing": true, + "custom-device": { + "id": "desktop-auto", + "label": "Toyota flutter-auto", + "sdkNameAndVersion": "flutter-auto x86_64", + "platform": "linux-x64", + "enabled": true, + "ping": ["bash", "-c", "loginctl show-session $(awk '/tty/ {print $1}' <(loginctl)) -p Type"], + "pingSuccessRegex": "Type=wayland", + "postBuild": null, + "install": ["bash", "-c", "mkdir -p /tmp/${appName}/data/flutter_assets && cp -r ${BUNDLE_FOLDER}/* /tmp/${appName} && cp -r ${localPath}/* /tmp/${appName}/data/flutter_assets"], + "uninstall": ["rm", "-rf", "tmp/${appName}"], + "runDebug": ["flutter-auto", "--j=${FLUTTER_WORKSPACE}/.flutter-auto/default_config.json", "--b=/tmp/${appName}"], + "forwardPort": null, + "forwardPortSuccessRegex": null, + "screenshot": null + } + }, + { + "id": "AGL-qemu", + "type": "qemu", + "arch": "x86_64", + "flutter_runtime": "debug", + "runtime": { + "config": { + "window_type": "BG", + "width": 1920, + "height": 1080, + "fullscreen": true + }, + "install_dependent_packages": true, + "relative_path": ".agl/agl-image-flutter-runtime${FLUTTER_RUNTIME}-qemux86-64.wic.vmdk", + "artifact_source": "github", + "github_owner": "meta-flutter", + "github_repo": "meta-flutter", + "github_workflow": "kirkstone-agl-x86_64.yml", + "github_artifact": "agl-image-flutter-runtime${FLUTTER_RUNTIME}-qemux86-64-linux", + "ovmf_path": "/usr/share/ovmf/OVMF.fd", + "cmd": "qemu-system-x86_64", + "args": "-enable-kvm -m 2048 -bios ${OVMF_PATH} -hda ${QEMU_IMAGE} -cpu kvm64 -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+popcnt -vga virtio -show-cursor -device virtio-rng-pci -serial mon:stdio -serial null -soundhw hda -device virtio-net-pci,netdev=net0,mac=52:54:00:12:35:02 -netdev user,id=net0,hostfwd=tcp::2222-:22,hostfwd=tcp::1234-:1234" + }, + "overwrite-existing": true, + "custom-device": { + "id": "AGL-qemu", + "label": "AGL x86_64 QEMU Image", + "sdkNameAndVersion": "agl-image-flutter-runtime${FLUTTER_RUNTIME}-qemux86-64.wic.vmdk", + "platform": "linux-x64", + "enabled": true, + "ping": [ + "bash", "-c", "(echo >/dev/tcp/localhost/2222) &>/dev/null && echo \"open 2222\" || echo \"close 2222\"" + ], + "pingSuccessRegex": "open 2222", + "postBuild": [ + "bash", "-c", "mkdir -p ${localPath}/../../.flutter-auto/data/flutter_assets && cp -r ${localPath}/* ${localPath}/../../.flutter-auto/data/flutter_assets && cp -r ${FLUTTER_WORKSPACE}/.agl/default_config.json ${localPath}/../../.flutter-auto/ && ssh -p 2222 -t -oBatchMode=yes root@localhost passwd -d agl-driver" + ], + "uninstall": [ + "bash", "-c", "ssh -p 2222 -t -t -oBatchMode=yes agl-driver@localhost rm -rf \"/tmp/${appName}\"" + ], + "install": [ + "bash", "-c", "ssh -p 2222 -t -t -oBatchMode=yes agl-driver@localhost mkdir -p \"/tmp/${appName}/data/flutter_assets\" && scp -r -P 2222 ${localPath}/../../.flutter-auto/* agl-driver@localhost:/tmp/${appName}" + ], + "runDebug": [ + "ssh", "-t", "-t", "-p", "2222", "-oBatchMode=yes", "agl-driver@localhost", + "flutter-auto", + "--j=/tmp/${appName}/default_config.json", + "--b=/tmp/${appName}", + "--observatory-host=0.0.0.0", + "--observatory-port=1234" + ], + "forwardPort": null, + "forwardPortSuccessRegex": null, + "screenshot": null + } + } + ], + "repos": [ + { + "uri": "https://github.com/flutter/gallery.git", + "branch": "master", + "rev": "9eb785cb997ff56c46e933c1c591f0a6f31454f6", + "pubspec_path": "gallery" + }, + { + "uri": "git@github.com:meta-flutter/tests.git", + "branch": "main" + }, + { + "uri": "https://github.com/meta-flutter/flutter_animated_background.git", + "branch": "meta-flutter", + "pubspec_path": "flutter_animated_background/example" + }, + { + "uri": "https://github.com/mogol/flutter_secure_storage.git", + "branch": "develop", + "rev": "e716593352b80330e05729486eade7c2167d3c71", + "pubspec_path": "flutter_secure_storage/flutter_secure_storage/example" + }, + { + "uri": "https://github.com/felipeerias/flutter_homescreen.git", + "branch": "main", + "pubspec_path": "flutter_homescreen" + }, + { + "uri": "https://github.com/bernardpumped/ped.git", + "branch": "agl", + "pubspec_path": "ped" + }, + { + "uri": "https://gerrit.automotivelinux.org/gerrit/apps/flutter-dashboard.git", + "branch": "master", + "pubspec_path": "flutter-dashboard" + }, + { + "uri": "https://gerrit.automotivelinux.org/gerrit/apps/flutter-hvac.git", + "branch": "master", + "pubspec_path": "flutter-hvac" + }, + { + "uri": "https://gerrit.automotivelinux.org/gerrit/apps/flutter-instrument-cluster.git", + "branch": "master", + "pubspec_path": "flutter-instrument-cluster" + }, + { + "uri": "https://gerrit.automotivelinux.org/gerrit/apps/flutter-mediaplayer.git", + "branch": "master", + "pubspec_path": "flutter-mediaplayer" + }, + { + "uri": "https://gerrit.automotivelinux.org/gerrit/apps/flutter-navigation.git", + "branch": "master", + "pubspec_path": "flutter-navigation" + } + ] +}