forked from smartbugs/oyente
-
Notifications
You must be signed in to change notification settings - Fork 2
183 lines (155 loc) Β· 5.5 KB
/
ci.yml
File metadata and controls
183 lines (155 loc) Β· 5.5 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
name: CI/CD Pipeline
on:
push:
branches: [main, master]
pull_request:
branches: [main, master]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
PYTHON_VERSION: "3.9"
CI: true
jobs:
code-quality:
name: Code Quality
runs-on: ubuntu-22.04
timeout-minutes: 10
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Set up development environment
run: ./scripts/setup-venv.sh
- name: Run code quality checks
timeout-minutes: 5
run: |
source venv/bin/activate
make format
make lint
make type-check
unit-tests:
name: Unit Tests
needs: code-quality
runs-on: ubuntu-22.04
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.10", "3.11"]
exclude:
- python-version: "3.12.0"
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Set up development environment
env:
CI_SKIP_INSTALL: true
run: ./scripts/setup-venv.sh
- name: Regenerate lock file for Python ${{ matrix.python-version }}
run: |
source venv/bin/activate
echo "π Regenerating poetry.lock for Python ${{ matrix.python-version }}"
# Remove existing lock file to ensure clean regeneration
# This is necessary because Poetry generates version-specific lock files
rm -f poetry.lock
# Generate new lock file for current Python version
poetry lock --verbose
echo "β
Lock file regenerated for Python ${{ matrix.python-version }}"
- name: Install dependencies with version-specific lock file
run: |
source venv/bin/activate
echo "π¦ Installing dependencies for Python ${{ matrix.python-version }}"
poetry install --with dev --no-interaction --verbose
echo "β
Dependencies installed for Python ${{ matrix.python-version }}"
- name: Run unit tests
timeout-minutes: 10
run: |
source venv/bin/activate
make test-unit
- name: Generate coverage report (Python 3.9 only)
if: matrix.python-version == '3.9'
run: |
source venv/bin/activate
make test-unit-cov
# Ensure coverage.xml is generated for codecov
if [ ! -f "coverage.xml" ] && [ -f "coverage-unit.xml" ]; then
cp coverage-unit.xml coverage.xml
fi
integration-tests:
name: Integration Tests
needs: unit-tests
runs-on: ubuntu-22.04
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.10", "3.11"]
exclude:
- python-version: "3.12.0"
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install system dependencies
run: |
# Install solc-select and Solidity compiler
pip install solc-select
solc-select install 0.8.19
solc-select use 0.8.19
# Verify
echo "π Verifying..."
which solc && solc --version || echo "β οΈ solc not found"
- name: Set up development environment
env:
CI_SKIP_INSTALL: true
run: ./scripts/setup-venv.sh
- name: Regenerate lock file for Python ${{ matrix.python-version }}
run: |
source venv/bin/activate
echo "π Regenerating poetry.lock for Python ${{ matrix.python-version }}"
# Remove existing lock file to ensure clean regeneration
# This is necessary because Poetry generates version-specific lock files
rm -f poetry.lock
# Generate new lock file for current Python version
poetry lock --verbose
echo "β
Lock file regenerated for Python ${{ matrix.python-version }}"
- name: Install dependencies with version-specific lock file
run: |
source venv/bin/activate
echo "π¦ Installing dependencies for Python ${{ matrix.python-version }}"
poetry install --with dev --no-interaction --verbose
echo "β
Dependencies installed for Python ${{ matrix.python-version }}"
- name: Run integration tests
timeout-minutes: 15
run: |
source venv/bin/activate
make test-integration
- name: Test sample contract analysis
run: |
source venv/bin/activate
if [ -f "samples/OpenAddressLottery.rt.hex" ]; then
echo "π§ͺ Testing with available sample contract..."
python oyente/oyente.py -s samples/OpenAddressLottery.rt.hex -b || echo "Analysis completed with expected behavior"
else
echo "β οΈ Sample contract not found, skipping manual verification"
fi