Skip to content
Latchkey

CI workflow (vstorm-co/pydantic-deepagents)

The CI workflow from vstorm-co/pydantic-deepagents, explained and optimized by Latchkey.

C

CI health: C - fair

Point runs-on at Latchkey and get run de-duplication, 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: vstorm-co/pydantic-deepagents.github/workflows/ci.ymlLicense MITView source

What it does

This is the CI workflow from the vstorm-co/pydantic-deepagents 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: CI

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

env:
  COLUMNS: 150

jobs:
  lint:
    name: Lint
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.10", "3.13"]
    steps:
      - uses: actions/checkout@v4

      - name: Install uv
        uses: astral-sh/setup-uv@v4

      - name: Set up Python ${{ matrix.python-version }}
        run: uv python install ${{ matrix.python-version }}

      - name: Install dependencies
        run: uv sync --python ${{ matrix.python-version }} --group lint

      - name: Run ruff format check
        run: uv run ruff format --check

      - name: Run ruff lint
        run: uv run ruff check

  typecheck:
    name: Type Check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install uv
        uses: astral-sh/setup-uv@v4

      - name: Set up Python
        run: uv python install 3.12

      - name: Install dependencies
        run: uv sync --all-extras --group dev --group lint

      - name: Run Pyright
        run: uv run pyright

      - name: Run MyPy
        run: uv run mypy pydantic_deep tests

  test:
    name: Test Python ${{ matrix.python-version }}
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        python-version: ["3.10", "3.11", "3.12", "3.13"]
    steps:
      - uses: actions/checkout@v4

      - name: Install uv
        uses: astral-sh/setup-uv@v4

      - name: Set up Python ${{ matrix.python-version }}
        run: uv python install ${{ matrix.python-version }}

      - name: Install dependencies
        run: uv sync --python ${{ matrix.python-version }} --all-extras --group dev

      - name: Run tests with coverage
        run: |
          uv run coverage run -m pytest
          uv run coverage report
          uv run coverage lcov -o coverage.lcov

      - name: Upload coverage to Coveralls
        if: matrix.python-version == '3.12'
        uses: coverallsapp/github-action@v2
        with:
          file: coverage.lcov

  security:
    name: Security Scan
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install uv
        uses: astral-sh/setup-uv@v4

      - name: Set up Python
        run: uv python install 3.12

      - name: Install dependencies
        run: uv sync --python 3.12 --group lint

      - name: Run Bandit security scanner
        run: uv run bandit -r pydantic_deep -x tests -ll

  docs:
    name: Build Documentation
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install uv
        uses: astral-sh/setup-uv@v4

      - name: Set up Python
        run: uv python install 3.12

      - name: Install dependencies
        run: uv sync --group docs

      - name: Build docs
        run: uv run mkdocs build

  all-checks:
    name: All Checks Passed
    runs-on: ubuntu-latest
    needs: [lint, typecheck, security, test, docs]
    steps:
      - name: All checks passed
        run: echo "All CI checks passed successfully!"

The same workflow, on Latchkey

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

name: CI
 
on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main
 
env:
  COLUMNS: 150
 
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true
 
jobs:
  lint:
    timeout-minutes: 30
    name: Lint
    runs-on: latchkey-small
    strategy:
      matrix:
        python-version: ["3.10", "3.13"]
    steps:
      - uses: actions/checkout@v4
 
      - name: Install uv
        uses: astral-sh/setup-uv@v4
 
      - name: Set up Python ${{ matrix.python-version }}
        run: uv python install ${{ matrix.python-version }}
 
      - name: Install dependencies
        run: uv sync --python ${{ matrix.python-version }} --group lint
 
      - name: Run ruff format check
        run: uv run ruff format --check
 
      - name: Run ruff lint
        run: uv run ruff check
 
  typecheck:
    timeout-minutes: 30
    name: Type Check
    runs-on: latchkey-small
    steps:
      - uses: actions/checkout@v4
 
      - name: Install uv
        uses: astral-sh/setup-uv@v4
 
      - name: Set up Python
        run: uv python install 3.12
 
      - name: Install dependencies
        run: uv sync --all-extras --group dev --group lint
 
      - name: Run Pyright
        run: uv run pyright
 
      - name: Run MyPy
        run: uv run mypy pydantic_deep tests
 
  test:
    timeout-minutes: 30
    name: Test Python ${{ matrix.python-version }}
    runs-on: latchkey-small
    strategy:
      fail-fast: false
      matrix:
        python-version: ["3.10", "3.11", "3.12", "3.13"]
    steps:
      - uses: actions/checkout@v4
 
      - name: Install uv
        uses: astral-sh/setup-uv@v4
 
      - name: Set up Python ${{ matrix.python-version }}
        run: uv python install ${{ matrix.python-version }}
 
      - name: Install dependencies
        run: uv sync --python ${{ matrix.python-version }} --all-extras --group dev
 
      - name: Run tests with coverage
        run: |
          uv run coverage run -m pytest
          uv run coverage report
          uv run coverage lcov -o coverage.lcov
 
      - name: Upload coverage to Coveralls
        if: matrix.python-version == '3.12'
        uses: coverallsapp/github-action@v2
        with:
          file: coverage.lcov
 
  security:
    timeout-minutes: 30
    name: Security Scan
    runs-on: latchkey-small
    steps:
      - uses: actions/checkout@v4
 
      - name: Install uv
        uses: astral-sh/setup-uv@v4
 
      - name: Set up Python
        run: uv python install 3.12
 
      - name: Install dependencies
        run: uv sync --python 3.12 --group lint
 
      - name: Run Bandit security scanner
        run: uv run bandit -r pydantic_deep -x tests -ll
 
  docs:
    timeout-minutes: 30
    name: Build Documentation
    runs-on: latchkey-small
    steps:
      - uses: actions/checkout@v4
 
      - name: Install uv
        uses: astral-sh/setup-uv@v4
 
      - name: Set up Python
        run: uv python install 3.12
 
      - name: Install dependencies
        run: uv sync --group docs
 
      - name: Build docs
        run: uv run mkdocs build
 
  all-checks:
    timeout-minutes: 30
    name: All Checks Passed
    runs-on: latchkey-small
    needs: [lint, typecheck, security, test, docs]
    steps:
      - name: All checks passed
        run: echo "All CI checks passed successfully!"
 

What changed

2 third-party actions are referenced by a movable tag. Pin them to the commit SHA (Latchkey resolves and applies this automatically) so a repointed tag cannot change what runs.

This workflow runs 6 jobs (10 with the matrix expanded) per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.

Actions used in this workflow