forked from Scaffold-Stark/scaffold-stark-2
-
Notifications
You must be signed in to change notification settings - Fork 28
157 lines (127 loc) · 5.19 KB
/
Copy pathmain.yml
File metadata and controls
157 lines (127 loc) · 5.19 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: Next.js CI
on:
push:
paths:
- "packages/snfoundry/contracts/**"
- "packages/nextjs/**"
- "yarn.lock"
- "package.json"
- ".tool-versions"
pull_request:
branches:
- main
- develop
paths:
- "packages/nextjs/**"
- "packages/snfoundry/**"
- "yarn.lock"
- "package.json"
- ".tool-versions"
- ".github/workflows/**"
permissions:
contents: read
jobs:
ci:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest]
node: [lts/*]
steps:
- name: Checkout
uses: actions/checkout@master
- name: Check starknet-foundry version sync
run: |
TOOL_VER=$(grep 'starknet-foundry' .tool-versions | awk '{print $2}' | tr -d '\r')
if [ ! -f "packages/snfoundry/contracts/Scarb.lock" ]; then
echo "Error: Scarb.lock not found. Cannot determine resolved snforge_std version."
exit 1
fi
SCARB_VER=$(awk '/name = "snforge_std"/{f=1} f && /^version = /{gsub(/"/,"",$3); print $3; exit}' packages/snfoundry/contracts/Scarb.lock | tr -d '\r')
if [ -z "$SCARB_VER" ]; then
echo "Error: snforge_std not found in Scarb.lock. Cannot determine resolved version."
exit 1
fi
echo "starknet-foundry in .tool-versions: $TOOL_VER"
echo "snforge_std in Scarb.lock: $SCARB_VER"
if [ "$TOOL_VER" != "$SCARB_VER" ]; then
echo "Error: Version mismatch! .tool-versions has starknet-foundry $TOOL_VER but Scarb.lock resolved snforge_std $SCARB_VER"
exit 1
fi
- name: Check README versions sync
run: |
SCARB_VER=$(grep 'scarb' .tool-versions | awk '{print $2}' | tr -d '\r')
SNFORGE_VER=$(grep 'starknet-foundry' .tool-versions | awk '{print $2}' | tr -d '\r')
DEVNET_VER=$(grep 'starknet-devnet' .tool-versions | awk '{print $2}' | tr -d '\r')
COMPAT_BLOCK=$(awk '/^#+ Compatible versions/{flag=1; print; next} /^#+ /{if(flag) flag=0} flag' README.md)
if [ -z "$COMPAT_BLOCK" ]; then
echo "::notice::No 'Compatible versions' heading found in README.md — skipping README version sync assertions."
exit 0
fi
if ! echo "$COMPAT_BLOCK" | grep -q "\- Scarb - v$SCARB_VER"; then
echo "Error: README.md 'Compatible versions' block does not have '- Scarb - v$SCARB_VER'"
exit 1
fi
if ! echo "$COMPAT_BLOCK" | grep -q "\- Snforge - v$SNFORGE_VER"; then
echo "Error: README.md 'Compatible versions' block does not have '- Snforge - v$SNFORGE_VER'"
exit 1
fi
if ! echo "$COMPAT_BLOCK" | grep -q "\- Starknet-devnet - v$DEVNET_VER"; then
echo "Error: README.md 'Compatible versions' block does not have '- Starknet-devnet - v$DEVNET_VER'"
exit 1
fi
- name: Setup node env
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node }}
cache: "yarn"
- name: Install dependencies (Next.js)
run: yarn install --immutable
working-directory: ./packages/nextjs
- name: Install scarb
uses: software-mansion/setup-scarb@v1
with:
tool-versions: ./.tool-versions
scarb-lock: ./packages/snfoundry/contracts/Scarb.lock
- name: Check README Cairo version sync
run: |
CAIRO_VER=$(scarb --version | awk '/^cairo:/{print $2}' | tr -d '\r')
COMPAT_BLOCK=$(awk '/^#+ Compatible versions/{flag=1; print; next} /^#+ /{if(flag) flag=0} flag' README.md)
if [ -z "$COMPAT_BLOCK" ]; then
echo "::notice::No 'Compatible versions' heading found in README.md — skipping README Cairo version sync assertion."
exit 0
fi
if ! echo "$COMPAT_BLOCK" | grep -q "\- Cairo - v$CAIRO_VER"; then
echo "Error: README.md 'Compatible versions' block does not have '- Cairo - v$CAIRO_VER'"
exit 1
fi
- name: Install snfoundryup
uses: foundry-rs/setup-snfoundry@v3
with:
tool-versions: ./.tool-versions
- name: Build Contracts
run: yarn compile
- name: Run smart contract tests
run: |
set -o pipefail
yarn test 2>&1 | tee test_output.log
TEST_EXIT=${PIPESTATUS[0]}
if grep -i "snforge_std" test_output.log | grep -iq "version requirement"; then
echo "Error: snforge_std version mismatch warning detected by snforge!"
exit 1
fi
exit $TEST_EXIT
- name: Check Code Format
run: yarn format:check
- name: Run Next.js lint
run: yarn next:lint --max-warnings=0
working-directory: ./packages/nextjs
- name: Check typings on Next.js
run: yarn next:check-types
working-directory: ./packages/nextjs
- name: Run Next.js tests
run: yarn test
working-directory: ./packages/nextjs
- name: Build Next.js project
run: yarn build
working-directory: ./packages/nextjs