Documentation
set positional-arguments

watch +args='test':
  cargo watch --clear --exec '{{args}}'

fmt:
  cargo fmt --all

clippy:
  cargo clippy --all --all-targets -- --deny warnings

ci: clippy
  cargo fmt -- --check
  cargo test --all

ignored:
  cargo test --all -- --ignored

all: ci ignored

outdated:
  cargo outdated --root-deps-only --workspace

unused:
  cargo +nightly udeps --workspace

doc:
  cargo doc --package para --open

audit:
  cargo audit

coverage:
  # cargo tarpaulin --engine llvm
  # cargo llvm-cov -- --include-ignored
  cargo llvm-cov --html --open

test-without-ckpool:
  cargo test --all -- --skip ckpool

miner stratum_endpoint='127.0.0.1:42069': 
  cargo run --release -- miner \
    {{stratum_endpoint}} \
    --username bc1p4r54k6ju6h92x8rvucsumg06nhl4fmnr9ecg6dzw5nk24r45dzasde25r3.tick \
    --password x \
    --cpu-cores 2

miner-signet: 
  cargo run --release -- miner \
    127.0.0.1:42069 \
    --username tb1qkrrl75qekv9ree0g2qt49j8vdynsvlc4kuctrc.tick \
    --password x \
    --cpu-cores 2 \
    --throttle 500K

ping host='parasite.wtf':
  cargo run ping {{host}}:42069

ping-auth host='parasite.wtf' username='bc1p4r54k6ju6h92x8rvucsumg06nhl4fmnr9ecg6dzw5nk24r45dzasde25r3.tick' password='x':
  cargo run ping --username {{username}} --password {{password}} {{host}}:42069

pool: 
  cargo run -- pool \
    --chain signet \
    --address 0.0.0.0 \
    --bitcoin-rpc-username satoshi \
    --bitcoin-rpc-password nakamoto \
    --bitcoin-rpc-port 38332 \
    --start-diff 0.00001 \
    --vardiff-window 10 \
    --vardiff-period 1 \
    --zmq-block-notifications tcp://127.0.0.1:28332

server: 
  RUST_LOG=info cargo run -- server \
    --log-dir copr/logs \
    --port 8080

harness: build-bitcoind
  cargo run -p harness

install:
  git submodule update --init --recursive
  sudo apt-get install --yes \
    autoconf \
    automake \
    build-essential \
    capnproto \
    clang-format \
    cmake \
    libboost-dev \
    libcapnp-dev \
    libevent-dev \
    libpq-dev \
    libsqlite3-dev \
    libtool \
    libzmq3-dev \
    pkgconf \
    python3 \
    yasm \

build-bitcoind: install
  #!/usr/bin/env bash
  cd bitcoin
  cmake -B build -DWITH_ZMQ=ON
  cmake --build build -j 21

build-ckpool: install
  #!/usr/bin/env bash
  cd ckpool
  ./autogen.sh
  ./configure
  make

build: build-bitcoind build-ckpool

bitcoind:
  #!/usr/bin/env bash
  ./bitcoin/build/bin/bitcoind \
    -datadir=copr \
    -signet 

mine:
  ./bin/mine

ckpool:
  #!/usr/bin/env bash
  cd ckpool
  make 
  cd ..
  ./ckpool/src/ckpool \
    -B \
    -k \
    --config copr/ckpool.conf \
    --sockdir copr/tmp \
    --loglevel 7 \
    --log-shares \
    --signet \
    --log-txns

lint:
  find ./ckpool/src -type f \( -name "*.c" -o -name "*.h" \) -not -path "**/jansson-2.14/*" -exec clang-format -i {} \;

test: lint
  ./bin/run_tests

psql:
  ./bin/postgres-init

psql-reset:
  ./bin/postgres-reset

prepare-release revision='master':
  #!/usr/bin/env bash
  set -euxo pipefail
  git checkout {{ revision }}
  git pull origin {{ revision }}
  echo >> CHANGELOG.md
  git log --pretty='format:- %s' >> CHANGELOG.md
  $EDITOR CHANGELOG.md
  $EDITOR Cargo.toml
  version=`sed -En 's/version[[:space:]]*=[[:space:]]*"([^"]+)"/\1/p' Cargo.toml | head -1`
  cargo check
  git checkout -b release-$version
  git add -u
  git commit -m "Release $version"
  gh pr create --web

publish-release revision='master':
  #!/usr/bin/env bash
  set -euxo pipefail
  rm -rf tmp/release
  git clone git@github.com:parasitepool/para.git tmp/release
  cd tmp/release
  git checkout {{ revision }}
  cargo publish
  cd ../..
  rm -rf tmp/release