Skip to content

Merge pull request #321 from dmystical-coder/main #280

Merge pull request #321 from dmystical-coder/main

Merge pull request #321 from dmystical-coder/main #280

Workflow file for this run

name: Soroban CI
on:
push:
paths:
- "soroban-client/**"
- "soroban-contract/**"
- ".github/workflows/**"
pull_request:
paths:
- "soroban-client/**"
- "soroban-contract/**"
- ".github/workflows/**"
jobs:
client:
name: Next.js Client CI
runs-on: ubuntu-latest
defaults:
run:
working-directory: soroban-client
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Cache node modules
uses: actions/cache@v4
with:
path: soroban-client/node_modules
key: ${{ runner.os }}-node-${{ hashFiles('soroban-client/package-lock.json', 'soroban-client/yarn.lock', 'soroban-client/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-node-
- name: Install dependencies
run: |
if [ -f package-lock.json ]; then
npm ci
elif [ -f yarn.lock ]; then
yarn install --frozen-lockfile
elif [ -f pnpm-lock.yaml ]; then
npm install -g pnpm && pnpm install --frozen-lockfile
else
npm install
fi
- name: Run linter
run: npm run lint --if-present
continue-on-error: true
- name: Build client
run: npm run build
env:
CI: true
# Add any required env vars for Next.js build
# NEXT_PUBLIC_STELLAR_NETWORK: testnet
- name: Run tests with coverage
run: npm run test:coverage -- --passWithNoTests
if: hashFiles('soroban-client/package.json') != ''
- name: Upload frontend coverage to Codecov
if: hashFiles('soroban-client/coverage/lcov.info') != ''
uses: codecov/codecov-action@v5
with:
files: soroban-client/coverage/lcov.info
flags: frontend
name: frontend-coverage
fail_ci_if_error: true
client-e2e:
name: Client E2E Tests
runs-on: ubuntu-latest
needs: [client]
defaults:
run:
working-directory: client
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Cache node modules
uses: actions/cache@v4
with:
path: client/node_modules
key: ${{ runner.os }}-node-client-${{ hashFiles('client/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-client-
- name: Install dependencies
run: npm ci
- name: Install Playwright browsers
run: npx playwright install --with-deps
- name: Run E2E tests
run: npm run test:e2e
env:
CI: true
soroban:
name: Soroban Contracts CI
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Cache Cargo registry
uses: actions/cache@v4
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-registry-
- name: Cache Cargo index
uses: actions/cache@v4
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-index-
- name: Cache target directory
uses: actions/cache@v4
with:
path: soroban-contract/target
key: ${{ runner.os }}-target-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-target-
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
components: llvm-tools-preview
- name: Install cargo-llvm-cov
uses: taiki-e/install-action@cargo-llvm-cov
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y libdbus-1-dev pkg-config libudev-dev
- name: Install Soroban CLI
run: |
cargo install --locked soroban-cli --features opt || \
cargo install --locked soroban-cli
- name: Check contract formatting
working-directory: soroban-contract
run: cargo fmt --all -- --check
- name: Build contracts
working-directory: soroban-contract
run: |
cargo build --release --target wasm32-unknown-unknown -p ticket_nft
cargo build --release --target wasm32-unknown-unknown -p tba_account
cargo build --release --target wasm32-unknown-unknown
- name: Run contract tests
working-directory: soroban-contract
run: cargo test --workspace --all-targets
- name: Optimize contracts
working-directory: soroban-contract
run: soroban contract optimize --wasm target/wasm32-unknown-unknown/release/*.wasm
- name: Run clippy
working-directory: soroban-contract
run: cargo clippy --all-targets -- -D warnings
- name: Run contract tests with coverage
working-directory: soroban-contract
run: cargo llvm-cov --workspace --lcov --output-path coverage/lcov.info --fail-under-lines 70
- name: Upload Rust coverage to Codecov
if: hashFiles('soroban-contract/coverage/lcov.info') != ''
uses: codecov/codecov-action@v5
with:
files: soroban-contract/coverage/lcov.info
flags: rust
name: rust-coverage
fail_ci_if_error: true
integration:
name: Integration Tests
runs-on: ubuntu-latest
needs: [client, soroban]
if: github.event_name == 'pull_request'
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y libdbus-1-dev pkg-config
- name: Install Soroban CLI
run: cargo install --locked soroban-cli
- name: Install client dependencies
working-directory: soroban-client
run: npm ci 2>/dev/null || npm install
- name: Build contracts
working-directory: soroban-contract
run: cargo build --release --target wasm32-unknown-unknown
- name: Run integration tests
working-directory: soroban-client
run: npm run test:integration --if-present
continue-on-error: true