diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 984301c..fab7fc9 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -26,22 +26,45 @@ jobs: - name: Bei der Registry anmelden run: echo "${{ secrets.REGISTRY_TOKEN }}" | docker login ${{ env.REGISTRY }} -u ${{ github.actor }} --password-stdin - - name: Image-Namen und Tag bestimmen + # Die Versionsnummer kommt aus der Datei VERSION im Repo-Root (z.B. + # "1.4.0") - vor einem Release dort einfach den Wert erhoehen. + # + # Tags je nach Push: + # - Branch main -> :latest und :v + # - Branch Dev -> :dev und :v-dev + # - Branch beta -> :beta und :v-beta + # - Git-Tag "v1.4.0" -> genau :v1.4.0 (expliziter Versions-Release) + # - immer zusaetzlich -> : (exakte Nachverfolgung) + - name: Image-Namen und Tags bestimmen id: vars run: | IMAGE=${{ env.REGISTRY }}/${{ github.repository }} - if [ "${{ github.ref_name }}" = "main" ]; then - TAG=latest + VERSION=$(tr -d '[:space:]' < VERSION) + + if [ "${{ github.ref_type }}" = "tag" ]; then + TAGS="${{ github.ref_name }}" + elif [ "${{ github.ref_name }}" = "main" ]; then + TAGS="latest v${VERSION}" else - TAG=$(echo "${{ github.ref_name }}" | tr '[:upper:]' '[:lower:]') + BRANCH=$(echo "${{ github.ref_name }}" | tr '[:upper:]' '[:lower:]') + TAGS="${BRANCH} v${VERSION}-${BRANCH}" fi + echo "image=$IMAGE" >> "$GITHUB_OUTPUT" - echo "tag=$TAG" >> "$GITHUB_OUTPUT" + echo "tags=$TAGS" >> "$GITHUB_OUTPUT" + echo "Ermittelte Tags: $TAGS" - name: Image bauen - run: docker build -t ${{ steps.vars.outputs.image }}:${{ steps.vars.outputs.tag }} -t ${{ steps.vars.outputs.image }}:${{ github.sha }} . + run: | + BUILD_ARGS="" + for TAG in ${{ steps.vars.outputs.tags }}; do + BUILD_ARGS="$BUILD_ARGS -t ${{ steps.vars.outputs.image }}:${TAG}" + done + docker build $BUILD_ARGS -t ${{ steps.vars.outputs.image }}:${{ github.sha }} . - name: Image pushen run: | - docker push ${{ steps.vars.outputs.image }}:${{ steps.vars.outputs.tag }} + for TAG in ${{ steps.vars.outputs.tags }}; do + docker push ${{ steps.vars.outputs.image }}:${TAG} + done docker push ${{ steps.vars.outputs.image }}:${{ github.sha }} \ No newline at end of file diff --git a/README.md b/README.md index 8e24c57..16887c5 100644 --- a/README.md +++ b/README.md @@ -43,15 +43,33 @@ bestehende Postgres-Datenbank mit Daten, dann: ## Bauen und Verteilen als Container -Bei jedem Push nach `main` bzw. auf einen `v*`-Tag baut die Gitea-Actions- -Pipeline (`.gitea/workflows/build.yml`) automatisch ein Image und pusht es in -die Gitea-Registry (getaggt als `:latest` und mit dem Commit-Hash). +Bei jedem Push auf `main`, `Dev`, `beta` oder einen `v*`-Tag baut die +Gitea-Actions-Pipeline (`.gitea/workflows/build.yml`) automatisch ein Image +und pusht es in die Gitea-Registry. Welche Tags dabei entstehen, hängt vom +Branch ab: + +| Push auf … | Image-Tags | +|--------------------|--------------------------------------| +| `main` | `:latest` und `:v` | +| `Dev` | `:dev` und `:v-dev` | +| `beta` | `:beta` und `:v-beta` | +| Git-Tag `v1.4.0` | genau `:v1.4.0` | + +Zusätzlich wird bei jedem Build immer auch `:` gepusht, für die +exakte Nachverfolgung einzelner Builds. + +`` kommt aus der Datei `VERSION` im Repo-Root (aktuell `1.0.0`). +Vor einem Release dort einfach die Zahl erhöhen und committen – die Pipeline +liest den Wert automatisch bei jedem Build neu ein, es ist keine weitere +Konfiguration nötig. Für einen **anderen Server**, der nur das fertige Image ziehen und selbst nichts bauen soll, gibt es `docker-compose.deploy.yml`: sie referenziert das Image direkt aus der Registry (`image: git.thiede-brauer.de/bryan.hoffmann/wdm:latest`, kein `build:`). Auf diesem Server reicht allein diese eine Datei – der Rest -des Repos wird dort nicht benötigt: +des Repos wird dort nicht benötigt. Statt `:latest` kann dort auch gezielt +ein Versions-Tag (z.B. `:v1.4.0`) oder `:dev`/`:beta` eingetragen werden, um +eine bestimmte Version bzw. einen bestimmten Entwicklungsstand zu deployen: ```bash docker login git.thiede-brauer.de -u # falls die Registry nicht öffentlich lesbar ist @@ -238,7 +256,8 @@ wdm/ ├── Dockerfile Build-Anweisungen (Kontext = Projektwurzel) ├── docker-compose.yml lokal bauen/testen (build: .) ├── docker-compose.deploy.yml nur Image ziehen (für andere Server) -├── .gitea/workflows/build.yml CI: baut Image und pusht in die Gitea-Registry +├── .gitea/workflows/build.yml CI: baut Image (branch-/versionsabhängig getaggt) und pusht in die Gitea-Registry +├── VERSION aktuelle Versionsnummer (z.B. "1.0.0"), von der CI-Pipeline gelesen ├── README.md └── build/ ├── app.py Flask-Anwendung (alle Routen, Server-Side-Rendering) @@ -251,4 +270,4 @@ wdm/ ``` Wichtig: `docker compose` muss aus dem Projektwurzel-Verzeichnis heraus -aufgerufen werden (dort, wo `docker-compose.yml` liegt), nicht aus `build/`. +aufgerufen werden (dort, wo `docker-compose.yml` liegt), nicht aus `build/`. \ No newline at end of file diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..afaf360 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +1.0.0 \ No newline at end of file