Portalen blev udrullet ved at kopiere filer ind i drift, og drift og git gled fra hinanden. Nu er appmappen i drift en git-checkout, og et v*-tag udruller via Gitea Actions: CD logger ind som deploy-brugeren og kører deploy/deploy.sh fra tagget. Scriptet afbryder hvis drift afviger fra git, installerer requirements kun når de er ændret, og ruller tilbage hvis /healthz ikke svarer efter genstart. Værtsadressen ligger i en repo-variabel. CI kompilerer Python, parser alle templates og tjekker deploy.sh. Claude-Session: https://claude.ai/code/session_012LCTmU2ewo8tnM1dByYAoG
32 lines
847 B
YAML
32 lines
847 B
YAML
name: CI
|
|
on:
|
|
push:
|
|
branches: [master]
|
|
pull_request:
|
|
|
|
concurrency:
|
|
group: ci-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
check:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 10
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Tooling
|
|
run: apt-get update -qq && apt-get install -y -qq --no-install-recommends python3 python3-jinja2
|
|
- name: Python compiles
|
|
run: python3 -m compileall -q .
|
|
- name: Templates parse
|
|
run: |
|
|
python3 - <<'PY'
|
|
import pathlib, jinja2
|
|
env = jinja2.Environment(loader=jinja2.FileSystemLoader("templates"))
|
|
for p in sorted(pathlib.Path("templates").glob("*.html")):
|
|
env.parse(p.read_text())
|
|
print("templates ok")
|
|
PY
|
|
- name: deploy.sh syntax
|
|
run: bash -n deploy/deploy.sh
|