Servery a DevOps

GitHub Actions: první CI workflow pro testy a lint

Návod na první GitHub Actions workflow – struktura YAML, spouštěče, testy v Pythonu a Node.js, matice verzí, cache závislostí a služba PostgreSQL.

12. 10. 2026 · 3 min čtení

GitHub Actions je CI/CD přímo v GitHubu. Při každém pushi nebo pull requestu spustí vaše testy na čistém stroji a výsledek ukáže u commitu. Odhalí chyby dřív, než se dostanou do main. Prvních pár workflow zvládnete za odpoledne.

Kam workflow patří

Každý workflow je YAML soubor ve složce .github/workflows/ v repozitáři. Název souboru je libovolný, třeba ci.yml. Po pushi ho GitHub sám najde a výsledky uvidíte v záložce Actions.

Minimální workflow (Python)

name: CI

on:
  push:
    branches: [main]
  pull_request:

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
          cache: pip

      - name: Instalace závislostí
        run: pip install -r requirements.txt

      - name: Lint
        run: |
          pip install ruff
          ruff check .

      - name: Testy
        run: pytest -q

Co jednotlivé části znamenají:

Klíč Význam
on kdy se workflow spustí (push do main, každý PR)
jobs jednotlivé úlohy, ve výchozím stavu běží paralelně
runs-on typ stroje (runneru) – ubuntu-latest, windows-latest, macos-latest
steps kroky v pořadí; uses volá hotovou akci, run spustí příkaz v shellu

Krok actions/checkout je nutný – bez něj runner váš kód vůbec nemá.

Varianta pro Node.js

name: CI
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: npm
      - run: npm ci
      - run: npm run lint
      - run: npm test

npm ci instaluje přesně podle package-lock.json a je pro CI vhodnější než npm install.

Matice: testy na více verzích

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        python-version: ["3.10", "3.11", "3.12"]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}
      - run: pip install -r requirements.txt
      - run: pytest

Vzniknou tři paralelní joby. Verze pište v uvozovkách – jinak YAML z 3.10 udělá číslo 3.1.

Databáze pro testy: services

Potřebujete-li PostgreSQL, spusťte ho jako službu vedle jobu:

jobs:
  test:
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres:16
        env:
          POSTGRES_PASSWORD: test
          POSTGRES_DB: app_test
        ports:
          - 5432:5432
        options: >-
          --health-cmd pg_isready
          --health-interval 5s
          --health-timeout 5s
          --health-retries 5
    env:
      DATABASE_URL: postgres://postgres:test@localhost:5432/app_test
    steps:
      - uses: actions/checkout@v4
      # ... instalace a testy

Health check zajistí, že kroky začnou až po startu databáze.

Tajné údaje

Hesla a tokeny nikdy nepište do YAML. Uložte je v Settings → Secrets and variables → Actions a použijte:

      - run: ./deploy.sh
        env:
          API_TOKEN: ${{ secrets.API_TOKEN }}

GitHub hodnoty secrets v logu maskuje. Workflow spuštěné z PR z forku k secrets ve výchozím stavu přístup nemají.

Užitečné doplňky

Ruční spuštění tlačítkem v záložce Actions:

on:
  workflow_dispatch:

Spouštění jen při změně určitých souborů:

on:
  push:
    paths:
      - "backend/**"

Zrušení starších běhů téže větve, když pushnete znovu:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

Minimální oprávnění tokenu (dobrá bezpečnostní praxe):

permissions:
  contents: read

Ladění, když to selže

  • Klikněte na neúspěšný job a rozbalte červený krok – uvidíte celý výstup.
  • Re-run jobs → Enable debug logging přidá podrobnější logy.
  • Lokálně lze workflow zkoušet nástrojem act (act -j test), který používá Docker. Neodpovídá runneru stoprocentně, ale na rychlé iterace stačí.
  • Nejčastější chyby: špatné odsazení YAML, chybějící actions/checkout, verze bez uvozovek, test spoléhající na lokální soubor, který není v repozitáři.

Badge do README

![CI](https://github.com/UZIVATEL/REPO/actions/workflows/ci.yml/badge.svg)

Další krok

Až budou testy zelené, propojte workflow s ochranou větve (Require status checks to pass), aby nešel sloučit PR s rozbitými testy. A pak můžete přidat automatický deploy na VPS.