summaryrefslogtreecommitdiff
path: root/.github/workflows/test.yaml
blob: 80ba514ea71aa4f9f96d2f73a47c71d89b48d9f3 (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
name: test
on:
  push:
  pull_request:
  schedule:
    - cron: "43 7 */14 * *" # every two weeks, time chosen by RNG
jobs:
  tox:
    name: "tox ${{ matrix.toxenv }}"
    continue-on-error: ${{ matrix.ignore-error }}
    runs-on: ${{ matrix.os }}
    # https://github.community/t/duplicate-checks-on-push-and-pull-request-simultaneous-event/18012/5
    if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != 'eventlet/eventlet'
    timeout-minutes: 10
    services:
      mysql:
        image: mysql:5.7
        env: { MYSQL_ALLOW_EMPTY_PASSWORD: yes }
        ports: ["3306:3306"]
        options: --health-cmd="mysqladmin ping" --health-timeout=5s --health-retries=5 --health-interval=5s
      postgres:
        image: postgres:13
        env: { POSTGRES_PASSWORD: "secret" }
        ports: ["5432:5432"]
        options: --health-cmd pg_isready --health-timeout 5s --health-retries 5 --health-interval 5s
    env:
      EVENTLET_DB_TEST_AUTH: '{"psycopg2": {"host": "127.0.0.1", "port": 5432, "user": "postgres", "password": "secret"}, "MySQLdb": {"host": "127.0.0.1", "port": 3306, "passwd": "", "user": "root"}}'
    strategy:
      fail-fast: false
      matrix:
        include:
          - { py: 2.7, toxenv: py27-epolls, ignore-error: true, os: ubuntu-latest }
          - { py: 3.5, toxenv: py35-epolls, ignore-error: true, os: ubuntu-20.04 }
          - { py: 3.6, toxenv: py36-epolls, ignore-error: true, os: ubuntu-20.04 }
          - { py: 3.7, toxenv: py37-epolls, ignore-error: false, os: ubuntu-latest }
          - { py: 3.7, toxenv: py37-poll, ignore-error: false, os: ubuntu-latest }
          - { py: 3.7, toxenv: py37-selects, ignore-error: false, os: ubuntu-latest }
          - { py: 3.8, toxenv: py38-epolls, ignore-error: false, os: ubuntu-latest }
          - { py: 3.8, toxenv: py38-openssl, ignore-error: false, os: ubuntu-latest }
          - { py: 3.8, toxenv: py38-poll, ignore-error: false, os: ubuntu-latest }
          - { py: 3.8, toxenv: py38-selects, ignore-error: false, os: ubuntu-latest }
          - { py: 3.9, toxenv: py39-epolls, ignore-error: false, os: ubuntu-latest }
          - { py: 3.9, toxenv: py39-poll, ignore-error: false, os: ubuntu-latest }
          - { py: 3.9, toxenv: py39-selects, ignore-error: false, os: ubuntu-latest }
          - { py: 3.9, toxenv: py39-dnspython1, ignore-error: false, os: ubuntu-latest }
          - { py: "3.10", toxenv: py310-epolls, ignore-error: false, os: ubuntu-latest }
          - { py: "3.10", toxenv: py310-poll, ignore-error: false, os: ubuntu-latest }
          - { py: "3.10", toxenv: py310-selects, ignore-error: false, os: ubuntu-latest }
          - { py: "3.10", toxenv: ipv6, ignore-error: false, os: ubuntu-latest }
          - { py: pypy2.7, toxenv: pypy2-epolls, ignore-error: true, os: ubuntu-20.04 }
          - { py: pypy3.9, toxenv: pypy3-epolls, ignore-error: true, os: ubuntu-20.04 }

    steps:
      - name: install system packages
        run: sudo apt install -y --no-install-recommends ccache libffi-dev default-libmysqlclient-dev libpq-dev libssl-dev libzmq3-dev
      - uses: actions/checkout@v3

      - name: cache pip
        uses: actions/cache@v3
        with:
          path: ~/.cache/pip
          key: ${{ runner.os }}-pip-${{ matrix.toxenv }}-${{ hashFiles('.github/workflows/test.yaml', 'setup.py') }}
          restore-keys: |
            ${{ runner.os }}-pip-
            ${{ runner.os }}-
      - name: cache tox
        uses: actions/cache@v3
        with:
          path: .tox
          key: ${{ runner.os }}-tox-${{ matrix.toxenv }}-${{ hashFiles('tox.ini') }}
          restore-keys: |
            ${{ runner.os }}-tox-
            ${{ runner.os }}-

      - name: setup python ${{ matrix.py }}
        uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.py }}
      - name: install codecov, tox
        run: pip install codecov tox
      - run: env
      - name: run tests
        run: tox --verbose --verbose -e ${{ matrix.toxenv }}
      - name: codecov
        run: codecov --flags=$(echo ${{ matrix.toxenv }} |tr -d -- '-.')