Skip to content

Add tests for the lock-time-limit guard #2662

Add tests for the lock-time-limit guard

Add tests for the lock-time-limit guard #2662

Workflow file for this run

name: Soroban Smart Contracts CI
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
workflow_dispatch:
concurrency:
group: soroban-ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- rust: stable
target: wasm32-unknown-unknown
test_target: no_accidental_mainnet_fixture
- rust: stable
target: wasm32-unknown-unknown
test_target: wasm_build_size_budget
steps:
- uses: actions/checkout@v4
- name: Detect contract-impacting changes
id: changes
if: github.event_name == 'pull_request'
uses: dorny/paths-filter@v3
with:
filters: |
contracts:
- 'quicklendx-contracts/**'
- name: Skip contract build for docs-only PRs
if: github.event_name == 'pull_request' && steps.changes.outputs.contracts != 'true'
run: echo "Docs-only PR detected; skipping Soroban contract build steps."
- name: Install Rust
if: github.event_name != 'pull_request' || steps.changes.outputs.contracts == 'true'
run: |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source $HOME/.cargo/env
rustup toolchain install stable --profile minimal
rustup default stable
- name: Install Rust target for Soroban
if: github.event_name != 'pull_request' || steps.changes.outputs.contracts == 'true'
run: |
source $HOME/.cargo/env
rustup target add ${{ matrix.target }}
rustup target add wasm32v1-none || true
- name: Detect optional Stellar CLI
if: github.event_name != 'pull_request' || steps.changes.outputs.contracts == 'true'
run: |
source $HOME/.cargo/env
if command -v stellar >/dev/null 2>&1; then
stellar --version
else
echo "stellar CLI not found; WASM build step will fall back to cargo."
fi
- name: Build Cargo project
if: github.event_name != 'pull_request' || steps.changes.outputs.contracts == 'true'
run: |
cd quicklendx-contracts
cargo build --target wasm32v1-none --verbose
- name: Run targeted regression test
if: github.event_name != 'pull_request' || steps.changes.outputs.contracts == 'true'
run: |
source $HOME/.cargo/env
cd quicklendx-contracts
cargo test --test ${{ matrix.test_target }} --verbose
- name: Check code quality
if: github.event_name != 'pull_request' || steps.changes.outputs.contracts == 'true'
run: |
source $HOME/.cargo/env
cd quicklendx-contracts
cargo check --lib --verbose
- name: Install wasm-opt (binaryen) for size reduction
if: github.event_name != 'pull_request' || steps.changes.outputs.contracts == 'true'
run: |
if command -v apt-get >/dev/null 2>&1; then
sudo apt-get update
sudo apt-get install -y binaryen
elif command -v brew >/dev/null 2>&1; then
brew install binaryen
else
echo "No supported package manager found for binaryen install."
exit 1
fi
wasm-opt --version
- name: Build and check WASM size budget (shell script)
if: github.event_name != 'pull_request' || steps.changes.outputs.contracts == 'true'
run: |
source $HOME/.cargo/env
quicklendx-contracts/scripts/check-wasm-size.sh
- name: Build WASM for release
if: github.event_name != 'pull_request' || steps.changes.outputs.contracts == 'true'
run: |
source $HOME/.cargo/env
cd quicklendx-contracts
cargo build --target ${{ matrix.target }} --release --verbose
- name: Run Cargo tests
if: github.event_name != 'pull_request' || steps.changes.outputs.contracts == 'true'
run: |
source $HOME/.cargo/env
cargo test --verbose
- name: Test coverage (baseline + admin gate)
if: github.event_name != 'pull_request' || steps.changes.outputs.contracts == 'true'
run: |
source $HOME/.cargo/env
cargo install cargo-llvm-cov
# TODO: restore the original 95% gate after the legacy test suite is repaired.
cargo llvm-cov --lib --fail-under-lines 50
cd quicklendx-contracts
cargo llvm-cov clean --workspace
cargo llvm-cov --lib --lcov --output-path coverage/lcov.info
bash scripts/check-admin-coverage.sh coverage/lcov.info