Update README.md #25
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: CI/CD Pipeline | |
| on: | |
| push: | |
| branches: [main, develop] | |
| pull_request: | |
| branches: [main] | |
| jobs: | |
| # Job 1: Test & Quality Assurance (Fast checks) | |
| test-and-lint: | |
| name: Test, Lint & Quality Check | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Run ESLint | |
| run: npm run lint | |
| - name: Run TypeScript check | |
| run: npx tsc --noEmit | |
| - name: Install Playwright browsers | |
| run: npx playwright install --with-deps | |
| - name: Run E2E Tests | |
| run: npm run test:e2e | |
| - name: Setup Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: wasm32-unknown-unknown, wasm32v1-none | |
| - name: Cache Rust dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| workspaces: contracts | |
| - name: Run Contract Tests | |
| working-directory: contracts | |
| run: cargo test --all | |
| # Job 2: Build App & Contracts (Artifact generation) | |
| build: | |
| name: Build Application & Contracts | |
| runs-on: ubuntu-latest | |
| needs: test-and-lint | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Build Next.js App | |
| run: npm run build | |
| - name: Upload Next.js Build | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: nextjs-build | |
| path: .next/ | |
| retention-days: 5 | |
| - name: Setup Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: wasm32-unknown-unknown, wasm32v1-none | |
| - name: Cache Rust dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| workspaces: contracts | |
| - name: Build NFT Certificate Contract (wasm32v1-none) | |
| working-directory: contracts | |
| run: cargo build --target wasm32v1-none --release -p nft_certificate | |
| - name: Build Verifier Contract (wasm32v1-none) | |
| working-directory: contracts | |
| run: cargo build --target wasm32v1-none --release -p verifier | |
| - name: Upload Contract Artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: contract-builds | |
| path: contracts/target/wasm32v1-none/release/*.wasm | |
| retention-days: 5 | |
| # Job 3: Smart Contract Validation | |
| contract-validation: | |
| name: Validate Smart Contracts | |
| runs-on: ubuntu-latest | |
| needs: test-and-lint | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: wasm32-unknown-unknown, wasm32v1-none | |
| - name: Cache Rust dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| workspaces: contracts | |
| - name: Check Contract Format (wasm32-unknown-unknown) | |
| working-directory: contracts | |
| run: cargo build --target wasm32-unknown-unknown --release -p nft_certificate 2>&1 | tee check.log || echo "Expected check - reference types not enabled" | |
| - name: Lint Contracts (Clippy) | |
| working-directory: contracts | |
| run: cargo clippy --target wasm32v1-none --release --lib -- -D warnings | |
| - name: Check Contract Documentation | |
| working-directory: contracts | |
| run: cargo doc --target wasm32v1-none --release --no-deps |