$ git push✗ 1 failedv1.0v1.11 INSTALL2 LINT3 TEST4 BUILD1pip install .2ruff check .3pytest4python -m build
Stages: install, lint, test, build, run in order on the CI serverLamps: amber running, green pass, red fail, grey skippedToken: the commit travelling from your laptop to the live appAt the back: your laptop, the shared repository and the live app. In the middle: the CI server with four stages, install, lint, test and build, each with a lamp, and the merge gate for the main branch at the end. In front: the commands the pipeline runs. A push sends the commit token along the pipeline. The first commit fails its test, so build is skipped and the gate stays locked; the report comes back, the fixed commit passes every stage, merges and goes live. Real pipelines often run some checks side by side to save time and add others, such as type checks or security scans. Install, lint, test, build is a common, simple shape.

A push starts it

  1. A commit is a saved snapshot of your changes. Pushing sends it to the shared repository your team works from. Continuous integration (CI) means everyone does this often, at least daily, in small pieces, and a machine checks every one.

The checks

When a check fails

Green to release

What happens

;; step 1/10 · push
$ git commit -m "Add add()"
$ git push
commit   a saved snapshot of your changes
push     send it to the shared repository
CI       small changes, merged often (at least daily),
         each one checked by a machine

Blocking the merge is a setting on the shared repository (on GitHub, a branch protection rule with required status checks), not something the pipeline does by itself. Martin Fowler gives a ten-minute guideline for the main commit build: slower pipelines lose the fast feedback that makes CI work.