Voidline Meet

Voidline Meet: CI/CD Implementation Plan

Last updated: 3/17/2026


đź“‹ Executive Summary

This plan details the end-to-end CI/CD pipeline for Voidline Meet:
- Tag-based deployments from your GitHub monorepo
- Automatic building and releasing of Electron desktop app and backend
- VPS backend deployment via Docker Compose using SSH
- Static assets published to GitHub Pages
- Extensible with notifications, alternate CDNs, and future test/stage deploys


I. Versioning & Triggers


II. Electron Desktop App Build & Release

  1. Build
  2. Publish

III. Backend Deploy (meet-core) to VPS

  1. Prepare Dockerfile
  2. Deploy Workflow
  3. SSH/Deploy Key

IV. Static Asset Hosting (GitHub Pages)

  1. Build Next.js static export via CI job.
  2. Publish /out (or build output dir) to gh-pages branch using actions-gh-pages.
  3. Serves at https://<username>.github.io/<repo>/ or custom domain.

V. Secrets Management


VI. GitHub Actions Workflow Outline

A single workflow, e.g. .github/workflows/release.yml triggers on tag push:

name: Release & Deploy

on:
  push:
    tags:
      - 'v*.*.*'

jobs:
  build-desktop:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v2
        with:
          version: 9
      - run: pnpm install
      - run: pnpm electron:build
      - run: pnpm electron-builder --publish always

  build-static:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: pnpm install
      - run: pnpm build:web
      - uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./packages/meet-core/out

  deploy-backend:
    needs: [build-desktop, build-static]
    runs-on: ubuntu-latest
    steps:
      - uses: appleboy/ssh-action@v1.0.0
        with:
          host: ${{ secrets.VPS_HOST }}
          username: spellsever
          key: ${{ secrets.VPS_DEPLOY_KEY }}
          passphrase: ${{ secrets.VPS_DEPLOY_KEY_PASSPHRASE }}
          script: |
            cd ~/stoat/stoat
            git pull origin main
            echo "${{ secrets.LIVEKIT_SECRETS_ENV }}" > secrets.env
            sudo docker builder prune -f
            sudo DOCKER_BUILDKIT=1 docker compose build meet
            sudo docker compose up -d meet

  # Optionally: upload .exe to VPS via SCP (see references below)
  # Optionally: add notifications to Discord/email (see resources)

VII. Key Action Items

  1. Move Dockerfile.meet to repo, and update Compose.
  2. Generate/OpenSSH deploy key:
  3. Store LiveKit and other secrets as Actions Secrets.
  4. Implement workflow as above.
  5. Tag and push to test!
  6. Iterate and add notifications, CDNs, and tests as you grow.

VIII. Notes for Future Expansion


IX. Reference Resources


X. Closing Notes / Action Items