forked from Deep-MI/FastSurfer
-
Notifications
You must be signed in to change notification settings - Fork 0
154 lines (145 loc) · 5.33 KB
/
quicktest_runner.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: quicktest-runner
# File: quicktest_runner.yaml
# Author: Taha Abdullah
# Created on: 2023-07-10
# Functionality: This workflow runs FastSurfer on MRI data and runs pytest to check if the results are acceptable. It
# also checks if the FastSurfer environment and output already exist, and if not, it creates them.
# Usage: This workflow is triggered on a pull request to the dev and main branch. It can also be triggered manually
# with workflow-dispatch.
# Expected/Used Environment Variables:
# - MAMBAPATH: Path to the micromamba binary.
# - MAMBAROOT: Root path for micromamba.
# - RUNNER_FS_OUTPUT: Path to the directory where FastSurfer output is stored.
# - RUNNER_FS_MRI_DATA: Path to the directory where MRI data is stored.
# - FREESURFER_HOME: Path to the freesurfer directory.
# - FS_LICENSE: Path to the FreeSurfer license file.
on:
pull_request:
branches:
- dev
- stable
workflow_dispatch:
jobs:
# Checkout repo
checkout:
runs-on: self-hosted
steps:
- uses: actions/checkout@v2
# Check if fastsurfer output already exists, if so, skip run-fastsurfer and run pytest directly
check-output:
runs-on: self-hosted
needs: checkout
steps:
- name: Check FastSurfer Output Directory
run: |
if [ -d "$RUNNER_FS_OUTPUT/subject1" ]; then
echo "FastSurfer output directory for subject1 exists. Finishing job..."
echo "HAS_FASTSURFER=false" >> $GITHUB_OUTPUT
exit 0
else
echo "FastSurfer output directory for subject1 does not exist. Running FastSurfer..."
echo "HAS_FASTSURFER=true" >> $GITHUB_OUTPUT
exit 1
fi
id: check-fastsurfer-output
# Create conda environment, install packages, and run Fastsurfer
run-fastsurfer:
runs-on: self-hosted
if: ${{ always() && contains(join(needs.*.result, ','), 'failure') }}
needs: check-output
steps:
# Check if the Environment Variables used in further steps are present
- name: Check Environment Variables
run: |
REQUIRED_ENV_VARS=(
"MAMBAPATH"
"MAMBAROOT"
"RUNNER_FS_OUTPUT"
"RUNNER_FS_MRI_DATA"
"FREESURFER_HOME"
"FS_LICENSE"
)
for VAR_NAME in "${REQUIRED_ENV_VARS[@]}"; do
if [ -z "${!VAR_NAME}" ]; then
echo "Error: Required environment variable $VAR_NAME is not set"
exit 1
fi
done
if [ ! -f "$FS_LICENSE" ]; then
echo "Error: FreeSurfer license file does not exist at $FS_LICENSE"
exit 1
fi
if [ ! -d "$FREESURFER_HOME" ]; then
echo "Error: FreeSurfer installation directory does not exist at $FREESURFER_HOME"
exit 1
fi
# Set up Python using setup-python@v3 action
- name: Set up Python 3.10
uses: actions/setup-python@v3
with:
python-version: "3.10"
# Check if FastSurfer environment already exists
- name: Check Environment
run: |
if [ ! -f "$MAMBAPATH" ]; then
echo "FastSurfer environment does not exist. Creating FastSurfer Environment..."
echo "HAS_MAMBA=true" >> $GITHUB_OUTPUT
else
echo "FastSurfer environment exists. Skipping FastSurfer Environment creation..."
echo "HAS_MAMBA=false" >> $GITHUB_OUTPUT
fi
id: check-environment
# Create FastSurfer environment if it does not exist
- name: Create FastSurfer Environment
uses: mamba-org/setup-micromamba@v1
with:
environment-file: env/fastsurfer.yml
micromamba-root-path: $MAMBAROOT
micromamba-binary-path: $MAMBAPATH
cache-downloads: true
cache-environment: true
init-shell: none
if: steps.check-environment.outputs.HAS_MAMBA == 'true'
# Set up cache for python packages
- name: Cache Python packages
uses: actions/cache@v3
with:
path: /home/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
# Install required python packages
- name: Install package
run: |
python -m pip install --progress-bar off --upgrade pip \
setuptools wheel
python -m pip install --progress-bar off .[test]
# Run fastsurfer on list of subjects
- name: Run FastSurfer
run: |
echo "Running FastSurfer..."
export FREESURFER_HOME=/freesurfer
source $FREESURFER_HOME/SetUpFreeSurfer.sh
export FASTSURFER_HOME=$(pwd)
./brun_fastsurfer.sh --subject_list $RUNNER_FS_MRI_DATA/subjects_list.txt \
--sd $RUNNER_FS_OUTPUT \
--parallel --threads 4 --3T --parallel_subjects surf
# Test fastsurfer output
run-pytest:
runs-on: self-hosted
if: ${{ always() && contains(join(needs.*.result, ','), 'success') }}
needs: [check-output, run-fastsurfer]
steps:
- name: Set up Python 3.10
uses: actions/setup-python@v3
with:
python-version: "3.10"
- name: Cache Python packages
uses: actions/cache@v3
with:
path: /home/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Run pytest
run: python -m pytest test/quick_test