-
Notifications
You must be signed in to change notification settings - Fork 4
140 lines (126 loc) · 3.98 KB
/
python_pytest.yml
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
# This workflow will run pytest.
#
# There are two job sets which run in parallel:
# 1. `pytest-fast`: Run fast tests only, and fail fast so the dev knows asap if they broke something.
# 2. `pytest`: Run all tests, across multiple Python versions.
#
# Note that `pytest-fast` also skips tests that require credentials, allowing it to run on forks.
name: PyTest
on:
push:
branches:
- main
pull_request: {}
env:
AIRBYTE_ANALYTICS_ID: ${{ vars.AIRBYTE_ANALYTICS_ID }}
jobs:
pytest-fast:
name: Pytest (Fast)
runs-on: ubuntu-latest
steps:
# Common steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Poetry
uses: Gr1N/setup-poetry@v9
with:
poetry-version: "1.7.1"
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
cache: 'poetry'
- name: Install dependencies
run: poetry install --all-extras
- name: Run Pytest with Coverage (Fast Tests Only)
timeout-minutes: 60
env:
GCP_GSM_CREDENTIALS: ${{ secrets.GCP_GSM_CREDENTIALS }}
run: >
poetry run coverage run -m pytest
--durations=5 --exitfirst
-m "not slow and not requires_creds and not linting and not flaky"
- name: Run Pytest with Coverage (Flaky Tests Only)
timeout-minutes: 60
continue-on-error: true
env:
GCP_GSM_CREDENTIALS: ${{ secrets.GCP_GSM_CREDENTIALS }}
run: >
poetry run coverage run -m pytest
--durations=5 --exitfirst
-m "flaky and not slow and not requires_creds"
- name: Print Coverage Report
if: always()
run: poetry run coverage report
- name: Create Coverage Artifacts
if: always()
run: |
poetry run coverage html -d htmlcov
poetry run coverage xml -o htmlcov/coverage.xml
- name: Upload coverage to GitHub Artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: fasttest-coverage
path: htmlcov/
pytest:
name: Pytest (All, Python ${{ matrix.python-version }}, ${{ matrix.os }})
# Don't run on forks. Run on pushes to main, and on PRs that are not from forks.
if: >
(github.event_name == 'push' && github.ref == 'refs/heads/main') ||
(github.event.pull_request.head.repo.fork == false)
strategy:
matrix:
python-version: [
'3.10',
'3.11',
#'3.12', # Currently blocked by Pendulum
]
os: [
Ubuntu,
# Windows, # For now, we don't include Windows in the test matrix.
]
fail-fast: false
runs-on: "${{ matrix.os }}-latest"
env:
# Enforce UTF-8 encoding so Windows runners don't fail inside the connector code.
# TODO: See if we can fully enforce this within PyAirbyte itself.
PYTHONIOENCODING: utf-8
steps:
# Common steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Poetry
uses: Gr1N/setup-poetry@v9
with:
poetry-version: "1.7.1"
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'poetry'
- name: Install dependencies
run: poetry install --all-extras
# Job-specific step(s):
- name: Run Pytest
timeout-minutes: 60
env:
GCP_GSM_CREDENTIALS: ${{ secrets.GCP_GSM_CREDENTIALS }}
run: >
poetry run coverage run -m pytest
--durations=10
-m "not linting and not super_slow and not flaky"
- name: Print Coverage Report
if: always()
run: poetry run coverage report
- name: Create Coverage Artifacts
if: always()
run: |
poetry run coverage html -d htmlcov
poetry run coverage xml -o htmlcov/coverage.xml
- name: Upload coverage to GitHub Artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: py${{ matrix.python-version }}-${{ matrix.os }}-test-coverage
path: htmlcov/