forked from yt-project/libyt
-
Notifications
You must be signed in to change notification settings - Fork 0
121 lines (104 loc) · 4.32 KB
/
make-build-test.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
# Test: 1. If project can build successfully with different version of Python or not.
# 2. Can the example run in serial and in parallel.
name: GNU Make Build Test
on:
# Triggers the workflow on push or pull request events but only for the master branch
push:
branches: [ main ]
paths-ignore:
- 'doc/**'
- '**.md'
pull_request:
branches: [ main ]
paths-ignore:
- 'doc/**'
- '**.md'
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
# Job name: "python-build-test"
make-build-test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12']
steps:
- name: Checkout libyt repo
uses: actions/checkout@v3
- name: Setup Python ${{ matrix.python-version }} environment
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
architecture: 'x64'
cache: 'pip'
- run: |
python -m pip install --upgrade pip
pip install -r ${{ github.workspace}}/.github/tools/requirements.txt
- name: Setup MPI environment
uses: mpi4py/setup-mpi@v1
with:
mpi: 'openmpi'
- name: Install yt, mpi4py, and yt_libyt
run: |
pip install mpi4py yt
cd ${{ github.workspace}}
cd ..
git clone --depth 1 -b libyt-dev --single-branch "https://github.com/cindytsai/yt_libyt.git" yt_libyt
cd yt_libyt
pip install .
- name: Update GitHub Environment Variables
run: |
echo "PYTHON_PATH=${{ env.pythonLocation }}" >> $GITHUB_ENV
echo "NUMPY_PATH=${{ env.pythonLocation }}/lib/python${{ matrix.python-version }}/site-packages/numpy" >> $GITHUB_ENV
echo "LIBYT_PARALLEL_INSTALL_PATH=${{ github.workspace }}/libyt_parallel" >> $GITHUB_ENV
echo "LIBYT_SERIAL_INSTALL_PATH=${{ github.workspace }}/libyt_serial" >> $GITHUB_ENV
# setup-python has python3.7m only, idk why.
# So split building libyt into two.
- name: Set PYTHON_PATH, PYTHON_VERSION, NUMPY_PATH
if: ${{ matrix.python-version == '3.7'}}
run: |
cd ${{ github.workspace}}/src
sed -i 's@$(YOUR_PYTHON_PATH)@"${{ env.PYTHON_PATH }}"@' Makefile
sed -i 's@$(YOUR_NUMPY_PATH)@"${{ env.NUMPY_PATH }}"@' Makefile
sed -i 's@$(YOUR_PYTHON_VERSION)@"${{ matrix.python-version }}m"@' Makefile
- name: Set PYTHON_PATH, PYTHON_VERSION, NUMPY_PATH
if: ${{ matrix.python-version != '3.7' }}
run: |
cd ${{ github.workspace}}/src
sed -i 's@$(YOUR_PYTHON_PATH)@"${{ env.PYTHON_PATH }}"@' Makefile
sed -i 's@$(YOUR_NUMPY_PATH)@"${{ env.NUMPY_PATH }}"@' Makefile
sed -i 's@$(YOUR_PYTHON_VERSION)@"${{ matrix.python-version }}"@' Makefile
- name: Build libyt -- Parallel (MPI)
run: |
cd ${{ github.workspace}}/src
make clean
make INSTALL_PREFIX="${{ env.LIBYT_PARALLEL_INSTALL_PATH }}" install
- name: Build libyt -- Serial (GCC)
run: |
cd ${{ github.workspace}}/src
make clean
make OPTIONS="-DSERIAL_MODE"
make INSTALL_PREFIX="${{ env.LIBYT_SERIAL_INSTALL_PATH }}" install
- name: Prepare Test
run: |
cd ${{ github.workspace}}/example
cp ${{ github.workspace}}/.github/tests/test-DataIO/DataIOTest.py .
- name: Generate Density Data for Testing
run: |
cd ${{ github.workspace}}/example
cp ${{ github.workspace}}/.github/tools/generate_density_data.cpp .
g++ -o generate_density_data generate_density_data.cpp
./generate_density_data
- name: Test Run and DataIO Test - example - Serial
run: |
cd ${{ github.workspace}}/example
make clean
make OPTIONS=-DSERIAL_MODE LIBYT_PATH="${{ env.LIBYT_SERIAL_INSTALL_PATH }}"
./example DataIOTest.py
- name: Test Run and DataIO Test - example - Parallel (MPI 3)
run: |
cd ${{ github.workspace}}/example
make clean
make LIBYT_PATH="${{ env.LIBYT_PARALLEL_INSTALL_PATH }}"
OMPI_MCA_osc=sm,pt2pt mpirun -np 3 ./example DataIOTest.py