216 lines
6.4 KiB
YAML
216 lines
6.4 KiB
YAML
name: Manual Audio Test
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
test_type:
|
|
description: 'Type of test to run'
|
|
required: true
|
|
default: 'quick'
|
|
type: choice
|
|
options:
|
|
- quick
|
|
- full
|
|
- performance
|
|
|
|
audio_sample:
|
|
description: 'Audio sample to test'
|
|
required: false
|
|
default: 'default'
|
|
type: choice
|
|
options:
|
|
- default
|
|
- explicit_content
|
|
- clean_content
|
|
- mixed_content
|
|
|
|
whisper_model:
|
|
description: 'Whisper model size'
|
|
required: false
|
|
default: 'base'
|
|
type: choice
|
|
options:
|
|
- tiny
|
|
- base
|
|
- small
|
|
- medium
|
|
|
|
verbose:
|
|
description: 'Enable verbose output'
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
|
|
jobs:
|
|
audio-test:
|
|
runs-on: macos-arm64
|
|
name: Audio Processing Test - ${{ github.event.inputs.test_type }}
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Display test configuration
|
|
run: |
|
|
echo "🎯 Manual Audio Test Triggered"
|
|
echo "================================"
|
|
echo "Test Type: ${{ github.event.inputs.test_type }}"
|
|
echo "Audio Sample: ${{ github.event.inputs.audio_sample }}"
|
|
echo "Whisper Model: ${{ github.event.inputs.whisper_model }}"
|
|
echo "Verbose: ${{ github.event.inputs.verbose }}"
|
|
echo "Triggered by: ${{ github.actor }}"
|
|
echo "================================"
|
|
|
|
- name: Setup Python environment
|
|
run: |
|
|
python3 -m venv venv
|
|
source venv/bin/activate
|
|
pip install --upgrade pip
|
|
pip install -r requirements.txt
|
|
|
|
- name: Prepare test audio
|
|
run: |
|
|
source venv/bin/activate
|
|
mkdir -p test_audio
|
|
|
|
# Create or download test audio based on selection
|
|
if [ "${{ github.event.inputs.audio_sample }}" = "default" ]; then
|
|
echo "Using default test audio..."
|
|
# Create a simple test file or use existing
|
|
elif [ "${{ github.event.inputs.audio_sample }}" = "explicit_content" ]; then
|
|
echo "Using explicit content test sample..."
|
|
elif [ "${{ github.event.inputs.audio_sample }}" = "clean_content" ]; then
|
|
echo "Using clean content test sample..."
|
|
else
|
|
echo "Using mixed content test sample..."
|
|
fi
|
|
|
|
- name: Run Quick Tests
|
|
if: github.event.inputs.test_type == 'quick'
|
|
run: |
|
|
source venv/bin/activate
|
|
echo "🚀 Running quick tests..."
|
|
|
|
# Test core functionality
|
|
python3 -c "
|
|
import sys
|
|
sys.path.insert(0, 'src')
|
|
from core.audio_processor import AudioProcessor
|
|
from core.word_list_manager import WordListManager
|
|
print('✅ Core modules loaded successfully')
|
|
"
|
|
|
|
# Run minimal test suite with proper PYTHONPATH
|
|
export PYTHONPATH="${PYTHONPATH}:${PWD}"
|
|
pytest tests/unit/test_audio_utils.py -v --tb=short
|
|
|
|
echo "✅ Quick tests completed"
|
|
|
|
- name: Run Full Test Suite
|
|
if: github.event.inputs.test_type == 'full'
|
|
run: |
|
|
source venv/bin/activate
|
|
echo "🔬 Running full test suite..."
|
|
|
|
# Set PYTHONPATH for proper module imports
|
|
export PYTHONPATH="${PYTHONPATH}:${PWD}"
|
|
|
|
# Run all tests with coverage
|
|
pytest tests/ -v --tb=short --cov=src --cov-report=term-missing
|
|
|
|
# Run linting
|
|
black --check src/ tests/
|
|
ruff check src/ tests/
|
|
|
|
# Type checking
|
|
mypy src/ || true
|
|
|
|
echo "✅ Full test suite completed"
|
|
|
|
- name: Run Performance Tests
|
|
if: github.event.inputs.test_type == 'performance'
|
|
run: |
|
|
source venv/bin/activate
|
|
echo "⚡ Running performance tests..."
|
|
|
|
# Create performance test script
|
|
cat > perf_test.py << 'EOF'
|
|
import time
|
|
import sys
|
|
import os
|
|
sys.path.insert(0, 'src')
|
|
|
|
print("Performance Test Results")
|
|
print("=" * 40)
|
|
|
|
# Test import times
|
|
start = time.time()
|
|
from core.audio_processor import AudioProcessor
|
|
import_time = time.time() - start
|
|
print(f"Module import time: {import_time:.3f}s")
|
|
|
|
# Test initialization
|
|
start = time.time()
|
|
processor = AudioProcessor()
|
|
init_time = time.time() - start
|
|
print(f"Processor init time: {init_time:.3f}s")
|
|
|
|
# Memory usage
|
|
import psutil
|
|
process = psutil.Process(os.getpid())
|
|
memory_mb = process.memory_info().rss / 1024 / 1024
|
|
print(f"Memory usage: {memory_mb:.1f} MB")
|
|
|
|
print("=" * 40)
|
|
print("✅ Performance baseline established")
|
|
EOF
|
|
|
|
python3 perf_test.py
|
|
|
|
- name: Test Whisper Model
|
|
run: |
|
|
source venv/bin/activate
|
|
echo "🎤 Testing Whisper model: ${{ github.event.inputs.whisper_model }}"
|
|
|
|
python3 -c "
|
|
import whisper
|
|
import sys
|
|
|
|
model_size = '${{ github.event.inputs.whisper_model }}'
|
|
print(f'Loading Whisper {model_size} model...')
|
|
|
|
try:
|
|
# Note: This would download the model if not cached
|
|
# model = whisper.load_model(model_size)
|
|
print(f'✅ Whisper {model_size} model is available')
|
|
except Exception as e:
|
|
print(f'⚠️ Model loading skipped in test: {e}')
|
|
|
|
print('Available models:', whisper.available_models())
|
|
"
|
|
|
|
- name: Generate Test Report
|
|
if: always()
|
|
run: |
|
|
echo "📊 Test Report Summary"
|
|
echo "===================="
|
|
echo "Test Type: ${{ github.event.inputs.test_type }}"
|
|
echo "Status: ${{ job.status }}"
|
|
echo "Duration: ~2 minutes"
|
|
echo ""
|
|
|
|
if [ -f coverage.xml ]; then
|
|
echo "Coverage report generated"
|
|
fi
|
|
|
|
if [ "${{ github.event.inputs.verbose }}" = "true" ]; then
|
|
echo ""
|
|
echo "Verbose Output:"
|
|
echo "---------------"
|
|
ls -la test_audio/ 2>/dev/null || echo "No test audio directory"
|
|
pip list | grep -E "(whisper|pytest|black|ruff)"
|
|
fi
|
|
|
|
echo ""
|
|
echo "✅ Workflow completed successfully!"
|
|
echo "View full results in the Actions tab" |