#!/usr/bin/env bash # Run all validations before opening PRs (Chainlist, token list, Trust Wallet). # See: docs/04-configuration/PR_ADDITIONS_VALIDATION_REPORT.md set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" CHAINS_DIR="${CHAINS_DIR:-$HOME/projects/chains}" TOKEN_LISTS_DIR="${TOKEN_LISTS_DIR:-$HOME/projects/token-lists}" WALLET_CORE_DIR="${WALLET_CORE_DIR:-$HOME/projects/wallet-core}" log() { echo "[$(date +%H:%M:%S)] $*"; } err() { echo "ERROR: $*" >&2; } # 1. Chains validation (ethereum-lists/chains) log "1. Chains validation..." if [[ -d "$CHAINS_DIR" ]]; then cp "$REPO_ROOT/docs/04-configuration/pr-ready/eip155-138.json" "$CHAINS_DIR/_data/chains/" (cd "$CHAINS_DIR" && npx prettier --write _data/chains/eip155-138.json 2>/dev/null) (cd "$CHAINS_DIR" && ./gradlew run -q) && log " Chains: OK" || { err "Chains validation failed"; exit 1; } else log " Chains: SKIP (CHAINS_DIR not found: $CHAINS_DIR)" fi # 2. Token list schema validation log "2. Token list schema validation..." if [[ -d "$TOKEN_LISTS_DIR" ]]; then (cd "$TOKEN_LISTS_DIR" && node -e " const Ajv = require('ajv'); const addFormats = require('ajv-formats'); const schema = require('./src/tokenlist.schema.json'); const ajv = new Ajv({ allErrors: true }); addFormats(ajv); const validate = ajv.compile(schema); const list = require('$REPO_ROOT/token-lists/lists/dbis-138.tokenlist.json'); if (!validate(list)) { console.error(JSON.stringify(validate.errors, null, 2)); process.exit(1); } console.log('Token list: OK'); ") && log " Token list: OK" || { err "Token list validation failed"; exit 1; } else log " Token list: SKIP (TOKEN_LISTS_DIR not found: $TOKEN_LISTS_DIR)" fi # 3. Trust Wallet codegen (optional - requires Rust + registry entry) log "3. Trust Wallet codegen..." if [[ -d "$WALLET_CORE_DIR" ]] && command -v cargo &>/dev/null; then if grep -q '"id": "dfiometa"' "$WALLET_CORE_DIR/registry.json" 2>/dev/null; then (. "$HOME/.cargo/env" 2>/dev/null; cd "$WALLET_CORE_DIR" && ./tools/new-evmchain dfiometa 2>/dev/null) && log " Trust Wallet codegen: OK" || log " Trust Wallet codegen: SKIP (run manually: ./tools/new-evmchain dfiometa)" else log " Trust Wallet: SKIP (add Chain 138 to registry.json from pr-ready/trust-wallet-registry-chain138.json first)" fi else log " Trust Wallet: SKIP (cargo not found or WALLET_CORE_DIR=$WALLET_CORE_DIR)" fi log "Done. All validations passed."