Nasazení, které odmítne smazat tvůj web

Díl 8 ze 15 — ./blog.sh v1.0

Petr
Pustil jsem --prune po rozbitém sestavení.
Pavel
Takže máš prázdný web.
Petr
Ne. Nasazení odmítlo.
Pavel
…to chci.

To je celá funkce: nasazení předpokládá, že velká změna je chyba, dokud neřekneš jinak.

Jak to funguje

Každé nasazení si vede manifest – SHA-256, velikost a mtime každého nahraného souboru. Další nasazení se proti němu porovná a sáhne jen na to, co se skutečně změnilo. Rychlé, nudné, správné.

Zajímavá část je to, co se stane, než se cokoli nahraje. Když počet souborů od posledního nasazení klesl o víc než 20 %, celé se to zastaví. Tohle je skutečný výstup z tohoto webu – na minutu jsem odstavil polovinu složek sestavení z dohledu a požádal o nasazení:

❌ Zastaveno: v public.nosync/ je 28 souborů, ale podle minulého nahrání
   jich mělo být 62.
   To je propad o 55 % — vypadá to na rozbitý build.
   Podívej se na výstup buildu. Když je propad záměrný (smazal jsi hodně
   postů), spusť to znovu s --force.

Takový propad skoro nikdy neznamená „záměrně jsem smazal půlku blogu". Znamená překlep v cestě, prázdný adresář obsahu, sestavení, které v půli spadlo. Bez pojistky by --prune vesele smazalo zbytek tvého živého webu a nahrálo trosky.

A je to symetrické: prudký nárůst spustí stejný drát, protože web, který se náhle zdvojnásobil, obvykle znamená zdvojený strom nebo špatně sloučený import, ne velmi plodné odpoledne.

Nouzové východy

  • --dry-run ukáže přesně, co by se nahrálo, změnilo nebo smazalo – a nesáhne na nic. Tady je dnešní, po úpravě dvou příspěvků:
Deploy web -> Surfer: https://blogsh.app  [DRY-RUN]
  souborů celkem: 62, nových/změněných: 10, beze změny (přeskočeno): 52
  [dry] index.html (54990 B)
  [dry] posts/2026/no-gems-one-asterisk/index.html (14852 B)
  [dry] posts/2026/why-not-x/index.html (14584 B)
  [dry] rss.xml (38156 B)
  [dry] search-index.json (29072 B)
  ...

Změnily se dva příspěvky, takže se nahrává deset souborů: ty příspěvky, stránky, které je vypisují, feed, index hledání. Všechno ostatní má shodný kontrolní součet a zůstává doma.

  • --force je přepínač „ano, myslel jsem to vážně", pro den, kdy opravdu smažeš sto příspěvků.
  • --prune je jediný destruktivní přepínač v sadě a je volitelný. (Na backendu git je každé nasazení tak jako tak snímek, takže úklid je implicitní – a vratný.)

Jeden poctivý vedlejší účinek

Udělej hromadný import – nebo publikuj za jeden večer sérii čtrnácti příspěvků, jak to tento web právě udělal – a spustí se i pojistka růstu. Znovu skutečný výstup, z večera, kdy tento web startoval:

❌ Zastaveno: v public.nosync/ je 63 souborů, podle minulého nahrání jich
   mělo být jen 30.
   To je nárůst o 110 % — vypadá to na zdvojený nebo rozbitý build.
   Podívej se na výstup buildu. Když je nárůst záměrný (hromadný
   import/migrace), spusť to znovu s --force.

To není chyba; to je pojistka dělající přesně svou práci při té jediné příležitosti, kdy bys jí odpustil, že mlčí. Zkontroluj čísla, buď krátce samolibý, že je vůbec něco zkontrolovalo, a spusť to znovu s --force.

Komentáře