Add Gitea Actions deploy pipeline for the backoffice
Manual (workflow_dispatch) pipeline that syncs backoffice/db and backoffice/app to the homelab, re-applies the idempotent schema, rebuilds/restarts smb-crm, and health-checks it — the same sequence that was previously run by hand over SSH. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
name: Deploy backoffice (smb-crm)
|
||||
|
||||
# Manual only, on purpose: this runner has docker-compose access on the
|
||||
# homelab host, so triggering it is equivalent to a deploy. Only Gitea users
|
||||
# with write access to this repo can see/press the "Run workflow" button —
|
||||
# that's the access boundary, so keep collaborator roles deliberate as more
|
||||
# people join (see TODO.md).
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
ref:
|
||||
description: "Branch/tag/commit to deploy"
|
||||
required: false
|
||||
default: "main"
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: [self-hosted, homelab]
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ inputs.ref }}
|
||||
|
||||
# Only db/ and app/ — never touch secrets/ or .env, which live only on
|
||||
# the host and aren't in the repo.
|
||||
- name: Sync backoffice files
|
||||
run: |
|
||||
set -euo pipefail
|
||||
rsync -a --delete backoffice/db/ /home/mivanchenko/smb-crm/db/
|
||||
rsync -a --delete backoffice/app/ /home/mivanchenko/smb-crm/app/
|
||||
|
||||
# init.sql is all CREATE ... IF NOT EXISTS, so re-running it against the
|
||||
# live DB on every deploy is safe and needs no separate migration tool.
|
||||
- name: Apply pending schema changes
|
||||
run: docker exec -i smb-db psql -U smbcrm -d smbcrm < backoffice/db/init.sql
|
||||
|
||||
- name: Build and restart smb-crm
|
||||
run: |
|
||||
cd /home/mivanchenko/smb-crm
|
||||
docker compose build smb-crm
|
||||
docker compose up -d --no-deps smb-crm
|
||||
|
||||
- name: Health check
|
||||
run: |
|
||||
set -euo pipefail
|
||||
for i in $(seq 1 10); do
|
||||
if docker exec smb-crm python3 -c "import urllib.request,sys; sys.exit(0 if urllib.request.urlopen('http://localhost:8080/healthz').status==200 else 1)"; then
|
||||
echo "smb-crm healthy"
|
||||
exit 0
|
||||
fi
|
||||
sleep 2
|
||||
done
|
||||
echo "smb-crm failed health check after deploy" >&2
|
||||
exit 1
|
||||
Reference in New Issue
Block a user