name: "docker: build release containers for normal volume" on: push: tags: - '*' workflow_dispatch: {} permissions: contents: read jobs: 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@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@v5 with: images: chrislusf/seaweedfs tags: type=ref,event=tag flavor: latest=false - name: Set up QEMU if: matrix.qemu uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Docker Hub if: github.event_name != 'pull_request' uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - 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/${{ 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 tags: type=ref,event=tag flavor: latest=false - name: Login to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Create and push manifest run: | docker buildx imagetools create -t ${{ steps.docker_meta.outputs.tags }} \ ${{ steps.docker_meta.outputs.tags }}-amd64 \ ${{ steps.docker_meta.outputs.tags }}-arm64 \ ${{ steps.docker_meta.outputs.tags }}-arm \ ${{ steps.docker_meta.outputs.tags }}-386