-
Notifications
You must be signed in to change notification settings - Fork 11
154 lines (147 loc) · 5.53 KB
/
ci.yaml
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
name: CI
on:
pull_request:
push:
branches: [main]
tags: ['v*']
jobs:
mypy_expected_failure:
if: ${{ !github.event.pull_request.draft }}
runs-on: ubuntu-latest
continue-on-error: true # For now, don't worry about passing mypy because of legacy
steps:
- name: Check out repository
uses: actions/checkout@v3
- uses: ./.github/actions/setup
with:
os: "ubuntu-latest"
python-version: "3.9"
venv-id: "docs"
poetry-dependency-install-flags: "--all-extras --only 'main,dev'"
- name: mypy
run: MYPYPATH=stubs poetry run mypy src || echo "mypy failed, as expected" && exit 0
docs:
if: ${{ !github.event.pull_request.draft }}
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v3
- uses: ./.github/actions/setup
with:
os: "ubuntu-latest"
python-version: "3.9"
venv-id: "docs"
poetry-dependency-install-flags: "--all-extras --only 'main,docs'"
- name: Download MAGICC
run: |
mkdir -p bin/magicc/magicc-v7.5.3
wget -O "bin/magicc/magicc-v7.5.3.tar.gz" "${{ secrets.MAGICC_LINK_FROM_MAGICC_DOT_ORG }}"
tar -xf bin/magicc/magicc-v7.5.3.tar.gz -C bin/magicc/magicc-v7.5.3
- name: docs
run: poetry run sphinx-build -W --keep-going -T -b html docs/source docs/build
tests:
strategy:
fail-fast: false
matrix:
python-version: [ "3.9", "3.10", "3.11" ]
os: [ "ubuntu-latest", "macos-latest", "windows-latest" ]
runs-on: "${{ matrix.os }}"
defaults:
run:
# This might be needed for Windows and doesn't seem to affect unix-based systems
# so we include it. If you have better proof of whether this is needed or not,
# feel free to update.
shell: bash
steps:
- name: Check out repository
uses: actions/checkout@v3
- uses: ./.github/actions/setup
with:
os: "${{ matrix.os }}"
python-version: "${{ matrix.python-version }}"
venv-id: "tests-${{ runner.os }}"
poetry-dependency-install-flags: "--all-extras"
- name: Download MAGICC non-windows
if: runner.os != 'Windows'
run: |
mkdir -p bin/magicc/magicc-v7.5.3
wget -O "bin/magicc/magicc-v7.5.3.tar.gz" "${{ secrets.MAGICC_LINK_FROM_MAGICC_DOT_ORG }}"
tar -xf bin/magicc/magicc-v7.5.3.tar.gz -C bin/magicc/magicc-v7.5.3
- name: Run tests linux
if: runner.os == 'Linux'
env:
MAGICC_EXECUTABLE_7: bin/magicc/magicc-v7.5.3/bin/magicc
run: |
poetry run pytest -r a -v src tests --doctest-modules --cov=src --cov-report=term-missing --cov-report=xml
poetry run coverage report
- name: Run tests macOS
if: runner.os == 'macOS'
env:
MAGICC_EXECUTABLE_7: bin/magicc/magicc-v7.5.3/bin/magicc-darwin-amd64
run: |
# Locate the gfortran library. The location can change when the image is updated
GFORTRAN_LIBS=$(find /usr/local/Cellar/gcc@11 -name libgfortran.5.dylib | head -n 1 | xargs dirname)
echo $GFORTRAN_LIBS
export DYLD_LIBRARY_PATH=$GFORTRAN_LIBS:$DYLD_LIBRARY_PATH
# TODO: loosen coverage requirements if CI fails, otherwise delete this comment
poetry run pytest -r a -v src tests --doctest-modules --cov=src --cov-report=term-missing --cov-report=xml
- name: Run tests windows
if: runner.os == 'Windows'
run: |
poetry run pytest -r a -v src tests --doctest-modules --cov=src --cov-report=term-missing --cov-report=xml
- name: Upload coverage reports to Codecov (Linux only)
if: runner.os == 'Linux'
uses: codecov/codecov-action@v3
imports-without-extras:
strategy:
fail-fast: false
matrix:
os: [ "ubuntu-latest" ]
python-version: [ "3.9", "3.10", "3.11" ]
runs-on: "${{ matrix.os }}"
steps:
- name: Check out repository
uses: actions/checkout@v3
- uses: ./.github/actions/setup
with:
os: "${{ matrix.os }}"
python-version: "${{ matrix.python-version }}"
venv-id: "imports-without-extras-${{ runner.os }}"
poetry-dependency-install-flags: "--only main"
- name: Check importable without extras
run: |
poetry run python scripts/test-install.py
check-build:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v3
- uses: ./.github/actions/setup
with:
python-version: "3.9"
venv-id: "check-build-${{ runner.os }}"
run-poetry-install: false
poetry-dependency-install-flags: "not used"
- name: Build package
run: |
poetry build --no-interaction
- name: Check build
run: |
tar -tvf dist/openscm_runner-*.tar.gz --wildcards '*openscm_runner/py.typed'
check-dependency-licences:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v3
- uses: ./.github/actions/setup
with:
python-version: "3.9"
venv-id: "licence-check"
poetry-dependency-install-flags: "--all-extras"
- name: Check licences of dependencies
shell: bash
run: |
TEMP_FILE=$(mktemp)
poetry export --without=tests --without=docs --without=dev > $TEMP_FILE
poetry run liccheck -r $TEMP_FILE -R licence-check.txt
cat licence-check.txt