70 lines
2.3 KiB
YAML
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 |