From aa6b1ea36ec354d620f456cf94f6af779ccb709a Mon Sep 17 00:00:00 2001 From: 4pmtong Date: Mon, 23 Mar 2026 11:50:46 +0800 Subject: [PATCH] fix too many open files --- .github/workflows/build-view.yml | 81 +++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-view.yml b/.github/workflows/build-view.yml index a4ed2b6d..70b3e9a9 100644 --- a/.github/workflows/build-view.yml +++ b/.github/workflows/build-view.yml @@ -39,6 +39,22 @@ jobs: run: | rm -rf node_modules rm -rf release + rm -rf dist out build .vite + rm -rf node_modules/.cache || true + + # Clean build outputs on GitHub-hosted runners to avoid stale artifacts in current job + - name: Clean build outputs (non-Windows) + if: "!contains(matrix.os, 'self-hosted') && runner.os != 'Windows'" + run: | + rm -rf release dist out build .vite + rm -rf node_modules/.cache || true + + - name: Clean build outputs (Windows) + if: "!contains(matrix.os, 'self-hosted') && runner.os == 'Windows'" + shell: pwsh + run: | + Remove-Item -Recurse -Force release, dist, out, build, .vite -ErrorAction SilentlyContinue + Remove-Item -Recurse -Force node_modules/.cache -ErrorAction SilentlyContinue - name: Setup Node.js if: "!contains(matrix.os, 'self-hosted')" @@ -92,6 +108,54 @@ jobs: echo "LLVM_DIR=$(brew --prefix llvm@20)/lib/cmake/llvm" >> $GITHUB_ENV echo "CMAKE_PREFIX_PATH=$(brew --prefix llvm@20)/lib/cmake/llvm" >> $GITHUB_ENV + # Prebuild separately on macOS so signing/package issues are isolated + - name: Build Release Files (macOS prebuild) + if: runner.os == 'macOS' + timeout-minutes: 45 + run: | + npm run prebuild + env: + VITE_BASE_URL: ${{ secrets.VITE_BASE_URL }} + VITE_PROXY_URL: ${{ secrets.VITE_PROXY_URL }} + VITE_STACK_PROJECT_ID: ${{ secrets.VITE_STACK_PROJECT_ID }} + VITE_STACK_PUBLISHABLE_CLIENT_KEY: ${{ secrets.VITE_STACK_PUBLISHABLE_CLIENT_KEY }} + VITE_STACK_SECRET_SERVER_KEY: ${{ secrets.VITE_STACK_SECRET_SERVER_KEY }} + USE_NPM_INSTALL_BUN: 'true' + + # Inspect payload size/file count before signing to diagnose EMFILE + - name: Inspect app payload before signing (macOS) + if: runner.os == 'macOS' + run: | + echo "==== Release size ====" + du -sh release || true + + echo "==== Release file count ====" + find release | wc -l || true + + APP_PATH=$(find release -name "*.app" -type d | head -1) + + if [ -n "$APP_PATH" ]; then + echo "App found: $APP_PATH" + + echo "==== App size ====" + du -sh "$APP_PATH" || true + + echo "==== App file count ====" + find "$APP_PATH" | wc -l || true + + if [ -d "$APP_PATH/Contents/Resources/prebuilt/venv" ]; then + echo "==== Embedded venv size ====" + du -sh "$APP_PATH/Contents/Resources/prebuilt/venv" || true + + echo "==== Embedded venv file count ====" + find "$APP_PATH/Contents/Resources/prebuilt/venv" | wc -l || true + fi + else + echo "❌ No .app found after prebuild" + ls -la release/ || true + exit 1 + fi + # Step for macOS builds with signing - name: Build Release Files (macOS with signing) if: runner.os == 'macOS' @@ -104,8 +168,20 @@ jobs: fi ulimit -n 65536 2>/dev/null || ulimit -n 10240 2>/dev/null || true echo "File descriptor limit: $(ulimit -n) (hard: $(ulimit -Hn 2>/dev/null || echo 'N/A'))" - npm run prebuild - npx electron-builder --mac --${{ matrix.arch }} --publish never + + set +e + npx electron-builder --mac dmg --${{ matrix.arch }} --publish never + BUILD_EXIT=$? + + if [ $BUILD_EXIT -ne 0 ]; then + echo "First attempt failed with exit code $BUILD_EXIT" + echo "Retrying once in 5 seconds..." + sleep 5 + npx electron-builder --mac dmg --${{ matrix.arch }} --publish never + BUILD_EXIT=$? + fi + + exit $BUILD_EXIT env: CSC_LINK: ${{ secrets.CERT_P12 }} CSC_KEY_PASSWORD: ${{ secrets.CERT_PASSWORD }} @@ -198,6 +274,7 @@ jobs: path: | release/*.AppImage retention-days: 5 + merge-release: needs: build runs-on: ubuntu-latest