Compare commits
616 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0b97d2bf93 | |||
| 16928a48a9 | |||
| 24891adddf | |||
| 6a42a8dd49 | |||
| bc0c2e5d19 | |||
| 225178f95a | |||
| 32cfb3fff8 | |||
| f62a74a6af | |||
| fe9275274c | |||
| 5cee248122 | |||
| 86aec84697 | |||
| 8f376d1b9b | |||
| f0ae4f4090 | |||
| 4e850f6fe0 | |||
| bd3678dd4f | |||
| 28c1637198 | |||
| 8de574ec97 | |||
| 4464d12103 | |||
| 0d9d97e31e | |||
| a7705a5f2c | |||
| 7a300bdd74 | |||
| 6569479083 | |||
| 611844b248 | |||
| 2cc9b05520 | |||
| 05b6f5e282 | |||
| a450b6f984 | |||
| 5093450004 | |||
| f6bd511599 | |||
| e5c3f39a57 | |||
| 76f999fc88 | |||
| 2fce8c7ca3 | |||
| 468bd8b5d1 | |||
| 45022b1671 | |||
| 3b3c5beae4 | |||
| 650917e216 | |||
| c02adaa019 | |||
| d01c34263a | |||
| f247e028f2 | |||
| 20fe8dd028 | |||
| 89edabf796 | |||
| bf5352906f | |||
| 8eb9999876 | |||
| c0f582b336 | |||
| 133a855e01 | |||
| 98149dde87 | |||
| 5e733a5ebf | |||
| 5647ae6a41 | |||
| 4ed9d8fb7a | |||
| a2081af603 | |||
| 5b62fd76ba | |||
| 77a34fe3bf | |||
| 630c4922ac | |||
| 6edbece3ad | |||
| 8529a3c351 | |||
| 453e1cbe70 | |||
| 94a3599b4d | |||
| a6bc54461a | |||
| 4f0c40dab7 | |||
| 3eff6e5e3b | |||
| a519f4ccb8 | |||
| a3ba3bfc5a | |||
| 988df7cff7 | |||
| 260f8e9714 | |||
| d28d0ac39e | |||
| dce4d6b34b | |||
| bc47e9a1b2 | |||
| 3b693741b2 | |||
| 5d7f3402c7 | |||
| 2d73ea5c82 | |||
| b8d8ee6109 | |||
| a779b7a266 | |||
| cb277fe487 | |||
| b2d7b54f34 | |||
| 8bb29f4d07 | |||
| e753f24ed1 | |||
| c7cd962627 | |||
| 00467e4440 | |||
| f3d1000472 | |||
| 597aae1a20 | |||
| 40a3cd28b7 | |||
| a4950485d1 | |||
| d93d25ebae | |||
| ae0ab69bd2 | |||
| 4897cb0ce4 | |||
| 46b9d5374b | |||
| e7fcaa980f | |||
| 5fc2936d3f | |||
| 3d59a72ee8 | |||
| bb694855d5 | |||
| 9cb2655e7d | |||
| 0c3efe67fb | |||
| ca5ad94420 | |||
| 220c64100d | |||
| 505a19e32f | |||
| b75839461b | |||
| 4e4e0df721 | |||
| c3520b575f | |||
| c7a466860e | |||
| 956df22d86 | |||
| 0ca122c56b | |||
| 492eb22d74 | |||
| 9513eb458b | |||
| 8bca0698ee | |||
| 8e278866c7 | |||
| ff93657609 | |||
| d46e967b5b | |||
| 1219dcf874 | |||
| a7068ea421 | |||
| 5dc6546f1c | |||
| 5f2bc60c2c | |||
| 195c75d293 | |||
| f9827f5dd4 | |||
| b92dd2f264 | |||
| 8e792b7b93 | |||
| 061840c47c | |||
| 93834bcf28 | |||
| 89ab2630cd | |||
| fd47ebfad0 | |||
| b0d01ec12a | |||
| 470282612b | |||
| bb24b5e91d | |||
| 4222a7b684 | |||
| 73bc746cd6 | |||
| 32402d64e8 | |||
| 681b0d17b5 | |||
| 068ee7d2b7 | |||
| 39cfd532a8 | |||
| 613d496133 | |||
| 1ecb457c66 | |||
| 49faa13855 | |||
| 51e5e7825d | |||
| ded23a6271 | |||
| 801dcdda1e | |||
| e2d29f184d | |||
| a151a03181 | |||
| b19e82d4f7 | |||
| 88a4633bc4 | |||
| 660eff45dc | |||
| d4882ca276 | |||
| cfcf804b47 | |||
| b6d22abc01 | |||
| bd755385ed | |||
| 940fb09ae4 | |||
| 47af0b24f0 | |||
| 52edfdcc2f | |||
| af04afbe5e | |||
| 63f158cccb | |||
| b4aee7a1d9 | |||
| c55b215b65 | |||
| 7e8faf0ec6 | |||
| 0082b9fc50 | |||
| e16a337354 | |||
| cd0881462b | |||
| 8916b021a9 | |||
| dccdde108c | |||
| 9d661e7a7b | |||
| 76ce1bc0f9 | |||
| d3648f13c5 | |||
| 9a931b9251 | |||
| f4ba8ac2b3 | |||
| c274cc588d | |||
| 7dd1dd1a6c | |||
| 982786b678 | |||
| 561182ce6b | |||
| f4b59158df | |||
| 8e4cae2f57 | |||
| 00e4caec08 | |||
| 944b4f5aad | |||
| d99eff9178 | |||
| 0d290b6028 | |||
| 83bf9dc7cc | |||
| 8af759fb1d | |||
| 3597682b33 | |||
| 2024163be6 | |||
| a4638b8d2f | |||
| dbf571cb0a | |||
| d6ae10304d | |||
| 727d39ad72 | |||
| b513a99498 | |||
| b5d1e6a93f | |||
| e2be2b0b34 | |||
| a63a1e745e | |||
| 43d1c61b70 | |||
| 9c81a87173 | |||
| 751929fa04 | |||
| 441b46d2cc | |||
| 74b05d9066 | |||
| c1adf41643 | |||
| c1ddcc75cf | |||
| 3b20e22aa1 | |||
| b949d0fb01 | |||
| 52c47a950e | |||
| 377c22f283 | |||
| 036ae5c6dc | |||
| 7462926bcf | |||
| 7b78740327 | |||
| 9cca73bc3a | |||
| 00e8528fed | |||
| 4795fa89a9 | |||
| 6b40013ceb | |||
| cf3fd00350 | |||
| 38316690f0 | |||
| 18a44209db | |||
| 7c0babf35a | |||
| b6f234259c | |||
| 7d8d1e9d6d | |||
| fb85de9ab6 | |||
| 3b75af34e8 | |||
| 1a3c1fa466 | |||
| 6ff981ecce | |||
| 7a9a04d846 | |||
| 64b971b1b9 | |||
| 62fc6d8902 | |||
| de7a082e58 | |||
| 877d4d68c9 | |||
| 8a00ed6071 | |||
| b68e13f0f2 | |||
| fc0b7189c7 | |||
| bc6d2fad48 | |||
| 29de743bd2 | |||
| 6fb5d002e6 | |||
| 898b8d6ae5 | |||
| 122397f460 | |||
| 0f927e85d9 | |||
| 09d444b78b | |||
| 0392778cfd | |||
| d08da7f998 | |||
| 2a045a3828 | |||
| ae54e86bf4 | |||
| 177fbaec99 | |||
| 9a3a6dff59 | |||
| 05fd287ae6 | |||
| eda421d3ab | |||
| 510c754486 | |||
| 198a245b2c | |||
| 12f465fd2d | |||
| 5fc0784c23 | |||
| e08eb3caef | |||
| 9665aab112 | |||
| a3223b4f56 | |||
| 892341fa59 | |||
| 1bf4109398 | |||
| 49e3abddf2 | |||
| ade194f2b2 | |||
| fa25986f28 | |||
| e6513154d7 | |||
| 290dec78a1 | |||
| 2f2ab9c356 | |||
| 59e720af6f | |||
| c202d5cf49 | |||
| 242859527c | |||
| e97f7f7940 | |||
| bedc978f63 | |||
| fb07085b90 | |||
| 57306c3363 | |||
| a8b9c8c80a | |||
| 53b8231f02 | |||
| fbcd384fc7 | |||
| beaf25506b | |||
| a00295a361 | |||
| 0eed93cd9a | |||
| 35fc4bdb61 | |||
| 1c82ff5df3 | |||
| 5258b55a61 | |||
| e57459a94b | |||
| ae66c73faa | |||
| 424647f32e | |||
| 1c897cfe68 | |||
| d566592862 | |||
| bfef3db28e | |||
| b65d86577f | |||
| 9ecbdfc3af | |||
| 2878d29d60 | |||
| 59aeb63272 | |||
| d7a7bbe525 | |||
| c17a205ada | |||
| 6e62e34ac8 | |||
| 18e72c90df | |||
| 8383a35352 | |||
| 50bc3babb7 | |||
| fd051540aa | |||
| 46268edf9c | |||
| f2091cc9d6 | |||
| 46fe1bc819 | |||
| 37ae72d8ec | |||
| 0b58b6f728 | |||
| e709e30e43 | |||
| 29b405f813 | |||
| f5d22a66f6 | |||
| bf7cd15428 | |||
| e50051795e | |||
| 91b9f4c4c6 | |||
| 757da6a456 | |||
| 62c581a9ae | |||
| 32e06e19e7 | |||
| fd1b524037 | |||
| 36d0adfe92 | |||
| fcf782674c | |||
| 4b35c36299 | |||
| ca7cbac320 | |||
| e410aecf40 | |||
| ae76335c31 | |||
| dac7f1f83c | |||
| 31ff3645c5 | |||
| 6dd3b78a74 | |||
| 0ab14f7041 | |||
| 9c6310264e | |||
| aa37bfb7ff | |||
| 66c2454775 | |||
| 670f383faa | |||
| 9714351fd8 | |||
| 7352499328 | |||
| 06717037e5 | |||
| 1a7aa2ce90 | |||
| c594361cd1 | |||
| df52f10f52 | |||
| 6a96d8205b | |||
| 22793bc45e | |||
| 6eb8f29235 | |||
| c9ef46c51d | |||
| f1024bc976 | |||
| 1aec4c2f8e | |||
| 1b79107726 | |||
| a69b473ba1 | |||
| fe01c922c0 | |||
| 4b0fbc663a | |||
| 4b292ca142 | |||
| 9262e24892 | |||
| e0c74c5eb0 | |||
| a293d6da7d | |||
| f12a554e85 | |||
| 8c3a797750 | |||
| 00d0ae0b5b | |||
| de0ae687ef | |||
| 42c051dfa3 | |||
| 26f4dd8f39 | |||
| 2d37c33a3d | |||
| f1be6ae788 | |||
| c13b4aa745 | |||
| 68eae18b8b | |||
| 28dc7cae4d | |||
| 37f3ef58a3 | |||
| 52f98de73b | |||
| 6d63ba1f4c | |||
| 6170ca2a14 | |||
| 2cc59aadc5 | |||
| 89dc865ec6 | |||
| 6d1d9d58a5 | |||
| 3057721845 | |||
| 54c7a01482 | |||
| 76993a9b94 | |||
| b00e1f2fff | |||
| ef7974fde9 | |||
| a488a1b489 | |||
| bb5b43492a | |||
| f9e2311574 | |||
| 50d768976f | |||
| 3825d5f173 | |||
| 9b076197b1 | |||
| 7b96adf7a8 | |||
| 18d271f481 | |||
| 752c7915b3 | |||
| 6c01c9fceb | |||
| 4e7b4715b0 | |||
| 4fdbcb051a | |||
| 47c6006bb7 | |||
| dcfd0f77ad | |||
| 78fb779010 | |||
| b4544c2b48 | |||
| 90e07d9980 | |||
| b8479e1cde | |||
| 37e3a101b1 | |||
| 45a1074377 | |||
| 1b9af19e20 | |||
| 7a339d4c4d | |||
| 568268d39b | |||
| 9c5847dc67 | |||
| 22db132c09 | |||
| 5496cce5c9 | |||
| 8de37eb6c9 | |||
| 40a7a87c61 | |||
| 95ee3a7c7d | |||
| 4736f1eb52 | |||
| c23e139eaa | |||
| bfcb4c79bb | |||
| 2933732225 | |||
| 2e059865a1 | |||
| 06c0c36c67 | |||
| bdc0f5022d | |||
| b742ace7e0 | |||
| 82a9563ca0 | |||
| ef25480c20 | |||
| bcce854a8b | |||
| f960bfa91b | |||
| 96e3ff2af9 | |||
| 4f991061dd | |||
| d73b7b7127 | |||
| 440aadf124 | |||
| e5aef76256 | |||
| 6acc54d2bc | |||
| d126d8e5a0 | |||
| ab6e08dd13 | |||
| e09066858c | |||
| 6b2bb3029b | |||
| 842ce93a60 | |||
| ce26105986 | |||
| cc95358385 | |||
| cc04a09ed7 | |||
| ae47d53f0c | |||
| e0ff09f323 | |||
| 10707fd2c5 | |||
| 9bdd2af14c | |||
| 228ef8b158 | |||
| d820131d2c | |||
| 054715a600 | |||
| 3f560180b7 | |||
| f62dbbdae0 | |||
| edecc4ba01 | |||
| 1a4d64a0e5 | |||
| 4dcc568ec2 | |||
| 468835e3a2 | |||
| 28a866e26d | |||
| 350d244032 | |||
| 17ca000782 | |||
| 58c0e289c2 | |||
| 6d8edc4bc7 | |||
| a44cdf1c7c | |||
| 6b8a6283a4 | |||
| 94151965bb | |||
| e8ca490db1 | |||
| fe7470ea44 | |||
| 21d52244cb | |||
| c0c58026a8 | |||
| 0fe863c889 | |||
| 4e5d88f64c | |||
| 1559f6a912 | |||
| 766024be27 | |||
| 5ba181b118 | |||
| 76fc9f4a90 | |||
| 8ca6af7c86 | |||
| 45e14a7fb1 | |||
| a38917cb9b | |||
| cf8a399089 | |||
| ba01820586 | |||
| 8c799b2976 | |||
| de4fb6291c | |||
| 81fd37e5c0 | |||
| 219f3af967 | |||
| aea7442525 | |||
| 1525aed657 | |||
| 943b5fa8bc | |||
| 71e0c025c6 | |||
| 239c6c701b | |||
| 91d0b7bdad | |||
| 99b28b2b6f | |||
| 5627ada57e | |||
| 4e1228fff0 | |||
| 04be5624fa | |||
| a6fe1b1de7 | |||
| c5971d0e9d | |||
| 06dd74ba34 | |||
| c6a0256b03 | |||
| d04b61a88b | |||
| 70a119ac58 | |||
| e2fe3a60a6 | |||
| 71301ee0cc | |||
| aba6c9d4ac | |||
| c617bbb240 | |||
| 1f8144eb11 | |||
| 694135c81b | |||
| e815f08505 | |||
| f402da8e60 | |||
| 34a500d0a2 | |||
| aac983d922 | |||
| 577675bab3 | |||
| ec015618cd | |||
| ef52f25564 | |||
| 010b013094 | |||
| c503a5f0e8 | |||
| 781afd3522 | |||
| 58083df0b0 | |||
| 4e8d29d0c5 | |||
| 66797efa80 | |||
| 5a26fa262e | |||
| 73a34935ae | |||
| fa40acbeca | |||
| a8086675d9 | |||
| 0453345d65 | |||
| b56d9505e6 | |||
| bdacc72003 | |||
| 9eca9efd82 | |||
| 386e1790dd | |||
| d07f9c8fad | |||
| 0dc071daeb | |||
| babf113fe5 | |||
| cc74d218fc | |||
| dea8a287e6 | |||
| 10951d4cd3 | |||
| 872c25bfcc | |||
| 5acce42c64 | |||
| fc5d310935 | |||
| 4848d081d0 | |||
| b3452ede77 | |||
| a44819b14c | |||
| 5455110810 | |||
| de27778192 | |||
| a0178d28f7 | |||
| 3e42160426 | |||
| 2f752a6c42 | |||
| 806f807f02 | |||
| 1400db6156 | |||
| 673a3e45d3 | |||
| d9c2f6ebda | |||
| e24e094711 | |||
| 0d7487f530 | |||
| 378f32e6d7 | |||
| 3e9b8d237f | |||
| f5a4dbc555 | |||
| 4480534e4d | |||
| d355f9d752 | |||
| 9f3a370496 | |||
| e4adc5d954 | |||
| 00373b70e2 | |||
| 65f2017422 | |||
| 192f258463 | |||
| a5eee7444b | |||
| 6abd7e7352 | |||
| 3306ca5357 | |||
| 9c2ccead0e | |||
| b7aeb51362 | |||
| e9e725defe | |||
| c74494a21d | |||
| 54f6c98c22 | |||
| 846484bbb4 | |||
| fb3f5501ba | |||
| e8a607f520 | |||
| f5f6df9eaf | |||
| c647ab5605 | |||
| 416c21a42e | |||
| fd5a95fa4d | |||
| c61df79182 | |||
| 08559a7660 | |||
| 6dce55a99b | |||
| bc0b89b31c | |||
| 67c32faa11 | |||
| aa0d15ee67 | |||
| 4f0974fcf1 | |||
| bd2174641e | |||
| 59b62fabc9 | |||
| e6f4bae895 | |||
| d71742af32 | |||
| 3b7c07e249 | |||
| 3b429dde69 | |||
| 3a29c296da | |||
| 8544c54f8f | |||
| 9f9639950b | |||
| 111a0b20b6 | |||
| 67b300d0b8 | |||
| 88c4e0ce6c | |||
| f6800aff0a | |||
| 0c7c927ca2 | |||
| a69c8b1660 | |||
| f3ea310a46 | |||
| 92f9ff035d | |||
| 5a817e1df1 | |||
| a07a24db00 | |||
| a0cb812eff | |||
| 923c1fa184 | |||
| 35ea7e4926 | |||
| d1cb9afaf0 | |||
| 79d4b4b2e3 | |||
| 8460b33946 | |||
| ae6539e07c | |||
| 18cebdfedc | |||
| c448ec823a | |||
| a266137278 | |||
| 6f4dfd1dab | |||
| 57719787db | |||
| 29a57bf172 | |||
| 17d11f201e | |||
| fef7e42eb4 | |||
| ceeeb6211b | |||
| cd77b1032f | |||
| 6bbb14f12f | |||
| de8030d85a | |||
| e18e64bf21 | |||
| a50c9ac3fb | |||
| db813b6e3e | |||
| 1be5ba310a | |||
| 41ff3f7824 | |||
| c9d4d62446 | |||
| e839a0d80e | |||
| cd61f930bf | |||
| edcf2b1204 | |||
| 2235a6e147 | |||
| db6defa122 | |||
| df7768dec0 | |||
| f3a449b7cc | |||
| cf21593ffa | |||
| 37c4a3aa36 | |||
| f0d8dabb9f | |||
| f105bcbafe | |||
| dc0f4af2c1 | |||
| 2a621e07a8 | |||
| 485aeebabd | |||
| 3b726bada9 | |||
| 1d1b2e17d2 | |||
| b5b2dbdfd8 | |||
| 82806f47d8 | |||
| c6f85cf23e | |||
| ed8de7234d | |||
| e25d83b047 | |||
| 9974d480b5 | |||
| 2211f13cdd | |||
| 4505f18a02 | |||
| a717a18948 |
@@ -3,4 +3,5 @@
|
|||||||
.gitignore
|
.gitignore
|
||||||
**/node_modules
|
**/node_modules
|
||||||
**/target
|
**/target
|
||||||
|
target-otel
|
||||||
dist
|
dist
|
||||||
|
|||||||
@@ -1,2 +1,5 @@
|
|||||||
nym-validator-rewarder/.sqlx/** diff=nodiff
|
nym-validator-rewarder/.sqlx/** diff=nodiff
|
||||||
nym-node-status-api/nym-node-status-api/.sqlx/** diff=nodiff
|
nym-node-status-api/nym-node-status-api/.sqlx/** diff=nodiff
|
||||||
|
|
||||||
|
# Use bd merge for beads JSONL files
|
||||||
|
.beads/beads.jsonl merge=beads
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ Steps to reproduce the behaviour, if you're familiar with BDD syntax, please wri
|
|||||||
|
|
||||||
*An example:*
|
*An example:*
|
||||||
- Given I was setting up a mix-node following the instructions in the docs
|
- Given I was setting up a mix-node following the instructions in the docs
|
||||||
- And I successfully bonded my node via the the wallet
|
- And I successfully bonded my node via the wallet
|
||||||
- When I went to start my mixnode
|
- When I went to start my mixnode
|
||||||
- Then I was presented with an error
|
- Then I was presented with an error
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Set up Build Environment
|
- name: Set up Build Environment
|
||||||
run: sudo apt-get update && sudo apt-get install -y make dpkg-dev
|
run: sudo apt-get update && sudo apt-get install -y make dpkg-dev
|
||||||
@@ -25,14 +25,14 @@ jobs:
|
|||||||
echo "file2=$(ls nym-vpn*.deb)" >> $GITHUB_ENV
|
echo "file2=$(ls nym-vpn*.deb)" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Upload nym-repo-setup
|
- name: Upload nym-repo-setup
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: ${{ env.file1 }}
|
name: ${{ env.file1 }}
|
||||||
path: ppa/packages/nym-repo-setup*.deb
|
path: ppa/packages/nym-repo-setup*.deb
|
||||||
retention-days: 10
|
retention-days: 10
|
||||||
|
|
||||||
- name: Upload nym-vpn
|
- name: Upload nym-vpn
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: ${{ env.file2 }}
|
name: ${{ env.file2 }}
|
||||||
path: ppa/packages/nym-vpn*.deb
|
path: ppa/packages/nym-vpn*.deb
|
||||||
|
|||||||
@@ -6,11 +6,13 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: arc-ubuntu-22.04
|
runs-on: arc-ubuntu-22.04
|
||||||
|
env:
|
||||||
|
NEXT_PUBLIC_SITE_URL: https://nymtech.net/docs
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
working-directory: documentation/docs
|
working-directory: documentation/docs
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
- name: Install Dependencies (Linux)
|
- name: Install Dependencies (Linux)
|
||||||
run: sudo apt-get update && sudo apt-get install -y build-essential curl wget libssl-dev libudev-dev squashfs-tools protobuf-compiler git python3 && sudo apt-get update --fix-missing
|
run: sudo apt-get update && sudo apt-get install -y build-essential curl wget libssl-dev libudev-dev squashfs-tools protobuf-compiler git python3 && sudo apt-get update --fix-missing
|
||||||
- name: Install pip3
|
- name: Install pip3
|
||||||
@@ -21,16 +23,16 @@ jobs:
|
|||||||
run: sudo apt-get install -y rsync
|
run: sudo apt-get install -y rsync
|
||||||
- uses: rlespinasse/github-slug-action@v3.x
|
- uses: rlespinasse/github-slug-action@v3.x
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.1.0
|
uses: pnpm/action-setup@v4.2.0
|
||||||
with:
|
with:
|
||||||
version: 9
|
version: 9
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 20
|
||||||
- name: Install Rust stable
|
- name: Install Rust toolchain
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: ${{ vars.REQUIRED_RUSTC_VERSION }}
|
||||||
- name: Build all binaries
|
- name: Build all binaries
|
||||||
uses: actions-rs/cargo@v1
|
uses: actions-rs/cargo@v1
|
||||||
with:
|
with:
|
||||||
@@ -41,6 +43,8 @@ jobs:
|
|||||||
run: pnpm i
|
run: pnpm i
|
||||||
- name: Build project
|
- name: Build project
|
||||||
run: pnpm run build
|
run: pnpm run build
|
||||||
|
- name: Generate sitemap
|
||||||
|
run: npx next-sitemap
|
||||||
- name: Move files to /dist/
|
- name: Move files to /dist/
|
||||||
run: ../scripts/move-to-dist.sh
|
run: ../scripts/move-to-dist.sh
|
||||||
|
|
||||||
|
|||||||
@@ -37,16 +37,16 @@ jobs:
|
|||||||
|
|
||||||
runs-on: ${{ matrix.platform }}
|
runs-on: ${{ matrix.platform }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install Dependencies (Linux)
|
- name: Install Dependencies (Linux)
|
||||||
run: sudo apt-get update && sudo apt-get -y install jq vim libwebkit2gtk-4.0-dev build-essential curl wget libssl-dev libgtk-3-dev libudev-dev squashfs-tools
|
run: sudo apt-get update && sudo apt-get -y install jq vim libwebkit2gtk-4.0-dev build-essential curl wget libssl-dev libgtk-3-dev libudev-dev squashfs-tools
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
|
|
||||||
- name: Install Rust stable
|
- name: Install Rust toolchain
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: ${{ vars.REQUIRED_RUSTC_VERSION }}
|
||||||
|
|
||||||
- name: Branch name
|
- name: Branch name
|
||||||
run: echo running on branch ${GITHUB_REF##*/}
|
run: echo running on branch ${GITHUB_REF##*/}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
- name: Install rsync
|
- name: Install rsync
|
||||||
run: sudo apt-get install rsync
|
run: sudo apt-get install rsync
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
|
|||||||
@@ -3,13 +3,28 @@ name: ci-build-upload-binaries
|
|||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
|
feature_profile:
|
||||||
|
description: "Select a predefined cargo feature profile"
|
||||||
|
required: false
|
||||||
|
default: "none"
|
||||||
|
type: choice
|
||||||
|
options:
|
||||||
|
- none
|
||||||
|
- tokio-console
|
||||||
|
- otel
|
||||||
|
- otel,tokio-console
|
||||||
|
extra_features:
|
||||||
|
description: "Additional comma-separated cargo features (e.g. feat1,feat2)"
|
||||||
|
required: false
|
||||||
|
default: ""
|
||||||
|
type: string
|
||||||
add_tokio_unstable:
|
add_tokio_unstable:
|
||||||
description: 'True to add RUSTFLAGS="--cfg tokio_unstable"'
|
description: 'Force RUSTFLAGS="--cfg tokio_unstable" (auto-set when tokio-console is selected)'
|
||||||
required: true
|
required: false
|
||||||
default: false
|
default: false
|
||||||
type: boolean
|
type: boolean
|
||||||
enable_deb:
|
enable_deb:
|
||||||
description: "True to enable cargo-deb installation and .deb package building"
|
description: "Enable cargo-deb installation and .deb package building"
|
||||||
required: false
|
required: false
|
||||||
default: false
|
default: false
|
||||||
type: boolean
|
type: boolean
|
||||||
@@ -21,14 +36,14 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
platform: [ arc-linux-latest ]
|
platform: [arc-linux-latest]
|
||||||
|
|
||||||
runs-on: ${{ matrix.platform }}
|
runs-on: ${{ matrix.platform }}
|
||||||
env:
|
env:
|
||||||
CARGO_TERM_COLOR: always
|
CARGO_TERM_COLOR: always
|
||||||
RUSTUP_PERMIT_COPY_RENAME: 1
|
RUSTUP_PERMIT_COPY_RENAME: 1
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Prepare build output directory
|
- name: Prepare build output directory
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -36,42 +51,66 @@ jobs:
|
|||||||
OUTPUT_DIR: ci-builds/${{ github.ref_name }}
|
OUTPUT_DIR: ci-builds/${{ github.ref_name }}
|
||||||
run: |
|
run: |
|
||||||
rm -rf ci-builds || true
|
rm -rf ci-builds || true
|
||||||
mkdir -p $OUTPUT_DIR
|
mkdir -p "$OUTPUT_DIR"
|
||||||
echo $OUTPUT_DIR
|
echo "$OUTPUT_DIR"
|
||||||
|
|
||||||
- name: Install Dependencies (Linux)
|
- name: Install Dependencies (Linux)
|
||||||
run: sudo apt-get update && sudo apt-get -y install libudev-dev
|
run: sudo apt-get update && sudo apt-get -y install libudev-dev
|
||||||
|
|
||||||
- name: Sets env vars for tokio if set in manual dispatch inputs
|
- name: Resolve cargo features and RUSTFLAGS
|
||||||
if: github.event_name == 'workflow_dispatch' && inputs.add_tokio_unstable == true
|
if: github.event_name == 'workflow_dispatch'
|
||||||
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
echo "RUSTFLAGS=--cfg tokio_unstable" >> $GITHUB_ENV
|
FEATURES=""
|
||||||
echo "CARGO_FEATURES=--features tokio-console" >> $GITHUB_ENV
|
PROFILE="${{ inputs.feature_profile }}"
|
||||||
- name: Install Rust stable
|
EXTRA="${{ inputs.extra_features }}"
|
||||||
uses: actions-rs/toolchain@v1
|
|
||||||
|
if [[ "$PROFILE" != "none" && -n "$PROFILE" ]]; then
|
||||||
|
FEATURES="$PROFILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$EXTRA" ]]; then
|
||||||
|
if [[ -n "$FEATURES" ]]; then
|
||||||
|
FEATURES="${FEATURES},${EXTRA}"
|
||||||
|
else
|
||||||
|
FEATURES="$EXTRA"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$FEATURES" ]]; then
|
||||||
|
echo "CARGO_FEATURES=--features ${FEATURES}" >> "$GITHUB_ENV"
|
||||||
|
echo "::notice::Selected cargo features: $FEATURES"
|
||||||
|
else
|
||||||
|
echo "::notice::No additional cargo features selected"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$FEATURES" == *"tokio-console"* ]] || [[ "${{ inputs.add_tokio_unstable }}" == "true" ]]; then
|
||||||
|
echo "RUSTFLAGS=--cfg tokio_unstable" >> "$GITHUB_ENV"
|
||||||
|
echo "::notice::Enabled RUSTFLAGS --cfg tokio_unstable"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Install Rust toolchain
|
||||||
|
uses: dtolnay/rust-toolchain@master
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: ${{ vars.REQUIRED_RUSTC_VERSION }}
|
||||||
|
|
||||||
- name: Build all binaries
|
- name: Build all binaries
|
||||||
uses: actions-rs/cargo@v1
|
shell: bash
|
||||||
with:
|
run: cargo build --workspace --release ${{ env.CARGO_FEATURES }}
|
||||||
command: build
|
|
||||||
args: --workspace --release ${{ env.CARGO_FEATURES }}
|
|
||||||
|
|
||||||
- name: Install cargo-deb
|
- name: Install cargo-deb
|
||||||
uses: actions-rs/cargo@v1
|
|
||||||
with:
|
|
||||||
command: install
|
|
||||||
args: cargo-deb
|
|
||||||
if: github.event_name == 'workflow_dispatch' && inputs.enable_deb == true
|
if: github.event_name == 'workflow_dispatch' && inputs.enable_deb == true
|
||||||
|
shell: bash
|
||||||
|
run: cargo install cargo-deb
|
||||||
|
|
||||||
- name: Build deb packages
|
- name: Build deb packages
|
||||||
|
if: github.event_name == 'workflow_dispatch' && inputs.enable_deb == true
|
||||||
shell: bash
|
shell: bash
|
||||||
run: make deb
|
run: make deb
|
||||||
if: github.event_name == 'workflow_dispatch' && inputs.enable_deb == true
|
|
||||||
|
|
||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
if: github.event_name == 'workflow_dispatch'
|
if: github.event_name == 'workflow_dispatch'
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: nym-binaries-artifacts
|
name: nym-binaries-artifacts
|
||||||
path: |
|
path: |
|
||||||
@@ -84,24 +123,22 @@ jobs:
|
|||||||
target/release/nym-node
|
target/release/nym-node
|
||||||
retention-days: 30
|
retention-days: 30
|
||||||
|
|
||||||
# If this was a pull_request or nightly, upload to build server
|
|
||||||
|
|
||||||
- name: Prepare build output
|
- name: Prepare build output
|
||||||
# if: github.event_name == 'schedule' || github.event_name == 'pull_request'
|
|
||||||
shell: bash
|
shell: bash
|
||||||
env:
|
env:
|
||||||
OUTPUT_DIR: ci-builds/${{ github.ref_name }}
|
OUTPUT_DIR: ci-builds/${{ github.ref_name }}
|
||||||
run: |
|
run: |
|
||||||
cp target/release/nym-client $OUTPUT_DIR
|
cp target/release/nym-client "$OUTPUT_DIR"
|
||||||
cp target/release/nym-socks5-client $OUTPUT_DIR
|
cp target/release/nym-socks5-client "$OUTPUT_DIR"
|
||||||
cp target/release/nym-api $OUTPUT_DIR
|
cp target/release/nym-api "$OUTPUT_DIR"
|
||||||
cp target/release/nym-network-requester $OUTPUT_DIR
|
cp target/release/nym-network-requester "$OUTPUT_DIR"
|
||||||
cp target/release/nymvisor $OUTPUT_DIR
|
cp target/release/nymvisor "$OUTPUT_DIR"
|
||||||
cp target/release/nym-node $OUTPUT_DIR
|
cp target/release/nym-node "$OUTPUT_DIR"
|
||||||
cp target/release/nym-cli $OUTPUT_DIR
|
cp target/release/nym-cli "$OUTPUT_DIR"
|
||||||
if [ ${{ github.event_name == 'workflow_dispatch' && inputs.enable_deb == true }} = true ]; then
|
if [[ "${{ github.event_name }}" == "workflow_dispatch" && "${{ inputs.enable_deb }}" == "true" ]]; then
|
||||||
cp target/debian/*.deb $OUTPUT_DIR
|
cp target/debian/*.deb "$OUTPUT_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Deploy branch to CI www
|
- name: Deploy branch to CI www
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
uses: easingthemes/ssh-deploy@main
|
uses: easingthemes/ssh-deploy@main
|
||||||
|
|||||||
@@ -1,42 +0,0 @@
|
|||||||
name: ci-build-vpn-api-wasm
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
paths:
|
|
||||||
- 'common/**'
|
|
||||||
- 'nym-credential-proxy/**'
|
|
||||||
- '.github/workflows/ci-build-vpn-api-wasm.yml'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
wasm:
|
|
||||||
runs-on: arc-linux-latest
|
|
||||||
env:
|
|
||||||
CARGO_TERM_COLOR: always
|
|
||||||
RUSTUP_PERMIT_COPY_RENAME: 1
|
|
||||||
steps:
|
|
||||||
- name: Check out repository code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Install Rust toolchain
|
|
||||||
uses: actions-rs/toolchain@v1
|
|
||||||
with:
|
|
||||||
profile: minimal
|
|
||||||
toolchain: stable
|
|
||||||
target: wasm32-unknown-unknown
|
|
||||||
override: true
|
|
||||||
components: rustfmt, clippy
|
|
||||||
|
|
||||||
- name: Install wasm-pack
|
|
||||||
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
|
|
||||||
|
|
||||||
- name: Install wasm-opt
|
|
||||||
uses: ./.github/actions/install-wasm-opt
|
|
||||||
with:
|
|
||||||
version: '116'
|
|
||||||
|
|
||||||
- name: Install wasm-bindgen-cli
|
|
||||||
run: cargo install wasm-bindgen-cli
|
|
||||||
|
|
||||||
- name: "Build"
|
|
||||||
run: make
|
|
||||||
working-directory: nym-credential-proxy/vpn-api-lib-wasm
|
|
||||||
@@ -8,10 +8,14 @@ on:
|
|||||||
- 'gateway/**'
|
- 'gateway/**'
|
||||||
- 'integrations/**'
|
- 'integrations/**'
|
||||||
- 'nym-api/**'
|
- 'nym-api/**'
|
||||||
|
- 'nym-authenticator-client/**'
|
||||||
- 'nym-credential-proxy/**'
|
- 'nym-credential-proxy/**'
|
||||||
|
- 'nym-gateway-probe/**'
|
||||||
|
- 'nym-ip-packet-client/**'
|
||||||
- 'nym-network-monitor/**'
|
- 'nym-network-monitor/**'
|
||||||
- 'nym-node/**'
|
- 'nym-node/**'
|
||||||
- 'nym-node-status-api/**'
|
- 'nym-node-status-api/**'
|
||||||
|
- 'nym-registration-client/**'
|
||||||
- 'nym-statistics-api/**'
|
- 'nym-statistics-api/**'
|
||||||
- 'nym-outfox/**'
|
- 'nym-outfox/**'
|
||||||
- 'nym-validator-rewarder/**'
|
- 'nym-validator-rewarder/**'
|
||||||
@@ -51,13 +55,13 @@ jobs:
|
|||||||
if: contains(matrix.os, 'linux')
|
if: contains(matrix.os, 'linux')
|
||||||
|
|
||||||
- name: Check out repository code
|
- name: Check out repository code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install rust toolchain
|
- name: Install rust toolchain
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
profile: minimal
|
profile: minimal
|
||||||
toolchain: stable
|
toolchain: ${{ vars.REQUIRED_RUSTC_VERSION }}
|
||||||
override: true
|
override: true
|
||||||
components: rustfmt, clippy
|
components: rustfmt, clippy
|
||||||
|
|
||||||
@@ -86,7 +90,7 @@ jobs:
|
|||||||
uses: actions-rs/cargo@v1
|
uses: actions-rs/cargo@v1
|
||||||
with:
|
with:
|
||||||
command: clippy
|
command: clippy
|
||||||
args: --workspace --all-targets --exclude nym-gateway-probe -- -D warnings
|
args: --workspace --all-targets --exclude nym-gateway-probe --exclude nym-node-status-api -- -D warnings
|
||||||
|
|
||||||
- name: Clippy (non-macos)
|
- name: Clippy (non-macos)
|
||||||
if: contains(matrix.os, 'linux') || contains(matrix.os, 'windows')
|
if: contains(matrix.os, 'linux') || contains(matrix.os, 'windows')
|
||||||
@@ -101,6 +105,14 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
command: build
|
command: build
|
||||||
|
|
||||||
|
# only build on linux because of wg FFI bindings of its dependency (network probe)
|
||||||
|
- name: Build nym-node-status-api (linux only)
|
||||||
|
if: runner.os == 'Linux'
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
with:
|
||||||
|
command: build
|
||||||
|
args: -p nym-node-status-api
|
||||||
|
|
||||||
- name: Build all examples
|
- name: Build all examples
|
||||||
if: contains(matrix.os, 'linux')
|
if: contains(matrix.os, 'linux')
|
||||||
uses: actions-rs/cargo@v1
|
uses: actions-rs/cargo@v1
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ jobs:
|
|||||||
- licenses bans sources
|
- licenses bans sources
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
- uses: EmbarkStudios/cargo-deny-action@v2
|
- uses: EmbarkStudios/cargo-deny-action@v2
|
||||||
with:
|
with:
|
||||||
log-level: warn
|
log-level: warn
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ name: ci-check-ns-api-version
|
|||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- "nym-node-status-api/**"
|
- "nym-node-status-api/nym-node-status-api/**"
|
||||||
|
|
||||||
env:
|
env:
|
||||||
WORKING_DIRECTORY: "nym-node-status-api/nym-node-status-api"
|
WORKING_DIRECTORY: "nym-node-status-api/nym-node-status-api"
|
||||||
@@ -13,10 +13,10 @@ jobs:
|
|||||||
runs-on: arc-linux-latest-dind
|
runs-on: arc-linux-latest-dind
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Get version from cargo.toml
|
- name: Get version from cargo.toml
|
||||||
uses: mikefarah/yq@v4.47.1
|
uses: mikefarah/yq@v4.52.4
|
||||||
id: get_version
|
id: get_version
|
||||||
with:
|
with:
|
||||||
cmd: yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/Cargo.toml
|
cmd: yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/Cargo.toml
|
||||||
|
|||||||
@@ -10,13 +10,13 @@ env:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check-if-tag-exists:
|
check-if-tag-exists:
|
||||||
runs-on: arc-ubuntu-22.04-dind
|
runs-on: arc-linux-latest-dind
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Get version from cargo.toml
|
- name: Get version from cargo.toml
|
||||||
uses: mikefarah/yq@v4.47.1
|
uses: mikefarah/yq@v4.52.4
|
||||||
id: get_version
|
id: get_version
|
||||||
with:
|
with:
|
||||||
cmd: yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/Cargo.toml
|
cmd: yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/Cargo.toml
|
||||||
|
|||||||
@@ -16,12 +16,12 @@ jobs:
|
|||||||
CARGO_TERM_COLOR: always
|
CARGO_TERM_COLOR: always
|
||||||
steps:
|
steps:
|
||||||
- name: Check out repository code
|
- name: Check out repository code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install Rust toolchain
|
- name: Install Rust toolchain
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: ${{ vars.REQUIRED_RUSTC_VERSION }}
|
||||||
|
|
||||||
- name: Generate the schema
|
- name: Generate the schema
|
||||||
run: make contract-schema
|
run: make contract-schema
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
CARGO_TERM_COLOR: always
|
CARGO_TERM_COLOR: always
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Prepare build output directory
|
- name: Prepare build output directory
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ jobs:
|
|||||||
CARGO_TERM_COLOR: always
|
CARGO_TERM_COLOR: always
|
||||||
RUSTUP_PERMIT_COPY_RENAME: 1
|
RUSTUP_PERMIT_COPY_RENAME: 1
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Setup rust
|
- name: Setup rust
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
name: Publish to crates.io (dry run)
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
version:
|
||||||
|
description: "Version to publish (e.g. 1.21.0)"
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
env:
|
||||||
|
CI_BOT_AUTHOR: "Nym bot"
|
||||||
|
CI_BOT_EMAIL: "nym-bot@users.noreply.github.com"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
publish-dry-run:
|
||||||
|
runs-on: arc-linux-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout repo
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- name: Configure git identity
|
||||||
|
run: |
|
||||||
|
git config --global user.name "${{ env.CI_BOT_AUTHOR }}"
|
||||||
|
git config --global user.email "${{ env.CI_BOT_EMAIL }}"
|
||||||
|
|
||||||
|
- name: Install rust toolchain
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: Install cargo-workspaces
|
||||||
|
run: cargo install cargo-workspaces
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: "20"
|
||||||
|
|
||||||
|
- name: Validate version format
|
||||||
|
run: |
|
||||||
|
if ! npx semver "${{ inputs.version }}"; then
|
||||||
|
echo "Error: '${{ inputs.version }}' is not valid semver"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Get current version
|
||||||
|
id: current_version
|
||||||
|
run: |
|
||||||
|
VERSION=$(grep -oP '^\s*version\s*=\s*"\K[0-9]+\.[0-9]+\.[0-9]+' Cargo.toml | head -1)
|
||||||
|
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Update workspace dependencies
|
||||||
|
run: |
|
||||||
|
sed -i '/path = /s/version = "${{ steps.current_version.outputs.version }}"/version = "${{ inputs.version }}"/g' Cargo.toml
|
||||||
|
|
||||||
|
- name: Bump versions (local only)
|
||||||
|
run: |
|
||||||
|
cargo workspaces version custom ${{ inputs.version }} \
|
||||||
|
--allow-branch ${{ github.ref_name }} \
|
||||||
|
--no-git-commit \
|
||||||
|
|
||||||
|
# Dry run may show cascading dependency errors because packages aren't
|
||||||
|
# actually uploaded - these are expected and ignored. We check for real
|
||||||
|
# errors like packaging failures, missing metadata, or invalid Cargo.toml.
|
||||||
|
- name: Publish (dry run)
|
||||||
|
run: |
|
||||||
|
output=$(cargo workspaces publish --dry-run --allow-dirty 2>&1) || true
|
||||||
|
echo "$output"
|
||||||
|
|
||||||
|
# Check for real errors (not cascading dependency errors)
|
||||||
|
# Cascading errors mention "crates.io index", real errors mention "Cargo.toml"
|
||||||
|
echo "$output" | grep -i "Cargo.toml" && exit 1 || true
|
||||||
|
|
||||||
|
# Show the list of packages published
|
||||||
|
- name: Show package versions
|
||||||
|
run: cargo workspaces list --long
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
# This is in case, for whatever reason, a publication run fails, and we need to restart halfway down the list, of unbumped/unpublished crates.
|
||||||
|
name: Resume crates.io publish
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
resume_after:
|
||||||
|
description: "Last successfully published crate (will start from the next one)"
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
publish_interval:
|
||||||
|
description: "Seconds to wait between publishes"
|
||||||
|
required: false
|
||||||
|
default: "600"
|
||||||
|
type: string
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
publish:
|
||||||
|
runs-on: arc-linux-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout repo
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- name: Install rust toolchain
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: Install cargo-workspaces
|
||||||
|
run: cargo install cargo-workspaces
|
||||||
|
|
||||||
|
# Get crates in publish order, skip up to and including resume_after
|
||||||
|
- name: Publish remaining crates
|
||||||
|
env:
|
||||||
|
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
|
||||||
|
run: |
|
||||||
|
CRATES=$(cargo workspaces plan 2>/dev/null | sed -n '/^${{ inputs.resume_after }}$/,$p' | tail -n +2)
|
||||||
|
|
||||||
|
if [ -z "$CRATES" ]; then
|
||||||
|
echo "Error: No crates found after '${{ inputs.resume_after }}'"
|
||||||
|
echo "Check the crate name matches exactly from 'cargo workspaces plan'"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Will publish the following crates:"
|
||||||
|
echo "$CRATES"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "$CRATES" | while read crate; do
|
||||||
|
echo "Publishing $crate..."
|
||||||
|
cargo publish -p "$crate" --allow-dirty
|
||||||
|
echo "Waiting ${{ inputs.publish_interval }}s before next publish..."
|
||||||
|
sleep ${{ inputs.publish_interval }}
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Show package versions
|
||||||
|
run: cargo workspaces list --long
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
name: Publish crates to crates.io
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
publish_interval:
|
||||||
|
description: "Seconds to wait between publishes (600 for first publish, 60 after)"
|
||||||
|
required: false
|
||||||
|
default: "600"
|
||||||
|
type: string
|
||||||
|
backup_author:
|
||||||
|
description: "Second team member added as owner of the crate"
|
||||||
|
required: false
|
||||||
|
default: "jstuczyn"
|
||||||
|
type: string
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
publish:
|
||||||
|
runs-on: arc-linux-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout repo
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- name: Install rust toolchain
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: Install cargo-workspaces
|
||||||
|
run: cargo install cargo-workspaces
|
||||||
|
|
||||||
|
# `--publish-as-is` skips version bumping since that's done in a separate CI job.
|
||||||
|
- name: Publish
|
||||||
|
env:
|
||||||
|
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
|
||||||
|
run: |
|
||||||
|
cargo workspaces publish \
|
||||||
|
--publish-as-is \
|
||||||
|
--publish-interval ${{ inputs.publish_interval }}
|
||||||
|
|
||||||
|
- name: Show package versions
|
||||||
|
run: cargo workspaces list --long
|
||||||
|
|
||||||
|
- name: Add team as crate owners
|
||||||
|
env:
|
||||||
|
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
|
||||||
|
run: |
|
||||||
|
TEAM="github:nymtech:core"
|
||||||
|
echo "Checking and adding $TEAM as owner to workspace crates..."
|
||||||
|
|
||||||
|
cargo workspaces list | while read crate; do
|
||||||
|
echo "Checking $crate..."
|
||||||
|
|
||||||
|
if cargo owner --list "$crate" 2>/dev/null | grep -q "$TEAM"; then
|
||||||
|
echo " $TEAM already owns $crate, skipping"
|
||||||
|
else
|
||||||
|
echo " Adding $TEAM as owner of $crate..."
|
||||||
|
cargo owner --add "$TEAM" "$crate"
|
||||||
|
sleep 2
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Done!"
|
||||||
|
|
||||||
|
- name: Add secondary member as crate owner
|
||||||
|
env:
|
||||||
|
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
|
||||||
|
run: |
|
||||||
|
TEAM_MEMBER="${{ inputs.backup_author }}"
|
||||||
|
echo "Checking and adding $TEAM_MEMBER as owner to workspace crates..."
|
||||||
|
|
||||||
|
cargo workspaces list | while read crate; do
|
||||||
|
echo "Checking $crate..."
|
||||||
|
|
||||||
|
if cargo owner --list "$crate" 2>/dev/null | grep -q "$TEAM_MEMBER"; then
|
||||||
|
echo " $TEAM_MEMBER already owns $crate, skipping"
|
||||||
|
else
|
||||||
|
echo " Adding $TEAM_MEMBER as owner of $crate..."
|
||||||
|
cargo owner --add "$TEAM_MEMBER" "$crate"
|
||||||
|
sleep 2
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Done!"
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
name: Bump crate versions
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
version:
|
||||||
|
description: "Version to set (e.g. 1.21.0)"
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
env:
|
||||||
|
CI_BOT_AUTHOR: "Nym bot"
|
||||||
|
CI_BOT_EMAIL: "nym-bot@users.noreply.github.com"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
version-bump:
|
||||||
|
runs-on: arc-linux-latest
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
steps:
|
||||||
|
- name: Checkout repo
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- name: Configure git identity
|
||||||
|
run: |
|
||||||
|
git config --global user.name "${{ env.CI_BOT_AUTHOR }}"
|
||||||
|
git config --global user.email "${{ env.CI_BOT_EMAIL }}"
|
||||||
|
|
||||||
|
- name: Install rust toolchain
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: Install cargo-workspaces
|
||||||
|
run: cargo install cargo-workspaces
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: "20"
|
||||||
|
|
||||||
|
- name: Validate version format
|
||||||
|
run: |
|
||||||
|
if ! npx semver "${{ inputs.version }}"; then
|
||||||
|
echo "Error: '${{ inputs.version }}' is not valid semver"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Get current version
|
||||||
|
id: current_version
|
||||||
|
run: |
|
||||||
|
VERSION=$(grep -oP '^\s*version\s*=\s*"\K[0-9]+\.[0-9]+\.[0-9]+' Cargo.toml | head -1)
|
||||||
|
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Update workspace dependencies
|
||||||
|
run: |
|
||||||
|
sed -i '/path = /s/version = "${{ steps.current_version.outputs.version }}"/version = "${{ inputs.version }}"/g' Cargo.toml
|
||||||
|
|
||||||
|
- name: Bump versions
|
||||||
|
run: |
|
||||||
|
cargo workspaces version custom ${{ inputs.version }} \
|
||||||
|
--no-git-commit \
|
||||||
|
--yes
|
||||||
|
|
||||||
|
- name: Commit and push version bump
|
||||||
|
run: |
|
||||||
|
git add -A
|
||||||
|
git commit -m "crates release: bump version to ${{ inputs.version }}"
|
||||||
|
git push
|
||||||
|
|
||||||
|
- name: Show package versions
|
||||||
|
run: cargo workspaces list --long
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
name: ci-docs-linkcheck
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- "documentation/docs/**"
|
||||||
|
- ".github/workflows/ci-docs-linkcheck.yml"
|
||||||
|
- "lychee.toml"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
linkcheck:
|
||||||
|
runs-on: arc-linux-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- name: Check links
|
||||||
|
uses: lycheeverse/lychee-action@v2
|
||||||
|
with:
|
||||||
|
args: ${{ github.workspace }}/documentation/docs/ --config ${{ github.workspace }}/lychee.toml --root-dir ${{ github.workspace }}/documentation/docs/pages/
|
||||||
|
fail: true
|
||||||
@@ -17,7 +17,7 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
working-directory: documentation/docs
|
working-directory: documentation/docs
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
- name: Install Dependencies (Linux)
|
- name: Install Dependencies (Linux)
|
||||||
run: sudo apt-get update && sudo apt-get install -y build-essential curl wget libssl-dev libudev-dev squashfs-tools protobuf-compiler git python3 && sudo apt-get update --fix-missing
|
run: sudo apt-get update && sudo apt-get install -y build-essential curl wget libssl-dev libudev-dev squashfs-tools protobuf-compiler git python3 && sudo apt-get update --fix-missing
|
||||||
- name: Install pip3
|
- name: Install pip3
|
||||||
@@ -28,16 +28,16 @@ jobs:
|
|||||||
run: sudo apt-get install -y rsync
|
run: sudo apt-get install -y rsync
|
||||||
- uses: rlespinasse/github-slug-action@v3.x
|
- uses: rlespinasse/github-slug-action@v3.x
|
||||||
- name: Setup pnpm
|
- name: Setup pnpm
|
||||||
uses: pnpm/action-setup@v4.1.0
|
uses: pnpm/action-setup@v4.2.0
|
||||||
with:
|
with:
|
||||||
version: 9
|
version: 9
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 20
|
||||||
- name: Install Rust stable
|
- name: Install Rust toolchain
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: ${{ vars.REQUIRED_RUSTC_VERSION }}
|
||||||
- name: Build all binaries
|
- name: Build all binaries
|
||||||
uses: actions-rs/cargo@v1
|
uses: actions-rs/cargo@v1
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -6,45 +6,42 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- "ts-packages/**"
|
- "ts-packages/**"
|
||||||
- "sdk/typescript/**"
|
- "sdk/typescript/**"
|
||||||
- "nym-connect/desktop/src/**"
|
|
||||||
- "nym-connect/desktop/package.json"
|
|
||||||
- "nym-wallet/src/**"
|
- "nym-wallet/src/**"
|
||||||
- "nym-wallet/package.json"
|
- "nym-wallet/package.json"
|
||||||
- "explorer/**"
|
- "explorer-v2/**"
|
||||||
- ".github/workflows/ci-lint-typescript.yml"
|
- ".github/workflows/ci-lint-typescript.yml"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: arc-linux-latest
|
||||||
env:
|
env:
|
||||||
RUSTUP_PERMIT_COPY_RENAME: 1
|
RUSTUP_PERMIT_COPY_RENAME: 1
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
- uses: rlespinasse/github-slug-action@v3.x
|
- uses: rlespinasse/github-slug-action@v3.x
|
||||||
|
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 20
|
||||||
|
|
||||||
- name: Setup yarn
|
- name: Setup yarn
|
||||||
run: npm install -g yarn
|
run: npm install -g yarn
|
||||||
|
|
||||||
- name: Install Rust stable
|
- name: Install Rust toolchain
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: ${{ vars.REQUIRED_RUSTC_VERSION }}
|
||||||
|
|
||||||
- name: Install wasm-pack
|
- name: Install wasm-pack
|
||||||
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
|
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
|
||||||
|
|
||||||
- name: Install wasm-opt
|
- name: Install wasm-opt
|
||||||
uses: ./.github/actions/install-wasm-opt
|
run: cargo install wasm-opt
|
||||||
with:
|
|
||||||
version: '116'
|
|
||||||
|
|
||||||
- name: Set up Go
|
- name: Set up Go
|
||||||
uses: actions/setup-go@v5
|
uses: actions/setup-go@v6
|
||||||
with:
|
with:
|
||||||
go-version: "1.23.7"
|
go-version: "1.24.6"
|
||||||
|
|
||||||
- name: Install
|
- name: Install
|
||||||
run: yarn
|
run: yarn
|
||||||
@@ -52,7 +49,11 @@ jobs:
|
|||||||
- name: Build packages
|
- name: Build packages
|
||||||
run: yarn build:ci
|
run: yarn build:ci
|
||||||
|
|
||||||
|
- name: Install again
|
||||||
|
run: yarn
|
||||||
|
|
||||||
- name: Lint
|
- name: Lint
|
||||||
run: yarn lint
|
run: yarn lint
|
||||||
|
|
||||||
- name: Typecheck with tsc
|
- name: Typecheck with tsc
|
||||||
run: yarn tsc
|
run: yarn tsc
|
||||||
|
|||||||
@@ -25,13 +25,13 @@ jobs:
|
|||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
|
|
||||||
- name: Check out repository code
|
- name: Check out repository code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install rust toolchain
|
- name: Install rust toolchain
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
profile: minimal
|
profile: minimal
|
||||||
toolchain: stable
|
toolchain: ${{ vars.REQUIRED_RUSTC_VERSION }}
|
||||||
override: true
|
override: true
|
||||||
components: rustfmt, clippy
|
components: rustfmt, clippy
|
||||||
|
|
||||||
|
|||||||
@@ -8,9 +8,9 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: custom-linux
|
runs-on: arc-linux-latest-dind
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install rsync
|
- name: Install rsync
|
||||||
run: sudo apt-get install rsync
|
run: sudo apt-get install rsync
|
||||||
@@ -25,10 +25,10 @@ jobs:
|
|||||||
- name: Setup yarn
|
- name: Setup yarn
|
||||||
run: npm install -g yarn
|
run: npm install -g yarn
|
||||||
|
|
||||||
- name: Install Rust stable
|
- name: Install Rust toolchain
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: ${{ vars.REQUIRED_RUSTC_VERSION }}
|
||||||
|
|
||||||
- name: Install wasm-pack
|
- name: Install wasm-pack
|
||||||
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
|
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
|
||||||
@@ -51,25 +51,3 @@ jobs:
|
|||||||
REMOTE_USER: ${{ secrets.CI_WWW_REMOTE_USER }}
|
REMOTE_USER: ${{ secrets.CI_WWW_REMOTE_USER }}
|
||||||
TARGET: ${{ secrets.CI_WWW_REMOTE_TARGET }}/wallet-${{ env.GITHUB_REF_SLUG }}
|
TARGET: ${{ secrets.CI_WWW_REMOTE_TARGET }}/wallet-${{ env.GITHUB_REF_SLUG }}
|
||||||
EXCLUDE: "/dist/, /node_modules/"
|
EXCLUDE: "/dist/, /node_modules/"
|
||||||
|
|
||||||
- name: Matrix - Node Install
|
|
||||||
run: npm install
|
|
||||||
working-directory: .github/workflows/support-files
|
|
||||||
|
|
||||||
- name: Matrix - Send Notification
|
|
||||||
env:
|
|
||||||
NYM_NOTIFICATION_KIND: nym-wallet
|
|
||||||
NYM_PROJECT_NAME: "nym-wallet"
|
|
||||||
NYM_CI_WWW_BASE: "${{ secrets.NYM_CI_WWW_BASE }}"
|
|
||||||
NYM_CI_WWW_LOCATION: "wallet-${{ env.GITHUB_REF_SLUG }}"
|
|
||||||
GIT_COMMIT_MESSAGE: "${{ github.event.head_commit.message }}"
|
|
||||||
GIT_BRANCH: "${GITHUB_REF##*/}"
|
|
||||||
IS_SUCCESS: "${{ job.status == 'success' }}"
|
|
||||||
MATRIX_SERVER: "${{ secrets.MATRIX_SERVER }}"
|
|
||||||
MATRIX_ROOM: "${{ secrets.MATRIX_ROOM }}"
|
|
||||||
MATRIX_USER_ID: "${{ secrets.MATRIX_USER_ID }}"
|
|
||||||
MATRIX_TOKEN: "${{ secrets.MATRIX_TOKEN }}"
|
|
||||||
MATRIX_DEVICE_ID: "${{ secrets.MATRIX_DEVICE_ID }}"
|
|
||||||
uses: docker://keybaseio/client:stable-node
|
|
||||||
with:
|
|
||||||
args: .github/workflows/support-files/notifications/entry_point.sh
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ jobs:
|
|||||||
CARGO_TERM_COLOR: always
|
CARGO_TERM_COLOR: always
|
||||||
RUSTUP_PERMIT_COPY_RENAME: 1
|
RUSTUP_PERMIT_COPY_RENAME: 1
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
@@ -25,13 +25,13 @@ jobs:
|
|||||||
- uses: actions-rs/toolchain@v1
|
- uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
profile: minimal
|
profile: minimal
|
||||||
toolchain: stable
|
toolchain: ${{ vars.REQUIRED_RUSTC_VERSION }}
|
||||||
target: wasm32-unknown-unknown
|
target: wasm32-unknown-unknown
|
||||||
override: true
|
override: true
|
||||||
components: rustfmt, clippy
|
components: rustfmt, clippy
|
||||||
|
|
||||||
- name: Set up Go
|
- name: Set up Go
|
||||||
uses: actions/setup-go@v5
|
uses: actions/setup-go@v6
|
||||||
with:
|
with:
|
||||||
go-version: "1.24.6"
|
go-version: "1.24.6"
|
||||||
|
|
||||||
|
|||||||
@@ -10,10 +10,10 @@ jobs:
|
|||||||
name: SonarQube
|
name: SonarQube
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
|
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
|
||||||
- name: SonarQube Scan
|
- name: SonarQube Scan
|
||||||
uses: SonarSource/sonarqube-scan-action@v5
|
uses: SonarSource/sonarqube-scan-action@v7
|
||||||
env:
|
env:
|
||||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||||
|
|||||||
@@ -30,11 +30,11 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
- name: Setup Pages
|
- name: Setup Pages
|
||||||
uses: actions/configure-pages@v5
|
uses: actions/configure-pages@v5
|
||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
uses: actions/upload-pages-artifact@v3
|
uses: actions/upload-pages-artifact@v4
|
||||||
with:
|
with:
|
||||||
# Upload entire repository
|
# Upload entire repository
|
||||||
path: './ppa'
|
path: './ppa'
|
||||||
|
|||||||
@@ -8,6 +8,6 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/first-interaction@v3
|
- uses: actions/first-interaction@v3
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
issue-message: 'Thank you for raising this issue'
|
issue_message: 'Thank you for raising this issue'
|
||||||
pr-message: 'Thank you for making this first PR'
|
pr_message: 'Thank you for making this first PR'
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
rust: [stable, beta]
|
rust: [ stable, beta ]
|
||||||
os: [ubuntu-22.04, windows-latest, macos-latest]
|
os: [ ubuntu-22.04, windows-latest, macos-latest ]
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
env:
|
env:
|
||||||
CARGO_TERM_COLOR: always
|
CARGO_TERM_COLOR: always
|
||||||
@@ -19,7 +19,7 @@ jobs:
|
|||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
steps:
|
steps:
|
||||||
- name: Check out repository code
|
- name: Check out repository code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install Dependencies (Linux)
|
- name: Install Dependencies (Linux)
|
||||||
run: sudo apt-get update && sudo apt-get install -y build-essential curl wget libssl-dev libudev-dev squashfs-tools protobuf-compiler
|
run: sudo apt-get update && sudo apt-get install -y build-essential curl wget libssl-dev libudev-dev squashfs-tools protobuf-compiler
|
||||||
@@ -93,38 +93,3 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
command: clippy
|
command: clippy
|
||||||
args: --workspace --all-targets -- -D warnings
|
args: --workspace --all-targets -- -D warnings
|
||||||
|
|
||||||
notification:
|
|
||||||
needs: build
|
|
||||||
runs-on: custom-linux
|
|
||||||
steps:
|
|
||||||
- name: Collect jobs status
|
|
||||||
uses: technote-space/workflow-conclusion-action@v3
|
|
||||||
- name: Check out repository code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
- name: install npm
|
|
||||||
uses: actions/setup-node@v4
|
|
||||||
if: env.WORKFLOW_CONCLUSION == 'failure'
|
|
||||||
with:
|
|
||||||
node-version: 20
|
|
||||||
- name: Matrix - Node Install
|
|
||||||
if: env.WORKFLOW_CONCLUSION == 'failure'
|
|
||||||
run: npm install
|
|
||||||
working-directory: .github/workflows/support-files
|
|
||||||
- name: Matrix - Send Notification
|
|
||||||
if: env.WORKFLOW_CONCLUSION == 'failure'
|
|
||||||
env:
|
|
||||||
NYM_NOTIFICATION_KIND: nightly
|
|
||||||
NYM_PROJECT_NAME: "Nym nightly build"
|
|
||||||
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
|
|
||||||
GIT_COMMIT_MESSAGE: "${{ github.event.head_commit.message }}"
|
|
||||||
GIT_BRANCH: "${GITHUB_REF##*/}"
|
|
||||||
IS_SUCCESS: "${{ env.WORKFLOW_CONCLUSION == 'success' }}"
|
|
||||||
MATRIX_SERVER: "${{ secrets.MATRIX_SERVER }}"
|
|
||||||
MATRIX_ROOM: "${{ secrets.MATRIX_ROOM_NIGHTLY }}"
|
|
||||||
MATRIX_USER_ID: "${{ secrets.MATRIX_USER_ID }}"
|
|
||||||
MATRIX_TOKEN: "${{ secrets.MATRIX_TOKEN }}"
|
|
||||||
MATRIX_DEVICE_ID: "${{ secrets.MATRIX_DEVICE_ID }}"
|
|
||||||
uses: docker://keybaseio/client:stable-node
|
|
||||||
with:
|
|
||||||
args: .github/workflows/support-files/notifications/entry_point.sh
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ jobs:
|
|||||||
output1: ${{ steps.step2.outputs.latest_release }}
|
output1: ${{ steps.step2.outputs.latest_release }}
|
||||||
steps:
|
steps:
|
||||||
- name: Check out repository code
|
- name: Check out repository code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Set output variable to latest release branch
|
- name: Set output variable to latest release branch
|
||||||
@@ -28,7 +28,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Setup git user
|
- name: Setup git user
|
||||||
@@ -47,7 +47,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Setup git user
|
- name: Setup git user
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-22.04, macos-latest, windows-latest]
|
os: [ ubuntu-22.04, macos-latest, windows-latest ]
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
env:
|
env:
|
||||||
CARGO_TERM_COLOR: always
|
CARGO_TERM_COLOR: always
|
||||||
@@ -18,7 +18,7 @@ jobs:
|
|||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
steps:
|
steps:
|
||||||
- name: Check out repository code
|
- name: Check out repository code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install Dependencies (Linux)
|
- name: Install Dependencies (Linux)
|
||||||
run: sudo apt-get update && sudo apt-get install -y libwebkit2gtk-4.0-dev build-essential curl wget libssl-dev libgtk-3-dev squashfs-tools
|
run: sudo apt-get update && sudo apt-get install -y libwebkit2gtk-4.0-dev build-essential curl wget libssl-dev libgtk-3-dev squashfs-tools
|
||||||
@@ -28,7 +28,7 @@ jobs:
|
|||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
profile: minimal
|
profile: minimal
|
||||||
toolchain: stable
|
toolchain: ${{ vars.REQUIRED_RUSTC_VERSION }}
|
||||||
override: true
|
override: true
|
||||||
components: rustfmt, clippy
|
components: rustfmt, clippy
|
||||||
|
|
||||||
@@ -55,38 +55,3 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
command: clippy
|
command: clippy
|
||||||
args: ${{ env.MANIFEST_PATH }} --workspace --all-targets -- -D warnings
|
args: ${{ env.MANIFEST_PATH }} --workspace --all-targets -- -D warnings
|
||||||
|
|
||||||
notification:
|
|
||||||
needs: build
|
|
||||||
runs-on: custom-linux
|
|
||||||
steps:
|
|
||||||
- name: Collect jobs status
|
|
||||||
uses: technote-space/workflow-conclusion-action@v3
|
|
||||||
- name: Check out repository code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
- name: install npm
|
|
||||||
uses: actions/setup-node@v4
|
|
||||||
if: env.WORKFLOW_CONCLUSION == 'failure'
|
|
||||||
with:
|
|
||||||
node-version: 20
|
|
||||||
- name: Matrix - Node Install
|
|
||||||
if: env.WORKFLOW_CONCLUSION == 'failure'
|
|
||||||
run: npm install
|
|
||||||
working-directory: .github/workflows/support-files
|
|
||||||
- name: Matrix - Send Notification
|
|
||||||
if: env.WORKFLOW_CONCLUSION == 'failure'
|
|
||||||
env:
|
|
||||||
NYM_NOTIFICATION_KIND: nightly
|
|
||||||
NYM_PROJECT_NAME: "nym-wallet-nightly-build"
|
|
||||||
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
|
|
||||||
GIT_COMMIT_MESSAGE: "${{ github.event.head_commit.message }}"
|
|
||||||
GIT_BRANCH: "${GITHUB_REF##*/}"
|
|
||||||
IS_SUCCESS: "${{ env.WORKFLOW_CONCLUSION == 'success' }}"
|
|
||||||
MATRIX_SERVER: "${{ secrets.MATRIX_SERVER }}"
|
|
||||||
MATRIX_ROOM: "${{ secrets.MATRIX_ROOM_NIGHTLY }}"
|
|
||||||
MATRIX_USER_ID: "${{ secrets.MATRIX_USER_ID }}"
|
|
||||||
MATRIX_TOKEN: "${{ secrets.MATRIX_TOKEN }}"
|
|
||||||
MATRIX_DEVICE_ID: "${{ secrets.MATRIX_DEVICE_ID }}"
|
|
||||||
uses: docker://keybaseio/client:stable-node
|
|
||||||
with:
|
|
||||||
args: .github/workflows/support-files/notifications/entry_point.sh
|
|
||||||
|
|||||||
@@ -8,11 +8,11 @@ jobs:
|
|||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository code
|
- name: Checkout repository code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
- name: Install rust toolchain
|
- name: Install rust toolchain
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: ${{ vars.REQUIRED_RUSTC_VERSION }}
|
||||||
- name: Install cargo deny
|
- name: Install cargo deny
|
||||||
run: cargo install --locked cargo-deny
|
run: cargo install --locked cargo-deny
|
||||||
- name: Run cargo deny
|
- name: Run cargo deny
|
||||||
@@ -20,38 +20,7 @@ jobs:
|
|||||||
find . -name Cargo.toml -exec cargo deny --manifest-path {} check \
|
find . -name Cargo.toml -exec cargo deny --manifest-path {} check \
|
||||||
advisories -A advisory-not-detected --hide-inclusion-graph \; &> \
|
advisories -A advisory-not-detected --hide-inclusion-graph \; &> \
|
||||||
>(uniq &> .github/workflows/support-files/notifications/deny.message )
|
>(uniq &> .github/workflows/support-files/notifications/deny.message )
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: report
|
name: report
|
||||||
path: .github/workflows/support-files/notifications/deny.message
|
path: .github/workflows/support-files/notifications/deny.message
|
||||||
notification:
|
|
||||||
needs: cargo-deny
|
|
||||||
runs-on: custom-linux
|
|
||||||
steps:
|
|
||||||
- name: Check out repository code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
- name: Download report from previous job
|
|
||||||
uses: actions/download-artifact@v5
|
|
||||||
with:
|
|
||||||
name: report
|
|
||||||
path: .github/workflows/support-files/notifications
|
|
||||||
- name: install npm
|
|
||||||
uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20
|
|
||||||
- name: Matrix - Node Install
|
|
||||||
run: npm install
|
|
||||||
working-directory: .github/workflows/support-files
|
|
||||||
- name: Matrix - Send Notification
|
|
||||||
env:
|
|
||||||
NYM_NOTIFICATION_KIND: security
|
|
||||||
NYM_PROJECT_NAME: "Daily security report"
|
|
||||||
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
|
|
||||||
MATRIX_SERVER: "${{ secrets.MATRIX_SERVER }}"
|
|
||||||
MATRIX_ROOM: "${{ secrets.MATRIX_ROOM_AUDIT }}"
|
|
||||||
MATRIX_USER_ID: "${{ secrets.MATRIX_USER_ID }}"
|
|
||||||
MATRIX_TOKEN: "${{ secrets.MATRIX_TOKEN }}"
|
|
||||||
MATRIX_DEVICE_ID: "${{ secrets.MATRIX_DEVICE_ID }}"
|
|
||||||
uses: docker://keybaseio/client:stable-node
|
|
||||||
with:
|
|
||||||
args: .github/workflows/support-files/notifications/entry_point.sh
|
|
||||||
|
|||||||
@@ -15,12 +15,12 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install Rust
|
- name: Install Rust
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: ${{ vars.REQUIRED_RUSTC_VERSION }}
|
||||||
override: true
|
override: true
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ jobs:
|
|||||||
cli_version: ${{ steps.binary-versions.outputs.cli_version }}
|
cli_version: ${{ steps.binary-versions.outputs.cli_version }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install Dependencies (Linux)
|
- name: Install Dependencies (Linux)
|
||||||
run: sudo apt-get update && sudo apt-get -y install ripgrep libwebkit2gtk-4.0-dev build-essential curl wget libssl-dev libgtk-3-dev libudev-dev squashfs-tools
|
run: sudo apt-get update && sudo apt-get -y install ripgrep libwebkit2gtk-4.0-dev build-essential curl wget libssl-dev libgtk-3-dev libudev-dev squashfs-tools
|
||||||
@@ -53,10 +53,10 @@ jobs:
|
|||||||
echo 'RUSTFLAGS="--cfg tokio_unstable"' >> $GITHUB_ENV
|
echo 'RUSTFLAGS="--cfg tokio_unstable"' >> $GITHUB_ENV
|
||||||
if: github.event_name == 'workflow_dispatch' && inputs.add_tokio_unstable == true
|
if: github.event_name == 'workflow_dispatch' && inputs.add_tokio_unstable == true
|
||||||
|
|
||||||
- name: Install Rust stable
|
- name: Install Rust toolchain
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
toolchain: 1.88.0
|
toolchain: ${{ vars.REQUIRED_RUSTC_VERSION }}
|
||||||
override: true
|
override: true
|
||||||
|
|
||||||
- name: Build all binaries
|
- name: Build all binaries
|
||||||
@@ -66,7 +66,7 @@ jobs:
|
|||||||
args: --workspace --release ${{ env.CARGO_FEATURES }}
|
args: --workspace --release ${{ env.CARGO_FEATURES }}
|
||||||
|
|
||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: my-artifact
|
name: my-artifact
|
||||||
path: |
|
path: |
|
||||||
|
|||||||
@@ -9,11 +9,12 @@ jobs:
|
|||||||
if: ${{ (startsWith(github.ref, 'refs/tags/nym-contracts-') && github.event_name == 'release') || github.event_name == 'workflow_dispatch' }}
|
if: ${{ (startsWith(github.ref, 'refs/tags/nym-contracts-') && github.event_name == 'release') || github.event_name == 'workflow_dispatch' }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install Rust stable
|
- name: Install Rust toolchain
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
|
toolchain: ${{ vars.REQUIRED_RUSTC_VERSION }}
|
||||||
target: wasm32-unknown-unknown
|
target: wasm32-unknown-unknown
|
||||||
override: true
|
override: true
|
||||||
|
|
||||||
@@ -26,14 +27,14 @@ jobs:
|
|||||||
run: make contracts
|
run: make contracts
|
||||||
|
|
||||||
- name: Upload Mixnet Contract Artifact
|
- name: Upload Mixnet Contract Artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: mixnet_contract.wasm
|
name: mixnet_contract.wasm
|
||||||
path: contracts/target/wasm32-unknown-unknown/release/mixnet_contract.wasm
|
path: contracts/target/wasm32-unknown-unknown/release/mixnet_contract.wasm
|
||||||
retention-days: 5
|
retention-days: 5
|
||||||
|
|
||||||
- name: Upload Vesting Contract Artifact
|
- name: Upload Vesting Contract Artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: vesting_contract.wasm
|
name: vesting_contract.wasm
|
||||||
path: contracts/target/wasm32-unknown-unknown/release/vesting_contract.wasm
|
path: contracts/target/wasm32-unknown-unknown/release/vesting_contract.wasm
|
||||||
|
|||||||
@@ -21,17 +21,17 @@ jobs:
|
|||||||
release_tag: ${{ github.ref_name }}
|
release_tag: ${{ github.ref_name }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Node
|
- name: Node
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 21
|
node-version: 21
|
||||||
|
|
||||||
- name: Install Rust stable
|
- name: Install Rust toolchain
|
||||||
uses: dtolnay/rust-toolchain@stable
|
uses: dtolnay/rust-toolchain@stable
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: ${{ vars.REQUIRED_RUSTC_VERSION }}
|
||||||
|
|
||||||
- name: Add Rust target for x86_64-apple-darwin
|
- name: Add Rust target for x86_64-apple-darwin
|
||||||
run: rustup target add x86_64-apple-darwin
|
run: rustup target add x86_64-apple-darwin
|
||||||
@@ -108,7 +108,7 @@ jobs:
|
|||||||
cd -
|
cd -
|
||||||
|
|
||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: nym-wallet.app.tar.gz
|
name: nym-wallet.app.tar.gz
|
||||||
path: nym-wallet/target/x86_64-apple-darwin/release/bundle/macos/nym-wallet.app.tar.gz
|
path: nym-wallet/target/x86_64-apple-darwin/release/bundle/macos/nym-wallet.app.tar.gz
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ jobs:
|
|||||||
release_tag: ${{ github.ref_name }}
|
release_tag: ${{ github.ref_name }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install system dependencies
|
- name: Install system dependencies
|
||||||
run: |
|
run: |
|
||||||
@@ -33,10 +33,10 @@ jobs:
|
|||||||
node-version: 21
|
node-version: 21
|
||||||
cache: 'yarn'
|
cache: 'yarn'
|
||||||
|
|
||||||
- name: Install Rust stable
|
- name: Install Rust toolchain
|
||||||
uses: dtolnay/rust-toolchain@stable
|
uses: dtolnay/rust-toolchain@stable
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: ${{ vars.REQUIRED_RUSTC_VERSION }}
|
||||||
|
|
||||||
- name: Install project dependencies
|
- name: Install project dependencies
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -97,7 +97,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: nym-wallet-appimage.tar.gz
|
name: nym-wallet-appimage.tar.gz
|
||||||
path: |
|
path: |
|
||||||
|
|||||||
@@ -27,12 +27,12 @@ jobs:
|
|||||||
release_tag: ${{ github.ref_name }}
|
release_tag: ${{ github.ref_name }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install Rust stable
|
- name: Install Rust toolchain
|
||||||
uses: dtolnay/rust-toolchain@stable
|
uses: dtolnay/rust-toolchain@stable
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: ${{ vars.REQUIRED_RUSTC_VERSION }}
|
||||||
|
|
||||||
- name: Setup MSBuild.exe
|
- name: Setup MSBuild.exe
|
||||||
uses: microsoft/setup-msbuild@v2
|
uses: microsoft/setup-msbuild@v2
|
||||||
@@ -128,7 +128,7 @@ jobs:
|
|||||||
find . -name "*.msi" -type f
|
find . -name "*.msi" -type f
|
||||||
|
|
||||||
- name: Upload Artifact
|
- name: Upload Artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: nym-wallet.msi
|
name: nym-wallet.msi
|
||||||
path: |
|
path: |
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install Java
|
- name: Install Java
|
||||||
uses: actions/setup-java@v5
|
uses: actions/setup-java@v5
|
||||||
@@ -76,7 +76,7 @@ jobs:
|
|||||||
apk/nyms5-arch64-release.apk
|
apk/nyms5-arch64-release.apk
|
||||||
|
|
||||||
- name: Upload APKs
|
- name: Upload APKs
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: nyms5-apk-arch64
|
name: nyms5-apk-arch64
|
||||||
path: |
|
path: |
|
||||||
@@ -89,9 +89,9 @@ jobs:
|
|||||||
runs-on: custom-linux
|
runs-on: custom-linux
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
- name: Download binary artifact
|
- name: Download binary artifact
|
||||||
uses: actions/download-artifact@v5
|
uses: actions/download-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: nyms5-apk-arch64
|
name: nyms5-apk-arch64
|
||||||
path: apk
|
path: apk
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
publish:
|
publish:
|
||||||
runs-on: arc-ubuntu-22.04
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install Node
|
- name: Install Node
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
@@ -17,10 +17,13 @@ jobs:
|
|||||||
- name: Setup yarn
|
- name: Setup yarn
|
||||||
run: npm install -g yarn
|
run: npm install -g yarn
|
||||||
|
|
||||||
- name: Install Rust stable
|
- name: Install rust toolchain
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
profile: minimal
|
||||||
|
toolchain: ${{ vars.REQUIRED_RUSTC_VERSION }}
|
||||||
|
override: true
|
||||||
|
components: rustfmt, clippy
|
||||||
|
|
||||||
- name: Install wasm-pack
|
- name: Install wasm-pack
|
||||||
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
|
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
|
||||||
@@ -29,9 +32,9 @@ jobs:
|
|||||||
run: cargo install wasm-opt
|
run: cargo install wasm-opt
|
||||||
|
|
||||||
- name: Set up Go
|
- name: Set up Go
|
||||||
uses: actions/setup-go@v5
|
uses: actions/setup-go@v6
|
||||||
with:
|
with:
|
||||||
go-version: "1.23.7"
|
go-version: "1.24.6"
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: yarn
|
run: yarn
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ jobs:
|
|||||||
password: ${{ secrets.HARBOR_ROBOT_SECRET }}
|
password: ${{ secrets.HARBOR_ROBOT_SECRET }}
|
||||||
|
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure git identity
|
- name: Configure git identity
|
||||||
run: |
|
run: |
|
||||||
@@ -26,7 +26,7 @@ jobs:
|
|||||||
git config --global user.name "Lawrence Stalder"
|
git config --global user.name "Lawrence Stalder"
|
||||||
|
|
||||||
- name: Get version from cargo.toml
|
- name: Get version from cargo.toml
|
||||||
uses: mikefarah/yq@v4.47.1
|
uses: mikefarah/yq@v4.52.4
|
||||||
id: get_version
|
id: get_version
|
||||||
with:
|
with:
|
||||||
cmd: yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/nym-credential-proxy/Cargo.toml
|
cmd: yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/nym-credential-proxy/Cargo.toml
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ env:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-container:
|
build-container:
|
||||||
runs-on: arc-ubuntu-22.04-dind
|
runs-on: arc-linux-latest-dind
|
||||||
steps:
|
steps:
|
||||||
- name: Login to Harbor
|
- name: Login to Harbor
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
@@ -18,7 +18,7 @@ jobs:
|
|||||||
password: ${{ secrets.HARBOR_ROBOT_SECRET }}
|
password: ${{ secrets.HARBOR_ROBOT_SECRET }}
|
||||||
|
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure git identity
|
- name: Configure git identity
|
||||||
run: |
|
run: |
|
||||||
@@ -26,7 +26,7 @@ jobs:
|
|||||||
git config --global user.name "Lawrence Stalder"
|
git config --global user.name "Lawrence Stalder"
|
||||||
|
|
||||||
- name: Get version from cargo.toml
|
- name: Get version from cargo.toml
|
||||||
uses: mikefarah/yq@v4.47.1
|
uses: mikefarah/yq@v4.52.4
|
||||||
id: get_version
|
id: get_version
|
||||||
with:
|
with:
|
||||||
cmd: yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/Cargo.toml
|
cmd: yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/Cargo.toml
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ jobs:
|
|||||||
password: ${{ secrets.HARBOR_ROBOT_SECRET }}
|
password: ${{ secrets.HARBOR_ROBOT_SECRET }}
|
||||||
|
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure git identity
|
- name: Configure git identity
|
||||||
run: |
|
run: |
|
||||||
@@ -26,7 +26,7 @@ jobs:
|
|||||||
git config --global user.name "Lawrence Stalder"
|
git config --global user.name "Lawrence Stalder"
|
||||||
|
|
||||||
- name: Get version from cargo.toml
|
- name: Get version from cargo.toml
|
||||||
uses: mikefarah/yq@v4.47.1
|
uses: mikefarah/yq@v4.52.4
|
||||||
id: get_version
|
id: get_version
|
||||||
with:
|
with:
|
||||||
cmd: yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/nym-network-monitor/Cargo.toml
|
cmd: yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/nym-network-monitor/Cargo.toml
|
||||||
|
|||||||
@@ -3,11 +3,6 @@ name: Build and upload Node Status agent container to harbor.nymte.ch
|
|||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
gateway_probe_git_ref:
|
|
||||||
type: string
|
|
||||||
default: nym-vpn-core-v1.4.0
|
|
||||||
required: true
|
|
||||||
description: Which gateway probe git ref to build the image with
|
|
||||||
release_image:
|
release_image:
|
||||||
description: 'Tag image as a release'
|
description: 'Tag image as a release'
|
||||||
required: true
|
required: true
|
||||||
@@ -30,7 +25,7 @@ jobs:
|
|||||||
password: ${{ secrets.HARBOR_ROBOT_SECRET }}
|
password: ${{ secrets.HARBOR_ROBOT_SECRET }}
|
||||||
|
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure git identity
|
- name: Configure git identity
|
||||||
run: |
|
run: |
|
||||||
@@ -43,16 +38,6 @@ jobs:
|
|||||||
VERSION=$(yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/Cargo.toml)
|
VERSION=$(yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/Cargo.toml)
|
||||||
echo "result=$VERSION" >> $GITHUB_OUTPUT
|
echo "result=$VERSION" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: cleanup-gateway-probe-ref
|
|
||||||
id: cleanup_gateway_probe_ref
|
|
||||||
run: |
|
|
||||||
GATEWAY_PROBE_GIT_REF=${{ github.event.inputs.gateway_probe_git_ref }}
|
|
||||||
GIT_REF_SLUG="${GATEWAY_PROBE_GIT_REF//\//-}"
|
|
||||||
echo "git_ref=${GIT_REF_SLUG}" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Set GIT_TAG variable
|
|
||||||
run: echo "GIT_TAG=${{ env.WORKING_DIRECTORY }}-${{ steps.get_version.outputs.result }}-${{ steps.cleanup_gateway_probe_ref.outputs.git_ref }}" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Initialize RELEASE_TAG
|
- name: Initialize RELEASE_TAG
|
||||||
run: echo "RELEASE_TAG=" >> $GITHUB_ENV
|
run: echo "RELEASE_TAG=" >> $GITHUB_ENV
|
||||||
|
|
||||||
@@ -61,24 +46,12 @@ jobs:
|
|||||||
run: echo "RELEASE_TAG=golden-" >> $GITHUB_ENV
|
run: echo "RELEASE_TAG=golden-" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Set IMAGE_NAME_AND_TAGS variable
|
- name: Set IMAGE_NAME_AND_TAGS variable
|
||||||
run: echo "IMAGE_NAME_AND_TAGS=${{ env.CONTAINER_NAME }}:${{ env.RELEASE_TAG }}${{ steps.get_version.outputs.result }}-${{ steps.cleanup_gateway_probe_ref.outputs.git_ref }}" >> $GITHUB_ENV
|
run: echo "IMAGE_NAME_AND_TAGS=${{ env.CONTAINER_NAME }}:${{ env.RELEASE_TAG }}${{ steps.get_version.outputs.result }}" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: New env vars
|
- name: New env vars
|
||||||
run: echo "RELEASE_TAG='$RELEASE_TAG' GIT_TAG='$GIT_TAG' IMAGE_NAME_AND_TAGS='$IMAGE_NAME_AND_TAGS'"
|
run: echo "RELEASE_TAG='$RELEASE_TAG' IMAGE_NAME_AND_TAGS='$IMAGE_NAME_AND_TAGS'"
|
||||||
|
|
||||||
# - name: Remove existing tag if exists
|
|
||||||
# run: |
|
|
||||||
# if git rev-parse $${{ env.GIT_TAG }} >/dev/null 2>&1; then
|
|
||||||
# git push --delete origin $${{ env.GIT_TAG }}
|
|
||||||
# git tag -d $${{ env.GIT_TAG }}
|
|
||||||
# fi
|
|
||||||
|
|
||||||
# - name: Create tag
|
|
||||||
# run: |
|
|
||||||
# git tag -a $${{ env.GIT_TAG }} -m "Version ${{ steps.get_version.outputs.result }}-${{ steps.cleanup_gateway_probe_ref.outputs.git_ref }}"
|
|
||||||
# git push origin $${{ env.GIT_TAG }}
|
|
||||||
|
|
||||||
- name: BuildAndPushImageOnHarbor
|
- name: BuildAndPushImageOnHarbor
|
||||||
run: |
|
run: |
|
||||||
docker build --build-arg GIT_REF=${{ github.event.inputs.gateway_probe_git_ref }} -f ${{ env.WORKING_DIRECTORY }}/Dockerfile . -t harbor.nymte.ch/nym/${{ env.IMAGE_NAME_AND_TAGS }}
|
docker build -f ${{ env.WORKING_DIRECTORY }}/Dockerfile . -t harbor.nymte.ch/nym/${{ env.IMAGE_NAME_AND_TAGS }}
|
||||||
docker push harbor.nymte.ch/nym/${{ env.CONTAINER_NAME }} --all-tags
|
docker push harbor.nymte.ch/nym/${{ env.CONTAINER_NAME }} --all-tags
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ jobs:
|
|||||||
password: ${{ secrets.HARBOR_ROBOT_SECRET }}
|
password: ${{ secrets.HARBOR_ROBOT_SECRET }}
|
||||||
|
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure git identity
|
- name: Configure git identity
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ jobs:
|
|||||||
password: ${{ secrets.HARBOR_ROBOT_SECRET }}
|
password: ${{ secrets.HARBOR_ROBOT_SECRET }}
|
||||||
|
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure git identity
|
- name: Configure git identity
|
||||||
run: |
|
run: |
|
||||||
@@ -26,7 +26,7 @@ jobs:
|
|||||||
git config --global user.name "Lawrence Stalder"
|
git config --global user.name "Lawrence Stalder"
|
||||||
|
|
||||||
- name: Get version from cargo.toml
|
- name: Get version from cargo.toml
|
||||||
uses: mikefarah/yq@v4.47.1
|
uses: mikefarah/yq@v4.52.4
|
||||||
id: get_version
|
id: get_version
|
||||||
with:
|
with:
|
||||||
cmd: yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/nym-api/Cargo.toml
|
cmd: yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/nym-api/Cargo.toml
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ jobs:
|
|||||||
password: ${{ secrets.HARBOR_ROBOT_SECRET }}
|
password: ${{ secrets.HARBOR_ROBOT_SECRET }}
|
||||||
|
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure git identity
|
- name: Configure git identity
|
||||||
run: |
|
run: |
|
||||||
@@ -26,7 +26,7 @@ jobs:
|
|||||||
git config --global user.name "Lawrence Stalder"
|
git config --global user.name "Lawrence Stalder"
|
||||||
|
|
||||||
- name: Get version from cargo.toml
|
- name: Get version from cargo.toml
|
||||||
uses: mikefarah/yq@v4.47.1
|
uses: mikefarah/yq@v4.52.4
|
||||||
id: get_version
|
id: get_version
|
||||||
with:
|
with:
|
||||||
cmd: yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/Cargo.toml
|
cmd: yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/Cargo.toml
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ jobs:
|
|||||||
password: ${{ secrets.HARBOR_ROBOT_SECRET }}
|
password: ${{ secrets.HARBOR_ROBOT_SECRET }}
|
||||||
|
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure git identity
|
- name: Configure git identity
|
||||||
run: |
|
run: |
|
||||||
@@ -26,7 +26,7 @@ jobs:
|
|||||||
git config --global user.name "Lawrence Stalder"
|
git config --global user.name "Lawrence Stalder"
|
||||||
|
|
||||||
- name: Get version from cargo.toml
|
- name: Get version from cargo.toml
|
||||||
uses: mikefarah/yq@v4.47.1
|
uses: mikefarah/yq@v4.52.4
|
||||||
id: get_version
|
id: get_version
|
||||||
with:
|
with:
|
||||||
cmd: yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/Cargo.toml
|
cmd: yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/Cargo.toml
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ env:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-container:
|
build-container:
|
||||||
runs-on: arc-ubuntu-22.04-dind
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Login to Harbor
|
- name: Login to Harbor
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
@@ -18,7 +18,7 @@ jobs:
|
|||||||
password: ${{ secrets.HARBOR_ROBOT_SECRET }}
|
password: ${{ secrets.HARBOR_ROBOT_SECRET }}
|
||||||
|
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure git identity
|
- name: Configure git identity
|
||||||
run: |
|
run: |
|
||||||
@@ -26,7 +26,7 @@ jobs:
|
|||||||
git config --global user.name "Lawrence Stalder"
|
git config --global user.name "Lawrence Stalder"
|
||||||
|
|
||||||
- name: Get version from cargo.toml
|
- name: Get version from cargo.toml
|
||||||
uses: mikefarah/yq@v4.47.1
|
uses: mikefarah/yq@v4.52.4
|
||||||
id: get_version
|
id: get_version
|
||||||
with:
|
with:
|
||||||
cmd: yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/Cargo.toml
|
cmd: yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/Cargo.toml
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ jobs:
|
|||||||
password: ${{ secrets.HARBOR_ROBOT_SECRET }}
|
password: ${{ secrets.HARBOR_ROBOT_SECRET }}
|
||||||
|
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure git identity
|
- name: Configure git identity
|
||||||
run: |
|
run: |
|
||||||
@@ -26,7 +26,7 @@ jobs:
|
|||||||
git config --global user.name "Lawrence Stalder"
|
git config --global user.name "Lawrence Stalder"
|
||||||
|
|
||||||
- name: Get version from cargo.toml
|
- name: Get version from cargo.toml
|
||||||
uses: mikefarah/yq@v4.47.1
|
uses: mikefarah/yq@v4.52.4
|
||||||
id: get_version
|
id: get_version
|
||||||
with:
|
with:
|
||||||
cmd: yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/Cargo.toml
|
cmd: yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/Cargo.toml
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Check out repository code
|
- name: Check out repository code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 20
|
||||||
@@ -30,7 +30,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
release-tag-or-name-or-id: ${{ inputs.release_tag }}
|
release-tag-or-name-or-id: ${{ inputs.release_tag }}
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: Asset Hashes
|
name: Asset Hashes
|
||||||
path: hashes.json
|
path: hashes.json
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
name: Resume publish to crates.io
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
resume_after:
|
||||||
|
description: "Last successfully published crate (will start from the next one)"
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
publish:
|
||||||
|
runs-on: arc-linux-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout repo
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- name: Install rust toolchain
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: Install cargo-workspaces
|
||||||
|
run: cargo install cargo-workspaces
|
||||||
|
|
||||||
|
- name: Publish remaining crates
|
||||||
|
env:
|
||||||
|
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
|
||||||
|
run: |
|
||||||
|
# Get crates in publish order, skip up to and including resume_after
|
||||||
|
cargo workspaces plan 2>/dev/null | sed -n '/^${{ inputs.resume_after }}$/,$p' | tail -n +2 | while read crate; do
|
||||||
|
echo "Publishing $crate..."
|
||||||
|
cargo publish -p "$crate" --allow-dirty
|
||||||
|
echo "Waiting 600s before next publish..."
|
||||||
|
sleep 600
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Show package versions
|
||||||
|
run: cargo workspaces list --long
|
||||||
@@ -4,51 +4,23 @@ This is a collection of scripts and files to support GitHub Actions.
|
|||||||
|
|
||||||
## Sending Notifications
|
## Sending Notifications
|
||||||
|
|
||||||
These scripts send CI notifications to Matrix by creating messages from templates and env vars passed from GitHub Actions.
|
These scripts send CI notifications to Matrix by creating messages from templates and env vars passed from GitHub
|
||||||
|
Actions.
|
||||||
### Adding notifications to a GitHub Action
|
|
||||||
|
|
||||||
```
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
...
|
|
||||||
- name: Notifications - Node Install
|
|
||||||
run: npm install
|
|
||||||
working-directory: .github/workflows/support-files/notifications
|
|
||||||
- name: Notifications - Send
|
|
||||||
env:
|
|
||||||
NYM_NOTIFICATION_KIND: "my-component"
|
|
||||||
GIT_BRANCH: "${GITHUB_REF##*/}"
|
|
||||||
MATRIX_SERVER: "${{ secrets.MATRIX_SERVER }}"
|
|
||||||
MATRIX_ROOM: "${{ secrets.MATRIX_ROOM }}"
|
|
||||||
MATRIX_USER_ID: "${{ secrets.MATRIX_USER_ID }}"
|
|
||||||
MATRIX_TOKEN: "${{ secrets.MATRIX_TOKEN }}"
|
|
||||||
MATRIX_DEVICE_ID: "${{ secrets.MATRIX_DEVICE_ID }}"
|
|
||||||
IS_SUCCESS: "${{ job.status == 'success' }}"
|
|
||||||
uses: docker://keybaseio/client:stable-node
|
|
||||||
with:
|
|
||||||
args: .github/workflows/support-files/notifications/entry_point.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
Notifications are run by adding the snippet above to a GitHub Action, and:
|
|
||||||
|
|
||||||
1. Installing node packages needed at run time
|
|
||||||
2. Set the env vars as required:
|
|
||||||
- `NYM_NOTIFICATION_KIND` matches the directory in `.github/workflows/support-files/${NYM_NOTIFICATION_KIND}` to provide the templates and extra scripting in `index.js`
|
|
||||||
- Matrix credentials, room and other env vars for the status of the build and repo
|
|
||||||
3. Replacing the default entry point shell script on the `keybaseio/client:stable-node` docker image to run `.github/workflows/support-files/notifications/entry_point.sh`
|
|
||||||
|
|
||||||
### Running locally
|
### Running locally
|
||||||
|
|
||||||
You will need:
|
You will need:
|
||||||
|
|
||||||
- Node 16 LTS
|
- Node 16 LTS
|
||||||
- npm
|
- npm
|
||||||
|
|
||||||
Copy `.github/workflows/support-files/.env.example` to `.github/workflows/support-files/.env` and valid Matrix credentials.
|
Copy `.github/workflows/support-files/.env.example` to `.github/workflows/support-files/.env` and valid Matrix
|
||||||
|
credentials.
|
||||||
|
|
||||||
Then run `npm install` to get dependencies.
|
Then run `npm install` to get dependencies.
|
||||||
|
|
||||||
Start development mode for the notification type you want either by passing the value as an env var called `NYM_NOTIFICATION_KIND` or set the `.env` file values correctly.
|
Start development mode for the notification type you want either by passing the value as an env var called
|
||||||
|
`NYM_NOTIFICATION_KIND` or set the `.env` file values correctly.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd .github/workflows/support-files
|
cd .github/workflows/support-files
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# pass exit codes out to GitHub Actions
|
|
||||||
set -euxo pipefail
|
|
||||||
|
|
||||||
# change to the directory that contains this script
|
|
||||||
cd "${0%/*}"
|
|
||||||
|
|
||||||
# run the node script
|
|
||||||
node send_message.js
|
|
||||||
@@ -1,126 +0,0 @@
|
|||||||
require('dotenv').config();
|
|
||||||
|
|
||||||
const { sendMatrixMessage } = require('./send_message_to_matrix');
|
|
||||||
|
|
||||||
let context = {
|
|
||||||
kinds: ['nym-wallet', 'ts-packages', 'network-explorer', 'nightly', 'nym-connect','security','ci-docs','cd-docs','ci-dev','cd-dev'],
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validate that all required env and context vars are available
|
|
||||||
*/
|
|
||||||
function validateContext() {
|
|
||||||
if (!context.env.NYM_NOTIFICATION_KIND) {
|
|
||||||
throw new Error(
|
|
||||||
'Please set env var NYM_NOTIFICATION_KIND with the project kind that matches a directory in ".github/workflows/support-files"',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (!context.kinds.includes(context.env.NYM_NOTIFICATION_KIND)) {
|
|
||||||
throw new Error(`Env var NYM_NOTIFICATION_KIND is not in ${context.kinds}`);
|
|
||||||
}
|
|
||||||
if (!context.env.NYM_PROJECT_NAME) {
|
|
||||||
throw new Error(
|
|
||||||
'Please set env var NYM_PROJECT_NAME with the project name for displaying in notification messages',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (context.env.MATRIX_ROOM) {
|
|
||||||
if (!context.env.MATRIX_SERVER) {
|
|
||||||
throw new Error(
|
|
||||||
'Matrix server is not defined. Please set env var MATRIX_SERVER',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (!context.env.MATRIX_USER_ID) {
|
|
||||||
throw new Error(
|
|
||||||
'Matrix user id is not defined. Please set env var MATRIX_USER_ID',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (!context.env.MATRIX_TOKEN) {
|
|
||||||
throw new Error(
|
|
||||||
'Matrix token is not defined. Please set env var MATRIX_TOKEN',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (!context.env.MATRIX_DEVICE_ID) {
|
|
||||||
throw new Error(
|
|
||||||
'Matrix device id is not defined. Please set env var MATRIX_DEVICE_ID',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a context that will be available in the templates for rendering notifications
|
|
||||||
*/
|
|
||||||
function createTemplateContext() {
|
|
||||||
const options = { dateStyle: 'full', timeStyle: 'long' };
|
|
||||||
context.timestamp = new Date().toLocaleString(undefined, options);
|
|
||||||
|
|
||||||
// add environment to template context and validate
|
|
||||||
context.env = process.env;
|
|
||||||
try {
|
|
||||||
validateContext();
|
|
||||||
} catch (e) {
|
|
||||||
if(process.env.SHOW_DEBUG) {
|
|
||||||
// recursively print the context for easy debugging and rethrow the error
|
|
||||||
console.dir({ context }, { depth: null });
|
|
||||||
}
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
|
|
||||||
context.kind = context.env.NYM_NOTIFICATION_KIND;
|
|
||||||
|
|
||||||
if (!context.env.GIT_BRANCH_NAME) {
|
|
||||||
context.env.GIT_BRANCH_NAME = context.env.GITHUB_REF.split('/')
|
|
||||||
.slice(2)
|
|
||||||
.join('/');
|
|
||||||
}
|
|
||||||
|
|
||||||
context.status = process.env.IS_SUCCESS === 'true' ? 'success' : 'failure';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Uses the `kind` set in the context to process the context and generate a notification message
|
|
||||||
* @returns {Promise<string>} A string notification message body
|
|
||||||
*/
|
|
||||||
async function processKindScript() {
|
|
||||||
const script = require(`../${context.kind}`);
|
|
||||||
if (!script.addToContextAndValidate) {
|
|
||||||
throw new Error(
|
|
||||||
`"./${context.kind}/index.js" does not export a method called "async addToContextAndValidate(context)"`,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (!script.getMessageBody) {
|
|
||||||
throw new Error(
|
|
||||||
`"./${context.kind}/index.js" does not export a method called "async getMessageBody(context)"`,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// call the script to modify and validate the context
|
|
||||||
await script.addToContextAndValidate(context);
|
|
||||||
|
|
||||||
// let the script create a message body and return the result as a string for sending
|
|
||||||
return await script.getMessageBody(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The main function, as async so that await syntax is available
|
|
||||||
*/
|
|
||||||
async function main() {
|
|
||||||
createTemplateContext();
|
|
||||||
console.log(`Sending notification for kind "${context.kind}"...`);
|
|
||||||
const messageBody = await processKindScript();
|
|
||||||
if(process.env.SHOW_DEBUG) {
|
|
||||||
console.log('-----------------------------------------');
|
|
||||||
console.log(messageBody);
|
|
||||||
console.log('-----------------------------------------');
|
|
||||||
}
|
|
||||||
if(context.env.MATRIX_ROOM) {
|
|
||||||
await sendMatrixMessage(context, messageBody, context.env.MATRIX_ROOM)
|
|
||||||
}
|
|
||||||
if(context.env.MATRIX_ROOM_OF_SHAME && context.env.IS_SUCCESS !== 'true') {
|
|
||||||
// when a job fails
|
|
||||||
await sendMatrixMessage(context, messageBody, context.env.MATRIX_ROOM_OF_SHAME)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// call main function and let NodeJS handle the promise
|
|
||||||
main();
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
const sdk = require('matrix-js-sdk');
|
|
||||||
global.Olm = require('olm');
|
|
||||||
const { LocalStorage } = require('node-localstorage');
|
|
||||||
const localStorage = new LocalStorage('./scratch');
|
|
||||||
const {
|
|
||||||
LocalStorageCryptoStore,
|
|
||||||
} = require('matrix-js-sdk/lib/crypto/store/localStorage-crypto-store');
|
|
||||||
var showdown = require('showdown');
|
|
||||||
|
|
||||||
// hide all matrix client output
|
|
||||||
console.error = (error) => console.log('❌ error: ', error);
|
|
||||||
process.stderr.write = () => {};
|
|
||||||
process.stdout.write = () => {};
|
|
||||||
|
|
||||||
|
|
||||||
function createClient(context, room, message) {
|
|
||||||
const server = context.env.MATRIX_SERVER;
|
|
||||||
const token = context.env.MATRIX_TOKEN;
|
|
||||||
const deviceId = context.env.MATRIX_DEVICE_ID;
|
|
||||||
const userId = context.env.MATRIX_USER_ID;
|
|
||||||
|
|
||||||
const client = sdk.createClient({
|
|
||||||
baseUrl: server,
|
|
||||||
accessToken: token,
|
|
||||||
userId,
|
|
||||||
deviceId,
|
|
||||||
sessionStore: new sdk.WebStorageSessionStore(localStorage),
|
|
||||||
cryptoStore: new LocalStorageCryptoStore(localStorage),
|
|
||||||
});
|
|
||||||
|
|
||||||
client.on('sync', async function(state, prevState, res) {
|
|
||||||
if (state !== 'PREPARED') return;
|
|
||||||
client.setGlobalErrorOnUnknownDevices(false);
|
|
||||||
try {
|
|
||||||
await client.joinRoom(room);
|
|
||||||
await client.sendEvent(
|
|
||||||
room,
|
|
||||||
'm.room.message',
|
|
||||||
{
|
|
||||||
msgtype: 'm.text',
|
|
||||||
format: 'org.matrix.custom.html',
|
|
||||||
body: message,
|
|
||||||
formatted_body: message,
|
|
||||||
},
|
|
||||||
'',
|
|
||||||
);
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Job failed: ' + error.message);
|
|
||||||
}
|
|
||||||
client.stopClient();
|
|
||||||
process.exit(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
return client;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function sendMatrixMessage(contextArg, messageAsMarkdown, roomId) {
|
|
||||||
const converter = new showdown.Converter();
|
|
||||||
const messageAsHtml = converter.makeHtml(messageAsMarkdown);
|
|
||||||
const client = createClient(contextArg, roomId, messageAsHtml);
|
|
||||||
await client.initCrypto();
|
|
||||||
await client.startClient({ initialSyncLimit: 1 });
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
sendMatrixMessage,
|
|
||||||
};
|
|
||||||
+14
@@ -63,3 +63,17 @@ nym-api/redocly/formatted-openapi.json
|
|||||||
|
|
||||||
**/settings.sql
|
**/settings.sql
|
||||||
**/enter_db.sh
|
**/enter_db.sh
|
||||||
|
|
||||||
|
*.profraw
|
||||||
|
.beads
|
||||||
|
CLAUDE.md
|
||||||
|
.claude
|
||||||
|
.superego
|
||||||
|
|
||||||
|
# Superego (machine-specific paths)
|
||||||
|
.superego/
|
||||||
|
.claude/hooks/superego/
|
||||||
|
.claude/settings.json
|
||||||
|
|
||||||
|
/notes
|
||||||
|
/target-otel
|
||||||
|
|||||||
+388
@@ -4,6 +4,394 @@ Post 1.0.0 release, the changelog format is based on [Keep a Changelog](https://
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [2026.4-quark] (2026-02-24)
|
||||||
|
|
||||||
|
- Enhance CI workflow with feature inputs ([#6462])
|
||||||
|
- Chore/revert 6433 ([#6445])
|
||||||
|
- Lp/stateless handshake ([#6437])
|
||||||
|
- build(deps-dev): bump webpack from 5.98.0 to 5.105.0 in /wasm/client/internal-dev ([#6435])
|
||||||
|
- build(deps-dev): bump webpack from 5.102.1 to 5.104.1 ([#6432])
|
||||||
|
- build(deps-dev): bump webpack from 5.98.0 to 5.105.0 in /wasm/mix-fetch/internal-dev ([#6431])
|
||||||
|
- build(deps-dev): bump webpack from 5.94.0 to 5.104.1 in /nym-credential-proxy/vpn-api-lib-wasm/internal-dev ([#6430])
|
||||||
|
- build(deps-dev): bump webpack from 5.77.0 to 5.104.1 in /wasm/zknym-lib/internal-dev ([#6429])
|
||||||
|
- build(deps-dev): bump webpack from 5.76.0 to 5.105.0 in /clients/native/examples/js-examples/websocket ([#6428])
|
||||||
|
- HTTP & DNS Improvements ([#6423])
|
||||||
|
- Endpoint for exit GW IPs ([#6418])
|
||||||
|
- build(deps): bump bytes from 1.6.0 to 1.11.1 in /contracts ([#6416])
|
||||||
|
- build(deps): bump @isaacs/brace-expansion from 5.0.0 to 5.0.1 ([#6415])
|
||||||
|
- build(deps): bump bytes from 1.11.0 to 1.11.1 ([#6414])
|
||||||
|
- build(deps): bump mikefarah/yq from 4.50.1 to 4.52.2 ([#6407])
|
||||||
|
- build(deps-dev): bump eslint from 8.57.1 to 9.26.0 ([#6405])
|
||||||
|
- Update reqwest to v0.13.1 ([#6401])
|
||||||
|
- build(deps): bump next from 15.5.9 to 16.1.5 in /documentation/docs ([#6387])
|
||||||
|
- build(deps): bump next from 15.4.10 to 16.1.5 in /nym-node-status-api/nym-node-status-ui ([#6385])
|
||||||
|
- build(deps): bump lodash from 4.17.21 to 4.17.23 ([#6369])
|
||||||
|
- build(deps): bump lodash-es from 4.17.21 to 4.17.23 ([#6360])
|
||||||
|
- build(deps-dev): bump lodash from 4.17.21 to 4.17.23 in /sdk/typescript/codegen/contract-clients ([#6359])
|
||||||
|
- build(deps): bump lodash from 4.17.21 to 4.17.23 in /sdk/typescript/packages/nodejs-client ([#6354])
|
||||||
|
- build(deps): bump lodash from 4.17.21 to 4.17.23 in /documentation/docs ([#6353])
|
||||||
|
- build(deps): bump lodash from 4.17.21 to 4.17.23 in /clients/native/examples/js-examples/websocket ([#6351])
|
||||||
|
- build(deps): bump lodash-es from 4.17.21 to 4.17.23 in /documentation/docs ([#6350])
|
||||||
|
- build(deps): bump diff from 5.2.0 to 5.2.2 in /documentation/docs ([#6345])
|
||||||
|
- Max/crates publishing tweaks ([#6343])
|
||||||
|
- build(deps): bump h3 from 1.15.4 to 1.15.5 ([#6339])
|
||||||
|
- build(deps): bump h3 from 1.15.4 to 1.15.5 in /documentation/docs ([#6332])
|
||||||
|
- build(deps): bump undici from 6.21.3 to 6.23.0 in /documentation/docs ([#6325])
|
||||||
|
- build(deps): bump rsa from 0.9.8 to 0.9.10 ([#6311])
|
||||||
|
- build(deps): bump qs and express in /wasm/mix-fetch/internal-dev ([#6308])
|
||||||
|
- build(deps): bump qs and express in /clients/native/examples/js-examples/websocket ([#6307])
|
||||||
|
- feat: introduce on-disk cache persistance for major nym-api caches ([#6302])
|
||||||
|
- Fix migrations in the Data Observatory ([#6271])
|
||||||
|
|
||||||
|
[#6462]: https://github.com/nymtech/nym/pull/6462
|
||||||
|
[#6445]: https://github.com/nymtech/nym/pull/6445
|
||||||
|
[#6437]: https://github.com/nymtech/nym/pull/6437
|
||||||
|
[#6435]: https://github.com/nymtech/nym/pull/6435
|
||||||
|
[#6432]: https://github.com/nymtech/nym/pull/6432
|
||||||
|
[#6431]: https://github.com/nymtech/nym/pull/6431
|
||||||
|
[#6430]: https://github.com/nymtech/nym/pull/6430
|
||||||
|
[#6429]: https://github.com/nymtech/nym/pull/6429
|
||||||
|
[#6428]: https://github.com/nymtech/nym/pull/6428
|
||||||
|
[#6423]: https://github.com/nymtech/nym/pull/6423
|
||||||
|
[#6418]: https://github.com/nymtech/nym/pull/6418
|
||||||
|
[#6416]: https://github.com/nymtech/nym/pull/6416
|
||||||
|
[#6415]: https://github.com/nymtech/nym/pull/6415
|
||||||
|
[#6414]: https://github.com/nymtech/nym/pull/6414
|
||||||
|
[#6407]: https://github.com/nymtech/nym/pull/6407
|
||||||
|
[#6405]: https://github.com/nymtech/nym/pull/6405
|
||||||
|
[#6401]: https://github.com/nymtech/nym/pull/6401
|
||||||
|
[#6387]: https://github.com/nymtech/nym/pull/6387
|
||||||
|
[#6385]: https://github.com/nymtech/nym/pull/6385
|
||||||
|
[#6369]: https://github.com/nymtech/nym/pull/6369
|
||||||
|
[#6360]: https://github.com/nymtech/nym/pull/6360
|
||||||
|
[#6359]: https://github.com/nymtech/nym/pull/6359
|
||||||
|
[#6354]: https://github.com/nymtech/nym/pull/6354
|
||||||
|
[#6353]: https://github.com/nymtech/nym/pull/6353
|
||||||
|
[#6351]: https://github.com/nymtech/nym/pull/6351
|
||||||
|
[#6350]: https://github.com/nymtech/nym/pull/6350
|
||||||
|
[#6345]: https://github.com/nymtech/nym/pull/6345
|
||||||
|
[#6343]: https://github.com/nymtech/nym/pull/6343
|
||||||
|
[#6339]: https://github.com/nymtech/nym/pull/6339
|
||||||
|
[#6332]: https://github.com/nymtech/nym/pull/6332
|
||||||
|
[#6325]: https://github.com/nymtech/nym/pull/6325
|
||||||
|
[#6311]: https://github.com/nymtech/nym/pull/6311
|
||||||
|
[#6308]: https://github.com/nymtech/nym/pull/6308
|
||||||
|
[#6307]: https://github.com/nymtech/nym/pull/6307
|
||||||
|
[#6302]: https://github.com/nymtech/nym/pull/6302
|
||||||
|
[#6271]: https://github.com/nymtech/nym/pull/6271
|
||||||
|
|
||||||
|
## [2026.3-parmigiano] (2026-02-10)
|
||||||
|
|
||||||
|
- chore: disable LP on parmigiano branch ([#6422])
|
||||||
|
- revert mixnet-based client fautly changes from LP ([#6420])
|
||||||
|
- [LP fix] Registration client with fallback ([#6419])
|
||||||
|
- Lp/ip pool fixes ([#6412])
|
||||||
|
- [LP-fix] expose wg psk for the vpn-client ([#6411])
|
||||||
|
- LP-fix : configurable LP timeouts ([#6409])
|
||||||
|
- LP-fix : add LP x25519 key to the description ([#6408])
|
||||||
|
- use rng that is Send ([#6404])
|
||||||
|
- use local kem key instead of local x25519 ([#6402])
|
||||||
|
- [LP Gateway Probe] CLI and behavior improvements ([#6400])
|
||||||
|
- lp: attempt to negotiate (and use) protocol version ([#6399])
|
||||||
|
- bugfix: use correct reserved bytes when parsing LpHeader ([#6398])
|
||||||
|
- Lp/bugfix/share ip allocation ([#6395])
|
||||||
|
- feat: use hex-encoding for lp key digests ([#6394])
|
||||||
|
- Add socks5 test to gateway-probe ([#6393])
|
||||||
|
- [LP Gateway probe] Improve file structure ([#6391])
|
||||||
|
- Reduce the size of `HttpClientError` ([#6390])
|
||||||
|
- Lp/two step dvpn reg ([#6386])
|
||||||
|
- Add extra configured nym api url to env ([#6382])
|
||||||
|
- Lp/dvpn psk injection ([#6378])
|
||||||
|
- LP: include signing key digests to LP responses ([#6373])
|
||||||
|
- Lp/use noise x25519 ([#6372])
|
||||||
|
- Topology fallback ([#6363])
|
||||||
|
- NS API socks5 support ([#6361])
|
||||||
|
- LP: modified LPRemotePeer to dynamically choose required KEM key hash ([#6358])
|
||||||
|
- Fix KKT Integration into LP ([#6357])
|
||||||
|
- LP: mixnet reg fixes ([#6356])
|
||||||
|
- LP: announced KEM key hashes ([#6349])
|
||||||
|
- revert faulty drop changes ([#6346])
|
||||||
|
- small qol changes ([#6340])
|
||||||
|
- Apply configured api urls via env ([#6337])
|
||||||
|
- lp chore: make sure to take reserved bytes straight from the header ([#6336])
|
||||||
|
- LP: x25519/ed22519 cleanup round ([#6335])
|
||||||
|
- Lp/encrypted kkt ([#6331])
|
||||||
|
- ensure packets with incompatible versions are rejected ([#6326])
|
||||||
|
- standarise lp serialisation: ([#6324])
|
||||||
|
- Upgrade to def_guard_wireguard v0.8.0 ([#6315])
|
||||||
|
- Max/crates io prep v2 ([#6270])
|
||||||
|
|
||||||
|
[#6422]: https://github.com/nymtech/nym/pull/6422
|
||||||
|
[#6420]: https://github.com/nymtech/nym/pull/6420
|
||||||
|
[#6419]: https://github.com/nymtech/nym/pull/6419
|
||||||
|
[#6412]: https://github.com/nymtech/nym/pull/6412
|
||||||
|
[#6411]: https://github.com/nymtech/nym/pull/6411
|
||||||
|
[#6409]: https://github.com/nymtech/nym/pull/6409
|
||||||
|
[#6408]: https://github.com/nymtech/nym/pull/6408
|
||||||
|
[#6404]: https://github.com/nymtech/nym/pull/6404
|
||||||
|
[#6402]: https://github.com/nymtech/nym/pull/6402
|
||||||
|
[#6400]: https://github.com/nymtech/nym/pull/6400
|
||||||
|
[#6399]: https://github.com/nymtech/nym/pull/6399
|
||||||
|
[#6398]: https://github.com/nymtech/nym/pull/6398
|
||||||
|
[#6395]: https://github.com/nymtech/nym/pull/6395
|
||||||
|
[#6394]: https://github.com/nymtech/nym/pull/6394
|
||||||
|
[#6393]: https://github.com/nymtech/nym/pull/6393
|
||||||
|
[#6391]: https://github.com/nymtech/nym/pull/6391
|
||||||
|
[#6390]: https://github.com/nymtech/nym/pull/6390
|
||||||
|
[#6386]: https://github.com/nymtech/nym/pull/6386
|
||||||
|
[#6382]: https://github.com/nymtech/nym/pull/6382
|
||||||
|
[#6378]: https://github.com/nymtech/nym/pull/6378
|
||||||
|
[#6373]: https://github.com/nymtech/nym/pull/6373
|
||||||
|
[#6372]: https://github.com/nymtech/nym/pull/6372
|
||||||
|
[#6363]: https://github.com/nymtech/nym/pull/6363
|
||||||
|
[#6361]: https://github.com/nymtech/nym/pull/6361
|
||||||
|
[#6358]: https://github.com/nymtech/nym/pull/6358
|
||||||
|
[#6357]: https://github.com/nymtech/nym/pull/6357
|
||||||
|
[#6356]: https://github.com/nymtech/nym/pull/6356
|
||||||
|
[#6349]: https://github.com/nymtech/nym/pull/6349
|
||||||
|
[#6346]: https://github.com/nymtech/nym/pull/6346
|
||||||
|
[#6340]: https://github.com/nymtech/nym/pull/6340
|
||||||
|
[#6337]: https://github.com/nymtech/nym/pull/6337
|
||||||
|
[#6336]: https://github.com/nymtech/nym/pull/6336
|
||||||
|
[#6335]: https://github.com/nymtech/nym/pull/6335
|
||||||
|
[#6331]: https://github.com/nymtech/nym/pull/6331
|
||||||
|
[#6326]: https://github.com/nymtech/nym/pull/6326
|
||||||
|
[#6324]: https://github.com/nymtech/nym/pull/6324
|
||||||
|
[#6315]: https://github.com/nymtech/nym/pull/6315
|
||||||
|
[#6270]: https://github.com/nymtech/nym/pull/6270
|
||||||
|
|
||||||
|
## [2026.2-oscypek] (2026-01-27)
|
||||||
|
|
||||||
|
- bugfix: downgrade gateway protocol to clients proposed version ([#6377])
|
||||||
|
- bugfix: ack fix ([#6364])
|
||||||
|
- Cherry pick/api urls oscypek ([#6348])
|
||||||
|
- Update nix to v0.30.1 ([#6316])
|
||||||
|
- Deriving Serialize for GatewayData ([#6314])
|
||||||
|
- chore: remove repetitive words in comment ([#6313])
|
||||||
|
- [bugfix] Sqlite transaction escalation was causing errors ([#6299])
|
||||||
|
- DNS static table pre-resolve ([#6297])
|
||||||
|
- Add Copy+Clone to nym_api_provider::Config ([#6296])
|
||||||
|
- [chore] clippy fixes and use fixed rust version from REQUIRED_RUSTC_VERSION ([#6295])
|
||||||
|
- build(deps): bump SonarSource/sonarqube-scan-action from 6 to 7 ([#6294])
|
||||||
|
- build(deps): bump mikefarah/yq from 4.49.2 to 4.50.1 ([#6293])
|
||||||
|
- build(deps): bump actions/upload-artifact from 5 to 6 ([#6292])
|
||||||
|
- build(deps): bump actions/download-artifact from 6 to 7 ([#6291])
|
||||||
|
- build(deps): bump js-yaml from 3.14.1 to 3.14.2 in /documentation/docs ([#6290])
|
||||||
|
- build(deps): bump next from 15.4.9 to 15.4.10 in /nym-node-status-api/nym-node-status-ui ([#6289])
|
||||||
|
- build(deps): bump next from 14.2.33 to 14.2.35 ([#6288])
|
||||||
|
- LP Registration + Telescoping + Gateway Probe Localnet Mode ([#6286])
|
||||||
|
- build(deps): bump next from 15.5.7 to 15.5.9 in /documentation/docs ([#6285])
|
||||||
|
- build(deps): bump next from 15.4.7 to 15.4.9 in /nym-node-status-api/nym-node-status-ui ([#6284])
|
||||||
|
- Minor DNS improvements ([#6283])
|
||||||
|
- HTTP client without default features ([#6281])
|
||||||
|
- DNS: reduce number of attempts ([#6278])
|
||||||
|
- [bugfix] use proper mixing delay instead of poisson delay in cover traffic ([#6269])
|
||||||
|
- build(deps): bump node-forge from 1.3.1 to 1.3.3 in /wasm/zknym-lib/internal-dev ([#6261])
|
||||||
|
- build(deps-dev): bump node-forge from 1.3.1 to 1.3.3 in /wasm/mix-fetch/internal-dev ([#6260])
|
||||||
|
- build(deps-dev): bump node-forge from 1.3.1 to 1.3.2 in /wasm/client/internal-dev ([#6251])
|
||||||
|
- build(deps): bump node-forge from 1.3.1 to 1.3.2 in /nym-credential-proxy/vpn-api-lib-wasm/internal-dev ([#6250])
|
||||||
|
- [Feature] Fallback gateway listener and remove legacy key support ([#6249])
|
||||||
|
- build(deps-dev): bump node-forge from 1.3.0 to 1.3.2 in /clients/native/examples/js-examples/websocket ([#6248])
|
||||||
|
- build(deps): bump node-forge from 1.3.1 to 1.3.2 ([#6246])
|
||||||
|
- build(deps): bump pnpm/action-setup from 4.1.0 to 4.2.0 ([#6245])
|
||||||
|
- build(deps): bump actions/download-artifact from 5 to 6 ([#6244])
|
||||||
|
- build(deps): bump actions/checkout from 4 to 6 ([#6243])
|
||||||
|
- build(deps): bump mikefarah/yq from 4.48.1 to 4.49.2 ([#6242])
|
||||||
|
- build(deps): bump actions/upload-artifact from 4 to 5 ([#6241])
|
||||||
|
- fix: fix assertion ([#6238])
|
||||||
|
- Initial changes to support extra configurable parameters and to print… ([#6237])
|
||||||
|
- Data Observatory ([#6172])
|
||||||
|
|
||||||
|
[#6377]: https://github.com/nymtech/nym/pull/6377
|
||||||
|
[#6364]: https://github.com/nymtech/nym/pull/6364
|
||||||
|
[#6348]: https://github.com/nymtech/nym/pull/6348
|
||||||
|
[#6316]: https://github.com/nymtech/nym/pull/6316
|
||||||
|
[#6314]: https://github.com/nymtech/nym/pull/6314
|
||||||
|
[#6313]: https://github.com/nymtech/nym/pull/6313
|
||||||
|
[#6299]: https://github.com/nymtech/nym/pull/6299
|
||||||
|
[#6297]: https://github.com/nymtech/nym/pull/6297
|
||||||
|
[#6296]: https://github.com/nymtech/nym/pull/6296
|
||||||
|
[#6295]: https://github.com/nymtech/nym/pull/6295
|
||||||
|
[#6294]: https://github.com/nymtech/nym/pull/6294
|
||||||
|
[#6293]: https://github.com/nymtech/nym/pull/6293
|
||||||
|
[#6292]: https://github.com/nymtech/nym/pull/6292
|
||||||
|
[#6291]: https://github.com/nymtech/nym/pull/6291
|
||||||
|
[#6290]: https://github.com/nymtech/nym/pull/6290
|
||||||
|
[#6289]: https://github.com/nymtech/nym/pull/6289
|
||||||
|
[#6288]: https://github.com/nymtech/nym/pull/6288
|
||||||
|
[#6286]: https://github.com/nymtech/nym/pull/6286
|
||||||
|
[#6285]: https://github.com/nymtech/nym/pull/6285
|
||||||
|
[#6284]: https://github.com/nymtech/nym/pull/6284
|
||||||
|
[#6283]: https://github.com/nymtech/nym/pull/6283
|
||||||
|
[#6281]: https://github.com/nymtech/nym/pull/6281
|
||||||
|
[#6278]: https://github.com/nymtech/nym/pull/6278
|
||||||
|
[#6269]: https://github.com/nymtech/nym/pull/6269
|
||||||
|
[#6261]: https://github.com/nymtech/nym/pull/6261
|
||||||
|
[#6260]: https://github.com/nymtech/nym/pull/6260
|
||||||
|
[#6251]: https://github.com/nymtech/nym/pull/6251
|
||||||
|
[#6250]: https://github.com/nymtech/nym/pull/6250
|
||||||
|
[#6249]: https://github.com/nymtech/nym/pull/6249
|
||||||
|
[#6248]: https://github.com/nymtech/nym/pull/6248
|
||||||
|
[#6246]: https://github.com/nymtech/nym/pull/6246
|
||||||
|
[#6245]: https://github.com/nymtech/nym/pull/6245
|
||||||
|
[#6244]: https://github.com/nymtech/nym/pull/6244
|
||||||
|
[#6243]: https://github.com/nymtech/nym/pull/6243
|
||||||
|
[#6242]: https://github.com/nymtech/nym/pull/6242
|
||||||
|
[#6241]: https://github.com/nymtech/nym/pull/6241
|
||||||
|
[#6238]: https://github.com/nymtech/nym/pull/6238
|
||||||
|
[#6237]: https://github.com/nymtech/nym/pull/6237
|
||||||
|
[#6172]: https://github.com/nymtech/nym/pull/6172
|
||||||
|
|
||||||
|
## [2026.1-niolo] (2026-01-13)
|
||||||
|
|
||||||
|
- bugfix: mozzarella -> niolo config migration ([#6259])
|
||||||
|
- chore: remove run DKG migration ([#6253])
|
||||||
|
- bugfix: reexposed 'derive_extended_private_key' ([#6247])
|
||||||
|
- Bump js-yaml from 3.14.1 to 3.14.2 in /sdk/typescript/codegen/contract-clients ([#6231])
|
||||||
|
- Statistics API v2 ([#6227])
|
||||||
|
- Bump golang.org/x/crypto from 0.39.0 to 0.45.0 in /nym-gateway-probe/netstack_ping ([#6220])
|
||||||
|
- Update chain registry link ([#6219])
|
||||||
|
- Bump glob from 10.3.4 to 10.5.0 in /documentation/scripts/post-process ([#6216])
|
||||||
|
- Bump js-yaml from 4.1.0 to 4.1.1 in /sdk/typescript/tests/integration-tests/mix-fetch ([#6215])
|
||||||
|
- gateway-probe fixes for run-local ([#6212])
|
||||||
|
- chore: updated default endpoint for retrieving attestation.json ([#6207])
|
||||||
|
- chore: remove support for legacy mixnode within the performance contract ([#6205])
|
||||||
|
- feat: upgrade mode: VPN adjustments ([#6189])
|
||||||
|
- Bump min-document from 2.19.0 to 2.19.1 ([#6181])
|
||||||
|
- Bump next from 15.4.1 to 15.4.7 in /nym-node-status-api/nym-node-status-ui ([#6180])
|
||||||
|
- feat: merge intermediate upgrade mode changes ([#6174])
|
||||||
|
- Add weighted scoring to NS API ([#6144])
|
||||||
|
- build(deps): bump mikefarah/yq from 4.47.1 to 4.48.1 ([#6107])
|
||||||
|
- build(deps): bump SonarSource/sonarqube-scan-action from 5 to 6 in /.github/workflows ([#6068])
|
||||||
|
- build(deps): bump tar-fs from 3.0.9 to 3.1.1 in /sdk/typescript/tests/integration-tests/mix-fetch ([#6063])
|
||||||
|
- build(deps): bump ammonia from 4.1.1 to 4.1.2 ([#6057])
|
||||||
|
- build(deps): bump tower-http from 0.5.2 to 0.6.6 ([#6030])
|
||||||
|
- build(deps): bump actions/setup-go from 5 to 6 ([#6013])
|
||||||
|
- build(deps): bump next from 14.2.28 to 14.2.32 ([#5996])
|
||||||
|
- build(deps): bump tracing-subscriber from 0.3.19 to 0.3.20 ([#5993])
|
||||||
|
- build(deps): bump actions/upload-pages-artifact from 3 to 4 ([#5992])
|
||||||
|
|
||||||
|
[#6259]: https://github.com/nymtech/nym/pull/6259
|
||||||
|
[#6253]: https://github.com/nymtech/nym/pull/6253
|
||||||
|
[#6247]: https://github.com/nymtech/nym/pull/6247
|
||||||
|
[#6231]: https://github.com/nymtech/nym/pull/6231
|
||||||
|
[#6227]: https://github.com/nymtech/nym/pull/6227
|
||||||
|
[#6220]: https://github.com/nymtech/nym/pull/6220
|
||||||
|
[#6219]: https://github.com/nymtech/nym/pull/6219
|
||||||
|
[#6216]: https://github.com/nymtech/nym/pull/6216
|
||||||
|
[#6215]: https://github.com/nymtech/nym/pull/6215
|
||||||
|
[#6212]: https://github.com/nymtech/nym/pull/6212
|
||||||
|
[#6207]: https://github.com/nymtech/nym/pull/6207
|
||||||
|
[#6205]: https://github.com/nymtech/nym/pull/6205
|
||||||
|
[#6189]: https://github.com/nymtech/nym/pull/6189
|
||||||
|
[#6181]: https://github.com/nymtech/nym/pull/6181
|
||||||
|
[#6180]: https://github.com/nymtech/nym/pull/6180
|
||||||
|
[#6174]: https://github.com/nymtech/nym/pull/6174
|
||||||
|
[#6144]: https://github.com/nymtech/nym/pull/6144
|
||||||
|
[#6107]: https://github.com/nymtech/nym/pull/6107
|
||||||
|
[#6068]: https://github.com/nymtech/nym/pull/6068
|
||||||
|
[#6063]: https://github.com/nymtech/nym/pull/6063
|
||||||
|
[#6057]: https://github.com/nymtech/nym/pull/6057
|
||||||
|
[#6030]: https://github.com/nymtech/nym/pull/6030
|
||||||
|
[#6013]: https://github.com/nymtech/nym/pull/6013
|
||||||
|
[#5996]: https://github.com/nymtech/nym/pull/5996
|
||||||
|
[#5993]: https://github.com/nymtech/nym/pull/5993
|
||||||
|
[#5992]: https://github.com/nymtech/nym/pull/5992
|
||||||
|
|
||||||
|
## [2025.21-mozzarella] (2025-11-25)
|
||||||
|
|
||||||
|
- [bugfix] Tunnel not waiting on MixnetClient to shut down cleanly ([#6225])
|
||||||
|
- bugfix: fix credential proxy upgrade mode attestation url arg ([#6202])
|
||||||
|
- HTTP API resilience enable & domain rotation conditions ([#6200])
|
||||||
|
- Remove debug feature from http-macro spec in gateway probe ([#6195])
|
||||||
|
- DNS relibility and troubleshooting ([#6179])
|
||||||
|
- [bugfix] Distinguish authenticator errors by credential spent ([#6176])
|
||||||
|
- Typescript SDK 1.4.1 ([#6146])
|
||||||
|
- Enable URL rotation and retries for mixnet gateway init ([#6126])
|
||||||
|
- Feature/credential proxy jwt ([#5957])
|
||||||
|
|
||||||
|
[#6225]: https://github.com/nymtech/nym/pull/6225
|
||||||
|
[#6202]: https://github.com/nymtech/nym/pull/6202
|
||||||
|
[#6200]: https://github.com/nymtech/nym/pull/6200
|
||||||
|
[#6195]: https://github.com/nymtech/nym/pull/6195
|
||||||
|
[#6179]: https://github.com/nymtech/nym/pull/6179
|
||||||
|
[#6176]: https://github.com/nymtech/nym/pull/6176
|
||||||
|
[#6146]: https://github.com/nymtech/nym/pull/6146
|
||||||
|
[#6126]: https://github.com/nymtech/nym/pull/6126
|
||||||
|
[#5957]: https://github.com/nymtech/nym/pull/5957
|
||||||
|
|
||||||
|
## [2025.20-leerdammer] (2025-11-12)
|
||||||
|
|
||||||
|
- Max/tweak ts sdk actions ([#6185])
|
||||||
|
- chore: resolve clippy 1.91 warnings ([#6168])
|
||||||
|
- [chore] Remove unused dependencies ([#6151])
|
||||||
|
- Use typed-builder for registration client builder config ([#6150])
|
||||||
|
- tommy is too quick ([#6149])
|
||||||
|
- configurable mixnet client startup timeout ([#6148])
|
||||||
|
- [Feature/operators]: QUIC bridge deployment script v2 ([#6145])
|
||||||
|
- Bugfix: Add circuit breaker ([#6143])
|
||||||
|
- bugfix: update internal owner address in transferred share ([#6139])
|
||||||
|
- Update quic_bridge_deployment.sh for IPv4 and .deb package ([#6138])
|
||||||
|
- feat: expose more explicit new_with_fronted_urls builder for http API client ([#6136])
|
||||||
|
- bugfix: update stored epoch share when changing ownership ([#6135])
|
||||||
|
- Domain fronting ([#6134])
|
||||||
|
- bugfix: update stored epoch share when changing announce address ([#6131])
|
||||||
|
|
||||||
|
[#6185]: https://github.com/nymtech/nym/pull/6185
|
||||||
|
[#6168]: https://github.com/nymtech/nym/pull/6168
|
||||||
|
[#6151]: https://github.com/nymtech/nym/pull/6151
|
||||||
|
[#6150]: https://github.com/nymtech/nym/pull/6150
|
||||||
|
[#6149]: https://github.com/nymtech/nym/pull/6149
|
||||||
|
[#6148]: https://github.com/nymtech/nym/pull/6148
|
||||||
|
[#6145]: https://github.com/nymtech/nym/pull/6145
|
||||||
|
[#6143]: https://github.com/nymtech/nym/pull/6143
|
||||||
|
[#6139]: https://github.com/nymtech/nym/pull/6139
|
||||||
|
[#6138]: https://github.com/nymtech/nym/pull/6138
|
||||||
|
[#6136]: https://github.com/nymtech/nym/pull/6136
|
||||||
|
[#6135]: https://github.com/nymtech/nym/pull/6135
|
||||||
|
[#6134]: https://github.com/nymtech/nym/pull/6134
|
||||||
|
[#6131]: https://github.com/nymtech/nym/pull/6131
|
||||||
|
|
||||||
|
## [2025.19-kase] (2025-10-30)
|
||||||
|
|
||||||
|
- update ns agent workflow ([#6154])
|
||||||
|
- Cherry pick - request #6143 from nymtech/bugfix/mix-tx-closed-v2 ([#6153])
|
||||||
|
- bugfix: nym-credential-proxy query params parsing regression ([#6121])
|
||||||
|
- bugfix: revert some dep updates introduced in #6043 ([#6120])
|
||||||
|
- Skip ipv6 metadata endpoint request ([#6118])
|
||||||
|
- update to no longer use 1mb files ([#6117])
|
||||||
|
- chore: restore pending dkg contract state migration ([#6116])
|
||||||
|
- Revert "Propagate cancel token to mixnet client" ([#6115])
|
||||||
|
- Update dirs to 6.0 ([#6109])
|
||||||
|
- Propagate cancel token to mixnet client ([#6105])
|
||||||
|
- bugfix: retrieve and update ticketbook in the same query ([#6101])
|
||||||
|
- bugfix: include network name in the default gateway probe config path ([#6100])
|
||||||
|
- Bugfix/incompatibility fixes ([#6099])
|
||||||
|
- [DOCs/operators] QUIC deployment script & docs ([#6098])
|
||||||
|
- bugfix: testnet manager 02sql migration ([#6096])
|
||||||
|
- feat: move gateway probe to monorepo (and update to rust edition 2024) ([#6094])
|
||||||
|
- bugfix: use custom topology provider for list of init gateways ([#6092])
|
||||||
|
- Max/fix wasm client + build commands ([#6043])
|
||||||
|
|
||||||
|
[#6154]: https://github.com/nymtech/nym/pull/6154
|
||||||
|
[#6153]: https://github.com/nymtech/nym/pull/6153
|
||||||
|
[#6121]: https://github.com/nymtech/nym/pull/6121
|
||||||
|
[#6120]: https://github.com/nymtech/nym/pull/6120
|
||||||
|
[#6118]: https://github.com/nymtech/nym/pull/6118
|
||||||
|
[#6117]: https://github.com/nymtech/nym/pull/6117
|
||||||
|
[#6116]: https://github.com/nymtech/nym/pull/6116
|
||||||
|
[#6115]: https://github.com/nymtech/nym/pull/6115
|
||||||
|
[#6109]: https://github.com/nymtech/nym/pull/6109
|
||||||
|
[#6105]: https://github.com/nymtech/nym/pull/6105
|
||||||
|
[#6101]: https://github.com/nymtech/nym/pull/6101
|
||||||
|
[#6100]: https://github.com/nymtech/nym/pull/6100
|
||||||
|
[#6099]: https://github.com/nymtech/nym/pull/6099
|
||||||
|
[#6098]: https://github.com/nymtech/nym/pull/6098
|
||||||
|
[#6096]: https://github.com/nymtech/nym/pull/6096
|
||||||
|
[#6094]: https://github.com/nymtech/nym/pull/6094
|
||||||
|
[#6092]: https://github.com/nymtech/nym/pull/6092
|
||||||
|
[#6043]: https://github.com/nymtech/nym/pull/6043
|
||||||
|
|
||||||
## [2025.18-jarlsberg] (2025-10-14)
|
## [2025.18-jarlsberg] (2025-10-14)
|
||||||
|
|
||||||
- ns-api: add descriptions to dVPN gateway responses ([#6102])
|
- ns-api: add descriptions to dVPN gateway responses ([#6102])
|
||||||
|
|||||||
@@ -1,686 +0,0 @@
|
|||||||
# CLAUDE.md
|
|
||||||
|
|
||||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
||||||
|
|
||||||
## Project Overview
|
|
||||||
|
|
||||||
Nym is a privacy platform that uses mixnet technology to protect against metadata surveillance. The platform consists of several key components:
|
|
||||||
- Mixnet nodes (mixnodes) for packet mixing
|
|
||||||
- Gateways (entry/exit points for the network)
|
|
||||||
- Clients for interacting with the network
|
|
||||||
- Network monitoring tools
|
|
||||||
- Validators for network consensus
|
|
||||||
- Various service providers and integrations
|
|
||||||
|
|
||||||
## Build Commands
|
|
||||||
|
|
||||||
### Rust Components
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Default build (debug)
|
|
||||||
cargo build
|
|
||||||
|
|
||||||
# Release build
|
|
||||||
cargo build --release
|
|
||||||
|
|
||||||
# Build a specific package
|
|
||||||
cargo build -p <package-name>
|
|
||||||
|
|
||||||
# Build main components
|
|
||||||
make build
|
|
||||||
|
|
||||||
# Build release versions of main binaries and contracts
|
|
||||||
make build-release
|
|
||||||
|
|
||||||
# Build specific binaries
|
|
||||||
make build-nym-cli
|
|
||||||
cargo build -p nym-node --release
|
|
||||||
cargo build -p nym-api --release
|
|
||||||
```
|
|
||||||
|
|
||||||
### Testing
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Run clippy, unit tests, and formatting
|
|
||||||
make test
|
|
||||||
|
|
||||||
# Run all tests including slow tests
|
|
||||||
make test-all
|
|
||||||
|
|
||||||
# Run clippy on all workspaces
|
|
||||||
make clippy
|
|
||||||
|
|
||||||
# Run unit tests for a specific package
|
|
||||||
cargo test -p <package-name>
|
|
||||||
|
|
||||||
# Run only expensive/ignored tests
|
|
||||||
cargo test --workspace -- --ignored
|
|
||||||
|
|
||||||
# Run API tests
|
|
||||||
dotenv -f envs/sandbox.env -- cargo test --test public-api-tests
|
|
||||||
|
|
||||||
# Run tests with specific log level
|
|
||||||
RUST_LOG=debug cargo test -p <package-name>
|
|
||||||
|
|
||||||
# Run specific test scripts
|
|
||||||
./nym-node/tests/test_apis.sh
|
|
||||||
./scripts/wireguard-exit-policy/exit-policy-tests.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
### Linting and Formatting
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Run rustfmt on all code
|
|
||||||
make fmt
|
|
||||||
|
|
||||||
# Check formatting without modifying
|
|
||||||
cargo fmt --all -- --check
|
|
||||||
|
|
||||||
# Run clippy with all targets
|
|
||||||
cargo clippy --workspace --all-targets -- -D warnings
|
|
||||||
|
|
||||||
# TypeScript linting
|
|
||||||
yarn lint
|
|
||||||
yarn lint:fix
|
|
||||||
yarn types:lint:fix
|
|
||||||
|
|
||||||
# Check dependencies for security/licensing issues
|
|
||||||
cargo deny check
|
|
||||||
```
|
|
||||||
|
|
||||||
### WASM Components
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Build all WASM components
|
|
||||||
make sdk-wasm-build
|
|
||||||
|
|
||||||
# Build TypeScript SDK
|
|
||||||
yarn build:sdk
|
|
||||||
npx lerna run --scope @nymproject/sdk build --stream
|
|
||||||
|
|
||||||
# Build and test WASM components
|
|
||||||
make sdk-wasm
|
|
||||||
|
|
||||||
# Build specific WASM packages
|
|
||||||
cd wasm/client && make
|
|
||||||
cd wasm/mix-fetch && make
|
|
||||||
cd wasm/node-tester && make
|
|
||||||
```
|
|
||||||
|
|
||||||
### Contract Development
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Build all contracts
|
|
||||||
make contracts
|
|
||||||
|
|
||||||
# Build contracts in release mode
|
|
||||||
make build-release-contracts
|
|
||||||
|
|
||||||
# Generate contract schemas
|
|
||||||
make contract-schema
|
|
||||||
|
|
||||||
# Run wasm-opt on contracts
|
|
||||||
make wasm-opt-contracts
|
|
||||||
|
|
||||||
# Check contracts with cosmwasm-check
|
|
||||||
make cosmwasm-check-contracts
|
|
||||||
```
|
|
||||||
|
|
||||||
### Running Components
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Run nym-node as a mixnode
|
|
||||||
cargo run -p nym-node -- run --mode mixnode
|
|
||||||
|
|
||||||
# Run nym-node as a gateway
|
|
||||||
cargo run -p nym-node -- run --mode gateway
|
|
||||||
|
|
||||||
# Run the network monitor
|
|
||||||
cargo run -p nym-network-monitor
|
|
||||||
|
|
||||||
# Run the API server
|
|
||||||
cargo run -p nym-api
|
|
||||||
|
|
||||||
# Run with specific environment
|
|
||||||
dotenv -f envs/sandbox.env -- cargo run -p nym-api
|
|
||||||
|
|
||||||
# Start a local network
|
|
||||||
./scripts/localnet_start.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
## Architecture
|
|
||||||
|
|
||||||
The Nym platform consists of various components organized as a monorepo:
|
|
||||||
|
|
||||||
1. **Core Mixnet Infrastructure**:
|
|
||||||
- `nym-node`: Core binary supporting mixnode and gateway modes
|
|
||||||
- `common/nymsphinx`: Implementation of the Sphinx packet format
|
|
||||||
- `common/topology`: Network topology management
|
|
||||||
- `common/types`: Shared data types across components
|
|
||||||
|
|
||||||
2. **Network Monitoring**:
|
|
||||||
- `nym-network-monitor`: Monitors the network's reliability and performance
|
|
||||||
- `nym-api`: API server for network stats and monitoring data
|
|
||||||
- Metrics tracking for nodes, routes, and overall network health
|
|
||||||
|
|
||||||
3. **Client Implementations**:
|
|
||||||
- `clients/native`: Native Rust client implementation
|
|
||||||
- `clients/socks5`: SOCKS5 proxy client for standard applications
|
|
||||||
- `wasm`: WebAssembly client implementations (for browsers)
|
|
||||||
- `nym-connect`: Desktop and mobile clients
|
|
||||||
|
|
||||||
4. **Blockchain & Smart Contracts**:
|
|
||||||
- `common/cosmwasm-smart-contracts`: Smart contract implementations
|
|
||||||
- `contracts`: CosmWasm contracts for the Nym network
|
|
||||||
- `common/ledger`: Blockchain integration
|
|
||||||
|
|
||||||
5. **Utilities & Tools**:
|
|
||||||
- `tools`: Various CLI tools and utilities
|
|
||||||
- `sdk`: SDKs for different languages and platforms
|
|
||||||
- `documentation`: Documentation generation and management
|
|
||||||
|
|
||||||
## Packet System
|
|
||||||
|
|
||||||
Nym uses a modified Sphinx packet format for its mixnet:
|
|
||||||
|
|
||||||
1. **Message Chunking**:
|
|
||||||
- Messages are divided into "sets" and "fragments"
|
|
||||||
- Each fragment fits in a single Sphinx packet
|
|
||||||
- The `common/nymsphinx/chunking` module handles message fragmentation
|
|
||||||
|
|
||||||
2. **Routing**:
|
|
||||||
- Packets traverse through 3 layers of mixnodes
|
|
||||||
- Routing information is encrypted in layers (onion routing)
|
|
||||||
- The final gateway receives and processes the messages
|
|
||||||
|
|
||||||
3. **Monitoring**:
|
|
||||||
- Monitoring system tracks packet delivery through the network
|
|
||||||
- Routes are analyzed for reliability statistics
|
|
||||||
- Node performance metrics are collected
|
|
||||||
|
|
||||||
## Network Protocol
|
|
||||||
|
|
||||||
Nym implements the Loopix mixnet design with several key privacy features:
|
|
||||||
|
|
||||||
1. **Continuous-time Mixing**:
|
|
||||||
- Each mixnode delays messages independently with an exponential distribution
|
|
||||||
- This creates random reordering of packets, destroying timing correlations
|
|
||||||
- Offers better anonymity properties than batch mixing approaches
|
|
||||||
|
|
||||||
2. **Cover Traffic**:
|
|
||||||
- Clients and nodes generate dummy "loop" packets that circulate through the network
|
|
||||||
- These packets are indistinguishable from real traffic
|
|
||||||
- Creates a baseline level of traffic that hides actual communication patterns
|
|
||||||
- Provides unobservability (hiding when and how much real traffic is being sent)
|
|
||||||
|
|
||||||
3. **Stratified Network Architecture**:
|
|
||||||
- Traffic flows through Entry Gateway → 3 Mixnode Layers → Exit Gateway
|
|
||||||
- Path selection is independent per-message (unlike Tor)
|
|
||||||
- Each node connects only to adjacent layers
|
|
||||||
|
|
||||||
4. **Anonymous Replies**:
|
|
||||||
- Single-Use Reply Blocks (SURBs) allow receiving messages without revealing identity
|
|
||||||
- Enables bidirectional communication while maintaining privacy
|
|
||||||
|
|
||||||
## Network Monitoring Architecture
|
|
||||||
|
|
||||||
The network monitoring system is a core component that measures mixnet reliability:
|
|
||||||
|
|
||||||
1. The `nym-network-monitor` sends test packets through the network
|
|
||||||
2. These packets follow predefined routes through multiple mixnodes
|
|
||||||
3. Metrics are collected about:
|
|
||||||
- Successful and failed packet deliveries
|
|
||||||
- Node reliability (percentage of successful packet handling)
|
|
||||||
- Route reliability (which specific route combinations work best)
|
|
||||||
4. Results are stored in the database and used by `nym-api` to:
|
|
||||||
- Present node performance statistics
|
|
||||||
- Determine network rewards
|
|
||||||
- Provide route selection guidance to clients
|
|
||||||
|
|
||||||
In the current branch, metrics collection is being enhanced with a fanout approach to submit to multiple API endpoints.
|
|
||||||
|
|
||||||
## Development Environment
|
|
||||||
|
|
||||||
### Required Dependencies
|
|
||||||
|
|
||||||
- Rust toolchain (stable, 1.80+)
|
|
||||||
- Node.js (v20+) and yarn for TypeScript components
|
|
||||||
- SQLite for local database development
|
|
||||||
- PostgreSQL for API database (optional, for full API functionality)
|
|
||||||
- CosmWasm tools for contract development
|
|
||||||
- For building contracts: `wasm-opt` tool from `binaryen`
|
|
||||||
- Python 3.8+ for some scripts
|
|
||||||
- Docker (optional, for containerized development)
|
|
||||||
- protoc (Protocol Buffers compiler) for some components
|
|
||||||
|
|
||||||
### Environment Configurations
|
|
||||||
|
|
||||||
The `envs/` directory contains pre-configured environments:
|
|
||||||
|
|
||||||
#### Available Environments
|
|
||||||
|
|
||||||
- **`local.env`**: Local development environment
|
|
||||||
- Points to local services (localhost)
|
|
||||||
- Uses test mnemonics and keys
|
|
||||||
- Ideal for testing without external dependencies
|
|
||||||
|
|
||||||
- **`sandbox.env`**: Sandbox test network
|
|
||||||
- Public test network with real nodes
|
|
||||||
- Test tokens available from faucet
|
|
||||||
- Contract addresses for sandbox deployment
|
|
||||||
- API: https://sandbox-nym-api1.nymtech.net
|
|
||||||
|
|
||||||
- **`mainnet.env`**: Production mainnet
|
|
||||||
- Real network with real tokens
|
|
||||||
- Production contract addresses
|
|
||||||
- API: https://validator.nymtech.net
|
|
||||||
- Use with caution!
|
|
||||||
|
|
||||||
- **`canary.env`**: Canary deployment
|
|
||||||
- Pre-release testing environment
|
|
||||||
- Tests new features before mainnet
|
|
||||||
|
|
||||||
- **`mainnet-local-api.env`**: Hybrid environment
|
|
||||||
- Uses mainnet contracts but local API
|
|
||||||
- Useful for API development against mainnet data
|
|
||||||
|
|
||||||
#### Key Environment Variables
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Network configuration
|
|
||||||
NETWORK_NAME=sandbox # Network identifier
|
|
||||||
BECH32_PREFIX=n # Address prefix (n for sandbox, n for mainnet)
|
|
||||||
NYM_API=https://sandbox-nym-api1.nymtech.net/api
|
|
||||||
NYXD=https://rpc.sandbox.nymtech.net
|
|
||||||
NYM_API_NETWORK=sandbox
|
|
||||||
|
|
||||||
# Contract addresses (network-specific)
|
|
||||||
MIXNET_CONTRACT_ADDRESS=n1xr3rq8yvd7qplsw5yx90ftsr2zdhg4e9z60h5duusgxpv72hud3sjkxkav
|
|
||||||
VESTING_CONTRACT_ADDRESS=n1unyuj8qnmygvzuex3dwmg9yzt9alhvyeat0uu0jedg2wj33efl5qackslz
|
|
||||||
# ... other contract addresses
|
|
||||||
|
|
||||||
# Mnemonic for testing (NEVER use in production)
|
|
||||||
MNEMONIC="clutch captain shoe salt awake harvest setup primary inmate ugly among become"
|
|
||||||
|
|
||||||
# API Keys and tokens
|
|
||||||
IPINFO_API_TOKEN=your_token_here
|
|
||||||
AUTHENTICATOR_PASSWORD=password_here
|
|
||||||
|
|
||||||
# Logging
|
|
||||||
RUST_LOG=info # Options: error, warn, info, debug, trace
|
|
||||||
RUST_BACKTRACE=1 # Enable backtraces
|
|
||||||
|
|
||||||
# Database
|
|
||||||
DATABASE_URL=postgresql://user:pass@localhost/nym_api
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Using Environment Files
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Load environment and run command
|
|
||||||
dotenv -f envs/sandbox.env -- cargo run -p nym-api
|
|
||||||
|
|
||||||
# Export to shell
|
|
||||||
source envs/sandbox.env
|
|
||||||
|
|
||||||
# Use with make targets
|
|
||||||
dotenv -f envs/sandbox.env -- make run-api-tests
|
|
||||||
```
|
|
||||||
|
|
||||||
## Initial Setup
|
|
||||||
|
|
||||||
### First Time Setup
|
|
||||||
|
|
||||||
1. **Install Prerequisites**
|
|
||||||
```bash
|
|
||||||
# Install Rust
|
|
||||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
|
||||||
|
|
||||||
# Install Node.js and yarn
|
|
||||||
# Via nvm (recommended):
|
|
||||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
|
|
||||||
nvm install 20
|
|
||||||
npm install -g yarn
|
|
||||||
|
|
||||||
# Install build tools
|
|
||||||
# Ubuntu/Debian:
|
|
||||||
sudo apt-get install build-essential pkg-config libssl-dev protobuf-compiler libpq-dev
|
|
||||||
|
|
||||||
# macOS:
|
|
||||||
brew install protobuf postgresql
|
|
||||||
|
|
||||||
# Install wasm-opt for contract builds
|
|
||||||
npm install -g wasm-opt
|
|
||||||
|
|
||||||
# Add wasm target for Rust
|
|
||||||
rustup target add wasm32-unknown-unknown
|
|
||||||
```
|
|
||||||
|
|
||||||
2. **Clone and Setup Repository**
|
|
||||||
```bash
|
|
||||||
git clone https://github.com/nymtech/nym.git
|
|
||||||
cd nym/nym
|
|
||||||
|
|
||||||
# Install JavaScript dependencies
|
|
||||||
yarn install
|
|
||||||
|
|
||||||
# Build the project
|
|
||||||
make build
|
|
||||||
```
|
|
||||||
|
|
||||||
3. **Database Setup (Optional, for API development)**
|
|
||||||
```bash
|
|
||||||
# Install PostgreSQL
|
|
||||||
# Create database
|
|
||||||
createdb nym_api
|
|
||||||
|
|
||||||
# Run migrations (from nym-api directory)
|
|
||||||
cd nym-api
|
|
||||||
sqlx migrate run
|
|
||||||
```
|
|
||||||
|
|
||||||
### Quick Start
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Run a mixnode locally
|
|
||||||
dotenv -f envs/sandbox.env -- cargo run -p nym-node -- run --mode mixnode --id my-mixnode
|
|
||||||
|
|
||||||
# Run a gateway locally
|
|
||||||
dotenv -f envs/sandbox.env -- cargo run -p nym-node -- run --mode gateway --id my-gateway
|
|
||||||
|
|
||||||
# Run the API server
|
|
||||||
dotenv -f envs/sandbox.env -- cargo run -p nym-api
|
|
||||||
|
|
||||||
# Run a client
|
|
||||||
cargo run -p nym-client -- init --id my-client
|
|
||||||
cargo run -p nym-client -- run --id my-client
|
|
||||||
```
|
|
||||||
|
|
||||||
## CI/CD Pipeline
|
|
||||||
|
|
||||||
The project uses GitHub Actions for CI/CD with several key workflows:
|
|
||||||
|
|
||||||
1. **Build and Test**:
|
|
||||||
- `ci-build.yml`: Main build workflow for Rust components
|
|
||||||
- Tests are run on multiple platforms (Linux, Windows, macOS)
|
|
||||||
- Includes formatting check (rustfmt) and linting (clippy)
|
|
||||||
|
|
||||||
2. **Release Process**:
|
|
||||||
- Binary artifacts are published on release tags
|
|
||||||
- Multiple platform builds are created
|
|
||||||
|
|
||||||
3. **Documentation**:
|
|
||||||
- Documentation is automatically built and deployed
|
|
||||||
|
|
||||||
## Database Structure
|
|
||||||
|
|
||||||
The system uses SQLite databases with tables like:
|
|
||||||
- `mixnode_status`: Status information about mixnodes
|
|
||||||
- `gateway_status`: Status information about gateways
|
|
||||||
- `routes`: Route performance information (success/failure of specific paths)
|
|
||||||
- `monitor_run`: Information about monitoring test runs
|
|
||||||
|
|
||||||
## Development Workflows
|
|
||||||
|
|
||||||
### Running a Node
|
|
||||||
|
|
||||||
To run the mixnode or gateway:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Run nym-node as a mixnode with specified identity
|
|
||||||
cargo run -p nym-node -- run --mode mixnode --id my-mixnode
|
|
||||||
|
|
||||||
# Run nym-node as a gateway
|
|
||||||
cargo run -p nym-node -- run --mode gateway --id my-gateway
|
|
||||||
```
|
|
||||||
|
|
||||||
### Configuration
|
|
||||||
|
|
||||||
Nodes can be configured with files in various locations:
|
|
||||||
- Command-line arguments
|
|
||||||
- Environment variables
|
|
||||||
- `.env` files specified with `--config-env-file`
|
|
||||||
|
|
||||||
### Monitoring
|
|
||||||
|
|
||||||
To monitor the health of your node:
|
|
||||||
- View logs for real-time information
|
|
||||||
- Use the node's HTTP API for status information
|
|
||||||
- Check the explorer for public node statistics
|
|
||||||
|
|
||||||
## Common Libraries
|
|
||||||
|
|
||||||
- `common/types`: Shared data types across all components
|
|
||||||
- `common/crypto`: Cryptographic primitives and wrappers
|
|
||||||
- `common/client-core`: Core client functionality
|
|
||||||
- `common/gateway-client`: Client-gateway communication
|
|
||||||
- `common/task`: Task management and concurrency utilities
|
|
||||||
- `common/nymsphinx`: Sphinx packet implementation for mixnet
|
|
||||||
- `common/topology`: Network topology management
|
|
||||||
- `common/credentials`: Credential system for privacy-preserving authentication
|
|
||||||
- `common/bandwidth-controller`: Bandwidth management and accounting
|
|
||||||
|
|
||||||
## Code Conventions
|
|
||||||
|
|
||||||
- Error handling: Use anyhow/thiserror for structured error handling
|
|
||||||
- Logging: Use the tracing framework for logging and diagnostics
|
|
||||||
- State management: Generally use Tokio/futures for async code
|
|
||||||
- Configuration: Use the config crate and env vars with defaults
|
|
||||||
- Database: Use sqlx for type-safe database queries
|
|
||||||
- Follow clippy recommendations and rustfmt formatting
|
|
||||||
- Use semantic commit messages: feat, fix, docs, refactor, test, chore
|
|
||||||
|
|
||||||
## When Making Changes
|
|
||||||
|
|
||||||
- Run `make test` before submitting PRs
|
|
||||||
- Follow Rust naming conventions
|
|
||||||
- Use `clippy` to check for common issues
|
|
||||||
- Update SQLx query caches when modifying DB queries: `cargo sqlx prepare`
|
|
||||||
- Consider backward compatibility for protocol changes
|
|
||||||
- Use lefthook pre-commit hooks for TypeScript formatting
|
|
||||||
- Run `cargo deny check` to verify dependency compliance
|
|
||||||
- Test against both sandbox and local environments when possible
|
|
||||||
- Update relevant documentation and CHANGELOG.md
|
|
||||||
|
|
||||||
## Development Tools
|
|
||||||
|
|
||||||
### Useful Cargo Commands
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Check for outdated dependencies
|
|
||||||
cargo outdated
|
|
||||||
|
|
||||||
# Analyze binary size
|
|
||||||
cargo bloat --release -p nym-node
|
|
||||||
|
|
||||||
# Generate dependency graph
|
|
||||||
cargo tree -p nym-api
|
|
||||||
|
|
||||||
# Run with instrumentation
|
|
||||||
cargo run --features profiling -p nym-node
|
|
||||||
|
|
||||||
# Check for security advisories
|
|
||||||
cargo audit
|
|
||||||
```
|
|
||||||
|
|
||||||
### Database Tools
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# SQLx CLI for migrations
|
|
||||||
cargo install sqlx-cli
|
|
||||||
|
|
||||||
# Create new migration
|
|
||||||
cd nym-api && sqlx migrate add <migration_name>
|
|
||||||
|
|
||||||
# Prepare query metadata for offline compilation
|
|
||||||
cargo sqlx prepare --workspace
|
|
||||||
|
|
||||||
# View database schema
|
|
||||||
./nym-api/enter_db.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
### Development Scripts
|
|
||||||
|
|
||||||
- `scripts/build_topology.py`: Generate network topology files
|
|
||||||
- `scripts/node_api_check.py`: Verify node API endpoints
|
|
||||||
- `scripts/network_tunnel_manager.sh`: Manage network tunnels
|
|
||||||
- `scripts/localnet_start.sh`: Start a local test network
|
|
||||||
- Various deployment scripts in `deployment/` for different environments
|
|
||||||
|
|
||||||
## Debugging
|
|
||||||
|
|
||||||
- Enable more verbose logging with the RUST_LOG environment variable:
|
|
||||||
```
|
|
||||||
RUST_LOG=debug,nym_node=trace cargo run -p nym-node -- run --mode mixnode
|
|
||||||
```
|
|
||||||
- Use the HTTP API endpoints for status information
|
|
||||||
- Check monitoring data in the database for network performance metrics
|
|
||||||
- For complex issues, use tracing tools to follow packet flow
|
|
||||||
- Enable backtraces: `RUST_BACKTRACE=full`
|
|
||||||
- For WASM debugging: Use browser developer tools with source maps
|
|
||||||
|
|
||||||
## Deployment and Advanced Configurations
|
|
||||||
|
|
||||||
### Deployment Structure
|
|
||||||
|
|
||||||
The `deployment/` directory contains Ansible playbooks and configurations for various deployment scenarios:
|
|
||||||
|
|
||||||
- **`aws/`**: AWS-specific deployment configurations
|
|
||||||
- **`mixnode/`**: Mixnode deployment playbooks
|
|
||||||
- **`gateway/`**: Gateway deployment playbooks
|
|
||||||
- **`validator/`**: Validator node deployment
|
|
||||||
- **`sandbox-v2/`**: Complete sandbox environment setup
|
|
||||||
- **`big-dipper-2/`**: Block explorer deployment
|
|
||||||
|
|
||||||
### Sandbox V2 Deployment
|
|
||||||
|
|
||||||
The sandbox-v2 deployment (`deployment/sandbox-v2/`) provides a complete test environment:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Key playbooks:
|
|
||||||
- deploy.yaml # Main deployment orchestrator
|
|
||||||
- deploy-mixnodes.yaml # Deploy mixnodes
|
|
||||||
- deploy-gateways.yaml # Deploy gateways
|
|
||||||
- deploy-validators.yaml # Deploy validator nodes
|
|
||||||
- deploy-nym-api.yaml # Deploy API services
|
|
||||||
```
|
|
||||||
|
|
||||||
### Custom Environment Setup
|
|
||||||
|
|
||||||
To create a custom environment:
|
|
||||||
|
|
||||||
1. Copy an existing env file: `cp envs/sandbox.env envs/custom.env`
|
|
||||||
2. Modify the network endpoints and contract addresses
|
|
||||||
3. Update the `NETWORK_NAME` to your identifier
|
|
||||||
4. Set appropriate mnemonics and keys (use fresh ones for production!)
|
|
||||||
|
|
||||||
### Contract Addresses
|
|
||||||
|
|
||||||
Contract addresses are network-specific and defined in environment files:
|
|
||||||
- Mixnet contract: Manages mixnode/gateway registry
|
|
||||||
- Vesting contract: Handles token vesting schedules
|
|
||||||
- Coconut contracts: Privacy-preserving credentials
|
|
||||||
- Name service: Human-readable address mapping
|
|
||||||
- Ecash contract: Electronic cash functionality
|
|
||||||
|
|
||||||
### Local Network Setup
|
|
||||||
|
|
||||||
For a completely local network:
|
|
||||||
```bash
|
|
||||||
# Start local chain
|
|
||||||
./scripts/localnet_start.sh
|
|
||||||
|
|
||||||
# Deploy contracts
|
|
||||||
cd contracts
|
|
||||||
make deploy-local
|
|
||||||
|
|
||||||
# Start nodes with local config
|
|
||||||
dotenv -f envs/local.env -- cargo run -p nym-node -- run --mode mixnode
|
|
||||||
```
|
|
||||||
|
|
||||||
## Common Issues and Troubleshooting
|
|
||||||
|
|
||||||
### Database Issues
|
|
||||||
|
|
||||||
- When modifying database queries, you must update SQLx query caches:
|
|
||||||
```bash
|
|
||||||
cargo sqlx prepare
|
|
||||||
```
|
|
||||||
- If you see SQLx errors about missing query files, this is likely the cause
|
|
||||||
- For "database is locked" errors with SQLite, ensure only one process accesses the DB
|
|
||||||
- For PostgreSQL connection issues, verify DATABASE_URL and that the server is running
|
|
||||||
|
|
||||||
### API Connection Issues
|
|
||||||
|
|
||||||
- Check the environment variables pointing to the APIs (NYM_API, NYXD)
|
|
||||||
- Verify network connectivity and API health endpoints
|
|
||||||
- For authentication issues, check node keys and credentials
|
|
||||||
- Common endpoints to verify:
|
|
||||||
- API health: `$NYM_API/health`
|
|
||||||
- Chain status: `$NYXD/status`
|
|
||||||
- Contract info: `$NYXD/cosmwasm/wasm/v1/contract/$CONTRACT_ADDRESS`
|
|
||||||
|
|
||||||
### Build Problems
|
|
||||||
|
|
||||||
- Clean dependencies with `cargo clean` for a fresh build
|
|
||||||
- Check for compatible Rust version (1.80+ recommended)
|
|
||||||
- For smart contract builds, ensure wasm-opt is installed: `npm install -g wasm-opt`
|
|
||||||
- For cross-compilation issues, check target-specific dependencies
|
|
||||||
- WASM build issues: Ensure wasm32-unknown-unknown target is installed:
|
|
||||||
```bash
|
|
||||||
rustup target add wasm32-unknown-unknown
|
|
||||||
```
|
|
||||||
- For "cannot find -lpq" errors, install PostgreSQL development files:
|
|
||||||
```bash
|
|
||||||
# Ubuntu/Debian
|
|
||||||
sudo apt-get install libpq-dev
|
|
||||||
# macOS
|
|
||||||
brew install postgresql
|
|
||||||
```
|
|
||||||
|
|
||||||
### Environment Issues
|
|
||||||
|
|
||||||
- Contract address mismatches: Ensure you're using the correct environment file
|
|
||||||
- "Account sequence mismatch": The account nonce is out of sync, wait and retry
|
|
||||||
- Token decimal issues: Sandbox uses different decimal places than mainnet
|
|
||||||
- API version mismatches: Ensure your local API version matches the network
|
|
||||||
- "Insufficient funds": Get test tokens from faucet (sandbox) or check balance
|
|
||||||
- Gateway/mixnode bonding issues: Verify minimum stake requirements
|
|
||||||
|
|
||||||
## Working with Routes and Monitoring
|
|
||||||
|
|
||||||
1. Route monitoring metrics are stored in a `routes` table with:
|
|
||||||
- Layer node IDs (layer1, layer2, layer3, gw)
|
|
||||||
- Success flag (boolean)
|
|
||||||
- Timestamp
|
|
||||||
|
|
||||||
2. To analyze routes:
|
|
||||||
- Check `NetworkAccount` and `AccountingRoute` in `nym-network-monitor/src/accounting.rs`
|
|
||||||
- View monitoring logic in `common/nymsphinx/chunking/monitoring.rs`
|
|
||||||
- Observe how routes are submitted to the database in the `submit_accounting_routes_to_db` function
|
|
||||||
|
|
||||||
## Performance Optimization
|
|
||||||
|
|
||||||
### Profiling and Benchmarking
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Run benchmarks
|
|
||||||
cargo bench -p nym-node
|
|
||||||
|
|
||||||
# Profile with perf (Linux)
|
|
||||||
cargo build --release --features profiling
|
|
||||||
perf record --call-graph=dwarf ./target/release/nym-node run --mode mixnode
|
|
||||||
perf report
|
|
||||||
|
|
||||||
# Generate flamegraph
|
|
||||||
cargo install flamegraph
|
|
||||||
cargo flamegraph --bin nym-node -- run --mode mixnode
|
|
||||||
```
|
|
||||||
|
|
||||||
### Common Performance Considerations
|
|
||||||
|
|
||||||
- Use bounded channels for backpressure
|
|
||||||
- Batch database operations where possible
|
|
||||||
- Monitor memory usage with `RUST_LOG=nym_node::metrics=debug`
|
|
||||||
- Use connection pooling for database connections
|
|
||||||
- Consider using `jemalloc` for better memory allocation performance
|
|
||||||
Generated
+2112
-866
File diff suppressed because it is too large
Load Diff
+171
-38
@@ -72,6 +72,9 @@ members = [
|
|||||||
"common/nym-cache",
|
"common/nym-cache",
|
||||||
"common/nym-connection-monitor",
|
"common/nym-connection-monitor",
|
||||||
"common/nym-id",
|
"common/nym-id",
|
||||||
|
"common/nym-kcp",
|
||||||
|
"common/nym-lp",
|
||||||
|
"common/nym-kkt",
|
||||||
"common/nym-metrics",
|
"common/nym-metrics",
|
||||||
"common/nym_offline_compact_ecash",
|
"common/nym_offline_compact_ecash",
|
||||||
"common/nymnoise",
|
"common/nymnoise",
|
||||||
@@ -87,7 +90,9 @@ members = [
|
|||||||
"common/nymsphinx/params",
|
"common/nymsphinx/params",
|
||||||
"common/nymsphinx/routing",
|
"common/nymsphinx/routing",
|
||||||
"common/nymsphinx/types",
|
"common/nymsphinx/types",
|
||||||
"common/nyxd-scraper",
|
"common/nyxd-scraper-sqlite",
|
||||||
|
"common/nyxd-scraper-psql",
|
||||||
|
"common/nyxd-scraper-shared",
|
||||||
"common/pemstore",
|
"common/pemstore",
|
||||||
"common/registration",
|
"common/registration",
|
||||||
"common/serde-helpers",
|
"common/serde-helpers",
|
||||||
@@ -123,7 +128,7 @@ members = [
|
|||||||
"nym-browser-extension/storage",
|
"nym-browser-extension/storage",
|
||||||
"nym-credential-proxy/nym-credential-proxy",
|
"nym-credential-proxy/nym-credential-proxy",
|
||||||
"nym-credential-proxy/nym-credential-proxy-requests",
|
"nym-credential-proxy/nym-credential-proxy-requests",
|
||||||
"nym-credential-proxy/vpn-api-lib-wasm",
|
"nym-data-observatory",
|
||||||
"nym-ip-packet-client",
|
"nym-ip-packet-client",
|
||||||
"nym-network-monitor",
|
"nym-network-monitor",
|
||||||
"nym-node",
|
"nym-node",
|
||||||
@@ -145,18 +150,19 @@ members = [
|
|||||||
"service-providers/common",
|
"service-providers/common",
|
||||||
"service-providers/ip-packet-router",
|
"service-providers/ip-packet-router",
|
||||||
"service-providers/network-requester",
|
"service-providers/network-requester",
|
||||||
"sqlx-pool-guard",
|
"nym-sqlx-pool-guard",
|
||||||
"tools/echo-server",
|
"tools/echo-server",
|
||||||
"tools/internal/contract-state-importer/importer-cli",
|
"tools/internal/contract-state-importer/importer-cli",
|
||||||
"tools/internal/contract-state-importer/importer-contract",
|
"tools/internal/contract-state-importer/importer-contract",
|
||||||
"tools/internal/mixnet-connectivity-check",
|
"tools/internal/mixnet-connectivity-check",
|
||||||
# "tools/internal/sdk-version-bump",
|
# "tools/internal/sdk-version-bump",
|
||||||
"tools/internal/ssl-inject",
|
"tools/internal/ssl-inject",
|
||||||
"tools/internal/testnet-manager",
|
"tools/internal/testnet-manager",
|
||||||
"tools/internal/testnet-manager/dkg-bypass-contract",
|
"tools/internal/testnet-manager/dkg-bypass-contract",
|
||||||
"tools/internal/validator-status-check",
|
"tools/internal/validator-status-check",
|
||||||
"tools/nym-cli",
|
"tools/nym-cli",
|
||||||
"tools/nym-id-cli",
|
"tools/nym-id-cli",
|
||||||
|
"tools/nym-lp-client",
|
||||||
"tools/nym-nr-query",
|
"tools/nym-nr-query",
|
||||||
"tools/nymvisor",
|
"tools/nymvisor",
|
||||||
"tools/ts-rs-cli",
|
"tools/ts-rs-cli",
|
||||||
@@ -165,23 +171,26 @@ members = [
|
|||||||
"wasm/mix-fetch",
|
"wasm/mix-fetch",
|
||||||
"wasm/node-tester",
|
"wasm/node-tester",
|
||||||
"wasm/zknym-lib",
|
"wasm/zknym-lib",
|
||||||
"nym-gateway-probe"
|
# "nym-gateway-probe",
|
||||||
|
"integration-tests",
|
||||||
|
"common/nym-kkt-ciphersuite", "common/nym-kkt-context",
|
||||||
]
|
]
|
||||||
|
|
||||||
default-members = [
|
default-members = [
|
||||||
"clients/native",
|
"clients/native",
|
||||||
"clients/socks5",
|
"clients/socks5",
|
||||||
|
"nym-authenticator-client",
|
||||||
"nym-api",
|
"nym-api",
|
||||||
"nym-credential-proxy/nym-credential-proxy",
|
"nym-credential-proxy/nym-credential-proxy",
|
||||||
"nym-node",
|
"nym-node",
|
||||||
"nym-node-status-api/nym-node-status-agent",
|
"nym-node-status-api/nym-node-status-agent",
|
||||||
"nym-node-status-api/nym-node-status-api",
|
|
||||||
"nym-statistics-api",
|
"nym-statistics-api",
|
||||||
"nym-validator-rewarder",
|
"nym-validator-rewarder",
|
||||||
"nyx-chain-watcher",
|
"nyx-chain-watcher",
|
||||||
"service-providers/ip-packet-router",
|
"service-providers/ip-packet-router",
|
||||||
"service-providers/network-requester",
|
"service-providers/network-requester",
|
||||||
"tools/nymvisor",
|
"tools/nymvisor",
|
||||||
|
"nym-registration-client"
|
||||||
]
|
]
|
||||||
|
|
||||||
exclude = ["contracts", "nym-wallet", "cpu-cycles"]
|
exclude = ["contracts", "nym-wallet", "cpu-cycles"]
|
||||||
@@ -193,8 +202,9 @@ homepage = "https://nymtech.net"
|
|||||||
documentation = "https://nymtech.net"
|
documentation = "https://nymtech.net"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
rust-version = "1.85"
|
rust-version = "1.87.0"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
|
version = "1.20.4"
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
addr = "0.15.6"
|
addr = "0.15.6"
|
||||||
@@ -203,6 +213,7 @@ aes = "0.8.1"
|
|||||||
aes-gcm = "0.10.1"
|
aes-gcm = "0.10.1"
|
||||||
aes-gcm-siv = "0.11.1"
|
aes-gcm-siv = "0.11.1"
|
||||||
ammonia = "4"
|
ammonia = "4"
|
||||||
|
ansi_term = "0.12"
|
||||||
anyhow = "1.0.98"
|
anyhow = "1.0.98"
|
||||||
arc-swap = "1.7.1"
|
arc-swap = "1.7.1"
|
||||||
argon2 = "0.5.0"
|
argon2 = "0.5.0"
|
||||||
@@ -215,13 +226,12 @@ base64 = "0.22.1"
|
|||||||
base85rs = "0.1.3"
|
base85rs = "0.1.3"
|
||||||
bincode = "1.3.3"
|
bincode = "1.3.3"
|
||||||
bip39 = { version = "2.0.0", features = ["zeroize"] }
|
bip39 = { version = "2.0.0", features = ["zeroize"] }
|
||||||
bit-vec = "0.7.0" # can we unify those?
|
|
||||||
bitvec = "1.0.0"
|
bitvec = "1.0.0"
|
||||||
blake3 = "1.7.0"
|
blake3 = "1.7.0"
|
||||||
bloomfilter = "3.0.1"
|
bloomfilter = "3.0.1"
|
||||||
bs58 = "0.5.1"
|
bs58 = "0.5.1"
|
||||||
bytecodec = "0.4.15"
|
bytecodec = "0.4.15"
|
||||||
bytes = "1.10.1"
|
bytes = "1.11.1"
|
||||||
cargo_metadata = "0.19.2"
|
cargo_metadata = "0.19.2"
|
||||||
celes = "2.6.0"
|
celes = "2.6.0"
|
||||||
cfg-if = "1.0.0"
|
cfg-if = "1.0.0"
|
||||||
@@ -243,13 +253,11 @@ criterion = "0.5"
|
|||||||
csv = "1.3.1"
|
csv = "1.3.1"
|
||||||
ctr = "0.9.1"
|
ctr = "0.9.1"
|
||||||
cupid = "0.6.1"
|
cupid = "0.6.1"
|
||||||
curve25519-dalek = "4.1"
|
curve25519-dalek = "4.1.3"
|
||||||
dashmap = "5.5.3"
|
dashmap = "5.5.3"
|
||||||
# We want https://github.com/DefGuard/wireguard-rs/pull/64 , but there's no crates.io release being pushed out anymore
|
defguard_wireguard_rs = "0.8.0"
|
||||||
defguard_wireguard_rs = { git = "https://github.com/DefGuard/wireguard-rs.git", rev = "v0.4.7" }
|
|
||||||
digest = "0.10.7"
|
digest = "0.10.7"
|
||||||
dirs = "6.0"
|
dirs = "6.0"
|
||||||
doc-comment = "0.3"
|
|
||||||
dotenvy = "0.15.6"
|
dotenvy = "0.15.6"
|
||||||
dyn-clone = "1.0.19"
|
dyn-clone = "1.0.19"
|
||||||
ecdsa = "0.16"
|
ecdsa = "0.16"
|
||||||
@@ -265,12 +273,11 @@ futures = "0.3.31"
|
|||||||
futures-util = "0.3"
|
futures-util = "0.3"
|
||||||
generic-array = "0.14.7"
|
generic-array = "0.14.7"
|
||||||
getrandom = "0.2.10"
|
getrandom = "0.2.10"
|
||||||
getset = "0.1.5"
|
getrandom03 = { package = "getrandom", version = "=0.3.3" }
|
||||||
|
glob = "0.3"
|
||||||
handlebars = "3.5.5"
|
handlebars = "3.5.5"
|
||||||
headers = "0.4.0"
|
|
||||||
hex = "0.4.3"
|
hex = "0.4.3"
|
||||||
hex-literal = "0.3.3"
|
hickory-resolver = "0.25.2"
|
||||||
hickory-resolver = "0.25"
|
|
||||||
hkdf = "0.12.3"
|
hkdf = "0.12.3"
|
||||||
hmac = "0.12.1"
|
hmac = "0.12.1"
|
||||||
http = "1"
|
http = "1"
|
||||||
@@ -287,41 +294,43 @@ inventory = "0.3.21"
|
|||||||
ip_network = "0.4.1"
|
ip_network = "0.4.1"
|
||||||
ipnetwork = "0.20"
|
ipnetwork = "0.20"
|
||||||
itertools = "0.14.0"
|
itertools = "0.14.0"
|
||||||
jwt-simple = { version = "0.12.12", default-features = false, features = ["pure-rust"] }
|
jwt-simple = { version = "0.12.12", default-features = false, features = [
|
||||||
|
"pure-rust",
|
||||||
|
] }
|
||||||
k256 = "0.13"
|
k256 = "0.13"
|
||||||
lazy_static = "1.5.0"
|
lazy_static = "1.5.0"
|
||||||
ledger-transport = "0.10.0"
|
ledger-transport = "0.10.0"
|
||||||
ledger-transport-hid = "0.10.0"
|
ledger-transport-hid = "0.10.0"
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
maxminddb = "0.23.0"
|
|
||||||
mime = "0.3.17"
|
mime = "0.3.17"
|
||||||
|
mock_instant = "0.6.0"
|
||||||
moka = { version = "0.12", features = ["future"] }
|
moka = { version = "0.12", features = ["future"] }
|
||||||
nix = "0.27.1"
|
nix = "0.30.1"
|
||||||
notify = "5.1.0"
|
notify = "5.1.0"
|
||||||
okapi = "0.7.0"
|
num_enum = "0.7.5"
|
||||||
once_cell = "1.21.3"
|
once_cell = "1.21.3"
|
||||||
opentelemetry = "0.19.0"
|
opentelemetry = "0.31.0"
|
||||||
opentelemetry-jaeger = "0.18.0"
|
opentelemetry_sdk = "0.31.0"
|
||||||
|
opentelemetry-otlp = "0.31.0"
|
||||||
|
tonic = "0.14.4"
|
||||||
parking_lot = "0.12.3"
|
parking_lot = "0.12.3"
|
||||||
pem = "0.8"
|
pem = "0.8"
|
||||||
petgraph = "0.6.5"
|
petgraph = "0.6.5"
|
||||||
pin-project = "1.1"
|
pin-project = "1.1"
|
||||||
pnet_packet = "0.35.0"
|
pnet_packet = "0.35.0"
|
||||||
pin-project-lite = "0.2.16"
|
|
||||||
publicsuffix = "2.3.0"
|
publicsuffix = "2.3.0"
|
||||||
proc_pidinfo = "0.1.3"
|
proc_pidinfo = "0.1.3"
|
||||||
quote = "1"
|
quote = "1"
|
||||||
rand = "0.8.5"
|
rand = "0.8.5"
|
||||||
|
rand09 = { package = "rand", version = "=0.9.2" }
|
||||||
rand_chacha = "0.3"
|
rand_chacha = "0.3"
|
||||||
|
rand_chacha09 = { package = "rand_chacha", version = "=0.9.0" }
|
||||||
rand_core = "0.6.3"
|
rand_core = "0.6.3"
|
||||||
rand_distr = "0.4"
|
rand_distr = "0.4"
|
||||||
rand_pcg = "0.3.1"
|
|
||||||
rand_seeder = "0.2.3"
|
|
||||||
rayon = "1.5.1"
|
rayon = "1.5.1"
|
||||||
regex = "1.10.6"
|
regex = "1.10.6"
|
||||||
reqwest = { version = "0.12.15", default-features = false }
|
reqwest = { version = "0.13.1", default-features = false }
|
||||||
rs_merkle = "1.5.0"
|
rs_merkle = "1.5.0"
|
||||||
safer-ffi = "0.1.13"
|
|
||||||
schemars = "0.8.22"
|
schemars = "0.8.22"
|
||||||
semver = "1.0.26"
|
semver = "1.0.26"
|
||||||
serde = "1.0.219"
|
serde = "1.0.219"
|
||||||
@@ -333,7 +342,7 @@ serde_repr = "0.1"
|
|||||||
serde_with = "3.9.0"
|
serde_with = "3.9.0"
|
||||||
serde_yaml = "0.9.25"
|
serde_yaml = "0.9.25"
|
||||||
serde_plain = "1.0.2"
|
serde_plain = "1.0.2"
|
||||||
sha2 = "0.10.9"
|
sha2 = "0.10.3"
|
||||||
si-scale = "0.2.3"
|
si-scale = "0.2.3"
|
||||||
snow = "0.9.6"
|
snow = "0.9.6"
|
||||||
sphinx-packet = "=0.6.0"
|
sphinx-packet = "=0.6.0"
|
||||||
@@ -349,6 +358,7 @@ test-with = { version = "0.15.4", default-features = false }
|
|||||||
tempfile = "3.20"
|
tempfile = "3.20"
|
||||||
thiserror = "2.0"
|
thiserror = "2.0"
|
||||||
time = "0.3.41"
|
time = "0.3.41"
|
||||||
|
tls_codec = "0.4.1"
|
||||||
tokio = "1.47"
|
tokio = "1.47"
|
||||||
tokio-postgres = "0.7"
|
tokio-postgres = "0.7"
|
||||||
tokio-stream = "0.1.17"
|
tokio-stream = "0.1.17"
|
||||||
@@ -358,23 +368,23 @@ tokio-tungstenite = { version = "0.20.1" }
|
|||||||
tokio-util = "0.7.15"
|
tokio-util = "0.7.15"
|
||||||
toml = "0.8.22"
|
toml = "0.8.22"
|
||||||
tower = "0.5.2"
|
tower = "0.5.2"
|
||||||
tower-http = "0.5.2"
|
tower-http = "0.6.6"
|
||||||
tracing = "0.1.41"
|
tracing = "0.1.41"
|
||||||
tracing-log = "0.2"
|
tracing-log = "0.2"
|
||||||
tracing-opentelemetry = "0.19.0"
|
tracing-opentelemetry = "0.32.1"
|
||||||
tracing-subscriber = "0.3.19"
|
tracing-subscriber = "0.3.20"
|
||||||
tracing-tree = "0.2.2"
|
|
||||||
tracing-indicatif = "0.3.9"
|
tracing-indicatif = "0.3.9"
|
||||||
tracing-test = "0.2.5"
|
tracing-test = "0.2.5"
|
||||||
ts-rs = "10.1.0"
|
ts-rs = "10.1.0"
|
||||||
tungstenite = { version = "0.20.1", default-features = false }
|
tungstenite = { version = "0.20.1", default-features = false }
|
||||||
|
typed-builder = "0.23.0"
|
||||||
uniffi = "0.29.2"
|
uniffi = "0.29.2"
|
||||||
uniffi_build = "0.29.0"
|
uniffi_build = "0.29.0"
|
||||||
url = "2.5"
|
url = "2.5"
|
||||||
utoipa = "5.2"
|
utoipa = "5.2"
|
||||||
utoipa-swagger-ui = "8.1"
|
utoipa-swagger-ui = "8.1"
|
||||||
utoipauto = "0.2"
|
utoipauto = "0.2"
|
||||||
uuid = "*"
|
uuid = "1.19.0"
|
||||||
vergen = { version = "=8.3.1", default-features = false }
|
vergen = { version = "=8.3.1", default-features = false }
|
||||||
vergen-gitcl = { version = "1.0.8", default-features = false }
|
vergen-gitcl = { version = "1.0.8", default-features = false }
|
||||||
walkdir = "2"
|
walkdir = "2"
|
||||||
@@ -383,11 +393,127 @@ zeroize = "1.7.0"
|
|||||||
|
|
||||||
prometheus = { version = "0.14.0" }
|
prometheus = { version = "0.14.0" }
|
||||||
|
|
||||||
|
|
||||||
|
# libcrux
|
||||||
|
libcrux-kem = { git = "https://github.com/cryspen/libcrux", rev = "b17f8687b67cdcfc10b55aeecc998bbbca28f775" }
|
||||||
|
libcrux-ecdh = { git = "https://github.com/cryspen/libcrux", rev = "b17f8687b67cdcfc10b55aeecc998bbbca28f775" }
|
||||||
|
libcrux-curve25519 = { git = "https://github.com/cryspen/libcrux", rev = "b17f8687b67cdcfc10b55aeecc998bbbca28f775" }
|
||||||
|
libcrux-chacha20poly1305 = { git = "https://github.com/cryspen/libcrux", rev = "b17f8687b67cdcfc10b55aeecc998bbbca28f775" }
|
||||||
|
libcrux-psq = { git = "https://github.com/cryspen/libcrux", rev = "b17f8687b67cdcfc10b55aeecc998bbbca28f775" }
|
||||||
|
libcrux-ml-kem = { git = "https://github.com/cryspen/libcrux", rev = "b17f8687b67cdcfc10b55aeecc998bbbca28f775" }
|
||||||
|
libcrux-sha3 = { git = "https://github.com/cryspen/libcrux", rev = "b17f8687b67cdcfc10b55aeecc998bbbca28f775" }
|
||||||
|
libcrux-traits = { git = "https://github.com/cryspen/libcrux", rev = "b17f8687b67cdcfc10b55aeecc998bbbca28f775" }
|
||||||
|
|
||||||
|
# Workspace dep definitions required by crates.io publication - we need a workspace version since `cargo workspaces` doesn't work with path imports from crate manifests
|
||||||
|
nym-api-requests = { version = "1.20.4", path = "nym-api/nym-api-requests" }
|
||||||
|
nym-authenticator-requests = { version = "1.20.4", path = "common/authenticator-requests" }
|
||||||
|
nym-async-file-watcher = { version = "1.20.4", path = "common/async-file-watcher" }
|
||||||
|
nym-authenticator-client = { version = "1.20.4", path = "nym-authenticator-client" }
|
||||||
|
nym-bandwidth-controller = { version = "1.20.4", path = "common/bandwidth-controller" }
|
||||||
|
nym-bin-common = { version = "1.20.4", path = "common/bin-common" }
|
||||||
|
nym-cache = { version = "1.20.4", path = "common/nym-cache" }
|
||||||
|
nym-client-core = { version = "1.20.4", path = "common/client-core", default-features = false }
|
||||||
|
nym-client-core-config-types = { version = "1.20.4", path = "common/client-core/config-types" }
|
||||||
|
nym-client-core-gateways-storage = { version = "1.20.4", path = "common/client-core/gateways-storage" }
|
||||||
|
nym-client-core-surb-storage = { version = "1.20.4", path = "common/client-core/surb-storage" }
|
||||||
|
nym-client-websocket-requests = { version = "1.20.4", path = "clients/native/websocket-requests" }
|
||||||
|
nym-common = { version = "1.20.4", path = "common/nym-common" }
|
||||||
|
nym-compact-ecash = { version = "1.20.4", path = "common/nym_offline_compact_ecash" }
|
||||||
|
nym-config = { version = "1.20.4", path = "common/config" }
|
||||||
|
nym-contracts-common = { version = "1.20.4", path = "common/cosmwasm-smart-contracts/contracts-common" }
|
||||||
|
nym-coconut-dkg-common = { version = "1.20.4", path = "common/cosmwasm-smart-contracts/coconut-dkg" }
|
||||||
|
nym-credential-storage = { version = "1.20.4", path = "common/credential-storage" }
|
||||||
|
nym-credential-utils = { version = "1.20.4", path = "common/credential-utils" }
|
||||||
|
nym-credential-proxy-lib = { version = "1.20.4", path = "common/credential-proxy" }
|
||||||
|
nym-credentials = { version = "1.20.4", path = "common/credentials", default-features = false }
|
||||||
|
nym-credentials-interface = { version = "1.20.4", path = "common/credentials-interface" }
|
||||||
|
nym-credential-proxy-requests = { version = "1.20.4", path = "nym-credential-proxy/nym-credential-proxy-requests", default-features = false }
|
||||||
|
nym-credential-verification = { version = "1.20.4", path = "common/credential-verification" }
|
||||||
|
nym-crypto = { version = "1.20.4", path = "common/crypto", default-features = false }
|
||||||
|
nym-dkg = { version = "1.20.4", path = "common/dkg" }
|
||||||
|
nym-ecash-contract-common = { version = "1.20.4", path = "common/cosmwasm-smart-contracts/ecash-contract" }
|
||||||
|
nym-ecash-signer-check = { version = "1.20.4", path = "common/ecash-signer-check" }
|
||||||
|
nym-ecash-signer-check-types = { version = "1.20.4", path = "common/ecash-signer-check-types" }
|
||||||
|
nym-ecash-time = { version = "1.20.4", path = "common/ecash-time" }
|
||||||
|
nym-exit-policy = { version = "1.20.4", path = "common/exit-policy" }
|
||||||
|
nym-ffi-shared = { version = "1.20.4", path = "sdk/ffi/shared" }
|
||||||
|
nym-gateway-client = { version = "1.20.4", path = "common/client-libs/gateway-client", default-features = false }
|
||||||
|
nym-gateway-requests = { version = "1.20.4", path = "common/gateway-requests" }
|
||||||
|
nym-gateway-storage = { version = "1.20.4", path = "common/gateway-storage" }
|
||||||
|
nym-gateway-stats-storage = { version = "1.20.4", path = "common/gateway-stats-storage" }
|
||||||
|
nym-group-contract-common = { version = "1.20.4", path = "common/cosmwasm-smart-contracts/group-contract" }
|
||||||
|
nym-http-api-client = { version = "1.20.4", path = "common/http-api-client" }
|
||||||
|
nym-http-api-client-macro = { version = "1.20.4", path = "common/http-api-client-macro" }
|
||||||
|
nym-http-api-common = { version = "1.20.4", path = "common/http-api-common", default-features = false }
|
||||||
|
nym-id = { version = "1.20.4", path = "common/nym-id" }
|
||||||
|
nym-ip-packet-client = { version = "1.20.4", path = "nym-ip-packet-client" }
|
||||||
|
nym-ip-packet-requests = { version = "1.20.4", path = "common/ip-packet-requests" }
|
||||||
|
nym-lp = { version = "1.20.4", path = "common/nym-lp" }
|
||||||
|
nym-kkt = { version = "0.1.0", path = "common/nym-kkt" }
|
||||||
|
nym-kkt-ciphersuite = { version = "1.20.4", path = "common/nym-kkt-ciphersuite" }
|
||||||
|
nym-kkt-context = { version = "1.20.4", path = "common/nym-kkt-context" }
|
||||||
|
nym-metrics = { version = "1.20.4", path = "common/nym-metrics" }
|
||||||
|
nym-mixnet-client = { version = "1.20.4", path = "common/client-libs/mixnet-client" }
|
||||||
|
nym-mixnet-contract-common = { version = "1.20.4", path = "common/cosmwasm-smart-contracts/mixnet-contract" }
|
||||||
|
nym-multisig-contract-common = { version = "1.20.4", path = "common/cosmwasm-smart-contracts/multisig-contract" }
|
||||||
|
nym-network-defaults = { version = "1.20.4", path = "common/network-defaults" }
|
||||||
|
nym-node-tester-utils = { version = "1.20.4", path = "common/node-tester-utils" }
|
||||||
|
nym-noise = { version = "1.20.4", path = "common/nymnoise" }
|
||||||
|
nym-noise-keys = { version = "1.20.4", path = "common/nymnoise/keys" }
|
||||||
|
nym-nonexhaustive-delayqueue = { version = "1.20.4", path = "common/nonexhaustive-delayqueue" }
|
||||||
|
nym-node-requests = { version = "1.20.4", path = "nym-node/nym-node-requests", default-features = false }
|
||||||
|
nym-node-metrics = { version = "1.20.4", path = "nym-node/nym-node-metrics" }
|
||||||
|
nym-ordered-buffer = { version = "1.20.4", path = "common/socks5/ordered-buffer" }
|
||||||
|
nym-outfox = { version = "1.20.4", path = "nym-outfox" }
|
||||||
|
nym-registration-common = { version = "1.20.4", path = "common/registration" }
|
||||||
|
nym-pemstore = { version = "1.20.4", path = "common/pemstore" }
|
||||||
|
nym-performance-contract-common = { version = "1.20.4", path = "common/cosmwasm-smart-contracts/nym-performance-contract" }
|
||||||
|
nym-sdk = { version = "1.20.4", path = "sdk/rust/nym-sdk" }
|
||||||
|
nym-serde-helpers = { version = "1.20.4", path = "common/serde-helpers" }
|
||||||
|
nym-service-providers-common = { version = "1.20.4", path = "service-providers/common" }
|
||||||
|
nym-service-provider-requests-common = { version = "1.20.4", path = "common/service-provider-requests-common" }
|
||||||
|
nym-socks5-client-core = { version = "1.20.4", path = "common/socks5-client-core" }
|
||||||
|
nym-socks5-proxy-helpers = { version = "1.20.4", path = "common/socks5/proxy-helpers" }
|
||||||
|
nym-socks5-requests = { version = "1.20.4", path = "common/socks5/requests" }
|
||||||
|
nym-sphinx = { version = "1.20.4", path = "common/nymsphinx" }
|
||||||
|
nym-sphinx-acknowledgements = { version = "1.20.4", path = "common/nymsphinx/acknowledgements" }
|
||||||
|
nym-sphinx-addressing = { version = "1.20.4", path = "common/nymsphinx/addressing" }
|
||||||
|
nym-sphinx-anonymous-replies = { version = "1.20.4", path = "common/nymsphinx/anonymous-replies" }
|
||||||
|
nym-sphinx-chunking = { version = "1.20.4", path = "common/nymsphinx/chunking" }
|
||||||
|
nym-sphinx-cover = { version = "1.20.4", path = "common/nymsphinx/cover" }
|
||||||
|
nym-sphinx-forwarding = { version = "1.20.4", path = "common/nymsphinx/forwarding" }
|
||||||
|
nym-sphinx-framing = { version = "1.20.4", path = "common/nymsphinx/framing" }
|
||||||
|
nym-sphinx-params = { version = "1.20.4", path = "common/nymsphinx/params" }
|
||||||
|
nym-sphinx-routing = { version = "1.20.4", path = "common/nymsphinx/routing" }
|
||||||
|
nym-sphinx-types = { version = "1.20.4", path = "common/nymsphinx/types" }
|
||||||
|
nym-statistics-common = { version = "1.20.4", path = "common/statistics" }
|
||||||
|
nym-store-cipher = { version = "1.20.4", path = "common/store-cipher" }
|
||||||
|
nym-task = { version = "1.20.4", path = "common/task" }
|
||||||
|
nym-tun = { version = "1.20.4", path = "common/tun" }
|
||||||
|
nym-test-utils = { version = "1.20.4", path = "common/test-utils" }
|
||||||
|
nym-ticketbooks-merkle = { version = "1.20.4", path = "common/ticketbooks-merkle" }
|
||||||
|
nym-topology = { version = "1.20.4", path = "common/topology" }
|
||||||
|
nym-types = { version = "1.20.4", path = "common/types" }
|
||||||
|
nym-upgrade-mode-check = { version = "1.20.4", path = "common/upgrade-mode-check" }
|
||||||
|
nym-validator-client = { version = "1.20.4", path = "common/client-libs/validator-client", default-features = false }
|
||||||
|
nym-vesting-contract-common = { version = "1.20.4", path = "common/cosmwasm-smart-contracts/vesting-contract" }
|
||||||
|
nym-verloc = { version = "1.20.4", path = "common/verloc" }
|
||||||
|
nym-wireguard = { version = "1.20.4", path = "common/wireguard" }
|
||||||
|
nym-wireguard-types = { version = "1.20.4", path = "common/wireguard-types" }
|
||||||
|
nym-wireguard-private-metadata-shared = { version = "1.20.4", path = "common/wireguard-private-metadata/shared" }
|
||||||
|
nym-wireguard-private-metadata-client = { version = "1.20.4", path = "common/wireguard-private-metadata/client" }
|
||||||
|
nym-wireguard-private-metadata-server = { version = "1.20.4", path = "common/wireguard-private-metadata/server" }
|
||||||
|
nym-sqlx-pool-guard = { version = "1.2.0", path = "nym-sqlx-pool-guard" }
|
||||||
|
nym-wasm-client-core = { version = "1.20.4", path = "common/wasm/client-core" }
|
||||||
|
nym-wasm-storage = { version = "1.20.4", path = "common/wasm/storage" }
|
||||||
|
nym-wasm-utils = { version = "1.20.4", path = "common/wasm/utils", default-features = false }
|
||||||
|
nyxd-scraper-shared = { version = "1.20.4", path = "common/nyxd-scraper-shared" }
|
||||||
|
|
||||||
# coconut/DKG related
|
# coconut/DKG related
|
||||||
# unfortunately until https://github.com/zkcrypto/bls12_381/issues/10 is resolved, we have to rely on the fork
|
# unfortunately until https://github.com/zkcrypto/nym-bls12_381-fork/issues/10 is resolved, we have to rely on the fork
|
||||||
# as we need to be able to serialize Gt so that we could create the lookup table for baby-step-giant-step algorithm
|
# as we need to be able to serialize Gt so that we could create the lookup table for baby-step-giant-step algorithm
|
||||||
# plus to make our live easier we need serde support from https://github.com/zkcrypto/bls12_381/pull/125
|
# plus to make our live easier we need serde support from https://github.com/zkcrypto/nym-bls12_381-fork/pull/125
|
||||||
bls12_381 = { git = "https://github.com/jstuczyn/bls12_381", default-features = false, branch = "temp/experimental-serdect-updated" }
|
nym-bls12_381-fork = { version = "0.8.0-forked", default-features = false }
|
||||||
group = { version = "0.13.0", default-features = false }
|
group = { version = "0.13.0", default-features = false }
|
||||||
ff = { version = "0.13.1", default-features = false }
|
ff = { version = "0.13.1", default-features = false }
|
||||||
subtle = "2.5.0"
|
subtle = "2.5.0"
|
||||||
@@ -408,7 +534,9 @@ cw-multi-test = "=2.3.2"
|
|||||||
bip32 = { version = "0.5.3", default-features = false }
|
bip32 = { version = "0.5.3", default-features = false }
|
||||||
|
|
||||||
|
|
||||||
cosmrs = { version = "0.21.1" }
|
cosmrs = { version = "0.22.0" }
|
||||||
|
cosmos-sdk-proto = { version = "0.27.0" }
|
||||||
|
ibc-proto = { version = "0.52.0" }
|
||||||
tendermint = "0.40.4"
|
tendermint = "0.40.4"
|
||||||
tendermint-rpc = "0.40.4"
|
tendermint-rpc = "0.40.4"
|
||||||
prost = { version = "0.13", default-features = false }
|
prost = { version = "0.13", default-features = false }
|
||||||
@@ -464,6 +592,11 @@ opt-level = 'z'
|
|||||||
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tokio_unstable)'] }
|
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tokio_unstable)'] }
|
||||||
|
|
||||||
[workspace.lints.clippy]
|
[workspace.lints.clippy]
|
||||||
|
suspicious = "deny"
|
||||||
|
complexity = "deny"
|
||||||
|
perf = "deny"
|
||||||
|
style = "deny"
|
||||||
|
|
||||||
unwrap_used = "deny"
|
unwrap_used = "deny"
|
||||||
expect_used = "deny"
|
expect_used = "deny"
|
||||||
todo = "deny"
|
todo = "deny"
|
||||||
|
|||||||
@@ -104,28 +104,29 @@ $(eval $(call add_cargo_workspace,wallet,nym-wallet))
|
|||||||
sdk-wasm: sdk-wasm-build sdk-wasm-test sdk-wasm-lint
|
sdk-wasm: sdk-wasm-build sdk-wasm-test sdk-wasm-lint
|
||||||
|
|
||||||
sdk-wasm-build:
|
sdk-wasm-build:
|
||||||
$(MAKE) -C nym-browser-extension/storage wasm-pack
|
# $(MAKE) -C nym-browser-extension/storage wasm-pack
|
||||||
$(MAKE) -C wasm/client
|
$(MAKE) -C wasm/client
|
||||||
$(MAKE) -C wasm/node-tester
|
$(MAKE) -C wasm/node-tester
|
||||||
# $(MAKE) -C wasm/mix-fetch
|
$(MAKE) -C wasm/mix-fetch
|
||||||
$(MAKE) -C wasm/zknym-lib
|
# $(MAKE) -C wasm/zknym-lib
|
||||||
# $(MAKE) -C wasm/full-nym-wasm
|
# $(MAKE) -C wasm/full-nym-wasm
|
||||||
|
|
||||||
# run this from npm/yarn to ensure tools are in the path, e.g. yarn build:sdk from root of repo
|
# run this from npm/yarn to ensure tools are in the path, e.g. yarn build:sdk from root of repo
|
||||||
sdk-typescript-build:
|
sdk-typescript-build:
|
||||||
npx lerna run --scope @nymproject/sdk build --stream
|
npx lerna run --scope @nymproject/sdk build --stream
|
||||||
# npx lerna run --scope @nymproject/mix-fetch build --stream
|
npx lerna run --scope @nymproject/mix-fetch build --stream
|
||||||
# npx lerna run --scope @nymproject/node-tester build --stream
|
npx lerna run --scope @nymproject/node-tester build --stream
|
||||||
# yarn --cwd sdk/typescript/codegen/contract-clients build
|
yarn --cwd sdk/typescript/codegen/contract-clients build
|
||||||
|
|
||||||
# NOTE: These targets are part of the main workspace (but not as wasm32-unknown-unknown)
|
# NOTE: These targets are part of the main workspace (but not as wasm32-unknown-unknown)
|
||||||
WASM_CRATES = extension-storage nym-client-wasm nym-node-tester-wasm zknym-lib
|
# WASM_CRATES = extension-storage nym-client-wasm nym-node-tester-wasm zknym-lib
|
||||||
|
WASM_CRATES = nym-client-wasm nym-node-tester-wasm
|
||||||
|
|
||||||
sdk-wasm-test:
|
sdk-wasm-test:
|
||||||
#cargo test $(addprefix -p , $(WASM_CRATES)) --target wasm32-unknown-unknown -- -Dwarnings
|
#cargo test $(addprefix -p , $(WASM_CRATES)) --target wasm32-unknown-unknown -- -Dwarnings
|
||||||
|
|
||||||
sdk-wasm-lint:
|
sdk-wasm-lint:
|
||||||
cargo clippy $(addprefix -p , $(WASM_CRATES)) --target wasm32-unknown-unknown -- -Dwarnings
|
RUSTFLAGS='--cfg getrandom_backend="wasm_js"' cargo clippy $(addprefix -p , $(WASM_CRATES)) --target wasm32-unknown-unknown -- -Dwarnings
|
||||||
$(MAKE) -C wasm/mix-fetch check-fmt
|
$(MAKE) -C wasm/mix-fetch check-fmt
|
||||||
|
|
||||||
# Add to top-level targets
|
# Add to top-level targets
|
||||||
|
|||||||
@@ -0,0 +1,191 @@
|
|||||||
|
# config file for ansible -- http://ansible.com/
|
||||||
|
# ==============================================
|
||||||
|
|
||||||
|
# nearly all parameters can be overridden in ansible-playbook
|
||||||
|
# or with command line flags. ansible will read ANSIBLE_CONFIG,
|
||||||
|
# ansible.cfg in the current working directory, .ansible.cfg in
|
||||||
|
# the home directory or /etc/ansible/ansible.cfg, whichever it
|
||||||
|
# finds first
|
||||||
|
|
||||||
|
[defaults]
|
||||||
|
# some basic default values...
|
||||||
|
|
||||||
|
inventory = inventory/all
|
||||||
|
#library = /usr/share/my_modules/
|
||||||
|
remote_tmp = $HOME/.ansible/tmp
|
||||||
|
pattern = *
|
||||||
|
forks = 5
|
||||||
|
poll_interval = 15
|
||||||
|
transport = smart
|
||||||
|
remote_port = 22
|
||||||
|
module_lang = C
|
||||||
|
|
||||||
|
# plays will gather facts by default, which contain information about
|
||||||
|
# the remote system.
|
||||||
|
#
|
||||||
|
# smart - gather by default, but don't regather if already gathered
|
||||||
|
# implicit - gather by default, turn off with gather_facts: False
|
||||||
|
# explicit - do not gather by default, must say gather_facts: True
|
||||||
|
gathering = implicit
|
||||||
|
|
||||||
|
# additional paths to search for roles in, colon separated
|
||||||
|
roles_path = ../roles
|
||||||
|
|
||||||
|
# uncomment this to disable SSH key host checking
|
||||||
|
host_key_checking = False
|
||||||
|
|
||||||
|
# what flags to pass to sudo
|
||||||
|
#sudo_flags = -H
|
||||||
|
|
||||||
|
# SSH timeout
|
||||||
|
timeout = 100
|
||||||
|
|
||||||
|
# default user to use for playbooks if user is not specified
|
||||||
|
# (/usr/bin/ansible will use current user as default)
|
||||||
|
#remote_user = root
|
||||||
|
|
||||||
|
# logging is off by default unless this path is defined
|
||||||
|
# if so defined, consider logrotate
|
||||||
|
#log_path = /var/log/ansible.log
|
||||||
|
|
||||||
|
# default module name for /usr/bin/ansible
|
||||||
|
#module_name = command
|
||||||
|
|
||||||
|
# use this shell for commands executed under sudo
|
||||||
|
# you may need to change this to bin/bash in rare instances
|
||||||
|
# if sudo is constrained
|
||||||
|
#executable = /bin/sh
|
||||||
|
|
||||||
|
# if inventory variables overlap, does the higher precedence one win
|
||||||
|
# or are hash values merged together? The default is 'replace' but
|
||||||
|
# this can also be set to 'merge'.
|
||||||
|
#hash_behaviour = replace
|
||||||
|
|
||||||
|
# list any Jinja2 extensions to enable here:
|
||||||
|
#jinja2_extensions = jinja2.ext.do,jinja2.ext.i18n
|
||||||
|
|
||||||
|
# if set, always use this private key file for authentication, same as
|
||||||
|
# if passing --private -key to ansible or ansible-playbook
|
||||||
|
#private_key_file = /path/to/file
|
||||||
|
|
||||||
|
# format of string {{ ansible_managed }} available within Jinja2
|
||||||
|
# templates indicates to users editing templates files will be replaced.
|
||||||
|
# replacing {file}, {host} and {uid} and strftime codes with proper values.
|
||||||
|
ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host}
|
||||||
|
|
||||||
|
# by default, ansible-playbook will display "Skipping [host]" if it determines a task
|
||||||
|
# should not be run on a host. Set this to "False" if you don't want to see these "Skipping"
|
||||||
|
# messages. NOTE: the task header will still be shown regardless of whether or not the
|
||||||
|
# task is skipped.
|
||||||
|
#display_skipped_hosts = True
|
||||||
|
|
||||||
|
# by default (as of 1.3), Ansible will raise errors when attempting to dereference
|
||||||
|
# Jinja2 variables that are not set in templates or action lines. Uncomment this line
|
||||||
|
# to revert the behavior to pre-1.3.
|
||||||
|
#error_on_undefined_vars = False
|
||||||
|
|
||||||
|
# by default (as of 1.6), Ansible may display warnings based on the configuration of the
|
||||||
|
# system running ansible itself. This may include warnings about 3rd party packages or
|
||||||
|
# other conditions that should be resolved if possible.
|
||||||
|
# to disable these warnings, set the following value to False:
|
||||||
|
#system_warnings = True
|
||||||
|
|
||||||
|
# by default (as of 1.4), Ansible may display deprecation warnings for language
|
||||||
|
# features that should no longer be used and will be removed in future versions.
|
||||||
|
# to disable these warnings, set the following value to False:
|
||||||
|
#deprecation_warnings = True
|
||||||
|
|
||||||
|
# (as of 1.8), Ansible can optionally warn when usage of the shell and
|
||||||
|
# command module appear to be simplified by using a default Ansible module
|
||||||
|
# instead. These warnings can be silenced by adjusting the following
|
||||||
|
# setting or adding warn=yes or warn=no to the end of the command line
|
||||||
|
# parameter string. This will for example suggest using the git module
|
||||||
|
# instead of shelling out to the git command.
|
||||||
|
# command_warnings = False
|
||||||
|
|
||||||
|
|
||||||
|
# set plugin path directories here, separate with colons
|
||||||
|
action_plugins = ../../other/plugins/action
|
||||||
|
callback_plugins = ../../other/plugins/callback
|
||||||
|
connection_plugins = ../../other/plugins/connection
|
||||||
|
lookup_plugins = ../../other/plugins/lookup
|
||||||
|
vars_plugins = ../../other/plugins/vars
|
||||||
|
filter_plugins = ../../other/plugins/filter
|
||||||
|
|
||||||
|
# by default callbacks are not loaded for /bin/ansible, enable this if you
|
||||||
|
# want, for example, a notification or logging callback to also apply to
|
||||||
|
# /bin/ansible runs
|
||||||
|
#bin_ansible_callbacks = False
|
||||||
|
|
||||||
|
|
||||||
|
# don't like cows? that's unfortunate.
|
||||||
|
# set to 1 if you don't want cowsay support or export ANSIBLE_NOCOWS=1
|
||||||
|
#nocows = 1
|
||||||
|
|
||||||
|
# don't like colors either?
|
||||||
|
# set to 1 if you don't want colors, or export ANSIBLE_NOCOLOR=1
|
||||||
|
#nocolor = 1
|
||||||
|
|
||||||
|
# the CA certificate path used for validating SSL certs. This path
|
||||||
|
# should exist on the controlling node, not the target nodes
|
||||||
|
# common locations:
|
||||||
|
# RHEL/CentOS: /etc/pki/tls/certs/ca-bundle.crt
|
||||||
|
# Fedora : /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
|
||||||
|
# Ubuntu : /usr/share/ca-certificates/cacert.org/cacert.org.crt
|
||||||
|
#ca_file_path =
|
||||||
|
|
||||||
|
# the http user-agent string to use when fetching urls. Some web server
|
||||||
|
# operators block the default urllib user agent as it is frequently used
|
||||||
|
# by malicious attacks/scripts, so we set it to something unique to
|
||||||
|
# avoid issues.
|
||||||
|
#http_user_agent = ansible-agent
|
||||||
|
|
||||||
|
# if set to a persistant type (not 'memory', for example 'redis') fact values
|
||||||
|
# from previous runs in Ansible will be stored. This may be useful when
|
||||||
|
# wanting to use, for example, IP information from one group of servers
|
||||||
|
# without having to talk to them in the same playbook run to get their
|
||||||
|
# current IP information.
|
||||||
|
fact_caching = memory
|
||||||
|
|
||||||
|
[paramiko_connection]
|
||||||
|
|
||||||
|
# uncomment this line to cause the paramiko connection plugin to not record new host
|
||||||
|
# keys encountered. Increases performance on new host additions. Setting works independently of the
|
||||||
|
# host key checking setting above.
|
||||||
|
#record_host_keys=False
|
||||||
|
|
||||||
|
# by default, Ansible requests a pseudo-terminal for commands executed under sudo. Uncomment this
|
||||||
|
# line to disable this behaviour.
|
||||||
|
#pty=False
|
||||||
|
|
||||||
|
[ssh_connection]
|
||||||
|
|
||||||
|
# ssh arguments to use
|
||||||
|
# Leaving off ControlPersist will result in poor performance, so use
|
||||||
|
# paramiko on older platforms rather than removing it
|
||||||
|
#ssh_args = -o ControlMaster=auto -o ControlPersist=60s
|
||||||
|
|
||||||
|
# The path to use for the ControlPath sockets. This defaults to
|
||||||
|
# "%(directory)s/ansible-ssh-%%h-%%p-%%r", however on some systems with
|
||||||
|
# very long hostnames or very long path names (caused by long user names or
|
||||||
|
# deeply nested home directories) this can exceed the character limit on
|
||||||
|
# file socket names (108 characters for most platforms). In that case, you
|
||||||
|
# may wish to shorten the string below.
|
||||||
|
#
|
||||||
|
# Example:
|
||||||
|
# control_path = %(directory)s/%%h-%%r
|
||||||
|
#control_path = %(directory)s/ansible-ssh-%%h-%%p-%%r
|
||||||
|
|
||||||
|
# Enabling pipelining reduces the number of SSH operations required to
|
||||||
|
# execute a module on the remote server. This can result in a significant
|
||||||
|
# performance improvement when enabled, however when using "sudo:" you must
|
||||||
|
# first disable 'requiretty' in /etc/sudoers
|
||||||
|
#
|
||||||
|
# By default, this option is disabled to preserve compatibility with
|
||||||
|
# sudoers configurations that have requiretty (the default on many distros).
|
||||||
|
#
|
||||||
|
#pipelining = False
|
||||||
|
|
||||||
|
# if True, make ansible use scp if the connection type is ssh
|
||||||
|
# (default is sftp)
|
||||||
|
scp_if_ssh = True
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- name: Nym node bonding / post-installation
|
||||||
|
hosts: all # or a specific host/group
|
||||||
|
gather_facts: false
|
||||||
|
serial: 1
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- role: postinstall
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
- name: "Deploy Nym node"
|
||||||
|
hosts: all # or a specific host/group
|
||||||
|
become: true
|
||||||
|
roles:
|
||||||
|
- base
|
||||||
|
- nym
|
||||||
|
- nginx
|
||||||
|
- tunnel # comment out for mixnode
|
||||||
|
- quic # comment out for mixnode or non-wireguard gateway
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
---
|
||||||
|
ansible_ssh_private_key_file: ~/.ssh/<SSH_KEY>
|
||||||
|
|
||||||
|
# nym_version: "v2025.21-mozzarella"
|
||||||
|
#
|
||||||
|
# NOTE:
|
||||||
|
# if you want to pin Nym to a specific version instead of using the
|
||||||
|
# latest release from GitHub in /tasks/main.yml then
|
||||||
|
# uncomment the line above and set the tag
|
||||||
|
|
||||||
|
cli_url: "https://github.com/nymtech/nym/releases/download/nym-binaries-{{ nym_version }}/nym-cli"
|
||||||
|
tunnel_manager_url: "https://github.com/nymtech/nym/raw/refs/heads/develop/scripts/nym-node-setup/network-tunnel-manager.sh"
|
||||||
|
quic_bridge_deployment_url: "https://raw.githubusercontent.com/nymtech/nym/refs/heads/develop/scripts/nym-node-setup/quic_bridge_deployment.sh"
|
||||||
|
|
||||||
|
# NOTE: These values will be used globally unless overwritten per node in inventory/all
|
||||||
|
ansible_user: root # used for ssh, like `ssh root@nym-exit.ch-1.mynodes.net`
|
||||||
|
email: "<EMAIL>" # used in certbot, description.toml and landing page
|
||||||
|
website: "<WEBSITE>" # it is used in the description.toml
|
||||||
|
description: "<NODE_PUBLIC_DESCRIPTION>" # or define per node in inventory/all
|
||||||
|
|
||||||
|
# NOTE: Set these vars if you want them globally for all nodes
|
||||||
|
# Per node changes in inventory/all will overwrite these global ones:
|
||||||
|
hostname: "" # this is a fallback, keep it and setup hostname per node in inventory/all
|
||||||
|
# moniker: "<MONIKER>" # if not setup here not in inventory/all it get's derived from the hostname
|
||||||
|
# mode: <MODE> # entry-gateway/exit-gateway/mixnode
|
||||||
|
# wireguard_enabled: <WIREGUARD_ENABLED> # true/false
|
||||||
|
|
||||||
|
# NOTE: Possible vars to incule on landing page, etc.
|
||||||
|
# operator_name: "<OPERATOR_NAME>"
|
||||||
|
|
||||||
|
packages:
|
||||||
|
- tmux
|
||||||
|
- speedtest-cli
|
||||||
|
- nano
|
||||||
|
- htop
|
||||||
|
- git
|
||||||
|
- zip
|
||||||
|
- nala
|
||||||
|
- curl
|
||||||
|
- neovim
|
||||||
|
- ca-certificates
|
||||||
|
- jq
|
||||||
|
- wget
|
||||||
|
- ufw
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
[nym_nodes]
|
||||||
|
# READ CONFIGURATION GUIDE:
|
||||||
|
# https://nym.com//docs/operators/orchestration/ansible#configuration
|
||||||
|
|
||||||
|
# VARIABLES INFO
|
||||||
|
# required vars to set values per node:
|
||||||
|
# `ansible_host`, `hostname`, `location`
|
||||||
|
|
||||||
|
# global vars can be set in the group_vars/all.yml, for example:
|
||||||
|
# `email`, `ansible_user`, `moniker`, `description`, `mode`, `wireguard_enabled`
|
||||||
|
# othersise they must be set per node!
|
||||||
|
|
||||||
|
############
|
||||||
|
# TEMPLATE #
|
||||||
|
############
|
||||||
|
# node1 ansible_host=<YOUR_SERVER_IP> ansible_user=<USER> hostname=<HOSTNAME> location=<LOCATION> email=<EMAIL> mode=<MODE> wireguard_enabled=<true/false> moniker=<MONIKER> description=<DESCRIPTION>
|
||||||
|
|
||||||
|
# remove all comments and exchange the <VARIABLES> with your real values for each node
|
||||||
|
# without <> brackets
|
||||||
|
|
||||||
|
# PRIORITY ORDER
|
||||||
|
# anything setup globaly can be overwritten in this file per node
|
||||||
|
# if provided here, it takes priority over the global setting
|
||||||
|
|
||||||
|
# EXAMPLES
|
||||||
|
# exit + wireguard gateway:
|
||||||
|
# node2 ansible_host=11.12.13.14 hostname=nym-exit.ch-1.mydomain.net mode=exit-gateway location=CH wireguard_enabled=true
|
||||||
|
|
||||||
|
# entry gateway, no wireguard:
|
||||||
|
# node3 ansible_host=12.13.14.15 hostname=nym-entry.ch-2.mydomain.net mode=entry-gateway location=CH wireguard_enabled=false
|
||||||
|
|
||||||
|
# NOTE:
|
||||||
|
# all examples above don't have defined user, email nor description as we use the definition from group_vars/main.yml without an attempt of overwriting it
|
||||||
|
# all examples above don't have moniker defined as there is a function in /templates/description.toml.j2 deriving it from the hostname
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
- name: "Upgrade Nym node"
|
||||||
|
hosts: all # or a specific host/group or limit via -l on CLI (ansible-playbook playbooks/upgrade.yml -l mynode1)
|
||||||
|
become: true
|
||||||
|
serial: 1
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- base
|
||||||
|
- upgrade
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
- name: Set hostname
|
||||||
|
hostname:
|
||||||
|
name: "{{ hostname }}"
|
||||||
|
when: hostname is defined and hostname | length > 0
|
||||||
|
|
||||||
|
- name: Install aptitude
|
||||||
|
apt:
|
||||||
|
name: aptitude
|
||||||
|
update_cache: yes
|
||||||
|
state: present
|
||||||
|
force_apt_get: yes
|
||||||
|
|
||||||
|
- name: Update packages
|
||||||
|
apt:
|
||||||
|
update_cache: yes
|
||||||
|
upgrade: yes
|
||||||
|
|
||||||
|
- name: Install essential packages
|
||||||
|
package:
|
||||||
|
name: "{{ packages }}"
|
||||||
|
state: latest
|
||||||
|
update_cache: yes
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
- name: Reload nginx
|
||||||
|
service:
|
||||||
|
name: nginx
|
||||||
|
state: reloaded
|
||||||
|
|
||||||
|
- name: Restart nginx
|
||||||
|
service:
|
||||||
|
name: nginx
|
||||||
|
state: restarted
|
||||||
@@ -0,0 +1,173 @@
|
|||||||
|
---
|
||||||
|
- name: Install nginx and certbot
|
||||||
|
apt:
|
||||||
|
name:
|
||||||
|
- nginx
|
||||||
|
- certbot
|
||||||
|
- python3-certbot-nginx
|
||||||
|
state: present
|
||||||
|
update_cache: yes
|
||||||
|
|
||||||
|
- name: Ensure nginx snippets directory exists
|
||||||
|
file:
|
||||||
|
path: /etc/nginx/snippets
|
||||||
|
state: directory
|
||||||
|
mode: "0755"
|
||||||
|
|
||||||
|
# own SSL defaults - don't rely on certbot files
|
||||||
|
- name: Install Nym SSL options snippet
|
||||||
|
copy:
|
||||||
|
dest: /etc/nginx/snippets/nym-ssl-options.conf
|
||||||
|
mode: "0644"
|
||||||
|
content: |
|
||||||
|
ssl_session_cache shared:NYMSSL:10m;
|
||||||
|
ssl_session_timeout 1d;
|
||||||
|
ssl_session_tickets off;
|
||||||
|
|
||||||
|
ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
|
ssl_prefer_server_ciphers off;
|
||||||
|
|
||||||
|
# Reasonable modern cipher set (works across Ubuntu nginx builds)
|
||||||
|
ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305";
|
||||||
|
|
||||||
|
# OCSP stapling is nice but can break if resolver isn't set; keep minimal here.
|
||||||
|
notify: Restart nginx
|
||||||
|
|
||||||
|
- name: Ensure web root directory exists
|
||||||
|
file:
|
||||||
|
path: "/var/www/{{ hostname }}"
|
||||||
|
state: directory
|
||||||
|
mode: "0755"
|
||||||
|
|
||||||
|
- name: Deploy landing page
|
||||||
|
template:
|
||||||
|
src: landing.html.j2
|
||||||
|
dest: "/var/www/{{ hostname }}/index.html"
|
||||||
|
mode: "0644"
|
||||||
|
notify: Restart nginx
|
||||||
|
|
||||||
|
# remove default site - safe on fresh + redeploy
|
||||||
|
- name: Disable default nginx site symlink
|
||||||
|
file:
|
||||||
|
path: /etc/nginx/sites-enabled/default
|
||||||
|
state: absent
|
||||||
|
notify: Restart nginx
|
||||||
|
|
||||||
|
- name: Remove default nginx site definition if present
|
||||||
|
file:
|
||||||
|
path: /etc/nginx/sites-available/default
|
||||||
|
state: absent
|
||||||
|
notify: Restart nginx
|
||||||
|
|
||||||
|
# always deploy/enable HTTP vhost
|
||||||
|
- name: Deploy HTTP vhost
|
||||||
|
template:
|
||||||
|
src: nginx-site.conf.j2
|
||||||
|
dest: "/etc/nginx/sites-available/{{ hostname }}"
|
||||||
|
mode: "0644"
|
||||||
|
notify: Restart nginx
|
||||||
|
|
||||||
|
- name: Enable HTTP vhost (force correct symlink)
|
||||||
|
file:
|
||||||
|
src: "/etc/nginx/sites-available/{{ hostname }}"
|
||||||
|
dest: "/etc/nginx/sites-enabled/{{ hostname }}"
|
||||||
|
state: link
|
||||||
|
force: true
|
||||||
|
notify: Restart nginx
|
||||||
|
|
||||||
|
# detect if cert exists already
|
||||||
|
- name: Check whether certificate exists
|
||||||
|
stat:
|
||||||
|
path: "/etc/letsencrypt/live/{{ hostname }}/fullchain.pem"
|
||||||
|
register: le_cert
|
||||||
|
|
||||||
|
# if cert does NOT exist yet, ensure SSL/WSS are NOT enabled
|
||||||
|
- name: Ensure SSL and WSS vhosts are disabled until cert exists
|
||||||
|
file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: absent
|
||||||
|
loop:
|
||||||
|
- "/etc/nginx/sites-enabled/{{ hostname }}-ssl"
|
||||||
|
- "/etc/nginx/sites-enabled/nym-wss-config"
|
||||||
|
when: not le_cert.stat.exists
|
||||||
|
notify: Restart nginx
|
||||||
|
|
||||||
|
- name: Ensure nginx is enabled and running (needed for ACME http-01)
|
||||||
|
service:
|
||||||
|
name: nginx
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
||||||
|
|
||||||
|
- name: Validate nginx configuration (HTTP stage)
|
||||||
|
command: nginx -t
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Flush handlers (ensure HTTP is active before certbot)
|
||||||
|
meta: flush_handlers
|
||||||
|
|
||||||
|
# certbot strategy:
|
||||||
|
# - if cert exists: webroot - doesn't touch nginx
|
||||||
|
# - else: --nginx works first-time; may touch nginx
|
||||||
|
- name: Obtain/renew certificate
|
||||||
|
command:
|
||||||
|
cmd: >-
|
||||||
|
{% if le_cert.stat.exists %}
|
||||||
|
certbot certonly --webroot
|
||||||
|
-w /var/www/{{ hostname }}
|
||||||
|
--non-interactive --agree-tos --keep-until-expiring
|
||||||
|
-m {{ email }} -d {{ hostname }}
|
||||||
|
{% else %}
|
||||||
|
certbot --nginx
|
||||||
|
--non-interactive --agree-tos --redirect
|
||||||
|
-m {{ email }} -d {{ hostname }}
|
||||||
|
{% endif %}
|
||||||
|
register: certbot_result
|
||||||
|
failed_when: false
|
||||||
|
|
||||||
|
# re-check cert after certbot attempt
|
||||||
|
- name: Re-check whether certificate exists after certbot
|
||||||
|
stat:
|
||||||
|
path: "/etc/letsencrypt/live/{{ hostname }}/fullchain.pem"
|
||||||
|
register: le_cert_after
|
||||||
|
|
||||||
|
# only deploy/enable SSL & WSS if cert exists
|
||||||
|
- name: Deploy HTTPS vhost for {{ hostname }}
|
||||||
|
template:
|
||||||
|
src: nginx-site-ssl.conf.j2
|
||||||
|
dest: "/etc/nginx/sites-available/{{ hostname }}-ssl"
|
||||||
|
mode: "0644"
|
||||||
|
when: le_cert_after.stat.exists
|
||||||
|
notify: Restart nginx
|
||||||
|
|
||||||
|
- name: Enable HTTPS vhost (force correct symlink)
|
||||||
|
file:
|
||||||
|
src: "/etc/nginx/sites-available/{{ hostname }}-ssl"
|
||||||
|
dest: "/etc/nginx/sites-enabled/{{ hostname }}-ssl"
|
||||||
|
state: link
|
||||||
|
force: true
|
||||||
|
when: le_cert_after.stat.exists
|
||||||
|
notify: Restart nginx
|
||||||
|
|
||||||
|
- name: Deploy WSS vhost
|
||||||
|
template:
|
||||||
|
src: wss-config.conf.j2
|
||||||
|
dest: "/etc/nginx/sites-available/nym-wss-config"
|
||||||
|
mode: "0644"
|
||||||
|
when: le_cert_after.stat.exists
|
||||||
|
notify: Restart nginx
|
||||||
|
|
||||||
|
- name: Enable WSS vhost (force correct symlink)
|
||||||
|
file:
|
||||||
|
src: "/etc/nginx/sites-available/nym-wss-config"
|
||||||
|
dest: "/etc/nginx/sites-enabled/nym-wss-config"
|
||||||
|
state: link
|
||||||
|
force: true
|
||||||
|
when: le_cert_after.stat.exists
|
||||||
|
notify: Restart nginx
|
||||||
|
|
||||||
|
- name: Validate nginx configuration (final)
|
||||||
|
command: nginx -t
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Flush handlers (apply restart after successful tests)
|
||||||
|
meta: flush_handlers
|
||||||
@@ -0,0 +1,218 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>This is a NYM Exit Gateway</title>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="icon" type="image/png" href="">
|
||||||
|
|
||||||
|
<style>
|
||||||
|
:root {
|
||||||
|
/* font + theme tokens */
|
||||||
|
font-family: Consolas, "Ubuntu Mono", Menlo, "DejaVu Sans Mono", monospace;
|
||||||
|
--background-color: #242B2D;
|
||||||
|
--text-color: #FFFFFF;
|
||||||
|
--link-color: #07ff94;
|
||||||
|
--title-color: #07ff94;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
background: var(--background-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
padding-left: 5vw;
|
||||||
|
padding-right: 5vw;
|
||||||
|
max-width: 1000px;
|
||||||
|
color: var(--text-color); /* default text color */
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 55px;
|
||||||
|
text-align: center;
|
||||||
|
color: var(--title-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
color: var(--text-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
p, a {
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: var(--link-color);
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
filter: brightness(.8);
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.links {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: space-evenly;
|
||||||
|
}
|
||||||
|
|
||||||
|
.links > a {
|
||||||
|
margin: 10px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<main>
|
||||||
|
<h1>This is a NYM Exit Gateway</h1>
|
||||||
|
|
||||||
|
|
||||||
|
<p>
|
||||||
|
You are most likely accessing this website because you've had some issue with
|
||||||
|
the traffic coming from this IP. This router is part of the <a
|
||||||
|
href="https://nym.com/">NYM project</a>, which is
|
||||||
|
dedicated to <a href="https://nym.com/about/mission">create</a> outstanding
|
||||||
|
privacy software that is legally compliant without sacrificing integrity or
|
||||||
|
having any backdoors.
|
||||||
|
This router IP should be generating no other traffic, unless it has been
|
||||||
|
compromised.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p><strong>
|
||||||
|
If you are a representative of a company who feels that this router is being
|
||||||
|
used to violate the DMCA, please be aware that this machine does not host or
|
||||||
|
contain any illegal content. Also be aware that network infrastructure
|
||||||
|
maintainers are not liable for the type of content that passes over their
|
||||||
|
equipment, in accordance with <a
|
||||||
|
href="https://www.law.cornell.edu/uscode/text/17/512">DMCA
|
||||||
|
"safe harbor" provisions</a>. In other words, you will have just as much luck
|
||||||
|
sending a takedown notice to the Internet backbone providers.
|
||||||
|
</strong></p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Nym Network is operated by a decentralised community of node operators
|
||||||
|
and stakers. Nym Network is trustless, meaning that no parts of the system
|
||||||
|
nor its operators have access to information that might compromise the privacy
|
||||||
|
of users. Nym software enacts a strict principle of data minimisation and has
|
||||||
|
no back doors. The Nym mixnet works by encrypting packets in several layers
|
||||||
|
and relaying those through a multi-layered network called a mixnet, eventually
|
||||||
|
letting the traffic exit the Nym mixnet through an exit gateway like this one.
|
||||||
|
This design makes it impossible for a service to know which user is connecting to it,
|
||||||
|
since it can only see the IP-address of the Nym exit gateway:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p style="text-align:center;margin:40px 0">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="500" viewBox="0 0 490.28 293.73" style="width:100%;max-width:600px" role="img" aria-label="Diagram of how a user connects through the Nym network">
|
||||||
|
<desc>Illustration showing how a user might connect to a service through the Nym Network. The user first sends their data through three daisy-chained encrypted Nym nodes that exist on three different continents. Then the last Nym node in the chain connects to the target service over the normal internet.</desc>
|
||||||
|
<defs>
|
||||||
|
<style>
|
||||||
|
.t {
|
||||||
|
fill: var(--text-color);
|
||||||
|
stroke: var(--text-color);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<!-- (SVG content left unchanged) -->
|
||||||
|
<path fill="#6fc8b7" d="M257.89 69.4c-6.61-6.36-10.62-7.73-18.36-8.62-7.97-1.83-20.06-7.99-24.17-.67-3.29 5.85-18.2 12.3-16.87 2.08.92-7.03 11.06-13.28 17-17.37 8.69-5.99 24.97-2.87 26.1-10.28 1.04-6.86-8.33-13.22-8.55-2.3-.38 12.84-19.62 2.24-8.73-6.2 8.92-6.9 16.05-9.02 25.61-6.15 12.37 4.83 25.58-2.05 33.73-.71 12.37-2.01 24.69-5.25 37.39-3.96 13 .43 24.08-.14 37.06.63 9.8 1.58 16.5 2.87 26.37 3.6 6.6.48 17.68-.82 24.3 1.9 8.3 4.24.44 10.94-6.89 11.8-8.79 1.05-23.59-1.19-26.6 1.86-5.8 7.41 10.75 5.68 11.27 14.54.57 9.45-5.42 9.38-8.72 16-2.7 4.2.3 13.93-1.18 18.45-1.85 5.64-19.64 4.47-14.7 14.4 4.16 8.34 1.17 19.14-10.33 12.02-5.88-3.65-9.85-22.04-15.66-21.9-11.06.27-11.37 13.18-12.7 17.52-1.3 4.27-3.79 2.33-6-.63-3.54-4.76-7.75-14.22-12.01-17.32-6.12-4.46-10.75-1.17-15.55 2.83-5.63 4.69-8.78 7.82-7.46 16.5.78 9.1-12.9 15.84-14.98 24.09-2.61 10.32-2.57 22.12-8.81 31.47-4 5.98-14.03 20.12-21.27 14.97-7.5-5.34-7.22-14.6-9.56-23.08-2.5-9.02.6-17.35-2.57-26.2-2.45-6.82-6.23-14.54-13.01-13.24-6.5.92-15.08 1.38-19.23-2.97-5.65-5.93-6-10.1-6.61-18.56 1.65-6.94 5.79-12.64 10.38-18.63 3.4-4.42 17.45-10.39 25.26-7.83 10.35 3.38 17.43 10.5 28.95 8.57 3.12-.53 9.14-4.65 7.1-6.62zm-145.6 37.27c-4.96-1.27-11.57 1.13-11.8 6.94-1.48 5.59-4.82 10.62-5.8 16.32.56 6.42 4.34 12.02 8.18 16.97 3.72 3.85 8.58 7.37 9.3 13.1 1.24 5.88 1.6 11.92 2.28 17.87.34 9.37.95 19.67 7.29 27.16 4.26 3.83 8.4-2.15 6.52-6.3-.54-4.54-.6-9.11 1.01-13.27 4.2-6.7 7.32-10.57 12.44-16.64 5.6-7.16 12.74-11.75 14-20.9.56-4.26 5.72-13.86 1.7-16.72-3.14-2.3-15.83-4-18.86-6.49-2.36-1.71-3.86-9.2-9.86-12.07-4.91-3.1-10.28-6.73-16.4-5.97zm11.16-49.42c6.13-2.93 10.58-4.77 14.61-10.25 3.5-4.28 2.46-12.62-2.59-15.45-7.27-3.22-13.08 5.78-18.81 8.71-5.96 4.2-12.07-5.48-6.44-10.6 5.53-4.13.38-9.2-5.66-8.48-6.12.8-12.48-1.45-18.6-1.73-5.3-.7-10.13-1-15.45-1.37-5.37-.05-16.51-2.23-25.13.87-5.42 1.79-12.5 5.3-16.73 9.06-4.85 4.2.2 7.56 5.54 7.45 5.3-.22 16.8-5.36 20.16.98 3.68 8.13-5.82 18.29-5.2 26.69.1 6.2 3.37 11 4.74 16.98 1.62 5.94 6.17 10.45 10 15.14 4.7 5.06 13.06 6.3 19.53 8.23 7.46.14 3.34-9.23 3.01-14.11 1.77-7.15 8.49-7.82 12.68-13.5 7.14-7.72 16.41-13.4 24.34-18.62zM190.88 3.1c-4.69 0-13.33.04-18.17-.34-7.65.12-13.1-.62-19.48-1.09-3.67.39-9.09 3.34-5.28 7.04 3.8.94 7.32 4.92 7.1 9.31 1.32 4.68 1.2 11.96 6.53 13.88 4.76-.2 7.12-7.6 11.93-8.25 6.85-2.05 12.5-4.58 17.87-9.09 2.48-2.76 7.94-6.38 5.26-10.33-1.55-1.31-2.18-.64-5.76-1.13zm178.81 157.37c-2.66 10.08-5.88 24.97 9.4 15.43 7.97-5.72 12.58-2.02 17.47 1.15.5.43 2.65 9.2 7.19 8.53 5.43-2.1 11.55-5.1 14.96-11.2 2.6-4.62 3.6-12.39 2.76-13.22-3.18-3.43-6.24-11.03-7.7-15.1-.76-2.14-2.24-2.6-2.74-.4-2.82 12.85-6.04 1.22-10.12-.05-8.2-1.67-29.62 7.17-31.22 14.86z"/>
|
||||||
|
<g fill="none">
|
||||||
|
<path stroke="#cf63a6" stroke-linecap="round" stroke-width="2.76" d="M135.2 140.58c61.4-3.82 115.95-118.83 151.45-103.33"/>
|
||||||
|
<path stroke="#cf63a6" stroke-linecap="round" stroke-width="2.76" d="M74.43 46.66c38.15 8.21 64.05 42.26 60.78 93.92M286.65 37.25c-9.6 39.44-3.57 57.12-35.64 91.98"/>
|
||||||
|
<path stroke="#e4c101" stroke-dasharray="9.06,2.265" stroke-width="2.27" d="M397.92 162.52c-31.38 1.26-90.89-53.54-148.3-36.17"/>
|
||||||
|
<path stroke="#cf63a6" stroke-linecap="round" stroke-width="2.77" d="M17.6 245.88c14.35 0 14.4.05 28-.03"/>
|
||||||
|
<path stroke="#e3bf01" stroke-dasharray="9.06,2.265" stroke-width="2.27" d="M46.26 274.14c-17.52-.12-16.68.08-30.34.07"/>
|
||||||
|
</g>
|
||||||
|
<g transform="translate(120.8 -35.81)">
|
||||||
|
<circle cx="509.78" cy="68.74" r="18.12" fill="#240a3b" transform="translate(-93.3 38.03) scale(.50637)"/>
|
||||||
|
<circle cx="440.95" cy="251.87" r="18.12" fill="#240a3b" transform="translate(-93.3 38.03) scale(.50637)"/>
|
||||||
|
<circle cx="212.62" cy="272.19" r="18.12" fill="#240a3b" transform="translate(-93.3 38.03) scale(.50637)"/>
|
||||||
|
<circle cx="92.12" cy="87.56" r="18.12" fill="#240a3b" transform="translate(-93.3 38.03) scale(.50637)"/>
|
||||||
|
<circle cx="730.88" cy="315.83" r="18.12" fill="#67727b" transform="translate(-93.3 38.03) scale(.50637)"/>
|
||||||
|
<circle cx="-102.85" cy="282.18" r="9.18" fill="#240a3b"/>
|
||||||
|
<circle cx="-102.85" cy="309.94" r="9.18" fill="#67727b"/>
|
||||||
|
</g>
|
||||||
|
<g class="t">
|
||||||
|
<text xml:space="preserve" x="-24.76" y="10.37" stroke-width=".26" font-size="16.93" font-weight="700" style="line-height:1.25" transform="translate(27.79 2.5)" word-spacing="0"><tspan x="-24.76" y="10.37">The user</tspan></text>
|
||||||
|
<text xml:space="preserve" x="150.63" y="196.62" stroke-width=".26" font-size="16.93" font-weight="700" style="line-height:1.25" transform="translate(27.79 2.5)" word-spacing="0"><tspan x="150.63" y="196.62">This server</tspan></text>
|
||||||
|
<text xml:space="preserve" x="346.39" y="202.63" stroke-width=".26" font-size="16.93" font-weight="700" style="line-height:1.25" transform="translate(27.79 2.5)" word-spacing="0"><tspan x="346.39" y="202.63">Your service</tspan></text>
|
||||||
|
<text xml:space="preserve" x="34.52" y="249.07" stroke-width=".26" font-size="16.93" font-weight="700" style="line-height:1.25" transform="translate(27.79 2.5)" word-spacing="0"><tspan x="34.52" y="249.07">Nym network link</tspan></text>
|
||||||
|
<text xml:space="preserve" x="34.13" y="276.05" stroke-width=".26" font-size="16.93" font-weight="700" style="line-height:1.25" transform="translate(27.79 2.5)" word-spacing="0"><tspan x="34.13" y="276.05">Unencrypted link</tspan></text>
|
||||||
|
<path fill="none" stroke-linecap="round" stroke-width="1.67" d="M222.6 184.1c-2.6-15.27 8.95-23.6 18.43-38.86m186.75 45.61c-.68-10.17-9.4-17.68-18.08-23.49"/>
|
||||||
|
<path fill="none" stroke-linecap="round" stroke-width="1.67" d="M240.99 153.41c.35-3.41 1.19-6.17.04-8.17m-7.15 5.48c1.83-2.8 4.58-4.45 7.15-5.48"/>
|
||||||
|
<path fill="none" stroke-linecap="round" stroke-width="1.67" d="M412.43 173.21c-2.2-3.15-2.54-3.85-2.73-5.85m0 0c2.46-.65 3.85.01 6.67 1.24M61.62 40.8C48.89 36.98 36.45 27.54 36.9 18.96M61.62 40.8c.05-2.58-3.58-4.8-5.25-5.26m-2.65 6.04c1.8.54 6.8 1.31 7.9-.78"/>
|
||||||
|
<path fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.44" d="M1.22 229.4h247.74v63.1H1.22z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p><a href="https://nym.com/about/mixnet">Read more about how Nym works.</a></p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Nym relies on a growing ecosystem of users, developers and researcher partners
|
||||||
|
aligned with the mission to make sure Nym software is running, remains usable
|
||||||
|
and solves real problems. While Nym is not designed for malicious computer
|
||||||
|
users, it is true that they can use the network for malicious ends. This
|
||||||
|
is largely because criminals and hackers have significantly better access to
|
||||||
|
privacy and anonymity than do the regular users whom they prey upon. Criminals
|
||||||
|
can and do build, sell, and trade far larger and more powerful networks than
|
||||||
|
Nym on a daily basis. Thus, in the mind of this operator, the social need for
|
||||||
|
easily accessible censorship-resistant private, anonymous communication trumps
|
||||||
|
the risk of unskilled bad actors, who are almost always more easily uncovered
|
||||||
|
by traditional police work than by extensive monitoring and surveillance anyway.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
In terms of applicable law, the best way to understand Nym is to consider it a
|
||||||
|
network of routers operating as common carriers, much like the Internet
|
||||||
|
backbone. However, unlike the Internet backbone routers, Nym mixnodes do not
|
||||||
|
contain identifiable routing information about the source of a packet and do
|
||||||
|
mix the user internet traffic with that of other users, making communications
|
||||||
|
private and protecting not just the user content but the metadata
|
||||||
|
(user's IP address, who the user talks to, when, where, from what device and
|
||||||
|
more) and no single Nym node can determine both the origin and destination
|
||||||
|
of a given transmission.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
As such, there is nothing the operator of this Exit Gateway can do to help you
|
||||||
|
track the connection further. This Exit Gateway maintains no logs of any of the
|
||||||
|
Nym Network, so there is little that can be done to trace either legitimate or
|
||||||
|
illegitimate traffic and most importantly the operator cannot tell apart one from
|
||||||
|
the other because of the cryptography design making such selection impossible
|
||||||
|
for the operator. Attempts to seize this router will accomplish nothing.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
To decentralise and enable privacy for a broad range of services, this
|
||||||
|
Exit Gateway adopts an <a href="https://nymtech.net/.wellknown/network-requester/exit-policy.txt">Exit Policy</a>
|
||||||
|
serving as a safeguard.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
That being said, if you still have a complaint about the router, you may email the
|
||||||
|
<a href="mailto:{{ email }}">maintainer</a>. If complaints are related to a particular service that is being abused,
|
||||||
|
the maintainer will submit that to the NYM Operators Community in order to add it to the Exit Policy cited above.
|
||||||
|
The community governance can only blacklist entire IP:port destinations across the entire network.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
You also have the option of blocking this IP address and others on the Nym network if you so desire.
|
||||||
|
The Nym project provides a <a href="https://nym.com/explorer">
|
||||||
|
web service</a> to fetch a list of all IP addresses of Nym Gateway Exit nodes that allow exiting to a
|
||||||
|
specified IP:port combination. Please be considerate when using these options.
|
||||||
|
</p>
|
||||||
|
<p style="text-align:center">
|
||||||
|
<img
|
||||||
|
class="logo"
|
||||||
|
src="https://raw.githubusercontent.com/nymtech/websites/main/www/nym.com/public/images/Nym_meta_Image.png"
|
||||||
|
alt=""
|
||||||
|
style="max-width:320px;width:100%;height:auto"
|
||||||
|
onerror="this.onerror=null;this.src='/images/nym_logo.png';"
|
||||||
|
/>
|
||||||
|
</p>
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
server {
|
||||||
|
listen 443 ssl http2;
|
||||||
|
listen [::]:443 ssl http2;
|
||||||
|
|
||||||
|
server_name {{ hostname }};
|
||||||
|
|
||||||
|
ssl_certificate /etc/letsencrypt/live/{{ hostname }}/fullchain.pem;
|
||||||
|
ssl_certificate_key /etc/letsencrypt/live/{{ hostname }}/privkey.pem;
|
||||||
|
include /etc/nginx/snippets/nym-ssl-options.conf;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://127.0.0.1:8080;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
listen [::]:80;
|
||||||
|
|
||||||
|
server_name {{ hostname }};
|
||||||
|
|
||||||
|
root /var/www/{{ hostname }};
|
||||||
|
index index.html;
|
||||||
|
|
||||||
|
location ^~ /.well-known/acme-challenge/ {
|
||||||
|
default_type "text/plain";
|
||||||
|
try_files $uri =404;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
return 301 https://$host$request_uri;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
server {
|
||||||
|
listen 9001 ssl http2;
|
||||||
|
listen [::]:9001 ssl http2;
|
||||||
|
|
||||||
|
server_name {{ hostname }};
|
||||||
|
|
||||||
|
ssl_certificate /etc/letsencrypt/live/{{ hostname }}/fullchain.pem;
|
||||||
|
ssl_certificate_key /etc/letsencrypt/live/{{ hostname }}/privkey.pem;
|
||||||
|
include /etc/nginx/snippets/nym-ssl-options.conf;
|
||||||
|
|
||||||
|
access_log /var/log/nginx/access.log;
|
||||||
|
error_log /var/log/nginx/error.log;
|
||||||
|
|
||||||
|
location /favicon.ico {
|
||||||
|
return 204;
|
||||||
|
access_log off;
|
||||||
|
log_not_found off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
add_header 'Access-Control-Allow-Origin' '*' always;
|
||||||
|
add_header 'Access-Control-Allow-Credentials' 'true' always;
|
||||||
|
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, HEAD' always;
|
||||||
|
add_header 'Access-Control-Allow-Headers' '*' always;
|
||||||
|
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection "Upgrade";
|
||||||
|
proxy_set_header X-Forwarded-For $remote_addr;
|
||||||
|
|
||||||
|
proxy_pass http://localhost:9000;
|
||||||
|
proxy_intercept_errors on;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
---
|
||||||
|
# Where binaries live
|
||||||
|
nym_install_dir: /root/nym-binaries
|
||||||
|
|
||||||
|
# nym-node run arguments (defaults, can be overridden per host/group)
|
||||||
|
http_bind_address: "0.0.0.0:8080" # maps to --http-bind-address
|
||||||
|
mixnet_bind_address: "0.0.0.0:1789" # maps to --mixnet-bind-address
|
||||||
|
|
||||||
|
# Landing page base dir, hostname is appended in the task
|
||||||
|
landing_page_assets_base_dir: "/var/www"
|
||||||
|
|
||||||
|
# Flag toggles
|
||||||
|
# accept_operator_terms: true # controls --accept-operator-terms-and-conditions
|
||||||
|
nym_write_flag: true # controls -w
|
||||||
|
nym_init_only_flag: true # controls --init-only
|
||||||
|
wss_port: 9001 # controlls --announce-wss-port
|
||||||
|
|
||||||
|
# Optional: extra flags if you want to append more later
|
||||||
|
nym_extra_flags: ""
|
||||||
|
|
||||||
|
# CLI URL (nym_version can be set elsewhere / via GitHub API)
|
||||||
|
nym_cli_url: "https://github.com/nymtech/nym/releases/download/{{ nym_version }}/nym-cli"
|
||||||
|
|
||||||
|
# UFW
|
||||||
|
nym_ufw_enable: true
|
||||||
|
|
||||||
|
nym_ufw_rules:
|
||||||
|
- { port: 22, proto: tcp }
|
||||||
|
- { port: 80, proto: tcp }
|
||||||
|
- { port: 443, proto: tcp }
|
||||||
|
- { port: 1789, proto: tcp }
|
||||||
|
- { port: 1790, proto: tcp }
|
||||||
|
- { port: 8080, proto: tcp }
|
||||||
|
- { port: 9000, proto: tcp }
|
||||||
|
- { port: 9001, proto: tcp }
|
||||||
|
- { port: 51822, proto: udp }
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
#!/bin/bash
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
- name: Reload systemd
|
||||||
|
systemd:
|
||||||
|
daemon_reload: yes
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
---
|
||||||
|
# useful when the host is behind a NAT
|
||||||
|
- name: Fetch the public IP address
|
||||||
|
command: "curl -4 canhazip.com"
|
||||||
|
register: ipv4
|
||||||
|
changed_when: false
|
||||||
|
failed_when: false
|
||||||
|
|
||||||
|
- name: Set public IP address
|
||||||
|
set_fact:
|
||||||
|
public_ip: "{{ ipv4.stdout | default(ansible_default_ipv4.address) }}"
|
||||||
|
|
||||||
|
- name: Initialize nym node
|
||||||
|
# delete the part from --hostname onward if you run mode=mixnode only
|
||||||
|
command:
|
||||||
|
cmd: >
|
||||||
|
{{ nym_install_dir }}/nym-node run
|
||||||
|
--mode {{ mode }}
|
||||||
|
--public-ips {{ public_ip }}
|
||||||
|
--http-bind-address {{ http_bind_address }}
|
||||||
|
--mixnet-bind-address {{ mixnet_bind_address }}
|
||||||
|
--location {{ location }}
|
||||||
|
{% if accept_operator_terms %}--accept-operator-terms-and-conditions{% endif %}
|
||||||
|
|
||||||
|
{{ nym_extra_flags }}
|
||||||
|
|
||||||
|
--hostname {{ hostname }}
|
||||||
|
--wireguard-enabled {{ (wireguard_enabled | default('false') | bool) | ternary('true','false') }}
|
||||||
|
--landing-page-assets-path {{ landing_page_assets_base_dir }}/{{ hostname }}/
|
||||||
|
{% if nym_write_flag %}-w{% endif %}
|
||||||
|
{% if nym_init_only_flag %}--init-only{% endif %}
|
||||||
|
--announce-wss-port {{ wss_port }}
|
||||||
|
|
||||||
|
|
||||||
|
- name: Update nym description
|
||||||
|
template:
|
||||||
|
src: description.toml.j2
|
||||||
|
dest: /root/.nym/nym-nodes/default-nym-node/data/description.toml
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
---
|
||||||
|
- name: Ensure UFW is installed
|
||||||
|
apt:
|
||||||
|
name: ufw
|
||||||
|
state: present
|
||||||
|
update_cache: yes
|
||||||
|
when: nym_ufw_enable
|
||||||
|
|
||||||
|
|
||||||
|
- name: Configure UFW rules
|
||||||
|
ufw:
|
||||||
|
rule: allow
|
||||||
|
port: "{{ item.port }}"
|
||||||
|
proto: "{{ item.proto }}"
|
||||||
|
comment: "{{ item.comment | default(omit) }}"
|
||||||
|
loop: "{{ nym_ufw_rules }}"
|
||||||
|
loop_control:
|
||||||
|
label: "{{ item.port }}/{{ item.proto }}"
|
||||||
|
when:
|
||||||
|
- nym_ufw_enable
|
||||||
|
- item.when | default(true)
|
||||||
|
|
||||||
|
- name: Allow bandwidth/topup rule inside WG tunnel
|
||||||
|
command: >
|
||||||
|
ufw allow in on nymwg to any port 51830 proto tcp comment 'bandwidth queries/topup'
|
||||||
|
changed_when: false
|
||||||
|
when:
|
||||||
|
- nym_ufw_enable
|
||||||
|
- (wireguard_enabled | default(false) | bool)
|
||||||
|
|
||||||
|
- name: Enable UFW
|
||||||
|
ufw:
|
||||||
|
state: enabled
|
||||||
|
when:
|
||||||
|
nym_ufw_enable
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
- name: Create nym directory
|
||||||
|
file:
|
||||||
|
path: "{{ nym_install_dir }}"
|
||||||
|
state: directory
|
||||||
|
mode: "0755"
|
||||||
|
|
||||||
|
- name: Get latest Nym release metadata
|
||||||
|
uri:
|
||||||
|
url: https://api.github.com/repos/nymtech/nym/releases/latest
|
||||||
|
return_content: yes
|
||||||
|
register: latest_release
|
||||||
|
when: nym_version is not defined or nym_version == 'latest'
|
||||||
|
|
||||||
|
- name: Set nym_version from GitHub API
|
||||||
|
set_fact:
|
||||||
|
nym_version: "{{ latest_release.json.tag_name }}"
|
||||||
|
when: nym_version is not defined or nym_version == 'latest'
|
||||||
|
|
||||||
|
- name: Set binary URL
|
||||||
|
set_fact:
|
||||||
|
binary_url: "https://github.com/nymtech/nym/releases/download/{{ nym_version }}/nym-node"
|
||||||
|
|
||||||
|
- name: Download nym-node binary
|
||||||
|
get_url:
|
||||||
|
url: "{{ binary_url }}"
|
||||||
|
dest: "{{ nym_install_dir }}/nym-node"
|
||||||
|
mode: "0755"
|
||||||
|
|
||||||
|
- name: Download nym-cli binary
|
||||||
|
get_url:
|
||||||
|
url: "{{ nym_cli_url }}"
|
||||||
|
dest: "{{ nym_install_dir }}/nym-cli"
|
||||||
|
mode: "0755"
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
- name: Install Nym binaries
|
||||||
|
import_tasks: install.yml
|
||||||
|
|
||||||
|
- name: Configure Nym node
|
||||||
|
import_tasks: config.yml
|
||||||
|
|
||||||
|
- name: Configure firewall for Nym
|
||||||
|
import_tasks: firewall.yml
|
||||||
|
|
||||||
|
- name: Configure and start Nym service
|
||||||
|
import_tasks: service.yml
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
- name: Template systemd service
|
||||||
|
tags: systemctl
|
||||||
|
template:
|
||||||
|
src: nym-node.service.j2
|
||||||
|
dest: /etc/systemd/system/nym-node.service
|
||||||
|
notify: Reload systemd
|
||||||
|
|
||||||
|
- name: Enable and start nym service
|
||||||
|
tags: systemctl
|
||||||
|
systemd:
|
||||||
|
name: nym-node
|
||||||
|
enabled: yes
|
||||||
|
state: started
|
||||||
|
daemon_reload: yes
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{# Priority:
|
||||||
|
1. Use moniker if provided in inventory
|
||||||
|
2. Else strip "nym-exit." prefix if hostname starts with it
|
||||||
|
3. Else use hostname unchanged
|
||||||
|
#}
|
||||||
|
|
||||||
|
{% if moniker is defined and moniker | length > 0 %}
|
||||||
|
{% set moniker_final = moniker %}
|
||||||
|
{% else %}
|
||||||
|
{% if hostname is defined and hostname.startswith('nym-exit.') %}
|
||||||
|
{% set moniker_final = hostname | regex_replace('^nym-exit\\.', '') %}
|
||||||
|
{% else %}
|
||||||
|
{% set moniker_final = hostname %}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
moniker = "{{ moniker_final }}"
|
||||||
|
website = " {{ website }}"
|
||||||
|
security_contact = "{{ email }}"
|
||||||
|
details = "{{ description }}"
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Nym Node
|
||||||
|
StartLimitInterval=350
|
||||||
|
StartLimitBurst=10
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User={{ ansible_user }}
|
||||||
|
LimitNOFILE=65536
|
||||||
|
ExecStart=/root/nym-binaries/nym-node run --mode {{ mode }} --accept-operator-terms-and-conditions --wireguard-enabled {{ (wireguard_enabled | default(false) | bool) | ternary('true','false') }}
|
||||||
|
KillSignal=SIGINT
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=30
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
- name: Show which node is being bonded
|
||||||
|
tags: bonding
|
||||||
|
debug:
|
||||||
|
msg: "Bonding Nym node: {{ hostname }}"
|
||||||
|
|
||||||
|
- name: Get bonding details
|
||||||
|
tags: bonding
|
||||||
|
command: "/root/nym-binaries/nym-node bonding-information"
|
||||||
|
register: bondinfo
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Display bonding info
|
||||||
|
tags: bonding
|
||||||
|
debug:
|
||||||
|
msg: "{{ item }}"
|
||||||
|
loop: "{{ bondinfo.stdout_lines }}"
|
||||||
|
|
||||||
|
|
||||||
|
- name: Prompt operator to generate contract message in wallet
|
||||||
|
tags: bonding
|
||||||
|
pause:
|
||||||
|
prompt: |
|
||||||
|
** Using the bonding information above:
|
||||||
|
|
||||||
|
1. Open your wallet
|
||||||
|
2. Go to Bonding section
|
||||||
|
3. Fill Hostname and Identity key from the message printed above
|
||||||
|
4. Copy the CONTRACT MESSAGE that your wallet displays
|
||||||
|
5. Paste it below and press Enter
|
||||||
|
|
||||||
|
Paste CONTRACT MESSAGE here:
|
||||||
|
register: contract_msg_input
|
||||||
|
|
||||||
|
- name: Sign bonding contract message on the node
|
||||||
|
tags: bonding
|
||||||
|
command:
|
||||||
|
argv:
|
||||||
|
- /root/nym-binaries/nym-node
|
||||||
|
- sign
|
||||||
|
- --contract-msg
|
||||||
|
- "{{ contract_msg_input.user_input }}"
|
||||||
|
- --output
|
||||||
|
- json
|
||||||
|
register: sign_output
|
||||||
|
|
||||||
|
- name: Display full signed message exactly as returned
|
||||||
|
tags: bonding
|
||||||
|
debug:
|
||||||
|
msg: "{{ sign_output.stdout }}"
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
- name: Download quic_bridge_deployment.sh
|
||||||
|
tags: quic bridge deployment
|
||||||
|
get_url:
|
||||||
|
url: "{{ quic_bridge_deployment_url }}"
|
||||||
|
dest: "/root/nym-binaries/quic_bridge_deployment.sh"
|
||||||
|
mode: "0755"
|
||||||
|
|
||||||
|
- name: Configure tunnel manager
|
||||||
|
tags: quic bridge deployment
|
||||||
|
become: true
|
||||||
|
command:
|
||||||
|
cmd: "/root/nym-binaries/quic_bridge_deployment.sh {{ item }}"
|
||||||
|
environment:
|
||||||
|
NONINTERACTIVE: "1"
|
||||||
|
loop:
|
||||||
|
- full_bridge_setup
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
- name: Configure tunnel manager
|
||||||
|
tags:
|
||||||
|
- network_tunnel_manager
|
||||||
|
become: true
|
||||||
|
command:
|
||||||
|
cmd: "/root/nym-binaries/network-tunnel-manager.sh {{ item }}"
|
||||||
|
loop:
|
||||||
|
- complete_networking_configuration
|
||||||
|
register: tunnel_mgr
|
||||||
|
failed_when: false
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
nym_binary_dir: /root/nym-binaries
|
||||||
|
nym_binary_path: "{{ nym_binary_dir }}/nym-node"
|
||||||
|
nym_backup_dir: "{{ nym_binary_dir }}/bak"
|
||||||
|
nym_backup_path: "{{ nym_backup_dir }}/nym-node"
|
||||||
|
nym_service_name: nym-node
|
||||||
|
|
||||||
|
# nym_version: "v2025.21-mozzarella"
|
||||||
|
# Optional: set this to pin a specific release tag in (e.g. v2025.21-mozzarella)
|
||||||
|
# otherwise the GitHub “latest” release is used
|
||||||
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
- name: Get latest Nym release metadata
|
||||||
|
uri:
|
||||||
|
url: https://api.github.com/repos/nymtech/nym/releases/latest
|
||||||
|
return_content: yes
|
||||||
|
register: latest_release
|
||||||
|
when: nym_version is not defined and not ansible_check_mode
|
||||||
|
|
||||||
|
- name: Set nym_version from GitHub API
|
||||||
|
set_fact:
|
||||||
|
nym_version: "{{ latest_release.json.tag_name }}"
|
||||||
|
when: nym_version is not defined and not ansible_check_mode
|
||||||
|
|
||||||
|
- name: Show target Nym version tag
|
||||||
|
debug:
|
||||||
|
msg: "Target Nym release tag: {{ nym_version | default('latest (check-mode)') }}"
|
||||||
|
|
||||||
|
- name: Generate binary_url from version
|
||||||
|
set_fact:
|
||||||
|
binary_url: >-
|
||||||
|
https://github.com/nymtech/nym/releases/download/{{ nym_version }}/nym-node
|
||||||
|
when: not ansible_check_mode
|
||||||
|
|
||||||
|
- name: Download nym-node binary
|
||||||
|
get_url:
|
||||||
|
url: "{{ binary_url }}"
|
||||||
|
dest: "{{ nym_binary_path }}"
|
||||||
|
mode: "0755"
|
||||||
|
register: download_result
|
||||||
|
failed_when: false
|
||||||
|
when: not ansible_check_mode
|
||||||
@@ -0,0 +1,122 @@
|
|||||||
|
# run --version on the new binary
|
||||||
|
- name: Check new nym-node version
|
||||||
|
command:
|
||||||
|
argv:
|
||||||
|
- "{{ nym_binary_path }}"
|
||||||
|
- --version
|
||||||
|
register: nym_new_version_cmd
|
||||||
|
failed_when: false
|
||||||
|
changed_when: false
|
||||||
|
when: not ansible_check_mode
|
||||||
|
|
||||||
|
# show the full stdout
|
||||||
|
# show full upgraded version output, line by line
|
||||||
|
- name: Show upgraded nym-node version info
|
||||||
|
debug:
|
||||||
|
msg: >-
|
||||||
|
{{
|
||||||
|
[
|
||||||
|
"New nym-node --version rc: " ~ (nym_new_version_cmd.rc | default('unset') | string),
|
||||||
|
"New nym-node --version output:"
|
||||||
|
]
|
||||||
|
+ (nym_new_version_cmd.stdout_lines | default([]))
|
||||||
|
}}
|
||||||
|
when: not ansible_check_mode
|
||||||
|
|
||||||
|
# decide if upgrade is successful
|
||||||
|
# success means: the binary executed without an error (rc == 0)
|
||||||
|
- name: Determine if upgrade is successful
|
||||||
|
set_fact:
|
||||||
|
upgrade_ok: "{{ (nym_new_version_cmd.rc | default(1)) == 0 }}"
|
||||||
|
when: not ansible_check_mode
|
||||||
|
|
||||||
|
# show the decision for debugging
|
||||||
|
- name: Debug upgrade_ok decision
|
||||||
|
debug:
|
||||||
|
msg:
|
||||||
|
- "upgrade_ok: {{ upgrade_ok }}"
|
||||||
|
when: not ansible_check_mode
|
||||||
|
|
||||||
|
#########
|
||||||
|
# success
|
||||||
|
#########
|
||||||
|
|
||||||
|
# show the full version output to the user, line-by-line
|
||||||
|
- name: Show upgraded nym-node version info
|
||||||
|
debug:
|
||||||
|
msg:
|
||||||
|
- "Upgraded nym-node version output:"
|
||||||
|
- "{{ nym_new_version_cmd.stdout_lines | default([]) }}"
|
||||||
|
when: not ansible_check_mode and upgrade_ok | default(false)
|
||||||
|
|
||||||
|
|
||||||
|
# remove backup
|
||||||
|
- name: Remove backup after successful upgrade
|
||||||
|
file:
|
||||||
|
path: "{{ nym_backup_path }}"
|
||||||
|
state: absent
|
||||||
|
when:
|
||||||
|
- not ansible_check_mode
|
||||||
|
- upgrade_ok | default(false)
|
||||||
|
- nym_node_bin.stat.exists | default(false)
|
||||||
|
|
||||||
|
# restart service
|
||||||
|
- name: Restart nym-node service after successful upgrade
|
||||||
|
systemd:
|
||||||
|
name: "{{ nym_service_name }}"
|
||||||
|
state: restarted
|
||||||
|
when: not ansible_check_mode and upgrade_ok | default(false)
|
||||||
|
|
||||||
|
# report success
|
||||||
|
- name: Report successful upgrade
|
||||||
|
debug:
|
||||||
|
msg: >-
|
||||||
|
Upgrade successful. nym-node binary executed correctly and the service has been restarted.
|
||||||
|
when: not ansible_check_mode and upgrade_ok | default(false)
|
||||||
|
|
||||||
|
#########
|
||||||
|
# failure
|
||||||
|
#########
|
||||||
|
|
||||||
|
- name: Restore previous nym-node binary after failed upgrade
|
||||||
|
copy:
|
||||||
|
src: "{{ nym_backup_path }}"
|
||||||
|
dest: "{{ nym_binary_path }}"
|
||||||
|
mode: "0755"
|
||||||
|
remote_src: true
|
||||||
|
when:
|
||||||
|
- not ansible_check_mode
|
||||||
|
- (upgrade_ok | default(false)) == false
|
||||||
|
- nym_node_bin.stat.exists | default(false)
|
||||||
|
|
||||||
|
- name: Remove backup after rollback
|
||||||
|
file:
|
||||||
|
path: "{{ nym_backup_path }}"
|
||||||
|
state: absent
|
||||||
|
when:
|
||||||
|
- not ansible_check_mode
|
||||||
|
- (upgrade_ok | default(false)) == false
|
||||||
|
- nym_node_bin.stat.exists | default(false)
|
||||||
|
|
||||||
|
# always restart the service with the restored binary
|
||||||
|
- name: Restart nym-node service with previous version after failed upgrade
|
||||||
|
systemd:
|
||||||
|
name: "{{ nym_service_name }}"
|
||||||
|
state: restarted
|
||||||
|
when:
|
||||||
|
- not ansible_check_mode
|
||||||
|
- (upgrade_ok | default(false)) == false
|
||||||
|
- nym_node_bin.stat.exists | default(false)
|
||||||
|
|
||||||
|
- name: Report failed upgrade and rollback
|
||||||
|
debug:
|
||||||
|
msg: >-
|
||||||
|
Upgrade NOT successful. The previous nym-node binary has been restored
|
||||||
|
and the nym-node service has been restarted with the old version.
|
||||||
|
when: not ansible_check_mode and (upgrade_ok | default(false)) == false
|
||||||
|
|
||||||
|
# optional: hard-fail the play for CI environments
|
||||||
|
#- name: fail the play to signal upgrade failure
|
||||||
|
# fail:
|
||||||
|
# msg: "nym-node upgrade failed; rolled back to previous binary."
|
||||||
|
# when: not ansible_check_mode and (upgrade_ok | default(false)) == false
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
- name: Prepare for nym-node upgrade (backup, stop service)
|
||||||
|
include_tasks: prepare.yml
|
||||||
|
|
||||||
|
- name: Fetch and install latest nym-node binary
|
||||||
|
include_tasks: fetch_latest.yml
|
||||||
|
|
||||||
|
- name: Verify new nym-node and finalize (restart or rollback)
|
||||||
|
include_tasks: finalize.yml
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
# stop service before touching the binary
|
||||||
|
- name: Stop nym-node service
|
||||||
|
systemd:
|
||||||
|
name: "{{ nym_service_name }}"
|
||||||
|
state: stopped
|
||||||
|
when: not ansible_check_mode
|
||||||
|
|
||||||
|
# check if the current binary exists
|
||||||
|
- name: Check existing nym-node binary
|
||||||
|
stat:
|
||||||
|
path: "{{ nym_binary_path }}"
|
||||||
|
register: nym_node_bin
|
||||||
|
|
||||||
|
# capture current nym-node version (if present)
|
||||||
|
- name: Capture current nym-node version (if present)
|
||||||
|
command:
|
||||||
|
argv:
|
||||||
|
- "{{ nym_binary_path }}"
|
||||||
|
- --version
|
||||||
|
register: nym_current_version_cmd
|
||||||
|
failed_when: false
|
||||||
|
changed_when: false
|
||||||
|
when:
|
||||||
|
- nym_node_bin.stat.exists
|
||||||
|
- not ansible_check_mode
|
||||||
|
|
||||||
|
# show full current version output instead of trying to parse it
|
||||||
|
# show full current version output, line by line
|
||||||
|
- name: Show current nym-node version info
|
||||||
|
debug:
|
||||||
|
msg: >-
|
||||||
|
{{
|
||||||
|
[
|
||||||
|
"Current nym-node --version rc: " ~ (nym_current_version_cmd.rc | default('unset') | string),
|
||||||
|
"Current nym-node --version output:"
|
||||||
|
]
|
||||||
|
+ (nym_current_version_cmd.stdout_lines | default([]))
|
||||||
|
}}
|
||||||
|
when:
|
||||||
|
- nym_node_bin.stat.exists
|
||||||
|
- not ansible_check_mode
|
||||||
|
|
||||||
|
# ensure backup directory exists
|
||||||
|
- name: Ensure backup directory exists
|
||||||
|
file:
|
||||||
|
path: "{{ nym_backup_dir }}"
|
||||||
|
state: directory
|
||||||
|
mode: "0755"
|
||||||
|
when: not ansible_check_mode
|
||||||
|
|
||||||
|
# backup existing nym-node binary
|
||||||
|
- name: Backup existing nym-node binary
|
||||||
|
copy:
|
||||||
|
src: "{{ nym_binary_path }}"
|
||||||
|
dest: "{{ nym_backup_path }}"
|
||||||
|
remote_src: true
|
||||||
|
mode: "0755"
|
||||||
|
when:
|
||||||
|
- not ansible_check_mode
|
||||||
|
- nym_node_bin.stat.exists
|
||||||
|
|
||||||
|
# remove current nym-node binary
|
||||||
|
- name: Remove current nym-node binary
|
||||||
|
file:
|
||||||
|
path: "{{ nym_binary_path }}"
|
||||||
|
state: absent
|
||||||
|
when:
|
||||||
|
- not ansible_check_mode
|
||||||
|
- nym_node_bin.stat.exists
|
||||||
+18
-17
@@ -1,11 +1,12 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nym-client"
|
name = "nym-client"
|
||||||
version = "1.1.64"
|
version = "1.1.72"
|
||||||
authors = ["Dave Hrycyszyn <futurechimp@users.noreply.github.com>", "Jędrzej Stuczyński <andrew@nymtech.net>"]
|
authors = ["Dave Hrycyszyn <futurechimp@users.noreply.github.com>", "Jędrzej Stuczyński <andrew@nymtech.net>"]
|
||||||
description = "Implementation of the Nym Client"
|
description = "Implementation of the Nym Client"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
rust-version = "1.85"
|
rust-version = "1.85"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
publish = false
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
@@ -42,32 +43,32 @@ tokio-tungstenite = { workspace = true }
|
|||||||
zeroize = { workspace = true }
|
zeroize = { workspace = true }
|
||||||
|
|
||||||
## internal
|
## internal
|
||||||
nym-bandwidth-controller = { path = "../../common/bandwidth-controller" }
|
nym-bandwidth-controller = { workspace = true }
|
||||||
nym-bin-common = { path = "../../common/bin-common", features = [
|
nym-bin-common = { workspace = true, features = [
|
||||||
"output_format",
|
"output_format",
|
||||||
"clap",
|
"clap",
|
||||||
"basic_tracing",
|
"basic_tracing",
|
||||||
] }
|
] }
|
||||||
nym-client-core = { path = "../../common/client-core", features = [
|
nym-client-core = { workspace = true, features = [
|
||||||
"fs-credentials-storage",
|
"fs-credentials-storage",
|
||||||
"fs-surb-storage",
|
"fs-surb-storage",
|
||||||
"fs-gateways-storage",
|
"fs-gateways-storage",
|
||||||
"cli",
|
"cli",
|
||||||
] }
|
] }
|
||||||
nym-config = { path = "../../common/config" }
|
nym-config = { workspace = true }
|
||||||
nym-credential-storage = { path = "../../common/credential-storage" }
|
nym-credential-storage = { workspace = true }
|
||||||
nym-credentials = { path = "../../common/credentials" }
|
nym-credentials = { workspace = true }
|
||||||
nym-crypto = { path = "../../common/crypto" }
|
nym-crypto = { workspace = true }
|
||||||
nym-gateway-requests = { path = "../../common/gateway-requests" }
|
nym-gateway-requests = { workspace = true }
|
||||||
nym-network-defaults = { path = "../../common/network-defaults" }
|
nym-network-defaults = { workspace = true }
|
||||||
nym-sphinx = { path = "../../common/nymsphinx" }
|
nym-sphinx = { workspace = true }
|
||||||
nym-pemstore = { path = "../../common/pemstore" }
|
nym-pemstore = { workspace = true }
|
||||||
nym-task = { path = "../../common/task" }
|
nym-task = { workspace = true }
|
||||||
nym-topology = { path = "../../common/topology" }
|
nym-topology = { workspace = true }
|
||||||
nym-validator-client = { path = "../../common/client-libs/validator-client", features = [
|
nym-validator-client = { workspace = true, features = [
|
||||||
"http-client",
|
"http-client",
|
||||||
] }
|
] }
|
||||||
nym-client-websocket-requests = { path = "websocket-requests" }
|
nym-client-websocket-requests = { workspace = true }
|
||||||
nym-id = { path = "../../common/nym-id" }
|
nym-id = { workspace = true }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
|
|||||||
+1010
-980
File diff suppressed because it is too large
Load Diff
@@ -19,7 +19,7 @@
|
|||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"clean-webpack-plugin": "^4.0.0",
|
"clean-webpack-plugin": "^4.0.0",
|
||||||
"webpack": "^5.76.0",
|
"webpack": "^5.105.0",
|
||||||
"webpack-cli": "^4.9.2",
|
"webpack-cli": "^4.9.2",
|
||||||
"webpack-dev-server": "^4.7.4"
|
"webpack-dev-server": "^4.7.4"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,9 +1,13 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nym-client-websocket-requests"
|
name = "nym-client-websocket-requests"
|
||||||
version = "0.1.0"
|
version.workspace = true
|
||||||
authors = ["Jędrzej Stuczyński <andrew@nymtech.net>"]
|
authors = ["Jędrzej Stuczyński <andrew@nymtech.net>"]
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
description = "Request and response definitions for Nym client websocket connections"
|
||||||
|
repository.workspace = true
|
||||||
|
homepage.workspace = true
|
||||||
|
documentation.workspace = true
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
@@ -11,4 +15,4 @@ license.workspace = true
|
|||||||
serde = { workspace = true, features = ["derive"] }
|
serde = { workspace = true, features = ["derive"] }
|
||||||
serde_json = { workspace = true }
|
serde_json = { workspace = true }
|
||||||
|
|
||||||
nym-sphinx = { path = "../../../common/nymsphinx" }
|
nym-sphinx = { workspace = true }
|
||||||
|
|||||||
+17
-16
@@ -1,11 +1,12 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nym-socks5-client"
|
name = "nym-socks5-client"
|
||||||
version = "1.1.64"
|
version = "1.1.72"
|
||||||
authors = ["Dave Hrycyszyn <futurechimp@users.noreply.github.com>"]
|
authors = ["Dave Hrycyszyn <futurechimp@users.noreply.github.com>"]
|
||||||
description = "A SOCKS5 localhost proxy that converts incoming messages to Sphinx and sends them to a Nym address"
|
description = "A SOCKS5 localhost proxy that converts incoming messages to Sphinx and sends them to a Nym address"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
rust-version = "1.85"
|
rust-version = "1.85"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
publish = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
bs58 = { workspace = true }
|
bs58 = { workspace = true }
|
||||||
@@ -24,30 +25,30 @@ url = { workspace = true }
|
|||||||
zeroize = { workspace = true }
|
zeroize = { workspace = true }
|
||||||
|
|
||||||
# internal
|
# internal
|
||||||
nym-bin-common = { path = "../../common/bin-common", features = [
|
nym-bin-common = { workspace = true, features = [
|
||||||
"output_format",
|
"output_format",
|
||||||
"clap",
|
"clap",
|
||||||
"basic_tracing",
|
"basic_tracing",
|
||||||
] }
|
] }
|
||||||
nym-client-core = { path = "../../common/client-core", features = [
|
nym-client-core = { workspace = true, features = [
|
||||||
"fs-credentials-storage",
|
"fs-credentials-storage",
|
||||||
"fs-surb-storage",
|
"fs-surb-storage",
|
||||||
"fs-gateways-storage",
|
"fs-gateways-storage",
|
||||||
"cli",
|
"cli",
|
||||||
] }
|
] }
|
||||||
nym-config = { path = "../../common/config" }
|
nym-config = { workspace = true }
|
||||||
nym-credential-storage = { path = "../../common/credential-storage" }
|
nym-credential-storage = { workspace = true }
|
||||||
nym-credentials = { path = "../../common/credentials" }
|
nym-credentials = { workspace = true }
|
||||||
nym-crypto = { path = "../../common/crypto" }
|
nym-crypto = { workspace = true }
|
||||||
nym-gateway-requests = { path = "../../common/gateway-requests" }
|
nym-gateway-requests = { workspace = true }
|
||||||
nym-id = { path = "../../common/nym-id" }
|
nym-id = { workspace = true }
|
||||||
nym-network-defaults = { path = "../../common/network-defaults" }
|
nym-network-defaults = { workspace = true }
|
||||||
nym-ordered-buffer = { path = "../../common/socks5/ordered-buffer" }
|
nym-ordered-buffer = { workspace = true }
|
||||||
nym-pemstore = { path = "../../common/pemstore" }
|
nym-pemstore = { workspace = true }
|
||||||
nym-socks5-client-core = { path = "../../common/socks5-client-core" }
|
nym-socks5-client-core = { workspace = true }
|
||||||
nym-sphinx = { path = "../../common/nymsphinx" }
|
nym-sphinx = { workspace = true }
|
||||||
nym-topology = { path = "../../common/topology" }
|
nym-topology = { workspace = true }
|
||||||
nym-validator-client = { path = "../../common/client-libs/validator-client", features = [
|
nym-validator-client = { workspace = true, features = [
|
||||||
"http-client",
|
"http-client",
|
||||||
] }
|
] }
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nym-async-file-watcher"
|
name = "nym-async-file-watcher"
|
||||||
version = "0.1.0"
|
version.workspace = true
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
description = "Simple file watcher that sends a notification whenever there was any change in the watched file"
|
||||||
|
repository.workspace = true
|
||||||
|
homepage.workspace = true
|
||||||
|
documentation.workspace = true
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user