Bez zamčených verzí si každá stavba stáhne to, co je zrovna nejnovější: binárka z dneška a binárka z příštího jara obsahují něco jiného a není jak zjistit co. Zároveň může vydání kterékoli knihovny rozbít build, aniž by se sáhlo na řádku kódu — a nejspíš zrovna ve chvíli, kdy se tagne release. Volné seznamy jsou nově v `.in`, zamčené v `.txt`. Rozděleno na tři: běh, testy a stavba. Pytest se tak přestane instalovat do prostředí, kde se staví binárka, a PyInstaller má konečně taky zamčenou verzi — ta na podobu výsledku sahá ze všech nejvíc. Zůstává, že se verze píšou i v hlavičce PEP 723, jinak by přestalo fungovat `uv run web.py`. Aby se ta dvě místa nerozešla, hlídá je test.
70 lines
2.2 KiB
YAML
70 lines
2.2 KiB
YAML
# Testy nad každým pull requestem a nad main.
|
|
#
|
|
# Runner běží v host módu, takže tu není kontejner ani hotové akce
|
|
# z marketplace. Pythony obstará uv, na hostiteli nemusí být žádný.
|
|
name: testy
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: testy-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
pytest:
|
|
runs-on: homelab
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
# Runner sdílí pracovní adresář mezi variantami, takže po jedné.
|
|
max-parallel: 1
|
|
matrix:
|
|
python: ["3.11", "3.12", "3.13", "3.14"]
|
|
|
|
steps:
|
|
- name: Zdrojáky
|
|
env:
|
|
TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
git init -q .
|
|
git remote remove origin 2>/dev/null || true
|
|
git remote add origin "${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}.git"
|
|
git config http.extraheader "Authorization: token ${TOKEN}"
|
|
git fetch -q --depth 1 origin "${GITHUB_REF}"
|
|
git config --unset http.extraheader
|
|
git checkout -qf FETCH_HEAD
|
|
git clean -qfd
|
|
|
|
- name: uv
|
|
run: |
|
|
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
|
|
export PATH="$HOME/.local/bin:$PATH"
|
|
command -v uv >/dev/null || curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
uv python install "${{ matrix.python }}"
|
|
|
|
- name: Testy
|
|
run: |
|
|
uv run --managed-python --python "${{ matrix.python }}" \
|
|
--with-requirements requirements-dev.txt --no-project \
|
|
pytest -q
|
|
|
|
- name: Terminálová verze
|
|
run: |
|
|
# Pytest sahá na core.py, ne na prompty. Tohle projde celou partii
|
|
# tak, jak ji odehraje člověk: dvě nuly, třetí vynuluje, výhra.
|
|
out=$(printf 'A\nB\n\n1000\n\n200\n10\n0\n10\n0\n10\n0\n\n1000\n' \
|
|
| TERM=dumb uv run --managed-python --python "${{ matrix.python }}" dice.py)
|
|
|
|
for expected in "200xx" "Po třech nulových hodech" "Vítězem se stává B"; do
|
|
printf '%s' "$out" | grep -qF "$expected" || {
|
|
echo "chybí: $expected"
|
|
printf '%s\n' "$out"
|
|
exit 1
|
|
}
|
|
done
|
|
echo "terminálová verze v pořádku"
|