mirror of
https://github.com/gofiber/storage.git
synced 2025-09-27 04:46:08 +08:00
Compare commits
2153 Commits
azureblob/
...
codex/2025
Author | SHA1 | Date | |
---|---|---|---|
![]() |
73af914681 | ||
![]() |
46bf456daa | ||
![]() |
5e964eef23 | ||
![]() |
303d23c784 | ||
![]() |
8fe1a661ec | ||
![]() |
d806d258ef | ||
![]() |
88b3cb24be | ||
![]() |
ad20f62903 | ||
![]() |
99fc0e2590 | ||
![]() |
2e20a4d558 | ||
![]() |
bd9313079b | ||
![]() |
64111772da | ||
![]() |
5b0ff185f2 | ||
![]() |
cf369907b8 | ||
![]() |
d95247b156 | ||
![]() |
2841c64d32 | ||
![]() |
75b43b2ac4 | ||
![]() |
85ffd9d133 | ||
![]() |
a1921fcac8 | ||
![]() |
c45802b369 | ||
![]() |
38c493be10 | ||
![]() |
ffeaf190a6 | ||
![]() |
2cab07ac23 | ||
![]() |
9e9f692339 | ||
![]() |
bda063edd9 | ||
![]() |
e8eac60d32 | ||
![]() |
fcd6ee741d | ||
![]() |
129a9b4a03 | ||
![]() |
9470818c26 | ||
![]() |
fe8eba6afe | ||
![]() |
9e0adc6f17 | ||
![]() |
676b7c385b | ||
![]() |
c5d36121f9 | ||
![]() |
287fb557dd | ||
![]() |
0fa7c1c3c0 | ||
![]() |
6150b60e10 | ||
![]() |
1144ec5054 | ||
![]() |
f6ebad3ae3 | ||
![]() |
a872a0b45f | ||
![]() |
91191d439b | ||
![]() |
fea1743ad1 | ||
![]() |
9acde27b81 | ||
![]() |
bf35e275d9 | ||
![]() |
06387240dd | ||
![]() |
048f64d774 | ||
![]() |
4ab3b3c0bd | ||
![]() |
a0e741ea81 | ||
![]() |
0c03dbe199 | ||
![]() |
8ee03469cb | ||
![]() |
eb223558f8 | ||
![]() |
b31aabce01 | ||
![]() |
1984506cfd | ||
![]() |
9a7df92ade | ||
![]() |
c603327efd | ||
![]() |
aee853e12e | ||
![]() |
bd5ce882fb | ||
![]() |
53b9539472 | ||
![]() |
363be39151 | ||
![]() |
0404c9479c | ||
![]() |
6de3835af3 | ||
![]() |
f8cae390d6 | ||
![]() |
ff407691a9 | ||
![]() |
535b29cba8 | ||
![]() |
23106b5a0b | ||
![]() |
51cadf014a | ||
![]() |
708a8075e1 | ||
![]() |
544043e9ca | ||
![]() |
f70f371c8e | ||
![]() |
074537ef41 | ||
![]() |
1a6c4754d6 | ||
![]() |
a27e2d7e38 | ||
![]() |
ff897f62f5 | ||
![]() |
1993e96068 | ||
![]() |
00ccfbd917 | ||
![]() |
c55ad9852a | ||
![]() |
87171e462b | ||
![]() |
43f19bf837 | ||
![]() |
794f267560 | ||
![]() |
359f17bdb6 | ||
![]() |
22c8749ebd | ||
![]() |
c40fab2f49 | ||
![]() |
295b6144e5 | ||
![]() |
e730d3061e | ||
![]() |
31d99f8c13 | ||
![]() |
052af41b84 | ||
![]() |
087d3e71d7 | ||
![]() |
40fd1286eb | ||
![]() |
f7a52236a0 | ||
![]() |
86e2c40dc0 | ||
![]() |
ce2ee440e9 | ||
![]() |
e5566caab1 | ||
![]() |
82b0c39bcd | ||
![]() |
30b5c7a76b | ||
![]() |
bddb91a82d | ||
![]() |
2e2f3c48c0 | ||
![]() |
e03d911acb | ||
![]() |
da211647b7 | ||
![]() |
8c999edaf5 | ||
![]() |
51ac27beaf | ||
![]() |
aeb0d91ae1 | ||
![]() |
b2211037ca | ||
![]() |
1e89154864 | ||
![]() |
74b3bd3f2f | ||
![]() |
0f13ff4a80 | ||
![]() |
f19bcd6674 | ||
![]() |
bf7c309100 | ||
![]() |
288cedb4a4 | ||
![]() |
4c19cbad89 | ||
![]() |
ba248c9967 | ||
![]() |
168125aba4 | ||
![]() |
331a84b6c5 | ||
![]() |
4d516c348a | ||
![]() |
1e6e787ec5 | ||
![]() |
5794b5068f | ||
![]() |
941ef46eaa | ||
![]() |
30b20739d0 | ||
![]() |
40b2566dc1 | ||
![]() |
189b125e02 | ||
![]() |
c89793a5b6 | ||
![]() |
07846ad515 | ||
![]() |
b85c02262b | ||
![]() |
7089f9d809 | ||
![]() |
fc3a3a91dc | ||
![]() |
51143819c8 | ||
![]() |
093d2519c7 | ||
![]() |
ef7980445d | ||
![]() |
743bcd8ec3 | ||
![]() |
24f8717aa0 | ||
![]() |
3db82583cc | ||
![]() |
46267c6361 | ||
![]() |
a77e60ff9f | ||
![]() |
fe41cfbd81 | ||
![]() |
7faca3f2d0 | ||
![]() |
911bf1b50e | ||
![]() |
b366427f96 | ||
![]() |
7cb29ad8ff | ||
![]() |
53a943a2d5 | ||
![]() |
0ab6d9b3f1 | ||
![]() |
b703f5f64c | ||
![]() |
f5f112f987 | ||
![]() |
7663d74cdf | ||
![]() |
8f0819b1c5 | ||
![]() |
abdb9c790a | ||
![]() |
545378511c | ||
![]() |
af5649d1a7 | ||
![]() |
adc1376cc6 | ||
![]() |
7b2d4bb285 | ||
![]() |
9dc93a5d83 | ||
![]() |
dc8199d089 | ||
![]() |
d73e1f3a9a | ||
![]() |
ca3a52c65b | ||
![]() |
d0e25aa231 | ||
![]() |
7ef0190a4a | ||
![]() |
fba083b9de | ||
![]() |
121ab151de | ||
![]() |
7ad4e9971d | ||
![]() |
c596e5783a | ||
![]() |
32f7699d7a | ||
![]() |
722e242fdf | ||
![]() |
eb73056593 | ||
![]() |
fc150cc608 | ||
![]() |
db8b59a335 | ||
![]() |
e91e04b166 | ||
![]() |
3a1a37e00f | ||
![]() |
bf7fc60523 | ||
![]() |
7ed83dd161 | ||
![]() |
79d6043639 | ||
![]() |
b7893d7d4a | ||
![]() |
ba60ab9a1f | ||
![]() |
dd7391a11a | ||
![]() |
7866e27c75 | ||
![]() |
892e6fec63 | ||
![]() |
5b7af066bb | ||
![]() |
05b5be3f18 | ||
![]() |
76a7b0a657 | ||
![]() |
b90664baad | ||
![]() |
1f42b00573 | ||
![]() |
42cf99276e | ||
![]() |
b6d622b449 | ||
![]() |
adbe268884 | ||
![]() |
2a50072e0e | ||
![]() |
608442c3f6 | ||
![]() |
57a3c9787c | ||
![]() |
e73dbf045c | ||
![]() |
69b50a5f23 | ||
![]() |
5de2251e88 | ||
![]() |
5d0188976b | ||
![]() |
7006c9efc5 | ||
![]() |
c306a8f1b6 | ||
![]() |
8d6a777590 | ||
![]() |
5c8bb189ae | ||
![]() |
e13449700c | ||
![]() |
4785855bc6 | ||
![]() |
afaaf8a92e | ||
![]() |
2248ff4975 | ||
![]() |
10d41e621c | ||
![]() |
353e6931a6 | ||
![]() |
c061207265 | ||
![]() |
2b073db8ff | ||
![]() |
7f568d78ee | ||
![]() |
1c1d596001 | ||
![]() |
1312a21486 | ||
![]() |
6aa0ed819e | ||
![]() |
66f995ef5a | ||
![]() |
16e0ac3e96 | ||
![]() |
a80927f371 | ||
![]() |
9d7e8b7c01 | ||
![]() |
89d6407c6f | ||
![]() |
92ce3476c5 | ||
![]() |
f421016863 | ||
![]() |
070b07d817 | ||
![]() |
4afaea1f9c | ||
![]() |
a572e3e052 | ||
![]() |
1b82547426 | ||
![]() |
d41a7f11b5 | ||
![]() |
a1c54b2966 | ||
![]() |
e55caf099c | ||
![]() |
7b0abe9530 | ||
![]() |
9cd4208e54 | ||
![]() |
e81b66dbf4 | ||
![]() |
494ff4e035 | ||
![]() |
dcec2f2d4b | ||
![]() |
7496f5526c | ||
![]() |
338abb526f | ||
![]() |
52dda9d9f8 | ||
![]() |
e755ca8aca | ||
![]() |
dc3d9c8ff1 | ||
![]() |
3b44abfe6a | ||
![]() |
3a40324003 | ||
![]() |
72fb697360 | ||
![]() |
672709e17e | ||
![]() |
6644a25509 | ||
![]() |
2f180f45ec | ||
![]() |
d301361d5f | ||
![]() |
250c30ae1f | ||
![]() |
e5c2cd66f7 | ||
![]() |
0a698b4339 | ||
![]() |
d7248f7df1 | ||
![]() |
2c6455f7d4 | ||
![]() |
808636c52b | ||
![]() |
1e0293b778 | ||
![]() |
0c8381daea | ||
![]() |
9944088569 | ||
![]() |
6ce77b46a3 | ||
![]() |
4a2228d5fe | ||
![]() |
44180aaa2c | ||
![]() |
0295b34e40 | ||
![]() |
8e8a762e06 | ||
![]() |
4f57dda4a9 | ||
![]() |
e61ea6c9da | ||
![]() |
b82b9ffd88 | ||
![]() |
dc81353808 | ||
![]() |
470e17ebaa | ||
![]() |
9113e442dc | ||
![]() |
0d583fa0e8 | ||
![]() |
aece23fe66 | ||
![]() |
5a5580e0a1 | ||
![]() |
7af98b421e | ||
![]() |
7f8afd2235 | ||
![]() |
6c01ddadb5 | ||
![]() |
c544464e93 | ||
![]() |
1420ef2be3 | ||
![]() |
0c059b0f3f | ||
![]() |
87a8c23515 | ||
![]() |
4c7b5f7cb9 | ||
![]() |
b5fc84ac5b | ||
![]() |
a8327f007e | ||
![]() |
195845e882 | ||
![]() |
d43750be06 | ||
![]() |
cd0b0a8377 | ||
![]() |
e831cb421c | ||
![]() |
3d2d5c05eb | ||
![]() |
40167cc6c8 | ||
![]() |
616d9d8f8f | ||
![]() |
39f965ffbb | ||
![]() |
0cf84b3048 | ||
![]() |
c4bdc8f5e3 | ||
![]() |
0dea23ff24 | ||
![]() |
caa5078fef | ||
![]() |
28c3e18de8 | ||
![]() |
e596d39946 | ||
![]() |
2f5cfe7538 | ||
![]() |
caa448dfae | ||
![]() |
74b9f8786b | ||
![]() |
7489a3eb94 | ||
![]() |
42cc20f51d | ||
![]() |
2ad757cb5c | ||
![]() |
c596db0402 | ||
![]() |
b1f2b4f2b3 | ||
![]() |
25aa03c417 | ||
![]() |
c86034f531 | ||
![]() |
7ae8f414b1 | ||
![]() |
8463c7f8f4 | ||
![]() |
490131cdb1 | ||
![]() |
888bd54955 | ||
![]() |
f0b53d9a66 | ||
![]() |
be69a192d2 | ||
![]() |
cdb26901ec | ||
![]() |
b5a0d5ba88 | ||
![]() |
709bde3b56 | ||
![]() |
8deabd140a | ||
![]() |
d153ddd17b | ||
![]() |
7d6aec5b4a | ||
![]() |
68e6ee57eb | ||
![]() |
ba32290665 | ||
![]() |
8dcdba4a72 | ||
![]() |
0a9e0ef282 | ||
![]() |
53b2205e67 | ||
![]() |
371611ba54 | ||
![]() |
d1893c2e4a | ||
![]() |
f3bdd2599c | ||
![]() |
d7bbc22084 | ||
![]() |
58388d34e8 | ||
![]() |
634695c6fb | ||
![]() |
f03ca4e3a8 | ||
![]() |
2192ac6cfe | ||
![]() |
1b443d036e | ||
![]() |
75f5216baf | ||
![]() |
ce31f766b9 | ||
![]() |
486941cc00 | ||
![]() |
d6fb9319dd | ||
![]() |
245dce0f1d | ||
![]() |
a5ea1ad30f | ||
![]() |
a422c89d98 | ||
![]() |
3242f93c9f | ||
![]() |
17ab512fe3 | ||
![]() |
c1e526d31d | ||
![]() |
134e774e80 | ||
![]() |
a01135d48b | ||
![]() |
9d7368cc48 | ||
![]() |
58bbe4632f | ||
![]() |
e5059da502 | ||
![]() |
c914bf3107 | ||
![]() |
034736306c | ||
![]() |
c07f9034d8 | ||
![]() |
ebc0dbd566 | ||
![]() |
51ed2951e6 | ||
![]() |
25935ed3d6 | ||
![]() |
6abe5e5385 | ||
![]() |
1b79f1941d | ||
![]() |
978e9decb9 | ||
![]() |
0a96159376 | ||
![]() |
1fd56464e1 | ||
![]() |
7559525547 | ||
![]() |
d431239437 | ||
![]() |
46aa8dbd7c | ||
![]() |
40586cc9df | ||
![]() |
bd94f13340 | ||
![]() |
6d5a45d959 | ||
![]() |
7027f24216 | ||
![]() |
84e2c12848 | ||
![]() |
9e4c7d82da | ||
![]() |
20be56d1f0 | ||
![]() |
1b81d6a00f | ||
![]() |
13bd55d211 | ||
![]() |
bc8ed05b29 | ||
![]() |
ed7eae497f | ||
![]() |
137add4487 | ||
![]() |
63cf32031d | ||
![]() |
5687318557 | ||
![]() |
0e05d2d54e | ||
![]() |
320a250502 | ||
![]() |
2231b313bd | ||
![]() |
06e9b1f578 | ||
![]() |
dc1bf75fe7 | ||
![]() |
6a89dcaa6f | ||
![]() |
faa652f38c | ||
![]() |
05516094e9 | ||
![]() |
59315e052b | ||
![]() |
cedaaf2fd9 | ||
![]() |
366e1ee571 | ||
![]() |
1df42bd461 | ||
![]() |
e1e3a4ffaa | ||
![]() |
e21a9065b5 | ||
![]() |
aad60beab6 | ||
![]() |
bc86e8015c | ||
![]() |
0364bd4676 | ||
![]() |
ce8dc55659 | ||
![]() |
bb7a0cadb2 | ||
![]() |
d1b13cac69 | ||
![]() |
73bf79313b | ||
![]() |
7c75678090 | ||
![]() |
698ae8a390 | ||
![]() |
3ab20cabab | ||
![]() |
ff6212a42c | ||
![]() |
aac5d67055 | ||
![]() |
827ef9ec96 | ||
![]() |
a875f39f69 | ||
![]() |
17b879d6e4 | ||
![]() |
8855b7eda1 | ||
![]() |
0e4dfc0d07 | ||
![]() |
61d00d996b | ||
![]() |
a5733f7261 | ||
![]() |
c38280d308 | ||
![]() |
c2122f7e4a | ||
![]() |
649c51909b | ||
![]() |
65642eae0d | ||
![]() |
8840678883 | ||
![]() |
c5fb7a0de1 | ||
![]() |
aad87d2b7e | ||
![]() |
3da4dff355 | ||
![]() |
714f912b30 | ||
![]() |
fc37a1c2f1 | ||
![]() |
7f5e9eb94d | ||
![]() |
6339526f6e | ||
![]() |
4805f9f14b | ||
![]() |
6ab1dd1c75 | ||
![]() |
196723e48f | ||
![]() |
d844832d3e | ||
![]() |
2390e2a92d | ||
![]() |
481cdff03b | ||
![]() |
b41c6e1c9a | ||
![]() |
7bdb6140ce | ||
![]() |
944575d106 | ||
![]() |
59a861ea30 | ||
![]() |
a99cf3930a | ||
![]() |
69467ed7ab | ||
![]() |
3d26d32f1a | ||
![]() |
bd89daaba0 | ||
![]() |
f1b52c57d7 | ||
![]() |
7a56299372 | ||
![]() |
b775dc4c8e | ||
![]() |
db6449b454 | ||
![]() |
d4015ce4e6 | ||
![]() |
92fadd0f07 | ||
![]() |
617e1029e4 | ||
![]() |
bf555fc757 | ||
![]() |
ab54fa3fea | ||
![]() |
64092ed5b7 | ||
![]() |
9fe80fb996 | ||
![]() |
cc552d8da1 | ||
![]() |
1e5842520e | ||
![]() |
a6e90596b1 | ||
![]() |
a6df18aab0 | ||
![]() |
ec5fe0ce57 | ||
![]() |
36ac34e4ee | ||
![]() |
44ee39125c | ||
![]() |
db78bf31a9 | ||
![]() |
8217bf1674 | ||
![]() |
c3a43fa547 | ||
![]() |
ea8757954d | ||
![]() |
9eb4031a70 | ||
![]() |
e5b3f3d3ff | ||
![]() |
f932ef3a04 | ||
![]() |
425facc354 | ||
![]() |
fd01240c04 | ||
![]() |
18555af9ce | ||
![]() |
aebc8cb8b1 | ||
![]() |
fc7d7b7b35 | ||
![]() |
1adc6bfd94 | ||
![]() |
83a4738628 | ||
![]() |
7ac8a3ed25 | ||
![]() |
ebd3e90db5 | ||
![]() |
37fee35346 | ||
![]() |
6e6a2e1022 | ||
![]() |
e36fbf1741 | ||
![]() |
e6b8e31197 | ||
![]() |
d6e73157b6 | ||
![]() |
4c57f3872e | ||
![]() |
988773fffc | ||
![]() |
0e68f36008 | ||
![]() |
8914be3ee5 | ||
![]() |
12137d7e39 | ||
![]() |
28d296d96b | ||
![]() |
84eba42d87 | ||
![]() |
9e2257de4f | ||
![]() |
1be3b2025e | ||
![]() |
7e6ffad8d7 | ||
![]() |
3570609353 | ||
![]() |
6fe8158deb | ||
![]() |
7de84bcae4 | ||
![]() |
71aa8ed852 | ||
![]() |
2656670d54 | ||
![]() |
8c03fe7af2 | ||
![]() |
e615c6f01e | ||
![]() |
9ab4df2a01 | ||
![]() |
98a1bbe290 | ||
![]() |
705706a418 | ||
![]() |
b539c9dde8 | ||
![]() |
912bb43630 | ||
![]() |
8e13a6f387 | ||
![]() |
d49a2ac929 | ||
![]() |
95f243e26a | ||
![]() |
b1026d4553 | ||
![]() |
33b00bdd97 | ||
![]() |
43ec0f0380 | ||
![]() |
8f693eb683 | ||
![]() |
53f69d1576 | ||
![]() |
3abb5afc2e | ||
![]() |
d7c3475ec9 | ||
![]() |
3c3622d811 | ||
![]() |
4a002049c5 | ||
![]() |
b0410809eb | ||
![]() |
904a606aa2 | ||
![]() |
ea7c246e81 | ||
![]() |
6fbff46b8e | ||
![]() |
3cbad5a75e | ||
![]() |
e7fddf6676 | ||
![]() |
dd6819e781 | ||
![]() |
82d4154c74 | ||
![]() |
33ac0242fc | ||
![]() |
c425087442 | ||
![]() |
496c0b684e | ||
![]() |
685c6a6757 | ||
![]() |
f13d0882af | ||
![]() |
4701e71529 | ||
![]() |
44a21ba8fd | ||
![]() |
05c8d3ed0f | ||
![]() |
af43d02830 | ||
![]() |
dfec0c6f76 | ||
![]() |
7306bb3b4c | ||
![]() |
0c639e37ca | ||
![]() |
d0f987d2f8 | ||
![]() |
48d18604d4 | ||
![]() |
bc1d9a9bdc | ||
![]() |
38d42c947f | ||
![]() |
6ec8dc0ab2 | ||
![]() |
9953832a00 | ||
![]() |
371e69053c | ||
![]() |
d8e70de944 | ||
![]() |
7a1d8d2c98 | ||
![]() |
b136a5b56e | ||
![]() |
58de66d122 | ||
![]() |
dd6143892e | ||
![]() |
e04e1e6346 | ||
![]() |
66fef6ba6d | ||
![]() |
875834314f | ||
![]() |
5ee1715022 | ||
![]() |
f94632f947 | ||
![]() |
1654e52f95 | ||
![]() |
1e0b4e416b | ||
![]() |
06f44dedaf | ||
![]() |
7c88d7908a | ||
![]() |
43a61892dc | ||
![]() |
21e89f59d2 | ||
![]() |
1e2e8012e7 | ||
![]() |
4145f60593 | ||
![]() |
fe2db5baf5 | ||
![]() |
6b40a05ccd | ||
![]() |
f3d338dad2 | ||
![]() |
cd4fe07ff3 | ||
![]() |
a28f8689f1 | ||
![]() |
13a1852057 | ||
![]() |
653c430f9d | ||
![]() |
3366e6dd63 | ||
![]() |
fa14baae3d | ||
![]() |
4cd1214f69 | ||
![]() |
442e4809ae | ||
![]() |
406ba73eec | ||
![]() |
56dc1dd7ff | ||
![]() |
088154f2af | ||
![]() |
8391d854bc | ||
![]() |
ced0e613a0 | ||
![]() |
e748baf9cf | ||
![]() |
4405f46024 | ||
![]() |
41afe4116e | ||
![]() |
77869acab6 | ||
![]() |
7b1fdb7325 | ||
![]() |
e7581b6e08 | ||
![]() |
72d3e80126 | ||
![]() |
c9cf50ee93 | ||
![]() |
70aa68fee1 | ||
![]() |
b04a6d0bd2 | ||
![]() |
0f6fecf48e | ||
![]() |
5fdad1dca7 | ||
![]() |
5401e4c6ca | ||
![]() |
63962a4a9e | ||
![]() |
7476af6227 | ||
![]() |
cd34271491 | ||
![]() |
87cf07648d | ||
![]() |
337dc45da8 | ||
![]() |
e27e1727e7 | ||
![]() |
7c028869e3 | ||
![]() |
ff932113e8 | ||
![]() |
bc12528362 | ||
![]() |
2a0b6423af | ||
![]() |
533de03ce9 | ||
![]() |
d4d7eedd05 | ||
![]() |
ee376faa57 | ||
![]() |
e378910337 | ||
![]() |
c54d54995b | ||
![]() |
6beaff2fa0 | ||
![]() |
30e6e5ad85 | ||
![]() |
fd65cef217 | ||
![]() |
28503829f6 | ||
![]() |
3f7110fcdd | ||
![]() |
287a903a19 | ||
![]() |
c688b234de | ||
![]() |
a2646d6fc3 | ||
![]() |
9fd09d88e1 | ||
![]() |
acc0d6b62f | ||
![]() |
9deea0d835 | ||
![]() |
eb73209838 | ||
![]() |
46eea52615 | ||
![]() |
9f8091caff | ||
![]() |
5b03e3c258 | ||
![]() |
585b3e93ae | ||
![]() |
235d001e9c | ||
![]() |
05d66770ef | ||
![]() |
bc80cbb400 | ||
![]() |
823b9f9a6f | ||
![]() |
138a8f9b87 | ||
![]() |
d5694955e7 | ||
![]() |
c138cabfb3 | ||
![]() |
c1933ed3e8 | ||
![]() |
11379815a1 | ||
![]() |
093771565c | ||
![]() |
f1d4944525 | ||
![]() |
64eb3d85be | ||
![]() |
98ce163298 | ||
![]() |
9b6b3c8afe | ||
![]() |
0a1254849f | ||
![]() |
21157c2990 | ||
![]() |
e0f5735b25 | ||
![]() |
3d82298d30 | ||
![]() |
715cafdc96 | ||
![]() |
5c2bcfea9b | ||
![]() |
7f995dafb2 | ||
![]() |
ab88d43900 | ||
![]() |
6b31862a33 | ||
![]() |
785e71215f | ||
![]() |
ea98e0ac2c | ||
![]() |
a2f349766f | ||
![]() |
b60700c0b9 | ||
![]() |
3f5304479a | ||
![]() |
51759980d0 | ||
![]() |
0f9476ea39 | ||
![]() |
e91a22a066 | ||
![]() |
f2ff5e7a39 | ||
![]() |
fe98837e83 | ||
![]() |
1fa944bef7 | ||
![]() |
c2e5b74f2a | ||
![]() |
0c2d884898 | ||
![]() |
d3c0d39dc8 | ||
![]() |
fbfc6d9394 | ||
![]() |
165b2ae02a | ||
![]() |
174e393340 | ||
![]() |
fb997fd4b5 | ||
![]() |
a3bf4c9e20 | ||
![]() |
45a0bc547e | ||
![]() |
40f3844551 | ||
![]() |
1b4c2425db | ||
![]() |
d8b1437f50 | ||
![]() |
b5d51650a3 | ||
![]() |
863ef71f8b | ||
![]() |
f2a5ba2e7c | ||
![]() |
85b4a99042 | ||
![]() |
44d93745d1 | ||
![]() |
b4cd42b73e | ||
![]() |
10116f925d | ||
![]() |
de3b493523 | ||
![]() |
e4abddc19f | ||
![]() |
69a51dc87e | ||
![]() |
6e08ff8098 | ||
![]() |
4f0e6c465f | ||
![]() |
7e74ccf6da | ||
![]() |
93c211d4ab | ||
![]() |
c00f6495c5 | ||
![]() |
10e473e1eb | ||
![]() |
4a7a7f0480 | ||
![]() |
5e5858e217 | ||
![]() |
86575200b3 | ||
![]() |
a7c7b42836 | ||
![]() |
a9bb64e9ec | ||
![]() |
c1362f1eae | ||
![]() |
4c2246e2b9 | ||
![]() |
3a3ab81b5a | ||
![]() |
d793dc4af0 | ||
![]() |
6742f2ae27 | ||
![]() |
3fc1b8ca86 | ||
![]() |
33d9b48f4e | ||
![]() |
962c314b98 | ||
![]() |
511a96be07 | ||
![]() |
4e570adc99 | ||
![]() |
951bb773c1 | ||
![]() |
cf25873ebd | ||
![]() |
2cc5e2c03b | ||
![]() |
d4b254694f | ||
![]() |
e4a7a648ab | ||
![]() |
41e11d61c6 | ||
![]() |
0f88b957a8 | ||
![]() |
8e75266dac | ||
![]() |
66cdbbd9fa | ||
![]() |
4e4e57512e | ||
![]() |
0439f04e0e | ||
![]() |
ddbe48768f | ||
![]() |
9210a551ac | ||
![]() |
c5fa26046a | ||
![]() |
f29aa524ca | ||
![]() |
07689915d3 | ||
![]() |
cc15d52131 | ||
![]() |
cb30085763 | ||
![]() |
505f3710b9 | ||
![]() |
c6792f4a17 | ||
![]() |
8caf6b9812 | ||
![]() |
e1e51a0d68 | ||
![]() |
fd5f9f7993 | ||
![]() |
b49ff3a6a6 | ||
![]() |
c58fcf23e2 | ||
![]() |
3f32afe238 | ||
![]() |
c7ef3ee5f2 | ||
![]() |
32c31af76e | ||
![]() |
96079e7650 | ||
![]() |
16ebadc5c1 | ||
![]() |
7a92ddb16e | ||
![]() |
de074c555d | ||
![]() |
bba2cc0ba7 | ||
![]() |
67fc665919 | ||
![]() |
e1aa2a6ae7 | ||
![]() |
3d77696dec | ||
![]() |
e8128ff53c | ||
![]() |
babfff4dc4 | ||
![]() |
72a92b9221 | ||
![]() |
be47d1fea6 | ||
![]() |
e8b18f7ef2 | ||
![]() |
ea2775d9af | ||
![]() |
d7e2b3000a | ||
![]() |
dc96462306 | ||
![]() |
526bd7826b | ||
![]() |
f01f10c006 | ||
![]() |
3bfea340e7 | ||
![]() |
0fe8e5fda3 | ||
![]() |
ff55ec3477 | ||
![]() |
ff83043d09 | ||
![]() |
5a6ee123cf | ||
![]() |
a9f76af4ba | ||
![]() |
2aa6a93b98 | ||
![]() |
33e4479ce7 | ||
![]() |
adea65d290 | ||
![]() |
537b31756b | ||
![]() |
3b91f93611 | ||
![]() |
42831dcee6 | ||
![]() |
89a0a97fe8 | ||
![]() |
86f1b406e3 | ||
![]() |
102acc252b | ||
![]() |
4c24f5c1d3 | ||
![]() |
e6249971b8 | ||
![]() |
a8c6a4ec0b | ||
![]() |
412e272a97 | ||
![]() |
40a6167b74 | ||
![]() |
e4d46ce66c | ||
![]() |
386b6f431f | ||
![]() |
d2af2eb76b | ||
![]() |
395f8a80da | ||
![]() |
76c52119bf | ||
![]() |
87c2b454f8 | ||
![]() |
12ea6b4978 | ||
![]() |
cce70b9e7f | ||
![]() |
f8776d0233 | ||
![]() |
740eed9579 | ||
![]() |
baaf5c76e0 | ||
![]() |
9fa1710604 | ||
![]() |
674175ded7 | ||
![]() |
fae399ccdc | ||
![]() |
381f0c134e | ||
![]() |
9013b623ea | ||
![]() |
512c66712a | ||
![]() |
692f78abb0 | ||
![]() |
1a7044aded | ||
![]() |
88906bb82b | ||
![]() |
5d095dc16b | ||
![]() |
a18385a6ba | ||
![]() |
1da3514e71 | ||
![]() |
394700037c | ||
![]() |
6ec8bcd32c | ||
![]() |
b4652e76d3 | ||
![]() |
fc45f97811 | ||
![]() |
8a058382a7 | ||
![]() |
e05e7cd714 | ||
![]() |
3de4b9e83e | ||
![]() |
472d68a4ec | ||
![]() |
bf194ad2a4 | ||
![]() |
81439cd1b5 | ||
![]() |
ed9c7d186b | ||
![]() |
22f2630f8d | ||
![]() |
5a356f7c64 | ||
![]() |
7c1aec139a | ||
![]() |
19282554cc | ||
![]() |
889d229330 | ||
![]() |
e6fc5c6ab0 | ||
![]() |
c2c72ffc7f | ||
![]() |
84a578cc4e | ||
![]() |
3818d87d4d | ||
![]() |
af52fa3e09 | ||
![]() |
c0611659e1 | ||
![]() |
ae3a2de340 | ||
![]() |
cac4fd5e8d | ||
![]() |
b074e83e98 | ||
![]() |
478ea67bea | ||
![]() |
4f1577ad2c | ||
![]() |
15865d59ff | ||
![]() |
8cb7bc56b2 | ||
![]() |
bff5333d67 | ||
![]() |
af5faa0fa3 | ||
![]() |
8ee81305a1 | ||
![]() |
39be2580ea | ||
![]() |
a7a26b8d29 | ||
![]() |
cdf78c223e | ||
![]() |
1a5e6f92b2 | ||
![]() |
49eeb1d494 | ||
![]() |
78da7fcbd1 | ||
![]() |
db3ab9a2d8 | ||
![]() |
a0d6e6df5a | ||
![]() |
603305cf39 | ||
![]() |
f9f9ee6734 | ||
![]() |
cb106882f0 | ||
![]() |
a5f954c505 | ||
![]() |
53c5ec01a5 | ||
![]() |
f7b7345f06 | ||
![]() |
cd119d0f9e | ||
![]() |
b3a2e40c62 | ||
![]() |
a4849c83f7 | ||
![]() |
60be628083 | ||
![]() |
3cd89dbcf7 | ||
![]() |
43a47ef467 | ||
![]() |
153c837357 | ||
![]() |
efbc89fea6 | ||
![]() |
7bbad9a837 | ||
![]() |
1c23d53a9b | ||
![]() |
f962d64885 | ||
![]() |
1bb4d922e9 | ||
![]() |
75c8525a46 | ||
![]() |
4d7a172400 | ||
![]() |
1d6c0c3e25 | ||
![]() |
c80f1269f0 | ||
![]() |
471a6ac36a | ||
![]() |
de8f798d6e | ||
![]() |
b53f02beb1 | ||
![]() |
4ad4b034cb | ||
![]() |
fc01fc5829 | ||
![]() |
ff25433c70 | ||
![]() |
689759c035 | ||
![]() |
2f5263ef85 | ||
![]() |
2f174934c2 | ||
![]() |
0e060e19d1 | ||
![]() |
4ed36499ca | ||
![]() |
2f1c0cbba5 | ||
![]() |
4a558d04d2 | ||
![]() |
29406b2354 | ||
![]() |
6f09eca26d | ||
![]() |
304babaae6 | ||
![]() |
fe56bc56be | ||
![]() |
d2c20a1452 | ||
![]() |
8a873c0c1d | ||
![]() |
8d24b7710e | ||
![]() |
2c3433f532 | ||
![]() |
f35a941b18 | ||
![]() |
01d0e07203 | ||
![]() |
07d3b2ee60 | ||
![]() |
91125ae1ff | ||
![]() |
8987519886 | ||
![]() |
ae1a58f409 | ||
![]() |
6cd2a04347 | ||
![]() |
d6045366f3 | ||
![]() |
eba6a80a13 | ||
![]() |
d296a7f0da | ||
![]() |
30d1c4aeb1 | ||
![]() |
c9bf60b822 | ||
![]() |
526f70b1de | ||
![]() |
46b8c41b07 | ||
![]() |
920adaf9d1 | ||
![]() |
33479fdf80 | ||
![]() |
b8e131cbdc | ||
![]() |
efae25917f | ||
![]() |
87cb35a875 | ||
![]() |
b54ef2f223 | ||
![]() |
f0d3888c13 | ||
![]() |
f6e1c398df | ||
![]() |
fffd10e474 | ||
![]() |
a5e5b6c392 | ||
![]() |
730aba1fc4 | ||
![]() |
8819ff54b7 | ||
![]() |
3b5fbcdce6 | ||
![]() |
9942341b72 | ||
![]() |
9e27843919 | ||
![]() |
7c94391d11 | ||
![]() |
c3094e4ae5 | ||
![]() |
5e11a89904 | ||
![]() |
20c2931600 | ||
![]() |
448cdd08e2 | ||
![]() |
ea41c3d45e | ||
![]() |
662c591519 | ||
![]() |
d129128328 | ||
![]() |
aa21992fd5 | ||
![]() |
b02937835f | ||
![]() |
7907504d75 | ||
![]() |
2886d67714 | ||
![]() |
eee0d7df2c | ||
![]() |
60b43cf9d6 | ||
![]() |
fe3cc059c4 | ||
![]() |
b648905d66 | ||
![]() |
69e62f0b54 | ||
![]() |
ec227440cd | ||
![]() |
0344cbd5f0 | ||
![]() |
da28b6f39d | ||
![]() |
dec716bf98 | ||
![]() |
5da8c389a1 | ||
![]() |
bf3ba3e751 | ||
![]() |
e23626edef | ||
![]() |
897a80879d | ||
![]() |
2aa7735a92 | ||
![]() |
2cea147aa4 | ||
![]() |
920bb093a4 | ||
![]() |
b5f9269fff | ||
![]() |
04fb90595f | ||
![]() |
8b1d41dde3 | ||
![]() |
b784766b97 | ||
![]() |
f520ae0b54 | ||
![]() |
e38586e901 | ||
![]() |
df05331a78 | ||
![]() |
4ba6faaa00 | ||
![]() |
76acc99239 | ||
![]() |
43d47119b3 | ||
![]() |
d72125bb60 | ||
![]() |
e4aaaf76a8 | ||
![]() |
0cc27ea7ce | ||
![]() |
9524b39ca6 | ||
![]() |
13a14cd6fb | ||
![]() |
1fb6cd1a3f | ||
![]() |
9209ae4617 | ||
![]() |
cfd5f691c9 | ||
![]() |
39412ce785 | ||
![]() |
ea065c4ab8 | ||
![]() |
337546b077 | ||
![]() |
f9d76aa3d6 | ||
![]() |
d2d34d8777 | ||
![]() |
f25f8b8446 | ||
![]() |
acb19da9e9 | ||
![]() |
66c8914256 | ||
![]() |
038a286c3b | ||
![]() |
0701e6f1c3 | ||
![]() |
e744bc09fa | ||
![]() |
0228c63316 | ||
![]() |
f27f7b1055 | ||
![]() |
ad10412020 | ||
![]() |
13e9acc454 | ||
![]() |
f4bd2a5db4 | ||
![]() |
5304e96e7c | ||
![]() |
773d4f2e73 | ||
![]() |
7c81cf0dd5 | ||
![]() |
d237896b37 | ||
![]() |
f7fab78724 | ||
![]() |
6c59a5f1a3 | ||
![]() |
662c06d9c7 | ||
![]() |
b0d06ae093 | ||
![]() |
88b0adfcef | ||
![]() |
95d5b96b36 | ||
![]() |
7fb2efee17 | ||
![]() |
be0f16541b | ||
![]() |
eea17d4cd7 | ||
![]() |
d872a8574b | ||
![]() |
6b75862f66 | ||
![]() |
f4ee2db62c | ||
![]() |
4311191155 | ||
![]() |
78138c978a | ||
![]() |
9a1f09c741 | ||
![]() |
275be22a4c | ||
![]() |
292cee6539 | ||
![]() |
d27ee3679c | ||
![]() |
bf0d8fc9d0 | ||
![]() |
1f3a53a755 | ||
![]() |
0887a66d65 | ||
![]() |
2db9736872 | ||
![]() |
492df714dd | ||
![]() |
06cf69e024 | ||
![]() |
7c1ec06ddc | ||
![]() |
b52bac5100 | ||
![]() |
7fab4c8cbb | ||
![]() |
543f422b30 | ||
![]() |
626ede4760 | ||
![]() |
eef89b1660 | ||
![]() |
895dc1f61a | ||
![]() |
de58d8c006 | ||
![]() |
3e9063102a | ||
![]() |
c70e44944d | ||
![]() |
ad436b5d82 | ||
![]() |
c62c0af76c | ||
![]() |
3ef00028e6 | ||
![]() |
169c891474 | ||
![]() |
5434d25098 | ||
![]() |
f5b36b4517 | ||
![]() |
e5cb562af7 | ||
![]() |
17f0d6da43 | ||
![]() |
25dc910491 | ||
![]() |
d1087b6477 | ||
![]() |
50e94bf6fe | ||
![]() |
9b92a5ed83 | ||
![]() |
e000f78db3 | ||
![]() |
05dff2a932 | ||
![]() |
41dea6c121 | ||
![]() |
6c74d0b864 | ||
![]() |
6f85e022d4 | ||
![]() |
bbae53fb35 | ||
![]() |
16f9e43d82 | ||
![]() |
0231178416 | ||
![]() |
4c2a305e61 | ||
![]() |
fae42e4592 | ||
![]() |
9b24adebf2 | ||
![]() |
f1de042f2d | ||
![]() |
6817772063 | ||
![]() |
d91341723b | ||
![]() |
9ae9f31fe9 | ||
![]() |
e768b04589 | ||
![]() |
f2ddd06660 | ||
![]() |
ef93d8635c | ||
![]() |
4ebd332f94 | ||
![]() |
78b024645f | ||
![]() |
2077c74abc | ||
![]() |
fc586597bd | ||
![]() |
cb3a645bda | ||
![]() |
d2ef1c22bd | ||
![]() |
cf99591f15 | ||
![]() |
5991f3a5e2 | ||
![]() |
b121644251 | ||
![]() |
57dedb7d10 | ||
![]() |
91d99c4d77 | ||
![]() |
87d722a8bb | ||
![]() |
78f9e38ef6 | ||
![]() |
e8f8290853 | ||
![]() |
0fd13ff4dd | ||
![]() |
58d9dd4d40 | ||
![]() |
1ab83b0150 | ||
![]() |
ce553f5f1c | ||
![]() |
f088e43dce | ||
![]() |
800262d044 | ||
![]() |
9e2901b3d4 | ||
![]() |
b35dab26c8 | ||
![]() |
9a0102b257 | ||
![]() |
024059f926 | ||
![]() |
2ce70bcb0e | ||
![]() |
442c85f4ea | ||
![]() |
6a9e104b0a | ||
![]() |
ef7df44543 | ||
![]() |
a2eb0d6b3f | ||
![]() |
35c0f4bab3 | ||
![]() |
cd0ee7e84d | ||
![]() |
2ee9860581 | ||
![]() |
7ef423aa2f | ||
![]() |
ba68a75e60 | ||
![]() |
6f20abd7d6 | ||
![]() |
ffaa1494ed | ||
![]() |
57784bac1b | ||
![]() |
1291405328 | ||
![]() |
271a8b8eeb | ||
![]() |
0324ab518e | ||
![]() |
45a3e9719c | ||
![]() |
6321a10f61 | ||
![]() |
bda840986b | ||
![]() |
5aa5e4ea92 | ||
![]() |
32c98e7637 | ||
![]() |
ab57036636 | ||
![]() |
49e5f016e0 | ||
![]() |
99ad00fb86 | ||
![]() |
72ad24d050 | ||
![]() |
f94afabfbb | ||
![]() |
8be98ec12f | ||
![]() |
5742e6395e | ||
![]() |
5e25d4abca | ||
![]() |
1881da3c9e | ||
![]() |
e45af13e62 | ||
![]() |
697f9903d7 | ||
![]() |
1e2668c44b | ||
![]() |
4324fbb529 | ||
![]() |
69fb880bbf | ||
![]() |
273db55a3b | ||
![]() |
3f5e8cf577 | ||
![]() |
88206e0108 | ||
![]() |
2b2f2bed62 | ||
![]() |
c78f234f53 | ||
![]() |
385904de72 | ||
![]() |
caa8330a4a | ||
![]() |
e59fb1708b | ||
![]() |
9dc2b17d95 | ||
![]() |
ee4532a57a | ||
![]() |
2c75932d90 | ||
![]() |
70636baba3 | ||
![]() |
8b9db406a8 | ||
![]() |
e18eaa828a | ||
![]() |
12f859f2ee | ||
![]() |
df5c2b3c7a | ||
![]() |
92dad60f1d | ||
![]() |
b8f6c0417b | ||
![]() |
7473602f05 | ||
![]() |
fbf4c82ee5 | ||
![]() |
4a0c770dff | ||
![]() |
8b6fa52653 | ||
![]() |
12cac4c29e | ||
![]() |
1e4e992d9e | ||
![]() |
ede4c46a43 | ||
![]() |
992f577828 | ||
![]() |
e1784a8d41 | ||
![]() |
2202ca55e5 | ||
![]() |
051a869328 | ||
![]() |
699b665ada | ||
![]() |
bdf87e3718 | ||
![]() |
11d7b5f886 | ||
![]() |
ca256c013f | ||
![]() |
0c53f4588b | ||
![]() |
bfd7ccc79e | ||
![]() |
5b35b5937b | ||
![]() |
8499349011 | ||
![]() |
2b8cf0f308 | ||
![]() |
5e0232429e | ||
![]() |
abad049ea3 | ||
![]() |
44ec78f6cb | ||
![]() |
812032288e | ||
![]() |
946c51b77b | ||
![]() |
f9aa336f93 | ||
![]() |
43d9828355 | ||
![]() |
1f4893bdb1 | ||
![]() |
e48d3a2f68 | ||
![]() |
81c33266b7 | ||
![]() |
2faf1587e0 | ||
![]() |
f212e66726 | ||
![]() |
8585ae3988 | ||
![]() |
4bdec1c00d | ||
![]() |
6b1fb52cbf | ||
![]() |
eeb431151d | ||
![]() |
22cc9c6486 | ||
![]() |
cdd09b4066 | ||
![]() |
901110676d | ||
![]() |
b59549eb58 | ||
![]() |
f9a6291b7f | ||
![]() |
de27d57cd2 | ||
![]() |
d87c26eb2a | ||
![]() |
324d3c7d92 | ||
![]() |
25ad594682 | ||
![]() |
f0cecde9de | ||
![]() |
a61b434952 | ||
![]() |
c3df35dacb | ||
![]() |
3b83def333 | ||
![]() |
3f5fda6bd8 | ||
![]() |
21ac41f961 | ||
![]() |
591957c96e | ||
![]() |
99c099431a | ||
![]() |
81b668ae40 | ||
![]() |
8a64cac72f | ||
![]() |
8f7781ce20 | ||
![]() |
4c5f2ef1b8 | ||
![]() |
de3083f492 | ||
![]() |
2baf7d7e47 | ||
![]() |
0054787fb2 | ||
![]() |
706c8b6aa3 | ||
![]() |
8c7e5acc3c | ||
![]() |
8e8c619a30 | ||
![]() |
8212d0317a | ||
![]() |
03943a9436 | ||
![]() |
79b8fb118e | ||
![]() |
71bbf1ef10 | ||
![]() |
1bc6b49847 | ||
![]() |
873457db91 | ||
![]() |
8e3d3f928f | ||
![]() |
d4b1c839e3 | ||
![]() |
da47a1fa62 | ||
![]() |
5de7b1b072 | ||
![]() |
0f8625f851 | ||
![]() |
b397ca3c8e | ||
![]() |
8bbaa80d22 | ||
![]() |
ffeab66be3 | ||
![]() |
29245c6088 | ||
![]() |
5cd7843155 | ||
![]() |
64ba9a2f98 | ||
![]() |
de69aa6ceb | ||
![]() |
b8c51d1779 | ||
![]() |
efea419043 | ||
![]() |
9590f1a0f0 | ||
![]() |
0a5bf1359b | ||
![]() |
819176ead9 | ||
![]() |
3a6a27d56f | ||
![]() |
5ecaadb118 | ||
![]() |
f9a22ee538 | ||
![]() |
1b1bc5958c | ||
![]() |
7f504e3adc | ||
![]() |
64b08d48dc | ||
![]() |
1527f88e51 | ||
![]() |
1ae7fa0a93 | ||
![]() |
a5b09adaa3 | ||
![]() |
73bb4f108a | ||
![]() |
7e321c1339 | ||
![]() |
6d5d57d92f | ||
![]() |
ad8df22ea6 | ||
![]() |
126df7488f | ||
![]() |
235e47e230 | ||
![]() |
b72e7331f3 | ||
![]() |
64725d983c | ||
![]() |
2c4232d7ff | ||
![]() |
554fa73daf | ||
![]() |
80b7b4ff71 | ||
![]() |
bc9b6c3923 | ||
![]() |
f0533e6b7c | ||
![]() |
e63833bc5c | ||
![]() |
346b2dd7bb | ||
![]() |
7e0197ce31 | ||
![]() |
58ff26a611 | ||
![]() |
3e0c8567df | ||
![]() |
d50cadeae6 | ||
![]() |
cba67fb5df | ||
![]() |
f4f69d7a71 | ||
![]() |
d8f61c2a30 | ||
![]() |
26e9d837d8 | ||
![]() |
a3af67c4c0 | ||
![]() |
c93cef290e | ||
![]() |
68edc3ad83 | ||
![]() |
93f7a52890 | ||
![]() |
b85e6d0d56 | ||
![]() |
d584f9ece7 | ||
![]() |
7735395654 | ||
![]() |
c95811231d | ||
![]() |
9d3cdcebcb | ||
![]() |
5ef27d1806 | ||
![]() |
a5bee00bcb | ||
![]() |
092fcc9317 | ||
![]() |
e75d6b7eb4 | ||
![]() |
65bc2797a6 | ||
![]() |
92150c3054 | ||
![]() |
94b3f09270 | ||
![]() |
c5ec19cfc8 | ||
![]() |
21ef5b1fef | ||
![]() |
5d0e366e4c | ||
![]() |
cfafa22e77 | ||
![]() |
6b4507ad29 | ||
![]() |
510d5832aa | ||
![]() |
5b26a0b7ac | ||
![]() |
f0076b556d | ||
![]() |
959cadc5ba | ||
![]() |
495c156eac | ||
![]() |
033ebf7720 | ||
![]() |
5e03e38c3c | ||
![]() |
8ef7cd731a | ||
![]() |
12eb0f16e1 | ||
![]() |
fdda850e52 | ||
![]() |
b8d752bd7f | ||
![]() |
154e15008a | ||
![]() |
a132bd42a6 | ||
![]() |
8a140d7608 | ||
![]() |
9f847168ec | ||
![]() |
ef26f16389 | ||
![]() |
9737161f16 | ||
![]() |
ab3f1834a7 | ||
![]() |
fe1c16e9cd | ||
![]() |
5d0f193ff7 | ||
![]() |
4798a58e02 | ||
![]() |
f022a14091 | ||
![]() |
6a5b6eb566 | ||
![]() |
e541347e84 | ||
![]() |
df3ac38b36 | ||
![]() |
f21f9b9d7d | ||
![]() |
338041533d | ||
![]() |
af6af373a6 | ||
![]() |
486479e620 | ||
![]() |
f9471854c6 | ||
![]() |
94fe279d1d | ||
![]() |
8fbe3e8afb | ||
![]() |
717d1afc2c | ||
![]() |
e70cc58c03 | ||
![]() |
e3862929db | ||
![]() |
a6be2f6d15 | ||
![]() |
3f10692020 | ||
![]() |
4798bc4522 | ||
![]() |
6c08ac408d | ||
![]() |
65172b14fc | ||
![]() |
bbf49af5ac | ||
![]() |
65db3caad6 | ||
![]() |
1c65d386dd | ||
![]() |
01d6a9481e | ||
![]() |
796363eb5a | ||
![]() |
19be481dfc | ||
![]() |
398c18391e | ||
![]() |
e9bd7e9c55 | ||
![]() |
c83d7f8201 | ||
![]() |
5f53fa0ea0 | ||
![]() |
7a7807bed1 | ||
![]() |
cc2ea9a4f3 | ||
![]() |
551373a086 | ||
![]() |
115d2902a3 | ||
![]() |
7410373fad | ||
![]() |
d6e0360de6 | ||
![]() |
8028341b13 | ||
![]() |
85133f679a | ||
![]() |
c424c6688a | ||
![]() |
5817eafd81 | ||
![]() |
8b6245bc97 | ||
![]() |
adad63a053 | ||
![]() |
79a9ae2870 | ||
![]() |
c49806a515 | ||
![]() |
6fa3ab028a | ||
![]() |
40639065e8 | ||
![]() |
84fc9ab2cc | ||
![]() |
6a1f24af86 | ||
![]() |
390f795dc8 | ||
![]() |
4bd11fe45b | ||
![]() |
e71ff2f2ae | ||
![]() |
4dc463c32a | ||
![]() |
53cc0c9fc2 | ||
![]() |
e8b41f1b5d | ||
![]() |
f38d256f3e | ||
![]() |
630632b4a4 | ||
![]() |
84ec050527 | ||
![]() |
05d1237cb6 | ||
![]() |
2680f18e3f | ||
![]() |
92cd02fdbf | ||
![]() |
2eb0ca23ac | ||
![]() |
d942a697eb | ||
![]() |
c2811fa897 | ||
![]() |
a35fdd9a21 | ||
![]() |
91880179cb | ||
![]() |
f8d5157db3 | ||
![]() |
1b6f22b6e1 | ||
![]() |
b137356bde | ||
![]() |
b4d8ba6b8c | ||
![]() |
6c0585b30f | ||
![]() |
795caf4e83 | ||
![]() |
2c1132bac8 | ||
![]() |
18b7ad8164 | ||
![]() |
77f6a457fd | ||
![]() |
fe44ce07d4 | ||
![]() |
4ce7c1490d | ||
![]() |
e8c9451a23 | ||
![]() |
7cf6c951e8 | ||
![]() |
66a63322aa | ||
![]() |
02a8aa1f23 | ||
![]() |
cda699da02 | ||
![]() |
af7e046cb2 | ||
![]() |
85161572c1 | ||
![]() |
2b083ca3ec | ||
![]() |
5e4c65a751 | ||
![]() |
23df74bba9 | ||
![]() |
41f417cfd5 | ||
![]() |
1f82fff0d5 | ||
![]() |
f3a26d385c | ||
![]() |
1761a1900a | ||
![]() |
2a95425c30 | ||
![]() |
7c2d6950a0 | ||
![]() |
2adb980fbb | ||
![]() |
b4e65c7dae | ||
![]() |
1bcb639dd6 | ||
![]() |
f4d9f05806 | ||
![]() |
fb037eb56b | ||
![]() |
21a2ad89f2 | ||
![]() |
fc05d5dc68 | ||
![]() |
11266c42d9 | ||
![]() |
576833a40a | ||
![]() |
b1a63d49a6 | ||
![]() |
3e3817a0a8 | ||
![]() |
3869224b60 | ||
![]() |
e9d3cdeec3 | ||
![]() |
53b5e83522 | ||
![]() |
3a71d5875a | ||
![]() |
39246dbede | ||
![]() |
1a954ac3c9 | ||
![]() |
41b309803c | ||
![]() |
4a01aa697c | ||
![]() |
48d5b3ee2d | ||
![]() |
d590afc2d0 | ||
![]() |
3cde0a68aa | ||
![]() |
fe0a0e8cf7 | ||
![]() |
827533dabf | ||
![]() |
8c7253050e | ||
![]() |
d411170b49 | ||
![]() |
e954b447ff | ||
![]() |
603841077f | ||
![]() |
9c91986a77 | ||
![]() |
f24b3aef10 | ||
![]() |
4422abc0c4 | ||
![]() |
d40ab65298 | ||
![]() |
2cd4fafbe9 | ||
![]() |
0daac61d8c | ||
![]() |
6eca202fa2 | ||
![]() |
1d5616a514 | ||
![]() |
f8729ba507 | ||
![]() |
3f2dfd2a5d | ||
![]() |
80972cf738 | ||
![]() |
2412e2d057 | ||
![]() |
2ae1b64f64 | ||
![]() |
87558e15bd | ||
![]() |
aee383f947 | ||
![]() |
22a3948985 | ||
![]() |
7487122ea3 | ||
![]() |
5f50f78581 | ||
![]() |
cc71a706e1 | ||
![]() |
9eed243a8e | ||
![]() |
1d3e45a078 | ||
![]() |
b10d57786a | ||
![]() |
c2b44e5773 | ||
![]() |
5fda7d2a02 | ||
![]() |
89bb451dd8 | ||
![]() |
016f3a20fb | ||
![]() |
df1713cfa1 | ||
![]() |
bb14a6b3f1 | ||
![]() |
0898eda7a3 | ||
![]() |
90157b80b7 | ||
![]() |
028aedcd5e | ||
![]() |
ad8da667cc | ||
![]() |
57ca55901a | ||
![]() |
7479b8518e | ||
![]() |
d48fad222c | ||
![]() |
0c81547457 | ||
![]() |
5d519ab279 | ||
![]() |
02cc537182 | ||
![]() |
13956638ee | ||
![]() |
759abf2809 | ||
![]() |
fb8f2b1820 | ||
![]() |
a3ce73c537 | ||
![]() |
d21a27f61e | ||
![]() |
e077459d24 | ||
![]() |
b0a0d8bee6 | ||
![]() |
2cf98d41d6 | ||
![]() |
dd59d75d51 | ||
![]() |
d1145aff90 | ||
![]() |
95cdfde50e | ||
![]() |
645ba84182 | ||
![]() |
f6aa03a2bc | ||
![]() |
3d07c48b6d | ||
![]() |
ae1276d3e7 | ||
![]() |
007dd98afb | ||
![]() |
9d537bbfea | ||
![]() |
b639546b9d | ||
![]() |
9ce94ab4e7 | ||
![]() |
dc2f4ca575 | ||
![]() |
b02ce7473f | ||
![]() |
4fdfb5a7de | ||
![]() |
ce06f5a85c | ||
![]() |
31c5d1b216 | ||
![]() |
bfccc3aeee | ||
![]() |
3f4ef82c5e | ||
![]() |
6c6f2f5371 | ||
![]() |
7026c1458f | ||
![]() |
f131ae5e0c | ||
![]() |
dc6681b640 | ||
![]() |
2462c722a8 | ||
![]() |
fa2dd6cd14 | ||
![]() |
bc38f922ba | ||
![]() |
29ff72356a | ||
![]() |
c5a192e7b9 | ||
![]() |
5f10c814f8 | ||
![]() |
53273f679b | ||
![]() |
27cfef507e | ||
![]() |
71ee1929c2 | ||
![]() |
8f4e626dd0 | ||
![]() |
4022a5c88f | ||
![]() |
689f428ba0 | ||
![]() |
2a398b0769 | ||
![]() |
c54814ba55 | ||
![]() |
8832c250af | ||
![]() |
f2bbb2b75c | ||
![]() |
cec55d37c4 | ||
![]() |
d30f343489 | ||
![]() |
1cd2f10ffb | ||
![]() |
1efdb40a04 | ||
![]() |
07452245d6 | ||
![]() |
fa7ea2335f | ||
![]() |
1d6a12bcab | ||
![]() |
1e017301cd | ||
![]() |
15578f8457 | ||
![]() |
d914ebac16 | ||
![]() |
a595ff24fb | ||
![]() |
01f0fed13f | ||
![]() |
e08e9c922e | ||
![]() |
d8ed3a54e1 | ||
![]() |
1978a96699 | ||
![]() |
6b1d1f2164 | ||
![]() |
0ec2813118 | ||
![]() |
331f8df8c0 | ||
![]() |
c96e1e0e0d | ||
![]() |
c8d717eee1 | ||
![]() |
ef6a7efdaf | ||
![]() |
3df42f8a8e | ||
![]() |
33133f9a4a | ||
![]() |
e30e98aeff | ||
![]() |
1d6fef324c | ||
![]() |
520e6eecd1 | ||
![]() |
999511813e | ||
![]() |
64dc43c35a | ||
![]() |
9e30af648e | ||
![]() |
59646e5027 | ||
![]() |
55a3cd018e | ||
![]() |
c8ff803127 | ||
![]() |
0d3ad13763 | ||
![]() |
f6a0831fab | ||
![]() |
4666ba0eea | ||
![]() |
65d4028a4d | ||
![]() |
0ff34ecdab | ||
![]() |
f20cc2af2b | ||
![]() |
a4ca8cde26 | ||
![]() |
10e80655da | ||
![]() |
3ccb4c9d90 | ||
![]() |
4159aa7e6e | ||
![]() |
b544a21f5f | ||
![]() |
57e9fe0d0b | ||
![]() |
dec6423afc | ||
![]() |
3f5e85a62b | ||
![]() |
febffbf336 | ||
![]() |
ef3471c646 | ||
![]() |
2fe2a2c80c | ||
![]() |
715c4816f5 | ||
![]() |
c80fa8f0c7 | ||
![]() |
0b3aad8e47 | ||
![]() |
1462ac6d32 | ||
![]() |
0269cc3e32 | ||
![]() |
cbc49f1b58 | ||
![]() |
df24227d5f | ||
![]() |
9f15dc52c5 | ||
![]() |
ecdb64bd76 | ||
![]() |
c23ca6a4e3 | ||
![]() |
0efc33fa43 | ||
![]() |
3d8fb4feca | ||
![]() |
80e3b4bd2c | ||
![]() |
e2af951ffa | ||
![]() |
a3379769c0 | ||
![]() |
625fa333ea | ||
![]() |
5b08f9c1aa | ||
![]() |
cd5fc39a6e | ||
![]() |
ac14688c28 | ||
![]() |
7640998245 | ||
![]() |
a169af358f | ||
![]() |
b990514f0d | ||
![]() |
fa302c9068 | ||
![]() |
6f1d9a0592 | ||
![]() |
bd98cd9daa | ||
![]() |
50a1ec1c52 | ||
![]() |
8e1daa81ea | ||
![]() |
38d97c9383 | ||
![]() |
2a071f41a3 | ||
![]() |
ce5b30cb31 | ||
![]() |
d450353239 | ||
![]() |
4494a85ba6 | ||
![]() |
f551593ca8 | ||
![]() |
6666314227 | ||
![]() |
0c42e5041f | ||
![]() |
849af16d7a | ||
![]() |
630cca3264 | ||
![]() |
c4328fb322 | ||
![]() |
13e2fff9ea | ||
![]() |
76ac34db9c | ||
![]() |
5803e4e47b | ||
![]() |
85090e3196 | ||
![]() |
c1f08c43fd | ||
![]() |
ca67bc9e9a | ||
![]() |
f69c312116 | ||
![]() |
c01a6df6ab | ||
![]() |
bb135369ed | ||
![]() |
43ea011495 | ||
![]() |
cfe400f668 | ||
![]() |
1c2c0c207e | ||
![]() |
c9f0d0fce1 | ||
![]() |
a8e190e78a | ||
![]() |
257feaa392 | ||
![]() |
1481762085 | ||
![]() |
0e47aa13a1 | ||
![]() |
a1f3be3afd | ||
![]() |
b9fbd362d9 | ||
![]() |
6606f5725a | ||
![]() |
a6bcf4f574 | ||
![]() |
eb27b6bd76 | ||
![]() |
3b1b1ba88e | ||
![]() |
d472b1018e | ||
![]() |
ec9bd7f5a4 | ||
![]() |
d5a8b4ff6b | ||
![]() |
da21fbfec5 | ||
![]() |
b949d4a261 | ||
![]() |
5067f45a83 | ||
![]() |
c3d011b5be | ||
![]() |
302cd1b322 | ||
![]() |
d5fe78b891 | ||
![]() |
d7873c3668 | ||
![]() |
816a8405d9 | ||
![]() |
c55cb093f9 | ||
![]() |
a02e23b674 | ||
![]() |
3c8fea1b4b | ||
![]() |
295f514108 | ||
![]() |
913c81b5d9 | ||
![]() |
1f2db3a559 | ||
![]() |
114b6f30b4 | ||
![]() |
b0b7cfbaa5 | ||
![]() |
7f600ab680 | ||
![]() |
0ccdd645bc | ||
![]() |
9ace74979e | ||
![]() |
9649b7ab48 | ||
![]() |
d2d410527d | ||
![]() |
f48f922416 | ||
![]() |
377a7bb219 | ||
![]() |
d2ffe89a4d | ||
![]() |
3c0019ab86 | ||
![]() |
21636bce53 | ||
![]() |
0b3e29b453 | ||
![]() |
650c2f14e6 | ||
![]() |
25a45e1eba | ||
![]() |
1f7f41a1ab | ||
![]() |
c4b52471d7 | ||
![]() |
3554e65fda | ||
![]() |
58ad817c74 | ||
![]() |
55efa84cb8 | ||
![]() |
7c78d51856 | ||
![]() |
7df9fb3ead | ||
![]() |
4fe9ec778f | ||
![]() |
708f4d3ba2 | ||
![]() |
64cdfc8a7c | ||
![]() |
9be3b94fb8 | ||
![]() |
a348828e17 | ||
![]() |
bd626856ee | ||
![]() |
ad37acae04 | ||
![]() |
4101a01624 | ||
![]() |
c1f21d6a9e | ||
![]() |
0274593c1a | ||
![]() |
c4b0384ec6 | ||
![]() |
e8b74fb4fa | ||
![]() |
bf58427578 | ||
![]() |
d595e35d0a | ||
![]() |
199f089acc | ||
![]() |
1a62adf8c9 | ||
![]() |
c8329a9079 | ||
![]() |
1840d50c51 | ||
![]() |
1984d794bd | ||
![]() |
98e9960b8a | ||
![]() |
1b17ebe75e | ||
![]() |
615ffff3ca | ||
![]() |
7d8c54b7b9 | ||
![]() |
37cac945d7 | ||
![]() |
ed111a8863 | ||
![]() |
b6cb0e033a | ||
![]() |
8274bf6bcf | ||
![]() |
844d792a9a | ||
![]() |
fb7298cbc7 | ||
![]() |
792e73cd50 | ||
![]() |
1c4c7b5d41 | ||
![]() |
9fea419c52 | ||
![]() |
c78b5ddf0d | ||
![]() |
2b1b3095d1 | ||
![]() |
9f09db82df | ||
![]() |
a29a7f441b | ||
![]() |
99e0744cde | ||
![]() |
64cf5fce96 | ||
![]() |
aea5de6571 | ||
![]() |
9c5739619e | ||
![]() |
eea44a49a2 | ||
![]() |
ea88338da0 | ||
![]() |
857b7f7752 | ||
![]() |
9368c6496f | ||
![]() |
a801d63db5 | ||
![]() |
871e126509 | ||
![]() |
a6206de18a | ||
![]() |
8960007c0c | ||
![]() |
e019db9fdb | ||
![]() |
7bd7b9128a | ||
![]() |
de2dbe02e6 | ||
![]() |
4b12896f89 | ||
![]() |
0937e7de78 | ||
![]() |
d23c74a8be | ||
![]() |
fcaab92837 | ||
![]() |
fb335f7824 | ||
![]() |
acb0ac9333 | ||
![]() |
04ab11df63 | ||
![]() |
eed3f4f839 | ||
![]() |
73bd368b66 | ||
![]() |
6f5e3d0829 | ||
![]() |
18ce1361ef | ||
![]() |
db7b26f315 | ||
![]() |
7770b17ee7 | ||
![]() |
4a07c8cdb9 | ||
![]() |
c144ab7857 | ||
![]() |
73765194e1 | ||
![]() |
f674c88870 | ||
![]() |
6b097d5f9e | ||
![]() |
44b5e1342e | ||
![]() |
3705547f92 | ||
![]() |
545555c06c | ||
![]() |
b246201e6b | ||
![]() |
729be9aea6 | ||
![]() |
99205e09cb | ||
![]() |
0ec0680779 | ||
![]() |
1f646e2b61 | ||
![]() |
2b6f037031 | ||
![]() |
62d73cb2cf | ||
![]() |
d8c4365480 | ||
![]() |
a707767170 | ||
![]() |
b904c404bb | ||
![]() |
9ca3516d39 | ||
![]() |
58fa288158 | ||
![]() |
38f87f38c2 | ||
![]() |
42afe64eb3 | ||
![]() |
2a09efbde3 | ||
![]() |
7685bbbdf4 | ||
![]() |
da12c5512d | ||
![]() |
6b7bed5376 | ||
![]() |
30da7363a0 | ||
![]() |
748f85b33f | ||
![]() |
9190b12c2e | ||
![]() |
6d1348bb3e | ||
![]() |
3e2823bd18 | ||
![]() |
4b89c87336 | ||
![]() |
fc7438bcda | ||
![]() |
44604ef0ee | ||
![]() |
69c06f820e | ||
![]() |
dcc5fa9451 | ||
![]() |
5bcfa0af15 | ||
![]() |
748df3e75a | ||
![]() |
43a6e9526e | ||
![]() |
05d962c004 | ||
![]() |
daaf02865e | ||
![]() |
947d230e20 | ||
![]() |
adb9923f11 | ||
![]() |
28865821d5 | ||
![]() |
34ee199967 | ||
![]() |
1d5440541f | ||
![]() |
248aec6d41 | ||
![]() |
63b5368640 | ||
![]() |
15d83baed9 | ||
![]() |
1afcddd49d | ||
![]() |
9b70c8a1d1 | ||
![]() |
0c037083a9 | ||
![]() |
5d13964200 | ||
![]() |
4a697a1eb3 | ||
![]() |
35c1f8a24b | ||
![]() |
f3cab378cc | ||
![]() |
362bbc1e22 | ||
![]() |
87cf90e892 | ||
![]() |
0e30a8fd34 | ||
![]() |
6ad19f9a74 | ||
![]() |
41db66d6fc | ||
![]() |
c3897e2922 | ||
![]() |
2e1212029e | ||
![]() |
5b6559e084 | ||
![]() |
32a3153566 | ||
![]() |
b6cf4057d0 | ||
![]() |
d5968313b3 | ||
![]() |
7638e00caa | ||
![]() |
25737614cf | ||
![]() |
ffe12feafa | ||
![]() |
71c101a0fa | ||
![]() |
a00477e510 | ||
![]() |
c3b4b6e96c | ||
![]() |
ae8f210306 | ||
![]() |
139b0f4870 | ||
![]() |
8749583563 | ||
![]() |
54fa28a305 | ||
![]() |
ca5ced95d7 | ||
![]() |
5c018e302d | ||
![]() |
716f5a4878 | ||
![]() |
464c871e79 | ||
![]() |
56a8596fe9 | ||
![]() |
8ba0110b24 | ||
![]() |
75ce232c9c | ||
![]() |
602deafe0a | ||
![]() |
07fab67bb1 | ||
![]() |
6b21d0af38 | ||
![]() |
9c99c74835 | ||
![]() |
05c797f133 | ||
![]() |
894f364785 | ||
![]() |
b607828b9d | ||
![]() |
32c87e29aa | ||
![]() |
ee8aa518e5 | ||
![]() |
aebce6444e | ||
![]() |
3ee7537cc8 | ||
![]() |
7091428842 | ||
![]() |
6d79796597 | ||
![]() |
fbf0bbef5c | ||
![]() |
50bea20332 | ||
![]() |
22f4401661 | ||
![]() |
0e92f332da | ||
![]() |
7921dc7e37 | ||
![]() |
0b9f4aebc8 | ||
![]() |
2143a67c8d | ||
![]() |
3b5d81397c | ||
![]() |
af89d59508 | ||
![]() |
74f7e9b4c9 | ||
![]() |
ddac78a1dd | ||
![]() |
0591ba2589 | ||
![]() |
f602540e53 | ||
![]() |
05194dded6 | ||
![]() |
957cba4743 | ||
![]() |
2a41f5c60f | ||
![]() |
f6eab90d0b | ||
![]() |
f415c93d8b | ||
![]() |
cf8e97a71b | ||
![]() |
ac0c464e5b | ||
![]() |
4457e96f9b | ||
![]() |
ddb765f758 | ||
![]() |
cd80e17ce8 | ||
![]() |
edb77f865f | ||
![]() |
a2e3e4fced | ||
![]() |
c3431ff1af | ||
![]() |
62ebac1d4f | ||
![]() |
3f4bff91cd | ||
![]() |
fc00b7501c | ||
![]() |
2ba3adef60 | ||
![]() |
fba0b33855 | ||
![]() |
f33ba7493c | ||
![]() |
1a9f3e144e | ||
![]() |
0732a00253 | ||
![]() |
2f5ae09380 | ||
![]() |
1d0a80e362 | ||
![]() |
7e70887486 | ||
![]() |
99e619ca77 | ||
![]() |
875a5f3081 | ||
![]() |
23cac43c89 | ||
![]() |
6e44e3c729 | ||
![]() |
8a2be493cb | ||
![]() |
b5a1f8aec4 | ||
![]() |
d7b4cc8c6c | ||
![]() |
318be60fa9 | ||
![]() |
56cbe84675 | ||
![]() |
91db8c2e5d | ||
![]() |
e02ca45688 | ||
![]() |
f864d67dbc | ||
![]() |
863767bc9f | ||
![]() |
dca7968160 | ||
![]() |
2fd96adf12 | ||
![]() |
ec64c27225 | ||
![]() |
0dd355a984 | ||
![]() |
495f9835f2 | ||
![]() |
eb70c9cef1 | ||
![]() |
93c051e1a7 | ||
![]() |
e86e48703c | ||
![]() |
145a7fe255 | ||
![]() |
ba555c5a34 | ||
![]() |
b2f5e6ceb7 | ||
![]() |
5eb19f802b | ||
![]() |
23131b83cc | ||
![]() |
2ec67be1e9 | ||
![]() |
e0807d0fb3 | ||
![]() |
25c0384af3 | ||
![]() |
a10c5eb812 | ||
![]() |
5cb28ee173 | ||
![]() |
b486d160a8 | ||
![]() |
afd4517c53 | ||
![]() |
dc9461d2cc | ||
![]() |
433533050c | ||
![]() |
f9e45829b1 | ||
![]() |
d4e50f8263 | ||
![]() |
6b04025154 | ||
![]() |
17f8641ece | ||
![]() |
3780da9230 | ||
![]() |
5f6130f3d0 | ||
![]() |
a5acb4cc84 | ||
![]() |
27086258a6 | ||
![]() |
83194711c3 | ||
![]() |
d809bc6240 | ||
![]() |
51a3d39536 | ||
![]() |
c2a09a1e85 | ||
![]() |
11ea30d1ed | ||
![]() |
8f916fde3c | ||
![]() |
26aac40a50 | ||
![]() |
9f2fbc07fa | ||
![]() |
502cb1dd74 | ||
![]() |
c92df2a45b | ||
![]() |
f0b304a0c6 | ||
![]() |
9ad80e96c2 | ||
![]() |
3e53b6f96f | ||
![]() |
d18325dea7 | ||
![]() |
46c9ec665a | ||
![]() |
d77dda57c2 | ||
![]() |
133e1b134b | ||
![]() |
bdf3fafbac | ||
![]() |
a8098ce577 | ||
![]() |
807d903176 | ||
![]() |
0c546d9a05 | ||
![]() |
6939eda25d | ||
![]() |
be00cc356c | ||
![]() |
5fd61e7460 | ||
![]() |
a82ac381aa | ||
![]() |
a0500b170a | ||
![]() |
0bc7d51380 | ||
![]() |
eb86e00a79 | ||
![]() |
d33d3cae34 | ||
![]() |
e410768f7f | ||
![]() |
421b7f81fd | ||
![]() |
747f025819 | ||
![]() |
66e0f69437 | ||
![]() |
4b59c5aa07 | ||
![]() |
f7dbcd1fca | ||
![]() |
499d8aa343 | ||
![]() |
aeb7a24789 | ||
![]() |
946562e2a5 | ||
![]() |
558ec79281 | ||
![]() |
f113998db1 | ||
![]() |
f39724354c | ||
![]() |
db1dd2bf6a | ||
![]() |
36dd674d93 | ||
![]() |
55eca1c7b2 | ||
![]() |
d17795a9a9 | ||
![]() |
68d59280d8 | ||
![]() |
f8afad537f | ||
![]() |
468d82d9f7 | ||
![]() |
54245b2520 | ||
![]() |
1af49ff41d | ||
![]() |
a21d4daae0 | ||
![]() |
7825d579b4 | ||
![]() |
2e4b0128fa | ||
![]() |
a19da2b7c9 | ||
![]() |
57e79dffb1 | ||
![]() |
8c18ced1a7 | ||
![]() |
8dd8253afb | ||
![]() |
29370b8740 | ||
![]() |
4501c4f5cd | ||
![]() |
192b1a1bd1 | ||
![]() |
abc64d7e19 | ||
![]() |
6c47c82c78 | ||
![]() |
edb86a96cc | ||
![]() |
0f229274e6 | ||
![]() |
78cfcf3206 | ||
![]() |
e41f3e4131 | ||
![]() |
0170bdc737 | ||
![]() |
d38f0f35f9 | ||
![]() |
c1055478ef | ||
![]() |
88ce7d5d82 | ||
![]() |
7eec5856a3 | ||
![]() |
e357a9c813 | ||
![]() |
967b2258b9 | ||
![]() |
f5c4a78fb1 | ||
![]() |
7e2c6a3e62 | ||
![]() |
89c473aac7 | ||
![]() |
c9efab145d | ||
![]() |
89be8f9d56 | ||
![]() |
a5b0a78828 | ||
![]() |
6be213707b | ||
![]() |
0e55883f05 | ||
![]() |
033c8f432d | ||
![]() |
dc9bb23ade | ||
![]() |
629c25208d | ||
![]() |
bf6aa0132c | ||
![]() |
4dfe51aa01 | ||
![]() |
e735c69371 | ||
![]() |
ae41d2f5c1 | ||
![]() |
dc00bab703 | ||
![]() |
d06fbfc7f3 | ||
![]() |
e09d83368c | ||
![]() |
1ddcc7b3fc | ||
![]() |
db6c457d5c | ||
![]() |
1e3b3f6a5e | ||
![]() |
26c755f312 | ||
![]() |
095dbdbf59 | ||
![]() |
f9a87273bb | ||
![]() |
b6dbad7d88 | ||
![]() |
8400db5161 | ||
![]() |
2e2f6ca4de | ||
![]() |
04d063e759 | ||
![]() |
e50171cdf4 | ||
![]() |
ffd79887c1 | ||
![]() |
994023df1e | ||
![]() |
e8756d084b | ||
![]() |
919f7f5ae7 | ||
![]() |
f98f6ff9e0 | ||
![]() |
b70ea3d72a | ||
![]() |
6eba76bd26 | ||
![]() |
fee5f98406 | ||
![]() |
551552f67f | ||
![]() |
6cff923227 | ||
![]() |
1399f55ed4 | ||
![]() |
79fdc2ef78 | ||
![]() |
f4a12a2a3b | ||
![]() |
edf7bf23e3 | ||
![]() |
1887a32ca2 | ||
![]() |
a1405af086 | ||
![]() |
de487d56be | ||
![]() |
5fd9819f5f | ||
![]() |
b86255479c | ||
![]() |
67218b0d19 | ||
![]() |
cdad22386e | ||
![]() |
cb6a705473 | ||
![]() |
e0523db53d | ||
![]() |
c49bca76d7 | ||
![]() |
3d598445e3 | ||
![]() |
949c597508 | ||
![]() |
ca32702aa0 | ||
![]() |
0ccc5d3faa | ||
![]() |
4c8f4dcdfc | ||
![]() |
d64fa185db | ||
![]() |
cd33dc926f | ||
![]() |
fd63105282 | ||
![]() |
dda7fcf987 | ||
![]() |
b597a36454 | ||
![]() |
b2636aa4c1 | ||
![]() |
b3fe37dd3d | ||
![]() |
d62aeb54b9 | ||
![]() |
dab578a096 | ||
![]() |
42ff8d51c0 | ||
![]() |
68fe393de4 | ||
![]() |
4493457cfa | ||
![]() |
5b49d3629c | ||
![]() |
244330f96e | ||
![]() |
7f002b3158 | ||
![]() |
d3d3a58f6e | ||
![]() |
bec8bb64e1 | ||
![]() |
580a711cb1 | ||
![]() |
23de4dd79e | ||
![]() |
21eb34fec7 | ||
![]() |
4248a8dadd | ||
![]() |
5ac0392c81 | ||
![]() |
10e4f45ac0 | ||
![]() |
52531187b6 | ||
![]() |
91238492d9 | ||
![]() |
cd048ea1e4 | ||
![]() |
72a1732d4f | ||
![]() |
3c4d46ec33 | ||
![]() |
ef8b444526 | ||
![]() |
cb5c20b678 | ||
![]() |
9a076a7d97 | ||
![]() |
b3bc9aa5a8 | ||
![]() |
ae0bd1f240 | ||
![]() |
2f08be65dd | ||
![]() |
1276f80f98 | ||
![]() |
dc747fad0b | ||
![]() |
bbbf496e55 | ||
![]() |
0be0639df2 | ||
![]() |
aa41235bb1 | ||
![]() |
67e0819a58 | ||
![]() |
c34cb47590 | ||
![]() |
3bad978a1a | ||
![]() |
eb9a8113a3 | ||
![]() |
bceeafc8fd | ||
![]() |
7ce64c3b69 | ||
![]() |
e567a01fec | ||
![]() |
41ad317a6d | ||
![]() |
9ca7b53525 | ||
![]() |
63dc8d573e | ||
![]() |
5d97bb6ee7 | ||
![]() |
9d99e7dd5b | ||
![]() |
1a8785d923 | ||
![]() |
b8ff60572a | ||
![]() |
e197f1da4f | ||
![]() |
2d528c3c8d | ||
![]() |
dc20615b37 | ||
![]() |
047ac39af8 | ||
![]() |
4c1b8b2c6f | ||
![]() |
861ed0de56 | ||
![]() |
97864349cc | ||
![]() |
e8fd10468f | ||
![]() |
332e9e8a34 | ||
![]() |
cf1a09c9a7 | ||
![]() |
146884c135 | ||
![]() |
b875ca4ec9 | ||
![]() |
9570205b8a | ||
![]() |
947221b4fb | ||
![]() |
0579065c4c | ||
![]() |
df27520950 | ||
![]() |
aacefe5192 | ||
![]() |
62a7e09e0d | ||
![]() |
a6d0384463 | ||
![]() |
dc81749d44 | ||
![]() |
11423e276a | ||
![]() |
4ca664384d | ||
![]() |
287ddc84da | ||
![]() |
5c80a1463b | ||
![]() |
943166ff54 | ||
![]() |
ff142d955f | ||
![]() |
8d2fbb7eb6 | ||
![]() |
d91fcfedd7 | ||
![]() |
ffc4ad7fd3 | ||
![]() |
fe8f993a09 | ||
![]() |
2e0424da1b | ||
![]() |
4b24a4110d | ||
![]() |
d732f1fc51 | ||
![]() |
c0cc07ca93 | ||
![]() |
32af1f92eb | ||
![]() |
d2e42fb3ee | ||
![]() |
96f78dabcc | ||
![]() |
7b58635b7a | ||
![]() |
a638b6d4f2 | ||
![]() |
9291b82212 | ||
![]() |
c338ddedc1 | ||
![]() |
02d809987a | ||
![]() |
2779bfdf01 | ||
![]() |
1cfebe3f24 | ||
![]() |
c08ed0777d | ||
![]() |
7378b389fe | ||
![]() |
68c7f58148 | ||
![]() |
9e70dd7aea | ||
![]() |
9afd1a7e2a | ||
![]() |
67893bd836 | ||
![]() |
c9d759856f | ||
![]() |
52575a7a8c | ||
![]() |
cbd74dfa4b | ||
![]() |
cc1606c4f0 | ||
![]() |
34a3d09c10 | ||
![]() |
53b7ad097a | ||
![]() |
c06825e675 | ||
![]() |
9913f90294 | ||
![]() |
7c47f7c73b | ||
![]() |
8cacec6c93 | ||
![]() |
600279ff2b | ||
![]() |
8b678034a2 | ||
![]() |
b846e12cee | ||
![]() |
c739918a1d | ||
![]() |
ca369ed8d1 | ||
![]() |
b3ebd57893 | ||
![]() |
b88fd4b669 | ||
![]() |
acf5d5e908 | ||
![]() |
b04c6f55ab | ||
![]() |
7aac904d3c | ||
![]() |
77f2925eb3 | ||
![]() |
a90bf53050 | ||
![]() |
e1a47955c4 | ||
![]() |
1c64281504 | ||
![]() |
4f767a442f | ||
![]() |
d8196abb41 | ||
![]() |
efd18a5221 | ||
![]() |
c13002a7cf | ||
![]() |
16297b41e4 | ||
![]() |
9efee1f3fd | ||
![]() |
97801c76d1 | ||
![]() |
f0c98a8d8a | ||
![]() |
9a68dda690 | ||
![]() |
9703f07095 | ||
![]() |
e3348774d5 | ||
![]() |
5b6ee8d932 | ||
![]() |
c226e12e98 | ||
![]() |
02a2c19bf6 | ||
![]() |
7d3e9bd163 | ||
![]() |
5e68bddd6b | ||
![]() |
1d3b96559f | ||
![]() |
65350fb284 | ||
![]() |
882dfc4741 | ||
![]() |
83671bae11 | ||
![]() |
f38613bb8d | ||
![]() |
43daa3c38f | ||
![]() |
f3982278e6 | ||
![]() |
d214e31e38 | ||
![]() |
ce198b356f | ||
![]() |
aa3e354dd5 | ||
![]() |
cd50c3984e | ||
![]() |
7780bb0835 | ||
![]() |
5e41163c09 | ||
![]() |
e2dbf474d8 | ||
![]() |
9bc2d17db3 | ||
![]() |
f09e7dd6b3 | ||
![]() |
171768b257 | ||
![]() |
2ba75947e3 | ||
![]() |
6ec8ea5fe1 | ||
![]() |
d6d4099b08 | ||
![]() |
7d20c7c120 | ||
![]() |
a422c6c644 | ||
![]() |
9737e2d4ed | ||
![]() |
a3d7a1a2ed | ||
![]() |
2290b36a60 | ||
![]() |
758db5b001 | ||
![]() |
399f853aa9 | ||
![]() |
9cd1c62ffa | ||
![]() |
e3d9a2c985 | ||
![]() |
498f5148a1 | ||
![]() |
8640390354 | ||
![]() |
56e6944f92 | ||
![]() |
e47c2094dd | ||
![]() |
1adda1a865 | ||
![]() |
356396f6c3 | ||
![]() |
5ef6847c83 | ||
![]() |
155170e061 | ||
![]() |
13685e4388 | ||
![]() |
0be3deac04 | ||
![]() |
3729e3401a | ||
![]() |
de5476b910 | ||
![]() |
ba2542e0c2 | ||
![]() |
6efab9994b | ||
![]() |
6984822651 |
1
.github/CODEOWNERS
vendored
Normal file
1
.github/CODEOWNERS
vendored
Normal file
@@ -0,0 +1 @@
|
||||
* @gofiber/maintainers
|
143
.github/dependabot.yml
vendored
143
.github/dependabot.yml
vendored
@@ -1,123 +1,28 @@
|
||||
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||
# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#directories
|
||||
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: daily
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
- package-ecosystem: "gomod"
|
||||
directory: "/" # Location of package manifests
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
- package-ecosystem: "gomod"
|
||||
directory: "/arangodb/" # Location of package manifests
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
- package-ecosystem: "gomod"
|
||||
directory: "/badger/" # Location of package manifests
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
- package-ecosystem: "gomod"
|
||||
directory: "/couchbase/" # Location of package manifests
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
- package-ecosystem: "gomod"
|
||||
directory: "/etcd/" # Location of package manifests
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
- package-ecosystem: "gomod"
|
||||
directory: "/pebble/" # Location of package manifests
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
- package-ecosystem: "gomod"
|
||||
directory: "/dynamodb/" # Location of package manifests
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
- package-ecosystem: "gomod"
|
||||
directory: "/memcache/" # Location of package manifests
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
- package-ecosystem: "gomod"
|
||||
directory: "/memory/" # Location of package manifests
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
- package-ecosystem: "gomod"
|
||||
directory: "/mongodb/" # Location of package manifests
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
- package-ecosystem: "gomod"
|
||||
directory: "/mysql/" # Location of package manifests
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
- package-ecosystem: "gomod"
|
||||
directory: "/postgres/" # Location of package manifests
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
- package-ecosystem: "gomod"
|
||||
directory: "/redis/" # Location of package manifests
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
- package-ecosystem: "gomod"
|
||||
directory: "/sqlite3/" # Location of package manifests
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
- package-ecosystem: "gomod"
|
||||
directory: "/ristretto/" # Location of package manifests
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
- package-ecosystem: "gomod"
|
||||
directory: "/s3/" # Location of package manifests
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
- package-ecosystem: "gomod"
|
||||
directory: "/bbolt/" # Location of package manifests
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
- package-ecosystem: "gomod"
|
||||
directory: "/azureblob/" # Location of package manifests
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
directory: "/mssql/" # Location of package manifests
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
- package-ecosystem: "github-actions"
|
||||
open-pull-requests-limit: 15
|
||||
directory: "/"
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
- package-ecosystem: "gomod"
|
||||
open-pull-requests-limit: 15
|
||||
directories:
|
||||
- "**/*"
|
||||
labels:
|
||||
- "🤖 Dependencies"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
groups:
|
||||
testcontainers-modules:
|
||||
patterns:
|
||||
- "github.com/testcontainers/testcontainers-go"
|
||||
- "github.com/testcontainers/testcontainers-go/modules/**"
|
||||
utils-modules:
|
||||
patterns:
|
||||
- "github.com/gofiber/utils/v2"
|
||||
|
43
.github/release-drafter-azureblob.yml
vendored
43
.github/release-drafter-azureblob.yml
vendored
@@ -1,43 +0,0 @@
|
||||
name-template: 'Azure Blob - v$RESOLVED_VERSION'
|
||||
tag-template: 'azureblob/v$RESOLVED_VERSION'
|
||||
tag-prefix: azureblob/v
|
||||
include-paths:
|
||||
- azureblob
|
||||
categories:
|
||||
- title: '🚀 New'
|
||||
labels:
|
||||
- '✏️ Feature'
|
||||
- title: '🧹 Updates'
|
||||
labels:
|
||||
- '🧹 Updates'
|
||||
- '🤖 Dependencies'
|
||||
- title: '🐛 Fixes'
|
||||
labels:
|
||||
- '☢️ Bug'
|
||||
- title: '📚 Documentation'
|
||||
labels:
|
||||
- '📒 Documentation'
|
||||
change-template: '- $TITLE (#$NUMBER)'
|
||||
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
|
||||
version-resolver:
|
||||
major:
|
||||
labels:
|
||||
- 'major'
|
||||
minor:
|
||||
labels:
|
||||
- 'minor'
|
||||
- '✏️ Feature'
|
||||
patch:
|
||||
labels:
|
||||
- 'patch'
|
||||
- '📒 Documentation'
|
||||
- '☢️ Bug'
|
||||
- '🤖 Dependencies'
|
||||
- '🧹 Updates'
|
||||
default: patch
|
||||
template: |
|
||||
$CHANGES
|
||||
|
||||
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...azureblob/v$RESOLVED_VERSION
|
||||
|
||||
Thank you $CONTRIBUTORS for making this update possible.
|
43
.github/release-drafter-badger.yml
vendored
43
.github/release-drafter-badger.yml
vendored
@@ -1,43 +0,0 @@
|
||||
name-template: 'Badger - v$RESOLVED_VERSION'
|
||||
tag-template: 'badger/v$RESOLVED_VERSION'
|
||||
tag-prefix: badger/v
|
||||
include-paths:
|
||||
- badger
|
||||
categories:
|
||||
- title: '🚀 New'
|
||||
labels:
|
||||
- '✏️ Feature'
|
||||
- title: '🧹 Updates'
|
||||
labels:
|
||||
- '🧹 Updates'
|
||||
- '🤖 Dependencies'
|
||||
- title: '🐛 Fixes'
|
||||
labels:
|
||||
- '☢️ Bug'
|
||||
- title: '📚 Documentation'
|
||||
labels:
|
||||
- '📒 Documentation'
|
||||
change-template: '- $TITLE (#$NUMBER)'
|
||||
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
|
||||
version-resolver:
|
||||
major:
|
||||
labels:
|
||||
- 'major'
|
||||
minor:
|
||||
labels:
|
||||
- 'minor'
|
||||
- '✏️ Feature'
|
||||
patch:
|
||||
labels:
|
||||
- 'patch'
|
||||
- '📒 Documentation'
|
||||
- '☢️ Bug'
|
||||
- '🤖 Dependencies'
|
||||
- '🧹 Updates'
|
||||
default: patch
|
||||
template: |
|
||||
$CHANGES
|
||||
|
||||
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...badger/v$RESOLVED_VERSION
|
||||
|
||||
Thank you $CONTRIBUTORS for making this update possible.
|
43
.github/release-drafter-bbolt.yml
vendored
43
.github/release-drafter-bbolt.yml
vendored
@@ -1,43 +0,0 @@
|
||||
name-template: 'Bbolt - v$RESOLVED_VERSION'
|
||||
tag-template: 'bbolt/v$RESOLVED_VERSION'
|
||||
tag-prefix: bbolt/v
|
||||
include-paths:
|
||||
- bbolt
|
||||
categories:
|
||||
- title: '🚀 New'
|
||||
labels:
|
||||
- '✏️ Feature'
|
||||
- title: '🧹 Updates'
|
||||
labels:
|
||||
- '🧹 Updates'
|
||||
- '🤖 Dependencies'
|
||||
- title: '🐛 Fixes'
|
||||
labels:
|
||||
- '☢️ Bug'
|
||||
- title: '📚 Documentation'
|
||||
labels:
|
||||
- '📒 Documentation'
|
||||
change-template: '- $TITLE (#$NUMBER)'
|
||||
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
|
||||
version-resolver:
|
||||
major:
|
||||
labels:
|
||||
- 'major'
|
||||
minor:
|
||||
labels:
|
||||
- 'minor'
|
||||
- '✏️ Feature'
|
||||
patch:
|
||||
labels:
|
||||
- 'patch'
|
||||
- '📒 Documentation'
|
||||
- '☢️ Bug'
|
||||
- '🤖 Dependencies'
|
||||
- '🧹 Updates'
|
||||
default: patch
|
||||
template: |
|
||||
$CHANGES
|
||||
|
||||
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...bbolt/v$RESOLVED_VERSION
|
||||
|
||||
Thank you $CONTRIBUTORS for making this update possible.
|
43
.github/release-drafter-couchbase.yml
vendored
43
.github/release-drafter-couchbase.yml
vendored
@@ -1,43 +0,0 @@
|
||||
name-template: 'Couchbase - v$RESOLVED_VERSION'
|
||||
tag-template: 'couchbase/v$RESOLVED_VERSION'
|
||||
tag-prefix: couchbase/v
|
||||
include-paths:
|
||||
- couchbase
|
||||
categories:
|
||||
- title: '🚀 New'
|
||||
labels:
|
||||
- '✏️ Feature'
|
||||
- title: '🧹 Updates'
|
||||
labels:
|
||||
- '🧹 Updates'
|
||||
- '🤖 Dependencies'
|
||||
- title: '🐛 Fixes'
|
||||
labels:
|
||||
- '☢️ Bug'
|
||||
- title: '📚 Documentation'
|
||||
labels:
|
||||
- '📒 Documentation'
|
||||
change-template: '- $TITLE (#$NUMBER)'
|
||||
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
|
||||
version-resolver:
|
||||
major:
|
||||
labels:
|
||||
- 'major'
|
||||
minor:
|
||||
labels:
|
||||
- 'minor'
|
||||
- '✏️ Feature'
|
||||
patch:
|
||||
labels:
|
||||
- 'patch'
|
||||
- '📒 Documentation'
|
||||
- '☢️ Bug'
|
||||
- '🤖 Dependencies'
|
||||
- '🧹 Updates'
|
||||
default: patch
|
||||
template: |
|
||||
$CHANGES
|
||||
|
||||
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...couchbase/v$RESOLVED_VERSION
|
||||
|
||||
Thank you $CONTRIBUTORS for making this update possible.
|
43
.github/release-drafter-dynamodb.yml
vendored
43
.github/release-drafter-dynamodb.yml
vendored
@@ -1,43 +0,0 @@
|
||||
name-template: 'DynamoDB - v$RESOLVED_VERSION'
|
||||
tag-template: 'dynamodb/v$RESOLVED_VERSION'
|
||||
tag-prefix: dynamodb/v
|
||||
include-paths:
|
||||
- dynamodb
|
||||
categories:
|
||||
- title: '🚀 New'
|
||||
labels:
|
||||
- '✏️ Feature'
|
||||
- title: '🧹 Updates'
|
||||
labels:
|
||||
- '🧹 Updates'
|
||||
- '🤖 Dependencies'
|
||||
- title: '🐛 Fixes'
|
||||
labels:
|
||||
- '☢️ Bug'
|
||||
- title: '📚 Documentation'
|
||||
labels:
|
||||
- '📒 Documentation'
|
||||
change-template: '- $TITLE (#$NUMBER)'
|
||||
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
|
||||
version-resolver:
|
||||
major:
|
||||
labels:
|
||||
- 'major'
|
||||
minor:
|
||||
labels:
|
||||
- 'minor'
|
||||
- '✏️ Feature'
|
||||
patch:
|
||||
labels:
|
||||
- 'patch'
|
||||
- '📒 Documentation'
|
||||
- '☢️ Bug'
|
||||
- '🤖 Dependencies'
|
||||
- '🧹 Updates'
|
||||
default: patch
|
||||
template: |
|
||||
$CHANGES
|
||||
|
||||
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...dynamodb/v$RESOLVED_VERSION
|
||||
|
||||
Thank you $CONTRIBUTORS for making this update possible.
|
43
.github/release-drafter-etcd.yml
vendored
43
.github/release-drafter-etcd.yml
vendored
@@ -1,43 +0,0 @@
|
||||
name-template: 'Etcd - v$RESOLVED_VERSION'
|
||||
tag-template: 'etcd/v$RESOLVED_VERSION'
|
||||
tag-prefix: etcd/v
|
||||
include-paths:
|
||||
- etcd
|
||||
categories:
|
||||
- title: '🚀 New'
|
||||
labels:
|
||||
- '✏️ Feature'
|
||||
- title: '🧹 Updates'
|
||||
labels:
|
||||
- '🧹 Updates'
|
||||
- '🤖 Dependencies'
|
||||
- title: '🐛 Fixes'
|
||||
labels:
|
||||
- '☢️ Bug'
|
||||
- title: '📚 Documentation'
|
||||
labels:
|
||||
- '📒 Documentation'
|
||||
change-template: '- $TITLE (#$NUMBER)'
|
||||
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
|
||||
version-resolver:
|
||||
major:
|
||||
labels:
|
||||
- 'major'
|
||||
minor:
|
||||
labels:
|
||||
- 'minor'
|
||||
- '✏️ Feature'
|
||||
patch:
|
||||
labels:
|
||||
- 'patch'
|
||||
- '📒 Documentation'
|
||||
- '☢️ Bug'
|
||||
- '🤖 Dependencies'
|
||||
- '🧹 Updates'
|
||||
default: patch
|
||||
template: |
|
||||
$CHANGES
|
||||
|
||||
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...etcd/v$RESOLVED_VERSION
|
||||
|
||||
Thank you $CONTRIBUTORS for making this update possible.
|
43
.github/release-drafter-memcache.yml
vendored
43
.github/release-drafter-memcache.yml
vendored
@@ -1,43 +0,0 @@
|
||||
name-template: 'Memcache - v$RESOLVED_VERSION'
|
||||
tag-template: 'memcache/v$RESOLVED_VERSION'
|
||||
tag-prefix: memcache/v
|
||||
include-paths:
|
||||
- memcache
|
||||
categories:
|
||||
- title: '🚀 New'
|
||||
labels:
|
||||
- '✏️ Feature'
|
||||
- title: '🧹 Updates'
|
||||
labels:
|
||||
- '🧹 Updates'
|
||||
- '🤖 Dependencies'
|
||||
- title: '🐛 Fixes'
|
||||
labels:
|
||||
- '☢️ Bug'
|
||||
- title: '📚 Documentation'
|
||||
labels:
|
||||
- '📒 Documentation'
|
||||
change-template: '- $TITLE (#$NUMBER)'
|
||||
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
|
||||
version-resolver:
|
||||
major:
|
||||
labels:
|
||||
- 'major'
|
||||
minor:
|
||||
labels:
|
||||
- 'minor'
|
||||
- '✏️ Feature'
|
||||
patch:
|
||||
labels:
|
||||
- 'patch'
|
||||
- '📒 Documentation'
|
||||
- '☢️ Bug'
|
||||
- '🤖 Dependencies'
|
||||
- '🧹 Updates'
|
||||
default: patch
|
||||
template: |
|
||||
$CHANGES
|
||||
|
||||
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...memcache/v$RESOLVED_VERSION
|
||||
|
||||
Thank you $CONTRIBUTORS for making this update possible.
|
43
.github/release-drafter-memory.yml
vendored
43
.github/release-drafter-memory.yml
vendored
@@ -1,43 +0,0 @@
|
||||
name-template: 'Memory - v$RESOLVED_VERSION'
|
||||
tag-template: 'memory/v$RESOLVED_VERSION'
|
||||
tag-prefix: memory/v
|
||||
include-paths:
|
||||
- memory
|
||||
categories:
|
||||
- title: '🚀 New'
|
||||
labels:
|
||||
- '✏️ Feature'
|
||||
- title: '🧹 Updates'
|
||||
labels:
|
||||
- '🧹 Updates'
|
||||
- '🤖 Dependencies'
|
||||
- title: '🐛 Fixes'
|
||||
labels:
|
||||
- '☢️ Bug'
|
||||
- title: '📚 Documentation'
|
||||
labels:
|
||||
- '📒 Documentation'
|
||||
change-template: '- $TITLE (#$NUMBER)'
|
||||
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
|
||||
version-resolver:
|
||||
major:
|
||||
labels:
|
||||
- 'major'
|
||||
minor:
|
||||
labels:
|
||||
- 'minor'
|
||||
- '✏️ Feature'
|
||||
patch:
|
||||
labels:
|
||||
- 'patch'
|
||||
- '📒 Documentation'
|
||||
- '☢️ Bug'
|
||||
- '🤖 Dependencies'
|
||||
- '🧹 Updates'
|
||||
default: patch
|
||||
template: |
|
||||
$CHANGES
|
||||
|
||||
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...memory/v$RESOLVED_VERSION
|
||||
|
||||
Thank you $CONTRIBUTORS for making this update possible.
|
43
.github/release-drafter-mongodb.yml
vendored
43
.github/release-drafter-mongodb.yml
vendored
@@ -1,43 +0,0 @@
|
||||
name-template: 'MongoDB - v$RESOLVED_VERSION'
|
||||
tag-template: 'mongodb/v$RESOLVED_VERSION'
|
||||
tag-prefix: mongodb/v
|
||||
include-paths:
|
||||
- mongodb
|
||||
categories:
|
||||
- title: '🚀 New'
|
||||
labels:
|
||||
- '✏️ Feature'
|
||||
- title: '🧹 Updates'
|
||||
labels:
|
||||
- '🧹 Updates'
|
||||
- '🤖 Dependencies'
|
||||
- title: '🐛 Fixes'
|
||||
labels:
|
||||
- '☢️ Bug'
|
||||
- title: '📚 Documentation'
|
||||
labels:
|
||||
- '📒 Documentation'
|
||||
change-template: '- $TITLE (#$NUMBER)'
|
||||
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
|
||||
version-resolver:
|
||||
major:
|
||||
labels:
|
||||
- 'major'
|
||||
minor:
|
||||
labels:
|
||||
- 'minor'
|
||||
- '✏️ Feature'
|
||||
patch:
|
||||
labels:
|
||||
- 'patch'
|
||||
- '📒 Documentation'
|
||||
- '☢️ Bug'
|
||||
- '🤖 Dependencies'
|
||||
- '🧹 Updates'
|
||||
default: patch
|
||||
template: |
|
||||
$CHANGES
|
||||
|
||||
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...mongodb/v$RESOLVED_VERSION
|
||||
|
||||
Thank you $CONTRIBUTORS for making this update possible.
|
43
.github/release-drafter-mssql.yml
vendored
43
.github/release-drafter-mssql.yml
vendored
@@ -1,43 +0,0 @@
|
||||
name-template: 'MSSQL - v$RESOLVED_VERSION'
|
||||
tag-template: 'mssql/v$RESOLVED_VERSION'
|
||||
tag-prefix: mssql/v
|
||||
include-paths:
|
||||
- mssql
|
||||
categories:
|
||||
- title: '🚀 New'
|
||||
labels:
|
||||
- '✏️ Feature'
|
||||
- title: '🧹 Updates'
|
||||
labels:
|
||||
- '🧹 Updates'
|
||||
- '🤖 Dependencies'
|
||||
- title: '🐛 Fixes'
|
||||
labels:
|
||||
- '☢️ Bug'
|
||||
- title: '📚 Documentation'
|
||||
labels:
|
||||
- '📒 Documentation'
|
||||
change-template: '- $TITLE (#$NUMBER)'
|
||||
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
|
||||
version-resolver:
|
||||
major:
|
||||
labels:
|
||||
- 'major'
|
||||
minor:
|
||||
labels:
|
||||
- 'minor'
|
||||
- '✏️ Feature'
|
||||
patch:
|
||||
labels:
|
||||
- 'patch'
|
||||
- '📒 Documentation'
|
||||
- '☢️ Bug'
|
||||
- '🤖 Dependencies'
|
||||
- '🧹 Updates'
|
||||
default: patch
|
||||
template: |
|
||||
$CHANGES
|
||||
|
||||
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...mssql/v$RESOLVED_VERSION
|
||||
|
||||
Thank you $CONTRIBUTORS for making this update possible.
|
43
.github/release-drafter-mysql.yml
vendored
43
.github/release-drafter-mysql.yml
vendored
@@ -1,43 +0,0 @@
|
||||
name-template: 'MySQL - v$RESOLVED_VERSION'
|
||||
tag-template: 'mysql/v$RESOLVED_VERSION'
|
||||
tag-prefix: mysql/v
|
||||
include-paths:
|
||||
- mysql
|
||||
categories:
|
||||
- title: '🚀 New'
|
||||
labels:
|
||||
- '✏️ Feature'
|
||||
- title: '🧹 Updates'
|
||||
labels:
|
||||
- '🧹 Updates'
|
||||
- '🤖 Dependencies'
|
||||
- title: '🐛 Fixes'
|
||||
labels:
|
||||
- '☢️ Bug'
|
||||
- title: '📚 Documentation'
|
||||
labels:
|
||||
- '📒 Documentation'
|
||||
change-template: '- $TITLE (#$NUMBER)'
|
||||
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
|
||||
version-resolver:
|
||||
major:
|
||||
labels:
|
||||
- 'major'
|
||||
minor:
|
||||
labels:
|
||||
- 'minor'
|
||||
- '✏️ Feature'
|
||||
patch:
|
||||
labels:
|
||||
- 'patch'
|
||||
- '📒 Documentation'
|
||||
- '☢️ Bug'
|
||||
- '🤖 Dependencies'
|
||||
- '🧹 Updates'
|
||||
default: patch
|
||||
template: |
|
||||
$CHANGES
|
||||
|
||||
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...mysql/v$RESOLVED_VERSION
|
||||
|
||||
Thank you $CONTRIBUTORS for making this update possible.
|
43
.github/release-drafter-pebble.yml
vendored
43
.github/release-drafter-pebble.yml
vendored
@@ -1,43 +0,0 @@
|
||||
name-template: "Pebble - v$RESOLVED_VERSION"
|
||||
tag-template: "pebble/v$RESOLVED_VERSION"
|
||||
tag-prefix: pebble/v
|
||||
include-paths:
|
||||
- pebble
|
||||
categories:
|
||||
- title: "🚀 New"
|
||||
labels:
|
||||
- "✏️ Feature"
|
||||
- title: "🧹 Updates"
|
||||
labels:
|
||||
- "🧹 Updates"
|
||||
- "🤖 Dependencies"
|
||||
- title: "🐛 Fixes"
|
||||
labels:
|
||||
- "☢️ Bug"
|
||||
- title: "📚 Documentation"
|
||||
labels:
|
||||
- "📒 Documentation"
|
||||
change-template: "- $TITLE (#$NUMBER)"
|
||||
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
|
||||
version-resolver:
|
||||
major:
|
||||
labels:
|
||||
- "major"
|
||||
minor:
|
||||
labels:
|
||||
- "minor"
|
||||
- "✏️ Feature"
|
||||
patch:
|
||||
labels:
|
||||
- "patch"
|
||||
- "📒 Documentation"
|
||||
- "☢️ Bug"
|
||||
- "🤖 Dependencies"
|
||||
- "🧹 Updates"
|
||||
default: patch
|
||||
template: |
|
||||
$CHANGES
|
||||
|
||||
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...pebble/v$RESOLVED_VERSION
|
||||
|
||||
Thank you $CONTRIBUTORS for making this update possible.
|
43
.github/release-drafter-postgres.yml
vendored
43
.github/release-drafter-postgres.yml
vendored
@@ -1,43 +0,0 @@
|
||||
name-template: 'Postgres - v$RESOLVED_VERSION'
|
||||
tag-template: 'postgres/v$RESOLVED_VERSION'
|
||||
tag-prefix: postgres/v
|
||||
include-paths:
|
||||
- postgres
|
||||
categories:
|
||||
- title: '🚀 New'
|
||||
labels:
|
||||
- '✏️ Feature'
|
||||
- title: '🧹 Updates'
|
||||
labels:
|
||||
- '🧹 Updates'
|
||||
- '🤖 Dependencies'
|
||||
- title: '🐛 Fixes'
|
||||
labels:
|
||||
- '☢️ Bug'
|
||||
- title: '📚 Documentation'
|
||||
labels:
|
||||
- '📒 Documentation'
|
||||
change-template: '- $TITLE (#$NUMBER)'
|
||||
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
|
||||
version-resolver:
|
||||
major:
|
||||
labels:
|
||||
- 'major'
|
||||
minor:
|
||||
labels:
|
||||
- 'minor'
|
||||
- '✏️ Feature'
|
||||
patch:
|
||||
labels:
|
||||
- 'patch'
|
||||
- '📒 Documentation'
|
||||
- '☢️ Bug'
|
||||
- '🤖 Dependencies'
|
||||
- '🧹 Updates'
|
||||
default: patch
|
||||
template: |
|
||||
$CHANGES
|
||||
|
||||
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...postgres/v$RESOLVED_VERSION
|
||||
|
||||
Thank you $CONTRIBUTORS for making this update possible.
|
43
.github/release-drafter-redis.yml
vendored
43
.github/release-drafter-redis.yml
vendored
@@ -1,43 +0,0 @@
|
||||
name-template: 'Redis - v$RESOLVED_VERSION'
|
||||
tag-template: 'redis/v$RESOLVED_VERSION'
|
||||
tag-prefix: redis/v
|
||||
include-paths:
|
||||
- redis
|
||||
categories:
|
||||
- title: '🚀 New'
|
||||
labels:
|
||||
- '✏️ Feature'
|
||||
- title: '🧹 Updates'
|
||||
labels:
|
||||
- '🧹 Updates'
|
||||
- '🤖 Dependencies'
|
||||
- title: '🐛 Fixes'
|
||||
labels:
|
||||
- '☢️ Bug'
|
||||
- title: '📚 Documentation'
|
||||
labels:
|
||||
- '📒 Documentation'
|
||||
change-template: '- $TITLE (#$NUMBER)'
|
||||
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
|
||||
version-resolver:
|
||||
major:
|
||||
labels:
|
||||
- 'major'
|
||||
minor:
|
||||
labels:
|
||||
- 'minor'
|
||||
- '✏️ Feature'
|
||||
patch:
|
||||
labels:
|
||||
- 'patch'
|
||||
- '📒 Documentation'
|
||||
- '☢️ Bug'
|
||||
- '🤖 Dependencies'
|
||||
- '🧹 Updates'
|
||||
default: patch
|
||||
template: |
|
||||
$CHANGES
|
||||
|
||||
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...redis/v$RESOLVED_VERSION
|
||||
|
||||
Thank you $CONTRIBUTORS for making this update possible.
|
43
.github/release-drafter-ristretto.yml
vendored
43
.github/release-drafter-ristretto.yml
vendored
@@ -1,43 +0,0 @@
|
||||
name-template: 'Ristretto - v$RESOLVED_VERSION'
|
||||
tag-template: 'ristretto/v$RESOLVED_VERSION'
|
||||
tag-prefix: ristretto/v
|
||||
include-paths:
|
||||
- ristretto
|
||||
categories:
|
||||
- title: '🚀 New'
|
||||
labels:
|
||||
- '✏️ Feature'
|
||||
- title: '🧹 Updates'
|
||||
labels:
|
||||
- '🧹 Updates'
|
||||
- '🤖 Dependencies'
|
||||
- title: '🐛 Fixes'
|
||||
labels:
|
||||
- '☢️ Bug'
|
||||
- title: '📚 Documentation'
|
||||
labels:
|
||||
- '📒 Documentation'
|
||||
change-template: '- $TITLE (#$NUMBER)'
|
||||
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
|
||||
version-resolver:
|
||||
major:
|
||||
labels:
|
||||
- 'major'
|
||||
minor:
|
||||
labels:
|
||||
- 'minor'
|
||||
- '✏️ Feature'
|
||||
patch:
|
||||
labels:
|
||||
- 'patch'
|
||||
- '📒 Documentation'
|
||||
- '☢️ Bug'
|
||||
- '🤖 Dependencies'
|
||||
- '🧹 Updates'
|
||||
default: patch
|
||||
template: |
|
||||
$CHANGES
|
||||
|
||||
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...ristretto/v$RESOLVED_VERSION
|
||||
|
||||
Thank you $CONTRIBUTORS for making this update possible.
|
43
.github/release-drafter-s3.yml
vendored
43
.github/release-drafter-s3.yml
vendored
@@ -1,43 +0,0 @@
|
||||
name-template: 'S3 - v$RESOLVED_VERSION'
|
||||
tag-template: 's3/v$RESOLVED_VERSION'
|
||||
tag-prefix: s3/v
|
||||
include-paths:
|
||||
- s3
|
||||
categories:
|
||||
- title: '🚀 New'
|
||||
labels:
|
||||
- '✏️ Feature'
|
||||
- title: '🧹 Updates'
|
||||
labels:
|
||||
- '🧹 Updates'
|
||||
- '🤖 Dependencies'
|
||||
- title: '🐛 Fixes'
|
||||
labels:
|
||||
- '☢️ Bug'
|
||||
- title: '📚 Documentation'
|
||||
labels:
|
||||
- '📒 Documentation'
|
||||
change-template: '- $TITLE (#$NUMBER)'
|
||||
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
|
||||
version-resolver:
|
||||
major:
|
||||
labels:
|
||||
- 'major'
|
||||
minor:
|
||||
labels:
|
||||
- 'minor'
|
||||
- '✏️ Feature'
|
||||
patch:
|
||||
labels:
|
||||
- 'patch'
|
||||
- '📒 Documentation'
|
||||
- '☢️ Bug'
|
||||
- '🤖 Dependencies'
|
||||
- '🧹 Updates'
|
||||
default: patch
|
||||
template: |
|
||||
$CHANGES
|
||||
|
||||
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...s3/v$RESOLVED_VERSION
|
||||
|
||||
Thank you $CONTRIBUTORS for making this update possible.
|
43
.github/release-drafter-sqlite3.yml
vendored
43
.github/release-drafter-sqlite3.yml
vendored
@@ -1,43 +0,0 @@
|
||||
name-template: 'SQLite3 - v$RESOLVED_VERSION'
|
||||
tag-template: 'sqlite3/v$RESOLVED_VERSION'
|
||||
tag-prefix: sqlite3/v
|
||||
include-paths:
|
||||
- sqlite3
|
||||
categories:
|
||||
- title: '🚀 New'
|
||||
labels:
|
||||
- '✏️ Feature'
|
||||
- title: '🧹 Updates'
|
||||
labels:
|
||||
- '🧹 Updates'
|
||||
- '🤖 Dependencies'
|
||||
- title: '🐛 Fixes'
|
||||
labels:
|
||||
- '☢️ Bug'
|
||||
- title: '📚 Documentation'
|
||||
labels:
|
||||
- '📒 Documentation'
|
||||
change-template: '- $TITLE (#$NUMBER)'
|
||||
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
|
||||
version-resolver:
|
||||
major:
|
||||
labels:
|
||||
- 'major'
|
||||
minor:
|
||||
labels:
|
||||
- 'minor'
|
||||
- '✏️ Feature'
|
||||
patch:
|
||||
labels:
|
||||
- 'patch'
|
||||
- '📒 Documentation'
|
||||
- '☢️ Bug'
|
||||
- '🤖 Dependencies'
|
||||
- '🧹 Updates'
|
||||
default: patch
|
||||
template: |
|
||||
$CHANGES
|
||||
|
||||
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...sqlite3/v$RESOLVED_VERSION
|
||||
|
||||
Thank you $CONTRIBUTORS for making this update possible.
|
@@ -1,9 +1,12 @@
|
||||
name-template: 'ArangoDB - v$RESOLVED_VERSION'
|
||||
tag-template: 'arangodb/v$RESOLVED_VERSION'
|
||||
tag-prefix: arangodb/v
|
||||
name-template: '{{FOLDER}} - v$RESOLVED_VERSION'
|
||||
tag-template: '{{FOLDER}}/v$RESOLVED_VERSION'
|
||||
tag-prefix: {{FOLDER}}/v
|
||||
include-paths:
|
||||
- arangodb
|
||||
- {{FOLDER}}
|
||||
categories:
|
||||
- title: '❗ Breaking Changes'
|
||||
labels:
|
||||
- '❗ BreakingChange'
|
||||
- title: '🚀 New'
|
||||
labels:
|
||||
- '✏️ Feature'
|
||||
@@ -19,10 +22,14 @@ categories:
|
||||
- '📒 Documentation'
|
||||
change-template: '- $TITLE (#$NUMBER)'
|
||||
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
|
||||
exclude-contributors:
|
||||
- dependabot
|
||||
- dependabot[bot]
|
||||
version-resolver:
|
||||
major:
|
||||
labels:
|
||||
- 'major'
|
||||
- '❗ BreakingChange'
|
||||
minor:
|
||||
labels:
|
||||
- 'minor'
|
||||
@@ -38,6 +45,6 @@ version-resolver:
|
||||
template: |
|
||||
$CHANGES
|
||||
|
||||
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...arangodb/v$RESOLVED_VERSION
|
||||
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...{{FOLDER}}/v$RESOLVED_VERSION
|
||||
|
||||
Thank you $CONTRIBUTORS for making this update possible.
|
27
.github/release.yml
vendored
Normal file
27
.github/release.yml
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
# .github/release.yml
|
||||
|
||||
changelog:
|
||||
categories:
|
||||
- title: '❗ Breaking Changes'
|
||||
labels:
|
||||
- '❗ BreakingChange'
|
||||
- title: '🚀 New Features'
|
||||
labels:
|
||||
- '✏️ Feature'
|
||||
- '📝 Proposal'
|
||||
- title: '🧹 Updates'
|
||||
labels:
|
||||
- '🧹 Updates'
|
||||
- '⚡️ Performance'
|
||||
- title: '🐛 Bug Fixes'
|
||||
labels:
|
||||
- '☢️ Bug'
|
||||
- title: '🛠️ Maintenance'
|
||||
labels:
|
||||
- '🤖 Dependencies'
|
||||
- title: '📚 Documentation'
|
||||
labels:
|
||||
- '📒 Documentation'
|
||||
- title: 'Other Changes'
|
||||
labels:
|
||||
- '*'
|
107
.github/scripts/initialize-wrangler.sh
vendored
Executable file
107
.github/scripts/initialize-wrangler.sh
vendored
Executable file
@@ -0,0 +1,107 @@
|
||||
#!/bin/bash
|
||||
|
||||
# generate cloudflarekv/index.ts
|
||||
cat <<EOF > cloudflarekv/index.ts
|
||||
export default { async fetch(Request, env) {
|
||||
|
||||
const namespace = env.TEST_NAMESPACE1;
|
||||
|
||||
if (Request.url === "http://localhost:8787/health") {
|
||||
return new Response("Success");
|
||||
}
|
||||
|
||||
if (Request.url === "http://localhost:8787/writeworkerskvkeyvaluepair") {
|
||||
const res = await Request.json();
|
||||
const { key, val } = res;
|
||||
WriteWorkersKVKeyValuePair(namespace, key, val);
|
||||
return new Response("Success");
|
||||
}
|
||||
|
||||
else if (Request.url === "http://localhost:8787/listworkerskvkeys") {
|
||||
const resp = await Request.json();
|
||||
const { limit, prefix, cursor } = resp;
|
||||
const list = await ListWorkersKVKeys(namespace, limit, prefix, cursor);
|
||||
return new Response(list);
|
||||
}
|
||||
|
||||
else if (Request.url === "http://localhost:8787/deleteworkerskvpairbykey") {
|
||||
const res = await Request.json();
|
||||
const { key } = res;
|
||||
await DeleteWorkersKVPairByKey(namespace, key);
|
||||
|
||||
return new Response(key)
|
||||
}
|
||||
|
||||
else if (Request.url === "http://localhost:8787/getworkerskvvaluebykey") {
|
||||
const key = (await Request.json()).key;
|
||||
const res = await GetWorkersKVValueByKey(namespace, key);
|
||||
|
||||
return new Response(res);
|
||||
}
|
||||
|
||||
else if (Request.url === "http://localhost:8787/deleteworkerskventries") {
|
||||
const res = await Request.json();
|
||||
const { keys } = res;
|
||||
const newKeys = keys.filter(x => x.length > 0);
|
||||
await DeleteWorkersKVEntries(namespace, newKeys);
|
||||
|
||||
return new Response("Success")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const GetWorkersKVValueByKey = async (NAMESPACE, key) => {
|
||||
const val = await NAMESPACE.get(key);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
const WriteWorkersKVKeyValuePair = async (NAMESPACE, key, val) => {
|
||||
await NAMESPACE.put(key, val);
|
||||
|
||||
return "Wrote Successfully"
|
||||
}
|
||||
|
||||
const DeleteWorkersKVPairByKey = async (NAMESPACE, key) => {
|
||||
await NAMESPACE.delete(key);
|
||||
|
||||
return "Delete Successfully"
|
||||
}
|
||||
|
||||
const ListWorkersKVKeys = async (NAMESPACE, limit, prefix, cursor) => {
|
||||
const resp = await NAMESPACE.list({ limit, prefix, cursor });
|
||||
|
||||
return JSON.stringify(resp.keys);
|
||||
}
|
||||
|
||||
const DeleteWorkersKVEntries = async (NAMESPACE, keys) => {
|
||||
for (let key of keys) {
|
||||
await NAMESPACE.delete(key);
|
||||
}
|
||||
|
||||
return "Delete Successfully"
|
||||
}
|
||||
|
||||
|
||||
EOF
|
||||
|
||||
echo "index.ts generated"
|
||||
|
||||
# generate cloudflarekv/wrangler.toml
|
||||
cat <<EOF > cloudflarekv/wrangler.toml
|
||||
main = "index.ts"
|
||||
|
||||
kv_namespaces = [
|
||||
{ binding = "TEST_NAMESPACE1", id = "hello", preview_id = "world" },
|
||||
]
|
||||
|
||||
workers_dev = true
|
||||
|
||||
compatibility_date = "2024-03-20"
|
||||
|
||||
[dev]
|
||||
port = 8787
|
||||
local_protocol = "http"
|
||||
EOF
|
||||
|
||||
echo "wrangler.toml generated"
|
6
.github/scripts/sync_docs.sh
vendored
6
.github/scripts/sync_docs.sh
vendored
@@ -1,4 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
# Some env variables
|
||||
BRANCH="main"
|
||||
@@ -45,11 +46,14 @@ elif [ "$EVENT" == "release" ]; then
|
||||
# Check if contrib_versions.json exists and modify it if required
|
||||
if [[ -f $VERSION_FILE ]]; then
|
||||
jq --arg new_version "$new_version" 'del(.[] | select(. == $new_version))' $VERSION_FILE > temp.json && mv temp.json $VERSION_FILE
|
||||
jq -S . ${VERSION_FILE} > temp.json && mv temp.json ${VERSION_FILE}
|
||||
fi
|
||||
|
||||
# Run docusaurus versioning command
|
||||
$DOCUSAURUS_COMMAND "${new_version}"
|
||||
|
||||
if [[ -f $VERSION_FILE ]]; then
|
||||
jq 'sort | reverse' ${VERSION_FILE} > temp.json && mv temp.json ${VERSION_FILE}
|
||||
fi
|
||||
fi
|
||||
|
||||
# Push changes
|
||||
|
33
.github/scripts/update-deps.sh
vendored
Executable file
33
.github/scripts/update-deps.sh
vendored
Executable file
@@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Loop over all directories except dot-directories
|
||||
for dir in */ ; do
|
||||
# Skip hidden directories
|
||||
[[ "$dir" == .* ]] && continue
|
||||
|
||||
if [ -d "$dir" ]; then
|
||||
echo "Processing $dir"
|
||||
(
|
||||
cd "$dir" || exit
|
||||
|
||||
if [ -f "go.mod" ]; then
|
||||
goversion=$(grep '^go ' go.mod | awk '{print $2}')
|
||||
if [ -n "$goversion" ]; then
|
||||
major=$(echo "$goversion" | cut -d. -f1)
|
||||
minor=$(echo "$goversion" | cut -d. -f2)
|
||||
|
||||
# If Go version is >= 1.23
|
||||
if [ "$major" -gt 1 ] || { [ "$major" -eq 1 ] && [ "$minor" -ge 23 ]; }; then
|
||||
echo "Running go get -u (go.mod version: $goversion)"
|
||||
GOTOOLCHAIN=local go get -u
|
||||
else
|
||||
echo "Skipping go get -u (go.mod version: $goversion < 1.23)"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
GOTOOLCHAIN=local go mod tidy
|
||||
)
|
||||
fi
|
||||
done
|
||||
|
2
.github/workflows/auto-labeler.yml
vendored
2
.github/workflows/auto-labeler.yml
vendored
@@ -17,6 +17,6 @@ jobs:
|
||||
steps:
|
||||
- name: Check Labels
|
||||
id: labeler
|
||||
uses: fuxingloh/multi-labeler@v2
|
||||
uses: fuxingloh/multi-labeler@v4
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
|
137
.github/workflows/benchmark.yml
vendored
Normal file
137
.github/workflows/benchmark.yml
vendored
Normal file
@@ -0,0 +1,137 @@
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- "**"
|
||||
- "!**.md"
|
||||
pull_request:
|
||||
paths:
|
||||
- "**"
|
||||
- "!**.md"
|
||||
|
||||
permissions:
|
||||
deployments: write
|
||||
contents: write
|
||||
|
||||
name: Benchmark
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
pull-requests: read
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Generate filters
|
||||
id: filter-setup
|
||||
run: |
|
||||
filters=$(find . -maxdepth 1 -type d ! -path ./.git ! -path . ! -path ./testhelpers -exec basename {} \; | grep -v '^\.' | awk '{printf "%s: \"%s/**\"\n", $1, $1}')
|
||||
echo "filters<<EOF" >> $GITHUB_OUTPUT
|
||||
echo "$filters" >> $GITHUB_OUTPUT
|
||||
echo "EOF" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
|
||||
- name: Filter changes
|
||||
id: filter
|
||||
uses: dorny/paths-filter@v3
|
||||
with:
|
||||
filters: ${{ steps.filter-setup.outputs.filters }}
|
||||
outputs:
|
||||
packages: ${{ steps.filter.outputs.changes || '[]' }}
|
||||
|
||||
compare:
|
||||
needs: changes
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
if: needs.changes.outputs.packages != '[]' # Ensure job runs only if there are changes
|
||||
strategy:
|
||||
matrix:
|
||||
package: ${{ fromJSON(needs.changes.outputs.packages || '[]') }}
|
||||
fail-fast: false
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
# NOTE: Keep this in sync with the version from go.mod
|
||||
go-version: "1.23.x"
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '18'
|
||||
|
||||
- name: Install Cloudflare Worker
|
||||
if: ${{ matrix.package == 'cloudflarekv' }}
|
||||
run : |
|
||||
.github/scripts/initialize-wrangler.sh
|
||||
cd cloudflarekv && npx wrangler dev &
|
||||
npx wait-on tcp:8787
|
||||
|
||||
- name: Install etcd
|
||||
if: ${{ matrix.package == 'etcd' }}
|
||||
run: |
|
||||
docker run -d --name Etcd-server \
|
||||
--publish 2379:2379 \
|
||||
--publish 2380:2380 \
|
||||
--env ALLOW_NONE_AUTHENTICATION=yes \
|
||||
--env ETCD_ADVERTISE_CLIENT_URLS=http://etcd-server:2379 \
|
||||
bitnami/etcd:latest
|
||||
|
||||
- name: Run Benchmarks
|
||||
working-directory: ${{ matrix.package }}
|
||||
run: |
|
||||
set -o pipefail
|
||||
echo "Bench dir: ${{ matrix.package }}"
|
||||
go test ./... -timeout 900s -benchmem -run=^$ -bench . | tee -a output.txt
|
||||
shell: bash
|
||||
env:
|
||||
MSSQL_DATABASE: master
|
||||
MSSQL_USERNAME: sa
|
||||
MSSQL_PASSWORD: MsSql!1234
|
||||
TEST_AEROSPIKE_IMAGE: aerospike/aerospike-server:latest
|
||||
TEST_ARANGODB_IMAGE: arangodb:latest
|
||||
TEST_AZURITE_IMAGE: mcr.microsoft.com/azure-storage/azurite:latest
|
||||
TEST_CASSANDRA_IMAGE: "cassandra:latest"
|
||||
TEST_COHERENCE_IMAGE: "ghcr.io/oracle/coherence-ce:25.03.1-graal"
|
||||
TEST_CLICKHOUSE_IMAGE: "clickhouse/clickhouse-server:23-alpine"
|
||||
TEST_COUCHBASE_IMAGE: "couchbase:enterprise-7.6.5"
|
||||
TEST_DYNAMODB_IMAGE: amazon/dynamodb-local:latest
|
||||
TEST_MEMCACHED_IMAGE: "memcached:latest"
|
||||
TEST_MINIO_IMAGE: "docker.io/minio/minio:latest"
|
||||
TEST_MONGODB_IMAGE: "docker.io/mongo:7"
|
||||
TEST_MYSQL_IMAGE: "docker.io/mysql:9"
|
||||
TEST_NATS_IMAGE: "nats:2-alpine"
|
||||
TEST_POSTGRES_IMAGE: "docker.io/postgres:16-alpine"
|
||||
TEST_REDIS_IMAGE: "docker.io/redis:7"
|
||||
TEST_SCYLLADB_IMAGE: "scylladb/scylla:6.2"
|
||||
TEST_SURREALDB_IMAGE: "surrealdb/surrealdb:latest"
|
||||
TEST_VALKEY_IMAGE: "valkey/valkey:8"
|
||||
COHERENCE_LOG_LEVEL: "ERROR"
|
||||
|
||||
- name: Get Previous Benchmark Results
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ./cache
|
||||
key: ${{ runner.os }}-benchmark-${{ matrix.package }}
|
||||
|
||||
- name: Save Benchmark Results
|
||||
uses: benchmark-action/github-action-benchmark@v1.20.4
|
||||
with:
|
||||
tool: "go"
|
||||
output-file-path: ${{ matrix.package }}/output.txt
|
||||
github-token: ${{ secrets.BENCHMARK_TOKEN }}
|
||||
benchmark-data-dir-path: "benchmarks/${{ matrix.package }}"
|
||||
alert-threshold: "300%"
|
||||
fail-on-alert: true
|
||||
comment-on-alert: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }}
|
||||
#summary-always: ${{ github.event_name != 'push' && github.event_name != 'workflow_dispatch' }}
|
||||
auto-push: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }}
|
||||
save-data-file: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }}
|
||||
|
||||
|
54
.github/workflows/codeql-analysis.yml
vendored
54
.github/workflows/codeql-analysis.yml
vendored
@@ -1,54 +0,0 @@
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master, main]
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [master, main]
|
||||
schedule:
|
||||
- cron: '0 3 * * 6'
|
||||
|
||||
jobs:
|
||||
analyse:
|
||||
name: Analyse
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
# We must fetch at least the immediate parents so that if this is
|
||||
# a pull request then we can checkout the head.
|
||||
fetch-depth: 2
|
||||
|
||||
# If this run was triggered by a pull request event, then checkout
|
||||
# the head of the pull request instead of the merge commit.
|
||||
- run: git checkout HEAD^2
|
||||
if: ${{ github.event_name == 'pull_request' }}
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
# Override language selection by uncommenting this and choosing your languages
|
||||
with:
|
||||
languages: go
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
|
||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||
# and modify them (or add more) to build your code if your project
|
||||
# uses a compiled language
|
||||
|
||||
#- run: |
|
||||
# make bootstrap
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
4
.github/workflows/dependabot_automerge.yml
vendored
4
.github/workflows/dependabot_automerge.yml
vendored
@@ -12,7 +12,7 @@ jobs:
|
||||
if: ${{ github.actor == 'dependabot[bot]' }}
|
||||
steps:
|
||||
- name: Wait for check is finished
|
||||
uses: lewagon/wait-on-check-action@v1.3.1
|
||||
uses: lewagon/wait-on-check-action@v1.3.4
|
||||
id: wait_for_checks
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||
@@ -28,7 +28,7 @@ jobs:
|
||||
steps:
|
||||
- name: Dependabot metadata
|
||||
id: metadata
|
||||
uses: dependabot/fetch-metadata@v1.6.0
|
||||
uses: dependabot/fetch-metadata@v2.4.0
|
||||
with:
|
||||
github-token: "${{ secrets.PR_TOKEN }}"
|
||||
- name: Enable auto-merge for Dependabot PRs
|
||||
|
43
.github/workflows/golangci-lint.yml
vendored
43
.github/workflows/golangci-lint.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: Golangci Lint Check
|
||||
name: Golangci-Lint Check
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -20,12 +20,47 @@ on:
|
||||
- ".github/dependabot.yml"
|
||||
|
||||
jobs:
|
||||
golangci-lint:
|
||||
changes:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Generate filters
|
||||
id: filter-setup
|
||||
run: |
|
||||
filters=$(find . -maxdepth 1 -type d ! -path ./.git ! -path . ! -path ./testhelpers -exec basename {} \; | grep -v '^\.' | awk '{printf "%s: \"%s/**\"\n", $1, $1}')
|
||||
# Add all testhelpers subdirectories to filters
|
||||
testhelpers_filters=$(find ./testhelpers -mindepth 1 -maxdepth 1 -type d -exec basename {} \; | awk '{printf "testhelpers/%s: \"testhelpers/%s/**\"\n", $1, $1}')
|
||||
echo "filters<<EOF" >> $GITHUB_OUTPUT
|
||||
echo "$filters" >> $GITHUB_OUTPUT
|
||||
echo "$testhelpers_filters" >> $GITHUB_OUTPUT
|
||||
echo "EOF" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
|
||||
- name: Filter changes
|
||||
id: filter
|
||||
uses: dorny/paths-filter@v3
|
||||
with:
|
||||
filters: ${{ steps.filter-setup.outputs.filters }}
|
||||
outputs:
|
||||
packages: ${{ steps.filter.outputs.changes || '[]' }}
|
||||
|
||||
lint:
|
||||
needs: changes
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
package: ${{ fromJSON(needs.changes.outputs.packages || '[]') }}
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Run golangci-lint
|
||||
uses: reviewdog/action-golangci-lint@v2
|
||||
with:
|
||||
golangci_lint_flags: "--tests=false"
|
||||
golangci_lint_flags: "--tests=false --timeout=5m"
|
||||
workdir: ${{ matrix.package }}
|
||||
fail_level: "warning"
|
||||
filter_mode: nofilter
|
||||
|
114
.github/workflows/gosec.yml
vendored
114
.github/workflows/gosec.yml
vendored
@@ -1,114 +0,0 @@
|
||||
name: Gosec Security Scan
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "master"
|
||||
- "main"
|
||||
paths-ignore:
|
||||
- "**.md"
|
||||
- LICENSE
|
||||
- ".github/ISSUE_TEMPLATE/*.yml"
|
||||
- ".github/dependabot.yml"
|
||||
pull_request:
|
||||
branches:
|
||||
- "*"
|
||||
paths-ignore:
|
||||
- "**.md"
|
||||
- LICENSE
|
||||
- ".github/ISSUE_TEMPLATE/*.yml"
|
||||
- ".github/dependabot.yml"
|
||||
|
||||
jobs:
|
||||
gosec-scan:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
GO111MODULE: on
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v3
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: '^1.18.x'
|
||||
check-latest: true
|
||||
cache: false
|
||||
- name: Install Gosec
|
||||
run: go install github.com/securego/gosec/v2/cmd/gosec@latest
|
||||
- name: Run Gosec (root)
|
||||
working-directory: .
|
||||
run: |
|
||||
gosec -exclude-dir=arangodb -exclude-dir=badger -exclude-dir=couchbase -exclude-dir=dynamodb -exclude-dir=etcd -exclude-dir=memcache -exclude-dir=memory -exclude-dir=mongodb -exclude-dir=mysql -exclude-dir=postgres -exclude-dir=redis -exclude-dir=ristretto -exclude-dir=sqlite3 -exclude-dir=s3 -exclude-dir=bbolt -exclude-dir=azureblob -exclude-dir=mssql -exclude-dir=pebble ./....
|
||||
# -----
|
||||
- name: Run Gosec (arangodb)
|
||||
working-directory: ./arangodb
|
||||
run: gosec ./...
|
||||
# -----
|
||||
- name: Run Gosec (badger)
|
||||
working-directory: ./badger
|
||||
run: gosec ./...
|
||||
# -----
|
||||
- name: Run Gosec (couchbase)
|
||||
working-directory: ./couchbase
|
||||
run: gosec ./...
|
||||
# -----
|
||||
- name: Run Gosec (dynamodb)
|
||||
working-directory: ./dynamodb
|
||||
run: gosec ./...
|
||||
# -----
|
||||
- name: Run Gosec (etcd)
|
||||
working-directory: ./etcd
|
||||
run: gosec ./...
|
||||
# -----
|
||||
- name: Run Gosec (memcache)
|
||||
working-directory: ./memcache
|
||||
run: gosec ./...
|
||||
# -----
|
||||
- name: Run Gosec (memory)
|
||||
working-directory: ./memory
|
||||
run: gosec ./...
|
||||
# -----
|
||||
- name: Run Gosec (mongodb)
|
||||
working-directory: ./mongodb
|
||||
run: gosec ./...
|
||||
# -----
|
||||
- name: Run Gosec (mysql)
|
||||
working-directory: ./mysql
|
||||
run: gosec ./...
|
||||
# -----
|
||||
- name: Run Gosec (postgres)
|
||||
working-directory: ./postgres
|
||||
run: gosec ./...
|
||||
# -----
|
||||
- name: Run Gosec (redis)
|
||||
working-directory: ./redis
|
||||
run: gosec ./...
|
||||
# -----
|
||||
- name: Run Gosec (sqlite3)
|
||||
working-directory: ./sqlite3
|
||||
run: gosec ./...
|
||||
# -----
|
||||
- name: Run Gosec (s3)
|
||||
working-directory: ./s3
|
||||
run: gosec ./...
|
||||
# -----
|
||||
- name: Run Gosec (ristretto)
|
||||
working-directory: ./ristretto
|
||||
run: gosec ./...
|
||||
# -----
|
||||
- name: Run Gosec (bbolt)
|
||||
working-directory: ./bbolt
|
||||
run: gosec ./...
|
||||
# -----
|
||||
- name: Run Gosec (azureblob)
|
||||
working-directory: ./azureblob
|
||||
run: gosec ./...
|
||||
# -----
|
||||
- name: Run Gosec (mssql)
|
||||
working-directory: ./mssql
|
||||
run: gosec ./...
|
||||
# -----
|
||||
- name: Run Gosec (pebble)
|
||||
working-directory: ./pebble
|
||||
run: gosec ./...
|
||||
# -----
|
39
.github/workflows/govulncheck.yml
vendored
39
.github/workflows/govulncheck.yml
vendored
@@ -1,39 +0,0 @@
|
||||
name: Govulncheck Security Scan
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "master"
|
||||
- "main"
|
||||
paths-ignore:
|
||||
- "**.md"
|
||||
- LICENSE
|
||||
- ".github/ISSUE_TEMPLATE/*.yml"
|
||||
- ".github/dependabot.yml"
|
||||
pull_request:
|
||||
branches:
|
||||
- "*"
|
||||
paths-ignore:
|
||||
- "**.md"
|
||||
- LICENSE
|
||||
- ".github/ISSUE_TEMPLATE/*.yml"
|
||||
- ".github/dependabot.yml"
|
||||
|
||||
jobs:
|
||||
govulncheck-check:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
GO111MODULE: on
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v3
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: 'stable'
|
||||
check-latest: true
|
||||
cache: false
|
||||
- name: Install Govulncheck
|
||||
run: go install golang.org/x/vuln/cmd/govulncheck@latest
|
||||
- name: Run Govulncheck
|
||||
run: govulncheck ./...
|
19
.github/workflows/release-drafter-arangodb.yml
vendored
19
.github/workflows/release-drafter-arangodb.yml
vendored
@@ -1,19 +0,0 @@
|
||||
name: Release Drafter Arangodb
|
||||
on:
|
||||
push:
|
||||
# branches to consider in the event; optional, defaults to all
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'arangodb/**'
|
||||
jobs:
|
||||
draft_release_arangodb:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@v5
|
||||
with:
|
||||
config-name: release-drafter-arangodb.yml
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
19
.github/workflows/release-drafter-azureblob.yml
vendored
19
.github/workflows/release-drafter-azureblob.yml
vendored
@@ -1,19 +0,0 @@
|
||||
name: Release Drafter Azureblob
|
||||
on:
|
||||
push:
|
||||
# branches to consider in the event; optional, defaults to all
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'azureblob/**'
|
||||
jobs:
|
||||
draft_release_azureblob:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@v5
|
||||
with:
|
||||
config-name: release-drafter-azureblob.yml
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
19
.github/workflows/release-drafter-badger.yml
vendored
19
.github/workflows/release-drafter-badger.yml
vendored
@@ -1,19 +0,0 @@
|
||||
name: Release Drafter Badger
|
||||
on:
|
||||
push:
|
||||
# branches to consider in the event; optional, defaults to all
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'badger/**'
|
||||
jobs:
|
||||
draft_release_badger:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@v5
|
||||
with:
|
||||
config-name: release-drafter-badger.yml
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
19
.github/workflows/release-drafter-bbolt.yml
vendored
19
.github/workflows/release-drafter-bbolt.yml
vendored
@@ -1,19 +0,0 @@
|
||||
name: Release Drafter Bbolt
|
||||
on:
|
||||
push:
|
||||
# branches to consider in the event; optional, defaults to all
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'bbolt/**'
|
||||
jobs:
|
||||
draft_release_bbolt:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@v5
|
||||
with:
|
||||
config-name: release-drafter-bbolt.yml
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
19
.github/workflows/release-drafter-couchbase.yml
vendored
19
.github/workflows/release-drafter-couchbase.yml
vendored
@@ -1,19 +0,0 @@
|
||||
name: Release Drafter Couchbase
|
||||
on:
|
||||
push:
|
||||
# branches to consider in the event; optional, defaults to all
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'couchbase/**'
|
||||
jobs:
|
||||
draft_release_couchbase:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@v5
|
||||
with:
|
||||
config-name: release-drafter-couchbase.yml
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
19
.github/workflows/release-drafter-dynamodb.yml
vendored
19
.github/workflows/release-drafter-dynamodb.yml
vendored
@@ -1,19 +0,0 @@
|
||||
name: Release Drafter Dynamodb
|
||||
on:
|
||||
push:
|
||||
# branches to consider in the event; optional, defaults to all
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'dynamodb/**'
|
||||
jobs:
|
||||
draft_release_dynamodb:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@v5
|
||||
with:
|
||||
config-name: release-drafter-dynamodb.yml
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
19
.github/workflows/release-drafter-etcd.yml
vendored
19
.github/workflows/release-drafter-etcd.yml
vendored
@@ -1,19 +0,0 @@
|
||||
name: Release Drafter Etcd
|
||||
on:
|
||||
push:
|
||||
# branches to consider in the event; optional, defaults to all
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'etcd/**'
|
||||
jobs:
|
||||
draft_release_etcd:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@v5
|
||||
with:
|
||||
config-name: release-drafter-etcd.yml
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
19
.github/workflows/release-drafter-memcache.yml
vendored
19
.github/workflows/release-drafter-memcache.yml
vendored
@@ -1,19 +0,0 @@
|
||||
name: Release Drafter Memcache
|
||||
on:
|
||||
push:
|
||||
# branches to consider in the event; optional, defaults to all
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'memcache/**'
|
||||
jobs:
|
||||
draft_release_memcache:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@v5
|
||||
with:
|
||||
config-name: release-drafter-memcache.yml
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
19
.github/workflows/release-drafter-mongodb.yml
vendored
19
.github/workflows/release-drafter-mongodb.yml
vendored
@@ -1,19 +0,0 @@
|
||||
name: Release Drafter Mongodb
|
||||
on:
|
||||
push:
|
||||
# branches to consider in the event; optional, defaults to all
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'mongodb/**'
|
||||
jobs:
|
||||
draft_release_mongodb:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@v5
|
||||
with:
|
||||
config-name: release-drafter-mongodb.yml
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
19
.github/workflows/release-drafter-mssql.yml
vendored
19
.github/workflows/release-drafter-mssql.yml
vendored
@@ -1,19 +0,0 @@
|
||||
name: Release Drafter Mssql
|
||||
on:
|
||||
push:
|
||||
# branches to consider in the event; optional, defaults to all
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'mssql/**'
|
||||
jobs:
|
||||
draft_release_mssql:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@v5
|
||||
with:
|
||||
config-name: release-drafter-mssql.yml
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
19
.github/workflows/release-drafter-mysql.yml
vendored
19
.github/workflows/release-drafter-mysql.yml
vendored
@@ -1,19 +0,0 @@
|
||||
name: Release Drafter Mysql
|
||||
on:
|
||||
push:
|
||||
# branches to consider in the event; optional, defaults to all
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'mysql/**'
|
||||
jobs:
|
||||
draft_release_mysql:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@v5
|
||||
with:
|
||||
config-name: release-drafter-mysql.yml
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
19
.github/workflows/release-drafter-pebble.yml
vendored
19
.github/workflows/release-drafter-pebble.yml
vendored
@@ -1,19 +0,0 @@
|
||||
name: Release Drafter Pebble
|
||||
on:
|
||||
push:
|
||||
# branches to consider in the event; optional, defaults to all
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- "pebble/**"
|
||||
jobs:
|
||||
draft_release_pebble:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@v5
|
||||
with:
|
||||
config-name: release-drafter-pebble.yml
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
19
.github/workflows/release-drafter-postgres.yml
vendored
19
.github/workflows/release-drafter-postgres.yml
vendored
@@ -1,19 +0,0 @@
|
||||
name: Release Drafter Postgres
|
||||
on:
|
||||
push:
|
||||
# branches to consider in the event; optional, defaults to all
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'postgres/**'
|
||||
jobs:
|
||||
draft_release_postgres:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@v5
|
||||
with:
|
||||
config-name: release-drafter-postgres.yml
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
19
.github/workflows/release-drafter-redis.yml
vendored
19
.github/workflows/release-drafter-redis.yml
vendored
@@ -1,19 +0,0 @@
|
||||
name: Release Drafter Redis
|
||||
on:
|
||||
push:
|
||||
# branches to consider in the event; optional, defaults to all
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'redis/**'
|
||||
jobs:
|
||||
draft_release_redis:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@v5
|
||||
with:
|
||||
config-name: release-drafter-redis.yml
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
19
.github/workflows/release-drafter-ristretto.yml
vendored
19
.github/workflows/release-drafter-ristretto.yml
vendored
@@ -1,19 +0,0 @@
|
||||
name: Release Drafter Ristretto
|
||||
on:
|
||||
push:
|
||||
# branches to consider in the event; optional, defaults to all
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'ristretto/**'
|
||||
jobs:
|
||||
draft_release_ristretto:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@v5
|
||||
with:
|
||||
config-name: release-drafter-ristretto.yml
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
19
.github/workflows/release-drafter-s3.yml
vendored
19
.github/workflows/release-drafter-s3.yml
vendored
@@ -1,19 +0,0 @@
|
||||
name: Release Drafter S3
|
||||
on:
|
||||
push:
|
||||
# branches to consider in the event; optional, defaults to all
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 's3/**'
|
||||
jobs:
|
||||
draft_release_s3:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@v5
|
||||
with:
|
||||
config-name: release-drafter-s3.yml
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
20
.github/workflows/release-drafter-sqlite3.yml
vendored
20
.github/workflows/release-drafter-sqlite3.yml
vendored
@@ -1,20 +0,0 @@
|
||||
name: Release Drafter Sqlite3
|
||||
on:
|
||||
push:
|
||||
# branches to consider in the event; optional, defaults to all
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'sqlite3/**'
|
||||
jobs:
|
||||
draft_release_sqlite3:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@v5
|
||||
with:
|
||||
config-name: release-drafter-sqlite3.yml
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
61
.github/workflows/release-drafter.yml
vendored
Normal file
61
.github/workflows/release-drafter.yml
vendored
Normal file
@@ -0,0 +1,61 @@
|
||||
name: Release Drafter (All)
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
pull-requests: read
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Generate filters
|
||||
id: filter-setup
|
||||
run: |
|
||||
filters=$(find . -maxdepth 1 -type d ! -path ./.git ! -path . ! -path ./testhelpers -exec basename {} \; | grep -v '^\.' | awk '{printf "%s: \"%s/**\"\n", $1, $1}')
|
||||
echo "filters<<EOF" >> $GITHUB_OUTPUT
|
||||
echo "$filters" >> $GITHUB_OUTPUT
|
||||
echo "EOF" >> $GITHUB_OUTPUT
|
||||
shell: bash
|
||||
- name: Filter changes
|
||||
id: filter
|
||||
uses: dorny/paths-filter@v3
|
||||
with:
|
||||
filters: ${{ steps.filter-setup.outputs.filters }}
|
||||
|
||||
outputs:
|
||||
packages: ${{ steps.filter.outputs.changes || '[]' }}
|
||||
|
||||
release-drafter:
|
||||
needs: changes
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
if: needs.changes.outputs.packages != '[]' # Ensure job runs only if there are changes
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
strategy:
|
||||
matrix:
|
||||
package: ${{ fromJSON(needs.changes.outputs.packages || '[]') }}
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Generate dynamic config from template
|
||||
id: generate-config
|
||||
run: |
|
||||
folder="${{ matrix.package }}"
|
||||
sed "s|{{FOLDER}}|$folder|g" .github/release-drafter-template.yml > .github/release-drafter-$folder.yml
|
||||
echo "config<<EOF" >> $GITHUB_OUTPUT
|
||||
cat .github/release-drafter-$folder.yml >> $GITHUB_OUTPUT
|
||||
echo "EOF" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Use dynamic release-drafter configuration
|
||||
uses: ReneWerner87/release-drafter@6dec4ceb1fb86b6514f11a2e7a39e1dedce709d0
|
||||
with:
|
||||
config: ${{ steps.generate-config.outputs.config }}
|
4
.github/workflows/sync-docs.yml
vendored
4
.github/workflows/sync-docs.yml
vendored
@@ -17,13 +17,13 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 2
|
||||
|
||||
- name: Setup Node.js environment
|
||||
uses: actions/setup-node@v3
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '18'
|
||||
|
||||
|
30
.github/workflows/test-aerospike.yml
vendored
Normal file
30
.github/workflows/test-aerospike.yml
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'aerospike/**'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'aerospike/**'
|
||||
name: "Tests Aerospike"
|
||||
jobs:
|
||||
Tests:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Run Test
|
||||
env:
|
||||
TEST_AEROSPIKE_IMAGE: aerospike/aerospike-server:latest
|
||||
run: cd ./aerospike && go test ./... -v -race
|
19
.github/workflows/test-arangodb.yml
vendored
19
.github/workflows/test-arangodb.yml
vendored
@@ -12,26 +12,19 @@ name: "Tests ArangoDB"
|
||||
jobs:
|
||||
Tests:
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
arangodb:
|
||||
image: 'arangodb:latest'
|
||||
env:
|
||||
ARANGO_NO_AUTH: 1
|
||||
ports:
|
||||
- '8529:8529'
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.17.x
|
||||
- 1.18.x
|
||||
- 1.19.x
|
||||
- 1.20.x
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v4
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Run Test
|
||||
env:
|
||||
TEST_ARANGODB_IMAGE: arangodb:latest
|
||||
run: cd ./arangodb && go test ./... -v -race
|
||||
|
14
.github/workflows/test-azureblob.yml
vendored
14
.github/workflows/test-azureblob.yml
vendored
@@ -15,18 +15,16 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.18.x
|
||||
- 1.19.x
|
||||
- 1.20.x
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
steps:
|
||||
- name: Install Azurite
|
||||
run: |
|
||||
docker run -d -p 10000:10000 mcr.microsoft.com/azure-storage/azurite azurite-blob --blobHost 0.0.0.0 --blobPort 10000
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v4
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Run Test
|
||||
env:
|
||||
TEST_AZURITE_IMAGE: mcr.microsoft.com/azure-storage/azurite:latest
|
||||
run: cd ./azureblob && go test ./... -v -race
|
||||
|
9
.github/workflows/test-badger.yml
vendored
9
.github/workflows/test-badger.yml
vendored
@@ -14,15 +14,14 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.18.x
|
||||
- 1.19.x
|
||||
- 1.20.x
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v4
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Test Badger
|
||||
|
9
.github/workflows/test-bbolt.yml
vendored
9
.github/workflows/test-bbolt.yml
vendored
@@ -15,14 +15,13 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.18.x
|
||||
- 1.19.x
|
||||
- 1.20.x
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v4
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Run Test
|
||||
|
30
.github/workflows/test-cassandra.yml
vendored
Normal file
30
.github/workflows/test-cassandra.yml
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'cassandra/**'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'cassandra/**'
|
||||
name: 'Tests Cassandra'
|
||||
jobs:
|
||||
Tests:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Run Test
|
||||
env:
|
||||
TEST_CASSANDRA_IMAGE: cassandra:latest
|
||||
run: cd ./cassandra && go clean -testcache && go test ./... -v -race
|
30
.github/workflows/test-clickhouse.yml
vendored
Normal file
30
.github/workflows/test-clickhouse.yml
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'clickhouse/**'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'clickhouse/**'
|
||||
name: 'Tests Clickhouse'
|
||||
jobs:
|
||||
Tests:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Run Test
|
||||
env:
|
||||
TEST_CLICKHOUSE_IMAGE: clickhouse/clickhouse-server:23-alpine
|
||||
run: cd ./clickhouse && go clean -testcache && go test ./... -v -race
|
43
.github/workflows/test-cloudflarekv.yml
vendored
Normal file
43
.github/workflows/test-cloudflarekv.yml
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
name: Tests CloudflareKV
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'cloudflarekv/**'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'cloudflarekv/**'
|
||||
|
||||
jobs:
|
||||
Tests:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: ${{ matrix.go-version }}
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '18'
|
||||
|
||||
- name: Start Wrangler Dev
|
||||
run: |
|
||||
.github/scripts/initialize-wrangler.sh
|
||||
cd cloudflarekv && npx wrangler dev &
|
||||
npx wait-on tcp:8787
|
||||
|
||||
- name: Run Go Tests
|
||||
run: cd cloudflarekv && go test ./... -v -race
|
30
.github/workflows/test-coherence.yml
vendored
Normal file
30
.github/workflows/test-coherence.yml
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'coherence/**'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'coherence/**'
|
||||
name: "Tests Coherence"
|
||||
jobs:
|
||||
Tests:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Run Test
|
||||
env:
|
||||
TEST_COHERENCE_IMAGE: "ghcr.io/oracle/coherence-ce:25.03.1-graal"
|
||||
run: cd ./coherence && COHERENCE_SESSION_DEBUG=true go clean -testcache && go test ./... -v -race
|
17
.github/workflows/test-couchbase.yml
vendored
17
.github/workflows/test-couchbase.yml
vendored
@@ -15,21 +15,16 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.19.x
|
||||
- 1.20.x
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v3
|
||||
- name: Install couchbase
|
||||
run: |
|
||||
docker run --name couchbase -d -p 8091-8097:8091-8097 -p 9123:9123 -p 11207:11207 -p 11210:11210 -p 11280:11280 -p 18091-18097:18091-18097 couchbase:enterprise-7.1.1
|
||||
sleep 10
|
||||
docker exec --tty couchbase couchbase-cli cluster-init -c localhost:8091 --cluster-username admin --cluster-password 123456 --cluster-ramsize 256 --services data
|
||||
sleep 10
|
||||
docker exec --tty couchbase couchbase-cli bucket-create -c localhost:8091 --username admin --password 123456 --bucket fiber_storage --bucket-type couchbase --bucket-ramsize 100 --enable-flush 1
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v4
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Run Test
|
||||
env:
|
||||
TEST_COUCHBASE_IMAGE: couchbase:enterprise-7.6.5
|
||||
run: cd ./couchbase && go test ./... -v -race
|
||||
|
12
.github/workflows/test-dynamodb.yml
vendored
12
.github/workflows/test-dynamodb.yml
vendored
@@ -20,16 +20,16 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.17.x
|
||||
- 1.18.x
|
||||
- 1.19.x
|
||||
- 1.20.x
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v4
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Run Test
|
||||
env:
|
||||
TEST_DYNAMODB_IMAGE: amazon/dynamodb-local:latest
|
||||
run: cd ./dynamodb && go test ./... -v -race
|
||||
|
8
.github/workflows/test-etcd.yml
vendored
8
.github/workflows/test-etcd.yml
vendored
@@ -15,11 +15,11 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.19.x
|
||||
- 1.20.x
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: Install etcd
|
||||
run: |
|
||||
docker run -d --name Etcd-server \
|
||||
@@ -30,7 +30,7 @@ jobs:
|
||||
bitnami/etcd:latest
|
||||
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v4
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Run Test
|
||||
|
28
.github/workflows/test-leveldb.yml
vendored
Normal file
28
.github/workflows/test-leveldb.yml
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'leveldb/**'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'leveldb/**'
|
||||
name: "Tests LevelDB"
|
||||
jobs:
|
||||
Tests:
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Test LevelDB
|
||||
run: cd ./leveldb && go test ./... -v -race
|
17
.github/workflows/test-memcache.yml
vendored
17
.github/workflows/test-memcache.yml
vendored
@@ -12,24 +12,19 @@ name: "Tests Memcache"
|
||||
jobs:
|
||||
Tests:
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
mongo:
|
||||
image: 'memcached:latest'
|
||||
ports:
|
||||
- '11211:11211'
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.17.x
|
||||
- 1.18.x
|
||||
- 1.19.x
|
||||
- 1.20.x
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v4
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Run Test
|
||||
env:
|
||||
TEST_MEMCACHED_IMAGE: "memcached:latest"
|
||||
run: cd ./memcache && go test ./... -v -race
|
||||
|
10
.github/workflows/test-memory.yml
vendored
10
.github/workflows/test-memory.yml
vendored
@@ -14,16 +14,14 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.17.x
|
||||
- 1.18.x
|
||||
- 1.19.x
|
||||
- 1.20.x
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v4
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Test Memory
|
||||
|
30
.github/workflows/test-minio.yml
vendored
Normal file
30
.github/workflows/test-minio.yml
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'minio/**'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'minio/**'
|
||||
name: "Tests Minio"
|
||||
jobs:
|
||||
Tests:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Run Test
|
||||
env:
|
||||
TEST_MINIO_IMAGE: docker.io/minio/minio:latest
|
||||
run: cd ./minio && go test ./... -v -race
|
28
.github/workflows/test-mockstorage.yml
vendored
Normal file
28
.github/workflows/test-mockstorage.yml
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'mockstorage/**'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'mockstorage/**'
|
||||
name: "Tests Local Storage"
|
||||
jobs:
|
||||
Tests:
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Test Mockstorage
|
||||
run: cd ./mockstorage && go test ./... -v -race
|
17
.github/workflows/test-mongodb.yml
vendored
17
.github/workflows/test-mongodb.yml
vendored
@@ -12,25 +12,20 @@ name: "Tests Mongodb"
|
||||
jobs:
|
||||
Tests:
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
mongo:
|
||||
image: 'mongo:latest'
|
||||
ports:
|
||||
- '27017:27017'
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.17.x
|
||||
- 1.18.x
|
||||
- 1.19.x
|
||||
- 1.20.x
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v4
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Run Test
|
||||
env:
|
||||
TEST_MONGODB_IMAGE: docker.io/mongo:7
|
||||
run: cd ./mongodb && go test ./... -v -race
|
||||
|
||||
|
9
.github/workflows/test-mssql.yml
vendored
9
.github/workflows/test-mssql.yml
vendored
@@ -32,14 +32,13 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.18.x
|
||||
- 1.19.x
|
||||
- 1.20.x
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v4
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Run Test
|
||||
|
29
.github/workflows/test-mysql.yml
vendored
29
.github/workflows/test-mysql.yml
vendored
@@ -12,36 +12,19 @@ name: "Tests MySQL"
|
||||
jobs:
|
||||
Tests:
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
mysql:
|
||||
image: 'mysql:latest'
|
||||
env:
|
||||
MYSQL_DATABASE: fiber
|
||||
MYSQL_USER: username
|
||||
MYSQL_PASSWORD: password
|
||||
MYSQL_ROOT_PASSWORD: password
|
||||
ports:
|
||||
- '3306:3306'
|
||||
options: >-
|
||||
--health-cmd "mysqladmin ping" --health-interval 10s --health-timeout
|
||||
5s --health-retries 5
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.17.x
|
||||
- 1.18.x
|
||||
- 1.19.x
|
||||
- 1.20.x
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v4
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Run Test
|
||||
run: cd ./mysql && go test ./... -v -race
|
||||
env:
|
||||
MYSQL_USERNAME: username
|
||||
MYSQL_PASSWORD: password
|
||||
MYSQL_DATABASE: fiber
|
||||
TEST_MYSQL_IMAGE: docker.io/mysql:9
|
||||
run: cd ./mysql && go test ./... -v -race
|
||||
|
30
.github/workflows/test-nats.yml
vendored
Normal file
30
.github/workflows/test-nats.yml
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'nats/**'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'nats/**'
|
||||
name: "Tests Nats Driver"
|
||||
jobs:
|
||||
Tests:
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Test Nats
|
||||
env:
|
||||
TEST_NATS_IMAGE: "nats:2-alpine"
|
||||
run: cd ./nats && go test ./... -v -race
|
28
.github/workflows/test-neo4j.yml
vendored
Normal file
28
.github/workflows/test-neo4j.yml
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'neo4j/**'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'neo4j/**'
|
||||
name: "Tests Neo4j"
|
||||
jobs:
|
||||
Tests:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Run Test
|
||||
run: cd ./neo4j && go test ./... -v -race
|
8
.github/workflows/test-pebble.yml
vendored
8
.github/workflows/test-pebble.yml
vendored
@@ -14,14 +14,14 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.19.x
|
||||
- 1.20.x
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v4
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Test Pebble
|
||||
|
26
.github/workflows/test-postgres.yml
vendored
26
.github/workflows/test-postgres.yml
vendored
@@ -12,33 +12,19 @@ name: "Tests Postgres"
|
||||
jobs:
|
||||
Tests:
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
postgres:
|
||||
image: 'postgres:latest'
|
||||
ports:
|
||||
- '5432:5432'
|
||||
env:
|
||||
POSTGRES_DB: fiber
|
||||
POSTGRES_USER: username
|
||||
POSTGRES_PASSWORD: "pass#w%rd"
|
||||
options: >-
|
||||
--health-cmd pg_isready --health-interval 10s --health-timeout 5s
|
||||
--health-retries 5
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.19.x
|
||||
- 1.20.x
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v4
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Run Test
|
||||
run: cd ./postgres && go test ./... -v -race
|
||||
env:
|
||||
POSTGRES_DATABASE: fiber
|
||||
POSTGRES_USERNAME: username
|
||||
POSTGRES_PASSWORD: "pass#w%rd"
|
||||
TEST_POSTGRES_IMAGE: "docker.io/postgres:16-alpine"
|
||||
run: cd ./postgres && go test ./... -v -race
|
||||
|
36
.github/workflows/test-redis.yml
vendored
36
.github/workflows/test-redis.yml
vendored
@@ -15,33 +15,17 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.18.x
|
||||
- 1.19.x
|
||||
- 1.20.x
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
redis:
|
||||
- '6.x'
|
||||
- '7.x'
|
||||
- '6'
|
||||
- '7'
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Setup Redis
|
||||
uses: shogo82148/actions-setup-redis@v1
|
||||
with:
|
||||
redis-version: ${{ matrix.redis }}
|
||||
auto-start: 'false'
|
||||
redis-port: '6379'
|
||||
redis-tls-port: '6380'
|
||||
|
||||
- name: Run Redis
|
||||
run: |
|
||||
redis-server --tls-port 6380 --port 6379 \
|
||||
--tls-cert-file ./redis/tests/tls/redis.crt \
|
||||
--tls-key-file ./redis/tests/tls/redis.key \
|
||||
--tls-ca-cert-file ./redis/tests/tls/ca.crt&
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Redis Cluster
|
||||
uses: vishnudxb/redis-cluster@1.0.5
|
||||
uses: vishnudxb/redis-cluster@1.0.9
|
||||
with:
|
||||
master1-port: 7000
|
||||
master2-port: 7001
|
||||
@@ -49,11 +33,17 @@ jobs:
|
||||
slave1-port: 7003
|
||||
slave2-port: 7004
|
||||
slave3-port: 7005
|
||||
sleep-duration: 10
|
||||
|
||||
- name: Wait for Redis to Start
|
||||
run: sleep 15
|
||||
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v4
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
|
||||
- name: Run Test
|
||||
env:
|
||||
TEST_REDIS_IMAGE: "docker.io/redis:${{ matrix.redis }}"
|
||||
run: cd ./redis && go test ./... -v -race
|
||||
|
9
.github/workflows/test-ristretto.yml
vendored
9
.github/workflows/test-ristretto.yml
vendored
@@ -15,14 +15,13 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.18.x
|
||||
- 1.19.x
|
||||
- 1.20.x
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v4
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Run Test
|
||||
|
46
.github/workflows/test-rueidis.yml
vendored
Normal file
46
.github/workflows/test-rueidis.yml
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'rueidis/**'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'rueidis/**'
|
||||
name: "Tests Rueidis"
|
||||
jobs:
|
||||
Tests:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
redis:
|
||||
- '6'
|
||||
- '7'
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Redis Cluster
|
||||
uses: vishnudxb/redis-cluster@1.0.9
|
||||
with:
|
||||
master1-port: 7000
|
||||
master2-port: 7001
|
||||
master3-port: 7002
|
||||
slave1-port: 7003
|
||||
slave2-port: 7004
|
||||
slave3-port: 7005
|
||||
sleep-duration: 10
|
||||
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
|
||||
- name: Run Test
|
||||
env:
|
||||
TEST_REDIS_IMAGE: "docker.io/redis:${{ matrix.redis }}"
|
||||
run: cd ./rueidis && go test ./... -v -race
|
20
.github/workflows/test-s3.yml
vendored
20
.github/workflows/test-s3.yml
vendored
@@ -15,24 +15,16 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.18.x
|
||||
- 1.19.x
|
||||
- 1.20.x
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
steps:
|
||||
- name: Install MinIO
|
||||
run: |
|
||||
docker run -d -p 9000:9000 --name minio minio/minio server /data
|
||||
|
||||
export AWS_ACCESS_KEY_ID=minioadmin
|
||||
export AWS_SECRET_ACCESS_KEY=minioadmin
|
||||
export AWS_EC2_METADATA_DISABLED=true
|
||||
|
||||
aws --endpoint-url http://127.0.0.1:9000/ s3 mb s3://testbucket
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v4
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Run Test
|
||||
env:
|
||||
TEST_MINIO_IMAGE: docker.io/minio/minio:latest
|
||||
run: cd ./s3 && go test ./... -v -race
|
||||
|
36
.github/workflows/test-scylladb.yml
vendored
Normal file
36
.github/workflows/test-scylladb.yml
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'scylladb/**'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'scylladb/**'
|
||||
|
||||
name: "Tests ScyllaDb"
|
||||
|
||||
jobs:
|
||||
Tests:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
|
||||
- name: Run Test
|
||||
env:
|
||||
TEST_SCYLLADB_IMAGE: "scylladb/scylla:6.2"
|
||||
run: cd ./scylladb && go test ./... -v -race
|
10
.github/workflows/test-sqlite3.yml
vendored
10
.github/workflows/test-sqlite3.yml
vendored
@@ -14,16 +14,14 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.17.x
|
||||
- 1.18.x
|
||||
- 1.19.x
|
||||
- 1.20.x
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v4
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
- name: Test SQLite3 - with -race check
|
||||
|
31
.github/workflows/test-surrealdb.yml
vendored
Normal file
31
.github/workflows/test-surrealdb.yml
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'surrealdb/**'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'surrealdb/**'
|
||||
name: "Tests SurrealDB"
|
||||
jobs:
|
||||
Tests:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
|
||||
- name: Run Test
|
||||
env:
|
||||
TEST_SURREALDB_IMAGE: surrealdb/surrealdb:latest
|
||||
run: cd ./surrealdb && go test ./... -v -race
|
36
.github/workflows/test-teshelpers-redis.yml
vendored
Normal file
36
.github/workflows/test-teshelpers-redis.yml
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'testhelpers/redis/**'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'testhelpers/redis/**'
|
||||
name: "Tests TestHelper Redis"
|
||||
jobs:
|
||||
Tests:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
redis:
|
||||
- '6'
|
||||
- '7'
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
|
||||
- name: Run Test
|
||||
env:
|
||||
TEST_REDIS_IMAGE: "docker.io/redis:${{ matrix.redis }}"
|
||||
working-directory: testhelpers/redis
|
||||
run: go test ./... -v -race
|
47
.github/workflows/test-valkey.yml
vendored
Normal file
47
.github/workflows/test-valkey.yml
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- 'valkey/**'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'valkey/**'
|
||||
- '.github/workflows/test-valkey.yml'
|
||||
name: "Tests Valkey"
|
||||
jobs:
|
||||
Tests:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
go-version:
|
||||
- 1.23.x
|
||||
- 1.24.x
|
||||
valkey:
|
||||
- '7'
|
||||
- '8'
|
||||
steps:
|
||||
- name: Fetch Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Valkey Cluster
|
||||
uses: vishnudxb/redis-cluster@1.0.9
|
||||
with:
|
||||
master1-port: 7000
|
||||
master2-port: 7001
|
||||
master3-port: 7002
|
||||
slave1-port: 7003
|
||||
slave2-port: 7004
|
||||
slave3-port: 7005
|
||||
sleep-duration: 10
|
||||
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '${{ matrix.go-version }}'
|
||||
|
||||
- name: Run Test
|
||||
env:
|
||||
TEST_VALKEY_IMAGE: "valkey/valkey:${{ matrix.valkey }}"
|
||||
run: cd ./valkey && go test ./... -v -race
|
5
.gitignore
vendored
5
.gitignore
vendored
@@ -22,9 +22,14 @@
|
||||
*.fasthttp.gz
|
||||
*.pprof
|
||||
*.workspace
|
||||
/tmp/
|
||||
|
||||
# Dependencies
|
||||
/vendor/
|
||||
vendor/
|
||||
vendor
|
||||
/Godeps/
|
||||
node_modules/
|
||||
|
||||
# Go workspace file
|
||||
go.work.sum
|
||||
|
22
MIGRATE.md
Normal file
22
MIGRATE.md
Normal file
@@ -0,0 +1,22 @@
|
||||
This document contains instructions for migrating to various storage versions.
|
||||
|
||||
### 0.1 -> 0.2
|
||||
v0.2 fixes [a bug](https://github.com/gofiber/fiber/issues/1258) in MYSQL, Postgres and Arangodb in which
|
||||
inserting non-UTF8 characters would trigger a panic due to the values being saved in a TEXT column instead of a
|
||||
BYTEA/BLOB column. Migration instructions (note you may need to adjust the table names if you have supplied a custom
|
||||
config to the storage):
|
||||
|
||||
**Postgres**
|
||||
```sql
|
||||
ALTER TABLE fiber_storage
|
||||
ALTER COLUMN v TYPE BYTEA USING v::bytea;
|
||||
```
|
||||
|
||||
**MYSQL**
|
||||
```sql
|
||||
ALTER TABLE fiber_storage MODIFY COLUMN v BLOB;
|
||||
```
|
||||
|
||||
**Arangodb**
|
||||
|
||||
No migration other then updating the library is necessary.
|
32
README.md
32
README.md
@@ -26,19 +26,34 @@ Premade storage drivers that implement the [`Storage`](https://github.com/gofibe
|
||||
// Storage interface for communicating with different database/key-value
|
||||
// providers. Visit https://github.com/gofiber/storage for more info.
|
||||
type Storage interface {
|
||||
// GetWithContext gets the value for the given key with a context.
|
||||
// `nil, nil` is returned when the key does not exist
|
||||
GetWithContext(ctx context.Context, key string) ([]byte, error)
|
||||
|
||||
// Get gets the value for the given key.
|
||||
// `nil, nil` is returned when the key does not exist
|
||||
Get(key string) ([]byte, error)
|
||||
|
||||
// SetWithContext stores the given value for the given key
|
||||
// with an expiration value, 0 means no expiration.
|
||||
SetWithContext(ctx context.Context, key string, val []byte, exp time.Duration) error
|
||||
|
||||
// Set stores the given value for the given key along
|
||||
// with an expiration value, 0 means no expiration.
|
||||
// Empty key or value will be ignored without an error.
|
||||
Set(key string, val []byte, exp time.Duration) error
|
||||
|
||||
// DeleteWithContext deletes the value for the given key with a context.
|
||||
// It returns no error if the storage does not contain the key,
|
||||
DeleteWithContext(ctx context.Context, key string) error
|
||||
|
||||
// Delete deletes the value for the given key.
|
||||
// It returns no error if the storage does not contain the key,
|
||||
Delete(key string) error
|
||||
|
||||
// ResetWithContext resets the storage and deletes all keys with a context.
|
||||
ResetWithContext(ctx context.Context) error
|
||||
|
||||
// Reset resets the storage and delete all keys.
|
||||
Reset() error
|
||||
|
||||
@@ -46,25 +61,38 @@ type Storage interface {
|
||||
// collectors and open connections.
|
||||
Close() error
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
## 📑 Storage Implementations
|
||||
|
||||
- [Aerospike](./aerospike/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+Aerospike%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-aerospike.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [ArangoDB](./arangodb/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+ArangoDB%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-arangodb.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [AzureBlob](./azureblob/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+Azure+Blob%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-azureblob.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [Badger](./badger/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+Badger%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-badger.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [Bbolt](./bbolt) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+Bbolt%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-bbolt.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [Cassandra](./cassandra/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+Cassandra%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-cassandra.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [CloudflareKV](./cloudflarekv/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+CloudflareKV%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-cloudflarekv.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [Coherence](./coherence/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+Coherence%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-coherence.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [Couchbase](./couchbase/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+Couchbase%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-couchbase.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [DynamoDB](./dynamodb/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+DynamoDB%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-dynamodb.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [Etcd](./etcd/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+Etcd%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-etcd.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [LevelDB](./leveldb/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+LevelDB%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-leveldb.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" alt="LevelDB Tests Status"/> </a>
|
||||
- [Memcache](./memcache/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+Memcache%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-memcache.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [Memory](./memory/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+Local+Storage%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-memory.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [Minio](./minio/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+Minio%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-minio.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [MockStorage](./mockstorage/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+MockStorage%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-mockstorage.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [MongoDB](./mongodb/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+Mongodb%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-mongodb.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [MSSQL](./mssql/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+MSSQL%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-mssql.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [MySQL](./mysql/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+MySQL%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-mysql.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [NATS](./nats/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests%20Nats%20Driver%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-nats.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [Neo4j](./neo4j/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+Neo4j%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-neo4j.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [Pebble](./pebble/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+Pebble%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-pebble.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [Postgres](./postgres/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+Postgres%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-postgres.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [Redis](./redis/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+Redis%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-redis.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [Rueidis](./rueidis/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+rueidis%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-rueidis.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [S3](./s3/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+S3%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-s3.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [ScyllaDB](./scylladb/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+scylladb%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-scylladb.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [SQLite3](./sqlite3/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+Sqlite3%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-sqlite3.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
|
||||
- [ClickHouse](./clickhouse/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+Clickhouse%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-clickhouse.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [Valkey](./valkey/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+valkey%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-valkey.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
||||
- [SurrealDB](./surrealdb/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+surrealdb%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-surrealdb.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
|
119
aerospike/README.md
Normal file
119
aerospike/README.md
Normal file
@@ -0,0 +1,119 @@
|
||||
---
|
||||
id: aerospike
|
||||
title: Aerospike
|
||||
---
|
||||
|
||||

|
||||
[](https://gofiber.io/discord)
|
||||

|
||||
|
||||
An Aerospike client driver using `aerospike/aerospike-client-go` and [aerospike/aerospike-client-go](https://github.com/aerospike/aerospike-client-go).
|
||||
|
||||
**Note: Requires Go 1.23 and above**
|
||||
|
||||
### Table of Contents
|
||||
|
||||
- [Signatures](#signatures)
|
||||
- [Installation](#installation)
|
||||
- [Examples](#examples)
|
||||
- [Config](#config)
|
||||
- [Default Config](#default-config)
|
||||
|
||||
### Signatures
|
||||
|
||||
```go
|
||||
func New(config ...Config) Storage
|
||||
func (s *Storage) Get(key string) ([]byte, error)
|
||||
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
|
||||
func (s *Storage) Delete(key string) error
|
||||
func (s *Storage) Reset() error
|
||||
func (s *Storage) Close() error
|
||||
func (s *Storage) Conn() driver.Client
|
||||
func (s *Storage) GetSchemaInfo() *SchemaInfo
|
||||
```
|
||||
|
||||
### Installation
|
||||
|
||||
Aerospike is tested on the 2 last [Go versions](https://golang.org/dl/) with support for modules. So make sure to initialize one first if you didn't do that yet:
|
||||
|
||||
```bash
|
||||
go mod init github.com/<user>/<repo>
|
||||
```
|
||||
|
||||
And then install the aerospike implementation:
|
||||
|
||||
```bash
|
||||
go get github.com/gofiber/storage/aerospike
|
||||
```
|
||||
|
||||
### Examples
|
||||
|
||||
Import the storage package.
|
||||
|
||||
```go
|
||||
import "github.com/gofiber/storage/aerospike"
|
||||
```
|
||||
|
||||
You can use the following possibilities to create a storage:
|
||||
|
||||
```go
|
||||
// Initialize default config
|
||||
store := aerospike.New()
|
||||
|
||||
// Initialize custom config
|
||||
store := aerospike.New(aerospike.Config{
|
||||
Hosts: []*aerospike.Host{aerospike.NewHost("localhost", 3000)},
|
||||
Namespace: "test", // Default namespace
|
||||
SetName: "fiber",
|
||||
Reset: false,
|
||||
Expiration: 1 * time.Hour,
|
||||
SchemaVersion: 1,
|
||||
SchemaDescription: "Default Fiber storage schema",
|
||||
ForceSchemaUpdate: false,
|
||||
})
|
||||
```
|
||||
|
||||
### Config
|
||||
|
||||
```go
|
||||
type Config struct {
|
||||
// Hosts is a list of Aerospike server hosts
|
||||
Hosts []*aerospike.Host
|
||||
|
||||
// Namespace is the Aerospike namespace
|
||||
Namespace string
|
||||
|
||||
// Set is the Aerospike set
|
||||
SetName string
|
||||
|
||||
// Reset clears any existing keys in existing Set
|
||||
Reset bool
|
||||
|
||||
// Expiration is the default expiration time of entries
|
||||
Expiration time.Duration
|
||||
|
||||
// SchemaVersion indicates the schema version to use
|
||||
SchemaVersion int
|
||||
|
||||
// SchemaDescription provides additional info about the schema
|
||||
SchemaDescription string
|
||||
|
||||
// ForceSchemaUpdate forces schema update even if version matches
|
||||
ForceSchemaUpdate bool
|
||||
}
|
||||
```
|
||||
|
||||
### Default Config
|
||||
Used only for optional fields
|
||||
```go
|
||||
var ConfigDefault = Config{
|
||||
Hosts: []*aerospike.Host{aerospike.NewHost("localhost", 3000)},
|
||||
Namespace: "test", // Default namespace
|
||||
SetName: "fiber",
|
||||
Reset: false,
|
||||
Expiration: 1 * time.Hour,
|
||||
SchemaVersion: 1,
|
||||
SchemaDescription: "Default Fiber storage schema",
|
||||
ForceSchemaUpdate: false,
|
||||
}
|
||||
```
|
321
aerospike/aerospike.go
Normal file
321
aerospike/aerospike.go
Normal file
@@ -0,0 +1,321 @@
|
||||
package aerospike
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"github.com/aerospike/aerospike-client-go/v8"
|
||||
)
|
||||
|
||||
// Storage interface that is implemented by storage drivers
|
||||
type Storage struct {
|
||||
client *aerospike.Client
|
||||
namespace string
|
||||
setName string
|
||||
reset bool
|
||||
expiration time.Duration
|
||||
schemaInfo *SchemaInfo
|
||||
}
|
||||
|
||||
// SchemaInfo holds information about the schema structure
|
||||
type SchemaInfo struct {
|
||||
Version int
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
Description string
|
||||
}
|
||||
|
||||
// New creates a new storage
|
||||
func New(config ...Config) *Storage {
|
||||
|
||||
// Set default config
|
||||
cfg := configDefault(config...)
|
||||
|
||||
// connect to the host
|
||||
cp := aerospike.NewClientPolicy()
|
||||
cp.Timeout = cfg.InitialConnectionTimeout
|
||||
|
||||
// Create client
|
||||
client, err := aerospike.NewClientWithPolicyAndHost(cp, cfg.Hosts...)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// Create storage
|
||||
store := &Storage{
|
||||
client: client,
|
||||
namespace: cfg.Namespace,
|
||||
setName: cfg.SetName,
|
||||
reset: cfg.Reset,
|
||||
expiration: cfg.Expiration,
|
||||
}
|
||||
|
||||
// Reset keys if set
|
||||
if cfg.Reset {
|
||||
if err := store.Reset(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
// Check and create schema
|
||||
if err := store.createOrVerifySchema(cfg.SchemaVersion, cfg.SchemaDescription, cfg.ForceSchemaUpdate); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// No additional GC needed as Aerospike handles TTL internally
|
||||
|
||||
return store
|
||||
}
|
||||
|
||||
// createOrVerifySchema checks if schema exists and creates or updates if needed
|
||||
func (s *Storage) createOrVerifySchema(version int, description string, forceUpdate bool) error {
|
||||
|
||||
// Schema info is stored with a special key
|
||||
schemaKey, err := aerospike.NewKey(s.namespace, s.setName, "_schema_info")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Try to get existing schema
|
||||
record, err := s.client.Get(nil, schemaKey, "version", "created_at", "updated_at", "description")
|
||||
if err != nil {
|
||||
if err.Matches(aerospike.ErrKeyNotFound.ResultCode) {
|
||||
// Schema doesn't exist, create it
|
||||
return s.createSchema(schemaKey, version, description)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
// Schema exists, check version
|
||||
existingVersion, _ := record.Bins["version"].(int)
|
||||
existingDescription, _ := record.Bins["description"].(string)
|
||||
|
||||
if existingVersion < version || forceUpdate {
|
||||
// Update schema if version is higher or force update is true
|
||||
return s.updateSchema(schemaKey, version, description, existingVersion)
|
||||
}
|
||||
|
||||
// Load existing schema info
|
||||
createdAtStr, _ := record.Bins["created_at"].(string)
|
||||
updatedAtStr, _ := record.Bins["updated_at"].(string)
|
||||
|
||||
createdAt, _ := time.Parse(time.RFC3339, createdAtStr)
|
||||
updatedAt, _ := time.Parse(time.RFC3339, updatedAtStr)
|
||||
|
||||
// Store schema info
|
||||
s.schemaInfo = &SchemaInfo{
|
||||
Version: existingVersion,
|
||||
CreatedAt: createdAt,
|
||||
UpdatedAt: updatedAt,
|
||||
Description: existingDescription,
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// createSchema creates a new schema
|
||||
func (s *Storage) createSchema(schemaKey *aerospike.Key, version int, description string) error {
|
||||
|
||||
now := time.Now()
|
||||
nowStr := now.Format(time.RFC3339)
|
||||
|
||||
// Create schema record
|
||||
bins := aerospike.BinMap{
|
||||
"version": version,
|
||||
"created_at": nowStr,
|
||||
"updated_at": nowStr,
|
||||
"description": description,
|
||||
}
|
||||
|
||||
// Never expire the schema info
|
||||
writePolicy := aerospike.NewWritePolicy(0, 0)
|
||||
|
||||
// Store in Aerospike
|
||||
err := s.client.Put(writePolicy, schemaKey, bins)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Store schema info
|
||||
s.schemaInfo = &SchemaInfo{
|
||||
Version: version,
|
||||
CreatedAt: now,
|
||||
UpdatedAt: now,
|
||||
Description: description,
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// updateSchema updates an existing schema
|
||||
func (s *Storage) updateSchema(schemaKey *aerospike.Key, version int, description string, oldVersion int) error {
|
||||
now := time.Now()
|
||||
nowStr := now.Format(time.RFC3339)
|
||||
|
||||
// Update schema record
|
||||
bins := aerospike.BinMap{
|
||||
"version": version,
|
||||
"updated_at": nowStr,
|
||||
"description": description,
|
||||
}
|
||||
|
||||
// Never expire the schema info
|
||||
writePolicy := aerospike.NewWritePolicy(0, 0)
|
||||
|
||||
// Store in Aerospike
|
||||
err := s.client.Put(writePolicy, schemaKey, bins)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Get creation date (it shouldn't change on update)
|
||||
createdAtRecord, err := s.client.Get(nil, schemaKey, "created_at")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
createdAtStr, _ := createdAtRecord.Bins["created_at"].(string)
|
||||
createdAt, _ := time.Parse(time.RFC3339, createdAtStr)
|
||||
|
||||
// Store schema info
|
||||
s.schemaInfo = &SchemaInfo{
|
||||
Version: version,
|
||||
CreatedAt: createdAt,
|
||||
UpdatedAt: now,
|
||||
Description: description,
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetSchemaInfo returns the current schema information
|
||||
func (s *Storage) GetSchemaInfo() *SchemaInfo {
|
||||
return s.schemaInfo
|
||||
}
|
||||
|
||||
// Get value by key
|
||||
func (s *Storage) Get(key string) ([]byte, error) {
|
||||
k, err := aerospike.NewKey(s.namespace, s.setName, key)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
record, err := s.client.Get(nil, k, "value")
|
||||
if err != nil {
|
||||
if err.Matches(aerospike.ErrKeyNotFound.ResultCode) {
|
||||
return nil, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
data, ok := record.Bins["value"].([]byte)
|
||||
if !ok {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
// GetWithContext gets value by key (dummy context support)
|
||||
func (s *Storage) GetWithContext(ctx context.Context, key string) ([]byte, error) {
|
||||
return s.Get(key)
|
||||
}
|
||||
|
||||
// Set key with value
|
||||
func (s *Storage) Set(key string, val []byte, exp time.Duration) error {
|
||||
k, err := aerospike.NewKey(s.namespace, s.setName, key)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
expiration := s.expiration
|
||||
if exp != 0 {
|
||||
expiration = exp
|
||||
}
|
||||
|
||||
// Convert to seconds with a minimum of 1
|
||||
ttl := uint32(expiration.Seconds())
|
||||
if ttl < 1 {
|
||||
ttl = 1
|
||||
}
|
||||
|
||||
writePolicy := aerospike.NewWritePolicy(0, ttl)
|
||||
bins := aerospike.BinMap{
|
||||
"value": val,
|
||||
}
|
||||
|
||||
return s.client.Put(writePolicy, k, bins)
|
||||
}
|
||||
|
||||
// SetWithContext sets value by key (dummy context support)
|
||||
func (s *Storage) SetWithContext(ctx context.Context, key string, val []byte, exp time.Duration) error {
|
||||
return s.Set(key, val, exp)
|
||||
}
|
||||
|
||||
// Delete key
|
||||
func (s *Storage) Delete(key string) error {
|
||||
k, err := aerospike.NewKey(s.namespace, s.setName, key)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = s.client.Delete(nil, k)
|
||||
return err
|
||||
}
|
||||
|
||||
// DeleteWithContext deletes key (dummy context support)
|
||||
func (s *Storage) DeleteWithContext(ctx context.Context, key string) error {
|
||||
return s.Delete(key)
|
||||
}
|
||||
|
||||
// Reset all keys
|
||||
func (s *Storage) Reset() error {
|
||||
// Use ScanAll which returns a Recordset
|
||||
scanPolicy := aerospike.NewScanPolicy()
|
||||
// Note: ConcurrentNodes no longer exists in v8
|
||||
|
||||
recordset, err := s.client.ScanAll(scanPolicy, s.namespace, s.setName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Ensure recordset is closed when we're done
|
||||
defer func() {
|
||||
if err := recordset.Close(); err != nil {
|
||||
log.Printf("Error closing recordset: %v\n", err)
|
||||
}
|
||||
}()
|
||||
|
||||
// Create a write policy for deletes
|
||||
writePolicy := aerospike.NewWritePolicy(0, 0)
|
||||
|
||||
// Iterate through all records and delete them
|
||||
for result := range recordset.Results() {
|
||||
if result.Err != nil {
|
||||
// Log the error but continue with other records
|
||||
log.Printf("Error scanning: %v\n", result.Err)
|
||||
continue
|
||||
}
|
||||
|
||||
// Delete the record
|
||||
_, err = s.client.Delete(writePolicy, result.Record.Key)
|
||||
if err != nil {
|
||||
// Log the error but continue with other records
|
||||
log.Printf("Error deleting key %v: %v\n", result.Record.Key, err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// ResetWithContext resets all keys (dummy context support)
|
||||
func (s *Storage) ResetWithContext(ctx context.Context) error {
|
||||
return s.Reset()
|
||||
}
|
||||
|
||||
// Close the storage
|
||||
func (s *Storage) Close() error {
|
||||
s.client.Close()
|
||||
return nil
|
||||
}
|
229
aerospike/aerospike_test.go
Normal file
229
aerospike/aerospike_test.go
Normal file
@@ -0,0 +1,229 @@
|
||||
package aerospike
|
||||
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/aerospike/aerospike-client-go/v8"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/testcontainers/testcontainers-go"
|
||||
tcaerospike "github.com/testcontainers/testcontainers-go/modules/aerospike"
|
||||
)
|
||||
|
||||
const (
|
||||
// aerospikeImage is the default image used for running Aerospike in tests.
|
||||
aerospikeImage = "aerospike/aerospike-server:latest"
|
||||
aerospikeImageEnvVar string = "TEST_AEROSPIKE_IMAGE"
|
||||
aerospikePort = "3000/tcp"
|
||||
fabricPort = "3001/tcp"
|
||||
heartbeatPort = "3002/tcp"
|
||||
infoPort = "3003/tcp"
|
||||
aerospikeReadyLog = "migrations: complete"
|
||||
aerospikeNamespace = "test"
|
||||
)
|
||||
|
||||
// startAerospikeContainer starts an Aerospike container for testing
|
||||
func startAerospikeContainer(t testing.TB, ctx context.Context) testcontainers.Container {
|
||||
t.Helper()
|
||||
|
||||
// Get custom image from env if specified
|
||||
image := aerospikeImage
|
||||
if envImage := os.Getenv(aerospikeImageEnvVar); envImage != "" {
|
||||
image = envImage
|
||||
}
|
||||
|
||||
// Start container
|
||||
ctr, err := tcaerospike.Run(ctx, image)
|
||||
testcontainers.CleanupContainer(t, ctr)
|
||||
require.NoError(t, err)
|
||||
|
||||
return ctr
|
||||
}
|
||||
|
||||
// newTestStore creates a client connected to the test container
|
||||
func newTestStore(t testing.TB) *Storage {
|
||||
t.Helper()
|
||||
|
||||
c := startAerospikeContainer(t, context.Background())
|
||||
|
||||
// Extract host and port
|
||||
host, err := c.Host(context.TODO())
|
||||
require.NoError(t, err)
|
||||
|
||||
port, err := c.MappedPort(context.TODO(), aerospikePort)
|
||||
require.NoError(t, err)
|
||||
|
||||
return New(Config{
|
||||
Hosts: []*aerospike.Host{aerospike.NewHost(host, port.Int())},
|
||||
Reset: true,
|
||||
Namespace: aerospikeNamespace,
|
||||
})
|
||||
}
|
||||
|
||||
// Test_AeroSpikeDB_Get tests the Get method
|
||||
func Test_AeroSpikeDB_Get(t *testing.T) {
|
||||
var (
|
||||
key = "john"
|
||||
val = []byte("doe")
|
||||
)
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
// Set a value
|
||||
err := testStore.Set(key, val, 0)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Get the value
|
||||
retrievedVal, err := testStore.Get(key)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, val, retrievedVal)
|
||||
}
|
||||
|
||||
// Test_AeroSpikeDB_Delete tests the Delete method
|
||||
func Test_AeroSpikeDB_Delete(t *testing.T) {
|
||||
|
||||
var (
|
||||
key = "john"
|
||||
val = []byte("doe")
|
||||
)
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
// Set a value
|
||||
err := testStore.Set(key, val, 0)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Delete the value
|
||||
err = testStore.Delete(key)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Try to get the deleted value
|
||||
retrievedVal, err := testStore.Get(key)
|
||||
require.NoError(t, err)
|
||||
require.Nil(t, retrievedVal)
|
||||
}
|
||||
|
||||
// Test_AeroSpikeDB_SetWithExpiration tests the Set method with expiration
|
||||
func Test_AeroSpikeDB_SetWithExpiration(t *testing.T) {
|
||||
var (
|
||||
key = "temp"
|
||||
val = []byte("value")
|
||||
)
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
// Set a value with 1 second expiration
|
||||
err := testStore.Set(key, val, 1*time.Second)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Verify the value exists initially
|
||||
retrievedVal, err := testStore.Get(key)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, val, retrievedVal)
|
||||
|
||||
// Wait for expiration
|
||||
time.Sleep(2 * time.Second)
|
||||
|
||||
// Verify the value is gone
|
||||
retrievedVal, err = testStore.Get(key)
|
||||
require.NoError(t, err)
|
||||
require.Nil(t, retrievedVal)
|
||||
}
|
||||
|
||||
// Test_AeroSpikeDB_Reset tests the Reset method
|
||||
func Test_AeroSpikeDB_Reset(t *testing.T) {
|
||||
|
||||
var (
|
||||
key1 = "john"
|
||||
val1 = []byte("doe")
|
||||
key2 = "jane"
|
||||
val2 = []byte("smith")
|
||||
)
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
// Set multiple values
|
||||
err := testStore.Set(key1, val1, 0)
|
||||
require.NoError(t, err)
|
||||
err = testStore.Set(key2, val2, 0)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Reset the store
|
||||
err = testStore.Reset()
|
||||
require.NoError(t, err)
|
||||
|
||||
// Ensure keys are deleted
|
||||
retrievedVal1, err := testStore.Get(key1)
|
||||
require.NoError(t, err)
|
||||
require.Nil(t, retrievedVal1)
|
||||
|
||||
retrievedVal2, err := testStore.Get(key2)
|
||||
require.NoError(t, err)
|
||||
require.Nil(t, retrievedVal2)
|
||||
}
|
||||
|
||||
// Test_AeroSpikeDB_GetSchemaInfo tests the GetSchemaInfo method
|
||||
func Test_AeroSpikeDB_GetSchemaInfo(t *testing.T) {
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
// Get schema info
|
||||
schemaInfo := testStore.GetSchemaInfo()
|
||||
require.NotNil(t, schemaInfo)
|
||||
require.GreaterOrEqual(t, schemaInfo.Version, 1)
|
||||
}
|
||||
|
||||
func Benchmark_AeroSpikeDB_Set(b *testing.B) {
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
testStore := newTestStore(b)
|
||||
defer testStore.Close()
|
||||
|
||||
var err error
|
||||
for i := 0; i < b.N; i++ {
|
||||
err = testStore.Set("john", []byte("doe"), 0)
|
||||
}
|
||||
|
||||
require.NoError(b, err)
|
||||
}
|
||||
|
||||
func Benchmark_AeroSpikeDB_Get(b *testing.B) {
|
||||
testStore := newTestStore(b)
|
||||
defer testStore.Close()
|
||||
|
||||
err := testStore.Set("john", []byte("doe"), 0)
|
||||
require.NoError(b, err)
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
_, err = testStore.Get("john")
|
||||
}
|
||||
|
||||
require.NoError(b, err)
|
||||
}
|
||||
|
||||
func Benchmark_AeroSpikeDB_SetAndDelete(b *testing.B) {
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
testStore := newTestStore(b)
|
||||
defer testStore.Close()
|
||||
|
||||
var err error
|
||||
for i := 0; i < b.N; i++ {
|
||||
_ = testStore.Set("john", []byte("doe"), 0)
|
||||
err = testStore.Delete("john")
|
||||
}
|
||||
|
||||
require.NoError(b, err)
|
||||
}
|
89
aerospike/config.go
Normal file
89
aerospike/config.go
Normal file
@@ -0,0 +1,89 @@
|
||||
package aerospike
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/aerospike/aerospike-client-go/v8"
|
||||
)
|
||||
|
||||
// Config defines the config for storage.
|
||||
type Config struct {
|
||||
// Hosts is a list of Aerospike server hosts
|
||||
Hosts []*aerospike.Host
|
||||
|
||||
// Namespace is the Aerospike namespace
|
||||
Namespace string
|
||||
|
||||
// SetName is the Aerospike Set name
|
||||
SetName string
|
||||
|
||||
// Reset clears any existing keys in existing Set
|
||||
Reset bool
|
||||
|
||||
// Expiration is the default expiration time of entries
|
||||
Expiration time.Duration
|
||||
|
||||
// SchemaVersion indicates the schema version to use
|
||||
SchemaVersion int
|
||||
|
||||
// SchemaDescription provides additional info about the schema
|
||||
SchemaDescription string
|
||||
|
||||
// ForceSchemaUpdate forces schema update even if version matches
|
||||
ForceSchemaUpdate bool
|
||||
|
||||
// Initial host connection timeout duration. The timeout when opening a connection
|
||||
// to the server host for the first time.
|
||||
InitialConnectionTimeout time.Duration
|
||||
}
|
||||
|
||||
// ConfigDefault is the default config
|
||||
var ConfigDefault = Config{
|
||||
Hosts: []*aerospike.Host{aerospike.NewHost("localhost", 3000)},
|
||||
Namespace: "test", // Default namespace
|
||||
SetName: "fiber",
|
||||
Reset: false,
|
||||
Expiration: 1 * time.Hour,
|
||||
SchemaVersion: 1,
|
||||
SchemaDescription: "Default Fiber storage schema",
|
||||
ForceSchemaUpdate: false,
|
||||
InitialConnectionTimeout: 10 * time.Second,
|
||||
}
|
||||
|
||||
// Helper function to set default values
|
||||
func configDefault(config ...Config) Config {
|
||||
// Return default config if nothing provided
|
||||
if len(config) < 1 {
|
||||
return ConfigDefault
|
||||
}
|
||||
|
||||
// Override default config
|
||||
cfg := config[0]
|
||||
|
||||
// Set default values for missing fields
|
||||
if cfg.Hosts == nil {
|
||||
cfg.Hosts = ConfigDefault.Hosts
|
||||
}
|
||||
if cfg.Namespace == "" {
|
||||
cfg.Namespace = ConfigDefault.Namespace
|
||||
}
|
||||
if cfg.SetName == "" {
|
||||
cfg.SetName = ConfigDefault.SetName
|
||||
}
|
||||
// Reset is a boolean, so we can't check for zero value
|
||||
// It's maintained as-is from user config
|
||||
if cfg.Expiration == 0 {
|
||||
cfg.Expiration = ConfigDefault.Expiration
|
||||
}
|
||||
if cfg.SchemaVersion == 0 {
|
||||
cfg.SchemaVersion = ConfigDefault.SchemaVersion
|
||||
}
|
||||
if cfg.SchemaDescription == "" {
|
||||
cfg.SchemaDescription = ConfigDefault.SchemaDescription
|
||||
}
|
||||
if cfg.InitialConnectionTimeout == 0 {
|
||||
cfg.InitialConnectionTimeout = ConfigDefault.InitialConnectionTimeout
|
||||
}
|
||||
|
||||
return cfg
|
||||
}
|
68
aerospike/go.mod
Normal file
68
aerospike/go.mod
Normal file
@@ -0,0 +1,68 @@
|
||||
module github.com/gofiber/storage/aerospike
|
||||
|
||||
go 1.23.0
|
||||
|
||||
require (
|
||||
github.com/aerospike/aerospike-client-go/v8 v8.2.2
|
||||
github.com/stretchr/testify v1.10.0
|
||||
github.com/testcontainers/testcontainers-go v0.37.0
|
||||
github.com/testcontainers/testcontainers-go/modules/aerospike v0.37.0
|
||||
)
|
||||
|
||||
require (
|
||||
dario.cat/mergo v1.0.1 // indirect
|
||||
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect
|
||||
github.com/Microsoft/go-winio v0.6.2 // indirect
|
||||
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
|
||||
github.com/containerd/log v0.1.0 // indirect
|
||||
github.com/containerd/platforms v0.2.1 // indirect
|
||||
github.com/cpuguy83/dockercfg v0.3.2 // indirect
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/distribution/reference v0.6.0 // indirect
|
||||
github.com/docker/docker v28.0.4+incompatible // indirect
|
||||
github.com/docker/go-connections v0.5.0 // indirect
|
||||
github.com/docker/go-units v0.5.0 // indirect
|
||||
github.com/ebitengine/purego v0.8.2 // indirect
|
||||
github.com/felixge/httpsnoop v1.0.4 // indirect
|
||||
github.com/go-logr/logr v1.4.2 // indirect
|
||||
github.com/go-logr/stdr v1.2.2 // indirect
|
||||
github.com/go-ole/go-ole v1.3.0 // indirect
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/google/uuid v1.6.0 // indirect
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.25.1 // indirect
|
||||
github.com/klauspost/compress v1.18.0 // indirect
|
||||
github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 // indirect
|
||||
github.com/magiconair/properties v1.8.10 // indirect
|
||||
github.com/moby/docker-image-spec v1.3.1 // indirect
|
||||
github.com/moby/patternmatcher v0.6.0 // indirect
|
||||
github.com/moby/sys/sequential v0.6.0 // indirect
|
||||
github.com/moby/sys/user v0.4.0 // indirect
|
||||
github.com/moby/sys/userns v0.1.0 // indirect
|
||||
github.com/moby/term v0.5.2 // indirect
|
||||
github.com/morikuni/aec v1.0.0 // indirect
|
||||
github.com/opencontainers/go-digest v1.0.0 // indirect
|
||||
github.com/opencontainers/image-spec v1.1.1 // indirect
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect
|
||||
github.com/rogpeppe/go-internal v1.14.1 // indirect
|
||||
github.com/shirou/gopsutil/v4 v4.25.3 // indirect
|
||||
github.com/sirupsen/logrus v1.9.3 // indirect
|
||||
github.com/tklauser/go-sysconf v0.3.15 // indirect
|
||||
github.com/tklauser/numcpus v0.10.0 // indirect
|
||||
github.com/wadey/gocovmerge v0.0.0-20160331181800-b5bfa59ec0ad // indirect
|
||||
github.com/yuin/gopher-lua v1.1.1 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.4 // indirect
|
||||
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect
|
||||
go.opentelemetry.io/otel v1.35.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.35.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.35.0 // indirect
|
||||
golang.org/x/crypto v0.37.0 // indirect
|
||||
golang.org/x/sync v0.13.0 // indirect
|
||||
golang.org/x/sys v0.32.0 // indirect
|
||||
golang.org/x/tools v0.32.0 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250102185135-69823020774d // indirect
|
||||
google.golang.org/grpc v1.69.2 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
205
aerospike/go.sum
Normal file
205
aerospike/go.sum
Normal file
@@ -0,0 +1,205 @@
|
||||
dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
|
||||
dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
|
||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU=
|
||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
|
||||
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg=
|
||||
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
|
||||
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
|
||||
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
|
||||
github.com/aerospike/aerospike-client-go/v8 v8.2.2 h1:NV1GxB+ATUb1cQtwaIS731A/6EkwuAX4/heh8CpvQOI=
|
||||
github.com/aerospike/aerospike-client-go/v8 v8.2.2/go.mod h1:H6CzKDoHxBj1yY/oQPci1bUIbEx2ATQtJ2GtZ+N64Wg=
|
||||
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
|
||||
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
||||
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
|
||||
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
|
||||
github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A=
|
||||
github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw=
|
||||
github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA=
|
||||
github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc=
|
||||
github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
|
||||
github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
|
||||
github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
|
||||
github.com/docker/docker v28.0.4+incompatible h1:JNNkBctYKurkw6FrHfKqY0nKIDf5nrbxjVBtS+cdcok=
|
||||
github.com/docker/docker v28.0.4+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
|
||||
github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
|
||||
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
|
||||
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
||||
github.com/ebitengine/purego v0.8.2 h1:jPPGWs2sZ1UgOSgD2bClL0MJIqu58nOmIcBuXr62z1I=
|
||||
github.com/ebitengine/purego v0.8.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
|
||||
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
|
||||
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
||||
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
|
||||
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
|
||||
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
|
||||
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
|
||||
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
|
||||
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
|
||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||
github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg=
|
||||
github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
|
||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.25.1 h1:VNqngBF40hVlDloBruUehVYC3ArSgIyScOAyMRqBxRg=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.25.1/go.mod h1:RBRO7fro65R6tjKzYgLAFo0t1QEXY1Dp+i/bvpRiqiQ=
|
||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
|
||||
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
|
||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 h1:PpXWgLPs+Fqr325bN2FD2ISlRRztXibcX6e8f5FR5Dc=
|
||||
github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg=
|
||||
github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE=
|
||||
github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
|
||||
github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
|
||||
github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
|
||||
github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk=
|
||||
github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
|
||||
github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU=
|
||||
github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko=
|
||||
github.com/moby/sys/user v0.4.0 h1:jhcMKit7SA80hivmFJcbB1vqmw//wU61Zdui2eQXuMs=
|
||||
github.com/moby/sys/user v0.4.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs=
|
||||
github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g=
|
||||
github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28=
|
||||
github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ=
|
||||
github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc=
|
||||
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
|
||||
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
|
||||
github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU=
|
||||
github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
|
||||
github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
|
||||
github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
|
||||
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
||||
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
|
||||
github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
|
||||
github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU=
|
||||
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
|
||||
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
|
||||
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
|
||||
github.com/shirou/gopsutil/v4 v4.25.3 h1:SeA68lsu8gLggyMbmCn8cmp97V1TI9ld9sVzAUcKcKE=
|
||||
github.com/shirou/gopsutil/v4 v4.25.3/go.mod h1:xbuxyoZj+UsgnZrENu3lQivsngRR5BdjbJwf2fv4szA=
|
||||
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
|
||||
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
|
||||
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/testcontainers/testcontainers-go v0.37.0 h1:L2Qc0vkTw2EHWQ08djon0D2uw7Z/PtHS/QzZZ5Ra/hg=
|
||||
github.com/testcontainers/testcontainers-go v0.37.0/go.mod h1:QPzbxZhQ6Bclip9igjLFj6z0hs01bU8lrl2dHQmgFGM=
|
||||
github.com/testcontainers/testcontainers-go/modules/aerospike v0.37.0 h1:Hf+CIs1aOk+7LTgx8AeQWm43PN5ONnpSH1Xd3Dnp5fg=
|
||||
github.com/testcontainers/testcontainers-go/modules/aerospike v0.37.0/go.mod h1:0sLjd5o8GsywSX6Jl+b5OiDk2bBm72yHYIUaGFB2+DE=
|
||||
github.com/tklauser/go-sysconf v0.3.15 h1:VE89k0criAymJ/Os65CSn1IXaol+1wrsFHEB8Ol49K4=
|
||||
github.com/tklauser/go-sysconf v0.3.15/go.mod h1:Dmjwr6tYFIseJw7a3dRLJfsHAMXZ3nEnL/aZY+0IuI4=
|
||||
github.com/tklauser/numcpus v0.10.0 h1:18njr6LDBk1zuna922MgdjQuJFjrdppsZG60sHGfjso=
|
||||
github.com/tklauser/numcpus v0.10.0/go.mod h1:BiTKazU708GQTYF4mB+cmlpT2Is1gLk7XVuEeem8LsQ=
|
||||
github.com/wadey/gocovmerge v0.0.0-20160331181800-b5bfa59ec0ad h1:W0LEBv82YCGEtcmPA3uNZBI33/qF//HAAs3MawDjRa0=
|
||||
github.com/wadey/gocovmerge v0.0.0-20160331181800-b5bfa59ec0ad/go.mod h1:Hy8o65+MXnS6EwGElrSRjUzQDLXreJlzYLlWiHtt8hM=
|
||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/gopher-lua v1.1.1 h1:kYKnWBjvbNP4XLT3+bPEwAXJx262OhaHDWDVOPjL46M=
|
||||
github.com/yuin/gopher-lua v1.1.1/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw=
|
||||
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
|
||||
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
|
||||
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 h1:sbiXRNDSWJOTobXh5HyQKjq6wUC5tNybqjIqDpAY4CU=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0/go.mod h1:69uWxva0WgAA/4bu2Yy70SLDBwZXuQ6PbBpbsa5iZrQ=
|
||||
go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=
|
||||
go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0 h1:1fTNlAIJZGWLP5FVu0fikVry1IsiUnXjf7QFvoNN3Xw=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0/go.mod h1:zjPK58DtkqQFn+YUMbx0M2XV3QgKU0gS9LeGohREyK4=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 h1:IeMeyr1aBvBiPVYihXIaeIZba6b8E1bYp7lbdxK8CQg=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0/go.mod h1:oVdCUtjq9MK9BlS7TtucsQwUcXcymNiEDjgDD2jMtZU=
|
||||
go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M=
|
||||
go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE=
|
||||
go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY=
|
||||
go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5JpUCaEqEI9o=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w=
|
||||
go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=
|
||||
go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=
|
||||
go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
|
||||
go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
|
||||
golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
|
||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY=
|
||||
golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610=
|
||||
golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
|
||||
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o=
|
||||
golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0=
|
||||
golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU=
|
||||
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44=
|
||||
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU=
|
||||
golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250102185135-69823020774d h1:H8tOf8XM88HvKqLTxe755haY6r1fqqzLbEnfrmLXlSA=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250102185135-69823020774d/go.mod h1:2v7Z7gP2ZUOGsaFyxATQSRoBnKygqVq2Cwnvom7QiqY=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250409194420-de1ac958c67a h1:GIqLhp/cYUkuGuiT+vJk8vhOP86L4+SP5j8yXgeVpvI=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250409194420-de1ac958c67a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
|
||||
google.golang.org/grpc v1.69.2 h1:U3S9QEtbXC0bYNvRtcoklF3xGtLViumSYxWykJS+7AU=
|
||||
google.golang.org/grpc v1.69.2/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
|
||||
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
|
||||
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
|
||||
gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
|
@@ -6,11 +6,11 @@ title: ArangoDB
|
||||

|
||||
[](https://gofiber.io/discord)
|
||||

|
||||

|
||||

|
||||
|
||||
A ArangoDB storage driver using `arangodb/go-driver` and [arangodb/go-driver](https://github.com/arangodb/go-driver).
|
||||
|
||||
**Note: Requires Go 1.19 and above**
|
||||
|
||||
### Table of Contents
|
||||
- [Signatures](#signatures)
|
||||
- [Installation](#installation)
|
||||
@@ -21,9 +21,13 @@ A ArangoDB storage driver using `arangodb/go-driver` and [arangodb/go-driver](ht
|
||||
### Signatures
|
||||
```go
|
||||
func New(config ...Config) Storage
|
||||
func (s *Storage) GetWithContext(ctx context.Context, key string) ([]byte, error)
|
||||
func (s *Storage) Get(key string) ([]byte, error)
|
||||
func (s *Storage) SetWithContext(ctx context.Context, key string, val []byte, exp time.Duration) error
|
||||
func (s *Storage) Set(key string, val []byte, exp time.Duration) error
|
||||
func (s *Storage) DeleteWithContext(ctx context.Context, key string) error
|
||||
func (s *Storage) Delete(key string) error
|
||||
func (s *Storage) ResetWithContext(ctx context.Context) error
|
||||
func (s *Storage) Reset() error
|
||||
func (s *Storage) Close() error
|
||||
func (s *Storage) Conn() driver.Client
|
||||
@@ -33,15 +37,15 @@ ArangoDB is tested on the 2 last (1.14/1.15) [Go versions](https://golang.org/dl
|
||||
```bash
|
||||
go mod init github.com/<user>/<repo>
|
||||
```
|
||||
And then install the mysql implementation:
|
||||
And then install the arangodb implementation:
|
||||
```bash
|
||||
go get github.com/gofiber/storage/arangodb
|
||||
go get github.com/gofiber/storage/arangodb/v2
|
||||
```
|
||||
|
||||
### Examples
|
||||
Import the storage package.
|
||||
```go
|
||||
import "github.com/gofiber/storage/arangodb"
|
||||
import "github.com/gofiber/storage/arangodb/v2"
|
||||
```
|
||||
|
||||
You can use the following possibilities to create a storage:
|
||||
|
@@ -7,7 +7,7 @@ import (
|
||||
|
||||
"github.com/arangodb/go-driver"
|
||||
"github.com/arangodb/go-driver/http"
|
||||
"github.com/gofiber/utils"
|
||||
"github.com/gofiber/utils/v2"
|
||||
)
|
||||
|
||||
// Storage interface that is implemented by storage providers
|
||||
@@ -116,14 +116,12 @@ func New(config ...Config) *Storage {
|
||||
return store
|
||||
}
|
||||
|
||||
// Get value by key
|
||||
func (s *Storage) Get(key string) ([]byte, error) {
|
||||
// GetWithContext value by key with given context
|
||||
func (s *Storage) GetWithContext(ctx context.Context, key string) ([]byte, error) {
|
||||
if len(key) <= 0 {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
// Check if the document exists
|
||||
// to avoid errors later
|
||||
exists, err := s.collection.DocumentExists(ctx, key)
|
||||
@@ -151,8 +149,13 @@ func (s *Storage) Get(key string) ([]byte, error) {
|
||||
return utils.UnsafeBytes(model.Val), nil
|
||||
}
|
||||
|
||||
// Set key with value
|
||||
func (s *Storage) Set(key string, val []byte, exp time.Duration) error {
|
||||
// Get value by key
|
||||
func (s *Storage) Get(key string) ([]byte, error) {
|
||||
return s.GetWithContext(context.Background(), key)
|
||||
}
|
||||
|
||||
// SetWithContext key with value with given context
|
||||
func (s *Storage) SetWithContext(ctx context.Context, key string, val []byte, exp time.Duration) error {
|
||||
// Ain't Nobody Got Time For That
|
||||
if len(key) <= 0 || len(val) <= 0 {
|
||||
return nil
|
||||
@@ -169,7 +172,6 @@ func (s *Storage) Set(key string, val []byte, exp time.Duration) error {
|
||||
Val: valStr,
|
||||
Exp: expireAt,
|
||||
}
|
||||
ctx := context.Background()
|
||||
|
||||
// Arango does not support documents with the same key
|
||||
// So we need to check if the document exists
|
||||
@@ -188,20 +190,35 @@ func (s *Storage) Set(key string, val []byte, exp time.Duration) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// Delete value by key
|
||||
func (s *Storage) Delete(key string) error {
|
||||
// Set key with value
|
||||
func (s *Storage) Set(key string, val []byte, exp time.Duration) error {
|
||||
return s.SetWithContext(context.Background(), key, val, exp)
|
||||
}
|
||||
|
||||
// DeleteWithContext value by key with given context
|
||||
func (s *Storage) DeleteWithContext(ctx context.Context, key string) error {
|
||||
// Ain't Nobody Got Time For That
|
||||
if len(key) <= 0 {
|
||||
return nil
|
||||
}
|
||||
_, err := s.collection.RemoveDocument(context.Background(), key)
|
||||
_, err := s.collection.RemoveDocument(ctx, key)
|
||||
return err
|
||||
}
|
||||
|
||||
// Delete value by key
|
||||
func (s *Storage) Delete(key string) error {
|
||||
return s.DeleteWithContext(context.Background(), key)
|
||||
}
|
||||
|
||||
// ResetWithContext all keys with given context
|
||||
func (s *Storage) ResetWithContext(ctx context.Context) error {
|
||||
return s.collection.Truncate(ctx)
|
||||
}
|
||||
|
||||
// Reset all keys
|
||||
// truncate the collection
|
||||
func (s *Storage) Reset() error {
|
||||
return s.collection.Truncate(context.Background())
|
||||
return s.ResetWithContext(context.Background())
|
||||
}
|
||||
|
||||
// Close the database
|
||||
|
@@ -1,138 +1,341 @@
|
||||
package arangodb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/url"
|
||||
"os"
|
||||
"strconv"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/gofiber/utils"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/testcontainers/testcontainers-go"
|
||||
"github.com/testcontainers/testcontainers-go/modules/arangodb"
|
||||
)
|
||||
|
||||
var testStore = New(Config{
|
||||
Reset: true,
|
||||
})
|
||||
const (
|
||||
// arangoDB is the default image used for running arangoDB in tests.
|
||||
arangoDBImage = "arangodb:latest"
|
||||
arangoDBImageEnvVar = "TEST_ARANGODB_IMAGE"
|
||||
arangoDBPassword = "test"
|
||||
)
|
||||
|
||||
func Test_ARANGODB_Set(t *testing.T) {
|
||||
var (
|
||||
key = "john"
|
||||
val = []byte("doe")
|
||||
)
|
||||
func newTestStore(t testing.TB) *Storage {
|
||||
t.Helper()
|
||||
|
||||
err := testStore.Set(key, val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
img := arangoDBImage
|
||||
if imgFromEnv := os.Getenv(arangoDBImageEnvVar); imgFromEnv != "" {
|
||||
img = imgFromEnv
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
arangodbContainer, err := arangodb.Run(ctx, img, arangodb.WithRootPassword(arangoDBPassword))
|
||||
testcontainers.CleanupContainer(t, arangodbContainer)
|
||||
require.NoError(t, err)
|
||||
|
||||
endpoint, err := arangodbContainer.HTTPEndpoint(ctx)
|
||||
require.NoError(t, err)
|
||||
|
||||
parsedURL, err := url.Parse(endpoint)
|
||||
require.NoError(t, err)
|
||||
host := parsedURL.Scheme + "://" + parsedURL.Hostname()
|
||||
port := parsedURL.Port()
|
||||
|
||||
iPort, err := strconv.Atoi(port)
|
||||
require.NoError(t, err)
|
||||
|
||||
return New(Config{
|
||||
Host: host,
|
||||
Port: iPort,
|
||||
Username: "root",
|
||||
Password: arangoDBPassword,
|
||||
})
|
||||
}
|
||||
|
||||
func Test_ARANGODB_Upsert(t *testing.T) {
|
||||
func Test_ArangoDB_Set(t *testing.T) {
|
||||
var (
|
||||
key = "john"
|
||||
val = []byte("doe")
|
||||
)
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
err := testStore.Set(key, val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func Test_ArangoDB_SetWithContext(t *testing.T) {
|
||||
var (
|
||||
key = "john"
|
||||
val = []byte("doe")
|
||||
)
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
cancel()
|
||||
|
||||
err := testStore.SetWithContext(ctx, key, val, 0)
|
||||
require.ErrorIs(t, err, context.Canceled)
|
||||
}
|
||||
|
||||
func Test_ArangoDB_Upsert(t *testing.T) {
|
||||
var (
|
||||
key = "john"
|
||||
val = []byte("doe")
|
||||
)
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
err := testStore.Set(key, val, 0)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = testStore.Set(key, val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func Test_ARANGODB_Get(t *testing.T) {
|
||||
func Test_ArangoDB_Get(t *testing.T) {
|
||||
var (
|
||||
key = "john"
|
||||
val = []byte("doe")
|
||||
)
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
err := testStore.Set(key, val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
result, err := testStore.Get(key)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
utils.AssertEqual(t, val, result)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, val, result)
|
||||
}
|
||||
|
||||
func Test_ARANGODB_Set_Expiration(t *testing.T) {
|
||||
func Test_ArangoDB_GetWithContext(t *testing.T) {
|
||||
var (
|
||||
key = "john"
|
||||
val = []byte("doe")
|
||||
)
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
err := testStore.Set(key, val, 0)
|
||||
require.NoError(t, err)
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
cancel()
|
||||
|
||||
result, err := testStore.GetWithContext(ctx, key)
|
||||
require.ErrorIs(t, err, context.Canceled)
|
||||
require.Zero(t, len(result))
|
||||
}
|
||||
|
||||
func Test_ArangoDB_Set_Expiration(t *testing.T) {
|
||||
var (
|
||||
key = "john"
|
||||
val = []byte("doe")
|
||||
exp = 1 * time.Second
|
||||
)
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
err := testStore.Set(key, val, exp)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
time.Sleep(1100 * time.Millisecond)
|
||||
}
|
||||
|
||||
func Test_ARANGODB_Get_Expired(t *testing.T) {
|
||||
var (
|
||||
key = "john"
|
||||
)
|
||||
func Test_ArangoDB_Get_Expired(t *testing.T) {
|
||||
key := "john"
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
result, err := testStore.Get(key)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
utils.AssertEqual(t, true, len(result) == 0)
|
||||
require.NoError(t, err)
|
||||
require.Zero(t, len(result))
|
||||
}
|
||||
|
||||
func Test_ARANGODB_Get_NotExist(t *testing.T) {
|
||||
func Test_ArangoDB_Get_NotExist(t *testing.T) {
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
result, err := testStore.Get("notexist")
|
||||
utils.AssertEqual(t, nil, err)
|
||||
utils.AssertEqual(t, true, len(result) == 0)
|
||||
require.NoError(t, err)
|
||||
require.Zero(t, len(result))
|
||||
}
|
||||
|
||||
func Test_ARANGODB_Delete(t *testing.T) {
|
||||
func Test_ArangoDB_Delete(t *testing.T) {
|
||||
var (
|
||||
key = "john"
|
||||
val = []byte("doe")
|
||||
)
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
err := testStore.Set(key, val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = testStore.Delete(key)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
result, err := testStore.Get(key)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
utils.AssertEqual(t, true, len(result) == 0)
|
||||
require.NoError(t, err)
|
||||
require.Zero(t, len(result))
|
||||
}
|
||||
|
||||
func Test_ARANGODB_Reset(t *testing.T) {
|
||||
func Test_ArangoDB_DeleteWithContext(t *testing.T) {
|
||||
var (
|
||||
key = "john"
|
||||
val = []byte("doe")
|
||||
)
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
err := testStore.Set(key, val, 0)
|
||||
require.NoError(t, err)
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
cancel()
|
||||
|
||||
err = testStore.DeleteWithContext(ctx, key)
|
||||
require.ErrorIs(t, err, context.Canceled)
|
||||
|
||||
result, err := testStore.Get(key)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, val, result)
|
||||
}
|
||||
|
||||
func Test_ArangoDB_Reset(t *testing.T) {
|
||||
val := []byte("doe")
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
err := testStore.Set("john1", val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = testStore.Set("john2", val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = testStore.Reset()
|
||||
utils.AssertEqual(t, nil, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
result, err := testStore.Get("john1")
|
||||
utils.AssertEqual(t, nil, err)
|
||||
utils.AssertEqual(t, true, len(result) == 0)
|
||||
require.NoError(t, err)
|
||||
require.Zero(t, len(result))
|
||||
|
||||
result, err = testStore.Get("john2")
|
||||
utils.AssertEqual(t, nil, err)
|
||||
utils.AssertEqual(t, true, len(result) == 0)
|
||||
require.NoError(t, err)
|
||||
require.Zero(t, len(result))
|
||||
}
|
||||
|
||||
func Test_ARANGODB_Non_UTF8(t *testing.T) {
|
||||
func Test_ArangoDB_ResetWithContext(t *testing.T) {
|
||||
val := []byte("doe")
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
err := testStore.Set("john1", val, 0)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = testStore.Set("john2", val, 0)
|
||||
require.Equal(t, err, nil)
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
cancel()
|
||||
|
||||
err = testStore.ResetWithContext(ctx)
|
||||
require.ErrorIs(t, err, context.Canceled)
|
||||
|
||||
result, err := testStore.Get("john1")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, val, result)
|
||||
|
||||
result, err = testStore.Get("john2")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, val, result)
|
||||
}
|
||||
|
||||
func Test_ArangoDB_Non_UTF8(t *testing.T) {
|
||||
val := []byte("0xF5")
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
err := testStore.Set("0xF6", val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
result, err := testStore.Get("0xF6")
|
||||
utils.AssertEqual(t, nil, err)
|
||||
utils.AssertEqual(t, val, result)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, val, result)
|
||||
}
|
||||
|
||||
func Test_ARANGODB_Close(t *testing.T) {
|
||||
utils.AssertEqual(t, nil, testStore.Close())
|
||||
func Test_ArangoDB_Close(t *testing.T) {
|
||||
testStore := newTestStore(t)
|
||||
require.Nil(t, testStore.Close())
|
||||
}
|
||||
|
||||
func Test_ARANGODB_Conn(t *testing.T) {
|
||||
utils.AssertEqual(t, true, testStore.Conn() != nil)
|
||||
func Test_ArangoDB_Conn(t *testing.T) {
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
require.True(t, testStore.Conn() != nil)
|
||||
}
|
||||
|
||||
func Benchmark_ArangoDB_Set(b *testing.B) {
|
||||
testStore := newTestStore(b)
|
||||
defer testStore.Close()
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
var err error
|
||||
for i := 0; i < b.N; i++ {
|
||||
err = testStore.Set("john", []byte("doe"), 0)
|
||||
}
|
||||
|
||||
require.NoError(b, err)
|
||||
}
|
||||
|
||||
func Benchmark_ArangoDB_Get(b *testing.B) {
|
||||
testStore := newTestStore(b)
|
||||
defer testStore.Close()
|
||||
|
||||
err := testStore.Set("john", []byte("doe"), 0)
|
||||
require.NoError(b, err)
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
_, err = testStore.Get("john")
|
||||
}
|
||||
|
||||
require.NoError(b, err)
|
||||
}
|
||||
|
||||
func Benchmark_ArangoDB_SetAndDelete(b *testing.B) {
|
||||
testStore := newTestStore(b)
|
||||
defer testStore.Close()
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
var err error
|
||||
for i := 0; i < b.N; i++ {
|
||||
_ = testStore.Set("john", []byte("doe"), 0)
|
||||
err = testStore.Delete("john")
|
||||
}
|
||||
|
||||
require.NoError(b, err)
|
||||
}
|
||||
|
@@ -1,13 +1,65 @@
|
||||
module github.com/gofiber/storage/arangodb
|
||||
module github.com/gofiber/storage/arangodb/v2
|
||||
|
||||
go 1.23.0
|
||||
|
||||
go 1.17
|
||||
|
||||
require (
|
||||
github.com/arangodb/go-driver v1.6.0
|
||||
github.com/gofiber/utils v1.1.0
|
||||
github.com/arangodb/go-driver v1.6.6
|
||||
github.com/gofiber/utils/v2 v2.0.0-beta.3
|
||||
github.com/stretchr/testify v1.10.0
|
||||
github.com/testcontainers/testcontainers-go v0.37.0
|
||||
github.com/testcontainers/testcontainers-go/modules/arangodb v0.37.0
|
||||
)
|
||||
|
||||
require (
|
||||
dario.cat/mergo v1.0.1 // indirect
|
||||
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
|
||||
github.com/Microsoft/go-winio v0.6.2 // indirect
|
||||
github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e // indirect
|
||||
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
|
||||
github.com/containerd/log v0.1.0 // indirect
|
||||
github.com/containerd/platforms v0.2.1 // indirect
|
||||
github.com/cpuguy83/dockercfg v0.3.2 // indirect
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/distribution/reference v0.6.0 // indirect
|
||||
github.com/docker/docker v28.0.1+incompatible // indirect
|
||||
github.com/docker/go-connections v0.5.0 // indirect
|
||||
github.com/docker/go-units v0.5.0 // indirect
|
||||
github.com/ebitengine/purego v0.8.2 // indirect
|
||||
github.com/felixge/httpsnoop v1.0.4 // indirect
|
||||
github.com/go-logr/logr v1.4.2 // indirect
|
||||
github.com/go-logr/stdr v1.2.2 // indirect
|
||||
github.com/go-ole/go-ole v1.2.6 // indirect
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/google/uuid v1.6.0 // indirect
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect
|
||||
github.com/klauspost/compress v1.17.4 // indirect
|
||||
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
|
||||
github.com/magiconair/properties v1.8.10 // indirect
|
||||
github.com/moby/docker-image-spec v1.3.1 // indirect
|
||||
github.com/moby/patternmatcher v0.6.0 // indirect
|
||||
github.com/moby/sys/sequential v0.5.0 // indirect
|
||||
github.com/moby/sys/user v0.1.0 // indirect
|
||||
github.com/moby/sys/userns v0.1.0 // indirect
|
||||
github.com/moby/term v0.5.0 // indirect
|
||||
github.com/morikuni/aec v1.0.0 // indirect
|
||||
github.com/opencontainers/go-digest v1.0.0 // indirect
|
||||
github.com/opencontainers/image-spec v1.1.1 // indirect
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
|
||||
github.com/shirou/gopsutil/v4 v4.25.1 // indirect
|
||||
github.com/sirupsen/logrus v1.9.3 // indirect
|
||||
github.com/tklauser/go-sysconf v0.3.12 // indirect
|
||||
github.com/tklauser/numcpus v0.6.1 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.4 // indirect
|
||||
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
|
||||
go.opentelemetry.io/otel v1.35.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.35.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.35.0 // indirect
|
||||
golang.org/x/crypto v0.37.0 // indirect
|
||||
golang.org/x/sys v0.32.0 // indirect
|
||||
google.golang.org/grpc v1.70.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
|
220
arangodb/go.sum
220
arangodb/go.sum
@@ -1,54 +1,206 @@
|
||||
github.com/arangodb/go-driver v1.6.0 h1:NFWj/idqXZxhFVueihMSI2R9NotNIsgvNfM/xmpekb4=
|
||||
github.com/arangodb/go-driver v1.6.0/go.mod h1:HQmdGkvNMVBTE3SIPSQ8T/ZddC6iwNsfMR+dDJQxIsI=
|
||||
dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
|
||||
dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
|
||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU=
|
||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
|
||||
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
|
||||
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
|
||||
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
|
||||
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
|
||||
github.com/arangodb/go-driver v1.6.6 h1:yL1ybRCKqY+eREnVuJ/GYNYowoyy/g0fiUvL3fKNtJM=
|
||||
github.com/arangodb/go-driver v1.6.6/go.mod h1:ZWyW3T8YPA1weGxohGtW4lFjJmpr9aHNTTbaiD5bBhI=
|
||||
github.com/arangodb/go-driver/v2 v2.1.3 h1:PpLSe8E2RalFuqTGi2yfHDe3ltOomfFCIToB66p1lr8=
|
||||
github.com/arangodb/go-driver/v2 v2.1.3/go.mod h1:aoDzrsO7PQEFat3Q9pp4zfv6W+WotA7GcCeJQJfX+tc=
|
||||
github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e h1:Xg+hGrY2LcQBbxd0ZFdbGSyRKTYMZCfBbw/pMJFOk1g=
|
||||
github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e/go.mod h1:mq7Shfa/CaixoDxiyAAc5jZ6CVBAyPaNQCGS7mkj4Ho=
|
||||
github.com/coreos/go-iptables v0.6.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q=
|
||||
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
||||
github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
|
||||
github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
||||
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
|
||||
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
|
||||
github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A=
|
||||
github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw=
|
||||
github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA=
|
||||
github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc=
|
||||
github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
|
||||
github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/dchest/uniuri v0.0.0-20160212164326-8902c56451e9/go.mod h1:GgB8SF9nRG+GqaDtLcwJZsQFhcogVCJ79j4EdT0c2V4=
|
||||
github.com/gofiber/utils v1.1.0 h1:vdEBpn7AzIUJRhe+CiTOJdUcTg4Q9RK+pEa0KPbLdrM=
|
||||
github.com/gofiber/utils v1.1.0/go.mod h1:poZpsnhBykfnY1Mc0KeEa6mSHrS3dV0+oBWyeQmb2e0=
|
||||
github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
|
||||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/dchest/siphash v1.2.3 h1:QXwFc8cFOR2dSa/gE6o/HokBMWtLUaNDVd+22aKHeEA=
|
||||
github.com/dchest/siphash v1.2.3/go.mod h1:0NvQU092bT0ipiFN++/rXm69QG9tVxLAlQHIXMPAkHc=
|
||||
github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
|
||||
github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
|
||||
github.com/docker/docker v28.0.1+incompatible h1:FCHjSRdXhNRFjlHMTv4jUNlIBbTeRjrWfeFuJp7jpo0=
|
||||
github.com/docker/docker v28.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
|
||||
github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
|
||||
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
|
||||
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
||||
github.com/ebitengine/purego v0.8.2 h1:jPPGWs2sZ1UgOSgD2bClL0MJIqu58nOmIcBuXr62z1I=
|
||||
github.com/ebitengine/purego v0.8.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
|
||||
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
|
||||
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
||||
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
|
||||
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
|
||||
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
|
||||
github.com/gofiber/utils/v2 v2.0.0-beta.3 h1:pfOhUDDVjBJpkWv6C5jaDyYLvpui7zQ97zpyFFsUOKw=
|
||||
github.com/gofiber/utils/v2 v2.0.0-beta.3/go.mod h1:jsl17+MsKfwJjM3ONCE9Rzji/j8XNbwjhUVTjzgfDCo=
|
||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI=
|
||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/kkdai/maglev v0.2.0 h1:w6DCW0kAA6fstZqXkrBrlgIC3jeIRXkjOYea/m6EK/Y=
|
||||
github.com/kkdai/maglev v0.2.0/go.mod h1:d+mt8Lmt3uqi9aRb/BnPjzD0fy+ETs1vVXiGRnqHVZ4=
|
||||
github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4=
|
||||
github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
|
||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
|
||||
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
|
||||
github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE=
|
||||
github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
|
||||
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
||||
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
|
||||
github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
|
||||
github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk=
|
||||
github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
|
||||
github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
|
||||
github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
|
||||
github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg=
|
||||
github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU=
|
||||
github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g=
|
||||
github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28=
|
||||
github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
|
||||
github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
|
||||
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
|
||||
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
|
||||
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
||||
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
|
||||
github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
|
||||
github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
|
||||
github.com/rs/zerolog v1.19.0/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo=
|
||||
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
|
||||
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
|
||||
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
|
||||
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
|
||||
github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8=
|
||||
github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
|
||||
github.com/shirou/gopsutil/v4 v4.25.1 h1:QSWkTc+fu9LTAWfkZwZ6j8MSUk4A2LV7rbH0ZqmLjXs=
|
||||
github.com/shirou/gopsutil/v4 v4.25.1/go.mod h1:RoUCUpndaJFtT+2zsZzzmhvbfGoDCJ7nFXKJf8GqJbI=
|
||||
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
|
||||
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
|
||||
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
|
||||
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
|
||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/testcontainers/testcontainers-go v0.37.0 h1:L2Qc0vkTw2EHWQ08djon0D2uw7Z/PtHS/QzZZ5Ra/hg=
|
||||
github.com/testcontainers/testcontainers-go v0.37.0/go.mod h1:QPzbxZhQ6Bclip9igjLFj6z0hs01bU8lrl2dHQmgFGM=
|
||||
github.com/testcontainers/testcontainers-go/modules/arangodb v0.37.0 h1:E9Q2wOfGgNmKtVy4TDAL0SOy0aN/1Z4eAlzVy0TD6as=
|
||||
github.com/testcontainers/testcontainers-go/modules/arangodb v0.37.0/go.mod h1:odwRJL0mTTB8SJGm+d0cbbXZBdThQSacksU15eEUWjw=
|
||||
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
|
||||
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
|
||||
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
|
||||
github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
|
||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
|
||||
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
|
||||
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
|
||||
go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=
|
||||
go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0 h1:1fTNlAIJZGWLP5FVu0fikVry1IsiUnXjf7QFvoNN3Xw=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0/go.mod h1:zjPK58DtkqQFn+YUMbx0M2XV3QgKU0gS9LeGohREyK4=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 h1:IeMeyr1aBvBiPVYihXIaeIZba6b8E1bYp7lbdxK8CQg=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0/go.mod h1:oVdCUtjq9MK9BlS7TtucsQwUcXcymNiEDjgDD2jMtZU=
|
||||
go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M=
|
||||
go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE=
|
||||
go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY=
|
||||
go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg=
|
||||
go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=
|
||||
go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=
|
||||
go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
|
||||
go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
|
||||
golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
|
||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
|
||||
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
|
||||
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o=
|
||||
golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0=
|
||||
golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU=
|
||||
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44=
|
||||
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463 h1:e0AIkUUhxyBKh6ssZNrAMeqhA7RKUj42346d1y02i2g=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
|
||||
google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ=
|
||||
google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw=
|
||||
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
|
||||
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
|
||||
gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
|
||||
|
@@ -6,12 +6,10 @@ title: Azure Blob
|
||||

|
||||
[](https://gofiber.io/discord)
|
||||

|
||||

|
||||

|
||||
|
||||
[Azure Blob storage](https://azure.microsoft.com/en-us/products/storage/blobs/#overview) is Microsoft's object storage solution for the cloud.
|
||||
|
||||
> NOTE: Go **1.18** or later is required. Source: [link](https://github.com/Azure/azure-sdk-for-go/blob/main/README.md)
|
||||
**Note: Requires Go 1.19 and above**
|
||||
|
||||
### Table of Contents
|
||||
|
||||
@@ -44,7 +42,7 @@ go mod init github.com/<user>/<repo>
|
||||
And then install the azure blob implementation:
|
||||
|
||||
```bash
|
||||
go get github.com/gofiber/storage/azureblob
|
||||
go get github.com/gofiber/storage/azureblob/v2
|
||||
```
|
||||
|
||||
### Examples
|
||||
@@ -52,7 +50,7 @@ go get github.com/gofiber/storage/azureblob
|
||||
Import the storage package.
|
||||
|
||||
```go
|
||||
import "github.com/gofiber/storage/azureblob"
|
||||
import "github.com/gofiber/storage/azureblob/v2"
|
||||
```
|
||||
|
||||
You can use the following possibilities to create a storage:
|
||||
|
@@ -2,12 +2,12 @@ package azureblob
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
|
||||
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/bloberror"
|
||||
"io"
|
||||
"time"
|
||||
|
||||
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
|
||||
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/bloberror"
|
||||
)
|
||||
|
||||
// Storage interface that is implemented by storage providers
|
||||
@@ -48,13 +48,12 @@ func New(config ...Config) *Storage {
|
||||
return storage
|
||||
}
|
||||
|
||||
// Get value by key
|
||||
func (s *Storage) Get(key string) ([]byte, error) {
|
||||
// GetWithContext gets value by key
|
||||
func (s *Storage) GetWithContext(ctx context.Context, key string) ([]byte, error) {
|
||||
if len(key) <= 0 {
|
||||
return nil, nil
|
||||
}
|
||||
ctx, cancel := s.requestContext()
|
||||
defer cancel()
|
||||
|
||||
resp, err := s.client.DownloadStream(ctx, s.container, key, nil)
|
||||
if err != nil {
|
||||
return []byte{}, err
|
||||
@@ -63,55 +62,81 @@ func (s *Storage) Get(key string) ([]byte, error) {
|
||||
return data, err
|
||||
}
|
||||
|
||||
// Set key with value
|
||||
func (s *Storage) Set(key string, val []byte, exp time.Duration) error {
|
||||
// Get gets value by key
|
||||
func (s *Storage) Get(key string) ([]byte, error) {
|
||||
ctx, cancel := s.requestContext()
|
||||
defer cancel()
|
||||
|
||||
return s.GetWithContext(ctx, key)
|
||||
}
|
||||
|
||||
// SetWithContext sets key with value
|
||||
func (s *Storage) SetWithContext(ctx context.Context, key string, val []byte, exp time.Duration) error {
|
||||
if len(key) <= 0 {
|
||||
return nil
|
||||
}
|
||||
ctx, cancel := s.requestContext()
|
||||
defer cancel()
|
||||
|
||||
_, err := s.client.UploadBuffer(ctx, s.container, key, val, nil)
|
||||
return err
|
||||
}
|
||||
|
||||
// Delete entry by key
|
||||
func (s *Storage) Delete(key string) error {
|
||||
// Set sets key with value
|
||||
func (s *Storage) Set(key string, val []byte, exp time.Duration) error {
|
||||
ctx, cancel := s.requestContext()
|
||||
defer cancel()
|
||||
|
||||
return s.SetWithContext(ctx, key, val, exp)
|
||||
}
|
||||
|
||||
// DeleteWithContext deletes entry by key
|
||||
func (s *Storage) DeleteWithContext(ctx context.Context, key string) error {
|
||||
if len(key) <= 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
ctx, cancel := s.requestContext()
|
||||
defer cancel()
|
||||
_, err := s.client.DeleteBlob(ctx, s.container, key, nil)
|
||||
return err
|
||||
}
|
||||
|
||||
// Reset all entries
|
||||
func (s *Storage) Reset() error {
|
||||
// Delete deletes entry by key
|
||||
func (s *Storage) Delete(key string) error {
|
||||
ctx, cancel := s.requestContext()
|
||||
defer cancel()
|
||||
|
||||
return s.DeleteWithContext(ctx, key)
|
||||
}
|
||||
|
||||
// ResetWithContext resets all entries
|
||||
func (s *Storage) ResetWithContext(ctx context.Context) error {
|
||||
//_, err := s.client.DeleteContainer(ctx, s.container, nil)
|
||||
//return err
|
||||
pager := s.client.NewListBlobsFlatPager(s.container, nil)
|
||||
errCounter := 0
|
||||
|
||||
for pager.More() {
|
||||
resp, err := pager.NextPage(ctx)
|
||||
if err != nil {
|
||||
errCounter = errCounter + 1
|
||||
return err
|
||||
}
|
||||
|
||||
for _, v := range resp.Segment.BlobItems {
|
||||
_, err = s.client.DeleteBlob(ctx, s.container, *v.Name, nil)
|
||||
if err != nil {
|
||||
errCounter = errCounter + 1
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
if errCounter > 0 {
|
||||
return errors.New(fmt.Sprintf("%d errors occured while resetting", errCounter))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Reset resets all entries
|
||||
func (s *Storage) Reset() error {
|
||||
ctx, cancel := s.requestContext()
|
||||
defer cancel()
|
||||
|
||||
return s.ResetWithContext(ctx)
|
||||
}
|
||||
|
||||
// Conn returns storage client
|
||||
func (s *Storage) Conn() *azblob.Client {
|
||||
return s.client
|
||||
|
@@ -1,35 +1,86 @@
|
||||
package azureblob
|
||||
|
||||
import (
|
||||
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/bloberror"
|
||||
"github.com/gofiber/fiber/v2/utils"
|
||||
"context"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/bloberror"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/testcontainers/testcontainers-go"
|
||||
"github.com/testcontainers/testcontainers-go/modules/azure/azurite"
|
||||
)
|
||||
|
||||
func newStore() *Storage {
|
||||
const (
|
||||
// azuriteImage is the default image used for running azurite in tests.
|
||||
azuriteImage = "mcr.microsoft.com/azure-storage/azurite:latest"
|
||||
azuriteImageEnvVar = "TEST_AZURITE_IMAGE"
|
||||
)
|
||||
|
||||
func newTestStore(t testing.TB) *Storage {
|
||||
t.Helper()
|
||||
|
||||
img := azuriteImage
|
||||
if imgFromEnv := os.Getenv(azuriteImageEnvVar); imgFromEnv != "" {
|
||||
img = imgFromEnv
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
c, err := azurite.Run(ctx, img)
|
||||
testcontainers.CleanupContainer(t, c)
|
||||
require.NoError(t, err)
|
||||
|
||||
serviceURL, err := c.BlobServiceURL(ctx)
|
||||
require.NoError(t, err)
|
||||
|
||||
return New(Config{
|
||||
Account: "devstoreaccount1",
|
||||
Account: azurite.AccountName,
|
||||
Container: "test",
|
||||
Endpoint: "http://127.0.0.1:10000/devstoreaccount1",
|
||||
Endpoint: serviceURL + "/" + azurite.AccountName,
|
||||
Credentials: Credentials{
|
||||
Account: "devstoreaccount1",
|
||||
Key: "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==",
|
||||
Account: azurite.AccountName,
|
||||
Key: azurite.AccountKey,
|
||||
},
|
||||
Reset: true,
|
||||
})
|
||||
}
|
||||
|
||||
func Test_AzureBlob_Get(t *testing.T) {
|
||||
var (
|
||||
key = "john"
|
||||
val = []byte("doe")
|
||||
)
|
||||
testStore := newStore()
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
err := testStore.Set(key, val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
result, err := testStore.Get(key)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
utils.AssertEqual(t, val, result)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, val, result)
|
||||
}
|
||||
|
||||
func Test_AzureBlob_GetWithContext(t *testing.T) {
|
||||
var (
|
||||
key = "john"
|
||||
val = []byte("doe")
|
||||
)
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
err := testStore.Set(key, val, 0)
|
||||
require.NoError(t, err)
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
cancel()
|
||||
|
||||
result, err := testStore.GetWithContext(ctx, key)
|
||||
require.ErrorIs(t, err, context.Canceled)
|
||||
require.Zero(t, len(result))
|
||||
}
|
||||
|
||||
func Test_AzureBlob_Set(t *testing.T) {
|
||||
@@ -38,9 +89,27 @@ func Test_AzureBlob_Set(t *testing.T) {
|
||||
val = []byte("doe")
|
||||
)
|
||||
|
||||
testStore := newStore()
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
err := testStore.Set(key, val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func Test_AzureBlob_SetWithContext(t *testing.T) {
|
||||
var (
|
||||
key = "john"
|
||||
val = []byte("doe")
|
||||
)
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
cancel()
|
||||
|
||||
err := testStore.SetWithContext(ctx, key, val, 0)
|
||||
require.ErrorIs(t, err, context.Canceled)
|
||||
}
|
||||
|
||||
func Test_AzureBlob_Delete(t *testing.T) {
|
||||
@@ -48,13 +117,15 @@ func Test_AzureBlob_Delete(t *testing.T) {
|
||||
key = "john"
|
||||
val = []byte("doe")
|
||||
)
|
||||
testStore := newStore()
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
err := testStore.Set(key, val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = testStore.Delete(key)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
result, err := testStore.Get(key)
|
||||
if err != nil {
|
||||
@@ -62,8 +133,31 @@ func Test_AzureBlob_Delete(t *testing.T) {
|
||||
err = nil
|
||||
}
|
||||
}
|
||||
utils.AssertEqual(t, nil, err)
|
||||
utils.AssertEqual(t, true, len(result) == 0)
|
||||
require.NoError(t, err)
|
||||
require.Zero(t, len(result))
|
||||
}
|
||||
|
||||
func Test_AzureBlob_DeleteWithContext(t *testing.T) {
|
||||
var (
|
||||
key = "john"
|
||||
val = []byte("doe")
|
||||
)
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
err := testStore.Set(key, val, 0)
|
||||
require.NoError(t, err)
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
cancel()
|
||||
|
||||
err = testStore.DeleteWithContext(ctx, key)
|
||||
require.ErrorIs(t, err, context.Canceled)
|
||||
|
||||
result, err := testStore.Get(key)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, val, result)
|
||||
}
|
||||
|
||||
func Test_AzureBlob_Override(t *testing.T) {
|
||||
@@ -71,41 +165,45 @@ func Test_AzureBlob_Override(t *testing.T) {
|
||||
key = "john"
|
||||
val = []byte("doe")
|
||||
)
|
||||
testStore := newStore()
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
err := testStore.Set(key, val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = testStore.Set(key, val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func Test_AzureBlob_Get_NotExist(t *testing.T) {
|
||||
testStore := newStore()
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
result, err := testStore.Get("notexist")
|
||||
if err != nil {
|
||||
if bloberror.HasCode(err, bloberror.BlobNotFound) {
|
||||
err = nil
|
||||
}
|
||||
}
|
||||
utils.AssertEqual(t, nil, err)
|
||||
utils.AssertEqual(t, true, len(result) == 0)
|
||||
require.NoError(t, err)
|
||||
require.Zero(t, len(result))
|
||||
}
|
||||
|
||||
func Test_AzureBlob_Reset(t *testing.T) {
|
||||
var (
|
||||
val = []byte("doe")
|
||||
)
|
||||
testStore := newStore()
|
||||
val := []byte("doe")
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
err := testStore.Set("john1", val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = testStore.Set("john2", val, 0)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = testStore.Reset()
|
||||
utils.AssertEqual(t, nil, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
result, err := testStore.Get("john1")
|
||||
if err != nil {
|
||||
@@ -113,8 +211,8 @@ func Test_AzureBlob_Reset(t *testing.T) {
|
||||
err = nil
|
||||
}
|
||||
}
|
||||
utils.AssertEqual(t, nil, err)
|
||||
utils.AssertEqual(t, true, len(result) == 0)
|
||||
require.NoError(t, err)
|
||||
require.Zero(t, len(result))
|
||||
|
||||
result, err = testStore.Get("john2")
|
||||
if err != nil {
|
||||
@@ -122,16 +220,93 @@ func Test_AzureBlob_Reset(t *testing.T) {
|
||||
err = nil
|
||||
}
|
||||
}
|
||||
utils.AssertEqual(t, nil, err)
|
||||
utils.AssertEqual(t, true, len(result) == 0)
|
||||
require.NoError(t, err)
|
||||
require.Zero(t, len(result))
|
||||
}
|
||||
|
||||
func Test_S3_Conn(t *testing.T) {
|
||||
testStore := newStore()
|
||||
utils.AssertEqual(t, true, testStore.Conn() != nil)
|
||||
func Test_AzureBlob_Conn(t *testing.T) {
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
require.True(t, testStore.Conn() != nil)
|
||||
}
|
||||
|
||||
func Test_AzureBlob_ResetWithContext(t *testing.T) {
|
||||
val := []byte("doe")
|
||||
|
||||
testStore := newTestStore(t)
|
||||
defer testStore.Close()
|
||||
|
||||
err := testStore.Set("john1", val, 0)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = testStore.Set("john2", val, 0)
|
||||
require.NoError(t, err)
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
cancel()
|
||||
|
||||
err = testStore.ResetWithContext(ctx)
|
||||
require.ErrorIs(t, err, context.Canceled)
|
||||
|
||||
result, err := testStore.Get("john1")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, val, result)
|
||||
|
||||
result, err = testStore.Get("john2")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, val, result)
|
||||
}
|
||||
|
||||
func Test_AzureBlob_Close(t *testing.T) {
|
||||
testStore := newStore()
|
||||
utils.AssertEqual(t, nil, testStore.Close())
|
||||
testStore := newTestStore(t)
|
||||
require.NoError(t, testStore.Close())
|
||||
}
|
||||
|
||||
func Benchmark_AzureBlob_Set(b *testing.B) {
|
||||
testStore := newTestStore(b)
|
||||
defer testStore.Close()
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
var err error
|
||||
for i := 0; i < b.N; i++ {
|
||||
err = testStore.Set("john", []byte("doe"), 0)
|
||||
}
|
||||
|
||||
require.NoError(b, err)
|
||||
}
|
||||
|
||||
func Benchmark_AzureBlob_Get(b *testing.B) {
|
||||
testStore := newTestStore(b)
|
||||
defer testStore.Close()
|
||||
|
||||
err := testStore.Set("john", []byte("doe"), 0)
|
||||
require.NoError(b, err)
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
_, err = testStore.Get("john")
|
||||
}
|
||||
|
||||
require.NoError(b, err)
|
||||
}
|
||||
|
||||
func Benchmark_AzureBlob_SetAndDelete(b *testing.B) {
|
||||
testStore := newTestStore(b)
|
||||
defer testStore.Close()
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
var err error
|
||||
for i := 0; i < b.N; i++ {
|
||||
_ = testStore.Set("john", []byte("doe"), 0)
|
||||
err = testStore.Delete("john")
|
||||
}
|
||||
|
||||
require.NoError(b, err)
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user