Compare commits

..
Author SHA1 Message Date
gitea-actionsandClaude Opus 5 e9a20baf93 ci: buildovat mimo skrytou cestu workspace
Publish site / build-deploy (push) Successful in 5s
act_runner staví workspace do /root/.cache/act/..., a quarto v cestě
obsahující skrytý adresář nenajde žádné vstupní soubory: vyrobí prázdný
_site a skončí s kódem 0. Ověřeno lokálně stejnou verzí quarta.
Checkout i render proto probíhají v /tmp/quarto-build-<run_id>.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 18:48:31 +02:00
gitea-actionsandClaude Opus 5 6215de1d35 ci: diagnostika renderu (quarto check + debug log)
Publish site / build-deploy (push) Failing after 7s
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 18:46:51 +02:00
gitea-actionsandClaude Opus 5 c90170345d ci: nepublikovat prázdný build a zjistit, proč render mlčí
Publish site / build-deploy (push) Failing after 2s
Běh #5 skončil "success", ale quarto render nic nevypsal a _site zůstal
prázdný, čímž se smazal obsah gh-pages. Přidána kontrola _site/index.html
v renderu i v deploy kroku a diagnostický výpis (pwd, ls, quarto --version).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 18:44:46 +02:00
gitea-actionsandClaude Opus 5 a66743df15 ci: nespoléhat na Node.js na runneru
Publish site / build-deploy (push) Successful in 17s
Runner běží v host módu bez Node.js, takže actions/checkout selhal na
"Cannot find: node in PATH". Checkout se dělá přímo gitem a quarto se
volá plnou cestou, aby nebyl potřeba ani GITHUB_PATH.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 18:41:43 +02:00
gitea-actionsandClaude Opus 5 900194964b ci: spouštět na runneru se štítkem homelab
Publish site / build-deploy (push) Failing after 1s
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 18:40:41 +02:00
david-spacil 3a8125425b revert 2ab5f34e54
Publish site / build-deploy (push) Has been cancelled
revert Aktualizovat .gitea/workflows/publish.yml
2026-08-13 18:38:05 +02:00
david-spacil 2ab5f34e54 Aktualizovat .gitea/workflows/publish.yml
Publish site / build-deploy (push) Has been cancelled
2026-08-13 18:37:23 +02:00
gitea-actionsandClaude Opus 5 6f8105c33a ci: publikace webu na gh-pages přes Gitea Actions
Publish site / build-deploy (push) Has been cancelled
Při pushi do main se vyrenderuje Quarto web a obsah _site/
se překlopí do větve gh-pages (historie větve zůstává zachována).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 18:32:31 +02:00
3 changed files with 95 additions and 162 deletions

No files matched your search

+95
View File
@@ -0,0 +1,95 @@
name: Publish site
on:
push:
branches: [main]
workflow_dispatch:
env:
QUARTO_VERSION: "1.10.18"
GITEA_HOST: gitea.spacilovi.eu
# Pozor: nesmí být pod skrytým adresářem. Workspace runneru je
# /root/.cache/act/... a quarto v cestě se skrytou složkou nenajde
# žádné vstupní soubory – vyrobí prázdný _site a skončí s kódem 0.
BUILD_DIR: /tmp/quarto-build-${{ github.run_id }}
jobs:
build-deploy:
# runner běží v host módu bez Node.js, proto žádné JS akce (actions/checkout apod.)
runs-on: homelab
steps:
- name: Checkout
env:
TOKEN: ${{ secrets.GITEA_TOKEN }}
run: |
set -e
rm -rf "$BUILD_DIR"
mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR"
git init -q .
git fetch --depth 1 \
"https://x-access-token:${TOKEN}@${GITEA_HOST}/${GITHUB_REPOSITORY}.git" \
"$GITHUB_REF_NAME"
git checkout -q FETCH_HEAD
- name: Install Quarto
run: |
set -e
if [ ! -x "$HOME/opt/quarto-${QUARTO_VERSION}/bin/quarto" ]; then
curl -sSL -o /tmp/quarto.tar.gz \
"https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-amd64.tar.gz"
mkdir -p "$HOME/opt"
tar -xzf /tmp/quarto.tar.gz -C "$HOME/opt"
rm -f /tmp/quarto.tar.gz
fi
- name: Render
run: |
set -e
cd "$BUILD_DIR"
"$HOME/opt/quarto-${QUARTO_VERSION}/bin/quarto" render
# pojistka: prázdný build nesmí přepsat publikovaný web
test -f _site/index.html
- name: Deploy to gh-pages
env:
TOKEN: ${{ secrets.GITEA_TOKEN }}
run: |
set -e
cd "$BUILD_DIR"
test -f _site/index.html
REMOTE="https://x-access-token:${TOKEN}@${GITEA_HOST}/${GITHUB_REPOSITORY}.git"
WT="/tmp/gh-pages-${GITHUB_RUN_ID}"
trap 'rm -rf "$WT"' EXIT
git config user.name "gitea-actions"
git config user.email "gitea-actions@spacilovi.eu"
# pracovní kopie gh-pages (zachová dosavadní historii větve)
if git ls-remote --exit-code "$REMOTE" gh-pages >/dev/null 2>&1; then
git fetch "$REMOTE" gh-pages
git worktree add "$WT" FETCH_HEAD
cd "$WT"
git checkout -B gh-pages
else
mkdir -p "$WT"
cd "$WT"
git init -q -b gh-pages
fi
# zahodit staré soubory (kromě .git) a nakopírovat nový build
find . -mindepth 1 -maxdepth 1 ! -name .git -exec rm -rf {} +
cp -a "${BUILD_DIR}/_site/." .
touch .nojekyll
git add -A
if git diff --cached --quiet; then
echo "Beze změn, nic se nepublikuje."
exit 0
fi
git commit -q -m "Built site for gh-pages (${GITHUB_SHA::7})"
git push "$REMOTE" HEAD:gh-pages
- name: Cleanup
if: always()
run: rm -rf "$BUILD_DIR"
-1
View File
@@ -19,7 +19,6 @@ website:
- section: "Návody"
contents:
- navody/immich.qmd
- navody/ledrich.qmd
format:
html:
-161
View File
@@ -1,161 +0,0 @@
---
title: "Návod na používání Ledriche"
author: "David Spáčil"
date: "2026-08-11"
---
Ledrich je aplikace na evidenci společných výdajů a dělení nákladů – tedy na situace, kdy se skládá víc lidí a nikomu se nechce vést papírové poznámky o tom, kdo co zaplatil a komu kolik dluží.
Funguje podobně jako známé appky typu Splitwise nebo Tricount, ale běží na našem vlastním serveru, takže data o tom, za co utrácíme, nikam ven neodcházejí.
Používá se hlavně z mobilu – aplikace je udělaná tak, aby se výdaj dal zadat jednou rukou cestou z obchodu.
Vede se v ní **kniha**: seznam účastníků, kteří se o výdaje dělí, a všechny jejich platby.
## Přihlášení
Registrace není možná, účty zakládá správce knihy.
Když se má někdo přidat, správce ho přidá v `Nastavení` a předá mu heslo.
Na přihlašovací obrazovce se vybere jméno ze seznamu a zadá heslo.
Po přihlášení zůstáváte přihlášení dlouhodobě, takže se na mobilu heslo zadává jen výjimečně.
::: {.callout-tip}
Aplikaci si na mobilu můžete přidat na plochu (v prohlížeči *Přidat na plochu* / *Add to Home Screen*).
Pak se otevírá jako běžná appka, na celou obrazovku a bez adresního řádku.
:::
Pokud po zadání hesla obrazovka „probliknutím“ spadne zpátky na přihlášení, aplikace vám sama napíše proč – nejčastěji je to tím, že se k ní jde přes nezabezpečené spojení.
## Orientace v prostředí
Dole jsou tři záložky a nad nimi oranžové kolečko s plusem.
- `Platby` – seznam všech výdajů, od nejnovějšího. Klepnutím na výdaj se otevře k úpravě.
- `Dluh` – kdo komu kolik dluží a tlačítko na vyrovnání.
- `Statistiky` – souhrnná čísla, graf v čase a rozpady.
- **Oranžové tlačítko `+`** – přidání výdaje. Je záměrně mimo záložky a nad nimi, protože je to jediná činnost, kvůli které se aplikace otevírá venku, a musí být na dosah palce.
Oranžová barva patří v celé aplikaci jen tomuhle tlačítku, takže je vždycky jasné, kam sáhnout.
Nahoře je název knihy a vedle něj `Nastavení` a `Odhlásit`.
::: {.callout-note}
Když v hlavičce občas problikne informace o čekajících změnách, znamená to, že byl výpadek spojení se serverem.
**Nic se neztratilo** – zadané výdaje jsou uložené a odešlou se samy, jakmile se spojení vrátí.
:::
## Přidání výdaje
Klepnutím na oranžové `+` se otevře formulář. Vyplňuje se:
- **Částka** – hlavní pole, samo se zaostří. Zadává se v korunách, haléře se dají zapsat za desetinnou čárkou.
- **Za co** – krátký popis, např. *nákup Lidl*.
- **Kdo platil** – ten, kdo peníze skutečně vytáhl z kapsy. Není to totéž jako to, koho výdaj stál (viz dělení níž).
- **Datum** – předvyplněné na dnešek.
- **Jak se to dělí** – viz další sekce.
- **Štítky** – nepovinné, slouží k roztřídění výdajů. Nabízejí se dřív použité, nový se prostě napíše.
- **Poznámka** – nepovinná, na cokoli, co se nevejde do popisu.
Uloží se tlačítkem `Přidat výdaj`.
### Jak se výdaj dělí
Tohle je jádro celé aplikace. Pod formulářem je **dělicí pruh** – vodorovný proužek, ve kterém má každý účastník svůj úsek.
Poměr se mění **tažením předělu mezi úseky**; pod pruhem je hned vidět, kolik z částky komu připadá.
Vedle jsou **předvolby** (`50 : 50`, `60 : 40`, `100 : 0` a podobně), což jsou jen zkratky k témuž – klepnutím se předěl přesune tam, kam patří.
Nejčastější případy:
- **Rovným dílem** – výchozí stav, nic se nenastavuje.
- **Někdo platí všechno** – předvolba `100 : 0`. Hodí se, když jeden nakoupí něco, co je jen jeho, ale platí to ze společných.
- **Nerovný poměr** – tažením předělu nebo předvolbou.
- **Přesné částky** – když se jeden nákup rozpadá na položky, které patří různým lidem.
::: {.callout-note}
Procenta se zadávají v celých číslech.
Když je potřeba jemnější poměr, použije se dělení v **podílech** – např. `335 : 665` znamená totéž jako 33,5 % ku 66,5 %.
:::
Aplikace hlídá, aby součet **vždycky seděl do haléře**.
Když se 100 Kč dělí na tři, vyjde 34 + 33 + 33 – nikdy ne tři třiatřicítky, u kterých by koruna zmizela.
### Zopakování výdaje
U už uloženého výdaje je tlačítko na **zopakování**.
Otevře nový formulář předvyplněný stejnými údaji, takže opakovaný nákup je otázka dvou klepnutí.
### Oprava a smazání
Klepnutím na výdaj v `Platbách` se otevře k úpravě, kde jde i smazat.
Smazání není nevratné – záznam zůstává v historii a správce ho dokáže obnovit.
## Dluh a vyrovnání
Záložka `Dluh` říká jedinou věc: **kdo komu kolik dluží**, po započtení všech výdajů a všech dosavadních vyrovnání.
Když si dluh mezi sebou skutečně srovnáte (převodem, hotově), zapíše se to tlačítkem `Vyrovnat`.
Předvyplní se celá dlužná částka, ale dá se přepsat – **částečné vyrovnání je v pořádku**, zbytek dluhu zůstane viset dál.
Vyrovnání je samostatný záznam, ne výdaj: nezapočítá se do statistik útraty, jen posune dluh.
Dá se později upravit nebo smazat stejně jako výdaj.
## Statistiky
Záložka `Statistiky` je jenom na čtení – nic se v ní nezadává.
Nahoře jsou souhrnná čísla za celou knihu.
Pod nimi **měsíční graf**: sloupce ukazují, kolik se který měsíc utratilo, rozdělené barvami podle toho, **koho ten měsíc co stálo** (tedy podle konečného podílu, ne podle toho, kdo platil).
Přes sloupce vede **kumulativní čára** – celková útrata od začátku. Má vlastní měřítko, proto je vysvětlená v legendě pod grafem.
Níž jsou rozpady: kdo kolik zaplatil, kolik se utratilo za jednotlivé štítky a co bylo nejdražší.
::: {.callout-tip}
Barva patří vždy konkrétnímu člověku, ne pořadí v žebříčku.
Ve všech grafech tedy tentýž odstín znamená tutéž osobu.
:::
Úplně dole je tlačítko **`Stáhnout CSV`**, které vyexportuje všechny výdaje do tabulky – k otevření v Excelu nebo v tabulkovém procesoru.
## Nastavení
Otevírá se odkazem `Nastavení` v hlavičce. Každý tu najde:
- **Změnu vlastního hesla.** Vyžaduje zadání toho stávajícího.
Správce knihy navíc:
- **Název knihy.** Objeví se v hlavičce, na přihlašovací obrazovce i v názvu aplikace na ploše.
- **Správu účastníků.** Přidání nového, přejmenování, nastavení hesla, udělení a odebrání práv správce.
### Přidání účastníka
`Nastavení` → `Přidat účastníka`. Zadá se jméno a heslo, které novému účastníkovi předáte jinou cestou (ne v aplikaci).
Restart ani nic dalšího potřeba není, přihlásit se může hned.
### Odebrání účastníka: archivace
Účastníka, který už má v knize nějaké záznamy, **nejde smazat** – smazáním by přestalo dávat smysl vyčíslení dluhu u starých výdajů.
Místo toho se **archivuje**:
- nepřihlásí se,
- nenabízí se u nových výdajů,
- ale v historii i ve vyčíslení dluhu zůstává přesně tak, jak byl.
Účastník, který ještě nemá žádný záznam, se smazat dá.
::: {.callout-important}
Kniha musí mít vždycky **aspoň jednoho správce**.
Poslední správce si proto nemůže odebrat práva ani se archivovat.
:::
## Co s daty
Data nejsou v žádné databázi, ale v obyčejných souborech verzovaných gitem.
V praxi to pro vás znamená tři věci:
- **Nic se neztrácí.** Každá změna je zapsaná i s tím, kdo ji udělal a kdy. Smazaný výdaj jde dohledat a vrátit.
- **Zálohou je kopie repozitáře.** Když by server odešel, kniha se obnoví.
- **Aplikace není podmínkou.** I kdyby Ledrich zítra přestal existovat, data zůstávají čitelná běžnými nástroji.
Jediné, co se takhle nezálohuje, jsou **hesla** – ta jsou schválně uložená jinde.
Po obnově ze zálohy se prostě nastaví znovu.