Compare commits

...

2 Commits

Author SHA1 Message Date
4f8b83ba87 Merge feature/gitea-cicd: Gitea Actions CI/CD pipeline
Some checks failed
Build and Deploy UMBRA / build-and-deploy (push) Has been cancelled
2026-03-18 04:12:55 +08:00
5d64034bb6 Add Gitea Actions CI/CD pipeline for automated builds and deploys
Adds a workflow that triggers on push to main: builds backend/frontend
Docker images, pushes to Gitea container registry, pulls and restarts
on the host, health checks, prunes old images, and sends ntfy notifications.
docker-compose.yaml updated to pull pre-built images from registry and
includes act_runner as a 4th service.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 03:36:39 +08:00
2 changed files with 102 additions and 2 deletions

View File

@ -0,0 +1,82 @@
name: Build and Deploy UMBRA
on:
push:
branches: [main]
workflow_dispatch:
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: https://github.com/actions/checkout@v4
- name: Login to Gitea Container Registry
uses: https://github.com/docker/login-action@v3
with:
registry: ${{ vars.REGISTRY_HOST }}
username: ${{ secrets.REGISTRY_USER }}
password: ${{ secrets.REGISTRY_TOKEN }}
- name: Build and push backend
uses: https://github.com/docker/build-push-action@v5
with:
context: ./backend
push: true
tags: |
${{ vars.REGISTRY_HOST }}/rohskiddo/umbra-backend:main-latest
${{ vars.REGISTRY_HOST }}/rohskiddo/umbra-backend:${{ github.sha }}
- name: Build and push frontend
uses: https://github.com/docker/build-push-action@v5
with:
context: ./frontend
push: true
tags: |
${{ vars.REGISTRY_HOST }}/rohskiddo/umbra-frontend:main-latest
${{ vars.REGISTRY_HOST }}/rohskiddo/umbra-frontend:${{ github.sha }}
- name: Pull new images
run: |
cd /opt/umbra
docker compose pull backend frontend
- name: Deploy
run: |
cd /opt/umbra
docker compose up -d
- name: Health check
run: |
echo "Waiting for services to start..."
sleep 10
curl -f http://localhost/health || exit 1
- name: Prune old images
if: success()
run: docker image prune -f
- name: Notify success
if: success()
run: |
curl -s \
-H "Title: UMBRA Deploy Success" \
-H "Tags: white_check_mark" \
--data-binary @- https://ntfy.ghost6.xyz/claude <<'NTFY_EOF'
Build ${{ github.sha }} deployed successfully to umbra.ghost6.xyz.
Triggered by push to main.
NTFY_EOF
- name: Notify failure
if: failure()
run: |
curl -s \
-H "Title: UMBRA Deploy FAILED" \
-H "Tags: fire" \
-H "Priority: high" \
--data-binary @- https://ntfy.ghost6.xyz/claude <<'NTFY_EOF'
Deploy failed for commit ${{ github.sha }}.
Check Gitea Actions logs at git.sentinelforest.xyz.
NTFY_EOF

View File

@ -19,7 +19,7 @@ services:
cpus: "1.0" cpus: "1.0"
backend: backend:
build: ./backend image: git.sentinelforest.xyz/rohskiddo/umbra-backend:main-latest
restart: unless-stopped restart: unless-stopped
env_file: .env env_file: .env
depends_on: depends_on:
@ -41,7 +41,7 @@ services:
cpus: "1.0" cpus: "1.0"
frontend: frontend:
build: ./frontend image: git.sentinelforest.xyz/rohskiddo/umbra-frontend:main-latest
restart: unless-stopped restart: unless-stopped
ports: ports:
- "80:8080" - "80:8080"
@ -61,8 +61,26 @@ services:
memory: 128M memory: 128M
cpus: "0.5" cpus: "0.5"
act_runner:
image: gitea/act_runner:latest
restart: unless-stopped
volumes:
- act_runner_data:/data
- /var/run/docker.sock:/var/run/docker.sock
environment:
- GITEA_INSTANCE_URL=https://git.sentinelforest.xyz
- GITEA_RUNNER_REGISTRATION_TOKEN=${GITEA_RUNNER_REGISTRATION_TOKEN}
- GITEA_RUNNER_NAME=umbra-runner
- GITEA_RUNNER_LABELS=ubuntu-latest:docker://node:20-bookworm
deploy:
resources:
limits:
memory: 256M
cpus: "1.0"
volumes: volumes:
postgres_data: postgres_data:
act_runner_data:
networks: networks:
backend_net: backend_net: