1+ name : Run Medusa tests
2+
3+ on :
4+ push :
5+ paths :
6+ - " .github/workflows/medusa.yml"
7+ - " program-analysis/echidna/**/*.sol"
8+ - " program-analysis/echidna/**/*.yml"
9+ branches :
10+ - master
11+ pull_request :
12+ paths :
13+ - " .github/workflows/medusa.yml"
14+ - " program-analysis/echidna/**/*.sol"
15+ - " program-analysis/echidna/**/*.yml"
16+ schedule :
17+ # run CI every day even if no PRs/merges occur
18+ - cron : " 0 12 * * *"
19+
20+ jobs :
21+ tests :
22+ name : ${{ matrix.name }}
23+ continue-on-error : ${{ matrix.flaky == true }}
24+ runs-on : ubuntu-22.04
25+ strategy :
26+ fail-fast : false
27+ matrix :
28+ include :
29+ - name : Exercise 1
30+ workdir : program-analysis/echidna/exercises/exercise1/
31+ files : solution.sol
32+ contract : TestToken
33+ outcome : failure
34+ expected : ' echidna_test_balance:\s*failed'
35+ - name : Exercise 2
36+ workdir : program-analysis/echidna/exercises/exercise2/
37+ files : solution.sol
38+ contract : TestToken
39+ outcome : failure
40+ expected : ' echidna_no_transfer:\s*failed'
41+ - name : Exercise 3
42+ workdir : program-analysis/echidna/exercises/exercise3/
43+ files : solution.sol
44+ contract : TestToken
45+ outcome : failure
46+ expected : ' echidna_test_balance:\s*failed'
47+ - name : Exercise 4
48+ workdir : program-analysis/echidna/exercises/exercise4/
49+ files : solution.sol
50+ config : config.yaml
51+ contract : TestToken
52+ outcome : failure
53+ expected : ' transfer(address,uint256):\s*failed'
54+ - name : Exercise 5
55+ workdir : dvdefi/
56+ files : .
57+ config : naivereceiver.yaml
58+ crytic-args : --hardhat-ignore-compile
59+ contract : NaiveReceiverEchidna
60+ outcome : failure
61+ expected : ' echidna_test_contract_balance:\s*failed'
62+ - name : Exercise 6
63+ workdir : dvdefi/
64+ files : .
65+ config : unstoppable.yaml
66+ crytic-args : --hardhat-ignore-compile
67+ contract : UnstoppableEchidna
68+ outcome : failure
69+ expected : ' echidna_testFlashLoan:\s*failed'
70+ - name : Exercise 7
71+ workdir : dvdefi/
72+ files : .
73+ config : sideentrance.yaml
74+ crytic-args : --hardhat-ignore-compile
75+ contract : SideEntranceEchidna
76+ outcome : failure
77+ expected : ' testPoolBalance():\s*failed'
78+ - name : TestToken
79+ workdir : program-analysis/echidna/example/
80+ files : testtoken.sol
81+ contract : TestToken
82+ outcome : failure
83+ expected : ' echidna_balance_under_1000:\s*failed'
84+ - name : Multi
85+ workdir : program-analysis/echidna/example/
86+ files : multi.sol
87+ config : filter.yaml
88+ outcome : failure
89+ expected : ' echidna_state4:\s*failed'
90+ - name : Assert
91+ workdir : program-analysis/echidna/example/
92+ files : assert.sol
93+ config : assert.yaml
94+ outcome : failure
95+ expected : ' inc(uint256):\s*failed'
96+ - name : PopsicleBroken
97+ workdir : program-analysis/echidna/example/
98+ files : PopsicleBroken.sol
99+ solc-version : 0.8.4
100+ config : Popsicle.yaml
101+ contract : PopsicleBroken
102+ outcome : failure
103+ expected : ' totalBalanceAfterTransferIsPreserved(address,uint256):\s*failed'
104+ - name : PopsicleFixed
105+ workdir : program-analysis/echidna/example/
106+ files : PopsicleFixed.sol
107+ solc-version : 0.8.4
108+ config : Popsicle.yaml
109+ contract : PopsicleFixed
110+ outcome : success
111+ expected : ' totalBalanceAfterTransferIsPreserved(address,uint256):\s*passing'
112+ - name : TestDepositWithPermit
113+ workdir : program-analysis/echidna/example/
114+ files : TestDepositWithPermit.sol
115+ solc-version : 0.8.0
116+ config : testdeposit.yaml
117+ contract : TestDepositWithPermit
118+ outcome : success
119+ expected : ' testERC20PermitDeposit(uint256):\s*passing'
120+ - name : MultiABI
121+ workdir : program-analysis/echidna/example/
122+ files : allContracts.sol
123+ solc-version : 0.8.0
124+ config : allContracts.yaml
125+ contract : EchidnaTest
126+ outcome : failure
127+ expected : ' test_flag_is_false():\s*failed'
128+
129+ steps :
130+ - name : Checkout repository
131+ uses : actions/checkout@v4
132+
133+ - name : Checkout Damn Vulnerable DeFi solutions
134+ uses : actions/checkout@v4
135+ if : startsWith(matrix.workdir, 'dvdefi')
136+ with :
137+ repository : crytic/damn-vulnerable-defi-echidna
138+ ref : solutions
139+ path : ${{ matrix.workdir }}
140+
141+ - name : Set up Nodejs
142+ uses : actions/setup-node@v3
143+ if : startsWith(matrix.workdir, 'dvdefi')
144+ with :
145+ node-version : 16
146+
147+ - name : Install dependencies and compile
148+ if : startsWith(matrix.workdir, 'dvdefi')
149+ run : |
150+ yarn install --frozen-lockfile
151+ npx hardhat compile --force
152+ working-directory : ${{ matrix.workdir }}
153+
154+ - name : Go setup
155+ uses : actions/setup-go@v4
156+ with :
157+ go-version : " ^1.18.1"
158+
159+ - name : Install medusa
160+ run : |
161+ git clone https://github.com/crytic/medusa.git
162+ cd medusa
163+ go build -o medusa -v .
164+ go install -v .
165+ sudo cp medusa /usr/bin
166+ pip install crytic-compile
167+
168+ - name : Run Medusa for Internal ERC20 tests
169+ continue-on-error : true
170+ working-directory : ${{ matrix.workdir }}
171+ run : |
172+ medusa fuzz --compilation-target ${{ matrix.files }} --target-contracts ${{ matrix.contract }}
0 commit comments