Skip to content

feat: decoupled into core; tui; mcp components; full admin control over kagan board via admin roled mcp #151

feat: decoupled into core; tui; mcp components; full admin control over kagan board via admin roled mcp

feat: decoupled into core; tui; mcp components; full admin control over kagan board via admin roled mcp #151

Workflow file for this run

name: CI
on:
pull_request:
paths-ignore:
- "docs/**"
- "*.md"
- ".github/assets/**"
- "mkdocs.yml"
- ".readthedocs.yaml"
push:
branches: [main]
paths-ignore:
- "docs/**"
- "*.md"
- ".github/assets/**"
- "mkdocs.yml"
- ".readthedocs.yaml"
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: astral-sh/setup-uv@v7
with:
enable-cache: true
- run: uv sync --dev
- run: uv run poe lint
- run: uv run poe typecheck
test:
needs: lint
timeout-minutes: 15
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
steps:
- uses: actions/checkout@v6
- name: Install system dependencies
run: |
if [ "$RUNNER_OS" = "Linux" ]; then
sudo apt-get update
sudo apt-get install -y tmux git
elif [ "$RUNNER_OS" = "macOS" ]; then
brew install tmux
fi
- name: Configure git for tests
run: |
git config --global user.email "test@kagan.local"
git config --global user.name "Kagan Test"
git config --global commit.gpgsign false
- uses: astral-sh/setup-uv@v7
with:
enable-cache: true
- run: uv sync --dev
- name: Test (with coverage)
if: github.ref == 'refs/heads/main'
run: uv run pytest tests/ -m "not snapshot" -n auto --cov=src/kagan --cov-report=term-missing
- name: Test
if: github.ref != 'refs/heads/main'
run: uv run pytest tests/ -m "not snapshot" -n auto
test-windows:
needs: lint
timeout-minutes: 15
runs-on: windows-latest
# Windows tests are advisory — xdist/asyncio teardown can cause spurious
# KeyboardInterrupt on Windows, so failures here must not block the pipeline.
continue-on-error: true
steps:
- uses: actions/checkout@v6
- name: Install system dependencies
run: choco install git -y
- name: Configure git for tests
run: |
git config --global user.email "test@kagan.local"
git config --global user.name "Kagan Test"
git config --global commit.gpgsign false
- uses: astral-sh/setup-uv@v7
with:
enable-cache: true
- run: uv sync --dev
- name: Test (sequential, with coverage)
id: wintest
if: github.ref == 'refs/heads/main'
run: uv run pytest tests/ -m "not snapshot" -n 0 --cov=src/kagan --cov-report=term-missing
- name: Test (sequential)
id: wintest_pr
if: github.ref != 'refs/heads/main'
run: uv run pytest tests/ -m "not snapshot" -n 0
- name: Warn on failure
if: failure()
run: echo "::warning::Windows tests failed — this is advisory and does not block the pipeline."
snapshot:
needs: lint
if: github.ref == 'refs/heads/main'
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [macos-latest, ubuntu-latest, windows-latest]
steps:
- uses: actions/checkout@v6
- name: Install system dependencies (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y tmux git
- name: Install system dependencies (macOS)
if: runner.os == 'macOS'
run: brew install tmux
- name: Install system dependencies (Windows)
if: runner.os == 'Windows'
run: choco install git -y
- name: Configure git for tests
run: |
git config --global user.email "test@kagan.local"
git config --global user.name "Kagan Test"
git config --global commit.gpgsign false
- uses: astral-sh/setup-uv@v7
with:
enable-cache: true
- run: uv sync --dev
- name: Snapshot tests
run: uv run pytest tests/tui/snapshot/ -n 0 -v
test-all-platforms:
needs: lint
if: github.ref == 'refs/heads/main'
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-24.04-arm, macos-15-intel]
steps:
- uses: actions/checkout@v6
- name: Install system dependencies
run: |
if [ "$RUNNER_OS" = "Linux" ]; then
sudo apt-get update
sudo apt-get install -y tmux git
elif [ "$RUNNER_OS" = "macOS" ]; then
brew install tmux
fi
- name: Configure git for tests
run: |
git config --global user.email "test@kagan.local"
git config --global user.name "Kagan Test"
git config --global commit.gpgsign false
- uses: astral-sh/setup-uv@v7
with:
enable-cache: true
- run: uv sync --dev
# Exclude snapshot tests from matrix runs; covered by dedicated job.
- run: uv run pytest tests/ -m "not snapshot" -n auto --cov=src/kagan --cov-report=term-missing