Skip to content
Latchkey

Style and Typing checks workflow (rsagroup/rsatoolbox)

The Style and Typing checks workflow from rsagroup/rsatoolbox, explained and optimized by Latchkey.

D

CI health: D - needs work

Point runs-on at Latchkey and get caching, run de-duplication, job timeouts, self-healing for flaky steps, and up to 58% lower cost, applied automatically.

Grade your own workflow free or run it on Latchkey →
Source: rsagroup/rsatoolbox.github/workflows/style.ymlLicense MITView source

What it does

This is the Style and Typing checks workflow from the rsagroup/rsatoolbox repository, a real project running GitHub Actions. It is shown here with attribution under its MIT license.

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

The workflow

workflow (.yml)
name: Style and Typing checks

on:
  pull_request:
    types: [opened, synchronize, reopened]

permissions:
  contents: read
  statuses: write

jobs:

  style:
    runs-on: ubuntu-22.04
    env:
      GH_TOKEN: ${{ github.token }}
    steps:
    - uses: actions/checkout@v4
      with:
        fetch-depth: 0
    - uses: actions/setup-python@v5
      with:
        python-version: '3.11'
    - name: Install dependencies
      run: pip install ruff
    - name: Ruff output to file
      run: ruff check -ne -o ruff.log --output-format concise
    - name: Ruff output as annotations
      run: echo "$(ruff check -e --output-format github)"
    - name: Process Ruff output
      run: python devops/style_assistant.py ${{ github.run_id }} ${{ github.job }} ${{ github.event.pull_request.head.sha }}
    # - name: Report status
    #   run: gh api ${{ env.DEVOPS_ASST_API_ARGS }}


  typing:
    runs-on: ubuntu-22.04
    env:
      GH_TOKEN: ${{ github.token }}
    steps:
    - uses: actions/setup-python@v5
      with:
        python-version: '3.11'
    - name: Python Version
      run: python --version
    - name: Update Pip
      run: python -m pip install --upgrade pip
    - name: Install dependencies
      run: pip install build setuptools pandas-stubs types-tqdm pyright
    - uses: actions/checkout@v4
      with:
        ref: main
        fetch-depth: 0
    - name: Build package
      run: python -m build --sdist
    - name: Install rsatoolbox 
      run: pip install dist/*
    - name: Pyright (on main)
      continue-on-error: true
      run: pyright > pyright_main.log
    - name: Uninstall rsatoolbox 
      run: pip uninstall -y rsatoolbox
    - name: Remove builds
      run: rm dist/*
    - uses: actions/checkout@v4
      with:
        clean: false
        fetch-depth: 0
    - name: Build package
      run: python -m build --sdist
    - name: Install rsatoolbox 
      run: pip install dist/*
    - name: Pyright (on PR)
      continue-on-error: true
      run: pyright > pyright_pr.log
    - name: Process Pyright output
      run: python devops/typing_assistant.py ${{ github.run_id }} ${{ github.job }} ${{ github.event.pull_request.head.sha }}
    # - name: Report status
    #   run: gh api ${{ env.DEVOPS_ASST_API_ARGS }}

The same workflow, on Latchkey

Estimated ~20% faster on cache hits, plus fewer wasted runs and a safer supply chain. Added and changed lines are highlighted.

name: Style and Typing checks
 
on:
  pull_request:
    types: [opened, synchronize, reopened]
 
permissions:
  contents: read
  statuses: write
 
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true
 
jobs:
 
  style:
    timeout-minutes: 30
    runs-on: latchkey-small
    env:
      GH_TOKEN: ${{ github.token }}
    steps:
    - uses: actions/checkout@v4
      with:
        fetch-depth: 0
    - uses: actions/setup-python@v5
      with:
        cache: 'pip'
        python-version: '3.11'
    - name: Install dependencies
      run: pip install ruff
    - name: Ruff output to file
      run: ruff check -ne -o ruff.log --output-format concise
    - name: Ruff output as annotations
      run: echo "$(ruff check -e --output-format github)"
    - name: Process Ruff output
      run: python devops/style_assistant.py ${{ github.run_id }} ${{ github.job }} ${{ github.event.pull_request.head.sha }}
    # - name: Report status
    #   run: gh api ${{ env.DEVOPS_ASST_API_ARGS }}
 
 
  typing:
    timeout-minutes: 30
    runs-on: latchkey-small
    env:
      GH_TOKEN: ${{ github.token }}
    steps:
    - uses: actions/setup-python@v5
      with:
        cache: 'pip'
        python-version: '3.11'
    - name: Python Version
      run: python --version
    - name: Update Pip
      run: python -m pip install --upgrade pip
    - name: Install dependencies
      run: pip install build setuptools pandas-stubs types-tqdm pyright
    - uses: actions/checkout@v4
      with:
        ref: main
        fetch-depth: 0
    - name: Build package
      run: python -m build --sdist
    - name: Install rsatoolbox 
      run: pip install dist/*
    - name: Pyright (on main)
      continue-on-error: true
      run: pyright > pyright_main.log
    - name: Uninstall rsatoolbox 
      run: pip uninstall -y rsatoolbox
    - name: Remove builds
      run: rm dist/*
    - uses: actions/checkout@v4
      with:
        clean: false
        fetch-depth: 0
    - name: Build package
      run: python -m build --sdist
    - name: Install rsatoolbox 
      run: pip install dist/*
    - name: Pyright (on PR)
      continue-on-error: true
      run: pyright > pyright_pr.log
    - name: Process Pyright output
      run: python devops/typing_assistant.py ${{ github.run_id }} ${{ github.job }} ${{ github.event.pull_request.head.sha }}
    # - name: Report status
    #   run: gh api ${{ env.DEVOPS_ASST_API_ARGS }}
 

What changed

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 2 jobs per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.

Actions used in this workflow