Files
gitea-actions b1b7d1fad1
binárka / linux (pull_request) Successful in 10s
image / image (pull_request) Successful in 13s
testy / pytest (3.11) (pull_request) Successful in 0s
testy / pytest (3.12) (pull_request) Successful in 0s
testy / pytest (3.13) (pull_request) Successful in 1s
testy / pytest (3.14) (pull_request) Successful in 1s
Nezavádět další "kostky" tam, kde na to není důvod
Značka image ve zkoušce, testovací kontejner a builder buildx se jmenovaly
kostky. Všechno to vzniká a mizí uvnitř jednoho běhu CI, nikam se to
nepropisuje a nic to nestojí — jen jsem to zkopíroval ze zvyku.

Jména v docker-compose.yaml (služba, container_name, svazek kostky-data)
zůstávají; ta se dotýkají uložených dat a patří k tomu úklidu ve #16.
2026-08-23 20:41:03 +02:00

86 lines
3.2 KiB
YAML

# Postaví kontejnerový image a zkusí ho spustit. Nikam ho neposílá.
#
# Dockerfile by se jinak rozbil až ve chvíli, kdy se tagne release — tohle ho
# ohlídá nad každým pull requestem.
#
# Publikuje se jinde: .github/workflows/image.yml. Zdejší runner běží v LXC,
# kde nejde zaregistrovat binfmt, takže arm64 by se tu postavit nedalo.
# Registrace je vlastnost jádra hostitele a to je produkční stroj, do kterého
# se kvůli počitadlu kostek vrtat nebude.
#
# Staví se nativní amd64 obyčejným `docker build`, žádný buildx ani emulace.
name: image
on:
pull_request:
workflow_dispatch:
env:
ZKOUSKA_PORT: "18000"
jobs:
image:
runs-on: homelab
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: Předpoklady
run: |
command -v docker >/dev/null \
|| { echo "Docker na runneru není." >&2; exit 1; }
docker version --format '{{.Server.Version}}'
- name: Stavba
run: |
docker build -f deploy/Dockerfile \
--build-arg VERSION="zkouska-${GITHUB_SHA:0:7}" \
-t dice-counter:zkouska .
- name: Zkouška
run: |
trap 'docker rm -f dice-counter-zkouska >/dev/null 2>&1 || true' EXIT
# Port musí být stejný uvnitř i venku: appka poslouchá na DICE_PORT,
# takže mapovat ho na jiný by znamenalo mířit do prázdna.
# Adresa se vnucuje, ať zkouška nezávisí na síti runneru a dá se
# ověřit, co přesně tabule nabídne.
docker run -d --name dice-counter-zkouska --init \
-p "${ZKOUSKA_PORT}:${ZKOUSKA_PORT}" -e DICE_HOST=127.0.0.1 \
-e DICE_PORT="${ZKOUSKA_PORT}" dice-counter:zkouska
for _ in $(seq 30); do
curl -sf -o /dev/null "http://127.0.0.1:${ZKOUSKA_PORT}/" && break
sleep 1
done
curl -sf -o /dev/null "http://127.0.0.1:${ZKOUSKA_PORT}/" || {
echo "Kontejner se nerozeběhl." >&2
docker logs dice-counter-zkouska >&2
exit 1; }
curl -sf -o /dev/null "http://127.0.0.1:${ZKOUSKA_PORT}/static/style.css"
curl -sf "http://127.0.0.1:${ZKOUSKA_PORT}/board" | grep -q "127.0.0.1:${ZKOUSKA_PORT}"
curl -sf -o /dev/null "http://127.0.0.1:${ZKOUSKA_PORT}/export"
# Verze se musí do image opravdu dostat, ne se hlásit jako neznámá.
docker run --rm dice-counter:zkouska python web.py --version
! docker run --rm dice-counter:zkouska python web.py --version | grep -q "neznámá"
docker logs dice-counter-zkouska
echo "Image jede."
- name: Úklid
if: always()
run: docker rmi dice-counter:zkouska >/dev/null 2>&1 || true