File: tests.yaml

package info (click to toggle)
nvchecker 2.19-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 804 kB
  • sloc: python: 5,192; makefile: 30; sh: 27
file content (205 lines) | stat: -rw-r--r-- 6,976 bytes parent folder | download
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
202
203
204
205
name: run tests
on: [push, pull_request]
jobs:
  setup-cache:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        python-version:
        # zstandard doesn't support 3.14 -> httpx doesn't support zstd -> don't cache zstd responses
        - "3.14-dev"
        deps:
        - httpx[http2]>=0.14.0
        exclude: []
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
    - name: Setup Python ${{ matrix.python-version }}
      uses: actions/setup-python@v5
      with:
        python-version: ${{ matrix.python-version }}
    - name: Setup Cache
      uses: actions/cache@v4
      env:
        cache-name: cache-pip
      with:
        path: ~/.cache/pip
        key: ${{ runner.os }}-${{ env.cache-name }}-${{ matrix.deps }}-${{ hashFiles('pyproject.toml', 'setup.cfg') }}
        restore-keys: |
          ${{ runner.os }}-${{ env.cache-name }}-${{ matrix.deps }}-
          ${{ runner.os }}-${{ env.cache-name }}-

    - name: Install pycurl deps
      if: ${{ contains(matrix.deps, 'pycurl') }}
      run: |
        sudo apt update
        sudo apt install -y libcurl4-openssl-dev

    - name: Install lxml deps
      if: ${{ contains(matrix.python-version, '3.14') }}
      run: |
        sudo apt install -y libxml2-dev libxslt1-dev cython3

    - name: Install Python deps
      env:
        # use env to avoid `>` being redirection
        deps: ${{ matrix.deps }}
      run: pip install -U $deps pytest 'pytest-asyncio>=0.24' pytest-httpbin pytest-rerunfailures structlog tomli platformdirs lxml jq werkzeug awesomeversion
    # don't use binary distribution because:
    #   hardcoded cacert path doesn't work on Ubuntu (should have been resolved?)
    #   limited compression support (only deflate & gzip)
    - name: Install pycurl
      if: ${{ contains(matrix.deps, 'pycurl') }}
      run: |
        pip uninstall -y pycurl
        pip install -U pycurl --no-binary :all:
    - name: Install zstandard
      if: ${{ !contains(matrix.python-version, '3.14') }}
      run: |
        pip install -U zstandard

    - name: Decrypt keys
      env:
        KEY: ${{ secrets.KEY }}
      run: if [[ -n $KEY ]]; then openssl enc -d -aes-256-ctr -pbkdf2 -k $KEY -in keyfile.toml.enc -out keyfile.toml; fi

    - name: Setup mitmproxy cache
      uses: actions/cache@v4
      env:
        cache-name: cache-mitm
      with:
        path: ~/.mitmproxy
        key: ${{ env.cache-name }}
        restore-keys: |
          ${{ env.cache-name }}-
    - name: Install mitmproxy
      run: |
        /usr/bin/python -m venv --system-site-packages ~/.mitmproxy/venv
        . ~/.mitmproxy/venv/bin/activate
        pip install -U mitmproxy
        # https://github.com/DevToys-app/DevToys/issues/1373#issuecomment-2599820594
        sudo sysctl -w kernel.apparmor_restrict_unprivileged_unconfined=0
        sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0

    - name: Run pytest
      env:
        mitmdump: /home/runner/.mitmproxy/venv/bin/mitmdump
      run: scripts/run_cached_tests

    - name: show mitmproxy log
      if: ${{ always() }}
      run: cat mitmdump_output

  tests:
    needs: setup-cache
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        python-version:
        - "3.8"
        - "3.9"
        - "3.10"
        - "3.11"
        - "3.12"
        - "3.13"
        - "3.14-dev"
        # pypy fails in some cases but we don't care much about that
        # with github actions we can't mark some jobs to not affect the overall
        # conclusion so we have to omit "allow-failure" tests.
        # See https://github.com/actions/toolkit/issues/399
        # - pypy-3.7
        deps:
        - tornado pycurl
        # timer runs when loop is closed, see https://github.com/lilydjwg/nvchecker/actions/runs/11650699759/job/32439742210
        # - aiohttp
        - tornado
        - httpx[http2]>=0.14.0
        exclude:
        # this has been run as setup-cache
        - python-version: 3.14-dev
          deps: httpx[http2]>=0.14.0
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
    - name: Setup Python ${{ matrix.python-version }}
      uses: actions/setup-python@v5
      with:
        python-version: ${{ matrix.python-version }}
    - name: Setup Cache
      uses: actions/cache@v4
      env:
        cache-name: cache-pip
      with:
        path: ~/.cache/pip
        key: ${{ runner.os }}-${{ env.cache-name }}-${{ matrix.deps }}-${{ hashFiles('pyproject.toml', 'setup.cfg') }}
        restore-keys: |
          ${{ runner.os }}-${{ env.cache-name }}-${{ matrix.deps }}-
          ${{ runner.os }}-${{ env.cache-name }}-

    - name: Install pycurl deps
      if: ${{ contains(matrix.deps, 'pycurl') }}
      run: |
        sudo apt update
        sudo apt install -y libcurl4-openssl-dev
    - name: Install lxml deps
      if: ${{ contains(matrix.python-version, '3.14') }}
      run: |
        sudo apt install -y libxml2-dev libxslt1-dev cython3

    - name: Install Python deps
      env:
        # use env to avoid `>` being redirection
        deps: ${{ matrix.deps }}
      run: pip install -U $deps pytest 'pytest-asyncio>=0.24' pytest-httpbin pytest-rerunfailures structlog tomli platformdirs lxml jq werkzeug awesomeversion
    # don't use binary distribution because:
    #   hardcoded cacert path doesn't work on Ubuntu (should have been resolved?)
    #   limited compression support (only deflate & gzip)
    - name: Install pycurl
      if: ${{ contains(matrix.deps, 'pycurl') }}
      run: |
        pip uninstall -y pycurl
        pip install -U pycurl --no-binary :all:
    - name: Install zstandard
      if: ${{ !contains(matrix.python-version, '3.14') }}
      run: |
        pip install -U zstandard

    - name: Decrypt keys
      env:
        KEY: ${{ secrets.KEY }}
      run: if [[ -n $KEY ]]; then openssl enc -d -aes-256-ctr -pbkdf2 -k $KEY -in keyfile.toml.enc -out keyfile.toml; fi

    - name: Setup mitmproxy cache
      uses: actions/cache@v4
      env:
        cache-name: cache-mitm
      with:
        path: ~/.mitmproxy
        key: ${{ env.cache-name }}
        restore-keys: |
          ${{ env.cache-name }}-
    - name: Install mitmproxy
      run: |
        /usr/bin/python -m venv --system-site-packages ~/.mitmproxy/venv
        . ~/.mitmproxy/venv/bin/activate
        pip install -U mitmproxy
        # https://github.com/DevToys-app/DevToys/issues/1373#issuecomment-2599820594
        sudo sysctl -w kernel.apparmor_restrict_unprivileged_unconfined=0
        sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0

    # - name: Setup upterm session
    #   uses: owenthereal/action-upterm@v1
    #   with:
    #     limit-access-to-users: lilydjwg

    - name: Run pytest
      env:
        mitmdump: /home/runner/.mitmproxy/venv/bin/mitmdump
      run: scripts/run_cached_tests

    - name: show mitmproxy log
      if: ${{ always() }}
      run: cat mitmdump_output