-
Notifications
You must be signed in to change notification settings - Fork 7
155 lines (133 loc) · 5.12 KB
/
ci.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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
name: CI
on:
# Triggers the workflow on push or pull request events but only for the main branch
push:
branches: [main]
pull_request:
branches: [main]
release:
types: [published]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
CI:
runs-on: ubuntu-latest
permissions:
id-token: write
env:
PY_VERSION: "3.11"
CACHE_KEY: 1 # Use this for manual cache key bumps, e.g., when caching code changes
steps:
- uses: actions/checkout@v4
with:
path: xl2times
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PY_VERSION }}
- name: Build and install xl2times
working-directory: xl2times
run: |
python -m venv .venv
source .venv/bin/activate
pip install --upgrade pip build
pip install -e .[dev]
# Build xl2times
rm -rf dist || true
python -m build
# Install the built wheel file to imitiate users installing from PyPI:
pip uninstall --yes xl2times
pip install --find-links=dist xl2times
- name: Check code formatting
working-directory: xl2times
# Run this step after install so that pyright can find dependencies like pandas
run: |
source .venv/bin/activate
pre-commit install
pre-commit run --all-files
- name: Run unit tests
working-directory: xl2times
run: |
source .venv/bin/activate
pytest
# ---------- Setup benchmark repositories
- name: Setup benchmark repositories
working-directory: xl2times
run: |
./setup-benchmarks.sh
env:
GH_PAT_DEMOS_XLSX: ${{ secrets.GH_PAT_DEMOS_XLSX }}
- name: Convert Times-NZ to XLSX
working-directory: xl2times
run: |
sudo apt update
sudo apt install libreoffice-calc default-jre libreoffice-java-common
find benchmarks/TIMES-NZ -name "*.xls" -type f -printf "soffice --convert-to xlsx --outdir '%h' '%p'\n" | bash
# ---------- Install GAMS
- name: Install GAMS
env:
GAMS_LICENSE: ${{ secrets.GAMS_LICENSE }}
if: ${{ env.GAMS_LICENSE != '' }}
run: |
curl https://d37drm4t2jghv5.cloudfront.net/distributions/48.2.0/linux/linux_x64_64_sfx.exe -o linux_x64_64_sfx.exe
chmod +x linux_x64_64_sfx.exe
mkdir GAMS
pushd GAMS
../linux_x64_64_sfx.exe > /dev/null && echo Successfully installed GAMS
export PATH=$PATH:$(pwd)/gams48.2_linux_x64_64_sfx
popd
# ---------- Run tool, check for regressions
- name: Restore XLSX cache directory from cache
id: cache
uses: actions/cache/restore@v4
with:
path: ~/.cache/xl2times
# Cache key is manual key + python version
key: ${{ runner.os }}-${{ env.CACHE_KEY }}-py-${{ env.PY_VERSION }}
- name: Run tool on all benchmarks
env:
GAMS_LICENSE: ${{ secrets.GAMS_LICENSE }}
if: ${{ env.GAMS_LICENSE != '' }}
working-directory: xl2times
# Use tee to also save the output to out.txt so that the summary table can be
# printed again in the next step.
# Save the return code to retcode.txt so that the next step can fail the action
run: |
source .venv/bin/activate
export PATH=$PATH:$GITHUB_WORKSPACE/GAMS/gams48.2_linux_x64_64_sfx
(python utils/run_benchmarks.py benchmarks.yml \
--dd --times_dir $GITHUB_WORKSPACE/TIMES_model \
--verbose \
| tee out.txt; \
echo ${PIPESTATUS[0]} > retcode.txt)
- name: Run CSV-only regression tests (no GAMS license)
env:
GAMS_LICENSE: ${{ secrets.GAMS_LICENSE }}
if: ${{ env.GAMS_LICENSE == '' }}
working-directory: xl2times
# Run without --dd flag if GAMS license secret doesn't exist.
# Useful for testing for (CSV) regressions in forks before creating PRs.
run: |
source .venv/bin/activate
(python utils/run_benchmarks.py benchmarks.yml \
--times_dir $GITHUB_WORKSPACE/TIMES_model \
--verbose \
| tee out.txt; \
echo ${PIPESTATUS[0]} > retcode.txt)
- name: Print summary
working-directory: xl2times
run: |
sed -n '/Benchmark *Time.*Accuracy/h;//!H;$!d;x;//p' out.txt
exit $(cat retcode.txt)
- uses: actions/cache/save@v4
# Save the cache even if the regression tests fail
if: always() && !steps.cache-restore.outputs.cache-hit
with:
path: ~/.cache/xl2times
key: ${{ runner.os }}-${{ env.CACHE_KEY }}-py-${{ env.PY_VERSION }}-${{ env.REF_demos-xlsx }}-${{ env.REF_tim }}
# ---------- Upload package to PyPI on release
- name: Publish to PyPI
if: github.event_name == 'release' && github.event.action == 'published'
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: xl2times/dist/