name: Build and Deploy # Standard-Workflow git.prox.ws → Portainer (siehe deploy-standard-Repo README). # owner = bergvolt (Package-Namespace == Repo-Owner, lowercase für OCI), name = materialschein. # # Versionierung: VERSION = .. # Ein version-Job berechnet sie, build + deploy konsumieren sie über # needs.version.outputs.version. Der deploy-Job pinnt gitops/stack.yml per # Commit-back auf : — nie floating :latest. on: push: branches: - main workflow_dispatch: jobs: version: runs-on: linux outputs: version: ${{ steps.v.outputs.VERSION }} steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - id: v run: | BASE=$(cat gitops/version | tr -d '[:space:]') PATCH=$(git rev-list --count HEAD) echo "VERSION=${BASE}.${PATCH}" >> "$GITHUB_OUTPUT" echo "version ${BASE}.${PATCH}" build: runs-on: linux needs: version steps: - name: Checkout Repository uses: actions/checkout@v4 - name: Login to Gitea Registry run: | echo "${{ secrets.GITEAPASSWORD }}" | docker login -u ${{ secrets.GITEAUSER }} --password-stdin https://git.prox.ws - name: Build and Push run: | V=${{ needs.version.outputs.version }} docker build \ -t git.prox.ws/bergvolt/materialschein:$V \ -t git.prox.ws/bergvolt/materialschein:latest \ . docker push git.prox.ws/bergvolt/materialschein:$V docker push git.prox.ws/bergvolt/materialschein:latest deploy: runs-on: linux needs: [version, build] steps: - name: Checkout main (mit Push-Recht) uses: actions/checkout@v4 with: ref: ${{ github.ref_name }} token: ${{ secrets.GITEA_TOKEN }} - name: Pin stack to version + commit-back run: | V=${{ needs.version.outputs.version }} sed -i -E "s#(image: git\.prox\.ws/[^:[:space:]]+):[^[:space:]]+#\1:$V#" gitops/stack.yml if git diff --quiet gitops/stack.yml; then echo "stack.yml schon auf $V, kein Commit-back" else git config user.name "gitea-actions" git config user.email "actions@git.prox.ws" git commit -am "deploy: v$V [skip ci]" git push fi - name: Trigger Portainer Stack Redeploy run: | test -n "${{ secrets.PORTAINER_WEBHOOK_URL }}" || { echo "secret PORTAINER_WEBHOOK_URL is not set"; exit 1; } curl -fsSk --retry 3 --retry-delay 5 -X POST "${{ secrets.PORTAINER_WEBHOOK_URL }}"