CI workflow (KapJI/capital-gains-calculator)
The CI workflow from KapJI/capital-gains-calculator, explained and optimized by Latchkey.
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.
What it does
This is the CI workflow from the KapJI/capital-gains-calculator 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
name: CI
on:
push:
branches:
- main
pull_request:
env:
PYTHON_VERSION: "3.12"
jobs:
pre-commit:
name: Pre-commit
runs-on: ubuntu-latest
steps:
- name: Check out the repository
uses: actions/checkout@v6
- name: Prepare and install deps
uses: ./.github/actions/install-deps
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Setup prek cache
uses: ./.github/actions/prek-cache
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Run prek on all files
run: |
uvx prek run --all-files --show-diff-on-failure --color=always
- name: Run python-typing-update
run: |
uvx prek run --hook-stage manual python-typing-update --all-files --show-diff-on-failure --color=always
markdown-link-check:
name: Markdown link check
runs-on: ubuntu-latest
steps:
- name: Check out the repository
uses: actions/checkout@v6
- name: Prepare and install deps
uses: ./.github/actions/install-deps
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Setup prek cache
uses: ./.github/actions/prek-cache
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Run markdown-link-check
run: |
uvx prek run --hook-stage manual markdown-link-check --all-files --show-diff-on-failure --color=always
docker-build:
name: Docker build
runs-on: ubuntu-latest
steps:
- name: Check out the repository
uses: actions/checkout@v6
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
- name: Build image
uses: docker/build-push-action@v7
with:
context: .
tags: local/cgt-calc:test
load: true
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Run pytest inside container
run: |
docker run --rm -e ENABLE_PDFLATEX=1 local/cgt-calc:test -lc "cd /build && uv run pytest -q"
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: env: PYTHON_VERSION: "3.12" concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: pre-commit: timeout-minutes: 30 name: Pre-commit runs-on: latchkey-small steps: - name: Check out the repository uses: actions/checkout@v6 - name: Prepare and install deps uses: ./.github/actions/install-deps with: python-version: ${{ env.PYTHON_VERSION }} - name: Setup prek cache uses: ./.github/actions/prek-cache with: python-version: ${{ env.PYTHON_VERSION }} - name: Run prek on all files run: | uvx prek run --all-files --show-diff-on-failure --color=always - name: Run python-typing-update run: | uvx prek run --hook-stage manual python-typing-update --all-files --show-diff-on-failure --color=always markdown-link-check: timeout-minutes: 30 name: Markdown link check runs-on: latchkey-small steps: - name: Check out the repository uses: actions/checkout@v6 - name: Prepare and install deps uses: ./.github/actions/install-deps with: python-version: ${{ env.PYTHON_VERSION }} - name: Setup prek cache uses: ./.github/actions/prek-cache with: python-version: ${{ env.PYTHON_VERSION }} - name: Run markdown-link-check run: | uvx prek run --hook-stage manual markdown-link-check --all-files --show-diff-on-failure --color=always docker-build: timeout-minutes: 30 name: Docker build runs-on: latchkey-small steps: - name: Check out the repository uses: actions/checkout@v6 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v4 - name: Build image uses: docker/build-push-action@v7 with: context: . tags: local/cgt-calc:test load: true cache-from: type=gha cache-to: type=gha,mode=max - name: Run pytest inside container run: | docker run --rm -e ENABLE_PDFLATEX=1 local/cgt-calc:test -lc "cd /build && uv run pytest -q"
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.
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.
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:
- Container pulls and builds
This workflow runs 3 jobs per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.