## Was Woodpecker-Plugin `deploy` (`git.uesome.de/actions/ci-cd/deploy`): schreibt ein gepushtes dev- oder beta-Image mit Digest nach `tanztee/oumta-deploy`. Die Umgebung entscheidet dort `ci/deploy-image.sh` anhand des Tags (`-dev.` → dev, `-beta.` → beta, sonst nichts; prod nur per PR). Digest per `crane`, kein Docker-Daemon nötig (dafür tanztee/oumta-deploy#20). - `woodpecker/deploy/`: Dockerfile (`alpine:3.20`, bash, git, crane) und `deploy.sh` - `.woodpecker/plugins.yaml`: Push/PR mit Änderungen unter `woodpecker/deploy/**` → nur Probe-Build (`dry_run`, ohne Secrets); Tag `deploy-vX.Y.Z` → Push als `:vX.Y.Z` - `README.md`: Abschnitt „Woodpecker plugins“ mit Settings und Beispiel Das Token von `oumta-ci` steht nur im Credential-Helper, nicht in URL oder Config. ## Getestet (lokal, crane als Stub, gegen Kopie von oumta-deploy `a74c73d`) | Fall | Ergebnis | | --- | --- | | `v2.0.1-dev.…`, `AUTH_IMAGE` | `deploy(dev): oumta-auth …` | | `v2.0.9-beta.7`, `APP_V{major}_IMAGE` | `APP_V2_IMAGE` in beta | | `v2.0.1` | nichts zu tun, Exit 0 | | keyklo, `envs: dev beta` | zwei Commits | | gleicher Tag erneut | „bereits aktuell“ | | ohne `deploy_token` | Abbruch mit Meldung | Offen: echter Lauf gegen Registry und Gitea per HTTPS. ## Vor dem ersten Lauf in Woodpecker 1. `actions/ci-cd` aktivieren. 2. Repo-Secrets `registry_username`/`registry_password` (Schreibrecht auf Pakete der Org `actions`), nur Event `tag`, nur Image `woodpeckerci/plugin-docker-buildx`. 3. Prüfen, ob `plugin-docker-buildx:6.1.2` privilegiert laufen darf (`WOODPECKER_PLUGINS_PRIVILEGED`). Tag `deploy-v1.0.0` erst nach dem Merge und grünem Probe-Build. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Reviewed-on: #1
Actions
This repo provides reusable Gitea Actions as composite actions that can be referenced with uses:.
Bump Version
Creates or updates the version in package.json, commits it, creates a matching Git tag, and pushes both.
Inputs:
node_version: Node.js version to use. Default:24release_line: optional release line for dev builds. Format:<major>.<minor>or<major>.<minor>.<patch>. Overrides branch, PR target, inferred ancestor release branch, andpackage.json.gitea_token: optional token used for checkout and push
Branch and tag rules:
main: creates release tags from the latest commit message (release/x.y.z,release/x.y,hotfix/x.y.z) or falls back to a patch bump.release/<major>.<minor>orrelease/<major>.<minor>.<patch>: creates the next beta tag for that release base, e.g.v2.4.0-beta.3orv2.4.1-beta.3.- all other branches: create a dev tag for the resolved release base using a UTC timestamp, e.g.
v2.4.0-dev.20260314153045.
Dev release line resolution order:
inputs.release_line- current branch if it matches
release/<major>.<minor>orrelease/<major>.<minor>.<patch> - PR target branch if it matches
release/<major>.<minor>orrelease/<major>.<minor>.<patch> - newest ancestor branch from
origin/release/*(for feature branches created from release branches outside PR context) major.minorfrompackage.json
If no release line can be resolved for a dev build, the action fails intentionally.
Examples:
Commit message examples on main:
release/2.4.0->v2.4.0release/2.4->v2.4.0hotfix/2.4.1->v2.4.1
Branch examples:
release/2.4-> nextv2.4.0-beta.Nrelease/v2.4.1-> nextv2.4.1-beta.N- feature branch in a PR to
release/2.4->v2.4.0-dev.<UTC_TIMESTAMP> - feature branch created from
release/v2.4.1(without PR base) ->v2.4.1-dev.<UTC_TIMESTAMP>when the release branch tip is an ancestor - feature branch outside a PR with
package.jsonversion2.4.0->v2.4.0-dev.<UTC_TIMESTAMP> - feature branch outside a PR with
release_line: 2.4->v2.4.0-dev.<UTC_TIMESTAMP>
Example:
jobs:
bump-version:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: tanztee/ci-cd/.github/actions/bump-version@main
with:
gitea_token: ${{ secrets.GITEA_TOKEN }}
Feature branch outside a PR:
jobs:
bump-version:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: tanztee/ci-cd/.github/actions/bump-version@main
with:
gitea_token: ${{ secrets.GITEA_TOKEN }}
release_line: 2.4
Build and Push Docker Image
Example:
jobs:
build-and-push:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: tanztee/ci-cd/.github/actions/build-and-push@main
with:
registry: ${{ secrets.REGISTRY }}
registry_username: ${{ secrets.REGISTRY_USERNAME }}
registry_password: ${{ secrets.REGISTRY_PASSWORD }}
Deploy Image to Kubernetes
Example:
on:
workflow_dispatch:
inputs:
tag:
description: Image tag to deploy (e.g. v1.2.3)
required: true
type: string
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: tanztee/ci-cd/.github/actions/deploy-k8s@main
with:
tag: ${{ inputs.tag }}
namespace: oumta-dev
kubeconfig: ${{ secrets.KUBECONFIG }}
registry: ${{ secrets.REGISTRY }}
Woodpecker plugins
Plugins are Docker images built from woodpecker/<name>/ by .woodpecker/plugins.yaml. A tag <name>-vX.Y.Z publishes git.uesome.de/actions/ci-cd/<name>:vX.Y.Z; pipelines pin that version.
deploy
Writes a pushed dev or beta image with its digest to tanztee/oumta-deploy (D16 there). ci/deploy-image.sh in oumta-deploy decides the environment from the tag: -dev. goes to dev, -beta. to beta, anything else is skipped (prod only via PR).
Settings:
var(required): variable inenvs/<env>/images.env, e.g.AUTH_IMAGE.{major}is replaced by the major of the tag (APP_V{major}_IMAGE->APP_V2_IMAGE).deploy_token(required): token ofoumta-ci, write access to oumta-deploy only. Limit the secret to this image and the eventstagandmanual.registry_username,registry_password: read access to the registry for the digestenvs: fixed environments instead of the tag rule, e.g.dev beta(oumta-keyklo)tag: defaultCI_COMMIT_TAGregistry: defaultgit.uesome.deimage: default<registry>/<CI_REPO>deploy_user: defaultoumta-cideploy_repo: defaulthttps://git.uesome.de/tanztee/oumta-deploy.git
Example:
when:
event: tag
ref: refs/tags/v*
steps:
- name: build
image: woodpeckerci/plugin-docker-buildx:6.1.2
settings:
registry: git.uesome.de
repo: git.uesome.de/tanztee/oumta-auth
tags: ${CI_COMMIT_TAG}
username:
from_secret: registry_username
password:
from_secret: registry_password
- name: deploy
image: git.uesome.de/actions/ci-cd/deploy:v1.0.0
settings:
var: AUTH_IMAGE
registry_username:
from_secret: registry_username
registry_password:
from_secret: registry_password
deploy_token:
from_secret: oumta_deploy_token