55 lines
2.1 KiB
Markdown
55 lines
2.1 KiB
Markdown
# action/image-push
|
|
|
|
Composite Gitea Action that pushes a locally-built image to
|
|
`code.fritzlab.net` and prunes old numeric tags via the Gitea package API.
|
|
|
|
Pair with `action/image-build` — image-build loads the image to the runner's
|
|
local Docker daemon, image-push uploads it.
|
|
|
|
## Usage
|
|
|
|
```yaml
|
|
- uses: actions/checkout@v4
|
|
- uses: https://code.fritzlab.net/action/image-build@v1
|
|
with:
|
|
image: code.fritzlab.net/fritzlab/chrony
|
|
- 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
|
|
```
|
|
|
|
## Inputs
|
|
|
|
| Name | Required | Default | Description |
|
|
|---|---|---|---|
|
|
| `image` | yes | — | Full image name without tag. |
|
|
| `tag` | no | `github.run_number` | Tag to push (must already exist locally). |
|
|
| `token` | yes | — | `CI_BOT_TOKEN` — registry login + cleanup API. |
|
|
| `org` | yes | — | Gitea org for package API (`fritzlab`, `dns`). |
|
|
| `name` | yes | — | Package name as registered in the registry. |
|
|
| `latest` | no | `true` | Also push a `:latest` tag. |
|
|
| `prune` | no | `true` | Prune old numeric registry tags. Set `false` for retained or independently pinned artifacts. |
|
|
| `keep` | no | `3` | Numeric tags to retain. Older are deleted. |
|
|
|
|
## Behavior
|
|
|
|
1. `docker login code.fritzlab.net` as `ci-bot`.
|
|
2. `docker push <image>:<tag>`.
|
|
3. If `latest=true`, also `docker push <image>:latest`.
|
|
4. If `prune=true`, list numeric tags from Gitea package API, keep the newest `keep`,
|
|
delete the rest. Failures here do not fail the workflow
|
|
(`continue-on-error: true`).
|
|
|
|
`prune` accepts only the strings `true` and `false`; invalid input fails before
|
|
registry login or push. With `false`, remote package listing and deletion are
|
|
skipped. Image upload and local Docker cleanup remain unchanged. The action does
|
|
not discover deployment pins; owners choosing pruning must account for that
|
|
retention contract.
|
|
|
|
Run `python3 -m unittest discover -s tests` with the pinned test dependencies in
|
|
`tests/requirements.txt`. Tests inspect the composite action and execute only
|
|
its credential-free validation step; no registry or package deletion runs.
|