name: CI on: push: branches: - master pull_request: branches: - '**' jobs: tests: name: ${{ matrix.os }} / ${{ matrix.python-version }} runs-on: ${{ matrix.os }}-latest strategy: matrix: os: [Ubuntu, MacOS, Windows] python-version: ['3.6.7', 3.7, 3.8, 3.9] exclude: - os: Windows python-version: 3.6 steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Get full Python version id: full-python-version shell: bash run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") - 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@v2 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 run python -m pip install pip -U poetry install - 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/