Files
Mikhail Yevchenko 14bba3f94b
Publish container image / build (push) Successful in 13m47s
Publish container image / publish (push) Successful in 15s
Preserve referenced image manifests during cleanup
2026-08-24 12:24:07 +03:00

84 lines
2.7 KiB
YAML

name: Publish container image
on:
push:
branches: [main]
workflow_dispatch:
env:
IMAGE_NAME: gt.uo1.net/1movmedia/ollama-with-model
jobs:
build:
runs-on: ubuntu-latest
outputs:
digest: ${{ steps.build.outputs.digest }}
steps:
- uses: actions/checkout@v4
- name: Log in to Gitea registry
uses: docker/login-action@v3
with:
registry: gt.uo1.net
username: ${{ vars.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
- name: Build image
id: build
uses: docker/build-push-action@v7
with:
context: .
outputs: type=image,name=${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true
publish:
runs-on: ubuntu-latest
needs: build
steps:
- name: Log in to Gitea registry
uses: docker/login-action@v3
with:
registry: gt.uo1.net
username: ${{ vars.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
- name: Publish latest tag
run: docker buildx imagetools create --tag "${IMAGE_NAME}:latest" "${IMAGE_NAME}@${{ needs.build.outputs.digest }}"
- name: Remove old image versions
env:
BUILD_DIGEST: ${{ needs.build.outputs.digest }}
REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }}
run: |
set -eu
command -v jq >/dev/null
api='https://gt.uo1.net/api/v1/packages/1movmedia/container/ollama-with-model'
current_manifest=$(docker buildx imagetools inspect "${IMAGE_NAME}:latest" --raw)
while :; do
response=$(curl --fail --silent --show-error \
--header "Authorization: token ${REGISTRY_TOKEN}" \
"${api}?page=1&limit=100")
versions=$(printf '%s\n' "$response" \
| jq --raw-output '.[] | select(.version != "latest") | .version')
[ -n "$versions" ] || break
deleted=false
for version in $versions; do
if [ "$version" = "$BUILD_DIGEST" ] \
|| printf '%s\n' "$current_manifest" | jq --exit-status \
--arg version "$version" \
'any(.manifests[]?; .digest == $version)' >/dev/null; then
continue
fi
curl --fail --silent --show-error --request DELETE \
--header "Authorization: token ${REGISTRY_TOKEN}" \
"${api}/${version}"
deleted=true
done
"$deleted" || break
done