Skip to content

Work with the Embedded Manager

How to list and inspect Embedded Manager projects, inspect their builds, and start a new build.

An Embedded Manager project links a model's firmware to the GitLab repository that builds it. Every command identifies a project by the model name — the same name you use with tlm-cli pms models.

List projects

tlm-cli em projects list

The table shows each project's model, GitLab project, GitLab connection, storage bucket, board farm slot, and number of builds, sorted by model name. Up to 25 projects are fetched; raise the limit with --limit:

tlm-cli em projects list --limit 50

Show only the projects of one model (exact name):

tlm-cli em projects list --model "gateway-v2"

Inspect a project

tlm-cli em projects show "gateway-v2"

Displays: Model, Firmware, GitLab Project ID, Board Farm Slot, Connection (name and host), Bucket (name, endpoint and bucket), and Customers, followed by the last 10 builds with their ref, version, status, start time (UTC), and duration.

Build statuses are coloured: success green, failed red, running/pending yellow, canceled/skipped dim.

Press D to toggle the detail view, which adds each build's SHA, GitLab pipeline ID, OTA status and author. Press Q, Esc or Enter to quit.

Inspect a build

Copy a build ID from the Recent Builds table, then:

tlm-cli em builds show 6f1c2b7e-0d1a-4c55-9a7e-1f2b3c4d5e6f

The compact view shows the model, ref, version, status, start time, duration and pipeline ID. Press D for the full picture: the build configuration (sensitive values appear as (redacted)), artifact paths, OTA approval, and a table of the jobs of each pipeline stage with their status, duration and failure reason.

Start a build

Review the request first:

tlm-cli em builds create "gateway-v2" --combination qemux86-64-prod-test-image --dry-run

The combinations and their options come from the project's embedded-manager.conf at the chosen ref (the default branch unless you pass --ref). Leave out --combination to pick one from a list.

Pass option values with --set. For passwords and other sensitive options, give only the key — the CLI asks for the value without echoing it, so it never lands in your shell history:

tlm-cli em builds create "gateway-v2" --combination qemux86-64-prod-image --set root_password

The CLI asks only in an interactive terminal: piping the output or passing --plain turns the prompts off, and a bare --set KEY is then an error. For automation, take the value from an environment variable instead of typing it:

tlm-cli --plain em builds create "gateway-v2" --combination qemux86-64-prod-image --yes \
  --set root_password="$ROOT_PASSWORD_HASH"

Keep in mind that command-line arguments are visible to other processes on the same machine.

The CLI shows the request and asks for confirmation before starting the pipeline, then prints the build ID. Add --follow to wait for the build and see each job change state; it stops when the build finishes or waits on a manual job (continue that from the web UI).

Use the output in scripts

tlm-cli --plain em projects show "gateway-v2" | jq '.builds[] | select(.Status == "failed")'