forked from MultiQC/MultiQC
-
Notifications
You must be signed in to change notification settings - Fork 2
177 lines (148 loc) · 6.71 KB
/
multiqc.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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
name: "MultiQC"
on:
push:
branches:
- master
paths-ignore:
- "docs/**"
- "*.md"
pull_request:
paths-ignore:
- "docs/**"
- "*.md"
env:
# To reduce code duplication between Win and Linux jobs
core_python_dependencies: "pip setuptools beautifulsoup4"
# No need to run test variations across all Python versions
latest_python: "3.11"
jobs:
changes:
name: Check for changes
runs-on: ubuntu-latest
outputs:
single_module: ${{ steps.single_module.outputs.value }}
steps:
- uses: actions/checkout@v3
- uses: dorny/paths-filter@v2
id: filter
with:
filters: |
modules:
- "multiqc/modules/**"
base_module:
- "multiqc/modules/base_module.py"
changelog:
- "CHANGELOG.md"
all_files:
- "**"
# Set the `-m` flag if only one module has changed
- name: "Get a `-m` flag for the `multiqc` if only one module has changed"
uses: haya14busa/action-cond@v1
id: single_module
with:
cond: ${{ ! steps.filter.outputs.changes.base_module && steps.filter.outputs.changes.n_modules == 1 && (steps.filter.outputs.changes.n_files_changes == 1 || steps.filter.outputs.changes.n_files_changes == 2 && steps.filter.outputs.changes.changelog)}}
if_true: "-m ${{ steps.filter.outputs.changes.modules[0] }}"
if_false: ""
run_linux:
name: Linux - Python ${{ matrix.python-version }}
runs-on: ubuntu-20.04
needs: changes
strategy:
matrix:
python-version: ["3.6", "3.7", "3.8", "3.9", "3.10", "3.11"]
timeout-minutes: 10
steps:
- name: Check out MultiQC code
uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
# For CSP checking
- name: Install dependencies for CI tests
run: python -m pip install --upgrade ${{ env.core_python_dependencies }}
- name: Install MultiQC
run: pip install .
- name: Download test data
uses: actions/checkout@v3
with:
repository: ewels/MultiQC_TestData
path: test_data
# Run all of the tests!
- name: All modules / Custom report filename
run: multiqc ${{ needs.changes.outputs.single_module }} --lint test_data/data/modules/ --filename full_report.html
# More variations of command line flags and inputs. No need to run those across all Python versions.
- name: Special case input data
if: matrix.python-version == env.latest_python
run: multiqc ${{ needs.changes.outputs.single_module }} test_data/data --ignore test_data/data/modules/
- name: All modules / Log filename as s_name, no cleaning
if: matrix.python-version == env.latest_python
run: multiqc ${{ needs.changes.outputs.single_module }} --lint test_data/data/modules/ --fullnames --fn_as_s_name
- name: Filter out all filenames (confirm no report)
if: matrix.python-version == env.latest_python
run: |
multiqc ${{ needs.changes.outputs.single_module }} test_data/data/modules/ --filename all_ignored.html --ignore-samples '*'
if [[ -f all_ignored.html ]]; then
echo "No report should have been generated! Likely due to a module missing self.ignore_samples() or UserWarning when no matching files are found" >&2
exit 1
fi
- name: File-list input of dirs
if: matrix.python-version == env.latest_python
run: |
cd test_data
multiqc ${{ needs.changes.outputs.single_module }} --file-list data/special_cases/dir_list.txt
- name: Specific module / Force overwrite / Prepend dirnames / Name and comment / No data dir
if: matrix.python-version == env.latest_python
run: multiqc --lint test_data/data/modules/ -m fastqc -f -d -dd 1 -i "Forced Report" -b "This command has lots of options" --filename custom_fn --no-data-dir
- name: For overwrite / Flat plots / Tagged modules only / Exclude module / Ignore samples / Full names / zip data dir / config file
if: matrix.python-version == env.latest_python
run: multiqc ${{ needs.changes.outputs.single_module }} --lint test_data/data/modules/ -f --flat --tag methylation --exclude clusterflow --ignore-samples ngi --fullnames --zip-data-dir -c test/config_example.yaml
- name: Specific module / named output dir / dev template / JSON data / File list
if: matrix.python-version == env.latest_python
run: |
cd test_data
multiqc -m star -o tests/multiqc_report_dev -t default_dev -k json --file-list data/special_cases/file_list.txt
- name: Empty directory (confirm no report)
if: matrix.python-version == env.latest_python
run: |
mkdir empty_dir
multiqc -n empty empty_dir ${{ needs.changes.outputs.single_module }}
if [[ -f empty.html ]]; then
echo "Empty directory should not produce a report" >&2
exit 1
fi
- name: Test for missing CSPs
if: matrix.python-version == env.latest_python
run: python test/print_missing_csp.py --report full_report.html --whitelist CSP.txt
run_windows:
name: Windows
runs-on: windows-latest
needs: changes
timeout-minutes: 10
steps:
# Check out MultiQC code
- uses: actions/checkout@v3
# Set up Windows with C++ for numpy
- name: Visual Studio Command Prompt tool
run: cmd "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ matrix.platform-vcvars }}
# Set up Python
- name: Set up Python
uses: actions/setup-python@v3
with:
python-version: "3.11"
# Update core packages
- name: Install dependencies for CI tests
run: python -m pip install --upgrade ${{ env.core_python_dependencies }}
# Install MultiQC
- name: Install MultiQC
run: pip install .
# Fetch the MultiQC test data
# NB: Download zip file instead of git clone, as Windows complains about reserved filenames and certain characters
- name: Download test data
run: |
curl -fsSL https://github.com/ewels/MultiQC_TestData/archive/master.zip -o test_data.zip
7z x test_data.zip -y -o"test_data"
dir test_data\MultiQC_TestData-master
# Run all of the tests! Remember the BACKslash path separator!
- name: All modules / Custom report filename
run: multiqc ${{ needs.changes.outputs.single_module }} --lint test_data\MultiQC_TestData-master\data\modules\ --filename full_report.html