From 886ff5d4e2f3380df717a43c45941106077af008 Mon Sep 17 00:00:00 2001 From: NotBigGhost Date: Sat, 27 Jun 2026 00:23:49 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=B5=D0=BF=D0=BB=D0=BE=D0=B9:=20PowerSh?= =?UTF-8?q?ell-=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20build-push=20(=D0=BD?= =?UTF-8?q?=D0=B0=20Windows=20bash=20=D1=83=D1=85=D0=BE=D0=B4=D0=B8=D1=82?= =?UTF-8?q?=20=D0=B2=20WSL=20=D0=B8=20=D0=BF=D0=B0=D0=B4=D0=B0=D0=B5=D1=82?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - scripts/build-push.ps1: arm64 buildx bake + push, аналог build-push.sh для Windows-дева (ASCII). - deploy/pi/README: указать .ps1 для Windows и почему `bash ...` в PowerShell не работает. Co-Authored-By: Claude Opus 4.8 --- deploy/pi/README.md | 6 ++++-- scripts/build-push.ps1 | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100755 scripts/build-push.ps1 diff --git a/deploy/pi/README.md b/deploy/pi/README.md index 8fd378b..ab5a77b 100644 --- a/deploy/pi/README.md +++ b/deploy/pi/README.md @@ -37,9 +37,11 @@ VPS_TUNNEL_USER=tunnel (см. `IMAGE_REGISTRY`/`IMAGE_TAG` в `.env`). Pi 4/5 — мощный, но реестр держим как основной путь. На ПК (Docker Desktop) — один раз `docker login gitea.arseniev.info`, далее при каждом релизе: -```bash -scripts/build-push.sh # buildx: arm64-сборка app+tunnel и push в реестр +```powershell +.\scripts\build-push.ps1 # Windows (PowerShell); на *nix — bash scripts/build-push.sh ``` +> `bash scripts/build-push.sh` в PowerShell уходит в WSL и падает, если нет дистрибутива — +> используй `.ps1`. Команды внутри — обычный `docker buildx`, работают и напрямую в PowerShell. На Pi: ```bash docker login gitea.arseniev.info # один раз (доступ к пакету) diff --git a/scripts/build-push.ps1 b/scripts/build-push.ps1 new file mode 100755 index 0000000..262d148 --- /dev/null +++ b/scripts/build-push.ps1 @@ -0,0 +1,26 @@ +# Build prod images (app + tunnel) for linux/arm64 (Raspberry Pi) and push to the registry. +# Run on the DEV machine with Docker Desktop / buildx. Registry and tag come from the root +# .env (IMAGE_REGISTRY / IMAGE_TAG) - the same values docker-compose.yml uses. +# Log in to the registry once before running: docker login gitea.arseniev.info +# Keep this file ASCII-only (Windows PowerShell 5.1 mangles non-ASCII without a BOM). +$ErrorActionPreference = "Stop" +$root = Split-Path -Parent $PSScriptRoot +Set-Location $root + +# Builder with multi-arch push support (docker-container driver) - create if missing. +docker buildx inspect fsbuilder *> $null +if ($LASTEXITCODE -ne 0) { + docker buildx create --name fsbuilder --driver docker-container | Out-Null +} + +# arm64 emulation on an x86 host (usually already present in Docker Desktop; idempotent). +docker run --privileged --rm tonistiigi/binfmt --install arm64 | Out-Null + +Write-Host "Building app+tunnel for linux/arm64 and pushing to the registry..." -ForegroundColor Green +docker buildx bake -f docker-compose.yml --builder fsbuilder --set "*.platform=linux/arm64" --push +if ($LASTEXITCODE -ne 0) { + Write-Host "Build/push FAILED (exit $LASTEXITCODE)." -ForegroundColor Red + exit 1 +} + +Write-Host "Done. On the Pi: docker compose pull && docker compose up -d" -ForegroundColor Green