-
Notifications
You must be signed in to change notification settings - Fork 80
233 lines (233 loc) · 7.65 KB
/
pr.yml
File metadata and controls
233 lines (233 loc) · 7.65 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
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
name: Checks
on:
pull_request:
push:
branches:
- "master"
env:
NODE_VERSION: 22.18
jobs:
# Multiple jobs depend on having EVM and SVM artifacts available, so we upload them first in separate jobs.
upload-svm-artifacts:
name: Upload SVM artifacts
runs-on: ubuntu-latest
env:
ARTIFACTS_PATHS: |
target/idl
target/types
src/svm/assets
src/svm/clients
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Cache SVM artifacts
id: svm-artifacts-cache
uses: ./.github/actions/cache-svm-artifacts
with:
type: artifacts
node_version: ${{ env.NODE_VERSION }}
- name: Generate SVM artifacts
if: steps.svm-artifacts-cache.outputs.cache-hit != 'true'
uses: ./.github/actions/generate-svm-artifacts
with:
type: artifacts
path: ${{ env.ARTIFACTS_PATHS }}
node_version: ${{ env.NODE_VERSION }}
- name: Upload SVM artifacts
uses: actions/upload-artifact@v4
with:
name: svm-artifacts-${{ runner.os }}-node-${{ env.NODE_VERSION }}
path: ${{ env.ARTIFACTS_PATHS }}
if-no-files-found: error
upload-evm-artifacts:
name: Upload EVM artifacts
runs-on: ubuntu-latest
env:
ARTIFACTS_PATHS: |
artifacts
cache
typechain
out
cache-foundry
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Cache EVM artifacts
id: evm-artifacts-cache
uses: ./.github/actions/cache-evm-artifacts
with:
node_version: ${{ env.NODE_VERSION }}
- name: Generate EVM artifacts
if: steps.evm-artifacts-cache.outputs.cache-hit != 'true'
uses: ./.github/actions/generate-evm-artifacts
with:
path: ${{ env.ARTIFACTS_PATHS }}
node_version: ${{ env.NODE_VERSION }}
- name: Upload EVM artifacts
uses: actions/upload-artifact@v4
with:
name: evm-artifacts-${{ runner.os }}-node-${{ env.NODE_VERSION }}
path: ${{ env.ARTIFACTS_PATHS }}
if-no-files-found: error
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: "Use Node ${{ env.NODE_VERSION }}"
uses: actions/setup-node@v3
with:
node-version: "${{ env.NODE_VERSION }}"
cache: yarn
- name: Install Cargo toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: nightly
profile: minimal
components: rustc, rustfmt
- name: Cache Cargo dependencies
uses: Swatinem/rust-cache@v2
- name: Install packages
run: yarn install --frozen-lockfile --ignore-optional
- name: Lint js
shell: bash
run: yarn lint-js
- name: Lint solidity
shell: bash
run: yarn lint-solidity
- name: Lint rust
shell: bash
run: yarn lint-rust
test-evm:
name: Test EVM
# Mixed leaf tests also require SVM types from assets that have been uploaded in the artifacts.
needs:
- upload-svm-artifacts
- upload-evm-artifacts
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: "Use Node ${{ env.NODE_VERSION }}"
uses: actions/setup-node@v3
with:
node-version: "${{ env.NODE_VERSION }}"
cache: yarn
- name: Install packages
run: yarn install --frozen-lockfile --ignore-optional
- name: Download SVM artifacts
uses: actions/download-artifact@v4
with:
name: svm-artifacts-${{ runner.os }}-node-${{ env.NODE_VERSION }}
- name: Download EVM artifacts
uses: actions/download-artifact@v4
with:
name: evm-artifacts-${{ runner.os }}-node-${{ env.NODE_VERSION }}
- name: Test evm-hardhat
shell: bash
run: yarn test-evm-hardhat
test-svm-verified:
name: Test verified SVM build
needs: upload-svm-artifacts
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: "Use Node ${{ env.NODE_VERSION }}"
uses: actions/setup-node@v3
with:
node-version: "${{ env.NODE_VERSION }}"
cache: yarn
- name: Install packages
run: yarn install --frozen-lockfile --ignore-optional
- name: Setup Anchor & Solana
uses: ./.github/actions/setup-solana-anchor
with:
verify_version: 0.4.3
node_version: ${{ env.NODE_VERSION }}
- name: Check which paths changed
uses: dorny/paths-filter@v3
id: filter
with:
filters: |
svm:
- 'programs/**'
- 'scripts/svm/**'
- 'src/svm/**'
- 'test/svm/**'
- name: Download SVM artifacts
uses: actions/download-artifact@v4
with:
name: svm-artifacts-${{ runner.os }}-node-${{ env.NODE_VERSION }}
# Cargo cache would only apply to dependencies that are not reused in the verified docker build, hence we need to
# manually cache the verified build binaries if the program source code has not changed.
- name: Cache verified test build binaries
id: verified-test-build-cache
uses: ./.github/actions/cache-svm-artifacts
with:
type: verified-test-binaries
node_version: ${{ env.NODE_VERSION }}
- name: Create verified build
if: steps.verified-test-build-cache.outputs.cache-hit != 'true'
env:
IS_TEST: true
run: yarn build-svm-solana-verify
- name: Archive verified test build (for caching)
if: steps.verified-test-build-cache.outputs.cache-hit != 'true'
run: tar -cf svm-verified-test-binaries.tar target/deploy
- name: Test verified SVM build
if: steps.filter.outputs.svm == 'true'
run: anchor test --skip-build
build-ts:
name: Build TypeScript
needs:
- upload-svm-artifacts
- upload-evm-artifacts
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: "Use Node ${{ env.NODE_VERSION }}"
uses: actions/setup-node@v3
with:
node-version: "${{ env.NODE_VERSION }}"
cache: yarn
- name: Install packages
run: yarn install --frozen-lockfile --ignore-optional
- name: Download SVM artifacts
uses: actions/download-artifact@v4
with:
name: svm-artifacts-${{ runner.os }}-node-${{ env.NODE_VERSION }}
- name: Download EVM artifacts
uses: actions/download-artifact@v4
with:
name: evm-artifacts-${{ runner.os }}-node-${{ env.NODE_VERSION }}
- name: Build TypeScript
run: yarn build-ts
forge:
name: Forge
needs: upload-evm-artifacts
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: "Use Node ${{ env.NODE_VERSION }}"
uses: actions/setup-node@v3
with:
node-version: "${{ env.NODE_VERSION }}"
cache: yarn
- name: Install packages
run: yarn install --frozen-lockfile --ignore-optional
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
- name: Install forge dependencies
run: forge install
- name: Inspect storage layouts
run: ./scripts/checkStorageLayout.sh
- name: Download EVM artifacts
uses: actions/download-artifact@v4
with:
name: evm-artifacts-${{ runner.os }}-node-${{ env.NODE_VERSION }}
- name: Test evm-foundry
run: yarn test-evm-foundry