-
Notifications
You must be signed in to change notification settings - Fork 5
153 lines (148 loc) · 5.01 KB
/
test-python.yml
File metadata and controls
153 lines (148 loc) · 5.01 KB
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
name: Test Python Library
on:
workflow_call:
inputs:
python-version:
type: string
required: true
description: 'Python version to use, e.g., "3.9"'
use-uv:
type: boolean
default: false
description: 'Use `uv` for minimum version resolution'
coverage:
type: boolean
default: false
description: 'Generate coverage report'
jobs:
check:
runs-on: ubuntu-22.04
services:
postgres:
image: postgis/postgis
env:
POSTGRES_USER: geoengine
POSTGRES_PASSWORD: geoengine
POSTGRES_DB: geoengine
ports:
- 5432:5432
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
defaults:
run:
working-directory: library
steps:
- name: Checkout library code
uses: actions/checkout@v4
with:
path: library
- name: Setup variables
id: vars
run: |
echo "GEOENGINE_VERSION=$(cat .github/.backend_git_ref)" >> $GITHUB_OUTPUT
if ${{ inputs.use-uv }}; then
echo "PIP_INSTALL=uv pip install --resolution=lowest-direct" >> $GITHUB_OUTPUT
echo "VENV_CALL=source .venv/bin/activate" >> $GITHUB_OUTPUT
else
echo "PIP_INSTALL=pip install" >> $GITHUB_OUTPUT
echo "VENV_CALL=" >> $GITHUB_OUTPUT
fi
if ${{ inputs.coverage }}; then
echo "COVERAGE_COMMAND=--cov=geoengine --cov-report=lcov" >> $GITHUB_OUTPUT
else
echo "COVERAGE_COMMAND=" >> $GITHUB_OUTPUT
fi
- name: Checkout Geo Engine code
uses: actions/checkout@v4
with:
repository: geo-engine/geoengine
ref: ${{ steps.vars.outputs.GEOENGINE_VERSION }}
path: backend
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
with:
tool-cache: true
android: true
dotnet: true
haskell: true
large-packages: true
docker-images: true
swap-storage: true
- name: Install lld & GDAL & Protobuf
run: |
sudo apt-get update
sudo apt-get install lld libgdal-dev gdal-bin build-essential clang curl protobuf-compiler libgeos-dev libproj-dev
sudo apt-get clean
export C_INCLUDE_PATH=/usr/include/gdal:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/usr/include/gdal:$CPLUS_INCLUDE_PATH
sudo ldconfig
- name: Install Rustup
run: |
curl --proto '=https' --tlsv1.2 --retry 10 --retry-connrefused -fsSL "https://sh.rustup.rs" | sh -s -- --profile minimal --default-toolchain none -y
echo "${CARGO_HOME:-$HOME/.cargo}/bin" >> $GITHUB_PATH
- name: Set up Python ${{ inputs.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ inputs.python-version }}
- name: Upgrade PIP
run: python -m pip install --upgrade pip
- name: Setup UV and create venv
if: ${{ inputs.use-uv }}
run: |
pip install uv
uv venv
- name: Install build dependencies
run: |
${{ steps.vars.outputs.VENV_CALL }}
${{ steps.vars.outputs.PIP_INSTALL }} -e .[dev]
- name: Check Formatting
run: |
${{ steps.vars.outputs.VENV_CALL }}
python -m pycodestyle
- name: Lint code
run: |
${{ steps.vars.outputs.VENV_CALL }}
python -m pylint geoengine
- name: Type-check code
# mypy seems buggy with uv
if: ${{ !inputs.use-uv }}
run: |
${{ steps.vars.outputs.VENV_CALL }}
python -m mypy geoengine
- name: Build
run: |
${{ steps.vars.outputs.VENV_CALL }}
python -m build .
- name: Install test dependencies
run: |
${{ steps.vars.outputs.VENV_CALL }}
${{ steps.vars.outputs.PIP_INSTALL }} -e .[test]
- name: Lint tests
run: |
${{ steps.vars.outputs.VENV_CALL }}
python -m pylint tests
- name: Type-check tests
# mypy seems buggy with uv
if: ${{ !inputs.use-uv }}
run: |
${{ steps.vars.outputs.VENV_CALL }}
python -m mypy tests
- name: Test
run: |
${{ steps.vars.outputs.VENV_CALL }}
pytest ${{ steps.vars.outputs.COVERAGE_COMMAND }}
env:
GEOENGINE_TEST_CODE_PATH: ${{ github.workspace }}/backend
GEOENGINE_TEST_BUILD_TYPE: "release"
- name: Upload coverage to Coveralls
if: ${{ inputs.coverage }}
uses: coverallsapp/github-action@v2
with:
base-path: library
- name: Examples
run: |
${{ steps.vars.outputs.VENV_CALL }}
${{ steps.vars.outputs.PIP_INSTALL }} -e .[examples]
python test_all_notebooks.py
env:
GEOENGINE_TEST_CODE_PATH: ${{ github.workspace }}/backend
GEOENGINE_TEST_BUILD_TYPE: "release"