summaryrefslogtreecommitdiff
path: root/.github/workflows/primer-test.yaml
blob: 219a24b93a6d890b72e6707e8a46080ce40f4387 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
name: Primer

on:
  push:
    branches:
      - main
      - 2.*
  pull_request:
    paths:
      - "pylint/**"
      - "tests/primer/**"
      - "requirements*"
      - ".github/workflows/primer-test.yaml"

env:
  CACHE_VERSION: 21

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  prepare-tests-linux:
    name: prepare / ${{ matrix.python-version }} / Linux
    runs-on: ubuntu-latest
    timeout-minutes: 5
    strategy:
      matrix:
        python-version: [3.8, 3.9, "3.10"]
    outputs:
      python-key: ${{ steps.generate-python-key.outputs.key }}
    steps:
      - name: Check out code from GitHub
        uses: actions/checkout@v3.0.2
      - name: Set up Python ${{ matrix.python-version }}
        id: python
        uses: actions/setup-python@v4.2.0
        with:
          python-version: ${{ matrix.python-version }}
      - name: Generate partial Python venv restore key
        id: generate-python-key
        run: >-
          echo "::set-output name=key::venv-${{ env.CACHE_VERSION }}-${{
            hashFiles('setup.cfg', 'requirements_test.txt', 'requirements_test_min.txt')
          }}"
      - name: Restore Python virtual environment
        id: cache-venv
        uses: actions/cache@v3.0.8
        with:
          path: venv
          key: >-
            ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
            steps.generate-python-key.outputs.key }}
          restore-keys: |
            ${{ runner.os }}-${{ steps.python.outputs.python-version }}-venv-${{ env.CACHE_VERSION }}-
      - name: Create Python virtual environment
        if: steps.cache-venv.outputs.cache-hit != 'true'
        run: |
          python -m venv venv
          . venv/bin/activate
          python -m pip install -U pip setuptools wheel
          pip install -U -r requirements_test.txt

  pytest-primer-stdlib:
    name: run on stdlib / ${{ matrix.python-version }} / Linux
    runs-on: ubuntu-latest
    timeout-minutes: 10
    needs: prepare-tests-linux
    strategy:
      matrix:
        python-version: [3.8, 3.9, "3.10"]
    steps:
      - name: Check out code from GitHub
        uses: actions/checkout@v3.0.2
      - name: Set up Python ${{ matrix.python-version }}
        id: python
        uses: actions/setup-python@v4.2.0
        with:
          python-version: ${{ matrix.python-version }}
      - name: Restore Python virtual environment
        id: cache-venv
        uses: actions/cache@v3.0.8
        with:
          path: venv
          key:
            ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
            needs.prepare-tests-linux.outputs.python-key }}
      - name: Fail job if Python cache restore failed
        if: steps.cache-venv.outputs.cache-hit != 'true'
        run: |
          echo "Failed to restore Python venv from cache"
          exit 1
      - name: Run pytest
        run: |
          . venv/bin/activate
          pip install -e .
          pytest -m primer_stdlib --primer-stdlib -n auto -vv

  pytest-primer-external-batch-one:
    name: run on batch one / ${{ matrix.python-version }} / Linux
    runs-on: ubuntu-latest
    timeout-minutes: 60
    needs: prepare-tests-linux
    strategy:
      matrix:
        python-version: [3.8, 3.9, "3.10"]
    steps:
      - name: Check out code from GitHub
        uses: actions/checkout@v3.0.2
      - name: Set up Python ${{ matrix.python-version }}
        id: python
        uses: actions/setup-python@v4.2.0
        with:
          python-version: ${{ matrix.python-version }}
      - name: Restore Python virtual environment
        id: cache-venv
        uses: actions/cache@v3.0.8
        with:
          path: venv
          key:
            ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
            needs.prepare-tests-linux.outputs.python-key }}
      - name: Fail job if Python cache restore failed
        if: steps.cache-venv.outputs.cache-hit != 'true'
        run: |
          echo "Failed to restore Python venv from cache"
          exit 1
      - name: Run pytest
        run: |
          . venv/bin/activate
          pip install -e .
          pytest -m primer_external_batch_one --primer-external -n auto -vv