Skip to content

feat: add Pinata integration for IPFS image and metadata uploads #29

feat: add Pinata integration for IPFS image and metadata uploads

feat: add Pinata integration for IPFS image and metadata uploads #29

Workflow file for this run

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