name: "Release: multi-arch Docker images" on: push: tags: - "v*" workflow_dispatch: inputs: version: description: "Version tag (without v prefix)" required: false default: "" jobs: build-push: # Buildx runner на x86_64 хосте (docker:27.5-cli + host docker.sock). # Собирает linux/amd64 + linux/arm64 одним buildx build (qemu из коробки) # и пушит оба образа (бот + Next.js админка) в Gitea Container Registry. runs-on: buildx defaults: run: shell: sh env: REGISTRY: git.softuniq.eu REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }} VERSION: "" steps: - name: Checkout code run: | set -e apk add --no-cache git curl >/dev/null 2>&1 || true # Для push по тегу: GITHUB_REF_NAME=vX.Y.Z. Для dispatch: ветка (main/dev) — берём GITHUB_REF. REF=${GITHUB_REF_NAME} if [ "$REF" = "main" ] || [ "$REF" = "dev" ]; then REF=${GITHUB_REF} fi echo "REF=${REF}" cd /tmp rm -rf release-src git clone --depth 1 --branch "${REF}" \ "https://oauth2:${REGISTRY_TOKEN}@${REGISTRY}/Telegram-Market/telegram-shop.git" release-src cd release-src git rev-parse --short HEAD - name: Extract version run: | if [ -n "${{ github.event.inputs.version }}" ]; then V=${{ github.event.inputs.version }} else V=${GITHUB_REF_NAME#v} fi echo "VERSION=${V}" >> "$GITHUB_ENV" echo "Build version: ${V}" - name: Login to Gitea Container Registry run: | apk add --no-cache docker-cli >/dev/null 2>&1 || true echo "${REGISTRY_TOKEN}" | docker login ${REGISTRY} -u oauth2 --password-stdin - name: Build and push bot image (amd64 + arm64) working-directory: /tmp/release-src run: | set -e docker buildx build \ --platform linux/amd64,linux/arm64 \ --file ./Dockerfile \ --tag ${REGISTRY}/telegram-market/telegram-shop:${VERSION} \ --tag ${REGISTRY}/telegram-market/telegram-shop:latest \ --push \ . - name: Build and push admin image (amd64 + arm64) working-directory: /tmp/release-src run: | set -e docker buildx build \ --platform linux/amd64,linux/arm64 \ --file ./admin-next/Dockerfile \ --tag ${REGISTRY}/telegram-market/telegram-shop-admin:${VERSION} \ --tag ${REGISTRY}/telegram-market/telegram-shop-admin:latest \ --push \ ./admin-next - name: Verify pushed manifests run: | set -e apk add --no-cache docker-cli >/dev/null 2>&1 || true echo "${REGISTRY_TOKEN}" | docker login ${REGISTRY} -u oauth2 --password-stdin >/dev/null 2>&1 || true docker buildx imagetools inspect ${REGISTRY}/telegram-market/telegram-shop:${VERSION} \ | grep -E "Platform|Digest" | head -4 docker buildx imagetools inspect ${REGISTRY}/telegram-market/telegram-shop-admin:${VERSION} \ | grep -E "Platform|Digest" | head -4 docker logout ${REGISTRY} || true