Files
SLAM_Docker_Env/.gitea/workflows/docker-build-multiarch.yml

70 lines
2.3 KiB
YAML

name: Docker Build (multi-arch AMD64 + ARM64)
on:
workflow_dispatch:
env:
REGISTRY: gitea.cuihang1201.synology.me
IMAGE_NAME: hangpersonal/sad-workspace
TAG_NAME: latest
PLATFORMS: linux/amd64,linux/arm64
jobs:
build-and-push:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU (for cross-compiling)
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
run: |
if docker buildx inspect multi >/dev/null 2>&1; then
echo "Builder multi already exists"
else
echo "Creating builder 'multi'"
docker buildx create --name multi --use
docker buildx inspect --bootstrap
fi
# Login to your Gitea registry
- name: Log in to registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ secrets.REGISTRY_USER }}
password: ${{ secrets.REGISTRY_TOKEN }}
- name: Build Docker image
run: |
docker buildx build \
--platform ${{ env.PLATFORMS }} \
-t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.TAG_NAME }} \
--push --progress=plain .
- name: Inspect pushed manifest
run: |
docker buildx imagetools inspect ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.TAG_NAME }}
- name: Cleanup Buildx (builder, container, volume, cache)
if: always()
run: |
set -euxo pipefail
# Remove the builder (stops its BuildKit container)
if docker buildx version >/dev/null 2>&1; then
docker buildx rm multi || true
fi
# Belt-and-suspenders: kill any lingering buildkit container
docker rm -f $(docker ps -a --filter name='buildx_buildkit_multi' -q) 2>/dev/null || true
# Remove the builder's state volume(s)
docker volume rm $(docker volume ls -q | grep '^buildx_buildkit_multi') 2>/dev/null || true
# (Optional) prune caches to reclaim disk
if docker buildx version >/dev/null 2>&1; then
docker buildx prune --all --force || true
fi