justfile 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. alias b := build
  2. alias c := check
  3. alias t := test
  4. default:
  5. @just --list
  6. # Create a new SQL migration file
  7. new-migration target name:
  8. #!/usr/bin/env bash
  9. if [ "{{target}}" != "mint" ] && [ "{{target}}" != "wallet" ]; then
  10. echo "Error: target must be either 'mint' or 'wallet'"
  11. exit 1
  12. fi
  13. timestamp=$(date +%Y%m%d%H%M%S)
  14. migration_path="./crates/cdk-sqlite/src/{{target}}/migrations/${timestamp}_{{name}}.sql"
  15. # Create the file
  16. mkdir -p "$(dirname "$migration_path")"
  17. touch "$migration_path"
  18. echo "Created new migration: $migration_path"
  19. final-check: typos format clippy test
  20. # run `cargo build` on everything
  21. build *ARGS="--workspace --all-targets":
  22. #!/usr/bin/env bash
  23. set -euo pipefail
  24. if [ ! -f Cargo.toml ]; then
  25. cd {{invocation_directory()}}
  26. fi
  27. cargo build {{ARGS}}
  28. # run `cargo check` on everything
  29. check *ARGS="--workspace --all-targets":
  30. #!/usr/bin/env bash
  31. set -euo pipefail
  32. if [ ! -f Cargo.toml ]; then
  33. cd {{invocation_directory()}}
  34. fi
  35. cargo check {{ARGS}}
  36. # run code formatters
  37. format:
  38. #!/usr/bin/env bash
  39. set -euo pipefail
  40. if [ ! -f Cargo.toml ]; then
  41. cd {{invocation_directory()}}
  42. fi
  43. cargo fmt --all
  44. nixpkgs-fmt $(echo **.nix)
  45. # run doc tests
  46. test: build
  47. #!/usr/bin/env bash
  48. set -euo pipefail
  49. if [ ! -f Cargo.toml ]; then
  50. cd {{invocation_directory()}}
  51. fi
  52. cargo test --lib
  53. # Run pure integration tests
  54. cargo test -p cdk-integration-tests --test mint
  55. # run doc tests
  56. test-pure db="memory": build
  57. #!/usr/bin/env bash
  58. set -euo pipefail
  59. if [ ! -f Cargo.toml ]; then
  60. cd {{invocation_directory()}}
  61. fi
  62. # Run pure integration tests
  63. CDK_TEST_DB_TYPE={{db}} cargo test -p cdk-integration-tests --test integration_tests_pure -- --test-threads 1
  64. test-all db="memory":
  65. #!/usr/bin/env bash
  66. just test {{db}}
  67. ./misc/itests.sh "{{db}}"
  68. ./misc/fake_itests.sh "{{db}}" external_signatory
  69. ./misc/fake_itests.sh "{{db}}"
  70. test-nutshell:
  71. #!/usr/bin/env bash
  72. docker run -d -p 3338:3338 --name nutshell -e MINT_LIGHTNING_BACKEND=FakeWallet -e MINT_LISTEN_HOST=0.0.0.0 -e MINT_LISTEN_PORT=3338 -e MINT_PRIVATE_KEY=TEST_PRIVATE_KEY -e MINT_INPUT_FEE_PPK=100 cashubtc/nutshell:latest poetry run mint
  73. # Wait for the Nutshell service to be ready
  74. echo "Waiting for Nutshell to start..."
  75. max_attempts=30
  76. attempt=0
  77. while ! curl -s http://127.0.0.1:3338/v1/info > /dev/null; do
  78. attempt=$((attempt+1))
  79. if [ $attempt -ge $max_attempts ]; then
  80. echo "Nutshell failed to start after $max_attempts attempts"
  81. docker stop nutshell
  82. docker rm nutshell
  83. exit 1
  84. fi
  85. echo "Waiting for Nutshell to start (attempt $attempt/$max_attempts)..."
  86. sleep 1
  87. done
  88. echo "Nutshell is ready!"
  89. export CDK_TEST_MINT_URL=http://127.0.0.1:3338
  90. export LN_BACKEND=FAKEWALLET
  91. cargo test -p cdk-integration-tests --test happy_path_mint_wallet
  92. cargo test -p cdk-integration-tests --test test_fees
  93. unset CDK_TEST_MINT_URL
  94. unset LN_BACKEND
  95. docker stop nutshell
  96. docker rm nutshell
  97. # run `cargo clippy` on everything
  98. clippy *ARGS="--locked --offline --workspace --all-targets":
  99. cargo clippy {{ARGS}}
  100. # run `cargo clippy --fix` on everything
  101. clippy-fix *ARGS="--locked --offline --workspace --all-targets":
  102. cargo clippy {{ARGS}} --fix
  103. typos:
  104. typos
  105. # fix all typos
  106. [no-exit-message]
  107. typos-fix:
  108. just typos -w
  109. itest db:
  110. #!/usr/bin/env bash
  111. ./misc/itests.sh "{{db}}"
  112. fake-mint-itest db:
  113. #!/usr/bin/env bash
  114. ./misc/fake_itests.sh "{{db}}" external_signatory
  115. ./misc/fake_itests.sh "{{db}}"
  116. itest-payment-processor ln:
  117. #!/usr/bin/env bash
  118. ./misc/mintd_payment_processor.sh "{{ln}}"
  119. fake-auth-mint-itest db openid_discovery:
  120. #!/usr/bin/env bash
  121. ./misc/fake_auth_itests.sh "{{db}}" "{{openid_discovery}}"
  122. nutshell-wallet-itest:
  123. #!/usr/bin/env bash
  124. ./misc/nutshell_wallet_itest.sh
  125. run-examples:
  126. cargo r --example p2pk
  127. cargo r --example mint-token
  128. cargo r --example melt-token
  129. cargo r --example proof_selection
  130. cargo r --example wallet
  131. check-wasm *ARGS="--target wasm32-unknown-unknown":
  132. #!/usr/bin/env bash
  133. set -euo pipefail
  134. if [ ! -f Cargo.toml ]; then
  135. cd {{invocation_directory()}}
  136. fi
  137. buildargs=(
  138. "-p cdk"
  139. "-p cdk --no-default-features"
  140. "-p cdk --no-default-features --features wallet"
  141. "-p cdk --no-default-features --features mint"
  142. )
  143. for arg in "${buildargs[@]}"; do
  144. echo "Checking '$arg'"
  145. cargo check $arg {{ARGS}}
  146. echo
  147. done
  148. release m="":
  149. #!/usr/bin/env bash
  150. set -euo pipefail
  151. args=(
  152. "-p cashu"
  153. "-p cdk-common"
  154. "-p cdk-sqlite"
  155. "-p cdk-redb"
  156. "-p cdk-signatory"
  157. "-p cdk"
  158. "-p cdk-axum"
  159. "-p cdk-mint-rpc"
  160. "-p cdk-cln"
  161. "-p cdk-lnd"
  162. "-p cdk-lnbits"
  163. "-p cdk-fake-wallet"
  164. "-p cdk-payment-processor"
  165. "-p cdk-cli"
  166. "-p cdk-mintd"
  167. )
  168. for arg in "${args[@]}";
  169. do
  170. echo "Publishing '$arg'"
  171. cargo publish $arg {{m}}
  172. echo
  173. done
  174. check-docs:
  175. #!/usr/bin/env bash
  176. set -euo pipefail
  177. args=(
  178. "-p cashu"
  179. "-p cdk-common"
  180. "-p cdk"
  181. "-p cdk-redb"
  182. "-p cdk-sqlite"
  183. "-p cdk-axum"
  184. "-p cdk-cln"
  185. "-p cdk-lnd"
  186. "-p cdk-lnbits"
  187. "-p cdk-fake-wallet"
  188. "-p cdk-mint-rpc"
  189. "-p cdk-signatory"
  190. "-p cdk-cli"
  191. "-p cdk-mintd"
  192. )
  193. for arg in "${args[@]}"; do
  194. echo "Checking '$arg' docs"
  195. cargo doc $arg --all-features
  196. echo
  197. done
  198. # Build docs for all crates and error on warnings
  199. docs-strict:
  200. #!/usr/bin/env bash
  201. set -euo pipefail
  202. args=(
  203. "-p cashu"
  204. "-p cdk-common"
  205. "-p cdk"
  206. "-p cdk-redb"
  207. "-p cdk-sqlite"
  208. "-p cdk-axum"
  209. "-p cdk-cln"
  210. "-p cdk-lnd"
  211. "-p cdk-lnbits"
  212. "-p cdk-fake-wallet"
  213. "-p cdk-mint-rpc"
  214. "-p cdk-payment-processor"
  215. "-p cdk-cli"
  216. "-p cdk-mintd"
  217. )
  218. for arg in "${args[@]}"; do
  219. echo "Building docs for $arg with strict warnings"
  220. RUSTDOCFLAGS="-D warnings" cargo doc $arg --all-features --no-deps
  221. echo
  222. done