Skip to content
36 changes: 36 additions & 0 deletions .github/workflows/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# CI/CD Workflow

This directory contains GitHub Actions workflows for automated testing and validation.

## CI / Validation Workflow (`.github/workflows/test.yml`)

**Purpose**: Prevents regressions by running all test suites and linting on every pull request to main.

**Triggers**:

- Pull requests targeting the `main` branch

**What it does**:

1. **Setup**: Installs Rust (stable) and Node.js (v20) with dependency caching
2. **Dependency Installation**: Uses `npm install` for both backend and frontend
3. **Code Quality**: Runs linting on both backend and frontend (if configured)
4. **Backend Tests**: Runs `npm test` in `/backend` (Vitest + TypeScript)
5. **Frontend Tests**: Runs `npm test --if-present` in `/frontend` (no test framework configured yet)
6. **Smart Contract Tests**: Runs `cargo test` in `/contracts` (Rust)

**Failure Behavior**:

- Workflow fails if any test or linting step fails
- Blocks PR merge until all checks pass
- Uses `--if-present` to avoid failures when test scripts are missing

**Requirements for Contributors**:

- Ensure lint and test scripts are properly configured in `package.json`
- Tests must pass in all directories where they exist
- New dependencies should be added to respective `package.json` files
- Backend uses Vitest, frontend has no test framework configured yet
- react-hot-toast is available as a root dependency

**Note**: The workflow uses `continue-on-error: false` to ensure strict validation - any failure will prevent the PR from being merged.
68 changes: 68 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: CI / Validation

on:
pull_request:
branches: [main]

jobs:
test:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable

- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"

- name: Cache Rust dependencies
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
contracts/target
key: ${{ runner.os }}-cargo-${{ hashFiles('contracts/**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-

- name: Install backend dependencies
run: npm install
working-directory: ./backend

- name: Install frontend dependencies
run: npm install
working-directory: ./frontend

- name: Run linting (backend)
run: npm run lint --if-present
working-directory: ./backend
continue-on-error: false

- name: Run linting (frontend)
run: npm run lint --if-present
working-directory: ./frontend
continue-on-error: false

- name: Run Rust tests
run: cargo test
working-directory: ./contracts
continue-on-error: false

- name: Run backend tests
run: npm test
working-directory: ./backend
continue-on-error: false

- name: Run frontend tests
run: npm test --if-present
working-directory: ./frontend
continue-on-error: false
2 changes: 1 addition & 1 deletion backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,4 @@
"ts-node": "^10.9.2",
"typescript": "^5.9.3"
}
}
}
2 changes: 1 addition & 1 deletion backend/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,4 @@
"src/**/*",
"tests/**/*"
]
}
}
Binary file added bun.lockb
Binary file not shown.
3 changes: 2 additions & 1 deletion frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "eslint"
"lint": "eslint",
"test": "echo 'No tests configured for frontend yet' && exit 0"
},
"dependencies": {
"next": "16.1.6",
Expand Down