@ -10,58 +10,133 @@ permissions:
contents : read
jobs:
build-latest-container:
runs-on : [ ubuntu-latest]
build:
runs-on : ubuntu-latest
strategy:
matrix:
platform : [ amd64, arm64, arm, 386]
include:
- platform : amd64
qemu : false
- platform : arm64
qemu : true
- platform : arm
qemu : true
- platform : 386
qemu : true
steps:
-
name : Checkout
uses : actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v2
-
name : Docker meta
- name : Checkout
uses : actions/checkout@v4
- name : Free Disk Space
run : |
echo "Available disk space before cleanup:"
df -h
# Remove pre-installed tools
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc /opt/hostedtoolcache/CodeQL
# Clean package managers
sudo apt-get clean
sudo rm -rf /var/lib/apt/lists/*
# Clean Docker aggressively
sudo docker system prune -af --volumes
# Clean Go cache if it exists
[ -d ~/.cache/go-build ] && rm -rf ~/.cache/go-build || true
[ -d /go/pkg ] && rm -rf /go/pkg || true
echo "Available disk space after cleanup:"
df -h
- name : Docker meta
id : docker_meta
uses : docker/metadata-action@318604b99e75e41977312d83839a89be02ca4893 # v3
uses : docker/metadata-action@v5
with:
images : |
chrislusf/seaweedfs
ghcr.io/chrislusf/seaweedfs
tags : |
type=raw,value=latest
tags : type=raw,value=latest
labels : |
org.opencontainers.image.title=seaweedfs
org.opencontainers.image.description=SeaweedFS is a distributed storage system for blobs, objects, files, and data lake, to store and serve billions of files fast!
org.opencontainers.image.vendor=Chris Lu
-
name : Set up QEMU
uses : docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v1
-
name : Set up Docker Buildx
uses : docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v1
- name : Set up QEMU
if : matrix.qemu
uses : docker/setup-qemu-action@v3
- name : Set up Docker Buildx
uses : docker/setup-buildx-action@v3
with:
buildkitd-flags : "--debug"
-
name : Login to Docker Hub
- name : Login to Docker Hub
if : github.event_name != 'pull_request'
uses : docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v1
uses : docker/login-action@v3
with:
username : ${{ secrets.DOCKER_USERNAME }}
password : ${{ secrets.DOCKER_PASSWORD }}
-
name : Login to GHCR
- name : Login to GHCR
if : github.event_name != 'pull_request'
uses : docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v1
uses : docker/login-action@v3
with:
registry : ghcr.io
username : ${{ secrets.GHCR_USERNAME }}
password : ${{ secrets.GHCR_TOKEN }}
-
name : Build
uses : docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v2
- name : Build ${{ matrix.platform }}
uses : docker/build-push-action@v5
env:
DOCKER_BUILDKIT : 1
with:
context : ./docker
push : ${{ github.event_name != 'pull_request' }}
file : ./docker/Dockerfile.go_build
platforms : linux/amd64, linux/arm, linux/arm64, linux/386
tags : ${{ steps.docker_meta.outputs.tags }}
platforms : linux/${{ matrix.platform }}
tags : ${{ steps.docker_meta.outputs.tags }}-${{ matrix.platform }}
labels : ${{ steps.docker_meta.outputs.labels }}
cache-from : type=gha
cache-to : type=gha,mode=max
build-args : |
BUILDKIT_INLINE_CACHE=1
BRANCH=${{ github.sha }}
- name : Clean up build artifacts
if : always()
run : |
# Clean up Docker build cache and temporary files
sudo docker system prune -f
# Remove Go build cache
sudo rm -rf /tmp/go-build*
create-manifest:
runs-on : ubuntu-latest
needs : [ build]
if : github.event_name != 'pull_request'
steps:
- name : Checkout
uses : actions/checkout@v4
- name : Docker meta
id : docker_meta
uses : docker/metadata-action@v5
with:
images : |
chrislusf/seaweedfs
ghcr.io/chrislusf/seaweedfs
tags : type=raw,value=latest
- name : Login to Docker Hub
uses : docker/login-action@v3
with:
username : ${{ secrets.DOCKER_USERNAME }}
password : ${{ secrets.DOCKER_PASSWORD }}
- name : Login to GHCR
uses : docker/login-action@v3
with:
registry : ghcr.io
username : ${{ secrets.GHCR_USERNAME }}
password : ${{ secrets.GHCR_TOKEN }}
- name : Create and push manifest
run : |
# Create manifest for Docker Hub
docker buildx imagetools create -t chrislusf/seaweedfs:latest \
chrislusf/seaweedfs:latest-amd64 \
chrislusf/seaweedfs:latest-arm64 \
chrislusf/seaweedfs:latest-arm \
chrislusf/seaweedfs:latest-386
# Create manifest for GHCR
docker buildx imagetools create -t ghcr.io/chrislusf/seaweedfs:latest \
ghcr.io/chrislusf/seaweedfs:latest-amd64 \
ghcr.io/chrislusf/seaweedfs:latest-arm64 \
ghcr.io/chrislusf/seaweedfs:latest-arm \
ghcr.io/chrislusf/seaweedfs:latest-386