- README.md: feature list, stack, project structure, deferred items - CLAUDE.md: architecture, conventions, route map, CSS variable system, EventSub subscription table, data model, custom event names - INSTRUCTIONS.md: step-by-step initial deploy guide (Twitch app registration through OBS setup and custom CSS/JS), plus git workflow, first push, GitHub Actions, branching, and update procedure - .github/workflows/ci.yml: syntax check and import check on every push Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
50 lines
1.3 KiB
YAML
50 lines
1.3 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
branches: [main]
|
|
|
|
jobs:
|
|
check:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: '3.11'
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install -r requirements.txt
|
|
|
|
- name: Syntax check
|
|
run: |
|
|
python3 -c "
|
|
import ast, sys, pathlib
|
|
errors = []
|
|
for f in pathlib.Path('app').rglob('*.py'):
|
|
try:
|
|
ast.parse(f.read_text())
|
|
except SyntaxError as e:
|
|
errors.append(f'{f}: {e}')
|
|
if errors:
|
|
for e in errors: print('SYNTAX ERROR:', e)
|
|
sys.exit(1)
|
|
files = list(pathlib.Path('app').rglob('*.py'))
|
|
print(f'All {len(files)} Python files OK')
|
|
"
|
|
|
|
- name: Import check
|
|
run: python -c "from app.main import app; print('App import OK')"
|
|
env:
|
|
DATABASE_URL: sqlite:///./test.db
|
|
SECRET_KEY: ci-test-secret-not-real
|
|
TWITCH_CLIENT_ID: ci-placeholder
|
|
TWITCH_CLIENT_SECRET: ci-placeholder
|
|
TWITCH_REDIRECT_URI: http://localhost:8000/auth/callback
|
|
APP_BASE_URL: http://localhost:8000
|