From 0d7ae8bbb71751638345aba05fae5b732c17dbe7 Mon Sep 17 00:00:00 2001 From: webfarben Date: Tue, 3 Mar 2026 09:40:18 +0000 Subject: [PATCH] feat: add release workflow and update docs --- README.md | 13 ++++++ WEB_README.md | 14 +++++- release.sh | 91 ++++++++++++++++++++++++++++++++++++++ web/templates/landing.html | 2 +- 4 files changed, 118 insertions(+), 2 deletions(-) create mode 100755 release.sh diff --git a/README.md b/README.md index 702f6a8..7a6e2c1 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,18 @@ Danach erreichbar unter: ./update.sh ``` +## Neues Release bauen & pushen + +```bash +./release.sh v1.2.3 +``` + +Optional direkt `.env` auf den neuen Tag setzen und deployen: + +```bash +./release.sh v1.2.3 --set-env --deploy +``` + Für ein neues Release zuerst den Tag in `.env` anpassen: ```dotenv @@ -31,6 +43,7 @@ PDF_TO_ICS_IMAGE=git.file-archive.de/webfarben/pdf_to_ics:v1.2.2 - `.env.example` – Konfigurationsvorlage - `deploy.sh` – Erststart - `update.sh` – Update-Workflow +- `release.sh` – Build + Push für neue Image-Tags - `WEB_README.md` – ausführliche Web-/Server-Doku ## Hinweis diff --git a/WEB_README.md b/WEB_README.md index dbceea6..72ce439 100644 --- a/WEB_README.md +++ b/WEB_README.md @@ -20,6 +20,18 @@ cp .env.example .env ./update.sh ``` +## Release (neues Image bauen + pushen) + +```bash +./release.sh v1.2.3 +``` + +Optional direkt `.env` auf das neue Tag setzen und deployen: + +```bash +./release.sh v1.2.3 --set-env --deploy +``` + Für ein neues Release den Tag in `.env` erhöhen, z. B.: ```dotenv @@ -68,7 +80,7 @@ Für öffentliches Deployment zusätzlich Reverse Proxy + HTTPS verwenden. ```bash git clone --filter=blob:none --sparse pdf_to_ics cd pdf_to_ics -git sparse-checkout set docker-compose.deploy.yml .env.example deploy.sh update.sh README.md WEB_README.md +git sparse-checkout set docker-compose.deploy.yml .env.example deploy.sh update.sh release.sh README.md WEB_README.md ``` Hinweis: Ein bestehender Voll-Clone wird dadurch nicht automatisch kleiner. diff --git a/release.sh b/release.sh new file mode 100755 index 0000000..a41ce29 --- /dev/null +++ b/release.sh @@ -0,0 +1,91 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "$SCRIPT_DIR" + +IMAGE_REPO="git.file-archive.de/webfarben/pdf_to_ics" +SET_ENV=false +RUN_DEPLOY=false + +usage() { + echo "Usage: ./release.sh [--set-env] [--deploy]" + echo "" + echo "Examples:" + echo " ./release.sh v1.2.3" + echo " ./release.sh v1.2.3 --set-env" + echo " ./release.sh v1.2.3 --set-env --deploy" +} + +if [ $# -eq 1 ] && [[ "$1" == "-h" || "$1" == "--help" ]]; then + usage + exit 0 +fi + +if [ $# -lt 1 ]; then + usage + exit 1 +fi + +TAG="$1" +shift + +if [[ ! "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "❌ Fehler: Tag muss im Format vX.Y.Z sein (z. B. v1.2.3)." + exit 1 +fi + +while [ $# -gt 0 ]; do + case "$1" in + --set-env) + SET_ENV=true + ;; + --deploy) + RUN_DEPLOY=true + ;; + -h|--help) + usage + exit 0 + ;; + *) + echo "❌ Unbekannte Option: $1" + usage + exit 1 + ;; + esac + shift +done + +if ! command -v docker >/dev/null 2>&1; then + echo "❌ Fehler: docker ist nicht installiert oder nicht im PATH." + exit 1 +fi + +IMAGE_REF="${IMAGE_REPO}:${TAG}" + +echo "🏗️ Baue Image: $IMAGE_REF" +docker build -t "$IMAGE_REF" . + +echo "⬆️ Pushe Image: $IMAGE_REF" +docker push "$IMAGE_REF" + +if [ "$SET_ENV" = true ]; then + if [ -f ".env" ]; then + sed -i "s|^PDF_TO_ICS_IMAGE=.*|PDF_TO_ICS_IMAGE=$IMAGE_REF|" .env + echo "✅ .env auf $IMAGE_REF gesetzt." + else + echo "ℹ️ .env nicht gefunden – übersprungen." + fi +fi + +if [ "$RUN_DEPLOY" = true ]; then + if [ -x "./deploy.sh" ]; then + echo "🚀 Starte Deploy mit neuem Tag..." + ./deploy.sh + else + echo "❌ Fehler: deploy.sh nicht gefunden oder nicht ausführbar." + exit 1 + fi +fi + +echo "✅ Release abgeschlossen: $IMAGE_REF" diff --git a/web/templates/landing.html b/web/templates/landing.html index ec8b899..d6a3cd4 100644 --- a/web/templates/landing.html +++ b/web/templates/landing.html @@ -118,7 +118,7 @@

PDF-Export in iPD

Die folgenden Bilder zeigen, wie der Dienstplan in iPD als PDF exportiert wird.

-

Hinweis: Die Bilder werden nur angezeigt, wenn die Seite über den laufenden Webserver geöffnet wird (z. B. http://127.0.0.1:8000/) und nicht als lokale Datei in der Editor-Vorschau.

+

Hinweis: Da der Benutzer im Arbeitsprofile keine Daten exportieren kann, bleibt nur die Möglichkeit das PDF per Dienstmail an eine private Mailadresse zu senden und anschließend hier hochzuladen.

iPD Schritt 1: Dienstplanansicht öffnen