vibetunnel/.github/workflows
Peter Steinberger fc6999922f fix: make web artifact download optional in Mac CI
The Mac CI was failing when only Mac files changed because it tried to
download web build artifacts that were never created (Node.js CI was skipped).

Added continue-on-error to the artifact download step, allowing the Mac build
to proceed and build the web frontend itself via the existing build-web-frontend.sh
script that's already part of the Xcode build process.

This fixes CI failures like the one in PR #153 where Mac-only changes
would fail due to missing web artifacts.
2025-07-01 03:45:43 +01:00
..
ci.yml Add Playwright E2E test framework (#120) 2025-06-30 02:51:21 +01:00
claude-code-review.yml Handle external contributor CI permissions gracefully 2025-06-28 15:22:05 +02:00
claude.yml Fix URL link detection for wrapped URLs on mobile terminals (#85) 2025-06-26 22:37:49 +02:00
cleanup-claude-comments.yml Fix Claude bot creating multiple PR comments 2025-06-28 15:22:05 +02:00
ios.yml Fix iOS/macOS test coverage extraction in CI 2025-06-28 15:22:05 +02:00
mac.yml fix: make web artifact download optional in Mac CI 2025-07-01 03:45:43 +01:00
monitor-ci.yml Add comprehensive server tests and switch to Biome linter (#73) 2025-06-24 18:51:38 +02:00
node.yml Fix URL link detection for wrapped URLs on mobile terminals (#85) 2025-06-26 22:37:49 +02:00
playwright.yml Add Playwright E2E test framework (#120) 2025-06-30 02:51:21 +01:00
README.md Migrate to Microsoft node-pty v1.1.0-beta34 (#87) 2025-06-26 23:10:05 +02:00
release.yml Add comprehensive server tests and switch to Biome linter (#73) 2025-06-24 18:51:38 +02:00
sea-build-test.yml Migrate to Microsoft node-pty v1.1.0-beta34 (#87) 2025-06-26 23:10:05 +02:00
slack-notify.yml Add comprehensive server tests and switch to Biome linter (#73) 2025-06-24 18:51:38 +02:00
web-ci.yml Add Playwright E2E test framework (#120) 2025-06-30 02:51:21 +01:00

VibeTunnel CI/CD Workflows

This directory contains GitHub Actions workflows for continuous integration and testing.

Workflows

1. Web CI (web-ci.yml)

Basic CI workflow that runs on every push and PR affecting the web directory.

Jobs:

  • Lint and Type Check: Runs biome linting and TypeScript type checking
  • Build: Builds the project and uploads artifacts
  • Test: Runs the test suite

Triggers:

  • Push to main or ms-pty branches
  • Pull requests to main
  • Only when files in web/ directory change

2. SEA Build Test (sea-build-test.yml)

Advanced workflow for testing Single Executable Application (SEA) builds with custom Node.js.

Features:

  • Builds custom Node.js from source with optimizations
  • Uses Blacksmith runners for significantly faster builds
  • Caches custom Node.js builds for faster subsequent runs
  • Tests SEA builds with both system and custom Node.js
  • Supports manual triggers with custom Node.js versions

Jobs:

  1. build-custom-node:

    • Runs on blacksmith-32vcpu-ubuntu-2404-arm for fast compilation
    • Builds minimal Node.js without npm, intl, inspector, etc.
    • Uses Blacksmith cache for persistence
    • Outputs the custom Node.js path for downstream jobs
  2. test-sea-build:

    • Runs on blacksmith-8vcpu-ubuntu-2404-arm
    • Matrix build testing both system and custom Node.js
    • Builds SEA executable with node-pty patches
    • Performs smoke tests on the generated executable
    • Uploads artifacts for inspection
  3. test-github-runners:

    • Uses standard ubuntu-latest runners for comparison
    • Helps identify any Blacksmith-specific issues
    • Runs only on push events

3. Xcode SEA Test (xcode-sea-test.yml)

Tests the macOS Xcode build with custom Node.js to ensure the VibeTunnel.app works correctly with SEA executables.

Features:

  • Builds custom Node.js on macOS using self-hosted runners
  • Tests integration of SEA executable into macOS app bundle
  • Verifies the app launches and contains the correct binaries
  • Supports manual triggers with custom Node.js versions

Jobs:

  1. build-custom-node-mac:

    • Runs on self-hosted macOS runner
    • Builds custom Node.js for macOS
    • Uses GitHub Actions cache (appropriate for self-hosted)
    • Outputs node path and size information
  2. test-xcode-build:

    • Builds SEA executable with custom Node.js
    • Copies SEA and native modules to app resources
    • Builds VibeTunnel.app using Xcode
    • Verifies SEA executable is correctly bundled
    • Tests basic app functionality
    • Uploads built app as artifact

Runner Strategy

Blacksmith Runners (Linux)

  • Custom Node.js Build: blacksmith-32vcpu-ubuntu-2404-arm (high CPU for compilation)
  • Other CI Jobs: blacksmith-8vcpu-ubuntu-2404-arm (standard workloads)
  • Benefits: Significantly faster builds, better caching, ARM64 architecture

Self-Hosted Runners (macOS)

  • Used for Xcode builds and macOS-specific testing
  • Access to Xcode and macOS-specific tools
  • Can test code signing and notarization

GitHub Runners (Comparison)

  • ubuntu-latest used in test job for baseline comparison
  • Helps identify Blacksmith-specific issues

Caching Strategy

Blacksmith Cache

IMPORTANT: When using Blacksmith runners, you MUST use useblacksmith/cache@v1

  • Used for all jobs running on Blacksmith runners
  • Provides faster cache operations
  • Better persistence than GitHub Actions cache
  • Cache key: custom-node-linux-x64-v{version}-{hash}

GitHub Actions Cache

Only used for self-hosted runners and standard GitHub runners

  • Self-hosted macOS runners use actions/cache@v4
  • Standard GitHub runners use actions/cache@v4
  • Cache key format same as Blacksmith

Cache Performance

  • Initial custom Node.js build: ~10-15 minutes on 32vCPU
  • Cached builds: ~1 minute
  • Blacksmith cache restoration: 2-3x faster than GitHub Actions cache

Manual Triggers

The SEA build workflow supports manual triggers via GitHub UI:

workflow_dispatch:
  inputs:
    node_version:
      description: 'Node.js version to build'
      default: '24.2.0'

Local Testing

To test the SEA build locally:

# Build custom Node.js
cd web
node build-custom-node.js

# Build SEA with custom Node.js
node build-native.js --custom-node=".node-builds/node-v24.2.0-minimal/out/Release/node"

Optimization Details

The custom Node.js build removes:

  • International support (--without-intl)
  • npm and corepack (--without-npm --without-corepack)
  • Inspector/debugging (--without-inspector)
  • Code cache and snapshots
  • Uses -Os optimization for size

This reduces the Node.js binary from ~120MB to ~50-60MB.

Future Improvements

  • Add Windows and macOS to the build matrix
  • Implement release workflow for automated releases
  • Add performance benchmarks
  • Integrate with release signing process