test-installer.yml•5.24 kB
name: Test Installer
on:
push:
paths:
- 'docs/web/install.sh'
- 'install.sh'
- '.github/workflows/test-installer.yml'
pull_request:
paths:
- 'docs/web/install.sh'
- 'install.sh'
- '.github/workflows/test-installer.yml'
workflow_dispatch:
inputs:
debug:
description: 'Enable debug output'
type: boolean
default: false
jobs:
test-ubuntu:
runs-on: ubuntu-latest
strategy:
matrix:
version: ['22.04', '24.04']
container:
image: ubuntu:${{ matrix.version }}
steps:
- name: Install prerequisites
run: |
apt-get update
apt-get install -y curl git sudo
- name: Checkout code
uses: actions/checkout@v4
- name: Test installer
run: |
if [ "${{ inputs.debug }}" = "true" ]; then
DEBUG_FLAG="--debug"
else
DEBUG_FLAG=""
fi
bash docs/web/install.sh --ci $DEBUG_FLAG
- name: Verify installation
run: |
# Check UV is installed
echo "Checking UV installation..."
which uv || exit 1
uv --version || exit 1
# Check voicemode is installed and in PATH
echo "Checking voicemode command..."
which voicemode || exit 1
voicemode --version || exit 1
# Test CLI help works
echo "Testing CLI help..."
voicemode --help || exit 1
# Test MCP server can start (will fail quickly due to no stdin, but shouldn't crash)
echo "Testing MCP server startup..."
timeout 2 voicemode server stdio || true
# Check config directory was created
echo "Checking config directory..."
ls ~/.voicemode/ || echo "Config directory not yet created (OK for CI)"
test-macos:
strategy:
matrix:
os: ['macos-13', 'macos-14'] # Intel and Apple Silicon
runs-on: ${{ matrix.os }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Test installer
run: |
if [ "${{ inputs.debug }}" = "true" ]; then
DEBUG_FLAG="--debug"
else
DEBUG_FLAG=""
fi
bash docs/web/install.sh --ci $DEBUG_FLAG
- name: Verify installation
run: |
# Check UV is installed
echo "Checking UV installation..."
which uv || exit 1
uv --version || exit 1
# Check voicemode is installed and in PATH
echo "Checking voicemode command..."
which voicemode || exit 1
voicemode --version || exit 1
# Test CLI help works
echo "Testing CLI help..."
voicemode --help || exit 1
# Test MCP server can start (will fail quickly due to no stdin, but shouldn't crash)
echo "Testing MCP server startup..."
gtimeout 2 voicemode server stdio || true
# Check FFmpeg was installed (should be via Homebrew on macOS)
echo "Checking FFmpeg..."
which ffmpeg || exit 1
test-fedora:
runs-on: ubuntu-latest
container:
image: fedora:latest
steps:
- name: Install prerequisites
run: |
dnf install -y curl git sudo which
- name: Checkout code
uses: actions/checkout@v4
- name: Test installer
run: |
if [ "${{ inputs.debug }}" = "true" ]; then
DEBUG_FLAG="--debug"
else
DEBUG_FLAG=""
fi
bash docs/web/install.sh --ci $DEBUG_FLAG
- name: Verify installation
run: |
# Check UV is installed
echo "Checking UV installation..."
which uv || exit 1
uv --version || exit 1
# Check voicemode is installed and in PATH
echo "Checking voicemode command..."
which voicemode || exit 1
voicemode --version || exit 1
# Test CLI help works
echo "Testing CLI help..."
voicemode --help || exit 1
# Test MCP server can start (will fail quickly due to no stdin, but shouldn't crash)
echo "Testing MCP server startup..."
timeout 2 voicemode server stdio || true
# Check config directory was created
echo "Checking config directory..."
ls ~/.voicemode/ || echo "Config directory not yet created (OK for CI)"
test-minimal:
# Test that installer works on a minimal system without Python
runs-on: ubuntu-latest
container:
image: alpine:latest
steps:
- name: Install minimal prerequisites
run: |
apk add --no-cache bash curl git
- name: Checkout code
uses: actions/checkout@v4
- name: Test installer handles missing dependencies gracefully
run: |
# This should not crash even on minimal Alpine
bash docs/web/install.sh --ci || true
# Verify UV gets installed even without Python
if command -v uv >/dev/null 2>&1; then
echo "✅ UV was installed successfully"
uv --version
else
echo "❌ UV was not installed (expected on Alpine)"
fi