name: CI on: push: branches: [ main ] pull_request: jobs: python: name: Python checks (${{ matrix.project }}) runs-on: ubuntu-latest strategy: fail-fast: false matrix: project: - chatkit/backend - managed-chatkit/backend steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.13" - name: Install dependencies (${{ matrix.project }}) working-directory: ${{ matrix.project }} env: PIP_DISABLE_PIP_VERSION_CHECK: "1" run: | python -m pip install --upgrade pip python -m pip install ".[dev]" python -m pip install mypy - name: Syntax check (${{ matrix.project }}) working-directory: ${{ matrix.project }} run: python -m compileall app - name: Ruff lint (${{ matrix.project }}) working-directory: ${{ matrix.project }} run: python -m ruff check app - name: Ruff format check (${{ matrix.project }}) working-directory: ${{ matrix.project }} run: | python -m ruff format --check app || { echo "::error ::Ruff format check failed. Run 'python -m ruff format app' locally to apply formatting."; exit 1; } - name: mypy (${{ matrix.project }}) working-directory: ${{ matrix.project }} run: python -m mypy app --ignore-missing-imports node: name: Node checks (${{ matrix.project }}) runs-on: ubuntu-latest strategy: fail-fast: false matrix: project: - managed-chatkit/frontend - chatkit/frontend steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 22 cache-dependency-path: ${{ matrix.project }}/package-lock.json cache: "npm" - name: Install dependencies working-directory: ${{ matrix.project }} run: npm ci - name: Run ESLint working-directory: ${{ matrix.project }} run: npm run lint - name: Run build working-directory: ${{ matrix.project }} run: npm run build