summaryrefslogtreecommitdiff
path: root/.github/workflows/checks.yaml
blob: 2ffe1cebafab5ad608e89103292c81468ed243fe (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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
name: Checks

on:
  push:
    branches:
      - main
      - "maintenance/**"
  pull_request:
    branches:
      - main
      - "maintenance/**"

env:
  CACHE_VERSION: 1
  KEY_PREFIX: base-venv
  DEFAULT_PYTHON: "3.11"
  PRE_COMMIT_CACHE: ~/.cache/pre-commit

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

permissions:
  contents: read

jobs:
  prepare-base:
    name: Prepare base dependencies
    runs-on: ubuntu-latest
    timeout-minutes: 10
    outputs:
      python-key: ${{ steps.generate-python-key.outputs.key }}
      pre-commit-key: ${{ steps.generate-pre-commit-key.outputs.key }}
    steps:
      - name: Check out code from GitHub
        uses: actions/checkout@v3.3.0
      - name: Set up Python ${{ env.DEFAULT_PYTHON }}
        id: python
        uses: actions/setup-python@v4.4.0
        with:
          python-version: ${{ env.DEFAULT_PYTHON }}
          check-latest: true
      - name: Generate partial Python venv restore key
        id: generate-python-key
        run: >-
          echo "key=${{ env.KEY_PREFIX }}-${{ env.CACHE_VERSION }}-${{
            hashFiles('pyproject.toml', 'requirements_test.txt',
          'requirements_test_min.txt') }}" >> $GITHUB_OUTPUT
      - name: Restore Python virtual environment
        id: cache-venv
        uses: actions/cache@v3.2.2
        with:
          path: venv
          key: >-
            ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
            steps.generate-python-key.outputs.key }}
      - 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
          pip install -U -r doc/requirements.txt
      - name: Generate pre-commit restore key
        id: generate-pre-commit-key
        run: >-
          echo "key=pre-commit-${{ env.CACHE_VERSION }}-${{
            hashFiles('.pre-commit-config.yaml') }}" >> $GITHUB_OUTPUT
      - name: Restore pre-commit environment
        id: cache-precommit
        uses: actions/cache@v3.2.2
        with:
          path: ${{ env.PRE_COMMIT_CACHE }}
          key: >-
            ${{ runner.os }}-${{ steps.generate-pre-commit-key.outputs.key }}
      - name: Install pre-commit dependencies
        if: steps.cache-precommit.outputs.cache-hit != 'true'
        run: |
          . venv/bin/activate
          pre-commit install --install-hooks

  pylint:
    name: pylint
    runs-on: ubuntu-latest
    timeout-minutes: 10
    needs: prepare-base
    steps:
      - name: Check out code from GitHub
        uses: actions/checkout@v3.3.0
      - name: Set up Python ${{ env.DEFAULT_PYTHON }}
        id: python
        uses: actions/setup-python@v4.4.0
        with:
          python-version: ${{ env.DEFAULT_PYTHON }}
          check-latest: true
      - name: Restore Python virtual environment
        id: cache-venv
        uses: actions/cache@v3.2.2
        with:
          path: venv
          key:
            ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
            needs.prepare-base.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: Restore pre-commit environment
        id: cache-precommit
        uses: actions/cache@v3.2.2
        with:
          path: ${{ env.PRE_COMMIT_CACHE }}
          key: ${{ runner.os }}-${{ needs.prepare-base.outputs.pre-commit-key }}
      - name: Fail job if pre-commit cache restore failed
        if: steps.cache-precommit.outputs.cache-hit != 'true'
        run: |
          echo "Failed to restore pre-commit environment from cache"
          exit 1
      - name: Install enchant and aspell
        run: |
          sudo apt-get update
          sudo apt-get install enchant-2 aspell-en
      - name: Run pylint checks
        run: |
          . venv/bin/activate
          pip install -e .
          pip list | grep 'astroid\|pylint'
          pre-commit run --hook-stage manual pylint-with-spelling --all-files

  spelling:
    name: spelling tests
    runs-on: ubuntu-latest
    timeout-minutes: 5
    needs: prepare-base
    steps:
      - name: Check out code from GitHub
        uses: actions/checkout@v3.3.0
      - name: Set up Python ${{ env.DEFAULT_PYTHON }}
        id: python
        uses: actions/setup-python@v4.4.0
        with:
          python-version: ${{ env.DEFAULT_PYTHON }}
          check-latest: true
      - name: Restore Python virtual environment
        id: cache-venv
        uses: actions/cache@v3.2.2
        with:
          path: venv
          key:
            ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
            needs.prepare-base.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 spelling checks
        run: |
          . venv/bin/activate
          pytest tests/ -k unittest_spelling

  documentation:
    name: documentation
    runs-on: ubuntu-latest
    timeout-minutes: 20
    needs: prepare-base
    steps:
      - name: Check out code from GitHub
        uses: actions/checkout@v3.3.0
      - name: Set up Python ${{ env.DEFAULT_PYTHON }}
        id: python
        uses: actions/setup-python@v4.4.0
        with:
          python-version: ${{ env.DEFAULT_PYTHON }}
          check-latest: true
      - name: Restore Python virtual environment
        id: cache-venv
        uses: actions/cache@v3.2.2
        with:
          path: venv
          key:
            ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
            needs.prepare-base.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: Install tox
        run: |
          pip install -U tox
      - name: Run checks on documentation code examples
        run: |
          tox -e test_doc
      - name: Check documentation build and links
        run: |
          . venv/bin/activate
          cd doc
          make html