fix: 更激進的磁碟清理 + BuildKit GC 設定

This commit is contained in:
Your Name 2026-01-25 20:02:28 +08:00
parent b8025f3256
commit 367f2b4ca6

View file

@ -29,64 +29,56 @@ jobs:
steps: steps:
# ======================================== # ========================================
# 🔥 第一步就清理磁碟(在 checkout 之前! # 🔥 極限磁碟清理(釋放 70GB+ 空間
# ======================================== # ========================================
- name: Maximize disk space (before checkout) - name: Maximize disk space (before checkout)
run: | run: |
echo "🧹 極限磁碟清理(在 checkout 之前)..." echo "🧹 極限磁碟清理..."
echo "========================================"
echo "📊 初始磁碟空間:" echo "📊 初始磁碟空間:"
df -h / df -h /
echo "========================================"
# 停止不需要的服務 # 停止服務
sudo systemctl stop docker || true sudo systemctl stop docker containerd || true
# 移除大型預裝軟體(最關鍵!) # 移除大型預裝軟體(約 50-60GB
sudo rm -rf /usr/share/dotnet || true # ~6GB sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc || true
sudo rm -rf /usr/local/lib/android || true # ~10GB sudo rm -rf /opt/hostedtoolcache /usr/share/swift /opt/microsoft || true
sudo rm -rf /opt/ghc || true # ~2GB sudo rm -rf /usr/local/aws-* /usr/local/julia* /usr/share/az_* /opt/az || true
sudo rm -rf /opt/hostedtoolcache || true # ~8GB sudo rm -rf /usr/lib/google-cloud-sdk /usr/local/share/powershell || true
sudo rm -rf /usr/share/swift || true # ~1.5GB sudo rm -rf /usr/share/miniconda /usr/local/go ~/go || true
sudo rm -rf /usr/local/share/boost || true # ~500MB sudo rm -rf /usr/share/rust ~/.rustup ~/.cargo /usr/share/R /usr/lib/R || true
sudo rm -rf /opt/microsoft || true # ~1GB sudo rm -rf /usr/local/share/boost /usr/local/graalvm /usr/local/.ghcup || true
sudo rm -rf /usr/local/aws-* || true sudo rm -rf /usr/local/share/chromium || true
sudo rm -rf /usr/local/julia* || true
sudo rm -rf /usr/share/az_* /opt/az || true
sudo rm -rf /usr/lib/google-cloud-sdk || true
sudo rm -rf /usr/local/share/powershell || true
sudo rm -rf /usr/share/miniconda || true
sudo rm -rf /usr/local/go ~/go || true
sudo rm -rf /usr/share/rust ~/.rustup ~/.cargo || true
sudo rm -rf /usr/share/R /usr/lib/R || true
# 移除預裝資料庫 # 移除資料庫
sudo rm -rf /var/lib/mysql || true sudo rm -rf /var/lib/mysql /var/lib/postgresql /var/lib/mongodb || true
sudo rm -rf /var/lib/postgresql || true
sudo rm -rf /var/lib/mongodb || true
# 移除文檔 # 移除 snap/flatpak
sudo rm -rf /usr/share/doc || true sudo rm -rf /snap /var/snap /var/lib/snapd || true
sudo rm -rf /usr/share/man || true
sudo rm -rf /usr/share/locale || true
sudo rm -rf /usr/share/icons || true
# 清理 APT # 移除文檔和 locale
sudo apt-get clean || true sudo rm -rf /usr/share/doc /usr/share/man /usr/share/locale || true
sudo rm -rf /var/lib/apt/lists/* || true sudo rm -rf /usr/share/icons /usr/share/fonts /usr/share/help || true
sudo rm -rf /var/cache/apt/archives || true
# 清理 Docker完全重置 # 移除 imagegenerationGitHub runner 專用)
sudo rm -rf /var/lib/docker || true sudo rm -rf /imagegeneration /opt/actionarchivecache || true
sudo mkdir -p /var/lib/docker
# 重啟 Docker # 清理 cache
sudo systemctl start docker || true sudo apt-get clean && sudo apt-get autoremove -y || true
sudo rm -rf /var/lib/apt/lists/* /var/cache/* /tmp/* || true
# 完全重置 Docker
sudo rm -rf /var/lib/docker /var/lib/containerd || true
sudo mkdir -p /var/lib/docker /var/lib/containerd
sudo systemctl start containerd docker || true
echo "========================================"
echo "📊 清理後磁碟空間:" echo "📊 清理後磁碟空間:"
df -h / df -h /
echo "========================================"
# 驗證空間
AVAIL_GB=$(df / | tail -1 | awk '{print int($4/1024/1024)}')
echo "可用空間: ${AVAIL_GB}GB"
[ "$AVAIL_GB" -ge 50 ] && echo "✅ 空間充足" || echo "⚠️ 空間可能不足"
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v4 uses: actions/checkout@v4
@ -106,9 +98,15 @@ jobs:
driver-opts: | driver-opts: |
image=moby/buildkit:latest image=moby/buildkit:latest
network=host network=host
# 限制 BuildKit 使用的磁碟空間
buildkitd-config-inline: | buildkitd-config-inline: |
[worker.oci] [worker.oci]
max-parallelism = 2 max-parallelism = 1
gc = true
gckeepstorage = 5000000000
[worker.containerd]
gc = true
gckeepstorage = 5000000000
- name: Login to Docker Hub - name: Login to Docker Hub
uses: docker/login-action@v3 uses: docker/login-action@v3
@ -116,7 +114,7 @@ jobs:
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: "<EFBFBD> 開始構建 AMD64 Image" - name: "📦 開始構建 AMD64 Image"
run: | run: |
echo "========================================" echo "========================================"
echo "📦 開始構建 AMD64 Docker Image..." echo "📦 開始構建 AMD64 Docker Image..."
@ -131,7 +129,7 @@ jobs:
echo "開始時間: $(date)" echo "開始時間: $(date)"
echo "========================================" echo "========================================"
- name: "<EFBFBD>🐳 Build and push AMD64 image" - name: "🐳 Build and push AMD64 image"
uses: docker/build-push-action@v6 uses: docker/build-push-action@v6
with: with:
context: . context: .
@ -167,64 +165,56 @@ jobs:
steps: steps:
# ======================================== # ========================================
# 🔥 第一步就清理磁碟(在 checkout 之前! # 🔥 極限磁碟清理(釋放 70GB+ 空間
# ======================================== # ========================================
- name: Maximize disk space (before checkout) - name: Maximize disk space (before checkout)
run: | run: |
echo "🧹 極限磁碟清理(在 checkout 之前)..." echo "🧹 極限磁碟清理..."
echo "========================================"
echo "📊 初始磁碟空間:" echo "📊 初始磁碟空間:"
df -h / df -h /
echo "========================================"
# 停止不需要的服務 # 停止服務
sudo systemctl stop docker || true sudo systemctl stop docker containerd || true
# 移除大型預裝軟體(最關鍵!) # 移除大型預裝軟體(約 50-60GB
sudo rm -rf /usr/share/dotnet || true # ~6GB sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc || true
sudo rm -rf /usr/local/lib/android || true # ~10GB sudo rm -rf /opt/hostedtoolcache /usr/share/swift /opt/microsoft || true
sudo rm -rf /opt/ghc || true # ~2GB sudo rm -rf /usr/local/aws-* /usr/local/julia* /usr/share/az_* /opt/az || true
sudo rm -rf /opt/hostedtoolcache || true # ~8GB sudo rm -rf /usr/lib/google-cloud-sdk /usr/local/share/powershell || true
sudo rm -rf /usr/share/swift || true # ~1.5GB sudo rm -rf /usr/share/miniconda /usr/local/go ~/go || true
sudo rm -rf /usr/local/share/boost || true # ~500MB sudo rm -rf /usr/share/rust ~/.rustup ~/.cargo /usr/share/R /usr/lib/R || true
sudo rm -rf /opt/microsoft || true # ~1GB sudo rm -rf /usr/local/share/boost /usr/local/graalvm /usr/local/.ghcup || true
sudo rm -rf /usr/local/aws-* || true sudo rm -rf /usr/local/share/chromium || true
sudo rm -rf /usr/local/julia* || true
sudo rm -rf /usr/share/az_* /opt/az || true
sudo rm -rf /usr/lib/google-cloud-sdk || true
sudo rm -rf /usr/local/share/powershell || true
sudo rm -rf /usr/share/miniconda || true
sudo rm -rf /usr/local/go ~/go || true
sudo rm -rf /usr/share/rust ~/.rustup ~/.cargo || true
sudo rm -rf /usr/share/R /usr/lib/R || true
# 移除預裝資料庫 # 移除資料庫
sudo rm -rf /var/lib/mysql || true sudo rm -rf /var/lib/mysql /var/lib/postgresql /var/lib/mongodb || true
sudo rm -rf /var/lib/postgresql || true
sudo rm -rf /var/lib/mongodb || true
# 移除文檔 # 移除 snap/flatpak
sudo rm -rf /usr/share/doc || true sudo rm -rf /snap /var/snap /var/lib/snapd || true
sudo rm -rf /usr/share/man || true
sudo rm -rf /usr/share/locale || true
sudo rm -rf /usr/share/icons || true
# 清理 APT # 移除文檔和 locale
sudo apt-get clean || true sudo rm -rf /usr/share/doc /usr/share/man /usr/share/locale || true
sudo rm -rf /var/lib/apt/lists/* || true sudo rm -rf /usr/share/icons /usr/share/fonts /usr/share/help || true
sudo rm -rf /var/cache/apt/archives || true
# 清理 Docker完全重置 # 移除 imagegenerationGitHub runner 專用)
sudo rm -rf /var/lib/docker || true sudo rm -rf /imagegeneration /opt/actionarchivecache || true
sudo mkdir -p /var/lib/docker
# 重啟 Docker # 清理 cache
sudo systemctl start docker || true sudo apt-get clean && sudo apt-get autoremove -y || true
sudo rm -rf /var/lib/apt/lists/* /var/cache/* /tmp/* || true
# 完全重置 Docker
sudo rm -rf /var/lib/docker /var/lib/containerd || true
sudo mkdir -p /var/lib/docker /var/lib/containerd
sudo systemctl start containerd docker || true
echo "========================================"
echo "📊 清理後磁碟空間:" echo "📊 清理後磁碟空間:"
df -h / df -h /
echo "========================================"
# 驗證空間
AVAIL_GB=$(df / | tail -1 | awk '{print int($4/1024/1024)}')
echo "可用空間: ${AVAIL_GB}GB"
[ "$AVAIL_GB" -ge 50 ] && echo "✅ 空間充足" || echo "⚠️ 空間可能不足"
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v4 uses: actions/checkout@v4
@ -247,9 +237,15 @@ jobs:
driver-opts: | driver-opts: |
image=moby/buildkit:latest image=moby/buildkit:latest
network=host network=host
# 限制 BuildKit 使用的磁碟空間
buildkitd-config-inline: | buildkitd-config-inline: |
[worker.oci] [worker.oci]
max-parallelism = 2 max-parallelism = 1
gc = true
gckeepstorage = 5000000000
[worker.containerd]
gc = true
gckeepstorage = 5000000000
- name: Login to Docker Hub - name: Login to Docker Hub
uses: docker/login-action@v3 uses: docker/login-action@v3
@ -257,7 +253,7 @@ jobs:
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: "<EFBFBD> 開始構建 ARM64 Image" - name: "📦 開始構建 ARM64 Image"
run: | run: |
echo "========================================" echo "========================================"
echo "📦 開始構建 ARM64 Docker Image..." echo "📦 開始構建 ARM64 Docker Image..."
@ -273,7 +269,7 @@ jobs:
echo "開始時間: $(date)" echo "開始時間: $(date)"
echo "========================================" echo "========================================"
- name: "<EFBFBD>🐳 Build and push ARM64 image" - name: "🐳 Build and push ARM64 image"
uses: docker/build-push-action@v6 uses: docker/build-push-action@v6
with: with:
context: . context: .
@ -287,7 +283,6 @@ jobs:
sbom: false sbom: false
build-args: | build-args: |
BUILDKIT_INLINE_CACHE=1 BUILDKIT_INLINE_CACHE=1
- name: "✅ ARM64 Image 構建完成" - name: "✅ ARM64 Image 構建完成"
run: | run: |
echo "========================================" echo "========================================"