82 lines
2.7 KiB
YAML
82 lines
2.7 KiB
YAML
name: Rebuild Docker images
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: rebuild-docker-images
|
|
cancel-in-progress: false
|
|
|
|
jobs:
|
|
rebuild-and-push:
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
REGISTRY: docker.dcglab.co.uk
|
|
IMAGE_BASE: docker.dcglab.co.uk/public/kb
|
|
REGISTRY_USERNAME: ${{ secrets.DOCKER_DCGLAB_CI_USERNAME }}
|
|
REGISTRY_PASSWORD: ${{ secrets.DOCKER_DCGLAB_CI_PASSWORD }}
|
|
steps:
|
|
- name: Check out repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Log in to registry
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
test -n "$REGISTRY_USERNAME" || { echo "DOCKER_DCGLAB_CI_USERNAME is not available" >&2; exit 1; }
|
|
test -n "$REGISTRY_PASSWORD" || { echo "DOCKER_DCGLAB_CI_PASSWORD is not available" >&2; exit 1; }
|
|
printf '%s' "$REGISTRY_PASSWORD" | docker login "$REGISTRY" --username "$REGISTRY_USERNAME" --password-stdin
|
|
|
|
- name: Build all images from scratch
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
version="$(tr -d '[:space:]' < engine/VERSION)"
|
|
|
|
docker build --pull --no-cache --provenance=false --sbom=false \
|
|
-t "$IMAGE_BASE/engine:v${version}-nvidia" \
|
|
-t "$IMAGE_BASE/engine:latest-nvidia" \
|
|
-f engine/Dockerfile.nvidia engine
|
|
|
|
docker build --pull --no-cache --provenance=false --sbom=false \
|
|
-t "$IMAGE_BASE/engine:v${version}-cpu" \
|
|
-t "$IMAGE_BASE/engine:latest-cpu" \
|
|
-f engine/Dockerfile.cpu engine
|
|
|
|
docker build --pull --no-cache --provenance=false --sbom=false \
|
|
-t "$IMAGE_BASE/mcp:v${version}" \
|
|
-t "$IMAGE_BASE/mcp:latest" \
|
|
-f mcp/Dockerfile mcp
|
|
|
|
- name: Push and verify all tags
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
version="$(tr -d '[:space:]' < engine/VERSION)"
|
|
images=(
|
|
"$IMAGE_BASE/engine:v${version}-nvidia"
|
|
"$IMAGE_BASE/engine:latest-nvidia"
|
|
"$IMAGE_BASE/engine:v${version}-cpu"
|
|
"$IMAGE_BASE/engine:latest-cpu"
|
|
"$IMAGE_BASE/mcp:v${version}"
|
|
"$IMAGE_BASE/mcp:latest"
|
|
)
|
|
|
|
push_image() {
|
|
local image="$1"
|
|
local attempt
|
|
for attempt in 1 2 3 4 5; do
|
|
docker push "$image" && return 0
|
|
if [[ "$attempt" -eq 5 ]]; then
|
|
echo "Failed to push $image after $attempt attempts" >&2
|
|
return 1
|
|
fi
|
|
sleep 10
|
|
done
|
|
}
|
|
|
|
for image in "${images[@]}"; do
|
|
push_image "$image"
|
|
docker manifest inspect "$image" >/dev/null
|
|
done
|