name: CI on: push: branches: - master pull_request: branches: - '**' jobs: tests: name: ${{ matrix.os }} / ${{ matrix.python-version }} runs-on: ${{ matrix.os }}-latest strategy: fail-fast: false matrix: os: [Ubuntu, MacOS, Windows] python-version: ['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: Get full Python version id: full-python-version shell: bash run: echo "version=$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))")" >> "$GITHUB_OUTPUT" - name: Install poetry shell: bash run: | python -m pip install poetry echo "$HOME/.poetry/bin" >> $GITHUB_PATH - name: Configure poetry shell: bash run: poetry config virtualenvs.in-project true - name: Set up cache uses: actions/cache@v3 id: cache with: path: .venv key: venv-${{ runner.os }}-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} - name: Ensure cache is healthy if: steps.cache.outputs.cache-hit == 'true' shell: bash run: poetry run pip --version >/dev/null 2>&1 || rm -rf .venv - name: Install dependencies shell: bash run: poetry install -E compiler - name: Generate code from proto files shell: bash run: poetry run python -m tests.generate -v - name: Execute test suite shell: bash run: poetry run python -m pytest tests/