Files
play-life/.gitea/workflows/build-and-push.yml
poignatov 6b95326a86
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 17s
Замена русских слов на английские в уведомлениях
2026-02-03 15:34:16 +03:00

215 lines
7.9 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: Build and Push Docker Image
on:
push:
branches:
- main
jobs:
build-and-push:
runs-on: ubuntu-latest # Убедитесь, что у вашего раннера есть этот тег
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Get versions and check change
id: version_check
run: |
# Извлекаем текущую версию
CUR=$(cat VERSION | tr -d '[:space:]')
echo "current=$CUR" >> $GITHUB_OUTPUT
# Извлекаем сообщение последнего коммита
COMMIT_MSG=$(git log -1 --pretty=%B | head -1)
echo "commit_message=$COMMIT_MSG" >> $GITHUB_OUTPUT
# Безопасно извлекаем старую версию
PREV=$(git show HEAD~1:VERSION 2>/dev/null | tr -d '[:space:]' || echo "none")
if [ "$CUR" != "$PREV" ]; then
echo "changed=true" >> $GITHUB_OUTPUT
else
echo "changed=false" >> $GITHUB_OUTPUT
fi
- name: Patch DNS for Local Network
run: |
# Записываем IP Synology прямо в контейнер сборки
echo "192.168.50.55 dungeonsiege.synology.me" | sudo tee -a /etc/hosts
- name: Build Docker Image
id: build
run: |
REGISTRY="dungeonsiege.synology.me/poignatov/play-life"
VER="${{ steps.version_check.outputs.current }}"
echo "Building Docker image..."
echo "Registry: $REGISTRY"
echo "Tag: latest"
# Собираем образ
docker build -t $REGISTRY:latest .
echo "✅ Successfully built image: $REGISTRY:latest"
- name: Log in to Gitea Registry
if: steps.version_check.outputs.changed == 'true'
run: |
echo "${{ secrets.GIT_TOKEN }}" | docker login dungeonsiege.synology.me -u ${{ secrets.GIT_USERNAME }} --password-stdin
- name: Push Docker Image
id: push
if: steps.version_check.outputs.changed == 'true'
run: |
REGISTRY="dungeonsiege.synology.me/poignatov/play-life"
VER="${{ steps.version_check.outputs.current }}"
# Тегируем образ версией
docker tag $REGISTRY:latest $REGISTRY:$VER
# Пушим оба тега
echo "Pushing image to registry..."
docker push $REGISTRY:latest
docker push $REGISTRY:$VER
echo "✅ Successfully pushed to registry:"
echo " - $REGISTRY:latest"
echo " - $REGISTRY:$VER"
- name: Send Telegram notification (build success)
if: success() && steps.version_check.outputs.changed == 'false'
uses: appleboy/telegram-action@master
with:
to: ${{ secrets.TELEGRAM_TO }}
token: ${{ secrets.TELEGRAM_TOKEN }}
format: markdown
message: |
*play-life*
`${{ steps.version_check.outputs.commit_message }}`
Build: ✅
Registration: ⏭️
Deploy: ⏭️
- name: Deploy to Production Server
id: deploy
if: steps.version_check.outputs.changed == 'true'
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.DEPLOY_HOST }}
username: ${{ secrets.DEPLOY_USER }}
password: ${{ secrets.DEPLOY_PASSWORD }}
script: |
set -e
# Расширяем PATH для Synology (при SSH сессии PATH минимальный)
export PATH="/usr/local/bin:/usr/syno/bin:$PATH"
REGISTRY="dungeonsiege.synology.me/poignatov/play-life"
DEPLOY_PATH="/volume1/docker/play-life"
echo "🚀 Начинаю деплой на production сервер..."
echo "PATH: $PATH"
# Проверяем наличие docker
if ! command -v docker >/dev/null 2>&1; then
echo "❌ Docker не найден в PATH!"
echo "Пробуем найти docker..."
which docker || find /usr -name "docker" -type f 2>/dev/null | head -5
exit 1
fi
DOCKER_CMD="docker"
# Определяем docker-compose (может быть docker compose или docker-compose)
if command -v docker-compose >/dev/null 2>&1; then
DOCKER_COMPOSE_CMD="docker-compose"
elif docker compose version >/dev/null 2>&1; then
DOCKER_COMPOSE_CMD="docker compose"
else
echo "❌ Docker Compose не найден!"
exit 1
fi
echo "Используем: $DOCKER_CMD и $DOCKER_COMPOSE_CMD"
# Переходим в директорию проекта
cd $DEPLOY_PATH
# Логинимся в registry
echo "${{ secrets.GIT_TOKEN }}" | $DOCKER_CMD login dungeonsiege.synology.me -u ${{ secrets.GIT_USERNAME }} --password-stdin
# Обновляем образ
echo "📥 Обновляю образ из registry..."
$DOCKER_CMD pull $REGISTRY:latest
# Перезапускаем контейнеры
echo "🔄 Перезапускаю контейнеры..."
$DOCKER_COMPOSE_CMD -f docker-compose.prod.yml up -d --force-recreate
# Проверяем статус
echo "✅ Деплой завершен успешно"
$DOCKER_COMPOSE_CMD -f docker-compose.prod.yml ps
- name: Send Telegram notification (publish success)
if: steps.build.outcome == 'success' && steps.version_check.outputs.changed == 'true' && steps.push.outcome == 'success' && steps.deploy.outcome == 'success'
uses: appleboy/telegram-action@master
with:
to: ${{ secrets.TELEGRAM_TO }}
token: ${{ secrets.TELEGRAM_TOKEN }}
format: markdown
message: |
*play-life*
`${{ steps.version_check.outputs.commit_message }}`
Build: ✅
Registration: ✅
Deploy: ✅
- name: Send Telegram notification (push failure)
if: steps.build.outcome == 'success' && steps.version_check.outputs.changed == 'true' && steps.push.outcome == 'failure'
uses: appleboy/telegram-action@master
with:
to: ${{ secrets.TELEGRAM_TO }}
token: ${{ secrets.TELEGRAM_TOKEN }}
format: markdown
message: |
*play-life*
`${{ steps.version_check.outputs.commit_message }}`
Build: ✅
Registration: ❌
Deploy: ⏭️
- name: Send Telegram notification (deploy failure)
if: steps.build.outcome == 'success' && steps.push.outcome == 'success' && steps.version_check.outputs.changed == 'true' && steps.deploy.outcome == 'failure'
uses: appleboy/telegram-action@master
with:
to: ${{ secrets.TELEGRAM_TO }}
token: ${{ secrets.TELEGRAM_TOKEN }}
format: markdown
message: |
*play-life*
`${{ steps.version_check.outputs.commit_message }}`
Build: ✅
Registration: ✅
Deploy: ❌
- name: Send Telegram notification (build failure)
if: steps.build.outcome == 'failure'
uses: appleboy/telegram-action@master
with:
to: ${{ secrets.TELEGRAM_TO }}
token: ${{ secrets.TELEGRAM_TOKEN }}
format: markdown
message: |
*play-life*
`${{ steps.version_check.outputs.commit_message }}`
Build: ❌
Registration: ⏭️
Deploy: ⏭️