Latest Updates done, before integrating
This commit is contained in:
67
.gitea/workflows/ci.yml
Normal file
67
.gitea/workflows/ci.yml
Normal file
@@ -0,0 +1,67 @@
|
||||
name: CI/CD
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
|
||||
# ── Test ──────────────────────────────────────────────────────────────────
|
||||
# Runs on every push and every PR. Must pass before deploy proceeds.
|
||||
test:
|
||||
runs-on: self-hosted
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Run unit tests
|
||||
run: go test ./...
|
||||
|
||||
- name: Build binary (compile check)
|
||||
run: CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /dev/null .
|
||||
|
||||
# ── Deploy ────────────────────────────────────────────────────────────────
|
||||
# Runs only on push to main. SSH into the Synology, pull, rebuild, restart.
|
||||
#
|
||||
# Required secrets (set in Gitea → Repository → Settings → Secrets):
|
||||
# DEPLOY_HOST — Synology LAN IP or hostname (e.g. 192.168.0.10)
|
||||
# DEPLOY_USER — SSH user with docker access (e.g. ems-deploy)
|
||||
# DEPLOY_KEY — SSH private key (PEM, no passphrase)
|
||||
# DEPLOY_PATH — Absolute path to this repo on the Synology (e.g. /opt/ems)
|
||||
#
|
||||
# One-time setup on Synology:
|
||||
# 1. Create a dedicated deploy user (or reuse existing)
|
||||
# 2. Add the deploy public key to ~/.ssh/authorized_keys
|
||||
# 3. Add the user to the 'docker' group: sudo synogroup --member docker deploy-user
|
||||
deploy:
|
||||
needs: test
|
||||
runs-on: self-hosted
|
||||
if: github.ref == 'refs/heads/main'
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install SSH key
|
||||
run: |
|
||||
mkdir -p ~/.ssh
|
||||
echo "${{ secrets.DEPLOY_KEY }}" > ~/.ssh/deploy_key
|
||||
chmod 600 ~/.ssh/deploy_key
|
||||
# Suppress host key prompt — runner talks to a known LAN host
|
||||
echo "Host ${{ secrets.DEPLOY_HOST }}" >> ~/.ssh/config
|
||||
echo " StrictHostKeyChecking no" >> ~/.ssh/config
|
||||
echo " IdentityFile ~/.ssh/deploy_key" >> ~/.ssh/config
|
||||
|
||||
- name: Deploy to Synology
|
||||
run: |
|
||||
ssh "${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }}" \
|
||||
"cd ${{ secrets.DEPLOY_PATH }} \
|
||||
&& git pull --ff-only \
|
||||
&& docker compose up -d --build \
|
||||
&& docker image prune -f"
|
||||
|
||||
- name: Verify health
|
||||
run: |
|
||||
# Wait for container to come up, then check /health via LAN
|
||||
sleep 10
|
||||
ssh "${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }}" \
|
||||
"wget -qO- http://localhost:9099/health"
|
||||
Reference in New Issue
Block a user