@@ -41,26 +41,35 @@ jobs:
4141 exit 0
4242 fi
4343
44- # "build publish" = 完整发布流程
44+ # 初始化标志
45+ BUILD=false
46+ RELEASE=false
47+ PUBLISH=false
48+
49+ # "build publish" = 构建 + Release + 发布到包管理器 (全套)
4550 if echo "$MSG" | grep -qi "build publish"; then
46- echo "should_build =true" >> "$GITHUB_OUTPUT"
47- echo "should_release =true" >> "$GITHUB_OUTPUT"
48- echo "should_publish =true" >> "$GITHUB_OUTPUT"
51+ BUILD =true
52+ RELEASE =true
53+ PUBLISH =true
4954 # "build release" = 构建 + GitHub Release
5055 elif echo "$MSG" | grep -qi "build release"; then
51- echo "should_build=true" >> "$GITHUB_OUTPUT"
52- echo "should_release=true" >> "$GITHUB_OUTPUT"
53- echo "should_publish=false" >> "$GITHUB_OUTPUT"
56+ BUILD=true
57+ RELEASE=true
5458 # "build action" = 仅构建
5559 elif echo "$MSG" | grep -qi "build action"; then
56- echo "should_build=true" >> "$GITHUB_OUTPUT"
57- echo "should_release=false" >> "$GITHUB_OUTPUT"
58- echo "should_publish=false" >> "$GITHUB_OUTPUT"
59- else
60- echo "should_build=false" >> "$GITHUB_OUTPUT"
61- echo "should_release=false" >> "$GITHUB_OUTPUT"
62- echo "should_publish=false" >> "$GITHUB_OUTPUT"
60+ BUILD=true
6361 fi
62+
63+ # "publish from release" = 从已有 Release 发布到包管理器 (不构建)
64+ if echo "$MSG" | grep -qi "publish from release"; then
65+ PUBLISH=true
66+ fi
67+
68+ echo "should_build=$BUILD" >> "$GITHUB_OUTPUT"
69+ echo "should_release=$RELEASE" >> "$GITHUB_OUTPUT"
70+ echo "should_publish=$PUBLISH" >> "$GITHUB_OUTPUT"
71+
72+ echo "📋 Flags: build=$BUILD release=$RELEASE publish=$PUBLISH"
6473
6574 # ── 多平台构建 ───────────────────────────────────────────
6675 build :
@@ -297,3 +306,108 @@ jobs:
297306 --notes-file release_notes.md \
298307 --latest \
299308 winload-*-${VERSION}*
309+
310+ # ── 更新 Scoop Bucket ─────────────────────────────────
311+ # 触发方式:
312+ # - "publish from release" → 从已有 Release 拉取二进制,仅更新 Scoop
313+ # - "build publish" → 构建 + Release + 更新 Scoop(全套)
314+ publish-scoop :
315+ name : Update Scoop Bucket
316+ needs : [check, release]
317+ # always() 让此 job 即使 release 被跳过也能运行
318+ if : always() && needs.check.outputs.should_publish == 'true' && (needs.release.result == 'success' || needs.release.result == 'skipped')
319+ runs-on : ubuntu-latest
320+ steps :
321+ - name : Fetch latest release info
322+ env :
323+ GH_TOKEN : ${{ github.token }}
324+ run : |
325+ VERSION="${{ needs.check.outputs.version }}"
326+ REPO="${{ github.repository }}"
327+ BASE_URL="https://github.com/${REPO}/releases/download/${VERSION}"
328+
329+ echo "📦 Target version: ${VERSION}"
330+ echo "📥 Downloading Windows binaries from release..."
331+
332+ # 下载 Windows x64
333+ curl -fSL -o winload-windows-x86_64.exe \
334+ "${BASE_URL}/winload-windows-x86_64-${VERSION}.exe" \
335+ || { echo "❌ Failed to download x64 binary"; exit 1; }
336+
337+ # 下载 Windows ARM64
338+ curl -fSL -o winload-windows-aarch64.exe \
339+ "${BASE_URL}/winload-windows-aarch64-${VERSION}.exe" \
340+ || { echo "❌ Failed to download arm64 binary"; exit 1; }
341+
342+ echo "✅ Downloaded:"
343+ ls -lh winload-windows-*.exe
344+
345+ - name : Generate Scoop manifest
346+ run : |
347+ VERSION="${{ needs.check.outputs.version }}"
348+ SCOOP_VERSION="${VERSION#v}"
349+ REPO="${{ github.repository }}"
350+ BASE_URL="https://github.com/${REPO}/releases/download/${VERSION}"
351+
352+ # 计算 sha256
353+ HASH_X64=$(sha256sum winload-windows-x86_64.exe | awk '{print $1}')
354+ HASH_ARM64=$(sha256sum winload-windows-aarch64.exe | awk '{print $1}')
355+
356+ echo "📦 Version: $SCOOP_VERSION"
357+ echo "🔑 x64 hash: $HASH_X64"
358+ echo "🔑 arm64 hash: $HASH_ARM64"
359+
360+ cat > winload.json << EOF
361+ {
362+ "version": "${SCOOP_VERSION}",
363+ "description": "Network Load Monitor - nload for Windows/Linux/macOS",
364+ "homepage": "https://github.com/${REPO}",
365+ "license": "MIT",
366+ "architecture": {
367+ "64bit": {
368+ "url": "${BASE_URL}/winload-windows-x86_64-${VERSION}.exe",
369+ "hash": "${HASH_X64}",
370+ "bin": [["winload-windows-x86_64-${VERSION}.exe", "winload"]]
371+ },
372+ "arm64": {
373+ "url": "${BASE_URL}/winload-windows-aarch64-${VERSION}.exe",
374+ "hash": "${HASH_ARM64}",
375+ "bin": [["winload-windows-aarch64-${VERSION}.exe", "winload"]]
376+ }
377+ },
378+ "checkver": {
379+ "github": "https://github.com/${REPO}"
380+ },
381+ "autoupdate": {
382+ "architecture": {
383+ "64bit": {
384+ "url": "https://github.com/${REPO}/releases/download/v\$version/winload-windows-x86_64-v\$version.exe"
385+ },
386+ "arm64": {
387+ "url": "https://github.com/${REPO}/releases/download/v\$version/winload-windows-aarch64-v\$version.exe"
388+ }
389+ }
390+ }
391+ }
392+ EOF
393+
394+ echo "📝 Generated winload.json:"
395+ cat winload.json
396+
397+ - name : Push to scoop-bucket repo
398+ env :
399+ SCOOP_TOKEN : ${{ secrets.SCOOP_BUCKET_TOKEN }}
400+ run : |
401+ VERSION="${{ needs.check.outputs.version }}"
402+
403+ git clone https://x-access-token:${SCOOP_TOKEN}@github.com/VincentZyuApps/scoop-bucket.git scoop-repo
404+ cp winload.json scoop-repo/bucket/winload.json
405+
406+ cd scoop-repo
407+ git config user.name "github-actions[bot]"
408+ git config user.email "github-actions[bot]@users.noreply.github.com"
409+ git add bucket/winload.json
410+ git commit -m "🍺 Update winload to ${VERSION}" || echo "No changes to commit"
411+ git push
412+
413+ echo "✅ Scoop bucket updated!"
0 commit comments