Repository navigation
157 lines (133 loc) · 4.72 KB
/
Copy pathcontract-ci.yml
File metadata and controls
157 lines (133 loc) · 4.72 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
name: Contract CI
on:
pull_request:
branches: [main]
paths:
- 'contracts/**'
- '.github/workflows/contract-ci.yml'
concurrency:
group: contract-ci-${{ github.head_ref || github.ref }}
cancel-in-progress: true
permissions:
contents: read
env:
CARGO_TERM_COLOR: always
jobs:
lint:
name: Format & Clippy
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
persist-credentials: false
- name: Install Rust stable toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
targets: wasm32v1-none
- name: Cache Cargo registry and build target
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
contracts/target
key: ${{ runner.os }}-cargo-lint-${{ hashFiles('contracts/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-lint-
- name: Check formatting
working-directory: contracts
run: cargo fmt --all -- --check
- name: Run Clippy
working-directory: contracts
run: cargo clippy --workspace --all-targets -- -D warnings
- name: Set up Node.js for ID validation
uses: actions/setup-node@v4
with:
node-version: '22.x'
- name: Verify contract error code uniqueness (Issue #232)
run: node scripts/ci/check-numeric-ids.mjs --contracts-only
test:
name: Contract Tests
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
persist-credentials: false
# The upgrade tests embed a fixture via contractimport! from
# target/wasm32-unknown-unknown, so that target is what the suite needs,
# not the wasm32v1-none one the deployable artifact is built for.
- name: Install Rust stable toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
- name: Cache Cargo registry and build target
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
contracts/target
key: ${{ runner.os }}-cargo-test-${{ hashFiles('contracts/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-test-
# `make test-upgrade` builds the Wasm fixtures and then runs the suite with
# registry/wasm-tests and timelock/wasm-tests enabled. A bare `cargo test`
# silently skips the real executable-swap tests, so this defers to the
# repository's own target rather than restating the command here.
- name: Run Soroban contract test suite
working-directory: contracts
run: make test-upgrade
build:
name: Optimized Wasm Build
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
persist-credentials: false
- name: Install Rust stable toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32v1-none
- name: Cache Cargo registry and build target
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
contracts/target
key: ${{ runner.os }}-cargo-build-${{ hashFiles('contracts/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-build-
# wasm32v1-none is the target Soroban SDK 22 supports; wasm32-unknown-unknown
# emits post-MVP Wasm features the host rejects on upload. The workspace
# release profile is already the optimized one: opt-level = "z", lto,
# codegen-units = 1, panic = "abort", stripped.
- name: Build optimized Soroban Wasm contract
working-directory: contracts
run: cargo build --target wasm32v1-none --release -p registry -p timelock
- name: Report Wasm size
id: size
working-directory: contracts
run: |
{
echo "| Contract | Bytes | Size |"
echo "|---|--:|--:|"
for wasm in target/wasm32v1-none/release/*.wasm; do
bytes=$(stat -c%s "$wasm")
echo "| \`$(basename "$wasm")\` | ${bytes} | $(numfmt --to=iec-i --suffix=B "${bytes}") |"
done
} > wasm-size.md
cat wasm-size.md >> "$GITHUB_STEP_SUMMARY"
cat wasm-size.md
- name: Upload Wasm contract and size report
uses: actions/upload-artifact@v4
with:
name: soroban-contract-wasm
path: |
contracts/target/wasm32v1-none/release/*.wasm
contracts/wasm-size.md
if-no-files-found: error