-
Notifications
You must be signed in to change notification settings - Fork 44
141 lines (136 loc) · 4.49 KB
/
pipeline.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
name: Pipeline
on:
push:
branches:
- master
- hotfix/*
tags:
- v*
pull_request:
jobs:
tests:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
python-version: ["3.12", "3.11", "3.10", "3.9", "3.8"]
config: [Release]
include:
- os: windows-latest
python-version: "3.12"
config: Debug
exclude:
- os: ubuntu-latest
python-version: "3.8"
- os: ubuntu-latest
python-version: "3.9"
- os: ubuntu-latest
python-version: "3.10"
- os: ubuntu-latest
python-version: "3.11"
- os: macos-latest
python-version: "3.8"
- os: macos-latest
python-version: "3.9"
- os: macos-latest
python-version: "3.10"
- os: macos-latest
python-version: "3.11"
runs-on: ${{ matrix.os }}
steps:
- name: Setup Git
run: |
git config --global core.autocrlf false
git config --global core.eol lf
- name: Checkout sources
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Build
env:
YARAMOD_BUILD_CONFIGURATION: ${{ matrix.config }}
YARAMOD_BUILD_WITH_UNIT_TESTS: 1
run: |
python -m pip install .
- name: Upload build directory
if: failure()
uses: actions/upload-artifact@v3
with:
name: build-${{ matrix.os }}-py${{ matrix.python-version }}-${{ matrix.config }}
path: build/
- name: C++ Tests
run: |
${{ startsWith(matrix.os, 'windows') && format('build\tests\cpp\{0}\yaramod_tests.exe', matrix.config) || 'build/tests/cpp/yaramod_tests' }}
- name: Python Tests
run: |
python -m pip install pytest mypy==0.991
pytest -v tests/python
- name: Documentation
if: ${{ startsWith(matrix.os, 'ubuntu') }}
run: |
cd docs/rtd
pip install -r requirements.txt
make clean && make html SPHINXOPTS="-W --keep-going -n"
- name: Build package
if: ${{ matrix.config == 'Release' && (startsWith(matrix.os, 'windows') || startsWith(matrix.os, 'ubuntu')) }}
run: |
pip install -U wheel setuptools
python setup.py ${{ startsWith(matrix.os, 'windows') && 'bdist_wheel' || 'sdist' }}
- name: Build manylinux binary wheel
if: ${{ matrix.config == 'Release' && startsWith(matrix.os, 'ubuntu') }}
uses: RalfG/python-wheels-manylinux-build@ff8504699f7a33a08d3ff85b3c6d4e8f0e70462b
with:
pre-build-command: "rm -rf build"
python-versions: "cp38-cp38 cp39-cp39 cp310-cp310 cp311-cp311 cp312-cp312"
- name: Upload package
if: ${{ matrix.config == 'Release' && (startsWith(matrix.os, 'windows') || startsWith(matrix.os, 'ubuntu')) }}
uses: actions/upload-artifact@v3
with:
name: package
path: |
dist/*.${{ startsWith(matrix.os, 'windows') && 'whl' || 'tar.gz' }}
dist/*-manylinux*.whl
if-no-files-found: error
retention-days: 7
asan:
runs-on: ubuntu-latest
steps:
- name: Setup Git
run: |
git config --global core.autocrlf false
git config --global core.eol lf
- name: Checkout sources
uses: actions/checkout@v4
- name: Build
run: |
mkdir -p build
cd build
cmake -DYARAMOD_TESTS=ON -DYARAMOD_ASAN=ON ..
cmake --build . -- -j
# Disable ASLR for this, see https://stackoverflow.com/questions/77894856/possible-bug-in-gcc-sanitizers
- name: Tests
run: |
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
./build/tests/cpp/yaramod_tests
release:
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
needs:
- tests
- asan
runs-on: ubuntu-latest
steps:
- name: Downloads wheels
uses: actions/download-artifact@v3
with:
name: package
path: package
- name: Setup Python
uses: actions/setup-python@v5
- name: Install twine
run: |
python -m pip install twine
- name: Upload to PyPI
run: |
twine upload --skip-existing -u __token__ -p ${{ secrets.pypi_token }} ./package/*.{whl,tar.gz}