Ověřit emulaci dřív, než se do stavby pustíme
binárka / linux (pull_request) Successful in 10s
image / image (pull_request) Failing after 2s
testy / pytest (3.11) (pull_request) Successful in 1s
testy / pytest (3.12) (pull_request) Successful in 1s
testy / pytest (3.13) (pull_request) Successful in 1s
testy / pytest (3.14) (pull_request) Successful in 1s
binárka / linux (pull_request) Successful in 10s
image / image (pull_request) Failing after 2s
testy / pytest (3.11) (pull_request) Successful in 1s
testy / pytest (3.12) (pull_request) Successful in 1s
testy / pytest (3.13) (pull_request) Successful in 1s
testy / pytest (3.14) (pull_request) Successful in 1s
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á.
This commit is contained in:
1 parent
0bb2e0efab
commit
9283a87a1e
1 file changed
+20
-5
@@ -56,11 +56,26 @@ jobs:
|
|||||||
- name: Builder
|
- name: Builder
|
||||||
run: |
|
run: |
|
||||||
# Výchozí ovladač Dockeru multiplatformní stavbu neumí, je potřeba
|
# Výchozí ovladač Dockeru multiplatformní stavbu neumí, je potřeba
|
||||||
# docker-container. Krok se pouští opakovaně, tak ať nevadí, že
|
# docker-container. Staví se pokaždé načisto — builder z minulého
|
||||||
# builder z minula už existuje.
|
# běhu by si pamatoval platformy z doby před registrací emulace.
|
||||||
docker buildx create --name kostky --driver docker-container --use \
|
#
|
||||||
2>/dev/null || docker buildx use kostky
|
# Bez roury do `head`: pod pipefail by zavřená roura shodila celý
|
||||||
docker buildx inspect --bootstrap | head -20
|
# 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
|
- name: Zkouška
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
Reference in new issue
Block a user