Workflow Guide - MocStepan/pdo GitHub Wiki
Práce s YAML pro GitHub Actions
Níže najdete stručný návod, jak strukturovat a pochopit YAML soubor pro GitHub Actions workflow. Ukážeme si základní části, ukázkový soubor a vysvětlíme, co jednotlivé klíče dělají.
1. Základní struktura
Každý workflow v GitHub Actions je definován v YAML souboru umístěném ve složce .github/workflows/
. Standardní kostra vypadá takto:
name: Název workflow # <1>
on: # <2>
push: # například spuštění při pushi
branches:
- main
jobs: # <3>
build: # název prvního jobu
runs-on: ubuntu-latest # prostředí, na kterém job běží
steps: # <4>
- name: Checkout code # krok 1
uses: actions/checkout@v3
- name: Set up Node.js # krok 2
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install deps # krok 3
run: npm install
- name: Run tests # krok 4
run: npm test
name:
– název workflow, který se zobrazí v GitHub Actions UI.on:
– události, které workflow spouštějí (push, pull_request, schedule, …).jobs:
– obsahuje jeden nebo více jobů (paralelních “úloh”), každý má svůj klíč.steps:
– seznam jednotlivých kroků, které job vykoná (checkout kódu, instalace, build, testy, atd.).
on:
)
2. Spouštěcí události (Pod klíčem on:
lze definovat více akcí:
on:
push:
branches:
- main
- release/*
pull_request:
types: [opened, synchronize, reopened]
schedule:
- cron: '0 2 * * *' # každý den ve 2:00 UTC
push
: spustí se přigit push
.pull_request
: spustí se na pull request (otevření, aktualizace, znovuotevření).schedule
: periodické spouštění podle cron výrazu.
jobs
)
3. Definice jobu (Pod jobs:
můžete mít několik jobů, např. build
, lint
, deploy
. Každý job běží izolovaně.
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run ESLint
run: npm run lint
build:
runs-on: ubuntu-latest
needs: lint # spustí se až po úspěšném lintu
steps:
- uses: actions/checkout@v3
- name: Build project
run: npm run build
needs:
– závislosti mezi joby (řetězení).runs-on:
– běhové prostředí (ubuntu, windows, macos).
steps
)
4. Vlastní kroky (Každý krok může buď používat existující akci (uses:
), nebo spustit vlastní příkaz (run:
).
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
uses:
– reference na akci (repozitář/ACTION@verze).with:
– volitelné parametry této akce.run:
– shellový příkaz či skript.
ci.yaml
5. Ukázkový workflow name: CI Pipeline
on:
pull_request:
branches:
- main
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout source
uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
Tip: Pro složitější projekty rozdělte testy na více jobů (např.
unit
,integration
) a paralelizujte je pomocímatrix
:
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node: [16, 18, 20]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node }}
- run: npm ci
- run: npm test
6. Tipy a best practices
- Kontrola indentace – YAML je citlivý na mezery. Vždy používejte 2 nebo 4 mezery (důsledně).
- Sdílení proměnných – využijte
env:
pro nastavení proměnných prostředí. - Snadná debugovatelnost – přidejte krok
run: env
neborun: printenv
. - Opětovné použití kódu – využijte Reusable Workflows pro společné části.