Before committing and pushing, query the Gitea API for open PRs in the apps repo. If any open PR modifies the same kustomization.yaml path and its diff contains the target tag, exit 0 — the PR is the intended review gate and the direct push would bypass it. Fails open on API errors so an outage does not block all deploys. Fixes bug-nxhza9j2atqk
2.7 KiB
2.7 KiB
action/image-deploy
Composite Gitea Action that pins an image tag in fritzlab/apps via
kustomize edit set image, validates the rendered manifests, and pushes
to apps-repo main. Retries on push conflict.
This is the standard "deploy" step for image producers (chrony, profiles,
runner). After image-build + image-push, this writes the new tag into
the GitOps target so ArgoCD can sync it.
Usage
- uses: actions/checkout@v4
- uses: https://code.fritzlab.net/action/image-build@v1
with:
image: code.fritzlab.net/fritzlab/chrony
smoke-test: docker run --rm --entrypoint /usr/sbin/chronyd $IMAGE -v
- uses: https://code.fritzlab.net/action/image-push@v1
with:
image: code.fritzlab.net/fritzlab/chrony
token: ${{ secrets.CI_BOT_TOKEN }}
org: fritzlab
name: chrony
- uses: https://code.fritzlab.net/action/image-deploy@v1
with:
image: code.fritzlab.net/fritzlab/chrony
path: sjc001/infra/chrony/manifests
token: ${{ secrets.CI_BOT_TOKEN }}
Inputs
| Name | Required | Default | Description |
|---|---|---|---|
image |
yes | — | Full image name without tag. Must match an entry already in the target kustomization.yaml images: block. |
tag |
no | github.run_number |
Tag to pin. |
path |
yes | — | Path inside fritzlab/apps to the manifests dir (e.g. sjc001/infra/chrony/manifests). |
token |
yes | — | CI_BOT_TOKEN with write access to fritzlab/apps. |
apps-repo |
no | code.fritzlab.net/fritzlab/apps |
Apps repo URL without protocol. |
message |
no | deploy <name> #<tag> |
Commit message override. |
Behavior
- Shallow-clone
fritzlab/appsto a temp dir. cd <path>and runkustomize edit set image <image>=<image>:<tag>.- Run
kustomize build .to validate the manifests still render. Fails the workflow if validation breaks — apps repo is left untouched. - If no diff (apps repo already on this tag): exit 0 silently.
- Query the Gitea API for open PRs in the apps repo. If any open PR modifies
the same
kustomization.yamland its patch contains the target tag, exit 0 — the PR is the intended control gate and the direct push is skipped. Fails open on API errors (push proceeds) to avoid blocking deploys during an outage. - Otherwise commit + push to
main. On push rejection (concurrent CI race),git pull --rebaseand retry up to 3 times with linear backoff.
Notes
- The image entry must already exist in
kustomization.yaml. This action only updates the tag; it does not add or remove image entries. To switch image registry paths, editkustomization.yamlby hand once, commit, then let CI resume. git diff --quietskip means re-running the same CI run (or an earlier run) is idempotent.