-
Notifications
You must be signed in to change notification settings - Fork 13
184 lines (158 loc) · 6.14 KB
/
ci.yml
File metadata and controls
184 lines (158 loc) · 6.14 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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
name: CI/CD
permissions:
contents: write
on:
# Run on pushes that modify this branch or tag the repo
push:
branches:
- main
tags:
- v*.*.*
# Run on pull requests that modify this branch/file
pull_request:
branches:
- main
# Let's also run the workflow on releases
release:
types: [published]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
CI_PROJECT_DIR: ${{ github.workspace }}
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macOS-latest] # other options: windows-latest
python-version: ["3.8", "3.12"]
name: test SSAPy (${{ matrix.os }}) - python ${{ matrix.python-version }}
steps:
- uses: actions/checkout@v4
with:
submodules: 'recursive'
lfs: true
token: ${{ github.token }}
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies (Linux)
if: matrix.os == 'ubuntu-latest'
run: |
# Install dependencies
sudo apt-get update
sudo apt-get install build-essential git git-lfs python3 python3-setuptools python3-venv graphviz cmake
# Initialize and update submodules
git submodule update --init --recursive
# Install Git LFS and pull LFS objects
git lfs install
git lfs pull
# Upgrade pip and install Python dependencies
python -m pip install --upgrade pip setuptools flake8
python -m pip install -r requirements.txt
# Build and install the project
rm -rf build dist *.egg-info
python3 -m build
pip install dist/*.whl
mv ssapy ssapy_src_backup
# List installed Python packages
python -m pip list
- name: Install dependencies (MacOS)
if: matrix.os == 'macOS-latest'
run: |
# Update Homebrew; only install missing formulae (avoid tap conflicts)
brew update
brew list --formula git >/dev/null 2>&1 || brew install git
brew list --formula cmake >/dev/null 2>&1 || brew install cmake
brew list --formula git-lfs >/dev/null 2>&1 || brew install git-lfs
# Make LFS usable in this headless environment
git lfs install --skip-repo
git config --global credential.helper "" # avoid Keychain prompts
# Use the actions/setup-python toolchain consistently
python -m pip install --upgrade pip setuptools flake8
python -m pip install -r requirements.txt
PYTHON_VERSION=$(python -c "import sys; print(f'cp{sys.version_info.major}{sys.version_info.minor}')")
export ARCHFLAGS="-arch arm64"
export CMAKE_OSX_ARCHITECTURES=arm64
export CIBW_BUILD="${PYTHON_VERSION}-macosx_*"
echo "ARCHFLAGS=$ARCHFLAGS"
echo "CMAKE_OSX_ARCHITECTURES=$CMAKE_OSX_ARCHITECTURES"
echo "CIBW_BUILD=$CIBW_BUILD"
python -m pip install --upgrade cibuildwheel delocate
python -m cibuildwheel --platform macos
# Check wheel deps
find wheelhouse -name '*.whl' -exec delocate-listdeps {} \;
# Install the generated wheel into the SAME interpreter
python -m pip install wheelhouse/*.whl
# Hide source tree so imports resolve to the wheel
mv ssapy ssapy_src_backup
python -m pip list
- name: Debug build artifacts
run: |
find . -name "*_ssapy*.so"
#- name: Install dependencies (Windows)
# if: matrix.os == 'windows-latest'
# run: |
# python -m pip install --upgrade pip setuptools
# python -m pip install -r requirements.txt
# # install checked out SSAPy
# python setup.py build
# python setup.py install
# python -m pip list
#- name: Lint code
# if: matrix.os == 'ubuntu-latest' && matrix.python-version == 3.12
# run: |
# python3 --version
# flake8 --version
# flake8 ssapy/ tests/ devel/
- name: Install pytest plugins
if: matrix.os == 'ubuntu-latest'
run: |
pip install pytest pytest-cov pytest-xdist
- name: Test with pytest
if: matrix.os == 'ubuntu-latest'
run: |
# Run pytest with coverage, using all available CPUs and verbose output
pytest -v -n auto --cov-report=xml --cov=ssapy --durations=20
- name: Upload coverage reports to Codecov
if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.12'
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }} # Only needed for private repos
slug: LLNL/SSAPy # Correct slug: owner/repo
files: coverage.xml # Optional if coverage.xml is in root
flags: unittests # Optional, helps categorize
name: codecov-ubuntu-py312 # Optional, helps identify the upload
- name: Debug Python environment
run: python -c "import ssapy; print('ssapy imported successfully')"
- name: Build documentation
if: matrix.os == 'ubuntu-latest' && matrix.python-version == 3.12
run: |
pip install -r docs/requirements.txt
# python3 ${CI_PROJECT_DIR}/ssapy/update_benchmarks.py
cd docs
# Ensure necessary directories exist
mkdir -p source/modules source/_templates
rm -rf build
sphinx-build -b html source build/html
sphinx-autogen source/api.rst -t source/_templates -o source/modules
# Build the HTML docs once
make html
# Add .nojekyll for GitHub Pages
touch _build/html/.nojekyll
cd ..
- name: Deploy documentation
if: (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'release') && matrix.os == 'ubuntu-latest' && matrix.python-version == 3.12
uses: crazy-max/ghaction-github-pages@v4
with:
target_branch: gh-pages
build_dir: docs/_build/html
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
pass:
needs: [test]
runs-on: ubuntu-latest
steps:
- run: echo "All jobs passed"