From 9283a87a1e965b9eb5098693c12cfae6ffcf5c02 Mon Sep 17 00:00:00 2001 From: gitea-actions Date: Sun, 23 Aug 2026 20:14:17 +0200 Subject: [PATCH] =?UTF-8?q?Ov=C4=9B=C5=99it=20emulaci=20d=C5=99=C3=ADv,=20?= =?UTF-8?q?ne=C5=BE=20se=20do=20stavby=20pust=C3=ADme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit První běh na runneru odhalil dvě věci. Rouru do `head` shodil pipefail: head zavřel rouru po dvaceti řádcích, docker dostal EPIPE a krok skončil na 255, přestože se builder založil v pořádku. Horší je, že binfmt se sice nainstaloval (installing: arm64 OK), ale buildkit pak arm64 mezi platformami nenabídl. Emulace musí být registrovaná s příznakem F, aby si na ni buildkit ve svém kontejneru sáhl bez interpretu v souborovém systému; jinak vidí jen nativní platformy. Doma to tak mám z qemu-user-static a proto tam multiarch stavba prošla. Builder se teď staví načisto — ten z minulého běhu by si pamatoval platformy z doby před registrací — a hned po něm se ověří, že arm64 v seznamu opravdu je. Bez toho by stavba spadla až na konci s hláškou, ze které se nic nepozná. --- .gitea/workflows/image.yml | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/.gitea/workflows/image.yml b/.gitea/workflows/image.yml index 678510f..7da69d4 100644 --- a/.gitea/workflows/image.yml +++ b/.gitea/workflows/image.yml @@ -56,11 +56,26 @@ jobs: - name: Builder run: | # Výchozí ovladač Dockeru multiplatformní stavbu neumí, je potřeba - # docker-container. Krok se pouští opakovaně, tak ať nevadí, že - # builder z minula už existuje. - docker buildx create --name kostky --driver docker-container --use \ - 2>/dev/null || docker buildx use kostky - docker buildx inspect --bootstrap | head -20 + # docker-container. Staví se pokaždé načisto — builder z minulého + # běhu by si pamatoval platformy z doby před registrací emulace. + # + # Bez roury do `head`: pod pipefail by zavřená roura shodila celý + # krok dřív, než docker dopíše výstup. + docker buildx rm kostky >/dev/null 2>&1 || true + docker buildx create --name kostky --driver docker-container --use + docker buildx inspect --bootstrap + + # Kdyby arm64 v seznamu chybělo, stavba spadne až na konci a hláška + # nic neřekne. Radši to zkontrolujeme hned. + PLATFORMY=$(docker buildx inspect) + echo "$PLATFORMY" | grep -q "linux/arm64" || { + echo "Buildkit nevidí linux/arm64, i když se binfmt nainstaloval." >&2 + echo "Emulace musí být registrovaná s příznakem F, jinak si na ni" >&2 + echo "buildkit ze svého kontejneru nesáhne. Na runneru to natrvalo" >&2 + echo "vyřeší balíček qemu-user-static." >&2 + echo "--- současná registrace ---" >&2 + cat /proc/sys/fs/binfmt_misc/qemu-aarch64 >&2 2>/dev/null || echo "(žádná)" >&2 + exit 1; } - name: Zkouška run: |