From 3c1914532fb53585bec88176dbebfce501f76e30 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Thu, 27 Nov 2025 14:50:45 -0800 Subject: [PATCH] re-organize github actions --- .github/workflows/container_latest.yml | 133 ++++++++++++++++++----- .github/workflows/container_release1.yml | 122 +++++++++++++++------ .github/workflows/container_release2.yml | 125 +++++++++++++++------ .github/workflows/container_release3.yml | 29 ++--- .github/workflows/container_release4.yml | 15 ++- .github/workflows/container_release5.yml | 29 ++--- 6 files changed, 320 insertions(+), 133 deletions(-) diff --git a/.github/workflows/container_latest.yml b/.github/workflows/container_latest.yml index 2256e9e67..827d6364c 100644 --- a/.github/workflows/container_latest.yml +++ b/.github/workflows/container_latest.yml @@ -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 diff --git a/.github/workflows/container_release1.yml b/.github/workflows/container_release1.yml index 893bc4e88..682e3d48c 100644 --- a/.github/workflows/container_release1.yml +++ b/.github/workflows/container_release1.yml @@ -10,48 +10,104 @@ permissions: contents: read jobs: - build-default-release-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 - tags: | - type=ref,event=tag - flavor: | - latest=false - 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: Login to Docker Hub + 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@5e57cd118135c172c3672efd75eb46360885c0ef # v1 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - - - 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 + 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 diff --git a/.github/workflows/container_release2.yml b/.github/workflows/container_release2.yml index 13926a9ca..902d8592f 100644 --- a/.github/workflows/container_release2.yml +++ b/.github/workflows/container_release2.yml @@ -10,50 +10,105 @@ permissions: contents: read jobs: - - build-large-release-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 - tags: | - type=ref,event=tag,suffix=_large_disk - flavor: | - latest=false - 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: Login to Docker Hub + images: chrislusf/seaweedfs + tags: type=ref,event=tag,suffix=_large_disk + 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@5e57cd118135c172c3672efd75eb46360885c0ef # v1 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - - - 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 - build-args: TAGS=5BytesOffset - platforms: linux/amd64, linux/arm, linux/arm64, linux/386 - tags: ${{ steps.docker_meta.outputs.tags }} + build-args: | + TAGS=5BytesOffset + BUILDKIT_INLINE_CACHE=1 + BRANCH=${{ github.sha }} + 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 + - 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,suffix=_large_disk + 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 diff --git a/.github/workflows/container_release3.yml b/.github/workflows/container_release3.yml index 3b741f392..3085e9b80 100644 --- a/.github/workflows/container_release3.yml +++ b/.github/workflows/container_release3.yml @@ -17,38 +17,37 @@ jobs: steps: - name: Checkout - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v2 + uses: actions/checkout@v4 + - + name: Free Disk Space + run: | + sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc + sudo docker system prune -af - name: Docker meta id: docker_meta - uses: docker/metadata-action@318604b99e75e41977312d83839a89be02ca4893 # v3 + uses: docker/metadata-action@v5 with: - images: | - chrislusf/seaweedfs - tags: | - type=ref,event=tag,suffix=_large_disk_rocksdb - flavor: | - latest=false + images: chrislusf/seaweedfs + tags: type=ref,event=tag,suffix=_large_disk_rocksdb + flavor: latest=false 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 + uses: docker/setup-buildx-action@v3 - 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: Build - uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v2 + uses: docker/build-push-action@v5 with: context: ./docker push: ${{ github.event_name != 'pull_request' }} @@ -58,3 +57,5 @@ jobs: platforms: linux/amd64 tags: ${{ steps.docker_meta.outputs.tags }} labels: ${{ steps.docker_meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/.github/workflows/container_release4.yml b/.github/workflows/container_release4.yml index 5f33b821a..8b0c5bfe6 100644 --- a/.github/workflows/container_release4.yml +++ b/.github/workflows/container_release4.yml @@ -16,7 +16,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v2 + uses: actions/checkout@v4 - name: Free Disk Space run: | @@ -32,7 +32,7 @@ jobs: - name: Docker meta id: docker_meta - uses: docker/metadata-action@318604b99e75e41977312d83839a89be02ca4893 # v3 + uses: docker/metadata-action@v5 with: images: | chrislusf/seaweedfs @@ -44,22 +44,19 @@ jobs: 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 + uses: docker/setup-buildx-action@v3 - 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: Build - uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v2 + uses: docker/build-push-action@v5 with: context: ./docker push: ${{ github.event_name != 'pull_request' }} @@ -68,3 +65,5 @@ jobs: platforms: linux/amd64 tags: ${{ steps.docker_meta.outputs.tags }} labels: ${{ steps.docker_meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/.github/workflows/container_release5.yml b/.github/workflows/container_release5.yml index 72a4f3db7..8f01d8db4 100644 --- a/.github/workflows/container_release5.yml +++ b/.github/workflows/container_release5.yml @@ -16,38 +16,37 @@ jobs: steps: - name: Checkout - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v2 + uses: actions/checkout@v4 + - + name: Free Disk Space + run: | + sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc + sudo docker system prune -af - name: Docker meta id: docker_meta - uses: docker/metadata-action@318604b99e75e41977312d83839a89be02ca4893 # v3 + uses: docker/metadata-action@v5 with: - images: | - chrislusf/seaweedfs - tags: | - type=ref,event=tag,suffix=_large_disk_full - flavor: | - latest=false + images: chrislusf/seaweedfs + tags: type=ref,event=tag,suffix=_large_disk_full + flavor: latest=false 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 + uses: docker/setup-buildx-action@v3 - 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: Build - uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v2 + uses: docker/build-push-action@v5 with: context: ./docker push: ${{ github.event_name != 'pull_request' }} @@ -56,3 +55,5 @@ jobs: platforms: linux/amd64 tags: ${{ steps.docker_meta.outputs.tags }} labels: ${{ steps.docker_meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max