Some checks failed
Release: multi-arch Docker images / build-push (push) Failing after 6m38s
109 lines
3.9 KiB
YAML
109 lines
3.9 KiB
YAML
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: Prepare multi-arch builder
|
||
# docker-container driver: изолированный buildkit, host network (стабильный DNS).
|
||
# qemu-эмуляция arm64 из коробки (binfmt зарегистрирован на хосте).
|
||
run: |
|
||
set -e
|
||
docker buildx create \
|
||
--name ci-builder \
|
||
--driver docker-container \
|
||
--driver-opt network=host \
|
||
--bootstrap \
|
||
|| docker buildx inspect --builder ci-builder --bootstrap
|
||
docker buildx ls
|
||
|
||
- name: Build and push bot image (amd64 + arm64)
|
||
working-directory: /tmp/release-src
|
||
run: |
|
||
set -e
|
||
docker buildx build \
|
||
--builder ci-builder \
|
||
--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 \
|
||
--builder ci-builder \
|
||
--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
|