Skip to content

Commit 4f9b062

Browse files
committed
fix(ci): use standard runners and improve workflow reliability
Switch all build workflows to standard GitHub runners (ubuntu-latest, macos-latest, windows-latest) to prevent runner availability issues and job queuing. Changes: - Switch from -8-cores/-xlarge runners to standard runners - Increase timeouts to compensate for fewer cores - Fix summary jobs to handle skipped/failed builds properly - Add build-deps to summary job dependencies - Add !cancelled() condition to prevent hanging jobs - Add smoke test to provenance workflow to validate packages before publish - Improve status reporting with success/failure/skipped detection This resolves the issue where jobs would queue indefinitely waiting for specialized runners, and prevents publishing broken packages like socket@2.1.0.
1 parent a2b4614 commit 4f9b062

4 files changed

Lines changed: 190 additions & 57 deletions

File tree

.github/workflows/build-sea.yml

Lines changed: 45 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -144,12 +144,12 @@ jobs:
144144
platform: alpine
145145
arch: arm64
146146

147-
# macOS builds - use arm64 runner to build both x64 and arm64.
148-
- runner: macos-latest-large
147+
# macOS builds.
148+
- runner: macos-latest
149149
os: darwin
150150
platform: darwin
151151
arch: x64
152-
- runner: macos-latest-large
152+
- runner: macos-latest
153153
os: darwin
154154
platform: darwin
155155
arch: arm64
@@ -537,32 +537,61 @@ jobs:
537537

538538
summary:
539539
name: 📊 🌊 SEA Node Build Summary
540-
needs: [build-sea]
541-
if: always()
540+
needs: [build-deps, build-sea]
541+
if: always() && !cancelled()
542542
runs-on: ubuntu-latest
543543
steps:
544544
- name: Generate summary
545545
run: |
546546
echo "# 🌊 SEA Node Build Summary" >> $GITHUB_STEP_SUMMARY
547547
echo "" >> $GITHUB_STEP_SUMMARY
548-
echo "## ✅ Build Complete" >> $GITHUB_STEP_SUMMARY
549-
echo "" >> $GITHUB_STEP_SUMMARY
550-
echo "SEA (Single Executable Application) binaries built successfully and cached." >> $GITHUB_STEP_SUMMARY
548+
549+
# Check status of dependencies.
550+
DEPS_STATUS="${{ needs.build-deps.result }}"
551+
BUILD_STATUS="${{ needs.build-sea.result }}"
552+
553+
if [ "$DEPS_STATUS" = "failure" ] || [ "$BUILD_STATUS" = "failure" ]; then
554+
echo "## ✗ Build Failed" >> $GITHUB_STEP_SUMMARY
555+
echo "" >> $GITHUB_STEP_SUMMARY
556+
echo "One or more builds failed. Check the logs above for details." >> $GITHUB_STEP_SUMMARY
557+
elif [ "$DEPS_STATUS" = "skipped" ] && [ "$BUILD_STATUS" = "skipped" ]; then
558+
echo "## ⊘ Builds Skipped" >> $GITHUB_STEP_SUMMARY
559+
echo "" >> $GITHUB_STEP_SUMMARY
560+
echo "All builds were skipped (likely due to workflow inputs)." >> $GITHUB_STEP_SUMMARY
561+
elif [ "$BUILD_STATUS" = "skipped" ]; then
562+
echo "## ⊘ Builds Skipped" >> $GITHUB_STEP_SUMMARY
563+
echo "" >> $GITHUB_STEP_SUMMARY
564+
echo "Builds were skipped (platform builds disabled by workflow inputs)." >> $GITHUB_STEP_SUMMARY
565+
else
566+
echo "## ✓ Build Complete" >> $GITHUB_STEP_SUMMARY
567+
echo "" >> $GITHUB_STEP_SUMMARY
568+
echo "SEA (Single Executable Application) binaries built successfully and cached." >> $GITHUB_STEP_SUMMARY
569+
fi
570+
551571
echo "" >> $GITHUB_STEP_SUMMARY
552572
echo "### 📦 Build Method" >> $GITHUB_STEP_SUMMARY
553573
echo "" >> $GITHUB_STEP_SUMMARY
554574
echo "| Method | Description | Size |" >> $GITHUB_STEP_SUMMARY
555575
echo "|--------|-------------|------|" >> $GITHUB_STEP_SUMMARY
556576
echo "| 🌊 SEA | Single Executable Application | ~70 MB |" >> $GITHUB_STEP_SUMMARY
557577
echo "" >> $GITHUB_STEP_SUMMARY
558-
echo "### 🎯 Platforms Built" >> $GITHUB_STEP_SUMMARY
578+
echo "### 🎯 Platforms" >> $GITHUB_STEP_SUMMARY
559579
echo "" >> $GITHUB_STEP_SUMMARY
560-
echo "- 🐧 Linux (x64, arm64)" >> $GITHUB_STEP_SUMMARY
561-
echo "- 🍎 macOS (x64, arm64)" >> $GITHUB_STEP_SUMMARY
562-
echo "- 🪟 Windows (x64, arm64)" >> $GITHUB_STEP_SUMMARY
580+
echo "- Linux (x64, arm64)" >> $GITHUB_STEP_SUMMARY
581+
echo "- macOS (x64, arm64)" >> $GITHUB_STEP_SUMMARY
582+
echo "- Windows (x64, arm64)" >> $GITHUB_STEP_SUMMARY
563583
echo "" >> $GITHUB_STEP_SUMMARY
564-
echo "### 🎯 Next Steps" >> $GITHUB_STEP_SUMMARY
584+
echo "### Next Steps" >> $GITHUB_STEP_SUMMARY
565585
echo "" >> $GITHUB_STEP_SUMMARY
566-
echo "- These binaries are now cached for E2E tests" >> $GITHUB_STEP_SUMMARY
567-
echo "- Use \`publish-socketbin.yml\` to publish to npm" >> $GITHUB_STEP_SUMMARY
568-
echo "- Cache is invalidated when source files change" >> $GITHUB_STEP_SUMMARY
586+
587+
if [ "$BUILD_STATUS" = "success" ]; then
588+
echo "- Binaries cached for E2E tests" >> $GITHUB_STEP_SUMMARY
589+
echo "- Use \`publish-socketbin.yml\` to publish" >> $GITHUB_STEP_SUMMARY
590+
echo "- Cache invalidated on source changes" >> $GITHUB_STEP_SUMMARY
591+
elif [ "$BUILD_STATUS" = "skipped" ]; then
592+
echo "- Re-run workflow with platform builds enabled" >> $GITHUB_STEP_SUMMARY
593+
echo "- Or use \`workflow_dispatch\` to trigger specific platforms" >> $GITHUB_STEP_SUMMARY
594+
else
595+
echo "- Check build logs for error details" >> $GITHUB_STEP_SUMMARY
596+
echo "- Fix issues and re-run workflow" >> $GITHUB_STEP_SUMMARY
597+
fi

.github/workflows/build-smol.yml

Lines changed: 49 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -115,48 +115,48 @@ jobs:
115115
needs: build-deps
116116
name: ⚡ Smol - ${{ matrix.platform }}-${{ matrix.arch }}
117117
runs-on: ${{ matrix.runner }}
118-
timeout-minutes: ${{ inputs.force && 150 || 120 }}
118+
timeout-minutes: ${{ inputs.force && 180 || 150 }}
119119
strategy:
120120
fail-fast: true
121121
max-parallel: 8
122122
matrix:
123123
include:
124-
# Linux builds (8-core runners for faster compilation).
125-
- runner: ubuntu-latest-8-cores
124+
# Linux builds.
125+
- runner: ubuntu-latest
126126
os: linux
127127
platform: linux
128128
arch: x64
129-
- runner: ubuntu-latest-8-cores
129+
- runner: ubuntu-latest
130130
os: linux
131131
platform: linux
132132
arch: arm64
133133

134134
# Alpine Linux builds - use musl binaries from unofficial-builds.nodejs.org.
135-
- runner: ubuntu-latest-8-cores
135+
- runner: ubuntu-latest
136136
os: linux
137137
platform: alpine
138138
arch: x64
139-
- runner: ubuntu-latest-8-cores
139+
- runner: ubuntu-latest
140140
os: linux
141141
platform: alpine
142142
arch: arm64
143143

144-
# macOS builds (8-core runners for faster compilation).
145-
- runner: macos-latest-xlarge
144+
# macOS builds.
145+
- runner: macos-latest
146146
os: darwin
147147
platform: darwin
148148
arch: x64
149-
- runner: macos-latest-xlarge
149+
- runner: macos-latest
150150
os: darwin
151151
platform: darwin
152152
arch: arm64
153153

154-
# Windows builds (8-core runners for faster compilation).
155-
- runner: windows-latest-8-cores
154+
# Windows builds.
155+
- runner: windows-latest
156156
os: windows
157157
platform: win32
158158
arch: x64
159-
- runner: windows-latest-8-cores
159+
- runner: windows-latest
160160
os: windows
161161
platform: win32
162162
arch: arm64
@@ -511,17 +511,37 @@ jobs:
511511

512512
summary:
513513
name: ⚡ Build Summary
514-
needs: [build-smol]
515-
if: always()
514+
needs: [build-deps, build-smol]
515+
if: always() && !cancelled()
516516
runs-on: ubuntu-latest
517517
steps:
518518
- name: Generate summary
519519
run: |
520520
echo "# ⚡ Socket Smol Node Build" >> $GITHUB_STEP_SUMMARY
521521
echo "" >> $GITHUB_STEP_SUMMARY
522-
echo "## ✓ Build Complete" >> $GITHUB_STEP_SUMMARY
523-
echo "" >> $GITHUB_STEP_SUMMARY
524-
echo "Socket smol binaries (compressed Node.js + CLI) built successfully." >> $GITHUB_STEP_SUMMARY
522+
523+
# Check status of dependencies.
524+
DEPS_STATUS="${{ needs.build-deps.result }}"
525+
BUILD_STATUS="${{ needs.build-smol.result }}"
526+
527+
if [ "$DEPS_STATUS" = "failure" ] || [ "$BUILD_STATUS" = "failure" ]; then
528+
echo "## ✗ Build Failed" >> $GITHUB_STEP_SUMMARY
529+
echo "" >> $GITHUB_STEP_SUMMARY
530+
echo "One or more builds failed. Check the logs above for details." >> $GITHUB_STEP_SUMMARY
531+
elif [ "$DEPS_STATUS" = "skipped" ] && [ "$BUILD_STATUS" = "skipped" ]; then
532+
echo "## ⊘ Builds Skipped" >> $GITHUB_STEP_SUMMARY
533+
echo "" >> $GITHUB_STEP_SUMMARY
534+
echo "All builds were skipped (likely due to workflow inputs)." >> $GITHUB_STEP_SUMMARY
535+
elif [ "$BUILD_STATUS" = "skipped" ]; then
536+
echo "## ⊘ Builds Skipped" >> $GITHUB_STEP_SUMMARY
537+
echo "" >> $GITHUB_STEP_SUMMARY
538+
echo "Builds were skipped (platform builds disabled by workflow inputs)." >> $GITHUB_STEP_SUMMARY
539+
else
540+
echo "## ✓ Build Complete" >> $GITHUB_STEP_SUMMARY
541+
echo "" >> $GITHUB_STEP_SUMMARY
542+
echo "Socket smol binaries (compressed Node.js + CLI) built successfully." >> $GITHUB_STEP_SUMMARY
543+
fi
544+
525545
echo "" >> $GITHUB_STEP_SUMMARY
526546
echo "### ⚡ Socket Smol Method" >> $GITHUB_STEP_SUMMARY
527547
echo "" >> $GITHUB_STEP_SUMMARY
@@ -537,6 +557,15 @@ jobs:
537557
echo "" >> $GITHUB_STEP_SUMMARY
538558
echo "### → Next Steps" >> $GITHUB_STEP_SUMMARY
539559
echo "" >> $GITHUB_STEP_SUMMARY
540-
echo "- Binaries cached for E2E tests" >> $GITHUB_STEP_SUMMARY
541-
echo "- Use \`publish-socketbin.yml\` to publish" >> $GITHUB_STEP_SUMMARY
542-
echo "- Cache invalidated on patch/script changes" >> $GITHUB_STEP_SUMMARY
560+
561+
if [ "$BUILD_STATUS" = "success" ]; then
562+
echo "- Binaries cached for E2E tests" >> $GITHUB_STEP_SUMMARY
563+
echo "- Use \`publish-socketbin.yml\` to publish" >> $GITHUB_STEP_SUMMARY
564+
echo "- Cache invalidated on patch/script changes" >> $GITHUB_STEP_SUMMARY
565+
elif [ "$BUILD_STATUS" = "skipped" ]; then
566+
echo "- Re-run workflow with platform builds enabled" >> $GITHUB_STEP_SUMMARY
567+
echo "- Or use \`workflow_dispatch\` to trigger specific platforms" >> $GITHUB_STEP_SUMMARY
568+
else
569+
echo "- Check build logs for error details" >> $GITHUB_STEP_SUMMARY
570+
echo "- Fix issues and re-run workflow" >> $GITHUB_STEP_SUMMARY
571+
fi

.github/workflows/build-wasm.yml

Lines changed: 71 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,7 @@ jobs:
492492

493493
summary:
494494
name: 📊 🧱 WASM Build Summary
495-
if: always()
495+
if: always() && !cancelled()
496496
needs: [build-yoga-layout, build-models, build-onnx-runtime]
497497
runs-on: ubuntu-latest
498498
steps:
@@ -506,33 +506,83 @@ jobs:
506506
run: |
507507
echo "# 🧱 WASM Build Summary" >> $GITHUB_STEP_SUMMARY
508508
echo "" >> $GITHUB_STEP_SUMMARY
509-
echo "## ✅ Build Complete" >> $GITHUB_STEP_SUMMARY
510-
echo "" >> $GITHUB_STEP_SUMMARY
511-
echo "Selected WASM assets built successfully and cached." >> $GITHUB_STEP_SUMMARY
509+
510+
# Check status of builds.
511+
YOGA_STATUS="${{ needs.build-yoga-layout.result }}"
512+
MODELS_STATUS="${{ needs.build-models.result }}"
513+
ONNX_STATUS="${{ needs.build-onnx-runtime.result }}"
514+
515+
# Determine overall status.
516+
if [ "$YOGA_STATUS" = "failure" ] || [ "$MODELS_STATUS" = "failure" ] || [ "$ONNX_STATUS" = "failure" ]; then
517+
echo "## ✗ Build Failed" >> $GITHUB_STEP_SUMMARY
518+
echo "" >> $GITHUB_STEP_SUMMARY
519+
echo "One or more builds failed. Check the logs above for details." >> $GITHUB_STEP_SUMMARY
520+
elif [ "$YOGA_STATUS" = "skipped" ] && [ "$MODELS_STATUS" = "skipped" ] && [ "$ONNX_STATUS" = "skipped" ]; then
521+
echo "## ⊘ Builds Skipped" >> $GITHUB_STEP_SUMMARY
522+
echo "" >> $GITHUB_STEP_SUMMARY
523+
echo "All builds were skipped (likely due to workflow inputs)." >> $GITHUB_STEP_SUMMARY
524+
else
525+
echo "## ✓ Build Complete" >> $GITHUB_STEP_SUMMARY
526+
echo "" >> $GITHUB_STEP_SUMMARY
527+
echo "Selected WASM assets built successfully and cached." >> $GITHUB_STEP_SUMMARY
528+
fi
529+
512530
echo "" >> $GITHUB_STEP_SUMMARY
513531
echo "### 📦 Artifacts" >> $GITHUB_STEP_SUMMARY
514532
echo "" >> $GITHUB_STEP_SUMMARY
515-
echo "| Asset | Files |" >> $GITHUB_STEP_SUMMARY
516-
echo "|-------|-------|" >> $GITHUB_STEP_SUMMARY
517-
if [ -d "artifacts/yoga-wasm" ]; then
518-
echo "| 🧘 Yoga Layout | \`yoga.wasm\`, \`yoga.js\` |" >> $GITHUB_STEP_SUMMARY
533+
echo "| Asset | Status | Files |" >> $GITHUB_STEP_SUMMARY
534+
echo "|-------|--------|-------|" >> $GITHUB_STEP_SUMMARY
535+
536+
# Yoga Layout.
537+
if [ "$YOGA_STATUS" = "success" ]; then
538+
echo "| 🧘 Yoga Layout | ✓ | \`yoga.wasm\`, \`yoga.js\` |" >> $GITHUB_STEP_SUMMARY
539+
elif [ "$YOGA_STATUS" = "skipped" ]; then
540+
echo "| 🧘 Yoga Layout | ⊘ | Skipped |" >> $GITHUB_STEP_SUMMARY
541+
else
542+
echo "| 🧘 Yoga Layout | ✗ | Failed |" >> $GITHUB_STEP_SUMMARY
519543
fi
520-
if [ -d "artifacts/ai-models" ]; then
521-
# Detect quantization level from file names.
522-
if [ -f "artifacts/ai-models/minilm-l6-int8.onnx" ]; then
523-
echo "| 🤖 AI Models | \`minilm-l6-int8.onnx\` (INT8), \`codet5-encoder-int8.onnx\` (INT8), \`codet5-decoder-int8.onnx\` (INT8) |" >> $GITHUB_STEP_SUMMARY
524-
elif [ -f "artifacts/ai-models/minilm-l6-int4.onnx" ]; then
525-
echo "| 🤖 AI Models | \`minilm-l6-int4.onnx\` (INT4), \`codet5-encoder-int4.onnx\` (INT4), \`codet5-decoder-int4.onnx\` (INT4) |" >> $GITHUB_STEP_SUMMARY
544+
545+
# AI Models.
546+
if [ "$MODELS_STATUS" = "success" ]; then
547+
if [ -d "artifacts/ai-models" ]; then
548+
if [ -f "artifacts/ai-models/minilm-l6-int8.onnx" ]; then
549+
echo "| 🤖 AI Models | ✓ | \`*-int8.onnx\` (INT8) |" >> $GITHUB_STEP_SUMMARY
550+
elif [ -f "artifacts/ai-models/minilm-l6-int4.onnx" ]; then
551+
echo "| 🤖 AI Models | ✓ | \`*-int4.onnx\` (INT4) |" >> $GITHUB_STEP_SUMMARY
552+
else
553+
echo "| 🤖 AI Models | ✓ | Built |" >> $GITHUB_STEP_SUMMARY
554+
fi
526555
else
527-
echo "| 🤖 AI Models | $(ls artifacts/ai-models/*.onnx 2>/dev/null | xargs -n1 basename | sed 's/^/`/;s/$/`/' | tr '\n' ',' | sed 's/,$//' || echo "No ONNX files found") |" >> $GITHUB_STEP_SUMMARY
556+
echo "| 🤖 AI Models | ✓ | Built |" >> $GITHUB_STEP_SUMMARY
528557
fi
558+
elif [ "$MODELS_STATUS" = "skipped" ]; then
559+
echo "| 🤖 AI Models | ⊘ | Skipped |" >> $GITHUB_STEP_SUMMARY
560+
else
561+
echo "| 🤖 AI Models | ✗ | Failed |" >> $GITHUB_STEP_SUMMARY
529562
fi
530-
if [ -d "artifacts/onnx-runtime" ]; then
531-
echo "| 🌐 ONNX Runtime | \`ort-wasm-simd-threaded.wasm\`, \`ort-wasm-simd-threaded.mjs\` |" >> $GITHUB_STEP_SUMMARY
563+
564+
# ONNX Runtime.
565+
if [ "$ONNX_STATUS" = "success" ]; then
566+
echo "| 🌐 ONNX Runtime | ✓ | \`ort-wasm-simd-threaded.*\` |" >> $GITHUB_STEP_SUMMARY
567+
elif [ "$ONNX_STATUS" = "skipped" ]; then
568+
echo "| 🌐 ONNX Runtime | ⊘ | Skipped |" >> $GITHUB_STEP_SUMMARY
569+
else
570+
echo "| 🌐 ONNX Runtime | ✗ | Failed |" >> $GITHUB_STEP_SUMMARY
532571
fi
572+
533573
echo "" >> $GITHUB_STEP_SUMMARY
534-
echo "### 🎯 Next Steps" >> $GITHUB_STEP_SUMMARY
574+
echo "### Next Steps" >> $GITHUB_STEP_SUMMARY
535575
echo "" >> $GITHUB_STEP_SUMMARY
536-
echo "- These artifacts are now cached for CI builds" >> $GITHUB_STEP_SUMMARY
537-
echo "- CLI builds will use these cached WASM assets" >> $GITHUB_STEP_SUMMARY
538-
echo "- Cache is invalidated when source files change" >> $GITHUB_STEP_SUMMARY
576+
577+
# Check if any succeeded.
578+
if [ "$YOGA_STATUS" = "success" ] || [ "$MODELS_STATUS" = "success" ] || [ "$ONNX_STATUS" = "success" ]; then
579+
echo "- Artifacts cached for CI builds" >> $GITHUB_STEP_SUMMARY
580+
echo "- CLI builds will use cached WASM assets" >> $GITHUB_STEP_SUMMARY
581+
echo "- Cache invalidated on source changes" >> $GITHUB_STEP_SUMMARY
582+
elif [ "$YOGA_STATUS" = "skipped" ] && [ "$MODELS_STATUS" = "skipped" ] && [ "$ONNX_STATUS" = "skipped" ]; then
583+
echo "- Re-run workflow with builds enabled" >> $GITHUB_STEP_SUMMARY
584+
echo "- Or use \`workflow_dispatch\` to build specific assets" >> $GITHUB_STEP_SUMMARY
585+
else
586+
echo "- Check build logs for error details" >> $GITHUB_STEP_SUMMARY
587+
echo "- Fix issues and re-run workflow" >> $GITHUB_STEP_SUMMARY
588+
fi

.github/workflows/provenance.yml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,31 @@ jobs:
8383
- name: Validate socket package
8484
if: ${{ inputs.publish-socket != false }}
8585
run: pnpm --filter socket run verify
86+
- name: Smoke test socket package
87+
if: ${{ inputs.publish-socket != false }}
88+
run: |
89+
echo "Running smoke test on socket package..."
90+
cd packages/socket
91+
92+
# Pack the package locally (doesn't publish).
93+
npm pack
94+
95+
# Install it in a temp directory.
96+
TEMP_DIR=$(mktemp -d)
97+
cd "$TEMP_DIR"
98+
npm install --no-save "$OLDPWD"/socket-*.tgz
99+
100+
# Test basic commands.
101+
echo "Testing: socket --version"
102+
npx socket --version || (echo "✗ socket --version failed" && exit 1)
103+
104+
echo "Testing: socket --help"
105+
npx socket --help || (echo "✗ socket --help failed" && exit 1)
106+
107+
echo "✓ Smoke test passed"
108+
109+
# Cleanup.
110+
rm -rf "$TEMP_DIR"
86111
- name: Publish socket package
87112
if: ${{ inputs.publish-socket != false }}
88113
working-directory: packages/socket

0 commit comments

Comments
 (0)