Merge branch 'base-challenge-template' into challenge-2-token-vendor #749
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |