ROS workflow (althack/vscode_ros2_workspace)
The ROS workflow from althack/vscode_ros2_workspace, explained and optimized by Latchkey.
CI health: C - fair
Point runs-on at Latchkey and get run de-duplication, job timeouts, self-healing for flaky steps, and up to 58% lower cost, applied automatically.
What it does
This is the ROS workflow from the althack/vscode_ros2_workspace 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
name: ROS
on:
pull_request:
push:
branches:
- humble*
- iron*
- jazzy*
- rolling*
- main
workflow_dispatch:
jobs:
test:
name: test
runs-on: ubuntu-latest
steps:
-
name: Checkout code
uses: actions/checkout@v7
-
name: Test
uses: ./.github/actions/test/
lint:
name: ament_${{ matrix.linter }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
linter: [cppcheck, cpplint, uncrustify, lint_cmake, xmllint, flake8, pep257]
steps:
-
name: Checkout code
uses: actions/checkout@v7
-
name: Run linter
uses: ./.github/actions/lint/
env:
LINTER: ${{ matrix.linter }}
complete:
name: Tests passed
needs:
- lint
- test
runs-on: ubuntu-latest
steps:
- name: Check
run: echo "Completed successfully!"
The same workflow, on Latchkey
Removes redundant runs and caps runaway jobs. Added and changed lines are highlighted.
name: ROS on: pull_request: push: branches: - humble* - iron* - jazzy* - rolling* - main workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: test: timeout-minutes: 30 name: test runs-on: latchkey-small steps: - name: Checkout code uses: actions/checkout@v7 - name: Test uses: ./.github/actions/test/ lint: timeout-minutes: 30 name: ament_${{ matrix.linter }} runs-on: latchkey-small strategy: fail-fast: false matrix: linter: [cppcheck, cpplint, uncrustify, lint_cmake, xmllint, flake8, pep257] steps: - name: Checkout code uses: actions/checkout@v7 - name: Run linter uses: ./.github/actions/lint/ env: LINTER: ${{ matrix.linter }} complete: timeout-minutes: 30 name: Tests passed needs: - lint - test runs-on: latchkey-small steps: - name: Check run: echo "Completed successfully!"
What changed
- Run on Latchkey managed runners with one line (
runs-on), which apply the fixes below automatically and self-heal transient failures. This example useslatchkey-small; pick the runner size that fits the job. - Cancel superseded runs when a branch or PR gets a newer push.
- Add a job timeout so a hung step cannot burn hours of runner time.
This workflow runs 3 jobs (9 with the matrix expanded) per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.