Skip to content
Latchkey

Fast Tests workflow (jokeru8/piper_lerobot)

The Fast Tests workflow from jokeru8/piper_lerobot, explained and optimized by Latchkey.

B

CI health: B - good

Point runs-on at Latchkey and get job timeouts, SHA-pinned actions, self-healing for flaky steps, and up to 58% lower cost, applied automatically.

Grade your own workflow free or run it on Latchkey →
Source: jokeru8/piper_lerobot.github/workflows/fast_tests.ymlLicense Apache-2.0View source

What it does

This is the Fast Tests workflow from the jokeru8/piper_lerobot repository, a real project running GitHub Actions. It is shown here with attribution under its Apache-2.0 license.

Below, Latchkey shows a faster, safer version produced by its optimization engine.

The workflow

workflow (.yml)
# Copyright 2025 The HuggingFace Inc. team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# This workflow handles fast testing.
name: Fast Tests

on:
  # Allows running this workflow manually from the Actions tab
  workflow_dispatch:

  pull_request:
    branches:
      - main
    paths:
      - "src/**"
      - "tests/**"
      - ".github/workflows/**"
      - "pyproject.toml"
      - "Makefile"
  push:
    branches:
      - main
    paths:
      - "src/**"
      - "tests/**"
      - ".github/workflows/**"
      - "pyproject.toml"
      - "Makefile"

permissions:
  contents: read

# Sets up the environment variables
env:
  UV_VERSION: "0.8.0"
  PYTHON_VERSION: "3.10"
  DOCKER_IMAGE_NAME: huggingface/lerobot-gpu

# Ensures that only the latest commit for a PR or branch is built, canceling older runs.
concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

jobs:
  # This job runs pytests with the default dependencies.
  # It runs everytime we commit to a PR or push to main
  fast-pytest-tests:
    name: Fast Pytest Tests
    runs-on: ubuntu-latest
    env:
      MUJOCO_GL: egl
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false
          lfs: true

      # TODO(Steven): Evaluate the need of these dependencies
      - name: Install apt dependencies
        run: |
          sudo apt-get update && sudo apt-get install -y build-essential git \
          curl libglib2.0-0 libegl1-mesa-dev ffmpeg \
          libusb-1.0-0-dev speech-dispatcher libgeos-dev portaudio19-dev

      - name: Setup uv and Python
        uses: astral-sh/setup-uv@v6 # zizmor: ignore[unpinned-uses]
        with:
          enable-cache: true
          version: ${{ env.UV_VERSION }}
          python-version: ${{ env.PYTHON_VERSION }}

      - name: Install lerobot with test extras
        run: uv sync --extra "test"

      - name: Run pytest
        run: uv run pytest tests -vv --maxfail=10

The same workflow, on Latchkey

Removes redundant runs and caps runaway jobs. Added and changed lines are highlighted.

# Copyright 2025 The HuggingFace Inc. team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
 
# This workflow handles fast testing.
name: Fast Tests
 
on:
  # Allows running this workflow manually from the Actions tab
  workflow_dispatch:
 
  pull_request:
    branches:
      - main
    paths:
      - "src/**"
      - "tests/**"
      - ".github/workflows/**"
      - "pyproject.toml"
      - "Makefile"
  push:
    branches:
      - main
    paths:
      - "src/**"
      - "tests/**"
      - ".github/workflows/**"
      - "pyproject.toml"
      - "Makefile"
 
permissions:
  contents: read
 
# Sets up the environment variables
env:
  UV_VERSION: "0.8.0"
  PYTHON_VERSION: "3.10"
  DOCKER_IMAGE_NAME: huggingface/lerobot-gpu
 
# Ensures that only the latest commit for a PR or branch is built, canceling older runs.
concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true
 
jobs:
  # This job runs pytests with the default dependencies.
  # It runs everytime we commit to a PR or push to main
  fast-pytest-tests:
    timeout-minutes: 30
    name: Fast Pytest Tests
    runs-on: latchkey-small
    env:
      MUJOCO_GL: egl
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false
          lfs: true
 
      # TODO(Steven): Evaluate the need of these dependencies
      - name: Install apt dependencies
        run: |
          sudo apt-get update && sudo apt-get install -y build-essential git \
          curl libglib2.0-0 libegl1-mesa-dev ffmpeg \
          libusb-1.0-0-dev speech-dispatcher libgeos-dev portaudio19-dev
 
      - name: Setup uv and Python
        uses: astral-sh/setup-uv@v6 # zizmor: ignore[unpinned-uses]
        with:
          enable-cache: true
          version: ${{ env.UV_VERSION }}
          python-version: ${{ env.PYTHON_VERSION }}
 
      - name: Install lerobot with test extras
        run: uv sync --extra "test"
 
      - name: Run pytest
        run: uv run pytest tests -vv --maxfail=10
 

What changed

1 third-party action is referenced by a movable tag. Pin it to the commit SHA (Latchkey resolves and applies this automatically) so a repointed tag cannot change what runs.

What Latchkey heals here

This workflow has steps that commonly fail on transient issues (network, registries, flaky browsers). On Latchkey managed runners they are detected, retried, and self-healed instead of failing your build:

This workflow runs 1 job per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.

Actions used in this workflow