test
Some checks failed
Build & Deploy / Build & Push (push) Has been cancelled
Build & Deploy / Deploy (push) Has been cancelled
Build & Deploy / Docker GC (push) Has been cancelled

This commit is contained in:
AlucardDev
2026-08-29 01:00:53 +03:00
parent 71bb333bee
commit 46ae17d960
6 changed files with 139 additions and 14 deletions

View File

@@ -1,17 +1,20 @@
name: Build & Push Docker Image
name: Build & Deploy
on:
push:
branches:
- main
- staging
- dev
env:
REGISTRY: git.severostudio.ru
IMAGE_NAME: ${{ github.repository }}
jobs:
docker:
runs-on: ubuntu-latest
build:
name: Build & Push
runs-on: master-builder
steps:
- name: Checkout
@@ -33,5 +36,85 @@ jobs:
context: .
push: true
tags: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.ref_name }}
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
deploy:
name: Deploy
runs-on: master-builder
needs: build
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Encode Docker Stack
id: stack
run: |
echo "content=$(base64 -w 0 docker-stack.yml)" >> "$GITHUB_OUTPUT"
- name: Deploy via SSH
uses: appleboy/ssh-action@v1
env:
BRANCH: ${{ github.ref_name }}
REGISTRY: ${{ env.REGISTRY }}
IMAGE_NAME: ${{ env.IMAGE_NAME }}
REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }}
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
STACK_FILE: ${{ steps.stack.outputs.content }}
with:
host: ${{ secrets.DEPLOY_HOST }}
username: ${{ secrets.DEPLOY_USER }}
key: ${{ secrets.DEPLOY_SSH_KEY }}
envs: BRANCH,REGISTRY,IMAGE_NAME,REGISTRY_USERNAME,REGISTRY_PASSWORD,STACK_FILE
script: |
set -e
IMAGE="${REGISTRY}/${IMAGE_NAME}:${BRANCH}"
DEPLOY_DIR="/opt/${IMAGE_NAME}/${BRANCH}"
STACK_NAME="$(echo "${IMAGE_NAME}" | tr '/' '-')-${BRANCH}"
echo "=== Deployment ==="
echo "Branch: ${BRANCH}"
echo "Image: ${IMAGE}"
echo "Directory: ${DEPLOY_DIR}"
echo "Stack: ${STACK_NAME}"
mkdir -p "${DEPLOY_DIR}"
echo "${STACK_FILE}" | base64 -d > "${DEPLOY_DIR}/docker-stack.yml"
echo "${REGISTRY_PASSWORD}" | docker login "${REGISTRY}" \
-u "${REGISTRY_USERNAME}" \
--password-stdin
docker pull "${IMAGE}"
export IMAGE="${IMAGE}"
docker stack deploy \
--compose-file "${DEPLOY_DIR}/docker-stack.yml" \
--with-registry-auth \
"${STACK_NAME}"
echo "=== Services ==="
docker stack services "${STACK_NAME}"
gc:
name: Docker GC
runs-on: master-builder
needs:
- build
- deploy
if: always()
steps:
- name: Cleanup builder
run: |
docker container prune -f
docker image prune -af
docker builder prune -af || true
echo "=== Docker disk usage ==="
docker system df
df -h /