#!/bin/bash

set -e; # Fail fast
# shellcheck shell=bash

# examples that we can't run because they require some additional infra, docker or ledger for example
ignored=(
  "examples-contracts:deploy_moonbeam"
  "examples-providers:ipc"
  "examples-wallets:ledger"
  "examples-wallets:trezor"
  "examples-wallets:yubi"
  "examples-transactions:remove_liquidity"
)

example_crates=$(cargo metadata --format-version 1 | 
                 jq -c '.workspace_members' | 
                 jq -r 'map(select(startswith("examples")) |
                 sub("\\s.*$";"")) | .[]')

for crate in $example_crates; do 
    # Remove "examples-" prefix from crate name (e.g. examples-contracts => contracts)
    cratedir="${crate#examples-}"
    srcdir="examples/$cratedir/examples"
    # Retrieve all example files in crate:
    # Transform the absolute path into the filename (e.g. some-path/deploy_anvil.rs => deploy_anvil)
    example_files=$(find $srcdir -type f -name '*.rs' -exec basename {} \; | sed 's/\.[^.]*$//')

    for file in $example_files; do
        # Build the example
        echo "Building example: $crate:$file"
        cargo build -p $crate --example $file

        # Run the example
        if [[ "${ignored[*]}" =~ $(basename "$crate:$file") ]]; then
            echo "skipping: $crate:$file"
            continue
        fi
        echo "running $crate:$file"
        cargo run -p $crate --example $file
    done
done
