name: Push Image description: Push a locally-built image to code.fritzlab.net and prune old numeric tags. inputs: image: description: Full image name without tag (e.g. code.fritzlab.net/fritzlab/chrony) required: true tag: description: Tag to push. Defaults to github.run_number when empty. required: false default: '' token: description: CI_BOT_TOKEN — registry login + Gitea package API for cleanup required: true org: description: Gitea org for package API (e.g. fritzlab, dns) required: true name: description: Package/image name (e.g. chrony, base, runner) required: true latest: description: Also push a :latest tag required: false default: 'true' keep: description: Numeric tags to retain after prune; older ones are deleted required: false default: '3' runs: using: composite steps: - name: Log in to registry uses: docker/login-action@v3 with: registry: code.fritzlab.net username: ci-bot password: ${{ inputs.token }} - name: Push shell: bash env: IMAGE: ${{ inputs.image }} TAG_INPUT: ${{ inputs.tag }} RUN_NUMBER: ${{ github.run_number }} LATEST: ${{ inputs.latest }} run: | set -euo pipefail TAG="${TAG_INPUT:-$RUN_NUMBER}" echo "Pushing ${IMAGE}:${TAG}" docker push "${IMAGE}:${TAG}" if [ "$LATEST" = "true" ]; then docker tag "${IMAGE}:${TAG}" "${IMAGE}:latest" echo "Pushing ${IMAGE}:latest" docker push "${IMAGE}:latest" fi - name: Prune old tags continue-on-error: true shell: bash env: TOKEN: ${{ inputs.token }} ORG: ${{ inputs.org }} NAME: ${{ inputs.name }} KEEP: ${{ inputs.keep }} run: | set -euo pipefail tea login add --name ci --url https://code.fritzlab.net \ --token "$TOKEN" --no-version-check >/dev/null 2>&1 || true tea api "/packages/${ORG}?type=container" \ | jq -r --arg n "$NAME" \ '.[] | select(.name==$n) | select(.version | test("^[0-9]+$")) | .version' \ | sort -n | head -n -"$KEEP" \ | while read -r tag; do echo "deleting ${NAME}:$tag" tea api -X DELETE "/packages/${ORG}/container/${NAME}/${tag}" done