Update fee table #24637
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: Test | |
| on: [push, pull_request] | |
| # Cancel any in-progress job or run | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| FOUNDRY_PROFILE: ci | |
| NODE_VERSION: '22' | |
| # Set default permissions as restrictive as possible | |
| permissions: | |
| actions: write # Required for upload-artifact | |
| contents: read # Required for checkout and other read operations | |
| checks: write # Required for test results | |
| jobs: | |
| # Detect which file groups changed so downstream jobs can skip themselves | |
| changes: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| solidity: ${{ steps.filter.outputs.solidity }} | |
| typescript: ${{ steps.filter.outputs.typescript }} | |
| content: ${{ steps.filter.outputs.content }} | |
| any_non_solidity: ${{ steps.filter.outputs.any_non_solidity }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 | |
| id: filter | |
| with: | |
| filters: | | |
| solidity: | |
| - 'public/samples/**/*.sol' | |
| - 'foundry.toml' | |
| typescript: | |
| - '**/*.ts' | |
| - '**/*.tsx' | |
| - '**/*.astro' | |
| - 'tsconfig*.json' | |
| content: | |
| - 'src/content/**' | |
| - 'src/components/**' | |
| - 'src/pages/**' | |
| - 'src/layouts/**' | |
| - 'astro.config.*' | |
| any_non_solidity: | |
| - '**' | |
| - '!public/samples/**/*.sol' | |
| - '!foundry.toml' | |
| # Setup job to install and cache dependencies | |
| setup: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repo | |
| uses: actions/checkout@v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: 'npm' | |
| cache-dependency-path: '**/package-lock.json' | |
| - name: Cache node_modules | |
| uses: actions/cache@v4 | |
| id: cache-node-modules | |
| continue-on-error: true | |
| with: | |
| path: node_modules | |
| key: ${{ runner.os }}-node-modules-${{ hashFiles('**/package-lock.json') }} | |
| - name: Install Dependencies | |
| if: steps.cache-node-modules.outputs.cache-hit != 'true' | |
| run: | | |
| echo "Cache miss, installing dependencies..." | |
| npm ci --prefer-offline --no-audit | |
| # Job 1: Check Solidity Compilation and Solhint | |
| solidity: | |
| needs: [setup, changes] | |
| if: needs.changes.outputs.solidity == 'true' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repo | |
| uses: actions/checkout@v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: 'npm' | |
| cache-dependency-path: '**/package-lock.json' | |
| - name: Install Foundry | |
| uses: foundry-rs/foundry-toolchain@8789b3e21e6c11b2697f5eb56eddae542f746c10 # v1.5 | |
| with: | |
| version: stable | |
| cache: false | |
| - name: Show Forge version | |
| run: forge --version | |
| - name: Restore node_modules | |
| uses: actions/cache/restore@v4 | |
| continue-on-error: true | |
| with: | |
| path: node_modules | |
| key: ${{ runner.os }}-node-modules-${{ hashFiles('**/package-lock.json') }} | |
| - name: Ensure Dependencies | |
| run: | | |
| if [ ! -d "node_modules" ]; then | |
| echo "node_modules not found, installing dependencies..." | |
| npm ci --prefer-offline --no-audit | |
| fi | |
| - name: Check Solidity Formatting | |
| run: npm run sol:fmt:check | |
| - name: Check Solidity Compilation | |
| run: npm run sol:compile | |
| - name: Check Solidity Linting | |
| run: npm run lint-solc | |
| # Job 2: Check ESLint | |
| eslint: | |
| needs: [setup, changes] | |
| if: needs.changes.outputs.any_non_solidity == 'true' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repo | |
| uses: actions/checkout@v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: 'npm' | |
| cache-dependency-path: '**/package-lock.json' | |
| - name: Restore node_modules | |
| uses: actions/cache/restore@v4 | |
| continue-on-error: true | |
| with: | |
| path: node_modules | |
| key: ${{ runner.os }}-node-modules-${{ hashFiles('**/package-lock.json') }} | |
| - name: Ensure Dependencies | |
| run: | | |
| if [ ! -d "node_modules" ]; then | |
| echo "node_modules not found, installing dependencies..." | |
| npm ci --prefer-offline --no-audit | |
| fi | |
| - name: Check ESLint | |
| run: | | |
| echo "Running ESLint with cache..." | |
| npm run lint -- --cache --cache-strategy content | |
| - name: Check Formatting | |
| run: | | |
| echo "Running Prettier with cache..." | |
| npm run format:check -- --cache | |
| # Job 3: Check Internal Links | |
| linkcheck-internal: | |
| needs: [setup, changes] | |
| if: needs.changes.outputs.content == 'true' | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout Repo | |
| uses: actions/checkout@v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: 'npm' | |
| cache-dependency-path: '**/package-lock.json' | |
| - name: Restore node_modules | |
| uses: actions/cache/restore@v4 | |
| continue-on-error: true | |
| with: | |
| path: node_modules | |
| key: ${{ runner.os }}-node-modules-${{ hashFiles('**/package-lock.json') }} | |
| - name: Ensure Dependencies | |
| run: | | |
| if [ ! -d "node_modules" ]; then | |
| echo "node_modules not found, installing dependencies..." | |
| npm ci --prefer-offline --no-audit | |
| fi | |
| - name: Build Site | |
| run: npm run build | |
| env: | |
| NODE_OPTIONS: '--max-old-space-size=8192' | |
| - name: Check Internal Links | |
| uses: lycheeverse/lychee-action@8646ba30535128ac92d33dfc9133794bfdd9b411 # v2.8.0 | |
| with: | |
| args: >- | |
| --root-dir $GITHUB_WORKSPACE/.vercel/output/static | |
| --config lychee.toml | |
| '.vercel/output/static/**/*.html' | |
| fail: true | |
| format: markdown | |
| jobSummary: true | |
| # Job 4: Check Types | |
| typecheck: | |
| needs: [setup, changes] | |
| if: needs.changes.outputs.typescript == 'true' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repo | |
| uses: actions/checkout@v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: 'npm' | |
| cache-dependency-path: '**/package-lock.json' | |
| - name: Restore node_modules | |
| uses: actions/cache/restore@v4 | |
| continue-on-error: true | |
| with: | |
| path: node_modules | |
| key: ${{ runner.os }}-node-modules-${{ hashFiles('**/package-lock.json') }} | |
| - name: Ensure Dependencies | |
| run: | | |
| if [ ! -d "node_modules" ]; then | |
| echo "node_modules not found, installing dependencies..." | |
| npm ci --prefer-offline --no-audit | |
| fi | |
| - name: Generate Astro types | |
| run: | | |
| echo "Generating Astro types..." | |
| npm run astro sync | |
| - name: Check Types | |
| run: | | |
| echo "Running type check..." | |
| npm run typecheck | |
| # Job 5: Run Jest Tests | |
| jest: | |
| needs: [setup, changes] | |
| if: needs.changes.outputs.typescript == 'true' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repo | |
| uses: actions/checkout@v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: 'npm' | |
| cache-dependency-path: '**/package-lock.json' | |
| - name: Restore node_modules | |
| uses: actions/cache/restore@v4 | |
| continue-on-error: true | |
| with: | |
| path: node_modules | |
| key: ${{ runner.os }}-node-modules-${{ hashFiles('**/package-lock.json') }} | |
| - name: Ensure Dependencies | |
| run: | | |
| if [ ! -d "node_modules" ]; then | |
| echo "node_modules not found, installing dependencies..." | |
| npm ci --prefer-offline --no-audit | |
| fi | |
| - name: Run Jest Tests | |
| run: npm test -- --coverage | |
| - name: Upload Test Coverage | |
| if: always() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: coverage-report-node-${{ env.NODE_VERSION }} | |
| path: coverage/ | |
| retention-days: 30 | |
| # Job 6: Validate LLM files are present and well-formed | |
| validate-llms: | |
| needs: [setup, changes] | |
| if: needs.changes.outputs.content == 'true' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repo | |
| uses: actions/checkout@v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: 'npm' | |
| cache-dependency-path: '**/package-lock.json' | |
| - name: Restore node_modules | |
| uses: actions/cache/restore@v4 | |
| continue-on-error: true | |
| with: | |
| path: node_modules | |
| key: ${{ runner.os }}-node-modules-${{ hashFiles('**/package-lock.json') }} | |
| - name: Ensure Dependencies | |
| run: | | |
| if [ ! -d "node_modules" ]; then | |
| echo "node_modules not found, installing dependencies..." | |
| npm ci --prefer-offline --no-audit | |
| fi | |
| - name: Validate LLM files | |
| run: npm run check:llms |