Files
test/.gitea/workflows/deploy.yml
AlucardDev 4d93a434a2
Some checks failed
Build & Deploy / Build & Push (push) Failing after 2m55s
Build & Deploy / Deploy (push) Has been skipped
Build & Deploy / Docker GC (push) Has been cancelled
removed: runner name
2026-08-29 01:02:05 +03:00

118 lines
3.0 KiB
YAML

name: Build & Deploy
on:
push:
branches:
- main
- staging
- dev
env:
REGISTRY: git.severostudio.ru
IMAGE_NAME: ${{ github.repository }}
jobs:
build:
name: Build & Push
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Login to Gitea Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and Push
uses: docker/build-push-action@v6
with:
context: .
push: true
tags: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.ref_name }}
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
deploy:
name: Deploy
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
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 /