Skip to content

publish-backend

publish-backend #29

---
#-----------------------------------------------------------------------------------------
#
# Публикация bugget-api (backend)
#
#-----------------------------------------------------------------------------------------
name: publish-backend
description: "Сборка и публикация backend-образа bugget-api в Docker Hub"
on:
workflow_dispatch:
inputs:
version:
description: "Версия (например, v1.2.3)"
required: true
jobs:
backend:
runs-on: ubuntu-latest
if: github.event_name == 'workflow_dispatch'
steps:
- name: Validate version format
run: |
VERSION="${{ github.event.inputs.version }}"
# Разрешить форматы типа v1.2.3 и v1.2.3-suffix
if [[ ! "$VERSION" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9._]+)?$ ]]; then
echo "❌ Неверный формат версии. Используйте формат vX.Y.Z или vX.Y.Z-suffix (например, v1.2.3 или v1.2.3-beta)"
exit 1
fi
# Установим переменную IS_PLAIN_VERSION, если версия без суффикса
if [[ "$VERSION" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "IS_PLAIN_VERSION=true" >> $GITHUB_ENV
else
echo "IS_PLAIN_VERSION=false" >> $GITHUB_ENV
fi
- name: Checkout
uses: actions/checkout@v4
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_LOGIN }}
password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
- name: Set version
run: |
echo "VERSION=${{ github.event.inputs.version }}" >> $GITHUB_ENV
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Pick target platforms
run: |
if [[ "${{ env.IS_PLAIN_VERSION }}" == "true" ]]; then
# tag == latest → multi-arch
echo "TARGET_PLATFORMS=linux/amd64,linux/arm64" >> $GITHUB_ENV
echo "LATEST_TAG=,${{ secrets.DOCKER_LOGIN }}/bugget-api:latest" >> $GITHUB_ENV
else
# не-latest → только amd64
echo "TARGET_PLATFORMS=linux/amd64" >> $GITHUB_ENV
echo "LATEST_TAG=" >> $GITHUB_ENV
fi
- name: Build & push
uses: docker/build-push-action@v5
with:
context: ./backend/bugget-api
file: ./backend/bugget-api/Bugget/Dockerfile
platforms: ${{ env.TARGET_PLATFORMS }}
push: true
tags: |
${{ secrets.DOCKER_LOGIN }}/bugget-api:${{ env.VERSION }}${{ env.LATEST_TAG }}
cache-from: type=gha
cache-to: type=gha,mode=max