device_doctor

This utility tool is used by LUCI infrastructure to manage device health for Flutter LUCI swarming bots.

It offers support for different host platforms: linux, mac and windows, and different devices: android and iOS.

Dependencies

Different devices require different tools to be in the path beforehand.

android

  • adb

iOS

  • idevice_id
  • idevicediagnostics
  • xcrun

Building

This tool is meant to be published as an AOT compiled binary distributed via CIPD.

Build the tool for different host platforms on corresponding machines. It will automatically download a suitable version of Dart to build the binary.

To create the CIPD package, make sure that the build/ folder does not exist.

Auto build

Every new commit will trigger pre-submit builders to auto build a new version for different platforms without any tag/ref.

When a new commit is submitted, post-submit builders will trigger a new version with a tag of commit_sha, and a ref of latest.

Manual build

Running tool/build.sh or tool/build.bat will build an executable binary in the build folder. Then push to cipd by running

cipd create -in build                   \
  -name flutter/device_doctor/<os>-amd64 \
  -ref <ref>                     \
  -tag sha_timestamp:<revision>_<timestamp>
  • os: linux, mac, or windows.
  • ref: release or staging

How to use

device_doctor is the executable binary, and can be called

/path/to/device_doctor --action <healthcheck|recovery|properties> --device-os <android|ios>

Use /path/to/device_doctor --help to learn more.

Note: this tool is assuming one connected device on each host, but can be easily extended to support multiple devices.

Releasing device_doctor

The release process of the tool is controlled by setting release and staging refs.

To promote a given version to staging you can run the following command:

cipd set-ref flutter/device_doctor/<os>-<arch> -ref staging -version <packageid>

Example for mac and amd64:

cipd set-ref flutter/device_doctor/mac-amd64 -ref staging -version IQgKjNstWbFhUuMVp898zZoPKRd66KLRKuiY88XYQXAC

After extensive validation on staging you can promote the package to release using:

cipd set-ref flutter/device_doctor/<os>-<arch> -ref release -version <packageid>