name: Test on: push: branches: [ main ] pull_request: branches: [ main ] jobs: test: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] python-version: ['3.8', '3.9', '3.10', '3.11', '3.12'] steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt - name: Run tests with pytest env: GEMINI_API_KEY: "dummy-key-for-tests" run: | pytest tests/ -v --cov=gemini_server --cov-report=xml --cov-report=term - name: Upload coverage to Codecov if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.11' uses: codecov/codecov-action@v4 with: file: ./coverage.xml flags: unittests name: codecov-umbrella fail_ci_if_error: false lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install dependencies run: | python -m pip install --upgrade pip pip install flake8 black isort mypy pip install -r requirements.txt - name: Lint with flake8 run: | # Stop the build if there are Python syntax errors or undefined names flake8 gemini_server.py --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings flake8 gemini_server.py --count --exit-zero --max-complexity=10 --max-line-length=120 --statistics - name: Check formatting with black run: | black --check gemini_server.py - name: Check import order with isort run: | isort --check-only gemini_server.py - name: Type check with mypy run: | mypy gemini_server.py --ignore-missing-imports