Add TypeScript unit test suite for the Push3 transpiler using Node's built-in test runner (node:test) with tsx. 47 tests across 12 suites covering parser, stack underflow/overflow, EXEC.IF balanced/unbalanced/ nested branching, arithmetic, boolean ops, name binding, and integration. Update CI to run `npm test` (which now includes unit tests + existing bash tests) and scope transpiler-tests step to only trigger on changes to tools/push3-transpiler/**. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
158 lines
4.5 KiB
YAML
158 lines
4.5 KiB
YAML
kind: pipeline
|
|
type: docker
|
|
name: build-and-test
|
|
|
|
when:
|
|
event: pull_request
|
|
path:
|
|
exclude:
|
|
- "formulas/**"
|
|
- "evidence/**"
|
|
- "docs/**"
|
|
- "*.md"
|
|
|
|
clone:
|
|
git:
|
|
image: woodpeckerci/plugin-git
|
|
settings:
|
|
depth: 50
|
|
reference: /git-mirrors/harb.git
|
|
netrc_machine: codeberg.org
|
|
netrc_username: johba
|
|
netrc_password:
|
|
from_secret: codeberg_token
|
|
|
|
steps:
|
|
- name: bootstrap-deps
|
|
image: registry.niovi.voyage/harb/node-ci:latest
|
|
commands:
|
|
- |
|
|
bash -c '
|
|
set -euo pipefail
|
|
git submodule update --init --recursive
|
|
yarn --cwd onchain/lib/uni-v3-lib install --frozen-lockfile
|
|
'
|
|
|
|
- name: foundry-suite
|
|
image: registry.niovi.voyage/harb/node-ci:latest
|
|
commands:
|
|
- |
|
|
bash -c '
|
|
set -euo pipefail
|
|
cd onchain
|
|
export PATH=/root/.foundry/bin:$PATH
|
|
forge --version
|
|
forge build
|
|
forge test -vvv
|
|
forge snapshot
|
|
'
|
|
|
|
- name: contracts-local-fork
|
|
image: registry.niovi.voyage/harb/node-ci:latest
|
|
environment:
|
|
HARB_ENV: BASE_SEPOLIA_LOCAL_FORK
|
|
commands:
|
|
- |
|
|
bash -c '
|
|
set -euo pipefail
|
|
cd onchain
|
|
export PATH=/root/.foundry/bin:$PATH
|
|
forge test -vv --ffi
|
|
'
|
|
|
|
# NOTE: contracts-base-sepolia step removed — requires base_sepolia_rpc secret
|
|
# which is not configured. Re-add when RPC secret is provisioned.
|
|
|
|
- name: transpiler-tests
|
|
image: registry.niovi.voyage/harb/node-ci:latest
|
|
when:
|
|
- event: pull_request
|
|
path:
|
|
include:
|
|
- tools/push3-transpiler/**
|
|
commands:
|
|
- |
|
|
bash -c '
|
|
set -euo pipefail
|
|
export PATH=/root/.foundry/bin:$PATH
|
|
cd tools/push3-transpiler
|
|
npm install --silent
|
|
npm run build
|
|
npm test
|
|
'
|
|
|
|
- name: single-package-manager
|
|
image: registry.niovi.voyage/harb/node-ci:latest
|
|
commands:
|
|
- |
|
|
bash -c '
|
|
set -euo pipefail
|
|
if [ -f kraiken-lib/yarn.lock ]; then
|
|
echo "ERROR: kraiken-lib/yarn.lock must not be committed. Use npm only (see packageManager field in kraiken-lib/package.json)." >&2
|
|
exit 1
|
|
fi
|
|
'
|
|
|
|
- name: validate-evolution-patch
|
|
image: registry.niovi.voyage/harb/node-ci:latest
|
|
when:
|
|
- event: pull_request
|
|
path:
|
|
include:
|
|
- onchain/**
|
|
- tools/push3-evolution/**
|
|
commands:
|
|
- |
|
|
bash -c '
|
|
set -euo pipefail
|
|
if ! git apply --check tools/push3-evolution/evolution.patch; then
|
|
echo "ERROR: evolution.patch needs regeneration — see tools/push3-evolution/evolution.conf" >&2
|
|
exit 1
|
|
fi
|
|
echo "evolution.patch applies cleanly."
|
|
'
|
|
|
|
- name: optimizer-not-mutated
|
|
image: registry.niovi.voyage/harb/node-ci:latest
|
|
commands:
|
|
- |
|
|
bash -c '
|
|
set -euo pipefail
|
|
if ! git diff --exit-code onchain/src/OptimizerV3.sol; then
|
|
echo "ERROR: onchain/src/OptimizerV3.sol has uncommitted mutations (likely left by batch-eval or inject.sh)." >&2
|
|
exit 1
|
|
fi
|
|
echo "OptimizerV3.sol is clean."
|
|
'
|
|
|
|
- name: node-quality
|
|
image: registry.niovi.voyage/harb/node-ci:latest
|
|
environment:
|
|
CI: "true"
|
|
NODE_OPTIONS: "--max-old-space-size=2048"
|
|
commands:
|
|
- |
|
|
bash -c '
|
|
set -euo pipefail
|
|
npm config set fund false
|
|
npm config set audit false
|
|
./scripts/build-kraiken-lib.sh
|
|
# Root install links workspace packages (@harb/web3) + all workspace members
|
|
npm install --no-audit --no-fund
|
|
# Landing (workspace member — deps already installed by root)
|
|
npm run lint --prefix landing
|
|
npm run build --prefix landing
|
|
# Web-app (workspace member)
|
|
npm run lint --prefix web-app
|
|
npm run test --prefix web-app -- --run
|
|
npm run build --prefix web-app
|
|
# Ponder (standalone — not a workspace member)
|
|
npm install --prefix services/ponder --no-audit --no-fund
|
|
npm run lint --prefix services/ponder
|
|
npm run build --prefix services/ponder
|
|
# TxnBot (standalone)
|
|
npm install --prefix services/txnBot --no-audit --no-fund
|
|
npm run lint --prefix services/txnBot
|
|
npm run test --prefix services/txnBot
|
|
npm run build --prefix services/txnBot
|
|
'
|