Compare commits
6048 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
72c18da687 | ||
|
|
64e5cfd43c | ||
|
|
229dfc8906 | ||
|
|
c0ab69c209 | ||
|
|
83dc326318 | ||
|
|
d64a4ed339 | ||
|
|
83bf2faf06 | ||
|
|
49d08a8fb6 | ||
|
|
ba7c685e11 | ||
|
|
eec49878a5 | ||
|
|
1b6861cdbb | ||
|
|
68c0d7e964 | ||
|
|
5fc738f001 | ||
|
|
4f08a62411 | ||
|
|
5ba4c71ac2 | ||
|
|
776cdcbbe1 | ||
|
|
2eb94c6522 | ||
|
|
b4e9c0d004 | ||
|
|
f348df87a5 | ||
|
|
b5782def2f | ||
|
|
d6287755de | ||
|
|
01e16e1265 | ||
|
|
d927b3ac18 | ||
|
|
b277bec988 | ||
|
|
5df570daa0 | ||
|
|
0078cc0ea9 | ||
|
|
a0199e9a44 | ||
|
|
11317c1197 | ||
|
|
1c3c317e1f | ||
|
|
66e7a84b8a | ||
|
|
1c79b60952 | ||
|
|
29bf40fa60 | ||
|
|
548bb6eae2 | ||
|
|
98e38bd70d | ||
|
|
e197aa62d1 | ||
|
|
68aa14292e | ||
|
|
9b118cdfe3 | ||
|
|
045dfb45d1 | ||
|
|
7a72afe880 | ||
|
|
5c3921e457 | ||
|
|
a2fc3443d2 | ||
|
|
a6eb7bbdfe | ||
|
|
456e70c1e2 | ||
|
|
3bbb5bf160 | ||
|
|
d5cfa529c5 | ||
|
|
155ffc3cc9 | ||
|
|
699e6f3be6 | ||
|
|
2b4c3d4df1 | ||
|
|
a6cc44d507 | ||
|
|
8539edfdeb | ||
|
|
9bc424f858 | ||
|
|
053959b0dc | ||
|
|
ba4aa5f4d6 | ||
|
|
51bd36c1a1 | ||
|
|
2d002c53a8 | ||
|
|
da787b1cfa | ||
|
|
59439c3907 | ||
|
|
35ebc8060b | ||
|
|
02427a66dc | ||
|
|
6d437f7d3e | ||
|
|
19768460b0 | ||
|
|
6af03ee5c7 | ||
|
|
bff9ee8729 | ||
|
|
ae0374fc01 | ||
|
|
aa2f66f74d | ||
|
|
4031b35af6 | ||
|
|
9daaf13a4d | ||
|
|
8b938f0094 | ||
|
|
b3d3b0be98 | ||
|
|
ab13477865 | ||
|
|
f35a430c8c | ||
|
|
a7e03fae5d | ||
|
|
c134912d6a | ||
|
|
198664ac58 | ||
|
|
334e85273e | ||
|
|
19cdc00345 | ||
|
|
d4eaa1dc15 | ||
|
|
9e10fbf808 | ||
|
|
e0090d9bf6 | ||
|
|
af8327e76b | ||
|
|
669c232562 | ||
|
|
c3ee7ce886 | ||
|
|
7c9bb238b9 | ||
|
|
bc9e1bfe6c | ||
|
|
dd8e76890c | ||
|
|
01bb930e97 | ||
|
|
48adda4f53 | ||
|
|
add08321aa | ||
|
|
30ab9ebb58 | ||
|
|
ee89c743bf | ||
|
|
c665525e1b | ||
|
|
3f6ccc34a0 | ||
|
|
f0095fec2f | ||
|
|
d7baf8e014 | ||
|
|
6b377fd80f | ||
|
|
8f32e1b1a2 | ||
|
|
9eca7457ff | ||
|
|
5ba274b605 | ||
|
|
0856b8d4af | ||
|
|
9e8bfa03d0 | ||
|
|
116add09ba | ||
|
|
39aa42440b | ||
|
|
257baa1d46 | ||
|
|
2e1df2578c | ||
|
|
2a02aa0b9b | ||
|
|
860f4f458c | ||
|
|
ea5431b088 | ||
|
|
d5a3527059 | ||
|
|
ac58b502c5 | ||
|
|
90eb5462f7 | ||
|
|
5eced46f22 | ||
|
|
1a052969dc | ||
|
|
62a3eff5bb | ||
|
|
9d8de8a9db | ||
|
|
df811d7c02 | ||
|
|
16ff0328cd | ||
|
|
068b3c9adb | ||
|
|
2a11723496 | ||
|
|
4a54d4097a | ||
|
|
b975beb3b9 | ||
|
|
e1c5f3e545 | ||
|
|
335fe0dcfd | ||
|
|
f72e05ff09 | ||
|
|
572d67d5e9 | ||
|
|
0baf7da87b | ||
|
|
2d65e5fe1b | ||
|
|
eb032c6c81 | ||
|
|
b484abdb2f | ||
|
|
bc6130af4d | ||
|
|
2de86e7013 | ||
|
|
c34f2a6f9c | ||
|
|
6285f576a4 | ||
|
|
92718565be | ||
|
|
6711dda41a | ||
|
|
8da1632fcb | ||
|
|
2db9a53288 | ||
|
|
d65713a8cb | ||
|
|
9d3f4ff508 | ||
|
|
7e45cbccc7 | ||
|
|
21ecf4b299 | ||
|
|
26e7a16fd7 | ||
|
|
00d11b8440 | ||
|
|
4e5ae25d5f | ||
|
|
ecea1488e1 | ||
|
|
7136da1aa5 | ||
|
|
3b0bf4d8f2 | ||
|
|
c75149fb9f | ||
|
|
9bde10cdef | ||
|
|
1c681d23eb | ||
|
|
647c4578e2 | ||
|
|
110aa1f4d9 | ||
|
|
7a7f44614d | ||
|
|
4fede344fc | ||
|
|
705fb16d70 | ||
|
|
2d8c3cd247 | ||
|
|
c42916c027 | ||
|
|
02927b3866 | ||
|
|
b0faf2e1f2 | ||
|
|
faf204c03a | ||
|
|
b706b6f579 | ||
|
|
51fe0836dc | ||
|
|
8cbec57bf5 | ||
|
|
c034f509e7 | ||
|
|
4f4cb88a81 | ||
|
|
30cd670a16 | ||
|
|
0a2ea6786d | ||
|
|
2bd5794ab9 | ||
|
|
d3b01ffb2f | ||
|
|
3bb8812e33 | ||
|
|
230a1dbcc4 | ||
|
|
07f2ef1411 | ||
|
|
3c68114ad3 | ||
|
|
4f870512f4 | ||
|
|
5b7464f525 | ||
|
|
64d6c28e30 | ||
|
|
6f55b89149 | ||
|
|
7f213beefa | ||
|
|
bc1aba6c7a | ||
|
|
861dc9fe95 | ||
|
|
0a7994b67f | ||
|
|
a5441ff03e | ||
|
|
dd7ae8c617 | ||
|
|
cf4eed2de0 | ||
|
|
d7dfc5d30b | ||
|
|
27cda5dd31 | ||
|
|
cbacdb7e2c | ||
|
|
0fbb92f3ad | ||
|
|
7e857b3846 | ||
|
|
c75fe998e2 | ||
|
|
55d8e2db81 | ||
|
|
c209787de8 | ||
|
|
c4ce25415b | ||
|
|
423493ac8d | ||
|
|
7818c82075 | ||
|
|
84b9988330 | ||
|
|
ddf6755d0c | ||
|
|
850a7d55d9 | ||
|
|
e2403c8d94 | ||
|
|
46c9d0e33f | ||
|
|
a89cc87a43 | ||
|
|
4a86650a49 | ||
|
|
9f981328d2 | ||
|
|
848f60eae1 | ||
|
|
f6a819351f | ||
|
|
c6f4e4bc14 | ||
|
|
e24a3603ac | ||
|
|
1186f3fccf | ||
|
|
e0c2e7846a | ||
|
|
416b25d6ae | ||
|
|
9075b7b175 | ||
|
|
780cb5a2e7 | ||
|
|
27521bf5d6 | ||
|
|
5d255301b4 | ||
|
|
2d2d4247a1 | ||
|
|
496488cb3e | ||
|
|
dacbb0f2dc | ||
|
|
36c0f7c160 | ||
|
|
78a984b52f | ||
|
|
bc7a3de68d | ||
|
|
53f963f028 | ||
|
|
02b3b8e7e6 | ||
|
|
c45b61d402 | ||
|
|
f1b0be30e0 | ||
|
|
1222b9fdb4 | ||
|
|
bb54231233 | ||
|
|
4306178966 | ||
|
|
dde29c5d77 | ||
|
|
4cd9feae7b | ||
|
|
9a403aa1ce | ||
|
|
daf574188a | ||
|
|
5cf3dfa451 | ||
|
|
c607af658e | ||
|
|
58f96a6068 | ||
|
|
1a1673095e | ||
|
|
509cd3e95f | ||
|
|
0347748c50 | ||
|
|
6fab646a61 | ||
|
|
5a9405a315 | ||
|
|
24c7adb346 | ||
|
|
bad9649200 | ||
|
|
12e5cbb297 | ||
|
|
5d54866e52 | ||
|
|
f39d8d93ab | ||
|
|
f8b1b02df5 | ||
|
|
74ba52b883 | ||
|
|
5d4a65a3cb | ||
|
|
a5c4543282 | ||
|
|
0b34544125 | ||
|
|
cd33ec2f02 | ||
|
|
57fc5ec333 | ||
|
|
a756786f93 | ||
|
|
daddabc7b1 | ||
|
|
6014b7208f | ||
|
|
527b076732 | ||
|
|
de67bd19b2 | ||
|
|
6c709f2386 | ||
|
|
d26c12e6eb | ||
|
|
74d230c11c | ||
|
|
b146483940 | ||
|
|
9e2c79c5ed | ||
|
|
a0cece197f | ||
|
|
57858c1788 | ||
|
|
88736c1000 | ||
|
|
48357adac1 | ||
|
|
3b4d101a42 | ||
|
|
c3871e7da9 | ||
|
|
7a4ead4db4 | ||
|
|
c32d0cc791 | ||
|
|
b3c732e487 | ||
|
|
ae14b02cbd | ||
|
|
1532590b50 | ||
|
|
d3cbb730ac | ||
|
|
ffd5c896ed | ||
|
|
6bc960e10c | ||
|
|
2e237041ec | ||
|
|
23798b575b | ||
|
|
b690d9d18d | ||
|
|
cd030f4fa0 | ||
|
|
6db82861e6 | ||
|
|
a637ffc848 | ||
|
|
760be655e9 | ||
|
|
01e317259b | ||
|
|
c74c542b1f | ||
|
|
c4ad455aad | ||
|
|
8c43542f2e | ||
|
|
61f8590553 | ||
|
|
d84c17d9e2 | ||
|
|
c9d10b8a2b | ||
|
|
b43cec2d6b | ||
|
|
e1d5228796 | ||
|
|
fd77f9c7a0 | ||
|
|
f6b03dd55f | ||
|
|
43631e8847 | ||
|
|
afea3b54a8 | ||
|
|
17a2b333f3 | ||
|
|
06e63c8f95 | ||
|
|
1bc8bb2a24 | ||
|
|
1bf8493cd1 | ||
|
|
e705d4eed8 | ||
|
|
6e46bacf92 | ||
|
|
69bb8e3077 | ||
|
|
3aa7d39358 | ||
|
|
867403f589 | ||
|
|
cce7c5cb97 | ||
|
|
6ad8aa7988 | ||
|
|
36294e09a3 | ||
|
|
fddf130abd | ||
|
|
c0b6942392 | ||
|
|
f949fe2a49 | ||
|
|
55554ce9bd | ||
|
|
904894722f | ||
|
|
a8a167f87f | ||
|
|
cd7b8afccb | ||
|
|
6c6e72ca04 | ||
|
|
9616473c3a | ||
|
|
e53e8bb59f | ||
|
|
5cfe7610b2 | ||
|
|
6b50ba66a9 | ||
|
|
685ef90018 | ||
|
|
b48b79f5ca | ||
|
|
8f7f03a7d8 | ||
|
|
d1a16717b3 | ||
|
|
aa77638ca7 | ||
|
|
e893ac2aaa | ||
|
|
1f8c5509cf | ||
|
|
3c6396fbca | ||
|
|
8984b748c5 | ||
|
|
9fc7c49da5 | ||
|
|
650eb57e91 | ||
|
|
33a6c29517 | ||
|
|
ba2126c57a | ||
|
|
00bb9fad9f | ||
|
|
396ba7b1ab | ||
|
|
6fb306eb03 | ||
|
|
d12c9d7362 | ||
|
|
363039fe34 | ||
|
|
ef4eeab029 | ||
|
|
9ffd262801 | ||
|
|
a4318ecdbd | ||
|
|
c335eb9ad6 | ||
|
|
9d883f53c7 | ||
|
|
a25071f02f | ||
|
|
5f5efe2563 | ||
|
|
fa1f3d0a08 | ||
|
|
0720c3ef66 | ||
|
|
ea86a9f2ca | ||
|
|
4cf717baf8 | ||
|
|
bab3e714f7 | ||
|
|
74b2961f8d | ||
|
|
76201aed64 | ||
|
|
9e27b07772 | ||
|
|
51c5c58354 | ||
|
|
2d1b93c354 | ||
|
|
f945696d15 | ||
|
|
4687b96003 | ||
|
|
92524c2da0 | ||
|
|
a5ea0ba896 | ||
|
|
b7c7155852 | ||
|
|
fd28bf53de | ||
|
|
52d9cb6188 | ||
|
|
5dcdce8b62 | ||
|
|
b41b5c0a68 | ||
|
|
a9f820bfaa | ||
|
|
a2e40de597 | ||
|
|
2fa7baa035 | ||
|
|
177f0be21c | ||
|
|
c29def79f3 | ||
|
|
8fb50bbf68 | ||
|
|
ed9d356f60 | ||
|
|
a4be3a06f9 | ||
|
|
e636609fa8 | ||
|
|
1d1cf56692 | ||
|
|
82778a0aad | ||
|
|
3d239344fe | ||
|
|
c266d8c41e | ||
|
|
6f2c218f29 | ||
|
|
abfb0d3977 | ||
|
|
9a1a97d56f | ||
|
|
44caf44ce6 | ||
|
|
e800b8a9a7 | ||
|
|
4d0ff4a834 | ||
|
|
ce4fe7850b | ||
|
|
869a6ce553 | ||
|
|
43b90f1ae8 | ||
|
|
3e694926c9 | ||
|
|
1c277a99cb | ||
|
|
071416ef11 | ||
|
|
5502a61452 | ||
|
|
96924e54c4 | ||
|
|
8cff88dea0 | ||
|
|
fbff08a580 | ||
|
|
9b45aed6f0 | ||
|
|
d9eea74f18 | ||
|
|
301d5a19b0 | ||
|
|
8cb4bb74fa | ||
|
|
61447f9ffd | ||
|
|
06742cfcc4 | ||
|
|
82dfcc01e2 | ||
|
|
892391a7fd | ||
|
|
44a43cb130 | ||
|
|
e00c98546f | ||
|
|
27e2f7ab3d | ||
|
|
eadf9f1f8e | ||
|
|
597fb7d219 | ||
|
|
e27d19a346 | ||
|
|
15bf4a8386 | ||
|
|
003ed01e30 | ||
|
|
db239debf1 | ||
|
|
fccd4e1a20 | ||
|
|
0c8c093cf7 | ||
|
|
f74b702c5e | ||
|
|
75309bf3a0 | ||
|
|
dc310c4ce4 | ||
|
|
0aa3c3fa53 | ||
|
|
2d180f5e0f | ||
|
|
d83471bd46 | ||
|
|
974f601fa9 | ||
|
|
4a8ed5cd06 | ||
|
|
709d8d411c | ||
|
|
e79b750b6d | ||
|
|
bb4a2da52e | ||
|
|
79bb5cb9a7 | ||
|
|
70877e351c | ||
|
|
8877abb83f | ||
|
|
cdc5eb9909 | ||
|
|
e1482df157 | ||
|
|
b45b2db8e7 | ||
|
|
d21efd90b4 | ||
|
|
d82a259bab | ||
|
|
6f64a59f49 | ||
|
|
d67aa94709 | ||
|
|
f8376c8845 | ||
|
|
52f3cf2af0 | ||
|
|
0997fd3347 | ||
|
|
2c4fec77bb | ||
|
|
2a04ed70b6 | ||
|
|
1ea821a6c3 | ||
|
|
3358254212 | ||
|
|
dbde0b2719 | ||
|
|
9ead92a490 | ||
|
|
feb6f2fed6 | ||
|
|
128c442b17 | ||
|
|
162db40370 | ||
|
|
5855fd069f | ||
|
|
c045b1ca6b | ||
|
|
d1319977d6 | ||
|
|
9c073364f5 | ||
|
|
e9554447d6 | ||
|
|
f3f9d37d59 | ||
|
|
0454f3bc8f | ||
|
|
aa81bc0589 | ||
|
|
3f70ee3e54 | ||
|
|
e922615cc7 | ||
|
|
d6a70c7e7b | ||
|
|
c725506d63 | ||
|
|
cafcf5cb7c | ||
|
|
54e6dd59f1 | ||
|
|
bd89c31cb7 | ||
|
|
4136c2682f | ||
|
|
5b8c93fd29 | ||
|
|
0337a21f66 | ||
|
|
407c54757d | ||
|
|
5dbefcbd9c | ||
|
|
70e552535b | ||
|
|
8e6b19c36e | ||
|
|
c379b3e477 | ||
|
|
2271c476e9 | ||
|
|
c70be7a386 | ||
|
|
6c7217b873 | ||
|
|
aa276f0b18 | ||
|
|
c43149f4c9 | ||
|
|
3d4252f43c | ||
|
|
d0219ced67 | ||
|
|
2bc7b7e2cc | ||
|
|
8c42e85fcc | ||
|
|
257abfaee8 | ||
|
|
faf53aa479 | ||
|
|
d9204083f7 | ||
|
|
775e78bd08 | ||
|
|
997cc4f466 | ||
|
|
a825e2678c | ||
|
|
6c6e26712d | ||
|
|
c4985bca67 | ||
|
|
620a36be82 | ||
|
|
7bf61b401f | ||
|
|
10f6d00e04 | ||
|
|
dfae840ace | ||
|
|
f6ec744a1f | ||
|
|
8f1b142949 | ||
|
|
94c298a1e3 | ||
|
|
6e7e69b19d | ||
|
|
e34e36c390 | ||
|
|
5103ee21aa | ||
|
|
c58cb02689 | ||
|
|
72eb61d1fc | ||
|
|
9e18736475 | ||
|
|
7a564f3185 | ||
|
|
e8d9982330 | ||
|
|
e1f1531d42 | ||
|
|
5e6b27a63f | ||
|
|
9f326b3f28 | ||
|
|
66bded4910 | ||
|
|
9c96394369 | ||
|
|
df02a1c1cc | ||
|
|
f0ca3fef54 | ||
|
|
ca680c3aeb | ||
|
|
a1c768b9b3 | ||
|
|
857850b4c6 | ||
|
|
da92be3030 | ||
|
|
e290965acf | ||
|
|
d1b67f1fff | ||
|
|
7c4381bfd5 | ||
|
|
bc410b4111 | ||
|
|
534a5f0898 | ||
|
|
1a2153585e | ||
|
|
547c14d18e | ||
|
|
d0c0543659 | ||
|
|
e0a513650e | ||
|
|
9ecfa843f0 | ||
|
|
afd64c3e04 | ||
|
|
9b3ed8d614 | ||
|
|
79f181cd55 | ||
|
|
d5b14769dd | ||
|
|
bdc89e5907 | ||
|
|
a68234bdf4 | ||
|
|
3f2079b4ea | ||
|
|
ecb8a02356 | ||
|
|
39d8465938 | ||
|
|
b15244e672 | ||
|
|
a9905d3508 | ||
|
|
77340011bd | ||
|
|
5c1d99a04c | ||
|
|
b02f8ba88b | ||
|
|
f973239379 | ||
|
|
f0a125f070 | ||
|
|
5a19cebfd7 | ||
|
|
d5697b9399 | ||
|
|
8f98bbc66f | ||
|
|
d4ec8d3ab5 | ||
|
|
0a08911800 | ||
|
|
30a15aaa7a | ||
|
|
d727dd76ce | ||
|
|
39af6359be | ||
|
|
d1728a4653 | ||
|
|
13608df0ef | ||
|
|
c07b3161fc | ||
|
|
1f2e2ba61d | ||
|
|
93bd3cd9e3 | ||
|
|
9930c0493d | ||
|
|
455a80e09d | ||
|
|
9a845664e1 | ||
|
|
36c96be091 | ||
|
|
1a99271fa8 | ||
|
|
dc04ab912d | ||
|
|
93f819609e | ||
|
|
6480957c4f | ||
|
|
b33cd266e7 | ||
|
|
88cbae2a6d | ||
|
|
3848b467a2 | ||
|
|
e68c04b9a6 | ||
|
|
5d8340d305 | ||
|
|
336e901c1e | ||
|
|
a6e4949264 | ||
|
|
1b325435b8 | ||
|
|
f8edf6b07a | ||
|
|
9e6091e665 | ||
|
|
a755f69e92 | ||
|
|
518337812f | ||
|
|
324e1ad1b5 | ||
|
|
e95384f76b | ||
|
|
111d5c68bf | ||
|
|
25ecbcdbbd | ||
|
|
ca75d4162d | ||
|
|
a8a43812a0 | ||
|
|
7058989941 | ||
|
|
0decb386d5 | ||
|
|
4967cc1d1c | ||
|
|
06cb7a0d55 | ||
|
|
fcd16e849d | ||
|
|
eb55ba5dd0 | ||
|
|
a7593db0c3 | ||
|
|
7502cbd13d | ||
|
|
823629d332 | ||
|
|
401683a305 | ||
|
|
8fc0cb67ec | ||
|
|
a1dcc2c173 | ||
|
|
bd4621070c | ||
|
|
70eb751868 | ||
|
|
ef262c26e8 | ||
|
|
5ad5a29a00 | ||
|
|
46d333df4b | ||
|
|
247698fea6 | ||
|
|
302537efd2 | ||
|
|
a62f04fa7e | ||
|
|
1c98b48e5d | ||
|
|
33bf6f59b3 | ||
|
|
550a0bd07b | ||
|
|
213f7d224c | ||
|
|
c62bff3002 | ||
|
|
31f3c429ab | ||
|
|
fee6773ef3 | ||
|
|
bc49a2e124 | ||
|
|
3fe10efd09 | ||
|
|
772e4286f2 | ||
|
|
b9e30e7e19 | ||
|
|
67317f88df | ||
|
|
c6d99722eb | ||
|
|
bd2aa1bd43 | ||
|
|
6d9520e599 | ||
|
|
9d0bc930a6 | ||
|
|
f63c2d18a3 | ||
|
|
1bdedf1e28 | ||
|
|
14b511d673 | ||
|
|
86a2b7d2e3 | ||
|
|
a91a0f8abb | ||
|
|
5a1a30efeb | ||
|
|
3d913d89f6 | ||
|
|
e0453dbc15 | ||
|
|
1c6f847c55 | ||
|
|
61d4b478ce | ||
|
|
350a84d253 | ||
|
|
618158a0f3 | ||
|
|
dbc3d82017 | ||
|
|
bd3f753d85 | ||
|
|
864562221d | ||
|
|
52f2ce35f6 | ||
|
|
623aa737e0 | ||
|
|
e8c3472581 | ||
|
|
730af2e552 | ||
|
|
04ee7a7020 | ||
|
|
8612f1a926 | ||
|
|
69135ff37e | ||
|
|
0edb027a53 | ||
|
|
18b0c90d0e | ||
|
|
26a3a8fd0a | ||
|
|
97b0aa3eb8 | ||
|
|
745473322a | ||
|
|
0066de604e | ||
|
|
6797dc7df1 | ||
|
|
f9247a9c42 | ||
|
|
20f9fae613 | ||
|
|
84b34b2221 | ||
|
|
69ec927fd7 | ||
|
|
19f9648b40 | ||
|
|
be6c4dc6df | ||
|
|
7292eaefc3 | ||
|
|
84ca9ff7e5 | ||
|
|
24905e74a5 | ||
|
|
4022ebd31c | ||
|
|
135e78c868 | ||
|
|
a22391b7ad | ||
|
|
a4b024d6f9 | ||
|
|
d4016223d5 | ||
|
|
2580ad305c | ||
|
|
377ca5ca22 | ||
|
|
fda75cbaa5 | ||
|
|
441d1c2676 | ||
|
|
0ab135b034 | ||
|
|
5901c57bde | ||
|
|
0bd6970b4b | ||
|
|
bdfb1ee549 | ||
|
|
f62373c3fa | ||
|
|
79cd7e4cab | ||
|
|
326031d289 | ||
|
|
d68473bfc2 | ||
|
|
cb16e11cf5 | ||
|
|
5c04328081 | ||
|
|
913f709c39 | ||
|
|
41f6480834 | ||
|
|
ae6b0b07aa | ||
|
|
a6113f88e7 | ||
|
|
c3ece32145 | ||
|
|
9082c51074 | ||
|
|
da2b54823b | ||
|
|
6d40d52d7d | ||
|
|
fbdb76e705 | ||
|
|
847a405712 | ||
|
|
7cce5b1b79 | ||
|
|
b75dc20a7d | ||
|
|
0c7562c6f8 | ||
|
|
539f08f627 | ||
|
|
4448399e71 | ||
|
|
c50f39b4fa | ||
|
|
4469b7428a | ||
|
|
a108856a98 | ||
|
|
1b216841a8 | ||
|
|
db421c97dc | ||
|
|
93f1a8e59d | ||
|
|
d72c3ac6bf | ||
|
|
a3d9db0e00 | ||
|
|
e8a4a4c89e | ||
|
|
50361505db | ||
|
|
267cc3fd54 | ||
|
|
a086302fc5 | ||
|
|
bd894ceaaf | ||
|
|
3ed019d708 | ||
|
|
012040d5c7 | ||
|
|
8d26d06f5e | ||
|
|
84907be0cd | ||
|
|
21aef2eef1 | ||
|
|
017037586c | ||
|
|
1bb4e4920b | ||
|
|
1ff3b57f88 | ||
|
|
d473352f7f | ||
|
|
bf0d7bc23a | ||
|
|
7fe94596cd | ||
|
|
6135b762af | ||
|
|
cd35f7e545 | ||
|
|
acfdbd5d4d | ||
|
|
37a048d201 | ||
|
|
506ebc3f23 | ||
|
|
6c20d29e55 | ||
|
|
88244b2918 | ||
|
|
30dac07817 | ||
|
|
40e50c9a2f | ||
|
|
5894c334b9 | ||
|
|
9c05854928 | ||
|
|
d666d67877 | ||
|
|
c09444ae39 | ||
|
|
2f10d04452 | ||
|
|
1caa12a526 | ||
|
|
1d7354f8a3 | ||
|
|
8f56787bf1 | ||
|
|
01f90374b7 | ||
|
|
b34ec89871 | ||
|
|
c345882a2a | ||
|
|
b16e5516bf | ||
|
|
5fdae7dc1e | ||
|
|
2757f4157e | ||
|
|
ae8a12a4b4 | ||
|
|
a585b07522 | ||
|
|
3b655fb6a1 | ||
|
|
62ef52a4cd | ||
|
|
135c7d4b2c | ||
|
|
88606e272f | ||
|
|
b00061fa0f | ||
|
|
9562a75351 | ||
|
|
d633f4be06 | ||
|
|
2577233ff0 | ||
|
|
a15797ce6c | ||
|
|
c7700e8cc2 | ||
|
|
248577d4f4 | ||
|
|
46746babd5 | ||
|
|
0759c055d3 | ||
|
|
06eb9e5b02 | ||
|
|
bf7d6f40ce | ||
|
|
49c18e94e8 | ||
|
|
efa34d4bcf | ||
|
|
8f2c1ea389 | ||
|
|
c1df31b106 | ||
|
|
b3d0dfb704 | ||
|
|
28a132ba33 | ||
|
|
29d2113f64 | ||
|
|
6d505fc75a | ||
|
|
8d016faf90 | ||
|
|
f099681e3d | ||
|
|
634c8b48d1 | ||
|
|
244651dcba | ||
|
|
edb5d067b8 | ||
|
|
3687c1800e | ||
|
|
33d6133f49 | ||
|
|
8ac63b9f65 | ||
|
|
8bbeb90f6f | ||
|
|
c969a1a742 | ||
|
|
3d745b7c12 | ||
|
|
e38905765b | ||
|
|
765bc82028 | ||
|
|
c5d329db70 | ||
|
|
6e0dec7aa2 | ||
|
|
f6bc8c7f5b | ||
|
|
5214a3518c | ||
|
|
8b836a4743 | ||
|
|
de3167c146 | ||
|
|
c6404f813d | ||
|
|
8d0977f015 | ||
|
|
f9deab94f9 | ||
|
|
a54b49362d | ||
|
|
360c10d90e | ||
|
|
9201860aa8 | ||
|
|
3a5942b75d | ||
|
|
5bf4c41c1d | ||
|
|
0f1682a9b7 | ||
|
|
1222ff9c92 | ||
|
|
410c3dd103 | ||
|
|
3028dc4182 | ||
|
|
69e449788d | ||
|
|
c3d23103e2 | ||
|
|
e5d626574c | ||
|
|
cce61f52ad | ||
|
|
bfe21844ea | ||
|
|
0532cae666 | ||
|
|
a6b36ae62f | ||
|
|
8766820974 | ||
|
|
85b09e11cf | ||
|
|
5d1d466edb | ||
|
|
a9930fb167 | ||
|
|
b628b68aef | ||
|
|
a1e7f19580 | ||
|
|
f4b4752e20 | ||
|
|
b3d547db30 | ||
|
|
23a54f58b0 | ||
|
|
e16ec3ab9d | ||
|
|
9e8f6a36f5 | ||
|
|
496ea86840 | ||
|
|
b3854eb2c3 | ||
|
|
2be6c8b86d | ||
|
|
3db6dbfcb3 | ||
|
|
dfd55d0eb0 | ||
|
|
ca6ac610a2 | ||
|
|
b943edcd24 | ||
|
|
03ff6e9824 | ||
|
|
7847c8b99c | ||
|
|
8660d58eb0 | ||
|
|
9de027167d | ||
|
|
65095fa4f7 | ||
|
|
f07f489ef6 | ||
|
|
15f4e94b4f | ||
|
|
6d66590fd4 | ||
|
|
cc1e9562b0 | ||
|
|
ecad66bf22 | ||
|
|
d8ae1bd06c | ||
|
|
1679024926 | ||
|
|
690233c02b | ||
|
|
4cccaebac5 | ||
|
|
42e9164050 | ||
|
|
4af837b987 | ||
|
|
a23a7c4488 | ||
|
|
46c4a93468 | ||
|
|
84daf1ae52 | ||
|
|
be01d2f7ec | ||
|
|
9273e634ce | ||
|
|
dd9d5d67a1 | ||
|
|
f5dda60e5b | ||
|
|
578f6e7ba5 | ||
|
|
22464734da | ||
|
|
ee1f7fb6b9 | ||
|
|
fc3cdd06af | ||
|
|
1668e4bc57 | ||
|
|
f4a0dca15b | ||
|
|
45417753a2 | ||
|
|
0967dc2130 | ||
|
|
d48936eb79 | ||
|
|
f5ff9f0997 | ||
|
|
56324bc71e | ||
|
|
c5c3b3928e | ||
|
|
7f38a80bb8 | ||
|
|
ed9f1c6d6f | ||
|
|
f7f4446755 | ||
|
|
e183b95195 | ||
|
|
2bd289fa79 | ||
|
|
298bb3b3be | ||
|
|
de2f3af3df | ||
|
|
11505e0473 | ||
|
|
dfe4fde66e | ||
|
|
d849a20325 | ||
|
|
a6aec6d6a0 | ||
|
|
fd7029fe34 | ||
|
|
e67a4024a2 | ||
|
|
d7617f296b | ||
|
|
4387ae2bb3 | ||
|
|
2551c361eb | ||
|
|
78e430221f | ||
|
|
ae42f6d9f4 | ||
|
|
3880122ef7 | ||
|
|
5a0823baed | ||
|
|
8083ff6584 | ||
|
|
1599afa74f | ||
|
|
356ed6f9eb | ||
|
|
38910c7c48 | ||
|
|
97aa934343 | ||
|
|
376d7bdac6 | ||
|
|
f3934a1732 | ||
|
|
efbbded715 | ||
|
|
d49aee6dd7 | ||
|
|
38497482b5 | ||
|
|
75c049d7ea | ||
|
|
2904cc07e2 | ||
|
|
71e7e697ae | ||
|
|
89d2f9c5c9 | ||
|
|
7dd7ebbb94 | ||
|
|
6787b82ec0 | ||
|
|
3a048d515a | ||
|
|
7316b1d14c | ||
|
|
07b16a6f5f | ||
|
|
66acde1c66 | ||
|
|
11ae74fbac | ||
|
|
57386b905c | ||
|
|
49405316ff | ||
|
|
66282e7ac9 | ||
|
|
06bc6b9012 | ||
|
|
915c3e6455 | ||
|
|
260997781a | ||
|
|
8755ba31b2 | ||
|
|
75ab1f8dab | ||
|
|
e0ffebecdc | ||
|
|
8cece0f92f | ||
|
|
cf1eaae7e5 | ||
|
|
6a93ca2f9f | ||
|
|
ae6452e6e4 | ||
|
|
7cb7d2aebf | ||
|
|
affc954047 | ||
|
|
4662ac2774 | ||
|
|
dd4d66fcb6 | ||
|
|
3ab23dde07 | ||
|
|
18a6ba90f9 | ||
|
|
a901661e91 | ||
|
|
9781a905a7 | ||
|
|
4cd064f76c | ||
|
|
f9be3dd974 | ||
|
|
4e50214b80 | ||
|
|
5c27ec31b7 | ||
|
|
b061843eb1 | ||
|
|
76d9b37b22 | ||
|
|
dff21e1d36 | ||
|
|
888f45254a | ||
|
|
ebcacdb5af | ||
|
|
5a002f9007 | ||
|
|
8d11789566 | ||
|
|
b0677fefa7 | ||
|
|
76d36f0758 | ||
|
|
5ae531ca25 | ||
|
|
5debadfde1 | ||
|
|
642dc83702 | ||
|
|
99bc51f106 | ||
|
|
c05f220d14 | ||
|
|
741ea68cac | ||
|
|
58dca68fb4 | ||
|
|
b1db1e3e6f | ||
|
|
e4c7e3eb74 | ||
|
|
0c9a98ce18 | ||
|
|
30d71d4a0e | ||
|
|
239391540f | ||
|
|
8f37b0f409 | ||
|
|
13d69a13f1 | ||
|
|
f734fb34f8 | ||
|
|
f186f6cc79 | ||
|
|
16f0a0dcfb | ||
|
|
a6729a562b | ||
|
|
b875def7de | ||
|
|
828ba13eec | ||
|
|
9bec66d5d6 | ||
|
|
30e09b8a07 | ||
|
|
5c1a1baf08 | ||
|
|
ade2cc8a7c | ||
|
|
0a31f6fe3a | ||
|
|
54f9fcf856 | ||
|
|
720d37dc5d | ||
|
|
5804cd11bc | ||
|
|
3254c52d7c | ||
|
|
090e243438 | ||
|
|
d697004889 | ||
|
|
2392c69a28 | ||
|
|
6ea57dafe7 | ||
|
|
8c34cfe64e | ||
|
|
1ec71cd509 | ||
|
|
43b9d9d4b6 | ||
|
|
6462dd891c | ||
|
|
353438dbd3 | ||
|
|
a9821decca | ||
|
|
548ca90e57 | ||
|
|
d55e34a55f | ||
|
|
d09a7506df | ||
|
|
ccdbaa84f9 | ||
|
|
7aa1334af9 | ||
|
|
66e66c9d18 | ||
|
|
57fe5f472f | ||
|
|
5612b0e7d2 | ||
|
|
52a88d63ad | ||
|
|
f98e7702fb | ||
|
|
7a710005a1 | ||
|
|
4d13e0c2f6 | ||
|
|
ffcf2215de | ||
|
|
70576f9ca7 | ||
|
|
8e954d99df | ||
|
|
5c1a6a68af | ||
|
|
aea8581b09 | ||
|
|
3511ae53f4 | ||
|
|
335143fca3 | ||
|
|
75b7ae94e1 | ||
|
|
c4270ca950 | ||
|
|
8a4b0e16e4 | ||
|
|
ebe7c82fb9 | ||
|
|
fbdf77ab38 | ||
|
|
9352e7a594 | ||
|
|
28de1b3fba | ||
|
|
64b1a54cad | ||
|
|
3c47971c61 | ||
|
|
6b90dc70b1 | ||
|
|
859ea13b0a | ||
|
|
51a3b0312a | ||
|
|
1d5699a67f | ||
|
|
eb7fde9c12 | ||
|
|
c8b86508eb | ||
|
|
61503b7b17 | ||
|
|
f918efa8f9 | ||
|
|
dba2246d7a | ||
|
|
d09cfb82f8 | ||
|
|
d02efdcc05 | ||
|
|
06bdee37ff | ||
|
|
e4c0c6b9d9 | ||
|
|
72c5172873 | ||
|
|
36e02c74fd | ||
|
|
3ae9feba8f | ||
|
|
757a829137 | ||
|
|
f7e218637e | ||
|
|
04a96125cc | ||
|
|
5141360b48 | ||
|
|
dbe80de925 | ||
|
|
4de1937e41 | ||
|
|
d4a634d24e | ||
|
|
2480b773a1 | ||
|
|
7f0b43c18f | ||
|
|
68efb73be6 | ||
|
|
2b76903bf3 | ||
|
|
6a4a94e236 | ||
|
|
9139c81db9 | ||
|
|
14249de8e5 | ||
|
|
b4db0c1a6c | ||
|
|
cd97ac3388 | ||
|
|
73f3ce7579 | ||
|
|
da67ebed5d | ||
|
|
36c2266196 | ||
|
|
6b357fdcb4 | ||
|
|
2ed3c6c356 | ||
|
|
528bd744e0 | ||
|
|
4ab42e846d | ||
|
|
d2cbb02342 | ||
|
|
e2e18cc0fc | ||
|
|
a31a7a231c | ||
|
|
669259eace | ||
|
|
45c543adde | ||
|
|
627a6bf8a5 | ||
|
|
f5e55540e9 | ||
|
|
d7f3a2b003 | ||
|
|
9ce309bed9 | ||
|
|
b62264c275 | ||
|
|
d4e832c27b | ||
|
|
59c45ea1d6 | ||
|
|
f64a754211 | ||
|
|
d8895bb64b | ||
|
|
882889a962 | ||
|
|
7338a77285 | ||
|
|
af014750aa | ||
|
|
02a8409114 | ||
|
|
3681c17aa2 | ||
|
|
f56023bb74 | ||
|
|
5ef41861d3 | ||
|
|
a679e80187 | ||
|
|
85c841da88 | ||
|
|
7cabb4dd9a | ||
|
|
286be7f3df | ||
|
|
1e915968b5 | ||
|
|
3dfb84048c | ||
|
|
78a3570bb2 | ||
|
|
9733bf9fa1 | ||
|
|
effaa8e81c | ||
|
|
7558a9898e | ||
|
|
eca6cde934 | ||
|
|
197f0c7c95 | ||
|
|
ef2682945c | ||
|
|
5e7ea4217f | ||
|
|
123fbea7c0 | ||
|
|
0673fdff2d | ||
|
|
e07befb93c | ||
|
|
8e1f890322 | ||
|
|
8ca713f6bb | ||
|
|
da1ddee0ba | ||
|
|
d48cf24c4d | ||
|
|
5614475521 | ||
|
|
b826770687 | ||
|
|
34807028db | ||
|
|
0405b36ab4 | ||
|
|
291f59999c | ||
|
|
1568fc7827 | ||
|
|
681fd6abf6 | ||
|
|
031159c1b9 | ||
|
|
812e34c6f5 | ||
|
|
5921692f83 | ||
|
|
33d5dd44d9 | ||
|
|
d7562d36e6 | ||
|
|
49a2f8ab82 | ||
|
|
82afae6447 | ||
|
|
25ab915883 | ||
|
|
0963c403ab | ||
|
|
9c1852fcdb | ||
|
|
a6aef82236 | ||
|
|
8b4e31bb22 | ||
|
|
7c923a0fa1 | ||
|
|
169f202994 | ||
|
|
4448e60a8b | ||
|
|
c744c25d35 | ||
|
|
f9ebdae66d | ||
|
|
767ba96186 | ||
|
|
55213e1045 | ||
|
|
1843d42e0b | ||
|
|
065f5e5922 | ||
|
|
f7beb3d95d | ||
|
|
c09dfb8ec8 | ||
|
|
87b90e96b6 | ||
|
|
e556be1a0d | ||
|
|
88fddf2a6d | ||
|
|
97fe71a829 | ||
|
|
988cdbd6bb | ||
|
|
be84325de1 | ||
|
|
e7d9d6b19e | ||
|
|
bd378e8a44 | ||
|
|
82da43cfba | ||
|
|
a96ad0c10c | ||
|
|
670e679a09 | ||
|
|
b03485a85b | ||
|
|
aac0408f76 | ||
|
|
5b9ed4f373 | ||
|
|
033b0952dd | ||
|
|
12e2686e3f | ||
|
|
cc2f054e6a | ||
|
|
a799630fac | ||
|
|
77f0f55ee7 | ||
|
|
48428ed777 | ||
|
|
0c7afb26b0 | ||
|
|
4f2c968daa | ||
|
|
411f0550e0 | ||
|
|
f9fcad257e | ||
|
|
b0d699f281 | ||
|
|
4e8242fe5e | ||
|
|
5ceccbdf68 | ||
|
|
324c08a8a2 | ||
|
|
103e47b6dd | ||
|
|
09831c3b93 | ||
|
|
99336870b8 | ||
|
|
c81e980fcf | ||
|
|
dbdf2ad55d | ||
|
|
9306011f70 | ||
|
|
162abcee4f | ||
|
|
c1ff3d4652 | ||
|
|
f9693e78c8 | ||
|
|
fe549f2fb5 | ||
|
|
d9300ad210 | ||
|
|
8ddf4888db | ||
|
|
bf5fbf4412 | ||
|
|
dfc98ecc0f | ||
|
|
86e53f96a9 | ||
|
|
3d4205b206 | ||
|
|
f81c802ecc | ||
|
|
5d9157bc40 | ||
|
|
6a85d6a58b | ||
|
|
8ddb214b0e | ||
|
|
308927adce | ||
|
|
7caa95b3f3 | ||
|
|
b5c85ad5be | ||
|
|
bad90b2b1d | ||
|
|
4c74e0dfba | ||
|
|
46933051b9 | ||
|
|
aeb9241d3b | ||
|
|
0d9b6b9852 | ||
|
|
5cac43fe55 | ||
|
|
8cc92680c5 | ||
|
|
b583f80221 | ||
|
|
6ab9f28d77 | ||
|
|
67c8af3869 | ||
|
|
12a9bdbf6e | ||
|
|
8c3fd77cfd | ||
|
|
9137be814c | ||
|
|
aad7f67f7c | ||
|
|
815b839eeb | ||
|
|
608f9d0333 | ||
|
|
ccbe2c719a | ||
|
|
76b36aa3f6 | ||
|
|
8c81d520f6 | ||
|
|
afe1e8b33c | ||
|
|
6eb0bd8c87 | ||
|
|
f3d53fbba4 | ||
|
|
b7ff627368 | ||
|
|
9ffddf3561 | ||
|
|
56ff76584d | ||
|
|
324d98d231 | ||
|
|
277e9691e1 | ||
|
|
bce0671057 | ||
|
|
ff10ef2c26 | ||
|
|
1d8a98e5ce | ||
|
|
cb43d0cc64 | ||
|
|
065bba5851 | ||
|
|
8efac2923b | ||
|
|
fc8c58a1e6 | ||
|
|
20b2773ea2 | ||
|
|
0bd7613da4 | ||
|
|
f7ef14d737 | ||
|
|
e00e498e50 | ||
|
|
17fb2ace91 | ||
|
|
2deb575961 | ||
|
|
a7465f9d81 | ||
|
|
9d55e37687 | ||
|
|
3c5a3fdd7c | ||
|
|
4477c92df9 | ||
|
|
a6062d4ab4 | ||
|
|
41f24a58b1 | ||
|
|
352900fcff | ||
|
|
62424633fc | ||
|
|
e2184a6f12 | ||
|
|
755cd909ed | ||
|
|
6338b368d4 | ||
|
|
ca56fa1b8b | ||
|
|
7c818eda47 | ||
|
|
bdb160bec1 | ||
|
|
25b90d62d2 | ||
|
|
7cd6f7666c | ||
|
|
2cdfa1cae1 | ||
|
|
17d2866153 | ||
|
|
d459b4171d | ||
|
|
e4ec973a6e | ||
|
|
3df9a5629f | ||
|
|
02b98e4736 | ||
|
|
f45b5bfd5e | ||
|
|
e39a5663bf | ||
|
|
89cc896c27 | ||
|
|
be95a619bc | ||
|
|
cafbf44e2f | ||
|
|
e64b69248a | ||
|
|
441ac29c7c | ||
|
|
ed84f21c08 | ||
|
|
5884576fc2 | ||
|
|
922b6e3722 | ||
|
|
cca507da6a | ||
|
|
d58fe853d6 | ||
|
|
03dc90b4fd | ||
|
|
2a4918c7ce | ||
|
|
7bb130edb7 | ||
|
|
3af1342a9b | ||
|
|
d16ff7fa12 | ||
|
|
d5dbd456ea | ||
|
|
3f25514e1a | ||
|
|
e3d0f693a7 | ||
|
|
97b33a9138 | ||
|
|
f73c927512 | ||
|
|
97750f8b28 | ||
|
|
827dbbc740 | ||
|
|
89e92749a6 | ||
|
|
e877a996be | ||
|
|
6bfbe0bb66 | ||
|
|
d728237697 | ||
|
|
279a706f78 | ||
|
|
dbd48356f5 | ||
|
|
6dc55624bd | ||
|
|
5e645e1489 | ||
|
|
87a786fec5 | ||
|
|
c9fc203596 | ||
|
|
f87525d8cf | ||
|
|
df4dbe5d88 | ||
|
|
31332a5061 | ||
|
|
1a66102e30 | ||
|
|
8c0380beec | ||
|
|
a7ef06028e | ||
|
|
c80fcf7b8e | ||
|
|
db5630eb32 | ||
|
|
1dc63eecbd | ||
|
|
530066875d | ||
|
|
59aef9a408 | ||
|
|
7b51bcd4ac | ||
|
|
80b782e6ed | ||
|
|
c179958afc | ||
|
|
a3ab4d1b68 | ||
|
|
575ae84e68 | ||
|
|
102c3b3007 | ||
|
|
18f3b940c3 | ||
|
|
baa15d7437 | ||
|
|
9804d42e67 | ||
|
|
0c182415a7 | ||
|
|
1599120c3e | ||
|
|
a53b5953ea | ||
|
|
0d7c4cd036 | ||
|
|
e42e26e16b | ||
|
|
b35a89c5a9 | ||
|
|
a1f4a9a386 | ||
|
|
12531dfb3e | ||
|
|
652b90a074 | ||
|
|
bdd7c58a62 | ||
|
|
3419f18c9f | ||
|
|
87ce52ded1 | ||
|
|
1db1411331 | ||
|
|
e435d01258 | ||
|
|
793e9d377e | ||
|
|
a57680fbbf | ||
|
|
eda71e3ffe | ||
|
|
b186d9d66c | ||
|
|
f16a211b48 | ||
|
|
d70a9be97e | ||
|
|
666bb9dfee | ||
|
|
081a44755e | ||
|
|
2eae6c25af | ||
|
|
4bbee232d8 | ||
|
|
441f7ab22a | ||
|
|
714b27f8a4 | ||
|
|
2d841f47eb | ||
|
|
4c98cd922f | ||
|
|
1c3c712629 | ||
|
|
84ec74e97f | ||
|
|
57cc1c7f8e | ||
|
|
0e67ffc41e | ||
|
|
f4e0d19d43 | ||
|
|
07e7988cdf | ||
|
|
d21aca2c59 | ||
|
|
540e066acf | ||
|
|
a49de4e473 | ||
|
|
4c28ae2630 | ||
|
|
2d07d89d60 | ||
|
|
83d8c8448b | ||
|
|
8eccd50ecb | ||
|
|
09ed45534d | ||
|
|
711945147b | ||
|
|
0b3a6687f6 | ||
|
|
1aec869f9e | ||
|
|
6f9a6eb294 | ||
|
|
96ed840d17 | ||
|
|
5acdf4a43c | ||
|
|
6b4c545592 | ||
|
|
dd6cbcf242 | ||
|
|
d6acf5530e | ||
|
|
94696e81fa | ||
|
|
43d6a2ad94 | ||
|
|
e1425a85e4 | ||
|
|
f5fa94cc9c | ||
|
|
fd85b1f605 | ||
|
|
b386783ec8 | ||
|
|
3b76b81edf | ||
|
|
2eb159b0c3 | ||
|
|
596e7b6f24 | ||
|
|
aa0437bb23 | ||
|
|
a6c22a292d | ||
|
|
0635edba17 | ||
|
|
a0491a5ef2 | ||
|
|
38d172c477 | ||
|
|
5e4c918d40 | ||
|
|
e8aaacff5e | ||
|
|
21d4d640c2 | ||
|
|
b927c1b84d | ||
|
|
d456a96cb5 | ||
|
|
1964fc6b65 | ||
|
|
26e270a49f | ||
|
|
3323623289 | ||
|
|
7a43321d1c | ||
|
|
4a5cc71c3e | ||
|
|
660ccf876e | ||
|
|
69dd81860f | ||
|
|
b1c2c026aa | ||
|
|
b7fa97bf9e | ||
|
|
1bdaab6d72 | ||
|
|
3edc14fc97 | ||
|
|
940d258c5e | ||
|
|
2500ca5106 | ||
|
|
c5a7fd6d43 | ||
|
|
d424af5b1e | ||
|
|
ca383739ab | ||
|
|
0176e888af | ||
|
|
0e320d2832 | ||
|
|
38b96c1e27 | ||
|
|
5da5a6fe5f | ||
|
|
28c9f42a25 | ||
|
|
44461e21df | ||
|
|
164c4eefa7 | ||
|
|
ee6c034baa | ||
|
|
4b399df541 | ||
|
|
f1c7e1113f | ||
|
|
90c68ba02f | ||
|
|
7f2180b47b | ||
|
|
21ff68f624 | ||
|
|
fd162f8895 | ||
|
|
03e80a76b6 | ||
|
|
08fdfd1e38 | ||
|
|
2a6c411edf | ||
|
|
65d7fd9cce | ||
|
|
e0570be562 | ||
|
|
ffa303092f | ||
|
|
382dc01b33 | ||
|
|
7f02155ce1 | ||
|
|
8c17a70dc1 | ||
|
|
b39623ab2b | ||
|
|
98e57287e3 | ||
|
|
68047866be | ||
|
|
bacc5cbcab | ||
|
|
549280e2b6 | ||
|
|
61af5971d5 | ||
|
|
acc206fca7 | ||
|
|
59a81ad3be | ||
|
|
d7b23b84f0 | ||
|
|
3d77de20cc | ||
|
|
365356eb5f | ||
|
|
044cc4a618 | ||
|
|
09541f8aac | ||
|
|
4d0979bbcd | ||
|
|
dba4bb9c2c | ||
|
|
2e4c886ab2 | ||
|
|
dd1962f92d | ||
|
|
1439e8b30b | ||
|
|
8240790381 | ||
|
|
0050aa6b92 | ||
|
|
f53b26f3f0 | ||
|
|
57a9a11ab3 | ||
|
|
a6a0e033a7 | ||
|
|
18492ac83c | ||
|
|
13dd8aa224 | ||
|
|
574304486a | ||
|
|
90feb8dc96 | ||
|
|
7bc241dd48 | ||
|
|
57b884e7c7 | ||
|
|
3ba775d4b3 | ||
|
|
89d6f0eb6e | ||
|
|
465e220315 | ||
|
|
1b767e7632 | ||
|
|
b3304337ca | ||
|
|
40e7f6d15b | ||
|
|
c95659d57d | ||
|
|
a1e7b99b26 | ||
|
|
52f1f2495c | ||
|
|
112ee88fe9 | ||
|
|
2ff06ff4c7 | ||
|
|
df289be994 | ||
|
|
ae76e8784c | ||
|
|
d537cb70cd | ||
|
|
4a70f0bea2 | ||
|
|
e51165d915 | ||
|
|
d10d4cc55c | ||
|
|
2301efa460 | ||
|
|
d00284166f | ||
|
|
f279ce44b2 | ||
|
|
36215828f1 | ||
|
|
0623af86d6 | ||
|
|
c6976499ad | ||
|
|
01bd69100c | ||
|
|
541d73ad93 | ||
|
|
6b159c32cf | ||
|
|
5f2968d1b0 | ||
|
|
0e768d107a | ||
|
|
3557ff16dc | ||
|
|
30131ef363 | ||
|
|
946c424734 | ||
|
|
f42b293836 | ||
|
|
b691c0affc | ||
|
|
48fa04a05b | ||
|
|
8c14bb9aeb | ||
|
|
ca2de6a4a3 | ||
|
|
755499797e | ||
|
|
f2a3cfc0b4 | ||
|
|
a42786a465 | ||
|
|
de0a467c97 | ||
|
|
ab23a4b6f1 | ||
|
|
87aed0eadf | ||
|
|
9a86549359 | ||
|
|
2eeb0069d5 | ||
|
|
f536a05e06 | ||
|
|
26b95854d4 | ||
|
|
775432c73f | ||
|
|
84ee5995f4 | ||
|
|
91e9bb9670 | ||
|
|
c6a8bd669f | ||
|
|
d9d0a932b0 | ||
|
|
a91d45c397 | ||
|
|
98c81513aa | ||
|
|
a7e5f2abdc | ||
|
|
0aa0c884d3 | ||
|
|
dfa39fc590 | ||
|
|
cbd442fc2e | ||
|
|
ebd2778f5b | ||
|
|
5887d4ddfa | ||
|
|
36e9b4b2ae | ||
|
|
81d31c9934 | ||
|
|
4aaefb0c4c | ||
|
|
6aac1ea0d1 | ||
|
|
bd275d9b5d | ||
|
|
8c0dbc7d6a | ||
|
|
07194ca17f | ||
|
|
325c6d44dd | ||
|
|
168ed1716c | ||
|
|
3de8c3002a | ||
|
|
1cbbfb195f | ||
|
|
dceaef20ed | ||
|
|
ebbbcb99f2 | ||
|
|
3e70dbb836 | ||
|
|
f1c74b08cb | ||
|
|
451abcf8f3 | ||
|
|
98f03c249b | ||
|
|
4c4248d65b | ||
|
|
889c11d84b | ||
|
|
c0581a0e37 | ||
|
|
7e45f1173f | ||
|
|
21a94b6dca | ||
|
|
6cd50cb372 | ||
|
|
bde77dbf78 | ||
|
|
bd261e6847 | ||
|
|
f7863c8391 | ||
|
|
e8a532645f | ||
|
|
af0d2e6f7a | ||
|
|
0786954d34 | ||
|
|
a662046f95 | ||
|
|
77d7f63857 | ||
|
|
73814a5b65 | ||
|
|
4ba7d4ea10 | ||
|
|
c343316864 | ||
|
|
aa6abe0fd3 | ||
|
|
bf17023639 | ||
|
|
97513dee91 | ||
|
|
fceb412fb1 | ||
|
|
ef490f0a05 | ||
|
|
e0127250ae | ||
|
|
fcebbd67df | ||
|
|
d97fc1cfb8 | ||
|
|
9dba48fc19 | ||
|
|
b6db484393 | ||
|
|
7cdc68a007 | ||
|
|
1d93246af8 | ||
|
|
abce952d0f | ||
|
|
0b30bc8034 | ||
|
|
9882c94eec | ||
|
|
9a02f3f1dc | ||
|
|
5f1dc46392 | ||
|
|
c4462c4da4 | ||
|
|
f708964c5f | ||
|
|
d514ca0bb5 | ||
|
|
5b21cabff3 | ||
|
|
6e36f95bab | ||
|
|
ae1b1c7274 | ||
|
|
53a76b1353 | ||
|
|
5fd1772c3a | ||
|
|
ab0cc6c444 | ||
|
|
8ae597ad1d | ||
|
|
024ff6e489 | ||
|
|
246a50a592 | ||
|
|
6d514e72fa | ||
|
|
e6e5ede436 | ||
|
|
a19efc1cfa | ||
|
|
28a36c4908 | ||
|
|
ef083e6289 | ||
|
|
6e0c376b62 | ||
|
|
c9a0f88bf1 | ||
|
|
f558008574 | ||
|
|
b44bc686a1 | ||
|
|
037b99865d | ||
|
|
72ed9dbcce | ||
|
|
5d7b2a84f4 | ||
|
|
1b50b4ab0a | ||
|
|
bc9a60f696 | ||
|
|
44ce5c76ae | ||
|
|
702e9cf66c | ||
|
|
be26f45b5a | ||
|
|
f13ee16ab8 | ||
|
|
36dc98452d | ||
|
|
82f13af166 | ||
|
|
23ad4bb230 | ||
|
|
a8ccc7d2a7 | ||
|
|
0a533c754f | ||
|
|
f6efb53491 | ||
|
|
cf4a533f2f | ||
|
|
b4552237b6 | ||
|
|
e8d0965a33 | ||
|
|
bb9f764b9f | ||
|
|
9193b68854 | ||
|
|
db435c40e5 | ||
|
|
bf84405b43 | ||
|
|
833a64cc0e | ||
|
|
54fb2b5d75 | ||
|
|
85fafcf170 | ||
|
|
815cd530c8 | ||
|
|
ebdf38e136 | ||
|
|
a93f504d45 | ||
|
|
cae561f7b9 | ||
|
|
f9969a0e61 | ||
|
|
06ce3dfadb | ||
|
|
ab1d15216c | ||
|
|
e8cfbfad36 | ||
|
|
70de587f6c | ||
|
|
e7ee7a1781 | ||
|
|
c72bbf41ea | ||
|
|
34343a846d | ||
|
|
e0a70411dd | ||
|
|
947b2d4db6 | ||
|
|
3714a231a9 | ||
|
|
39984980fb | ||
|
|
c7becc6cad | ||
|
|
74f27480fc | ||
|
|
33d3722060 | ||
|
|
696df45306 | ||
|
|
1b4559c4a4 | ||
|
|
bd132ed7c6 | ||
|
|
66696d0b46 | ||
|
|
943e032d12 | ||
|
|
ff7429fd00 | ||
|
|
236a279793 | ||
|
|
7e206b3ba0 | ||
|
|
f612709d7d | ||
|
|
76412f6ade | ||
|
|
45c7cd6e8b | ||
|
|
67192cf664 | ||
|
|
3a77c38a2d | ||
|
|
810892bf40 | ||
|
|
4b7384fc98 | ||
|
|
1bdcdc397e | ||
|
|
61855fd14b | ||
|
|
4a9ac117e0 | ||
|
|
0d06903b89 | ||
|
|
a70217b791 | ||
|
|
71c698f6b1 | ||
|
|
eec0e5df01 | ||
|
|
f5020659f3 | ||
|
|
e26c5a7970 | ||
|
|
8b697920e2 | ||
|
|
415b38bd64 | ||
|
|
5eb69d33d1 | ||
|
|
7c44fb8d50 | ||
|
|
9a9aec31b7 | ||
|
|
26e77a693a | ||
|
|
29ff230084 | ||
|
|
21ed81d39e | ||
|
|
77d53b1009 | ||
|
|
664683c6e4 | ||
|
|
361ee01ab0 | ||
|
|
6889e65077 | ||
|
|
bd9d9fb5b9 | ||
|
|
231435001c | ||
|
|
05bf72e0d8 | ||
|
|
4b70aaa038 | ||
|
|
d52f676a84 | ||
|
|
4a1717e837 | ||
|
|
5aaa88f41e | ||
|
|
8300f433e9 | ||
|
|
bd2867b846 | ||
|
|
da1a47b57d | ||
|
|
75bb83bdec | ||
|
|
5bca600894 | ||
|
|
607b11ab6b | ||
|
|
6543647b3c | ||
|
|
57b317b0a4 | ||
|
|
d5cc136df2 | ||
|
|
0731616ebf | ||
|
|
6957a33ec7 | ||
|
|
46c274dcf2 | ||
|
|
ae21056401 | ||
|
|
30414cbd0c | ||
|
|
87574f7d76 | ||
|
|
30d8ebffb9 | ||
|
|
71876756a4 | ||
|
|
b1b85b4106 | ||
|
|
196b5d08eb | ||
|
|
2026a2731d | ||
|
|
c8d932f768 | ||
|
|
752a0cacd9 | ||
|
|
ecc6c9e01d | ||
|
|
7e9f98b513 | ||
|
|
0f514f300e | ||
|
|
017cfef6a2 | ||
|
|
81512504a7 | ||
|
|
becf7c1f86 | ||
|
|
9e6c89428e | ||
|
|
8d96be73b7 | ||
|
|
21c8639397 | ||
|
|
1699c6f3a3 | ||
|
|
70c947289f | ||
|
|
a4e54b6d00 | ||
|
|
ab9780d971 | ||
|
|
f5ba843cf3 | ||
|
|
052f2a5868 | ||
|
|
893df14c3e | ||
|
|
43c521c193 | ||
|
|
2a1d3877f1 | ||
|
|
4d735b4d88 | ||
|
|
b8b6d64f75 | ||
|
|
2b65def123 | ||
|
|
7fe69fa269 | ||
|
|
84367e1c16 | ||
|
|
0faf305f28 | ||
|
|
e64f7b34ff | ||
|
|
5ea4c9a73d | ||
|
|
7e7931f1ce | ||
|
|
428beb3413 | ||
|
|
9aab7dce7d | ||
|
|
2478556df1 | ||
|
|
a2d4ba4689 | ||
|
|
4ab9632526 | ||
|
|
baa819c2a5 | ||
|
|
aaf8bc811a | ||
|
|
53dabf7fd0 | ||
|
|
7ca4cba8ec | ||
|
|
5965b70b39 | ||
|
|
23db07ed4e | ||
|
|
53e75e7898 | ||
|
|
16d15ae9bf | ||
|
|
3def0ae036 | ||
|
|
31ab2f97f6 | ||
|
|
8126c63d6e | ||
|
|
beb42b53b2 | ||
|
|
6df38a56d1 | ||
|
|
68debb44f7 | ||
|
|
f27096f235 | ||
|
|
f2a623fde0 | ||
|
|
7ee26d41f7 | ||
|
|
55c77773ab | ||
|
|
147abc5c6b | ||
|
|
e6f2ee6499 | ||
|
|
8f671b43ae | ||
|
|
617ca885f1 | ||
|
|
1813317e86 | ||
|
|
9bf7ddc258 | ||
|
|
77f211c372 | ||
|
|
939cb67daa | ||
|
|
1ea60a16e5 | ||
|
|
98bc513336 | ||
|
|
b6d5d291b0 | ||
|
|
6f6fa709ec | ||
|
|
82a6dbf887 | ||
|
|
dee879538c | ||
|
|
0351bf73b0 | ||
|
|
5d08964699 | ||
|
|
96b4ffbf5b | ||
|
|
7ad723f23d | ||
|
|
a97f1d02cf | ||
|
|
fe8e97b7cb | ||
|
|
b13de85477 | ||
|
|
ced920eb74 | ||
|
|
eded6cffe0 | ||
|
|
9d7a67ae7f | ||
|
|
638807685a | ||
|
|
529289f364 | ||
|
|
2fdd261961 | ||
|
|
0bce73d690 | ||
|
|
0107909a85 | ||
|
|
d41a53d9db | ||
|
|
af0fb558f6 | ||
|
|
1452e88248 | ||
|
|
d1b848e3eb | ||
|
|
d6273b4751 | ||
|
|
5bd5e6249b | ||
|
|
4033266664 | ||
|
|
9cbe771123 | ||
|
|
a545585ea1 | ||
|
|
2efa8483e2 | ||
|
|
a3961e40ee | ||
|
|
f9b1a74edf | ||
|
|
e1753bbac4 | ||
|
|
13392dcf5b | ||
|
|
879d47b30d | ||
|
|
bb61aaa85c | ||
|
|
d5b2d0d98e | ||
|
|
1b7761ce8d | ||
|
|
8ab1342110 | ||
|
|
7c0eb20de8 | ||
|
|
c26258bd2b | ||
|
|
d04c04ac17 | ||
|
|
c5b53afd8b | ||
|
|
9ac7b00718 | ||
|
|
59f815962d | ||
|
|
bb33a2fe27 | ||
|
|
5e2bd55fb5 | ||
|
|
4b36e2f3b7 | ||
|
|
ed94d326d4 | ||
|
|
17be38e532 | ||
|
|
3f09c82379 | ||
|
|
c2cb0486f4 | ||
|
|
b1b5a7fa11 | ||
|
|
3a9d88d175 | ||
|
|
a422c64153 | ||
|
|
c01767fade | ||
|
|
f59dbe4f63 | ||
|
|
2160a8b64e | ||
|
|
c66c85429e | ||
|
|
520bc94357 | ||
|
|
dea4251b2c | ||
|
|
7f64bb1255 | ||
|
|
831600d8c9 | ||
|
|
d42b046177 | ||
|
|
738bfb7446 | ||
|
|
a72c04ed65 | ||
|
|
3921cab2df | ||
|
|
a52dbafc5f | ||
|
|
d26eadfa21 | ||
|
|
321a310fe5 | ||
|
|
772f9d1b6a | ||
|
|
613dd3d1c4 | ||
|
|
aba5d03632 | ||
|
|
0403978ade | ||
|
|
da12a8c835 | ||
|
|
fc24ad965e | ||
|
|
736aa4c48d | ||
|
|
1de3651774 | ||
|
|
c4c0488339 | ||
|
|
bb05787ea7 | ||
|
|
d92502107e | ||
|
|
9ab224f3ce | ||
|
|
8bf5f398b1 | ||
|
|
be0ba28570 | ||
|
|
dbd86ad7a2 | ||
|
|
5f312d7347 | ||
|
|
6e9f21b1d5 | ||
|
|
a631505cd6 | ||
|
|
f36701206c | ||
|
|
42122a7540 | ||
|
|
996e2c7d92 | ||
|
|
64993a57eb | ||
|
|
eaf0d9af55 | ||
|
|
0c44656acf | ||
|
|
0d749b3e7a | ||
|
|
90b3528f6b | ||
|
|
07f0bf3a50 | ||
|
|
bcfa530056 | ||
|
|
3f4b0eccd8 | ||
|
|
591ecff646 | ||
|
|
7481943a9b | ||
|
|
16241b4ce1 | ||
|
|
9dbc352006 | ||
|
|
1a0c123823 | ||
|
|
45e3623ffd | ||
|
|
1eaa98d3e6 | ||
|
|
e75aadff15 | ||
|
|
d8cd5250a2 | ||
|
|
9e7b31b4e8 | ||
|
|
726d55f771 | ||
|
|
a4c67d50ee | ||
|
|
564de7434b | ||
|
|
59f1ba20db | ||
|
|
5ad7ece8d3 | ||
|
|
dabe90a0de | ||
|
|
1ecb9585ef | ||
|
|
36ceca7a94 | ||
|
|
42a46df51f | ||
|
|
008b362751 | ||
|
|
81717f67f3 | ||
|
|
b6bf22812b | ||
|
|
8557ec1226 | ||
|
|
570fcce2ee | ||
|
|
ef5a4b08d6 | ||
|
|
5fd04001d8 | ||
|
|
fb7bac4652 | ||
|
|
ef46db5d6b | ||
|
|
a9e130b090 | ||
|
|
f23413742a | ||
|
|
7ffe0c3b58 | ||
|
|
62e0ba6952 | ||
|
|
59910749b7 | ||
|
|
a5d53711ee | ||
|
|
9d747b7c82 | ||
|
|
3084ac098e | ||
|
|
f083561ee7 | ||
|
|
ae67f14f9b | ||
|
|
9d6746001e | ||
|
|
c632b6b358 | ||
|
|
9c300dc14b | ||
|
|
02d9c53520 | ||
|
|
ca5c9d6c45 | ||
|
|
90a5391252 | ||
|
|
cf113ecda2 | ||
|
|
0b9cecef4d | ||
|
|
52ea598ba4 | ||
|
|
f4bec4a1c8 | ||
|
|
293d7efe07 | ||
|
|
c9e24a055c | ||
|
|
e9ecc98b3d | ||
|
|
0932fd7f7c | ||
|
|
9ded7e176f | ||
|
|
1738009f6b | ||
|
|
bd3d8a54ad | ||
|
|
c97fd92fcf | ||
|
|
6d4d8a89ed | ||
|
|
7f9f289bd6 | ||
|
|
3c56a0c323 | ||
|
|
401ec40566 | ||
|
|
edf5d29213 | ||
|
|
03f8922ffd | ||
|
|
b9cc89e4d2 | ||
|
|
fb4a232537 | ||
|
|
cf35cedd1e | ||
|
|
2919415d7e | ||
|
|
ee083eb3c3 | ||
|
|
ca1e188e9a | ||
|
|
ef4fe2dbf9 | ||
|
|
6e7e7d35cc | ||
|
|
88e01d8a4b | ||
|
|
a8fd8d1b19 | ||
|
|
f47a267917 | ||
|
|
bf7e86fb13 | ||
|
|
1cab6acf69 | ||
|
|
75a2d3a1ba | ||
|
|
ca248a62ec | ||
|
|
b50590e2ad | ||
|
|
db253c15cc | ||
|
|
d60140dad8 | ||
|
|
5c17bcc710 | ||
|
|
d682bd52ff | ||
|
|
1ba874ea62 | ||
|
|
614ba66450 | ||
|
|
9451216606 | ||
|
|
ef91685596 | ||
|
|
dfaa20e449 | ||
|
|
d7b0d2a4d9 | ||
|
|
2b9e5bbaea | ||
|
|
8e0d288b2e | ||
|
|
75cdc585b6 | ||
|
|
a9d2610e34 | ||
|
|
e2eceb49ca | ||
|
|
e8eba15e49 | ||
|
|
4a8ebd8dee | ||
|
|
9dcf17be69 | ||
|
|
4aae0f1a1d | ||
|
|
f6a193935d | ||
|
|
46d4de261c | ||
|
|
b4b2c4301f | ||
|
|
bb2265a3c9 | ||
|
|
484f61fdd5 | ||
|
|
5aae49f1a0 | ||
|
|
ee7abe3098 | ||
|
|
981c5e1dd6 | ||
|
|
d9868a3862 | ||
|
|
c8edeb01e6 | ||
|
|
12e2b22ea8 | ||
|
|
a8008b8d33 | ||
|
|
7d539e5b03 | ||
|
|
2e2320ec73 | ||
|
|
676027caf6 | ||
|
|
2588bedcfe | ||
|
|
272c96b171 | ||
|
|
a1935687a2 | ||
|
|
6b25ab16b7 | ||
|
|
6b6518c699 | ||
|
|
88f661b6e7 | ||
|
|
aff0c1fc40 | ||
|
|
aa63e79aec | ||
|
|
a0cb7c560e | ||
|
|
68d1a04215 | ||
|
|
a4da6f67cc | ||
|
|
a93cec63be | ||
|
|
c22f78c913 | ||
|
|
a60467cb2d | ||
|
|
91a668ee8f | ||
|
|
94aa67d494 | ||
|
|
6636c48838 | ||
|
|
ce154aff09 | ||
|
|
6a8783e357 | ||
|
|
914f695eab | ||
|
|
d6510ad936 | ||
|
|
c2c9671061 | ||
|
|
def0a2c0ee | ||
|
|
995ca5902f | ||
|
|
10d959501d | ||
|
|
d8cff6566e | ||
|
|
a5a06196b1 | ||
|
|
0f6d809aff | ||
|
|
2cbc850df3 | ||
|
|
7509c7adbf | ||
|
|
b1ac99c616 | ||
|
|
0c7ef180d0 | ||
|
|
4c59dcaea6 | ||
|
|
08b3a4b7a7 | ||
|
|
125c093ba5 | ||
|
|
891c3e5e59 | ||
|
|
ba9fa1d0b7 | ||
|
|
830c9006ca | ||
|
|
ec16aa92ac | ||
|
|
2dfb0ef3e6 | ||
|
|
03daa33d83 | ||
|
|
883bcd897f | ||
|
|
ba6cca4093 | ||
|
|
a1581bc963 | ||
|
|
2a26cd9d5a | ||
|
|
46eb092006 | ||
|
|
87dc7e39e6 | ||
|
|
9ed77ab6c1 | ||
|
|
46287cac0f | ||
|
|
b011a3a558 | ||
|
|
e3e430f4d7 | ||
|
|
b63a40d4fe | ||
|
|
41bc54879d | ||
|
|
269a254425 | ||
|
|
4c748f2b36 | ||
|
|
ee7d7f164f | ||
|
|
962aa66965 | ||
|
|
92621a3187 | ||
|
|
04b32efd54 | ||
|
|
0931d655f7 | ||
|
|
480425bfb9 | ||
|
|
49351227d1 | ||
|
|
d3263a45c3 | ||
|
|
4f77c88e0b | ||
|
|
722390475b | ||
|
|
3b248de306 | ||
|
|
7ff5e56dc7 | ||
|
|
67f113a818 | ||
|
|
4136f0274a | ||
|
|
61a306664f | ||
|
|
d35576302d | ||
|
|
cca008f140 | ||
|
|
5458d5b341 | ||
|
|
42db45d6f4 | ||
|
|
2c3cbc1708 | ||
|
|
5e065e71c7 | ||
|
|
50705890d8 | ||
|
|
c33b58a3e0 | ||
|
|
4d4971b171 | ||
|
|
05513ad75a | ||
|
|
ee69e1ee4a | ||
|
|
88bc04797f | ||
|
|
c06644af62 | ||
|
|
89787173af | ||
|
|
65403d1cf7 | ||
|
|
e56c69494a | ||
|
|
9e9aa75fbb | ||
|
|
14934a9479 | ||
|
|
9b48a386fc | ||
|
|
9d60b487e6 | ||
|
|
3e83b2836c | ||
|
|
72425cff84 | ||
|
|
3ae68213ff | ||
|
|
a9ff33f9a5 | ||
|
|
f6a6444e66 | ||
|
|
6901e9658f | ||
|
|
a8a6d0595b | ||
|
|
ee786e1962 | ||
|
|
74e147005b | ||
|
|
3e442e551d | ||
|
|
2628df06a3 | ||
|
|
ba8eb6f2e5 | ||
|
|
8a380e52c4 | ||
|
|
aa94dc7a7b | ||
|
|
a42261b2b3 | ||
|
|
7482762592 | ||
|
|
fffc283459 | ||
|
|
7e6107fd04 | ||
|
|
65897ca4cd | ||
|
|
7bc6767ab7 | ||
|
|
917983f61d | ||
|
|
ea76530ab1 | ||
|
|
12dfa33680 | ||
|
|
93225ada48 | ||
|
|
5917105e4e | ||
|
|
1ddf0e9756 | ||
|
|
dc039d4674 | ||
|
|
315422e017 | ||
|
|
e11499e676 | ||
|
|
a56f173568 | ||
|
|
cae35e6701 | ||
|
|
66a772b8c7 | ||
|
|
c91a6d1a55 | ||
|
|
e86f49e64a | ||
|
|
cb5a782f92 | ||
|
|
610a2ca477 | ||
|
|
234969866e | ||
|
|
9cf8e7b0bb | ||
|
|
4da5f5e7ac | ||
|
|
72a4637beb | ||
|
|
ea1316fdfc | ||
|
|
18deebaea2 | ||
|
|
57da0e1ff0 | ||
|
|
908d203a64 | ||
|
|
88631483b4 | ||
|
|
cef73e7872 | ||
|
|
583fb52f8d | ||
|
|
39ab4808a7 | ||
|
|
d82ad0a10a | ||
|
|
62caa85423 | ||
|
|
b70e59f9ff | ||
|
|
75a9b2a4d2 | ||
|
|
0c96e5deb9 | ||
|
|
a97862dd7b | ||
|
|
061a812f50 | ||
|
|
f5d5b4fcda | ||
|
|
6e50444d05 | ||
|
|
d525d51221 | ||
|
|
5dc3018d6d | ||
|
|
d84df2cc41 | ||
|
|
d61b830e4a | ||
|
|
cd7d47c381 | ||
|
|
3ef092fda9 | ||
|
|
99e98fb68a | ||
|
|
fb6502044c | ||
|
|
49e48f5f56 | ||
|
|
0b8fbfdeb9 | ||
|
|
5a2decb4e4 | ||
|
|
99fcd613fe | ||
|
|
c4b8bd8da9 | ||
|
|
309dd5a614 | ||
|
|
1b32ccbe38 | ||
|
|
c482a3ff37 | ||
|
|
f39fd64a5b | ||
|
|
38a13ecd39 | ||
|
|
7d59b45fdb | ||
|
|
c6a6eff7db | ||
|
|
c5575bb300 | ||
|
|
293050bc17 | ||
|
|
f8c9efe230 | ||
|
|
057c418be4 | ||
|
|
0be0ad7ef7 | ||
|
|
eeaa6799fd | ||
|
|
7fd1882dbb | ||
|
|
76c0aed2ad | ||
|
|
b9c331cf99 | ||
|
|
e789504db1 | ||
|
|
e15ebe6a94 | ||
|
|
2b5a49cdc6 | ||
|
|
b50f2cb45e | ||
|
|
7fa9b72144 | ||
|
|
62a361cbe0 | ||
|
|
b881be1cfe | ||
|
|
c230a6ac90 | ||
|
|
82ad2bbd17 | ||
|
|
0d3fd1e943 | ||
|
|
051a329873 | ||
|
|
aa156b2834 | ||
|
|
6d62835734 | ||
|
|
b968ced6e9 | ||
|
|
48dc5d8cc1 | ||
|
|
8186934f72 | ||
|
|
0b758d2ba0 | ||
|
|
bd47c76d26 | ||
|
|
3f0c46d43d | ||
|
|
cd21e90edf | ||
|
|
3d34625399 | ||
|
|
c9c0d11b66 | ||
|
|
8e2fc50746 | ||
|
|
35d026bf38 | ||
|
|
09bf7cb3f0 | ||
|
|
9f0fe29417 | ||
|
|
855fc1e672 | ||
|
|
8dbe59bff7 | ||
|
|
66d327a5d1 | ||
|
|
054bf26b0e | ||
|
|
329e97c8ee | ||
|
|
0bce3238bc | ||
|
|
ac821d92cf | ||
|
|
db412399ba | ||
|
|
7100853a2e | ||
|
|
994e220ebf | ||
|
|
a33add8000 | ||
|
|
231ab0ecd4 | ||
|
|
0b09d38e2e | ||
|
|
0007df1fc1 | ||
|
|
de908efda1 | ||
|
|
3f85b682fb | ||
|
|
05486d6df1 | ||
|
|
e6bf778a65 | ||
|
|
6ecf6c31ba | ||
|
|
130b9d6c4b | ||
|
|
f4a37f6867 | ||
|
|
2a5fcd001e | ||
|
|
b961f01906 | ||
|
|
c0957ebfc3 | ||
|
|
137ea8c30d | ||
|
|
e8a31141fc | ||
|
|
d3ef846b59 | ||
|
|
b5be68f9d0 | ||
|
|
6fd4b5adb1 | ||
|
|
26e8524ae5 | ||
|
|
09b656e37e | ||
|
|
59316f4a21 | ||
|
|
cff51b8ec9 | ||
|
|
e5a9d29215 | ||
|
|
9beefe923f | ||
|
|
009e37d840 | ||
|
|
b06aeeccb1 | ||
|
|
1ba5269779 | ||
|
|
94357b961e | ||
|
|
579d430303 | ||
|
|
7199d37636 | ||
|
|
93080498f6 | ||
|
|
00f3d498a2 | ||
|
|
de84a038d2 | ||
|
|
11e9cd13ae | ||
|
|
9d3785147e | ||
|
|
8e4dc1c2d0 | ||
|
|
2be8df1228 | ||
|
|
9f32747c98 | ||
|
|
acff195fcb | ||
|
|
b4d7d37d9b | ||
|
|
d978f98c23 | ||
|
|
973313e3aa | ||
|
|
fdf09adcd5 | ||
|
|
02e2fa73f5 | ||
|
|
7389bb3f03 | ||
|
|
2949e1125f | ||
|
|
38cbcb33ed | ||
|
|
2e774f0806 | ||
|
|
8987ec6704 | ||
|
|
63f4ec3867 | ||
|
|
d336d7c5c2 | ||
|
|
ebd27cd666 | ||
|
|
b1ae58f968 | ||
|
|
0b40414170 | ||
|
|
acdc0109aa | ||
|
|
b1b67b3238 | ||
|
|
7d7c035b57 | ||
|
|
799a5713c2 | ||
|
|
5dd297bb49 | ||
|
|
5801fd98a4 | ||
|
|
9d3538d587 | ||
|
|
3a961d2de7 | ||
|
|
c2c2e2ccbd | ||
|
|
0740636d53 | ||
|
|
77f9862549 | ||
|
|
e19b52442b | ||
|
|
b04080bcb1 | ||
|
|
04e1837e9e | ||
|
|
ce275837ac | ||
|
|
4c7cd3f2af | ||
|
|
1e0899ee04 | ||
|
|
57cf1dce61 | ||
|
|
1a57c30bae | ||
|
|
cfee47f382 | ||
|
|
962818b0ea | ||
|
|
848373def5 | ||
|
|
bcc5516afe | ||
|
|
411aa119a3 | ||
|
|
d759c6c12d | ||
|
|
0c388615cc | ||
|
|
e30d9fdba3 | ||
|
|
53f520d5c6 | ||
|
|
35252444e1 | ||
|
|
1b6c0ce6b6 | ||
|
|
aa6a651f1d | ||
|
|
7357579af2 | ||
|
|
4a60497d3e | ||
|
|
7a1537e38e | ||
|
|
e67b96780d | ||
|
|
b0abeb49dd | ||
|
|
ef7894fdfa | ||
|
|
be5ea845fc | ||
|
|
1cb586b2e7 | ||
|
|
95935f5944 | ||
|
|
deea791e58 | ||
|
|
d6391de55f | ||
|
|
58de433afa | ||
|
|
cacd7e169c | ||
|
|
bd539797db | ||
|
|
37c83e1c52 | ||
|
|
b3a802a965 | ||
|
|
2d9f0f939c | ||
|
|
ab509a7424 | ||
|
|
52ef7e7cdc | ||
|
|
231078125a | ||
|
|
16d8bd480c | ||
|
|
e282c2dd7e | ||
|
|
ca3a306b30 | ||
|
|
c8537bff48 | ||
|
|
9818cc6461 | ||
|
|
8eb32e4371 | ||
|
|
b1c6f66fc7 | ||
|
|
b8c8797c6e | ||
|
|
385aed85b9 | ||
|
|
d39f4ce54d | ||
|
|
46b83d06cc | ||
|
|
397527eb21 | ||
|
|
ec4bd32169 | ||
|
|
a8c4065dcf | ||
|
|
6940035d78 | ||
|
|
13be4d07a6 | ||
|
|
b5f2d82f49 | ||
|
|
73e7ff7b18 | ||
|
|
89e2be720e | ||
|
|
001e431fa1 | ||
|
|
d42fb02136 | ||
|
|
bb176e4130 | ||
|
|
5de1c298eb | ||
|
|
414ea55ca8 | ||
|
|
e425092d00 | ||
|
|
26e3232f2c | ||
|
|
10d2fdea92 | ||
|
|
7c11e32e1c | ||
|
|
69f5f6c475 | ||
|
|
47759439d7 | ||
|
|
fc8a8d6138 | ||
|
|
4613efe191 | ||
|
|
74e62e38f9 | ||
|
|
dcb79f8c0b | ||
|
|
6ff05715e5 | ||
|
|
fb449ab630 | ||
|
|
32e45107f7 | ||
|
|
a134111f79 | ||
|
|
5ec35496d8 | ||
|
|
f485062677 | ||
|
|
d068ab9722 | ||
|
|
30866dd98b | ||
|
|
e939eeb652 | ||
|
|
22ccfe6442 | ||
|
|
f4a55172da | ||
|
|
686c16fa32 | ||
|
|
743896ff56 | ||
|
|
9937068d41 | ||
|
|
5ee37fde2d | ||
|
|
686a577037 | ||
|
|
b7c2e4c1d6 | ||
|
|
566cd25336 | ||
|
|
6fc3f58cb7 | ||
|
|
8958ea0f2d | ||
|
|
7dd4efad39 | ||
|
|
9485f26e9b | ||
|
|
69c8c0141d | ||
|
|
782e4cba64 | ||
|
|
c9f488f8b8 | ||
|
|
63b18cc902 | ||
|
|
8b41bc6520 | ||
|
|
4a4432af16 | ||
|
|
4c3f55896e | ||
|
|
ecb1732d5b | ||
|
|
78d0857da3 | ||
|
|
df9344c245 | ||
|
|
6b431378a1 | ||
|
|
38a58a17e4 | ||
|
|
d2ecd76646 | ||
|
|
ca5946636f | ||
|
|
6a92368059 | ||
|
|
90681ce475 | ||
|
|
adabaa286f | ||
|
|
840f113a4f | ||
|
|
f82cb325d8 | ||
|
|
347372d5fe | ||
|
|
cf246f206b | ||
|
|
d4988ed182 | ||
|
|
c3c4b5d42b | ||
|
|
8118fd9743 | ||
|
|
0a3133fbcc | ||
|
|
18f388ad76 | ||
|
|
55d1b896fd | ||
|
|
08a104b997 | ||
|
|
be886ef1f6 | ||
|
|
83cccc0af1 | ||
|
|
4c1b9989aa | ||
|
|
5dc6c829b3 | ||
|
|
ce60ef6bff | ||
|
|
e1cbf08a95 | ||
|
|
168d4b5e8d | ||
|
|
b4ab5a5764 | ||
|
|
645ba5728f | ||
|
|
02d653a1aa | ||
|
|
39c7699962 | ||
|
|
9b05804edf | ||
|
|
fe9472ff09 | ||
|
|
79b344bbe4 | ||
|
|
e3f0160e5f | ||
|
|
4d9e8f5f7d | ||
|
|
2429503b21 | ||
|
|
ff4b0de04c | ||
|
|
9078dabc82 | ||
|
|
a18bb02115 | ||
|
|
8ea12f6c5d | ||
|
|
a1b1d5cba1 | ||
|
|
bb4b6df651 | ||
|
|
3568cbef8c | ||
|
|
8382bebcf2 | ||
|
|
02dca4a1a3 | ||
|
|
4dd000ca9e | ||
|
|
297041bfc4 | ||
|
|
52f6e8c59b | ||
|
|
c6ec59be87 | ||
|
|
404f08626b | ||
|
|
6a9629cdc4 | ||
|
|
d6c3c52cec | ||
|
|
52cd280782 | ||
|
|
815febdb39 | ||
|
|
2d76284a8c | ||
|
|
347b0f5389 | ||
|
|
9e9a19a817 | ||
|
|
ddfc3ba696 | ||
|
|
d581f2de64 | ||
|
|
a35798e357 | ||
|
|
0c25465df4 | ||
|
|
906e2c5615 | ||
|
|
3b04b80a94 | ||
|
|
00a175bef7 | ||
|
|
a3a37a1948 | ||
|
|
6527552a62 | ||
|
|
55e2681ad7 | ||
|
|
81257cafa1 | ||
|
|
8964f77978 | ||
|
|
72d480c9dd | ||
|
|
e66c2373a7 | ||
|
|
af38710352 | ||
|
|
d432cb514c | ||
|
|
db4311c655 | ||
|
|
c4d69b662f | ||
|
|
972830a5f3 | ||
|
|
e3c81afb6a | ||
|
|
fe206d53d9 | ||
|
|
096e9346ad | ||
|
|
5f342dcf27 | ||
|
|
e02528280b | ||
|
|
63358c3d34 | ||
|
|
0f5ed9844b | ||
|
|
200de06d1e | ||
|
|
3d1ab26777 | ||
|
|
71295b7658 | ||
|
|
9539c28ef4 | ||
|
|
d8653f97b7 | ||
|
|
a5e6739e16 | ||
|
|
dd7d1d2f8d | ||
|
|
2a747138af | ||
|
|
935c231518 | ||
|
|
10385e9877 | ||
|
|
32027da467 | ||
|
|
3dd583213c | ||
|
|
91f4de2f68 | ||
|
|
4b8acf5c34 | ||
|
|
53e272ab22 | ||
|
|
6decb6f19a | ||
|
|
ce3b8c3d5c | ||
|
|
b86fb133b2 | ||
|
|
6d68ddfcb9 | ||
|
|
7115839fd5 | ||
|
|
827354d3d1 | ||
|
|
81ab56d7ee | ||
|
|
58a7e535dd | ||
|
|
721b464de9 | ||
|
|
accfc3b793 | ||
|
|
80b20ec4c1 | ||
|
|
a355b8019a | ||
|
|
1494e07c34 | ||
|
|
c9cf213afb | ||
|
|
291e052ece | ||
|
|
72deeec81f | ||
|
|
5e6630f042 | ||
|
|
b44aa8b8ea | ||
|
|
ad2d219691 | ||
|
|
986400c8e2 | ||
|
|
48ee225dbe | ||
|
|
9f395318b3 | ||
|
|
3f0051a04f | ||
|
|
8841f91767 | ||
|
|
afc2d13b40 | ||
|
|
45395743fe | ||
|
|
1d1458862b | ||
|
|
92c81cc05d | ||
|
|
60bed60fa9 | ||
|
|
baec410580 | ||
|
|
77e51a39fa | ||
|
|
907f2d6344 | ||
|
|
0a9997ee3a | ||
|
|
ed60adfdc8 | ||
|
|
1406283b63 | ||
|
|
e34d8431da | ||
|
|
09a5c292cd | ||
|
|
9f9ebc99ec | ||
|
|
35ed98ae71 | ||
|
|
8f70e25e12 | ||
|
|
605bbb165a | ||
|
|
54703c9216 | ||
|
|
daf03a6389 | ||
|
|
e67324cac9 | ||
|
|
8ab1abd3b4 | ||
|
|
23731f6561 | ||
|
|
9fe3f49cb4 | ||
|
|
750a31013f | ||
|
|
814385eda9 | ||
|
|
438261b1f9 | ||
|
|
2044496750 | ||
|
|
798793f7f8 | ||
|
|
e799709391 | ||
|
|
2326195eea | ||
|
|
40564464f9 | ||
|
|
54c987ea16 | ||
|
|
a513047e5a | ||
|
|
1c17e43bb7 | ||
|
|
431dc6c1a0 | ||
|
|
8bb559c965 | ||
|
|
50863a9b76 | ||
|
|
a1860bae14 | ||
|
|
fa8267ca09 | ||
|
|
9dae004651 | ||
|
|
f9e163c63a | ||
|
|
e561f87b17 | ||
|
|
48ade9853f | ||
|
|
78621481a6 | ||
|
|
92de37b23a | ||
|
|
35287a2d28 | ||
|
|
360c587086 | ||
|
|
844b86840a | ||
|
|
94f5c04bf3 | ||
|
|
e76f8da482 | ||
|
|
4d1beedd05 | ||
|
|
b3bc109abe | ||
|
|
0b1775746d | ||
|
|
592b10122d | ||
|
|
f1dd722971 | ||
|
|
24c47e17f8 | ||
|
|
8c6e4c6483 | ||
|
|
34b5234e2f | ||
|
|
b05a2b6da2 | ||
|
|
9ed22eafea | ||
|
|
498bdd0491 | ||
|
|
92ac9cc729 | ||
|
|
9c68cd53fc | ||
|
|
3b3fc5d5c1 | ||
|
|
b4e95fe0d5 | ||
|
|
7bd4d32cb3 | ||
|
|
903d7ce614 | ||
|
|
12f3c12070 | ||
|
|
cb281e17e6 | ||
|
|
06b565f3e5 | ||
|
|
798725bb54 | ||
|
|
a3ef91f2ae | ||
|
|
cd28fe69a5 | ||
|
|
f1ead08549 | ||
|
|
6e3fddb544 | ||
|
|
dd2bbc7722 | ||
|
|
a9ce738f68 | ||
|
|
0e219b05e9 | ||
|
|
ea9cf024d5 | ||
|
|
0d1952592e | ||
|
|
43e7ee06fb | ||
|
|
692bfa7cde | ||
|
|
dbcfb7ee9f | ||
|
|
5f80cd3c20 | ||
|
|
eecee94e70 | ||
|
|
f55dc640ec | ||
|
|
a4ac67a1e0 | ||
|
|
14838de344 | ||
|
|
6b6b1c2aa4 | ||
|
|
8662f4550f | ||
|
|
78dba3be3c | ||
|
|
76911a7dc8 | ||
|
|
68de421630 | ||
|
|
ccbe0b0877 | ||
|
|
6a7d2e5252 | ||
|
|
f83a03a3dc | ||
|
|
44fcea0ffa | ||
|
|
c02059c965 | ||
|
|
92d2895d99 | ||
|
|
2b93c76b1d | ||
|
|
8cbaf1e004 | ||
|
|
b4c4d5d70f | ||
|
|
a00d9de400 | ||
|
|
a36ebd130d | ||
|
|
5b1763aa4a | ||
|
|
53c8f61ffc | ||
|
|
b806154e90 | ||
|
|
1be6ace7b5 | ||
|
|
9d9530b01d | ||
|
|
c4838b4af9 | ||
|
|
5ca3ca5189 | ||
|
|
3457844687 | ||
|
|
346e8284c8 | ||
|
|
180a5e79c9 | ||
|
|
377166d822 | ||
|
|
9256248cfd | ||
|
|
e074cffd4f | ||
|
|
30ac3c24c0 | ||
|
|
4c766b8f0e | ||
|
|
e30fad51de | ||
|
|
9734d09ff1 | ||
|
|
0c3f659854 | ||
|
|
2b1c8f64fb | ||
|
|
2cf3a3d0cf | ||
|
|
4105f0027c | ||
|
|
1dc2a7e20a | ||
|
|
d8753ca8d4 | ||
|
|
d68d02b204 | ||
|
|
8e7a51daec | ||
|
|
8b046b9bd7 | ||
|
|
5b19256109 | ||
|
|
79b0bebb78 | ||
|
|
950b7ed6be | ||
|
|
9432cdd37c | ||
|
|
5bd499a9bc | ||
|
|
5506c9e27d | ||
|
|
e07703645e | ||
|
|
3ca6245b00 | ||
|
|
925c6c4c28 | ||
|
|
0588b6f161 | ||
|
|
fee2d50148 | ||
|
|
9a2c8e04a5 | ||
|
|
2517d392a4 | ||
|
|
a0b6663bef | ||
|
|
5fb7b0a74c | ||
|
|
026d04a65f | ||
|
|
94ace70626 | ||
|
|
2d36dc2a04 | ||
|
|
f3819a46e9 | ||
|
|
c66e08041a | ||
|
|
9e9f601690 | ||
|
|
c9bc4f8615 | ||
|
|
34ee8e7079 | ||
|
|
4ab30b8c14 | ||
|
|
3bc6f071cf | ||
|
|
0669121242 | ||
|
|
03c7543060 | ||
|
|
9730992f95 | ||
|
|
6fcb53113a | ||
|
|
5affe42699 | ||
|
|
eef9f5eba5 | ||
|
|
86febeb7ca | ||
|
|
697afaa2cc | ||
|
|
78a5e4d331 | ||
|
|
1a322eeeb8 | ||
|
|
7dbeffd041 | ||
|
|
8dbf855d56 | ||
|
|
dc9d597cd8 | ||
|
|
f771b272e3 | ||
|
|
6c8f716c11 | ||
|
|
d326c17dfb | ||
|
|
0567bfd65d | ||
|
|
008fafbed8 | ||
|
|
c959b236ea | ||
|
|
85b41121de | ||
|
|
7de242b4ee | ||
|
|
27ed3c52e3 | ||
|
|
c4c278fbcb | ||
|
|
5f4f12c27f | ||
|
|
5000c32efe | ||
|
|
5b53994447 | ||
|
|
ba5b5d4596 | ||
|
|
a17a0e9a82 | ||
|
|
0a8d5eb744 | ||
|
|
af8ade0a09 | ||
|
|
b3ba600cf8 | ||
|
|
ce98222eec | ||
|
|
6836e56b24 | ||
|
|
193e40b4c3 | ||
|
|
d1af10fc51 | ||
|
|
968543c66c | ||
|
|
da27ab3d40 | ||
|
|
034ebff42a | ||
|
|
11241e5003 | ||
|
|
b8c2259775 | ||
|
|
1437b77c6c | ||
|
|
ded056d003 | ||
|
|
8830e15526 | ||
|
|
67bdd47015 | ||
|
|
e8382362e5 | ||
|
|
7de68e7052 | ||
|
|
f723333a90 | ||
|
|
d8ada6a6e9 | ||
|
|
1f882d09bf | ||
|
|
ecfb54c668 | ||
|
|
7aeb17986a | ||
|
|
3500dbfa6a | ||
|
|
230a098b7b | ||
|
|
a568965d14 | ||
|
|
c5d5bc9a9c | ||
|
|
1a4af9b3ea | ||
|
|
ea32544e37 | ||
|
|
9b67ffe9d4 | ||
|
|
6fe984fd3c | ||
|
|
98bf4b7b31 | ||
|
|
d7bb131b37 | ||
|
|
01f317bbf3 | ||
|
|
56d8346d65 | ||
|
|
3eb9c9b3ba | ||
|
|
6b42fde028 | ||
|
|
b0b036549a | ||
|
|
eada23d3f6 | ||
|
|
402c6db826 | ||
|
|
5a52286309 | ||
|
|
22ffa41d31 | ||
|
|
e8d6e879c8 | ||
|
|
d4d69e5224 | ||
|
|
f4c0715299 | ||
|
|
2cab7f24ed | ||
|
|
af9a43b4f5 | ||
|
|
dfda7d63f4 | ||
|
|
05bdda036f | ||
|
|
a09cda126b | ||
|
|
9a43b41208 | ||
|
|
b3341999a1 | ||
|
|
69e4cd7c44 | ||
|
|
33423a0508 | ||
|
|
39f3f598a5 | ||
|
|
2c5106fe32 | ||
|
|
699719b600 | ||
|
|
8481ea2306 | ||
|
|
a984464931 | ||
|
|
f3e191988d | ||
|
|
c99f92e9f2 | ||
|
|
a496ae987a | ||
|
|
75036dfa27 | ||
|
|
b35235f1e9 | ||
|
|
eabcf84f0b | ||
|
|
7fc8770027 | ||
|
|
23d647ee51 | ||
|
|
2fd53a7a01 | ||
|
|
3decb8c4d3 | ||
|
|
966afcb787 | ||
|
|
48484732a0 | ||
|
|
3e5e6b10dd | ||
|
|
2d47931cc4 | ||
|
|
c13c3f8012 | ||
|
|
4e4e256a27 | ||
|
|
161380d639 | ||
|
|
5f36b138fb | ||
|
|
024fd958e8 | ||
|
|
a848d92823 | ||
|
|
3696757e8f | ||
|
|
2cabf0a21f | ||
|
|
283ff056da | ||
|
|
9bcd81c8bd | ||
|
|
0ebb400d91 | ||
|
|
fc5544ac70 | ||
|
|
4a7f13c3d8 | ||
|
|
737e4a5bf4 | ||
|
|
d047db108b | ||
|
|
73f5fde99d | ||
|
|
a17ed7981e | ||
|
|
8a5504574d | ||
|
|
8ac35766f3 | ||
|
|
5fd5e235d8 | ||
|
|
8d526b964b | ||
|
|
084906d684 | ||
|
|
79d4f4578d | ||
|
|
785d9b4937 | ||
|
|
0e03c82139 | ||
|
|
84e33f2c57 | ||
|
|
a6408c0c56 | ||
|
|
915ef6a8d5 | ||
|
|
684f9fd175 | ||
|
|
e276ebbc27 | ||
|
|
0988e62418 | ||
|
|
bbc8c8a533 | ||
|
|
082e9458e5 | ||
|
|
0a17358352 | ||
|
|
3a2bdd83f8 | ||
|
|
625424de68 | ||
|
|
0d71293fca | ||
|
|
b6128dc54e | ||
|
|
919ba7ed93 | ||
|
|
f80788147c | ||
|
|
eb7deedd65 | ||
|
|
eb8347bcc1 | ||
|
|
48752a762c | ||
|
|
42a405355f | ||
|
|
b921aed073 | ||
|
|
73b8c3df55 | ||
|
|
1b92f4a97e | ||
|
|
c8a491ed7f | ||
|
|
da4361583b | ||
|
|
0087296bd3 | ||
|
|
6221b7bf4a | ||
|
|
f977edabb2 | ||
|
|
980ffab600 | ||
|
|
a34d36c5d2 | ||
|
|
b2a0b69ed5 | ||
|
|
2315a127ea | ||
|
|
1c1ff64c67 | ||
|
|
9e2a129854 | ||
|
|
a475af1974 | ||
|
|
4264380e15 | ||
|
|
676aa1a05b | ||
|
|
94c06bbdd2 | ||
|
|
1c600b8846 | ||
|
|
7dd9007607 | ||
|
|
e71ad53b0e | ||
|
|
a92687d3e8 | ||
|
|
2aac9c71fc | ||
|
|
ceac86b58f | ||
|
|
3fb8a576a0 | ||
|
|
c786b9e45e | ||
|
|
68fcd67327 | ||
|
|
a54fa57136 | ||
|
|
343a6a159f | ||
|
|
dc2a680a29 | ||
|
|
72fce08e87 | ||
|
|
b60934629e | ||
|
|
e59f115311 | ||
|
|
19dd92e6c7 | ||
|
|
aab390edb6 | ||
|
|
0c11068129 | ||
|
|
ad804f6d3f | ||
|
|
de43eb1e3d | ||
|
|
5d9daa9367 | ||
|
|
0d9e424ede | ||
|
|
603dc0fad6 | ||
|
|
0cf03baa78 | ||
|
|
ba3af25423 | ||
|
|
a084c62e3f | ||
|
|
b429af8ff2 | ||
|
|
287f383f6c | ||
|
|
aefb24082d | ||
|
|
dee0144c7c | ||
|
|
6ca4813247 | ||
|
|
a717cb99a3 | ||
|
|
8551dfb297 | ||
|
|
6a5bbd63a3 | ||
|
|
ca0b2937b9 | ||
|
|
948d507909 | ||
|
|
037324d850 | ||
|
|
6006303409 | ||
|
|
d1b1841034 | ||
|
|
bc70a24e1d | ||
|
|
acc2e84eda | ||
|
|
4f23dd2dd6 | ||
|
|
3a5f68e4d1 | ||
|
|
d30a948be0 | ||
|
|
c44db3f2cf | ||
|
|
1272287d62 | ||
|
|
f4b96cc688 | ||
|
|
65fb016bc3 | ||
|
|
2eccb95477 | ||
|
|
b9152ee77e | ||
|
|
99ec1c0606 | ||
|
|
5373cf2989 | ||
|
|
b85b4c6e99 | ||
|
|
7be4a3ee48 | ||
|
|
2f83b29f1a | ||
|
|
7709a3a2ec | ||
|
|
06d0b07f36 | ||
|
|
0275c65b8a | ||
|
|
1617796bc6 | ||
|
|
6869fda75b | ||
|
|
06017d17ae | ||
|
|
9fc26aeb41 | ||
|
|
dad5db4e9b | ||
|
|
d356cef183 | ||
|
|
c49d849917 | ||
|
|
b36a2a9154 | ||
|
|
252092c73a | ||
|
|
f6cc77bc3a | ||
|
|
cb16cae09b | ||
|
|
bb494b69ea | ||
|
|
f13a660698 | ||
|
|
ce1ca5cc17 | ||
|
|
e700ad32a3 | ||
|
|
0fd829ed3b | ||
|
|
f9a59180f2 | ||
|
|
04c9fe974e | ||
|
|
4b63c96434 | ||
|
|
ef55ce8919 | ||
|
|
0ba6e26788 | ||
|
|
1b481d214c | ||
|
|
d33ea360ac | ||
|
|
8e07d70070 | ||
|
|
06b4585a62 | ||
|
|
dbc5182193 | ||
|
|
46c023e73d | ||
|
|
f39d0fc0cf | ||
|
|
277429db5a | ||
|
|
9a447c16f2 | ||
|
|
c4c7d0d82d | ||
|
|
e5c76d3795 | ||
|
|
662c8c2831 | ||
|
|
3ec67073ce | ||
|
|
322dd2246f | ||
|
|
13e3950f4a | ||
|
|
d03d5bc40c | ||
|
|
5038050968 | ||
|
|
97fe3f56b7 | ||
|
|
887c0ebdd6 | ||
|
|
99869c520f | ||
|
|
65e82bcea1 | ||
|
|
bf8b67b35d | ||
|
|
8a56740a7c | ||
|
|
3a7bac6218 | ||
|
|
5b9e8ddb7d | ||
|
|
97649e86dd | ||
|
|
f8e3518aa6 | ||
|
|
ef5f7fe03e | ||
|
|
286c6ed39d | ||
|
|
f04fd6f218 | ||
|
|
75239ae8b5 | ||
|
|
b120a9cc57 | ||
|
|
6b71b66f8d | ||
|
|
ecd88fbeeb | ||
|
|
929c98ee90 | ||
|
|
642c293d5a | ||
|
|
f05247226d | ||
|
|
a4c30c2ba9 | ||
|
|
b24697443a | ||
|
|
a4114bb29d | ||
|
|
c41753c747 | ||
|
|
4a6d3c25a4 | ||
|
|
beef464cc1 | ||
|
|
6cc6d5a33f | ||
|
|
ff945c64fe | ||
|
|
d7c7511ea9 | ||
|
|
0af8b2421d | ||
|
|
71be7026d7 | ||
|
|
1683095233 | ||
|
|
c2898ec040 | ||
|
|
243d5ecc43 | ||
|
|
3f0126a471 | ||
|
|
8db3b8e333 | ||
|
|
00c9e5a5e9 | ||
|
|
e8134f9c2c | ||
|
|
c9bbddcfcb | ||
|
|
278a80cc25 | ||
|
|
3ab271f756 | ||
|
|
982895ff71 | ||
|
|
9acb9e527d | ||
|
|
ab9f516c08 | ||
|
|
c5717510ee | ||
|
|
8d23556831 | ||
|
|
04a6e30e45 | ||
|
|
bdfde9a481 | ||
|
|
9808ecde81 | ||
|
|
b36ab54b87 | ||
|
|
ff35e95924 | ||
|
|
49e44ce59b | ||
|
|
ab88dbb03d | ||
|
|
2e895286cf | ||
|
|
5b2d4b3559 | ||
|
|
8ad74d0814 | ||
|
|
9486576add | ||
|
|
2a353a9ca5 | ||
|
|
2d1f241677 | ||
|
|
d6f122bfda | ||
|
|
54ef6514d5 | ||
|
|
abf7addaa6 | ||
|
|
e831b786f0 | ||
|
|
c6074baad5 | ||
|
|
7cb0d11b95 | ||
|
|
87c77b1aa0 | ||
|
|
7d2f5b84c8 | ||
|
|
8dcbfe5542 | ||
|
|
f9023402ad | ||
|
|
c658d60dc2 | ||
|
|
c1781c39ca | ||
|
|
5f75b24fb2 | ||
|
|
3db5de1a9e | ||
|
|
520a72078e | ||
|
|
ef5a45c7cb | ||
|
|
c6a1c0dcbf | ||
|
|
c701429a05 | ||
|
|
7f1fe3ccfd | ||
|
|
6797971016 | ||
|
|
dc6abe691a | ||
|
|
7333a630a1 | ||
|
|
2edbc3fe39 | ||
|
|
50357eb682 | ||
|
|
1203146ab9 | ||
|
|
fc8637a0f5 | ||
|
|
f3ace60a98 | ||
|
|
8fe87358e1 | ||
|
|
297a26aa20 | ||
|
|
2da16265cb | ||
|
|
25a65add4a | ||
|
|
a721abd972 | ||
|
|
acbe8fa805 | ||
|
|
57a1c68aba | ||
|
|
83104bf919 | ||
|
|
7574c407fa | ||
|
|
f67a38864c | ||
|
|
f632795904 | ||
|
|
0cf43b8623 | ||
|
|
d3d426a8d9 | ||
|
|
6cae92e1f1 | ||
|
|
3670d7efcd | ||
|
|
887c1d4254 | ||
|
|
a56ae22614 | ||
|
|
884c45de0c | ||
|
|
8d6a1773a3 | ||
|
|
6f1e964c9f | ||
|
|
4db7ebd743 | ||
|
|
83f5e380d4 | ||
|
|
34f5eaeaa2 | ||
|
|
726f96089c | ||
|
|
6428b57775 | ||
|
|
e3f0e09a4a | ||
|
|
e839c29916 | ||
|
|
42b6876f2c | ||
|
|
d439518f13 | ||
|
|
f4be5adae0 | ||
|
|
4b77a97148 | ||
|
|
dd92e9db1a | ||
|
|
ead82cdcf3 | ||
|
|
9cce80d679 | ||
|
|
f43451de36 | ||
|
|
5d1cd5ed47 | ||
|
|
de948e4d2b | ||
|
|
db69f0cafa | ||
|
|
c97ab482fb | ||
|
|
17ec77073a | ||
|
|
0967f3f7bf | ||
|
|
86351724ff | ||
|
|
a97b3d1ed3 | ||
|
|
c7b71b5d92 | ||
|
|
67ae374e60 | ||
|
|
b72deb2b2a | ||
|
|
c368cc0855 | ||
|
|
33800e226a | ||
|
|
4539535c8c | ||
|
|
76bdac9747 | ||
|
|
d6b909adf4 | ||
|
|
39a0e89a24 | ||
|
|
d35042066b | ||
|
|
9a690ba042 | ||
|
|
11f90a1112 | ||
|
|
954684f5b5 | ||
|
|
39c0c316fc | ||
|
|
3285cacc97 | ||
|
|
7ac9c33112 | ||
|
|
f5c45b99ad | ||
|
|
af35de509b | ||
|
|
0798841f83 | ||
|
|
8d577b275e | ||
|
|
35e04d58fe | ||
|
|
af8718cebe | ||
|
|
b7e5bbed08 | ||
|
|
6b0cdae3d3 | ||
|
|
e423676b11 | ||
|
|
1757bc0207 | ||
|
|
e7fb6007d3 | ||
|
|
2e446fc3be | ||
|
|
173b87928c | ||
|
|
1edb734df9 | ||
|
|
6da8a54f86 | ||
|
|
eea863e556 | ||
|
|
db0df4e4ca | ||
|
|
b9b4693e20 | ||
|
|
699d205060 | ||
|
|
5579fe0006 | ||
|
|
0375bc3e97 | ||
|
|
49af2d8062 | ||
|
|
745f680899 | ||
|
|
e46e2f01f1 | ||
|
|
12b82b67e7 | ||
|
|
a418cf6a25 | ||
|
|
01e6f378bd | ||
|
|
2e11804ec9 | ||
|
|
efca23c22e | ||
|
|
6772c001dd | ||
|
|
058646c9f9 | ||
|
|
32896debcf | ||
|
|
4ae280528e | ||
|
|
924287c04f | ||
|
|
4b4119e52b | ||
|
|
ca621129e2 | ||
|
|
0d8d43d4dd | ||
|
|
74e1cbd27d | ||
|
|
9d45b0e2fb | ||
|
|
a5a66dd916 | ||
|
|
14a2699ac4 | ||
|
|
dfefdab67c | ||
|
|
952db832d9 | ||
|
|
1a36c77c46 | ||
|
|
5c0b350cff | ||
|
|
093fafe0b7 | ||
|
|
86795ddacc | ||
|
|
fb7c73a7e3 | ||
|
|
360cca08ef | ||
|
|
2dd9ff3ac8 | ||
|
|
f8766708c7 | ||
|
|
fba44b63a5 | ||
|
|
51add20a53 | ||
|
|
85bf4dd5cd | ||
|
|
57766597ae | ||
|
|
f33784cbc9 | ||
|
|
5f3b4640e8 | ||
|
|
d67f719fe4 | ||
|
|
c4f1ef26c0 | ||
|
|
73eabec039 | ||
|
|
287a3c3542 | ||
|
|
afacf32ba7 | ||
|
|
12d3f112e3 | ||
|
|
74b36bd66d | ||
|
|
bb8d0324b5 | ||
|
|
8b67d36c88 | ||
|
|
0909052816 | ||
|
|
2c002177e4 | ||
|
|
dbf21d6b8c | ||
|
|
7ad493c263 | ||
|
|
d1d9c57892 | ||
|
|
bccfa8a3a0 | ||
|
|
68309d5659 | ||
|
|
95aeb27f0b | ||
|
|
d2f116f958 | ||
|
|
c344efdd8d | ||
|
|
dece1b52e0 | ||
|
|
fbab5d2313 | ||
|
|
10c56efdf7 | ||
|
|
56967ef950 | ||
|
|
fc5f0c6685 | ||
|
|
9f05bd0dc3 | ||
|
|
682c6256bc | ||
|
|
de89dd7319 | ||
|
|
480b8ce42e | ||
|
|
dec181be6e | ||
|
|
c20826efa7 | ||
|
|
10b6cd5b83 | ||
|
|
7ed7202c67 | ||
|
|
a54f672b5c | ||
|
|
03ed58600c | ||
|
|
95469f472e | ||
|
|
4a3707d36d | ||
|
|
4990a1cdda | ||
|
|
df1987e6c4 | ||
|
|
81542ef089 | ||
|
|
51dea4a220 | ||
|
|
26ad2320cb | ||
|
|
29bad6b635 | ||
|
|
39fad96b0d | ||
|
|
1bcf91895b | ||
|
|
fd5aa596d1 | ||
|
|
c5143cb722 | ||
|
|
a9d46ada5d | ||
|
|
f3a33e74d7 | ||
|
|
cfd8f237df | ||
|
|
34d248a28c | ||
|
|
0498a707c8 | ||
|
|
86cc15d285 | ||
|
|
f25f45b67e | ||
|
|
a7c5e74c91 | ||
|
|
47462fcb6f | ||
|
|
077f5c1281 | ||
|
|
54990ebf83 | ||
|
|
af742f70c6 | ||
|
|
2fc51bcf53 | ||
|
|
3656651cb9 | ||
|
|
a9920e7cf9 | ||
|
|
ba8037b4bd | ||
|
|
92ae1b678a | ||
|
|
fbf19daff8 | ||
|
|
53d66246d8 | ||
|
|
90105e3c6a | ||
|
|
53ad759da8 | ||
|
|
72f531001e | ||
|
|
f49754de7a | ||
|
|
8bc87ee656 | ||
|
|
e838fe7b96 | ||
|
|
a688a23d1a | ||
|
|
ccfaeb0e36 | ||
|
|
f3c0c70b22 | ||
|
|
f5bb99c145 | ||
|
|
f61fcbc3b5 | ||
|
|
73fb626618 | ||
|
|
7a81f89442 | ||
|
|
ba157867c1 | ||
|
|
4f1cd2d30c | ||
|
|
803b55c6c2 | ||
|
|
d90e7b68dc | ||
|
|
929f503fa3 | ||
|
|
615119260d | ||
|
|
2f2136af09 | ||
|
|
634a399748 | ||
|
|
325e686b16 | ||
|
|
d702fae491 | ||
|
|
eaaa73e642 | ||
|
|
aa0f7ccfa7 | ||
|
|
b1254b3edc | ||
|
|
887633a3a3 | ||
|
|
e2d7f7ea35 | ||
|
|
513bc74c55 | ||
|
|
5b9eff6114 | ||
|
|
49a9d84342 | ||
|
|
5ca4c769db | ||
|
|
ab6dd96c50 | ||
|
|
b7cc027a04 | ||
|
|
eb804bfbbd | ||
|
|
366a3cee81 | ||
|
|
cb3b5bdc28 | ||
|
|
6b35cc3131 | ||
|
|
0fbbb10307 | ||
|
|
82bf74d7c9 | ||
|
|
dd30525c27 | ||
|
|
ae8f614a81 | ||
|
|
cf834f8ac8 | ||
|
|
ea2e9fe348 | ||
|
|
4b8e70075f | ||
|
|
068d83629f | ||
|
|
54d577a038 | ||
|
|
2e41cb36de | ||
|
|
a468b3b17b | ||
|
|
07d64909a9 | ||
|
|
769cff23fd | ||
|
|
cf996b4a87 | ||
|
|
34efbbd570 | ||
|
|
f83aba565f | ||
|
|
c1b47dd248 | ||
|
|
ec47b1bcc7 | ||
|
|
deeaf6dc41 | ||
|
|
8a9c77a061 | ||
|
|
d9fca6ac47 | ||
|
|
38ed9bff39 | ||
|
|
14a1050a26 | ||
|
|
48842fc2f6 | ||
|
|
ba4db261ba | ||
|
|
1c24585093 | ||
|
|
e16a7b5fe3 | ||
|
|
ea2443a7c2 | ||
|
|
15a2b7cbce | ||
|
|
44d8eb4cb7 | ||
|
|
fd8d27d837 | ||
|
|
059d3dc159 | ||
|
|
05240c56b6 | ||
|
|
6f2e2d6aad | ||
|
|
f992156dcf | ||
|
|
aee8b8b659 | ||
|
|
5e06583055 | ||
|
|
cb0ad13278 | ||
|
|
d63f1cc158 | ||
|
|
64c6437e4e | ||
|
|
2ec99bc853 | ||
|
|
81935a8f31 | ||
|
|
01a4440f39 | ||
|
|
0abc40ecca | ||
|
|
7f6688c01a | ||
|
|
0d776ec2c8 | ||
|
|
95292bfcba | ||
|
|
0292c4ee3b | ||
|
|
afd101034d | ||
|
|
b6fe31f9cb | ||
|
|
c924bdef04 | ||
|
|
2db8f93507 | ||
|
|
aeeb2e138f | ||
|
|
d156cff7e4 | ||
|
|
2d1b11bd8c | ||
|
|
58fcb01e08 | ||
|
|
66948b9de4 | ||
|
|
9aeee8189b | ||
|
|
b67a695e9e | ||
|
|
c84304b33c | ||
|
|
c441e7ec2c | ||
|
|
7e990963f1 | ||
|
|
ed190527ce | ||
|
|
fabb18c55c | ||
|
|
31adb13bde | ||
|
|
2102160cdb | ||
|
|
5ddb7eb983 | ||
|
|
b904895a61 | ||
|
|
be0c315a12 | ||
|
|
c55bfb650c | ||
|
|
84227b972b | ||
|
|
9d15ef9395 | ||
|
|
16e4bc8f60 | ||
|
|
a0cb2d932a | ||
|
|
70f522ecdd | ||
|
|
be941a7375 | ||
|
|
b812637fe1 | ||
|
|
194d5c995b | ||
|
|
7a8dd39ee8 | ||
|
|
09762cb35a | ||
|
|
e2e263c783 | ||
|
|
7349c30cd9 | ||
|
|
53c5d548f1 | ||
|
|
aec7b6f7fb | ||
|
|
1831848f89 | ||
|
|
f80b152c9b | ||
|
|
db29029653 | ||
|
|
87ee233636 | ||
|
|
cf99ac9a2c | ||
|
|
1538dc5dcb | ||
|
|
ec34b35a7f | ||
|
|
f7169bf417 | ||
|
|
f173c2f1c2 | ||
|
|
78f467852e | ||
|
|
8b932971df | ||
|
|
66b2fb602f | ||
|
|
df834f41f3 | ||
|
|
b0ac10bc11 | ||
|
|
b75547cff8 | ||
|
|
e8265ac642 | ||
|
|
029de873d7 | ||
|
|
2679bf3709 | ||
|
|
6fb4adf87f | ||
|
|
c9de100dd9 | ||
|
|
f6fc32a074 | ||
|
|
019e80d60a | ||
|
|
06f8237196 | ||
|
|
8fa869fab2 | ||
|
|
ed744d05e1 | ||
|
|
0023b6135a | ||
|
|
2b709fb8e8 | ||
|
|
3bc5e780da | ||
|
|
2fa7a1ab5f | ||
|
|
f34a16846f | ||
|
|
a2177ef57f | ||
|
|
28619164c4 | ||
|
|
ab376f0f1a | ||
|
|
44cb90eff1 | ||
|
|
2584d958e9 | ||
|
|
161d877e8b | ||
|
|
b98154e410 | ||
|
|
7cb0d7fb58 | ||
|
|
c77d323f1f | ||
|
|
3ae416955f | ||
|
|
7480fd51ee | ||
|
|
730e8f73d4 | ||
|
|
d3118b4d07 | ||
|
|
fb79d0f2e8 | ||
|
|
1bbde8fd94 | ||
|
|
ee8bdd4886 | ||
|
|
e36db73864 | ||
|
|
a3a50f193c | ||
|
|
7d917589a4 | ||
|
|
aad283a981 | ||
|
|
047626909c | ||
|
|
5ab170a60a | ||
|
|
ddd5526fed | ||
|
|
b716b61099 | ||
|
|
cadf876d37 | ||
|
|
088608d160 | ||
|
|
4f9b00dfcb | ||
|
|
1d9479e532 | ||
|
|
93eb8be806 | ||
|
|
31d4851089 | ||
|
|
e98d54f0bc | ||
|
|
f7474347b6 | ||
|
|
640f78a23c | ||
|
|
136c868904 | ||
|
|
1587b32a30 | ||
|
|
cb7b1f4ebd | ||
|
|
6df62d052a | ||
|
|
c7ce9dc89c | ||
|
|
5da8bcc3b5 | ||
|
|
aca8df1b09 | ||
|
|
87e9bea6da | ||
|
|
aed99f6193 | ||
|
|
f115815ced | ||
|
|
900e4ac94d | ||
|
|
855090c9e7 | ||
|
|
9b41f7a74e | ||
|
|
8d07ffe775 | ||
|
|
e47f6e5803 | ||
|
|
436574a9ad | ||
|
|
8ac04392f0 | ||
|
|
5bfb43222b | ||
|
|
7ee87c7aa5 | ||
|
|
172779f3d6 | ||
|
|
75ea7862cc | ||
|
|
6ea86f2714 | ||
|
|
a6b047805c | ||
|
|
3ce148dacd | ||
|
|
67dcf34f7a | ||
|
|
db635841f5 | ||
|
|
970b6806c7 | ||
|
|
1dfa02924d | ||
|
|
380e8affba | ||
|
|
725dd8b2a6 | ||
|
|
ff27908dfd | ||
|
|
e6762f2439 | ||
|
|
954d20bd1e | ||
|
|
792b36d5cc | ||
|
|
3f4278ec1d | ||
|
|
a185142170 | ||
|
|
24a30c8d4b | ||
|
|
3c7e5730ec | ||
|
|
c1c1cdd25f | ||
|
|
beea394822 | ||
|
|
1ad89bf53b | ||
|
|
28f76c5ae0 | ||
|
|
94a1f895d0 | ||
|
|
6ad694653a | ||
|
|
724c059721 | ||
|
|
6b78375cdc | ||
|
|
9087664667 | ||
|
|
418ecf67c2 | ||
|
|
dc2bdbc366 | ||
|
|
08a43c1604 | ||
|
|
f5f1eebf63 | ||
|
|
0117cbffaa | ||
|
|
4187a80ff6 | ||
|
|
eb3866c636 | ||
|
|
10fed6ecf0 | ||
|
|
9c5cb7d0f0 | ||
|
|
9b72c93a57 | ||
|
|
8cb95063d2 | ||
|
|
5f9a91aac1 | ||
|
|
02af8398c4 | ||
|
|
23a53b5034 | ||
|
|
e5aec5b141 | ||
|
|
4e88c534b7 | ||
|
|
93dd5c72ec | ||
|
|
aa5561b781 | ||
|
|
13bd5864b3 | ||
|
|
6f2cf34f10 | ||
|
|
57cc3ccefe | ||
|
|
aa5600271a | ||
|
|
ea0089b207 | ||
|
|
8d90477d44 | ||
|
|
eaed0b78cf | ||
|
|
cf6fed82fb | ||
|
|
72f53f9f1b | ||
|
|
13ffd960d9 | ||
|
|
5b4d6dc6eb | ||
|
|
b3f7db6d95 | ||
|
|
b10bfc62d7 | ||
|
|
85f180d43a | ||
|
|
d65cea7d47 | ||
|
|
dae4c211f2 | ||
|
|
7e84725b55 | ||
|
|
c7004c3ff9 | ||
|
|
8cec6ee318 | ||
|
|
83c39cee30 | ||
|
|
7661116858 | ||
|
|
2bf67dff96 | ||
|
|
4078995eeb | ||
|
|
a9e8890fe1 | ||
|
|
313c41e2d1 | ||
|
|
4aac1fd936 | ||
|
|
09fddd11c4 | ||
|
|
a21761d48d | ||
|
|
c90486547f | ||
|
|
69ce54626a | ||
|
|
3ca8f3c3dc | ||
|
|
39d6bb554a | ||
|
|
a95a69e6fc | ||
|
|
94fcabea15 | ||
|
|
e8972ff5a0 | ||
|
|
78503ed178 | ||
|
|
867e3317aa | ||
|
|
85b00385a4 | ||
|
|
c621b3ed69 | ||
|
|
894984a002 | ||
|
|
b92dc14b68 | ||
|
|
00f4fa0aed | ||
|
|
d6e474f451 | ||
|
|
0b9d4b2580 | ||
|
|
a8d42ea8be | ||
|
|
7a6d771689 | ||
|
|
3f1de1fd10 | ||
|
|
46f912659f | ||
|
|
06a5ac9fc7 | ||
|
|
8474c72a10 | ||
|
|
da1ea2dda8 | ||
|
|
50a98db8e6 | ||
|
|
331d58c62b | ||
|
|
5cada188d4 | ||
|
|
56b89ad07a | ||
|
|
b01d9e9a87 | ||
|
|
293b7fd482 | ||
|
|
52bb7c1c6a | ||
|
|
cf45ccb040 | ||
|
|
f48a6e1834 | ||
|
|
61f1060c69 | ||
|
|
f054b30086 | ||
|
|
71bc198cec | ||
|
|
dc0404dbf1 | ||
|
|
d3c9e80fcb | ||
|
|
85a7956876 | ||
|
|
4c3a0801f7 | ||
|
|
7095eac052 | ||
|
|
2165686059 | ||
|
|
3d4d82ff4e | ||
|
|
83f320ac8e | ||
|
|
72674e5c6c | ||
|
|
c352f463f7 | ||
|
|
db5b077354 | ||
|
|
23c25a44ec | ||
|
|
0d5a77fcd6 | ||
|
|
d67e883e13 | ||
|
|
0d1594e6fb | ||
|
|
e055d6876e | ||
|
|
42c4d7f338 | ||
|
|
e4e7c91767 | ||
|
|
2cfcea3479 | ||
|
|
b4cf7abcca | ||
|
|
da0041299b | ||
|
|
80eb3bf8b9 | ||
|
|
7a4ff80525 | ||
|
|
8a1ab4005d | ||
|
|
275b6e70cf | ||
|
|
f2693ec536 | ||
|
|
89584907f2 | ||
|
|
b31895baa9 | ||
|
|
776226d0d8 | ||
|
|
be2cd9acd2 | ||
|
|
550dbef8b0 | ||
|
|
a2d3a6087c | ||
|
|
e794568ae5 | ||
|
|
b4663e2034 | ||
|
|
c94b938b10 | ||
|
|
11f8cdf29a | ||
|
|
47dff5b2e8 | ||
|
|
65540b3417 | ||
|
|
eba3f71ced | ||
|
|
330b826d39 | ||
|
|
42ab9ec39f | ||
|
|
3e1649a8a7 | ||
|
|
0e4b7d7e7c | ||
|
|
afe1d715e1 | ||
|
|
4e7c325292 | ||
|
|
f476a12226 | ||
|
|
c8daf2ac5b | ||
|
|
e645336640 | ||
|
|
bd2948be6d | ||
|
|
8c9a1ea995 | ||
|
|
512878f629 | ||
|
|
eb6872d533 | ||
|
|
212ef01f7a | ||
|
|
b417508c98 | ||
|
|
71b578bf10 | ||
|
|
510b039e07 | ||
|
|
2e793fde8e | ||
|
|
8844c2ab67 | ||
|
|
0d3a64c4b9 | ||
|
|
7a0f527336 | ||
|
|
0b14c2b541 | ||
|
|
527515f1a0 | ||
|
|
5eb95dd6ab | ||
|
|
fa3755454a | ||
|
|
40b0bdd6e8 | ||
|
|
cc0687ec0f | ||
|
|
b5ecdfc0c5 | ||
|
|
db7cc94939 | ||
|
|
86f917db79 | ||
|
|
e9638a4d92 | ||
|
|
165b6ff46f | ||
|
|
bed573ebe8 | ||
|
|
7917072941 | ||
|
|
c53ebb66d0 | ||
|
|
770a8f8812 | ||
|
|
c3dba49007 | ||
|
|
9a1dd41e9f | ||
|
|
726c1571eb | ||
|
|
2b0d34d0db | ||
|
|
ed4aa60420 | ||
|
|
c9d9750afe | ||
|
|
be79060d7e | ||
|
|
4891599d13 | ||
|
|
63616796cb | ||
|
|
81feac7617 | ||
|
|
9e6a099735 | ||
|
|
eb0f49f08c | ||
|
|
15747612cd | ||
|
|
25982e961d | ||
|
|
4b3de76f94 | ||
|
|
3f1fe17977 | ||
|
|
6d91a32f3d | ||
|
|
af19e5e453 | ||
|
|
1025c7679f | ||
|
|
12efcd02b1 | ||
|
|
34dda8917b | ||
|
|
e3cca57762 | ||
|
|
3d7f03611f | ||
|
|
1c62a055d3 | ||
|
|
1201b05dfa | ||
|
|
6d43931e17 | ||
|
|
b2ca01eea0 | ||
|
|
399073f77b | ||
|
|
86a0ae1dde | ||
|
|
745a5b1e45 | ||
|
|
9641aa88e7 | ||
|
|
5b683ec4af | ||
|
|
2f5ed8c591 | ||
|
|
748c43fcfd | ||
|
|
5242eeeb86 | ||
|
|
d80a280fc2 | ||
|
|
227606d94a | ||
|
|
21bdfa0e43 | ||
|
|
8a29f63f73 | ||
|
|
bf84f13938 | ||
|
|
aaa55802b7 | ||
|
|
cd674d3cb3 | ||
|
|
376284381e | ||
|
|
7d8c80f0cc | ||
|
|
46d63dfd0c | ||
|
|
e1d1135ef1 | ||
|
|
2271badaf5 | ||
|
|
b5e2b82248 | ||
|
|
43592174e6 | ||
|
|
7fd1c7f89d | ||
|
|
930094b45e | ||
|
|
1429c2d174 | ||
|
|
3a8ecff3ca | ||
|
|
251b781ecd | ||
|
|
3491d9eff2 | ||
|
|
d43f9f730f | ||
|
|
a55fb34a77 | ||
|
|
c4ba380627 | ||
|
|
9b1849e816 | ||
|
|
98a20e36cd | ||
|
|
cad4cec050 | ||
|
|
6c76038bfc | ||
|
|
54079714c8 | ||
|
|
77c63b8d98 | ||
|
|
8eb4246040 | ||
|
|
eddd518718 | ||
|
|
38e039ab08 | ||
|
|
16b8f2682b | ||
|
|
5eddb260f4 | ||
|
|
cd32180f1a | ||
|
|
00a3ca856f | ||
|
|
a80bd92f40 | ||
|
|
d8878fdfe2 | ||
|
|
124072df95 | ||
|
|
dbdefd972d | ||
|
|
26c533fde3 | ||
|
|
faf284809b | ||
|
|
a9927c24e2 | ||
|
|
ff14323fdc | ||
|
|
e7f8aeff8a | ||
|
|
6a9583b176 | ||
|
|
2475b9e7ea | ||
|
|
fe1275d4e7 | ||
|
|
236f388aec | ||
|
|
ee864e4ff8 | ||
|
|
2c0a7a687e | ||
|
|
a932a421ce | ||
|
|
6efac356f3 | ||
|
|
ef027c0e5f | ||
|
|
bc8f2be582 | ||
|
|
afeb521f07 | ||
|
|
22a0ffd98d | ||
|
|
800fd928ca | ||
|
|
e5d473f494 | ||
|
|
ed275d479b | ||
|
|
b5c1646b50 | ||
|
|
c09e102692 | ||
|
|
463c5b8120 | ||
|
|
d79a4d1b5c | ||
|
|
57d4c93d2d | ||
|
|
30922fc818 | ||
|
|
59ca40f368 | ||
|
|
25bd4c8785 | ||
|
|
41dd72dd3e | ||
|
|
59abb1c161 | ||
|
|
5ee42f876e | ||
|
|
af158d945a | ||
|
|
28c409509c | ||
|
|
19806636ad | ||
|
|
b90bb0cd38 | ||
|
|
b83f351a3e | ||
|
|
95243b1757 | ||
|
|
b250fe6aeb | ||
|
|
7a4ab91ecf | ||
|
|
f0ee6288fb | ||
|
|
7330a849a5 | ||
|
|
226a3da87d | ||
|
|
58332d707b | ||
|
|
652530a4b4 | ||
|
|
b6e7fb5839 | ||
|
|
0db55bc6af | ||
|
|
9fb5dc9759 | ||
|
|
b4ebd3bd75 | ||
|
|
52b586e8d2 | ||
|
|
cc2ca2aee0 | ||
|
|
63bced7679 | ||
|
|
76dd0252ee | ||
|
|
ae1b0b3510 | ||
|
|
693ec111b1 | ||
|
|
e10e62b1e9 | ||
|
|
f425e23bdf | ||
|
|
4c86c7bd26 | ||
|
|
fa605b6a83 | ||
|
|
1f08853fc7 | ||
|
|
40421b32a4 | ||
|
|
f3d6190e18 | ||
|
|
46377071ea | ||
|
|
5fbe28f672 | ||
|
|
302d82a192 | ||
|
|
061ea9bfd7 | ||
|
|
f8e3bdc56b | ||
|
|
92d7e8ce65 | ||
|
|
e7faec3e26 | ||
|
|
72a847a6f1 | ||
|
|
0e007a1196 | ||
|
|
af626a51cc | ||
|
|
4bb221d89a | ||
|
|
984388d191 | ||
|
|
f0ef1daa15 | ||
|
|
3d065bf35c | ||
|
|
f1c0432375 | ||
|
|
21645247fb | ||
|
|
1a350796e5 | ||
|
|
5522cf63f7 | ||
|
|
52d6143d97 | ||
|
|
0fe5c645d6 | ||
|
|
85d04ee11a | ||
|
|
343c5fb5ca | ||
|
|
4ae56cf01c | ||
|
|
8336247cc1 | ||
|
|
3fe0b56fb8 | ||
|
|
329e849894 | ||
|
|
70cee2df86 | ||
|
|
2a30f45177 | ||
|
|
6528c4511a | ||
|
|
fe6f339890 | ||
|
|
c46efa54b4 | ||
|
|
3ef3f0218f | ||
|
|
59414fe231 | ||
|
|
052a14f13c | ||
|
|
050fa7edf3 | ||
|
|
e9db130b38 | ||
|
|
39aefb95c2 | ||
|
|
f1baa1f6a5 | ||
|
|
cd9c2d7dbe | ||
|
|
2e0939702a | ||
|
|
fc4903c1c9 | ||
|
|
3f408f1304 | ||
|
|
e3eab48e4a | ||
|
|
39abbdc5dd | ||
|
|
5d5ede2b85 | ||
|
|
64252b282a | ||
|
|
b449227467 | ||
|
|
228eb9ed7a | ||
|
|
a999f9d4e5 | ||
|
|
9b431321fa | ||
|
|
a96c1d644a | ||
|
|
6bd6cad8fd | ||
|
|
58cc088445 | ||
|
|
1d46208ac2 | ||
|
|
465c6e9a62 | ||
|
|
7a8cc2687d | ||
|
|
96ad5e8e5d | ||
|
|
4cc215ea02 | ||
|
|
c10c58a1cd | ||
|
|
099653ca02 | ||
|
|
84a6c6017d | ||
|
|
1ddef4183d | ||
|
|
9fcd9b0065 | ||
|
|
dc9ebf867c | ||
|
|
3684c10a78 | ||
|
|
10492587c2 | ||
|
|
bc93007c74 | ||
|
|
0e91a5bd0b | ||
|
|
75c7c2ebf0 | ||
|
|
6c57f1a08b | ||
|
|
59e5036456 | ||
|
|
158f10d321 | ||
|
|
4a3047b170 | ||
|
|
64a1c91b76 | ||
|
|
39b879058d | ||
|
|
5ae9067750 | ||
|
|
2af312ac03 | ||
|
|
172bc87f32 | ||
|
|
83ef992155 | ||
|
|
0df3f8d12d | ||
|
|
23ee740c04 | ||
|
|
54d731aeee | ||
|
|
9481e7031d | ||
|
|
70ba60e9e8 | ||
|
|
04a5e8bedf | ||
|
|
9706f7a298 | ||
|
|
cdd2b2028e | ||
|
|
3eb7a13006 | ||
|
|
71763e18f6 | ||
|
|
e9506e80cb | ||
|
|
33a540502a | ||
|
|
b8575a33f5 | ||
|
|
a3cd6f6e63 | ||
|
|
85fa7a5bb0 | ||
|
|
72d702a522 | ||
|
|
90ee5d58c5 | ||
|
|
ffac858566 | ||
|
|
0f10c94839 | ||
|
|
0581b38adf | ||
|
|
576ec05a9e | ||
|
|
6f4720adca | ||
|
|
ab3249c76b | ||
|
|
2f7daad200 | ||
|
|
6780d53c77 | ||
|
|
36fc689a5d | ||
|
|
98c45b55b7 | ||
|
|
1be66bd1bc | ||
|
|
91c2164e49 | ||
|
|
9876b9e588 | ||
|
|
58e36fee10 | ||
|
|
03830562c2 | ||
|
|
430cc2b4ca | ||
|
|
3f497908b5 | ||
|
|
3422866909 | ||
|
|
b84635baf7 | ||
|
|
ad8bcecb5b | ||
|
|
c896ca700c | ||
|
|
ecf67d3cdd | ||
|
|
e9b9091de5 | ||
|
|
62b27d4007 | ||
|
|
cc3ccda90a | ||
|
|
dc79152fe0 | ||
|
|
6b340c69b5 | ||
|
|
f2ec959598 | ||
|
|
b16c2876c4 | ||
|
|
3f50097619 | ||
|
|
28ca39266c | ||
|
|
6dcf695822 | ||
|
|
aeba3f2269 | ||
|
|
1fb0e737c3 | ||
|
|
462a648ac8 | ||
|
|
6523163701 | ||
|
|
a9a9d0a898 | ||
|
|
2851f2c63f | ||
|
|
5e82b37147 | ||
|
|
810ebffceb | ||
|
|
adedd3af5d | ||
|
|
722f22e7f0 | ||
|
|
ad732bd42b | ||
|
|
fdbab2c291 | ||
|
|
8654783131 | ||
|
|
b099d2c389 | ||
|
|
c9ea884e5d | ||
|
|
fbf9077075 | ||
|
|
5e32f9a89d | ||
|
|
690c32ceb8 | ||
|
|
7d73577952 | ||
|
|
edfec35177 | ||
|
|
c2ee6e99c6 | ||
|
|
419d687c50 | ||
|
|
3ca5503b74 | ||
|
|
acde3d60a7 | ||
|
|
7a4464a8ae | ||
|
|
096ba83f41 | ||
|
|
04cd5eeb91 | ||
|
|
9d287d0a5d | ||
|
|
af13d1247f | ||
|
|
81ddef04ff | ||
|
|
9ef7c385d4 | ||
|
|
dc00542b6f | ||
|
|
7fe2f8593c | ||
|
|
20dca9fd46 | ||
|
|
647efab2dd | ||
|
|
44282fd857 | ||
|
|
1372522258 | ||
|
|
27f247eabd | ||
|
|
a3abf8016b | ||
|
|
3b9f4ba63f | ||
|
|
92d6e76ea4 | ||
|
|
350efd8d53 | ||
|
|
6f008d6643 | ||
|
|
6e76831b5d | ||
|
|
31333452c8 | ||
|
|
25759bcbb4 | ||
|
|
72eb8a06f0 | ||
|
|
1e8831d9a0 | ||
|
|
c788659b63 | ||
|
|
e74346f0dc | ||
|
|
5b592575e7 | ||
|
|
c43a3edfc6 | ||
|
|
94149c8445 | ||
|
|
7fd32fb3e8 | ||
|
|
006eb452f1 | ||
|
|
2c5190bf63 | ||
|
|
0cc9e42c59 | ||
|
|
b409af602a | ||
|
|
b0afa778fb | ||
|
|
b8a4152e10 | ||
|
|
4949d1e33e | ||
|
|
06a7cb2a3d | ||
|
|
aee88d081d | ||
|
|
f71d147a8f | ||
|
|
dfad37ba23 | ||
|
|
1a2ed28e5b | ||
|
|
054a1328f7 | ||
|
|
901ec7c213 | ||
|
|
6fbd148597 | ||
|
|
d7d5d373c9 | ||
|
|
a9e0f8b7be | ||
|
|
f668bec210 | ||
|
|
1835b04809 | ||
|
|
ec9b8be5f8 | ||
|
|
8be92d9739 | ||
|
|
bbb38031f0 | ||
|
|
c25ef5dc4c | ||
|
|
093414b846 | ||
|
|
f664ad1cde | ||
|
|
5e9306ad40 | ||
|
|
c9af7e4cfa | ||
|
|
5d72f145df | ||
|
|
5b3506584a | ||
|
|
27748f9576 | ||
|
|
e6f7d4a732 | ||
|
|
32b18a8a5c | ||
|
|
160a5c9760 | ||
|
|
dde1531f42 | ||
|
|
60e3b37d39 | ||
|
|
a8563489e7 | ||
|
|
a86c037a91 | ||
|
|
523429b47f | ||
|
|
a13722eec1 | ||
|
|
8e8b6d60f0 | ||
|
|
4808c047ee | ||
|
|
be5e81b246 | ||
|
|
a137ed64dc | ||
|
|
fc1129c728 | ||
|
|
a22594b891 | ||
|
|
4f5c747c99 | ||
|
|
e7a81a8f8b | ||
|
|
32414b343a | ||
|
|
eeb6e78fa4 | ||
|
|
08aa2b9fa4 | ||
|
|
8b90d4ebf9 | ||
|
|
133fdc1f0a | ||
|
|
e7e01ee838 | ||
|
|
12c9536a7b | ||
|
|
c20fbfccf6 | ||
|
|
fd27d90303 | ||
|
|
686428a41a | ||
|
|
73e85b7df5 | ||
|
|
dfa241d6a9 | ||
|
|
dd8e1fdf45 | ||
|
|
21b091ab14 | ||
|
|
416b499670 | ||
|
|
dc90a889d7 | ||
|
|
14757ca925 | ||
|
|
7d865ccb1f | ||
|
|
294d4b1f29 | ||
|
|
5e3184b61d | ||
|
|
e57e1408b2 | ||
|
|
ef95d2bcd4 | ||
|
|
d8602c52af | ||
|
|
657bb1d2a1 | ||
|
|
0bd6b041c8 | ||
|
|
28077dff67 | ||
|
|
68917f12fb | ||
|
|
bb1b657ac9 | ||
|
|
07c83d4d32 | ||
|
|
264109360b | ||
|
|
2278290b91 | ||
|
|
23bcb4127a | ||
|
|
8004f0962c | ||
|
|
689f0443f3 | ||
|
|
441e864ea1 | ||
|
|
4f17392bf1 | ||
|
|
deace7a03a | ||
|
|
c49f81cd8b | ||
|
|
bada02a122 | ||
|
|
3d785360e1 | ||
|
|
3a81c8f279 | ||
|
|
9f64fdb9b6 | ||
|
|
e9873c58a8 | ||
|
|
a4a3bfc556 | ||
|
|
235115af9c | ||
|
|
aa82042db2 | ||
|
|
e8f1ce501a | ||
|
|
a4f4bef1f6 | ||
|
|
6aa315f815 | ||
|
|
15494d85a9 | ||
|
|
787e2f106a | ||
|
|
4db991c891 | ||
|
|
ab11453fc8 | ||
|
|
1a5bea6dde | ||
|
|
5e0ea9c734 | ||
|
|
68e628d384 | ||
|
|
0babde74f3 | ||
|
|
42cee30187 | ||
|
|
c50f1c8830 | ||
|
|
1db9e16006 | ||
|
|
3bf3bb433b | ||
|
|
fa0b4b26ac | ||
|
|
ec9f81b323 | ||
|
|
c400bc8f03 | ||
|
|
fc2fb71396 | ||
|
|
e8287b839f | ||
|
|
fcd713b23c | ||
|
|
294f82c327 | ||
|
|
0cc8ee6669 | ||
|
|
e7a2284226 | ||
|
|
64162a0bfd | ||
|
|
c2f92e07d9 | ||
|
|
29e44260a0 | ||
|
|
e2bebe078a | ||
|
|
d025a00d18 | ||
|
|
db0b2bc93e | ||
|
|
0b2bea3fa9 | ||
|
|
9156dea8b7 | ||
|
|
1f93169c43 | ||
|
|
65990068cb | ||
|
|
4008919a3c | ||
|
|
52b45d74cb | ||
|
|
ee27ea76a6 | ||
|
|
a85159425b | ||
|
|
ab69be6665 | ||
|
|
68ca119ae0 | ||
|
|
a0e05eaef0 | ||
|
|
34d80a18dc | ||
|
|
1a38b5533d | ||
|
|
7df06fb2f6 | ||
|
|
0efb690992 | ||
|
|
5af42dc678 | ||
|
|
2b929a98e7 | ||
|
|
9aa3721aa3 | ||
|
|
5ee257304a | ||
|
|
4497a54b12 | ||
|
|
13ff7f7b96 | ||
|
|
0147d55302 | ||
|
|
2169fb3859 | ||
|
|
8f9e23a59d | ||
|
|
9735f73c38 | ||
|
|
a8d60e13e1 | ||
|
|
b843716113 | ||
|
|
f442e6fabf | ||
|
|
e8e6660b2a | ||
|
|
6dd4e61e04 | ||
|
|
98fa428386 | ||
|
|
a145333fbd | ||
|
|
72491257c3 | ||
|
|
b009da2710 | ||
|
|
def60a510c | ||
|
|
4ac68cfbaa | ||
|
|
433a35fac2 | ||
|
|
6c9746c55e | ||
|
|
efa99d02b2 | ||
|
|
5269975753 | ||
|
|
0bdc6e443e | ||
|
|
b1ac7ac991 | ||
|
|
4f6e714a9d | ||
|
|
85f7f22520 | ||
|
|
79f8c1581c | ||
|
|
191ae25f63 | ||
|
|
484f3f8299 | ||
|
|
da748b1170 | ||
|
|
5835dbd9a4 | ||
|
|
f49405d4cf | ||
|
|
e6103cc49b | ||
|
|
40001b7287 | ||
|
|
0e08134a7c | ||
|
|
1c6eacd756 | ||
|
|
bec6c6bd66 | ||
|
|
f459745402 | ||
|
|
65ebd90903 | ||
|
|
ea30cd8cd2 | ||
|
|
e6a1a27516 | ||
|
|
79fea59713 | ||
|
|
e0b03aafe8 | ||
|
|
5b782c1ff4 | ||
|
|
fd0a6905dd | ||
|
|
1e18299364 | ||
|
|
b937f57a72 | ||
|
|
3fe65fd3fb | ||
|
|
460af1885a | ||
|
|
370e656209 | ||
|
|
337bc9d10e | ||
|
|
8fa40b7a70 | ||
|
|
af71b1b4b3 | ||
|
|
4f60297630 | ||
|
|
11aa78a5f9 | ||
|
|
f4be4ad28d | ||
|
|
cd4ebf5ffc | ||
|
|
584d4a4619 | ||
|
|
5061f1e2c8 | ||
|
|
8602fa9e01 | ||
|
|
ea10d23133 | ||
|
|
3d9714446a | ||
|
|
ee14acf735 | ||
|
|
7d9f133824 | ||
|
|
07f6a26c3e | ||
|
|
653d6ca1eb | ||
|
|
e1263bf55c | ||
|
|
ac96217ac3 | ||
|
|
d747e146a6 | ||
|
|
58512b2dea | ||
|
|
3d24f376ec | ||
|
|
954a5dba0b | ||
|
|
e7e44d431a | ||
|
|
9865908163 | ||
|
|
ff99cfe3f7 | ||
|
|
944d2c6ac4 | ||
|
|
3b28f0103f | ||
|
|
5d72c7f714 | ||
|
|
92c8ca50d1 | ||
|
|
fb918af050 | ||
|
|
ff536c58df | ||
|
|
9ff3ae9860 | ||
|
|
75fe75f7a9 | ||
|
|
79bfd0fd12 | ||
|
|
41bbf0a62b | ||
|
|
6f1206e8a9 | ||
|
|
74ca540c18 | ||
|
|
36fb3aef22 | ||
|
|
694ae52d64 | ||
|
|
ed48542fd8 | ||
|
|
4ab147a8a5 | ||
|
|
9d57baf5a9 | ||
|
|
a5b1412d43 | ||
|
|
6e16a1b76a | ||
|
|
d468572bf7 | ||
|
|
cc08da9600 | ||
|
|
f9f333ca0a | ||
|
|
02aca5aac5 | ||
|
|
e719da300f | ||
|
|
a7b929a80e | ||
|
|
c05ceb0aff | ||
|
|
4194702442 | ||
|
|
04dda5e347 | ||
|
|
cde90620b0 | ||
|
|
dea195df26 | ||
|
|
6a441d8ed5 | ||
|
|
7c6c8feb95 | ||
|
|
18957dcf39 | ||
|
|
7d825f8be0 | ||
|
|
518757c47d | ||
|
|
593f7d42d8 | ||
|
|
39c117a3cc | ||
|
|
4700104303 | ||
|
|
bc4b9dc5f3 | ||
|
|
6d21ab20bd | ||
|
|
dea1c86a9b | ||
|
|
15021d05c9 | ||
|
|
4639f3c930 | ||
|
|
42860dd2a9 | ||
|
|
df6ac90812 | ||
|
|
53fbaec1fa | ||
|
|
2f819d1d1c | ||
|
|
c74bd93c58 | ||
|
|
9f9ecca59c | ||
|
|
9e021f889f | ||
|
|
1c5896c3e3 | ||
|
|
4abad29b3a | ||
|
|
3fab901097 | ||
|
|
6e0adaead0 | ||
|
|
55afe3a760 | ||
|
|
a61f7f44d6 | ||
|
|
f0e0e20496 | ||
|
|
3e4f91a78d | ||
|
|
fb68a6f4b6 | ||
|
|
5a611b73d0 | ||
|
|
7e36d74959 | ||
|
|
442d2cc414 | ||
|
|
8cac7ee63f | ||
|
|
ab29554f3f | ||
|
|
2803c39fb5 | ||
|
|
0ba9393285 | ||
|
|
6cb8b108db | ||
|
|
9aef43d5a0 | ||
|
|
8dadc4cf50 | ||
|
|
45518fce6c | ||
|
|
b21f4b6470 | ||
|
|
c52f60f9d7 | ||
|
|
c815d732eb | ||
|
|
18849c085a | ||
|
|
cb62958095 | ||
|
|
4fcfad5df5 | ||
|
|
5101096518 | ||
|
|
afef3b94d5 | ||
|
|
73a84f90c5 | ||
|
|
918bc9efe8 | ||
|
|
98619733b2 | ||
|
|
2fb712c3a2 | ||
|
|
0fa6503034 | ||
|
|
fab97a377f | ||
|
|
811bf2f9c4 | ||
|
|
20497dabb4 | ||
|
|
0b430af077 | ||
|
|
e42e7c3694 | ||
|
|
eeef120433 | ||
|
|
8950571acb | ||
|
|
a72a82e29b | ||
|
|
b6adc23bdd | ||
|
|
8677aadad7 | ||
|
|
a4b8e59c3f | ||
|
|
3a5d0716d4 | ||
|
|
b54a5b3f67 | ||
|
|
5b33bd5eda | ||
|
|
6d55dd8884 | ||
|
|
0fae350256 | ||
|
|
90015ab594 | ||
|
|
28281ae4d4 | ||
|
|
4723b27f2c | ||
|
|
de338f4da5 | ||
|
|
d52eac7b35 | ||
|
|
4d01e677ee | ||
|
|
33daa88197 | ||
|
|
607a3d88ae | ||
|
|
be082e2fe0 | ||
|
|
27bd578405 | ||
|
|
0962ebeadb | ||
|
|
95d9ca8945 | ||
|
|
e71cd7a939 | ||
|
|
4bf301c913 | ||
|
|
0ea9e398bb | ||
|
|
2a6ea5d979 | ||
|
|
b8cde503c2 | ||
|
|
89c8e1c6a5 | ||
|
|
6c66e9850c | ||
|
|
fbcc8d8d6c | ||
|
|
e2bbdc968d | ||
|
|
ed7d5623ad | ||
|
|
217e491e59 | ||
|
|
101414dcd3 | ||
|
|
edda1e6567 | ||
|
|
dd7439095a | ||
|
|
9e3ae9c37c | ||
|
|
b1bd2c17a0 | ||
|
|
a939296981 | ||
|
|
23cfccf424 | ||
|
|
071e746c45 | ||
|
|
eae2876187 | ||
|
|
8730bbf0a9 | ||
|
|
1f5e5e5c14 | ||
|
|
e8b6e33934 | ||
|
|
9ee6c7aab6 | ||
|
|
22a8b914d2 | ||
|
|
dfab96c72e | ||
|
|
7c8fba8fc1 | ||
|
|
85f4023965 | ||
|
|
e9ee47a7c7 | ||
|
|
a7c6127f2b | ||
|
|
4e6a699140 | ||
|
|
f71644faf6 | ||
|
|
9a6306c53b | ||
|
|
83d98fb6fb | ||
|
|
c501574753 | ||
|
|
f0efdd2ed4 | ||
|
|
177b45c49b | ||
|
|
fc31b28ab6 | ||
|
|
e61475c7ea | ||
|
|
c92c0fce37 | ||
|
|
1a0c308b65 | ||
|
|
dffbad49b4 | ||
|
|
b6dffaabee | ||
|
|
8d83803763 | ||
|
|
85e5bd7c86 | ||
|
|
6e4f023a7b | ||
|
|
8fb817f93c | ||
|
|
49abdb1b5c | ||
|
|
bba368a32d | ||
|
|
eaccd8087c | ||
|
|
3c1fc4a7df | ||
|
|
c0027e5107 | ||
|
|
ed6a4426c7 | ||
|
|
e5a6cf48f7 | ||
|
|
dace6873df | ||
|
|
d01460f19a | ||
|
|
97e35e796c | ||
|
|
4de0e693ca | ||
|
|
01b30e083f | ||
|
|
7ba063c6bb | ||
|
|
0215e3ec91 | ||
|
|
91aa5255ec | ||
|
|
0d1c8deb57 | ||
|
|
06d2ffaa14 | ||
|
|
6ae948523b | ||
|
|
9aaf289fb8 | ||
|
|
367f6bd5e8 | ||
|
|
d9ff7c218d | ||
|
|
f5cce3c3a3 | ||
|
|
f1897c7a86 | ||
|
|
25e44b5492 | ||
|
|
b7dca68375 | ||
|
|
9bad0795e2 | ||
|
|
b7da215ab5 | ||
|
|
35acce84ea | ||
|
|
a7f32197f3 | ||
|
|
ac8aff1f00 | ||
|
|
e99e0b02d4 | ||
|
|
621b31839e | ||
|
|
3c5335056c | ||
|
|
30bf228dc9 | ||
|
|
e78a05d6fe | ||
|
|
4930003008 | ||
|
|
0153bc49bc | ||
|
|
48503e9f40 | ||
|
|
ef9b453aa8 | ||
|
|
f5552da8ac | ||
|
|
6124f2693b | ||
|
|
2bcad2014b | ||
|
|
7bbad9f074 | ||
|
|
a5ac4bb08b | ||
|
|
3b2bb2ebc6 | ||
|
|
40e4df7e78 | ||
|
|
41d3b258bb | ||
|
|
12b44c865b | ||
|
|
58c2ad8e4b | ||
|
|
4c354bdcd6 | ||
|
|
22f670d999 | ||
|
|
e5f3dcaaef | ||
|
|
3f4b1e69c7 | ||
|
|
fa286caca2 | ||
|
|
3b78e65b2b | ||
|
|
df6f7803d0 | ||
|
|
e870f844c6 | ||
|
|
68192dcdbf | ||
|
|
926cb51906 | ||
|
|
e518571f83 | ||
|
|
7586575cf8 | ||
|
|
31c9775ef4 | ||
|
|
30de268da7 | ||
|
|
1e387b3b42 | ||
|
|
94af35b3b9 | ||
|
|
a3989aafaa | ||
|
|
87feed08f5 | ||
|
|
86eca5af3a | ||
|
|
246e54a293 | ||
|
|
16ff22b457 | ||
|
|
f7a25eb480 | ||
|
|
51f5dbcf26 | ||
|
|
d79a79084e | ||
|
|
fe54718073 | ||
|
|
c1cef4f99e | ||
|
|
d36f874d0e | ||
|
|
b0c577ddd7 | ||
|
|
56b018b4c5 | ||
|
|
8bc7cdaaeb | ||
|
|
adf0a9ee74 | ||
|
|
ba7f9b8f87 | ||
|
|
a3ff9b53a8 | ||
|
|
0b897df462 | ||
|
|
b4899cdb21 | ||
|
|
2fbe5a418f | ||
|
|
8a6bce3745 | ||
|
|
b0777a44cb | ||
|
|
0c98a34094 | ||
|
|
088b7f360e | ||
|
|
54429a095c | ||
|
|
282979eef4 | ||
|
|
48653e5663 | ||
|
|
ec2e2bc4cc | ||
|
|
885aa47b18 | ||
|
|
225840b79d | ||
|
|
0e899cdd13 | ||
|
|
6906ead6ae | ||
|
|
e441594981 | ||
|
|
448b6e9ac1 | ||
|
|
a09560542b | ||
|
|
adc3b24ed7 | ||
|
|
4026291572 | ||
|
|
59f6ad9479 | ||
|
|
dd4960f1ce | ||
|
|
3b3eefcb73 | ||
|
|
cbcb720228 | ||
|
|
d73c07de68 | ||
|
|
cd3e637387 | ||
|
|
9614f7dca2 | ||
|
|
84fab30c09 | ||
|
|
cb71d8a0be | ||
|
|
507ae1de33 | ||
|
|
dcb88226b5 | ||
|
|
51217521e3 | ||
|
|
05bf33805f | ||
|
|
3506c100c7 | ||
|
|
8639d1768c | ||
|
|
779d281c57 | ||
|
|
815630ffe1 | ||
|
|
189366097e | ||
|
|
7c30babdec | ||
|
|
618395df5e | ||
|
|
ef7d913cd7 | ||
|
|
daa8faa3aa | ||
|
|
336ffc9b09 | ||
|
|
44b48a55a5 | ||
|
|
0de2c28c92 | ||
|
|
4f8bea8f35 | ||
|
|
aae7401888 | ||
|
|
96a0c2531d | ||
|
|
99378af668 | ||
|
|
9f9b3374bd | ||
|
|
2efcbcc9bb | ||
|
|
7cac755c98 | ||
|
|
0aeee7ea28 | ||
|
|
f393fa0442 | ||
|
|
f24e777921 | ||
|
|
c82c9562b6 | ||
|
|
d473c1635f | ||
|
|
33a7619eac | ||
|
|
dd517a3dd1 | ||
|
|
143b4802c3 | ||
|
|
a564eae9f1 | ||
|
|
83bf99c8d0 | ||
|
|
5173145653 | ||
|
|
1f0173ad7b | ||
|
|
bdb38ceaa8 | ||
|
|
bb0c587fff | ||
|
|
fec2f8e38e | ||
|
|
b0afcee389 | ||
|
|
33c9bc9908 | ||
|
|
e233e916aa | ||
|
|
eb5d4d0708 | ||
|
|
3a8e80c530 | ||
|
|
c72d7e0686 | ||
|
|
5b92085c29 | ||
|
|
4e7b1c77e3 | ||
|
|
e83f3e0011 | ||
|
|
b874692d06 | ||
|
|
b7511829ad | ||
|
|
f5f2a5f171 | ||
|
|
12500d7d3c | ||
|
|
927d569db5 | ||
|
|
eec41bf4e7 | ||
|
|
f0ecac5998 | ||
|
|
feaaf4f4b0 | ||
|
|
e09d093239 | ||
|
|
fc4b7ce0ee | ||
|
|
dbf0de9e65 | ||
|
|
8497bd6d70 | ||
|
|
67f05b8eed | ||
|
|
0f5dec1797 | ||
|
|
24c4f25dd0 | ||
|
|
ab93fefd5b | ||
|
|
e726bb1df8 | ||
|
|
a8abd40abe | ||
|
|
06fa58ff47 | ||
|
|
0de746da4e | ||
|
|
24552f2b9b | ||
|
|
90510378c8 | ||
|
|
a22f6596dc | ||
|
|
c216b3be7f | ||
|
|
6e00064cb3 | ||
|
|
594b41cc70 | ||
|
|
9272e40178 | ||
|
|
e107c19dbf | ||
|
|
13c78e8e9a | ||
|
|
5ddcf06ce9 | ||
|
|
70f3e3407f | ||
|
|
332c429e31 | ||
|
|
b23c602079 | ||
|
|
13ef76127d | ||
|
|
0e0012cca1 | ||
|
|
37a2edc558 | ||
|
|
2629be5651 | ||
|
|
815c612261 | ||
|
|
831fdeb030 | ||
|
|
bcfa60ae98 | ||
|
|
82c11a2b2c | ||
|
|
a967990be7 | ||
|
|
87573b81bb | ||
|
|
66ef66644f | ||
|
|
e46b0952e2 | ||
|
|
6ab9e04ba6 | ||
|
|
4740ee1edc | ||
|
|
f3113296ee | ||
|
|
6c8c4de398 | ||
|
|
6d5d919a06 | ||
|
|
7af00ef744 | ||
|
|
5f86962c06 | ||
|
|
171e9625f6 | ||
|
|
1f91b33f46 | ||
|
|
e6bd877b48 | ||
|
|
127dd7334f | ||
|
|
3f219a3f8e | ||
|
|
fb5cc76585 | ||
|
|
c5117cb42f | ||
|
|
4c86f88816 | ||
|
|
f100a3ee4c | ||
|
|
a53c61b4d8 | ||
|
|
88f37028a2 | ||
|
|
42b1666fbe | ||
|
|
de9f495e2c | ||
|
|
cda2e3d048 | ||
|
|
49b01143a0 | ||
|
|
991bb4d7f0 | ||
|
|
c9a1a94cc1 | ||
|
|
819608b940 | ||
|
|
dda58a82f9 | ||
|
|
eae3d463df | ||
|
|
8f816c3433 | ||
|
|
88f2dc7f60 | ||
|
|
da44c240d7 | ||
|
|
cd2ae7ea92 | ||
|
|
23c71c8d69 | ||
|
|
58d774a316 | ||
|
|
f2a4f61920 | ||
|
|
1f47803324 | ||
|
|
0062227c57 | ||
|
|
010c89e810 | ||
|
|
0fed122a99 | ||
|
|
21feb6874a | ||
|
|
ec1b0b530f | ||
|
|
71ee7e73a7 | ||
|
|
a574a6db1c | ||
|
|
d4b85999af | ||
|
|
45f8b8ccc8 | ||
|
|
f7479250c3 | ||
|
|
0f448748e8 | ||
|
|
d5a013a973 | ||
|
|
6a9b3f6df2 | ||
|
|
8398ff7a76 | ||
|
|
4070779d41 | ||
|
|
cce2a41db6 | ||
|
|
15ee3b2e62 | ||
|
|
86b5b71f28 | ||
|
|
d04b0f7cca | ||
|
|
4294793452 | ||
|
|
8058252426 | ||
|
|
810ba72879 | ||
|
|
74db5b9d3b | ||
|
|
80e0bcc743 | ||
|
|
6f91a34f74 | ||
|
|
a1d3477345 | ||
|
|
d001fcc896 | ||
|
|
8d60d071df | ||
|
|
f71611f5a1 | ||
|
|
0d54423618 | ||
|
|
fcba766a75 | ||
|
|
608cdcf3c1 | ||
|
|
b6f57b32b0 | ||
|
|
e4fee97d9b | ||
|
|
0dfe92100f | ||
|
|
7a2c1ba3ec | ||
|
|
72aa611d2a | ||
|
|
7cfbdf34ec | ||
|
|
334eabafb5 | ||
|
|
50b1c9d5c6 | ||
|
|
4e25639de4 | ||
|
|
63817fc6f3 | ||
|
|
970647b4ae | ||
|
|
ef113a475c | ||
|
|
9abe7e2b75 | ||
|
|
f5ea960de3 | ||
|
|
8d6f32e1e3 | ||
|
|
d7bc6976ed | ||
|
|
f6c072fa2b | ||
|
|
95239a5731 | ||
|
|
9951a16ccc | ||
|
|
7ac47d2e61 | ||
|
|
d4475e582d | ||
|
|
c4c7886037 | ||
|
|
c98ab6684f | ||
|
|
434672a8dd | ||
|
|
f6a0c3d5f8 | ||
|
|
729677c41a | ||
|
|
6c10fd4c39 | ||
|
|
ccc44b0c16 | ||
|
|
faaf81d6e9 | ||
|
|
d7c8e47e78 | ||
|
|
39ced08b12 | ||
|
|
e62f35f207 | ||
|
|
14833e22cb | ||
|
|
9c5783215f | ||
|
|
180582df2e | ||
|
|
255a533708 | ||
|
|
2d70a10a14 | ||
|
|
58e2391cdb | ||
|
|
ab51c3b4b4 | ||
|
|
2e1d8def40 | ||
|
|
efa88d0087 | ||
|
|
a7e4b7e3c6 | ||
|
|
25e5db5a5b | ||
|
|
aca8d0c682 | ||
|
|
65c2cffc6a | ||
|
|
a2bacd8096 | ||
|
|
030405b93d | ||
|
|
10bb4900c0 | ||
|
|
48b3dffecb | ||
|
|
056ff73c28 | ||
|
|
62b5ca20df | ||
|
|
3200c169f4 | ||
|
|
4f7e9d4d58 | ||
|
|
d6443d7560 | ||
|
|
35f1161453 | ||
|
|
95dc3ca20e | ||
|
|
28c29da166 | ||
|
|
c0d3b8c9a9 | ||
|
|
1834ec8087 | ||
|
|
22c9441ddb | ||
|
|
9018fee0e2 | ||
|
|
5ec1dea555 | ||
|
|
6d002425bc | ||
|
|
93b47cb85f | ||
|
|
b4cbaae757 | ||
|
|
11a945c86e | ||
|
|
90f16945f1 | ||
|
|
f40e010ab0 | ||
|
|
b771f0f809 | ||
|
|
f6488147bd | ||
|
|
542f4dd430 | ||
|
|
288d72327d | ||
|
|
7bf22df7c3 | ||
|
|
537906c504 | ||
|
|
dc879e2c4a | ||
|
|
58f28c1aea | ||
|
|
4e1a93224e | ||
|
|
0004dd53e1 | ||
|
|
cf901c9bcc | ||
|
|
b5cf371a55 | ||
|
|
c4622a8255 | ||
|
|
c31133687c | ||
|
|
9be1f21e5f | ||
|
|
1b3b7175cc | ||
|
|
e739138ab5 | ||
|
|
f00930224e | ||
|
|
16372845a8 | ||
|
|
02cde31efb | ||
|
|
d6205bff14 | ||
|
|
aacfcbcb3e | ||
|
|
990431be3d | ||
|
|
ef2bbc60df | ||
|
|
e5eb99276f | ||
|
|
11f618d30c | ||
|
|
5b4b608a5d | ||
|
|
1106212f18 | ||
|
|
eb8afc4f34 | ||
|
|
9fdfb07c9b | ||
|
|
5d4a9f9d6d | ||
|
|
6f68943c94 | ||
|
|
da2d00cf46 | ||
|
|
d26f8941bb | ||
|
|
9265bd8e37 | ||
|
|
d654c75a6b | ||
|
|
45f05615c4 | ||
|
|
7ccfdabc48 | ||
|
|
c3f39fe512 | ||
|
|
07786f5a15 | ||
|
|
d433614f17 | ||
|
|
2fc3a09b41 | ||
|
|
67705afe3c | ||
|
|
0841888b67 | ||
|
|
344162da5e | ||
|
|
e6b9283a6a | ||
|
|
5002f46bb8 | ||
|
|
f7c00d06ca | ||
|
|
7ac284bdb6 | ||
|
|
54708637cd | ||
|
|
e3df81f020 | ||
|
|
f26b3f1966 | ||
|
|
7cfeb090ed | ||
|
|
6171cc881b | ||
|
|
befb5a0dd9 | ||
|
|
8200348f3c | ||
|
|
c731480360 | ||
|
|
be8853e01f | ||
|
|
1243e50c6d | ||
|
|
3acf446f2b | ||
|
|
d498177cdc | ||
|
|
e642a4eb85 | ||
|
|
d60a58ffdd | ||
|
|
3bbb3f22a8 | ||
|
|
3a1335dd2d | ||
|
|
4bdbb54573 | ||
|
|
45d9d7f951 | ||
|
|
9d3f9f55f7 | ||
|
|
e8fc4dc2e3 | ||
|
|
5fe1b5b34b | ||
|
|
03c2218b88 | ||
|
|
35dca5570f | ||
|
|
8f9c003a9f | ||
|
|
a00a9219da | ||
|
|
87d1af753a | ||
|
|
3ef5c993af | ||
|
|
14aad665b3 | ||
|
|
8b90a2c453 | ||
|
|
c57207447e | ||
|
|
992301e9eb | ||
|
|
a506fd5b20 | ||
|
|
a9358eaed7 | ||
|
|
eb4e3485fe | ||
|
|
ab8063e88a | ||
|
|
c3f90add8c | ||
|
|
600d872b76 | ||
|
|
5a084d899c | ||
|
|
e0e9c3f72c | ||
|
|
a27cd84905 | ||
|
|
b644e04038 | ||
|
|
0e779e98c0 | ||
|
|
f46650d289 | ||
|
|
204031306f | ||
|
|
6e4ad6311b | ||
|
|
36ed8e1fa8 | ||
|
|
b861f98868 | ||
|
|
e23e491967 | ||
|
|
4e4c8cebc4 | ||
|
|
5fe9e19865 | ||
|
|
9923199760 | ||
|
|
776f1e4e58 | ||
|
|
8dc5617104 | ||
|
|
c42cde0fb1 | ||
|
|
98ec2979ea | ||
|
|
36ee71cb0a | ||
|
|
6f9662af50 | ||
|
|
83a8cd2f53 | ||
|
|
e3463613d4 | ||
|
|
3651e56ca5 | ||
|
|
434951028d | ||
|
|
45e1a20d01 | ||
|
|
59f9b50112 | ||
|
|
a1e166065f | ||
|
|
89d1997d63 | ||
|
|
f3edf7dcd5 | ||
|
|
03fb58b961 | ||
|
|
97a55cd063 | ||
|
|
65b9c2103f | ||
|
|
3dfe6f67eb | ||
|
|
9454971b1d | ||
|
|
8e3710f69c | ||
|
|
fc0ab27332 | ||
|
|
b930ed9600 | ||
|
|
5a8a4fe75c | ||
|
|
4f17e0fa04 | ||
|
|
60a44c88af | ||
|
|
edd7c3c248 | ||
|
|
6f04d84b59 | ||
|
|
926a752e31 | ||
|
|
cc05a64fbe | ||
|
|
159e6e8c98 | ||
|
|
080b7b98bd | ||
|
|
c16e75197f | ||
|
|
828404c285 | ||
|
|
5983a1e673 | ||
|
|
12360639bb | ||
|
|
f01afb541d | ||
|
|
1d08888234 | ||
|
|
e61f55671c | ||
|
|
53fac6d5dd | ||
|
|
1cbdde748e | ||
|
|
cb9c5b6988 | ||
|
|
124e331e52 | ||
|
|
117bb9ea96 | ||
|
|
1f1efe97e1 | ||
|
|
b2fac23d58 | ||
|
|
2474c87bbd | ||
|
|
115b939071 | ||
|
|
9dfeb16329 | ||
|
|
b3b1f12e69 | ||
|
|
372802f834 | ||
|
|
be3574136b | ||
|
|
8ffbbffb53 | ||
|
|
2732dda770 | ||
|
|
de550094da | ||
|
|
0d4560177a | ||
|
|
c93396aff9 | ||
|
|
85bdeaf47a | ||
|
|
a441a7ac00 | ||
|
|
9093827424 | ||
|
|
9d387fd666 | ||
|
|
81f444c807 | ||
|
|
a269f8e003 | ||
|
|
514ebf4d84 | ||
|
|
5337a3a479 | ||
|
|
f4f2c1e4db | ||
|
|
002e3b457d | ||
|
|
714da78df6 | ||
|
|
3de1c73592 | ||
|
|
920c4d5011 | ||
|
|
c6776c5e49 | ||
|
|
d9e90f0128 | ||
|
|
fa6084786b | ||
|
|
cab258d75a | ||
|
|
002bc3d80e | ||
|
|
ce04cb14ac | ||
|
|
2a62763cc1 | ||
|
|
d743a27de8 | ||
|
|
93d42c0aa8 | ||
|
|
391dc39e95 | ||
|
|
b2fd5676eb | ||
|
|
4a74156e88 | ||
|
|
01d65fccdd | ||
|
|
fb2c7af9e1 | ||
|
|
9aef528edc | ||
|
|
c8405ddf34 | ||
|
|
d2854b9e90 | ||
|
|
2d0374ec52 | ||
|
|
283ed52520 | ||
|
|
0c5123410b | ||
|
|
9b28d80e95 | ||
|
|
fc452e90d4 | ||
|
|
bdc3353a5c | ||
|
|
fa9c09ee7d | ||
|
|
f58ae52886 | ||
|
|
43e3c51f3f | ||
|
|
371949f4ec | ||
|
|
164f48913f | ||
|
|
6286962c5c | ||
|
|
0ae459a933 | ||
|
|
64c5a24919 | ||
|
|
72f1a85459 | ||
|
|
3dccf814e8 | ||
|
|
b10de90682 | ||
|
|
905b3028b4 | ||
|
|
0c62804b1d | ||
|
|
6f6f2b6f9a | ||
|
|
7848ab2a8c | ||
|
|
c940b7f979 | ||
|
|
3ae6b3f1a8 | ||
|
|
35947100b8 | ||
|
|
29847b7ab6 | ||
|
|
f623a0a8bf | ||
|
|
a05792b363 | ||
|
|
b615e55ec5 | ||
|
|
388642e388 | ||
|
|
edc0961e19 | ||
|
|
8c7a031061 | ||
|
|
a45da81396 | ||
|
|
900943a1b6 | ||
|
|
49b48a6828 | ||
|
|
a4b2447c85 | ||
|
|
a9617f23ce | ||
|
|
2e9b1c9bd6 | ||
|
|
24aef3781e | ||
|
|
47db01550f | ||
|
|
ef5a0a3524 | ||
|
|
39ab116bac | ||
|
|
b26da8e3a5 | ||
|
|
4c976d8097 | ||
|
|
04ec0ff5c4 | ||
|
|
866e55d436 | ||
|
|
50060df55c | ||
|
|
3dc4724e60 | ||
|
|
d24031ab49 | ||
|
|
d69fa55b7d | ||
|
|
55747cfea8 | ||
|
|
59c9207797 | ||
|
|
b4481cfd3a | ||
|
|
d21f5811d1 | ||
|
|
4bf29f276a | ||
|
|
7eba7bf722 | ||
|
|
7f0ac9bbee | ||
|
|
7e4dea82f5 | ||
|
|
aa74315389 | ||
|
|
b7bb766f53 | ||
|
|
ae972cf3cd | ||
|
|
b20a91d24f | ||
|
|
bd8ca6ca5c | ||
|
|
1b690d4d49 | ||
|
|
10e05635a7 | ||
|
|
4625db771e | ||
|
|
6543f5d11c | ||
|
|
f0000a18ba | ||
|
|
80d13234f9 | ||
|
|
f6c1ad1b8f | ||
|
|
2f5fce36e4 | ||
|
|
8d14d15acc | ||
|
|
3cc1b42160 | ||
|
|
2a76f7c3b3 | ||
|
|
2b019aef2f | ||
|
|
7dc6d449bd | ||
|
|
a7ec68e107 | ||
|
|
3192f9b724 | ||
|
|
3decb4e780 | ||
|
|
a1ae7d76f4 | ||
|
|
47dfde16f5 | ||
|
|
99632b7141 | ||
|
|
424827d813 | ||
|
|
b7d1f54bd5 | ||
|
|
bc93e5da17 | ||
|
|
71a8142ed9 | ||
|
|
688cb910dd | ||
|
|
d3b4c49d17 | ||
|
|
25422a4a2a | ||
|
|
62143b1fa1 | ||
|
|
a522adfecb | ||
|
|
83f4df3017 | ||
|
|
3df37bcc99 | ||
|
|
4b0163103e | ||
|
|
bd7deae883 | ||
|
|
d4cf23ec07 | ||
|
|
bdd2b4bfe5 | ||
|
|
ecd47dcdeb | ||
|
|
3762b7b9f9 | ||
|
|
98ef078d33 | ||
|
|
a79cd7aebf | ||
|
|
aa345fad01 | ||
|
|
ed06b8961e | ||
|
|
8e2a3783ce | ||
|
|
d9ab4d1424 | ||
|
|
833db67f25 | ||
|
|
01f370ab82 | ||
|
|
9d4a288579 | ||
|
|
b6f9672d40 | ||
|
|
8f8ee9c5da | ||
|
|
9effe275bd | ||
|
|
c1ae280a78 | ||
|
|
ce3aa4b93e | ||
|
|
fcefd4a29b | ||
|
|
4f8c1b64c9 | ||
|
|
2ece0e1bf8 | ||
|
|
1216a5e65a | ||
|
|
aca2540651 | ||
|
|
2cb20f3fd0 | ||
|
|
946756bd43 | ||
|
|
d74006b51a | ||
|
|
e6dfdc0732 | ||
|
|
21d0859253 | ||
|
|
2b19881f01 | ||
|
|
39375342e0 | ||
|
|
ab94a9fc67 | ||
|
|
ff18e0d6be | ||
|
|
6c1d6225f9 | ||
|
|
99c56ccd6d | ||
|
|
f99aa2b128 | ||
|
|
a43fc39d9a | ||
|
|
6be1fd33cd | ||
|
|
5e9df3a92d | ||
|
|
5c741696fc | ||
|
|
8e30722c1e | ||
|
|
cd48505922 | ||
|
|
24cab65d9c | ||
|
|
dc8acc0da6 | ||
|
|
0297dd9e1f | ||
|
|
e4268148cf | ||
|
|
f226dc7c27 | ||
|
|
b71c5b668f | ||
|
|
30ae651a59 | ||
|
|
d2ee0994c0 | ||
|
|
1e5a8b146c | ||
|
|
6bf9ef0aa5 | ||
|
|
100afca1ca | ||
|
|
9a29cc59a8 | ||
|
|
6c08b9b343 | ||
|
|
48965e05bd | ||
|
|
2c1f32199a | ||
|
|
1e0c585b74 | ||
|
|
0c58aeaa52 | ||
|
|
2cedc19b2a | ||
|
|
9bb554e5bc | ||
|
|
4aab4dcfcf | ||
|
|
d4660d9fe9 | ||
|
|
9a7d4fb402 | ||
|
|
d302316549 | ||
|
|
327db3d07a | ||
|
|
1cba46f3a1 | ||
|
|
54c5d0dfa6 | ||
|
|
ef59ff38f6 | ||
|
|
683113ef78 | ||
|
|
79a7342808 | ||
|
|
eab69bd6d5 | ||
|
|
b1deb45c81 | ||
|
|
5ff73995f2 | ||
|
|
e0f6435d86 | ||
|
|
2565ea1543 | ||
|
|
cb8a9648c9 | ||
|
|
17f7708226 | ||
|
|
166f7f38e4 | ||
|
|
74e861417e | ||
|
|
0487083f37 | ||
|
|
3c6982a942 | ||
|
|
6760a2d143 | ||
|
|
a9fd2cdbf6 | ||
|
|
377412f9f8 | ||
|
|
848f92ef7f | ||
|
|
8bbb210a10 | ||
|
|
401a42f5c4 | ||
|
|
5a99b8f0ed | ||
|
|
346efbfdd8 | ||
|
|
498f0eda22 | ||
|
|
c268432bc3 | ||
|
|
a833688355 | ||
|
|
4917330b79 | ||
|
|
4d91b2085e | ||
|
|
29c69f9f86 | ||
|
|
476429a7db | ||
|
|
2d045d1ae1 | ||
|
|
9bd0c69dac | ||
|
|
b232f7cd49 | ||
|
|
904dfb64aa | ||
|
|
a5ef53f2f5 | ||
|
|
88db4daa62 | ||
|
|
56dde3ff31 | ||
|
|
2da58ff351 | ||
|
|
af48605054 | ||
|
|
66790e3d82 | ||
|
|
2c201a7d6f | ||
|
|
78d2b3e7d2 | ||
|
|
9b60f0c3c6 | ||
|
|
668437a9e5 | ||
|
|
5f30115796 | ||
|
|
5c6e39d2c0 | ||
|
|
6a9d9f212f | ||
|
|
599bd59c6f | ||
|
|
e4dd40bbcc | ||
|
|
325b9258e4 | ||
|
|
8cef6b2074 | ||
|
|
fe00835aa7 | ||
|
|
ad0d2b1f6d | ||
|
|
c27b0c08ed | ||
|
|
c73094615e | ||
|
|
989ea72490 | ||
|
|
d9e1548683 | ||
|
|
e474d49320 | ||
|
|
e4d916c308 | ||
|
|
e30c01c234 | ||
|
|
9ae9c7ad11 | ||
|
|
ea240f117e | ||
|
|
68fb0e7b98 | ||
|
|
9d74f1ecf2 | ||
|
|
2356dbd594 | ||
|
|
7aa48d3426 | ||
|
|
b8b4f6fedf | ||
|
|
25a2801cb1 | ||
|
|
86ef6ae5d1 | ||
|
|
4e99078ac1 | ||
|
|
7de160b64d | ||
|
|
99030a110c | ||
|
|
ee18909935 | ||
|
|
4f621916a7 | ||
|
|
f89f946c40 | ||
|
|
8e34477c96 | ||
|
|
5940e43c85 | ||
|
|
c1c76362e7 | ||
|
|
a034ec9803 | ||
|
|
2da4f5ef03 | ||
|
|
d7386317fc | ||
|
|
851ca592d5 | ||
|
|
9d584ed145 | ||
|
|
ac1c4dc571 | ||
|
|
32505b14e7 | ||
|
|
1bcd76ffe9 | ||
|
|
565cd5c0e8 | ||
|
|
8597b692ee | ||
|
|
e9447a26d9 | ||
|
|
17a602efe8 | ||
|
|
7b1bc522f6 | ||
|
|
64f83f976e | ||
|
|
cb9efa3322 | ||
|
|
28f83ab0d5 | ||
|
|
be13b0149a | ||
|
|
e73c89abc8 | ||
|
|
7a36ecf196 | ||
|
|
33dd90a091 | ||
|
|
c67a4dcc7d | ||
|
|
546551e6e9 | ||
|
|
bd4aee0864 | ||
|
|
06d18b4cbd | ||
|
|
075de78442 | ||
|
|
3cead25acf | ||
|
|
559347f985 | ||
|
|
613679352b | ||
|
|
d6c7682068 | ||
|
|
4cd847fb27 | ||
|
|
58e3556e0e | ||
|
|
500a6dd73b | ||
|
|
7d3571757d | ||
|
|
26ee0d7ae2 | ||
|
|
13f7727fe3 | ||
|
|
8a14b34446 | ||
|
|
6a39fd70e1 | ||
|
|
fff050c71d | ||
|
|
61327620da | ||
|
|
80cc57caa0 | ||
|
|
55f38414d1 | ||
|
|
96da38a8e4 | ||
|
|
25b144e496 | ||
|
|
478f5e34d3 | ||
|
|
47dfa921cd | ||
|
|
c162f57dbd | ||
|
|
92073eda12 | ||
|
|
bb9b36b291 | ||
|
|
8b93d9bf54 | ||
|
|
d7566daacc | ||
|
|
7b8cefbadc | ||
|
|
579ffa5a62 | ||
|
|
c6fa061604 | ||
|
|
fd811b020a | ||
|
|
9ae2ab105b | ||
|
|
1a94a62fe3 | ||
|
|
a13a0df35e | ||
|
|
f6bdd948b1 | ||
|
|
1ceee12fc4 | ||
|
|
dbacfed855 | ||
|
|
3ac21ae9a3 | ||
|
|
7985e93e29 | ||
|
|
4230e816df | ||
|
|
ae3aae9af8 | ||
|
|
67d7a64a51 | ||
|
|
cdc327b777 | ||
|
|
3c9a1d488b | ||
|
|
72d46ba64b | ||
|
|
d9feca5606 | ||
|
|
f29f4294c7 | ||
|
|
db94fcb6b4 | ||
|
|
4945bd79ca | ||
|
|
22d053c9d0 | ||
|
|
6482ae164c | ||
|
|
7900a2e97e | ||
|
|
95993955c5 | ||
|
|
6b48b250a7 | ||
|
|
66ad41f814 | ||
|
|
a36d35d752 | ||
|
|
89d1a9751c | ||
|
|
841c8c22d7 | ||
|
|
cb9d98a819 | ||
|
|
a62bae8c7c | ||
|
|
344a63b956 | ||
|
|
0ea44cfafb | ||
|
|
1948a41949 | ||
|
|
50e928b685 | ||
|
|
7352cd05c5 | ||
|
|
94980c8394 | ||
|
|
ba66a42891 | ||
|
|
1ec1a6cd7d | ||
|
|
58eb6f3c54 | ||
|
|
78e106cff2 | ||
|
|
1cf82a6020 | ||
|
|
7938bd08ae | ||
|
|
20312ffa4b | ||
|
|
539b765e21 | ||
|
|
36edeb2401 | ||
|
|
58af2417e2 | ||
|
|
5fc97e9553 | ||
|
|
3e868a41e9 | ||
|
|
2e7dde73ab | ||
|
|
c72d337f69 | ||
|
|
a8c1b728d2 | ||
|
|
f328a9940b | ||
|
|
1ef5b92910 | ||
|
|
1dd07aeda9 | ||
|
|
1628f60553 | ||
|
|
970f4489d4 | ||
|
|
997cec4b9b | ||
|
|
127b7a15b5 | ||
|
|
bbf310147e | ||
|
|
858240874c | ||
|
|
7bddd8751e | ||
|
|
0540c254d0 | ||
|
|
6caed369d7 | ||
|
|
9da47d84e0 | ||
|
|
6450f9332a | ||
|
|
722564b2da | ||
|
|
a93e180a89 | ||
|
|
8cbc36fd22 | ||
|
|
8d84721882 | ||
|
|
c739c770f7 | ||
|
|
d01961424d | ||
|
|
e114ab3f20 | ||
|
|
ebd185a798 | ||
|
|
eb4e5957cd | ||
|
|
429eb4af83 | ||
|
|
fb88783f9d | ||
|
|
aa2f02b1d2 | ||
|
|
9dfe14fe33 | ||
|
|
71b040cabe | ||
|
|
4a310dc53f | ||
|
|
e7e249d1d3 | ||
|
|
af97275139 | ||
|
|
9ce7470b87 | ||
|
|
8a4b2f9a2e | ||
|
|
823b5c27da | ||
|
|
7e1516bdf5 | ||
|
|
3eb9a50921 | ||
|
|
6ed457d1f7 | ||
|
|
3b076f6f01 | ||
|
|
45551c3c5b | ||
|
|
8c31c8105e | ||
|
|
9ccbc834b5 | ||
|
|
2c409687d5 | ||
|
|
6c51115e14 | ||
|
|
088ee071ca | ||
|
|
c245ba3a5d | ||
|
|
8cf20db7e1 | ||
|
|
8c39685ef6 | ||
|
|
20dfd20416 | ||
|
|
12ca7adcd1 | ||
|
|
a4e8efedc8 | ||
|
|
d86ed5d6ee | ||
|
|
668dc0e7a5 | ||
|
|
f5b454e110 | ||
|
|
aefd5bb251 | ||
|
|
8b8df9e093 | ||
|
|
cdd62b09d3 | ||
|
|
107697dc95 | ||
|
|
cae5030804 | ||
|
|
f073ebe4cd | ||
|
|
5bc3e14eb4 | ||
|
|
6548cc4477 | ||
|
|
e64daa18cf | ||
|
|
4357e529ce | ||
|
|
7becc749aa | ||
|
|
de9b1f6273 | ||
|
|
14a1d06c03 | ||
|
|
f864017cc5 | ||
|
|
0f4ff8b724 | ||
|
|
024f98c2c8 | ||
|
|
1b78f5c882 | ||
|
|
693297ac9e | ||
|
|
ff6677b932 | ||
|
|
aaad577a68 | ||
|
|
b315fcfbdd | ||
|
|
e011ed0b3e | ||
|
|
4b253c80f7 | ||
|
|
9b9872db60 | ||
|
|
7682fb0029 | ||
|
|
fc63061eaf | ||
|
|
43759985f2 | ||
|
|
2eb1f256fb | ||
|
|
49cf31baad | ||
|
|
b97fbde7e2 | ||
|
|
391f9358a6 | ||
|
|
2d99da59c4 | ||
|
|
097d0e67bc | ||
|
|
9da1d5d0ea | ||
|
|
f930a974a5 | ||
|
|
a3b1730719 | ||
|
|
273cfc1013 | ||
|
|
111bac03ab | ||
|
|
a33b4ee99a | ||
|
|
4474236780 | ||
|
|
846d1fef2b | ||
|
|
34a881f917 | ||
|
|
d521932dcb | ||
|
|
b255b6a700 | ||
|
|
9bd092b6ec | ||
|
|
65e3b8d0f7 | ||
|
|
5507db1d18 | ||
|
|
502d4c9e51 | ||
|
|
01430cd618 | ||
|
|
3e1a9abe9b | ||
|
|
63db85b244 | ||
|
|
f2050b6a11 | ||
|
|
6abdf34054 | ||
|
|
091489b503 | ||
|
|
0616e77584 | ||
|
|
6ed64724c0 | ||
|
|
770c088507 | ||
|
|
9af8389616 | ||
|
|
7704175f0d | ||
|
|
27ec5f0f6d | ||
|
|
900fcded9b | ||
|
|
9193e8c29d | ||
|
|
ca2ff001a5 | ||
|
|
f810b5cd06 | ||
|
|
a91165d3e6 | ||
|
|
1e3f29ad98 | ||
|
|
2f0e52abe1 | ||
|
|
95eee5369d | ||
|
|
e69b471134 | ||
|
|
cf77ee1d2a | ||
|
|
ec2a21c766 | ||
|
|
f385efbbfc | ||
|
|
8bf666f56d | ||
|
|
173a87a53e | ||
|
|
45c180368f | ||
|
|
37bfdbbbe0 | ||
|
|
40e169043a | ||
|
|
6eaa06f613 | ||
|
|
d8c5b7f484 | ||
|
|
60cd04c36a | ||
|
|
ede399e95c | ||
|
|
b721661e2c | ||
|
|
4452fcda98 | ||
|
|
37584be044 | ||
|
|
42520a6126 | ||
|
|
987c5cfb9c | ||
|
|
ed98616b83 | ||
|
|
19141460b5 | ||
|
|
d8e00f4f8a | ||
|
|
3bffba945a | ||
|
|
4204d210c1 | ||
|
|
62731aa434 | ||
|
|
7dd8d635bc | ||
|
|
718b129041 | ||
|
|
3aa8bbd629 | ||
|
|
aa2415eeb8 | ||
|
|
89f289b433 | ||
|
|
76e27f0333 | ||
|
|
a35e690a62 | ||
|
|
8a4926515b | ||
|
|
bd5a7dea3a | ||
|
|
6a25c8b675 | ||
|
|
2acd2c294a | ||
|
|
b8c264f173 | ||
|
|
2df9bbeb83 | ||
|
|
7d60e160ab | ||
|
|
7d73f61cd3 | ||
|
|
9de5965dd1 | ||
|
|
b92fe46387 | ||
|
|
da1d362203 | ||
|
|
93e8078a93 | ||
|
|
f5ab02ac20 | ||
|
|
78bb76249e | ||
|
|
405c23f2bd | ||
|
|
aeaf12a7a2 | ||
|
|
85dab3b6ef | ||
|
|
fa018d3e8c | ||
|
|
80d2bf9e8f | ||
|
|
aabe456aa6 | ||
|
|
1848ea5d15 | ||
|
|
ec0306278e | ||
|
|
ecc40c7ea3 | ||
|
|
63fb33d03d | ||
|
|
3cbf2e0138 | ||
|
|
9a1f8fb161 | ||
|
|
a765789c4d | ||
|
|
a0543dfccf | ||
|
|
fb45f221b7 | ||
|
|
633e81848e | ||
|
|
84df69b387 | ||
|
|
86b4987588 | ||
|
|
8c01fa8480 | ||
|
|
ccb74f968b | ||
|
|
56e9b22e1c | ||
|
|
87d2196cde | ||
|
|
fd059da29b | ||
|
|
95080fee69 | ||
|
|
62b9748269 | ||
|
|
7d71521851 | ||
|
|
ac5944ec79 | ||
|
|
1b6973665a | ||
|
|
a0ad88372f | ||
|
|
7a9cf8abb1 | ||
|
|
a146849a58 | ||
|
|
d1b87bd7b7 | ||
|
|
ff9bb2cbd7 | ||
|
|
9b8f002aa8 | ||
|
|
42f2f6b334 | ||
|
|
676e8782ed | ||
|
|
d125ec5230 | ||
|
|
f7d85b41cc | ||
|
|
86f9ba3b34 | ||
|
|
a9de2994bf | ||
|
|
48f2dc074c | ||
|
|
a4bfb46d6d | ||
|
|
55a4cb3274 | ||
|
|
9842d7498b | ||
|
|
4404e145c0 | ||
|
|
6a01abb905 | ||
|
|
8e297cd38e | ||
|
|
9531a7afb7 | ||
|
|
5588357589 | ||
|
|
b74a77ace0 | ||
|
|
7cda485afe | ||
|
|
0cd1243e7a | ||
|
|
1f1d95b689 | ||
|
|
4f51432211 | ||
|
|
2b5397b639 | ||
|
|
964c1ee983 | ||
|
|
a0253efc27 | ||
|
|
111a93ad82 | ||
|
|
c268fa840e | ||
|
|
8b8b689858 | ||
|
|
fae4d8b8bf | ||
|
|
653dc1c518 | ||
|
|
7c67350e15 | ||
|
|
5f8a9dc76c | ||
|
|
0f4774bf60 | ||
|
|
174b5b74ad | ||
|
|
a6d79b20bd | ||
|
|
7031682d6a | ||
|
|
0ddc4ba496 | ||
|
|
05378f53db | ||
|
|
c62e384b47 | ||
|
|
d8a7450f6b | ||
|
|
4cf87c50de | ||
|
|
21d343b3ad | ||
|
|
bfcf834b07 | ||
|
|
8a0b299af7 | ||
|
|
543642eb5f | ||
|
|
bf1e9ddaee | ||
|
|
71351f1a02 | ||
|
|
33c6e56030 | ||
|
|
a0e1416027 | ||
|
|
c79a43f38a | ||
|
|
3630cc2a99 | ||
|
|
309cdc6ab6 | ||
|
|
2b7e327e09 | ||
|
|
db300f06da | ||
|
|
a2b775af42 | ||
|
|
999cbc0739 | ||
|
|
eb9d659361 | ||
|
|
99ce2fa51d | ||
|
|
d3a6e39b4e | ||
|
|
bc00acb5ff | ||
|
|
9a966f6f08 | ||
|
|
34a5766ce3 | ||
|
|
be9ab06116 | ||
|
|
2a4155aefc | ||
|
|
4dde70abdc | ||
|
|
7eeb6a2b95 | ||
|
|
6931c3df5a | ||
|
|
0ad650fb91 | ||
|
|
72135f8fbf | ||
|
|
546522264e | ||
|
|
353f96cb93 | ||
|
|
7a72146e82 | ||
|
|
f3627d4f84 | ||
|
|
d98ed122a6 | ||
|
|
30be9b7959 | ||
|
|
8562afde38 | ||
|
|
09936b37fa | ||
|
|
8051fb86e7 | ||
|
|
c29ae712f3 | ||
|
|
88b0fc5d22 | ||
|
|
889555bb43 | ||
|
|
50194e5923 | ||
|
|
bfecd3beb4 | ||
|
|
74fd7e22d0 | ||
|
|
2b97d9d677 | ||
|
|
546010246c | ||
|
|
f002a662bd | ||
|
|
fde47dfa80 | ||
|
|
f7e8c9be90 | ||
|
|
606e27653f | ||
|
|
28633003d5 | ||
|
|
dcf9e0ae58 | ||
|
|
5b526a52fc | ||
|
|
729a2246c6 | ||
|
|
c8c3381dd6 | ||
|
|
9767b90826 | ||
|
|
68b02c40a7 | ||
|
|
16544a77e2 | ||
|
|
1c6916c68f | ||
|
|
d7b5d6e904 | ||
|
|
fdefff329a | ||
|
|
39bba0b36e | ||
|
|
17e7869150 | ||
|
|
fec6db13fb | ||
|
|
fc512b3231 | ||
|
|
1805f41918 | ||
|
|
7562610c7d | ||
|
|
95d96ce1ab | ||
|
|
16365a5a44 | ||
|
|
f13c77d50d | ||
|
|
245718f236 | ||
|
|
07aace9975 | ||
|
|
244bb25e6a | ||
|
|
2a94bf267b | ||
|
|
b22b366fb1 | ||
|
|
5387bce2d9 | ||
|
|
f2c1cd8a35 | ||
|
|
188694fb29 | ||
|
|
84fba7ff2b | ||
|
|
6c7d34a773 | ||
|
|
61f9ae6e67 | ||
|
|
5a74d5c247 | ||
|
|
bb525a3cf1 | ||
|
|
933a5c0abf | ||
|
|
a2f0962b76 | ||
|
|
73b3c4af40 | ||
|
|
51a50fb571 | ||
|
|
40047f0f8b | ||
|
|
89d96dfee1 | ||
|
|
cac272a247 | ||
|
|
932e8191ad | ||
|
|
63d961afa0 | ||
|
|
7c88cecad4 | ||
|
|
389d677392 | ||
|
|
70b29590b9 | ||
|
|
f7a1f5c095 | ||
|
|
220923071c | ||
|
|
3fb59fd04d | ||
|
|
5667f9cef1 | ||
|
|
b8630b45d7 | ||
|
|
4cb713cebf | ||
|
|
b962221b41 | ||
|
|
1d22f8c897 | ||
|
|
b0a32dfd1b | ||
|
|
1314b3942d | ||
|
|
55b2aba3a8 | ||
|
|
9da11dc8f8 | ||
|
|
1581884c6d | ||
|
|
2b1929fc33 | ||
|
|
6c50e62f32 | ||
|
|
3f0a6a99da | ||
|
|
94b2a6a014 | ||
|
|
ae2b2febe9 | ||
|
|
908f551e0f | ||
|
|
07506f1f53 | ||
|
|
2b624ac485 | ||
|
|
f73dfe0672 | ||
|
|
e3b5024ca3 | ||
|
|
a0c4f1fc1f | ||
|
|
399b3ecfe3 | ||
|
|
29ce25a040 | ||
|
|
8832a9dd58 | ||
|
|
c561a8b900 | ||
|
|
eacb27d70b | ||
|
|
a2359d6994 | ||
|
|
67b4170e43 | ||
|
|
01f5c93585 | ||
|
|
f6306deb0a | ||
|
|
f6a4521e19 | ||
|
|
35dc92fb3f | ||
|
|
eecd262eff | ||
|
|
6fbe8cabde | ||
|
|
dd0d0a3873 | ||
|
|
4a36cbad53 | ||
|
|
3c3e5a962d | ||
|
|
8775a2de1a | ||
|
|
803ef7d9f3 | ||
|
|
d7b1e38cb7 | ||
|
|
e323770f89 | ||
|
|
32f1bc5396 | ||
|
|
9d0f099e86 | ||
|
|
76ad65b715 | ||
|
|
d320203c2c | ||
|
|
30118d1b32 | ||
|
|
88be5083e0 | ||
|
|
2955150dfe | ||
|
|
321c178f9f | ||
|
|
a24b12eece | ||
|
|
8b88cb8867 | ||
|
|
8b879079e4 | ||
|
|
e4a23048ec | ||
|
|
a06166c08b | ||
|
|
b3e9893e9d | ||
|
|
d31ac73066 | ||
|
|
6366aad1e7 | ||
|
|
208d3c13d9 | ||
|
|
e408351ec6 | ||
|
|
66e255a396 | ||
|
|
441272d54b | ||
|
|
3d21132e98 | ||
|
|
51cd991174 | ||
|
|
104b76129d | ||
|
|
4608a382b1 | ||
|
|
1286529c6e | ||
|
|
a00d4ef792 | ||
|
|
d097a34735 | ||
|
|
dda3c721e0 | ||
|
|
715e51b80c | ||
|
|
260b294ee9 | ||
|
|
16242e78ba | ||
|
|
90ea6a5ba4 | ||
|
|
74ebcb472f | ||
|
|
2d147cfd12 | ||
|
|
7fa6b1901a | ||
|
|
1c33159dcd | ||
|
|
4e6f03a2c1 | ||
|
|
89a2dbfb3e | ||
|
|
9001c1079b | ||
|
|
ab2721bc37 | ||
|
|
b4e56c43fc | ||
|
|
80dc4cc3b6 | ||
|
|
f66d764197 | ||
|
|
37db940d1f | ||
|
|
fb5bc6c3e3 | ||
|
|
244fd15d48 | ||
|
|
6d58c8af40 | ||
|
|
bed6254450 | ||
|
|
711a0c12d4 | ||
|
|
be1a9d3d9a | ||
|
|
9ba2d15f86 | ||
|
|
c1dfb46bf0 | ||
|
|
3fd4f519bf | ||
|
|
c2153aa840 | ||
|
|
f8f9aa7b1b | ||
|
|
012d8eabe7 | ||
|
|
9d3c856afd | ||
|
|
65cda8b04e | ||
|
|
da70a18601 | ||
|
|
783cf417a0 | ||
|
|
63867d4abe | ||
|
|
606036a50f | ||
|
|
0606d1a805 | ||
|
|
a86119ddb6 | ||
|
|
f0b260d7dc | ||
|
|
2f95fa0a95 | ||
|
|
cfe7604696 | ||
|
|
8e9d04ae36 | ||
|
|
e0143ed226 | ||
|
|
4894a03bfe | ||
|
|
21799dcf40 | ||
|
|
d520be9e81 | ||
|
|
757e6b8f68 | ||
|
|
f11459faad | ||
|
|
9c73cfa452 | ||
|
|
6495537d44 | ||
|
|
2c34a60a8d | ||
|
|
f188e6ff3d | ||
|
|
aae62398b0 | ||
|
|
d540b6e3fe | ||
|
|
f6f1d2adfc | ||
|
|
dc4f7f6f88 | ||
|
|
b1632958f5 | ||
|
|
0e205b8133 | ||
|
|
6a51ec0f64 | ||
|
|
aa1ffd1aab | ||
|
|
11d396e6ef | ||
|
|
a2ccbcbbfb | ||
|
|
4b2a777425 | ||
|
|
091c1acf15 | ||
|
|
2ed0424860 | ||
|
|
ad4a945941 | ||
|
|
498d52ecdf | ||
|
|
da91841ac6 | ||
|
|
1eb1e1cd94 | ||
|
|
8bca701bc8 | ||
|
|
6cd1b768ff | ||
|
|
e23328b16c | ||
|
|
939feb62eb | ||
|
|
3e466917fd | ||
|
|
650dcd2538 | ||
|
|
518d7f9e56 | ||
|
|
d2f288d3a9 | ||
|
|
09aa97f9e5 | ||
|
|
e57d9dac3b | ||
|
|
5f7543bf46 | ||
|
|
6eee13b67f | ||
|
|
aae2213168 | ||
|
|
daa3b88d91 | ||
|
|
9cfa1b9065 | ||
|
|
200d1128a1 | ||
|
|
06b8d166ca | ||
|
|
76e9ea6cc3 | ||
|
|
6ff55ff16c | ||
|
|
59912d43f1 | ||
|
|
ef7d49bafc | ||
|
|
6af8811912 | ||
|
|
d694a73aed | ||
|
|
8a1f7fb900 | ||
|
|
3c1b85f272 | ||
|
|
cff8e27545 | ||
|
|
75b8953799 | ||
|
|
9b283fd6ec | ||
|
|
8f5eacf516 | ||
|
|
ffbb2f3c42 | ||
|
|
acbd1b8655 | ||
|
|
b6240fcb9a | ||
|
|
23f4bb7983 | ||
|
|
cd633d4427 | ||
|
|
0853850f7a | ||
|
|
db02e2a11a | ||
|
|
a49adef9b0 | ||
|
|
bb9fd8b320 | ||
|
|
4ddbb84367 | ||
|
|
f3f9a11813 | ||
|
|
2a7e2393ad | ||
|
|
fc125d41e8 | ||
|
|
0eab678fcc | ||
|
|
7307b385d8 | ||
|
|
3585ee8612 | ||
|
|
b7fbd9aea0 | ||
|
|
5dbb31cf8a | ||
|
|
26d50b0140 | ||
|
|
c2fc3141a9 | ||
|
|
23c25d01ff | ||
|
|
de832c596a | ||
|
|
237dfe2bbd | ||
|
|
49a07e5210 | ||
|
|
a1983e0131 | ||
|
|
95a7a93cb9 | ||
|
|
455033703a | ||
|
|
0470d493ae | ||
|
|
c2858e5fb3 | ||
|
|
f85775b870 | ||
|
|
d50f3cd151 | ||
|
|
9b887b6262 | ||
|
|
f3cc2310da | ||
|
|
ce26004fc8 | ||
|
|
ff07842dc5 | ||
|
|
c389b213b5 | ||
|
|
e1e7fbcc52 | ||
|
|
84c0988fd8 | ||
|
|
9229e1a9a7 | ||
|
|
5f83476811 | ||
|
|
0bd06e70d5 | ||
|
|
c78bf267a3 | ||
|
|
c8c83703ed | ||
|
|
baac2ceda2 | ||
|
|
d465ceb045 | ||
|
|
8ed0193b1d | ||
|
|
1de54d52ac | ||
|
|
e1b5b1aafc | ||
|
|
344d48e01b | ||
|
|
279c49f084 | ||
|
|
2b64fe4666 | ||
|
|
2d109a20c5 | ||
|
|
804c822ace | ||
|
|
7f5c2caed6 | ||
|
|
85db7c7552 | ||
|
|
de29abdab6 | ||
|
|
c250d170cd | ||
|
|
c48fe4e2a9 | ||
|
|
81c5173f5e | ||
|
|
ac04199963 | ||
|
|
a2985e082b | ||
|
|
8c24483fb7 | ||
|
|
cd3ce7de22 | ||
|
|
e28c75e56a | ||
|
|
f13796fa57 | ||
|
|
49d8cc4902 | ||
|
|
b22b04af8e | ||
|
|
39bf2a2100 | ||
|
|
b50df757db | ||
|
|
aaeae0d9cc | ||
|
|
4f6843104c | ||
|
|
bdd0f50dd9 | ||
|
|
77b3725d5b | ||
|
|
6c19414b7a | ||
|
|
b3f44e3f96 | ||
|
|
f705004975 | ||
|
|
39ba53607a | ||
|
|
d17cb43bd3 | ||
|
|
c8bcd67498 | ||
|
|
dcf34eb4d4 | ||
|
|
5a35c9a76c | ||
|
|
b23e5d1cbb | ||
|
|
a11b46058e | ||
|
|
b3041661b3 | ||
|
|
66833f12a0 | ||
|
|
18d6e1be3b | ||
|
|
6674d7823e | ||
|
|
f3959c38b0 | ||
|
|
8d0fbc0d1b | ||
|
|
9878c0b6fa | ||
|
|
79cc07d71b | ||
|
|
9d5d147a9c | ||
|
|
82475ab70d | ||
|
|
cc2c7be96e | ||
|
|
68e3f93b08 | ||
|
|
9b3d722eec | ||
|
|
994c54f6b1 | ||
|
|
695c0c2edf | ||
|
|
e155461eaa | ||
|
|
99a64e6f86 | ||
|
|
1f09ed3da4 | ||
|
|
8d2f465318 | ||
|
|
c793dca61a | ||
|
|
7d31c4fc1e | ||
|
|
b39039f231 | ||
|
|
56d8003818 | ||
|
|
9177036416 | ||
|
|
c885d23fe4 | ||
|
|
325bbdeda1 | ||
|
|
d079121b32 | ||
|
|
7f2cbed0c2 | ||
|
|
e9f7ef5d6e | ||
|
|
e76bc37988 | ||
|
|
0d15020dac | ||
|
|
8f3e194141 | ||
|
|
4accec2ac9 | ||
|
|
0a9db4174b | ||
|
|
6d3028271e | ||
|
|
7545d837f3 | ||
|
|
51935d4510 | ||
|
|
3adbdd0326 | ||
|
|
3550486070 | ||
|
|
f3dc6198f7 | ||
|
|
f9e636ddb1 | ||
|
|
4e75657638 | ||
|
|
91d2ed8449 | ||
|
|
e47121446d | ||
|
|
309a9740fb | ||
|
|
63d1963f19 | ||
|
|
3fb2ed6462 | ||
|
|
1781536dbe | ||
|
|
64040d1494 | ||
|
|
7d07cf03d4 | ||
|
|
4ce9f210b3 | ||
|
|
5d08b56e3f | ||
|
|
0e631e7254 | ||
|
|
689d1a78a7 | ||
|
|
5d1d0343c0 | ||
|
|
663f66e81a | ||
|
|
425b343340 | ||
|
|
b89b7fa62b | ||
|
|
12cd913130 | ||
|
|
ad5583190c | ||
|
|
e30a253522 | ||
|
|
eef75069e1 | ||
|
|
c372f4c054 | ||
|
|
e680a70d1a | ||
|
|
e653e1ea58 | ||
|
|
2550da65db | ||
|
|
3f9d770a79 | ||
|
|
ef3480703a | ||
|
|
1606276d7e | ||
|
|
a95fb1169a | ||
|
|
359d5ce2fd | ||
|
|
f58f3690c3 | ||
|
|
89b96a06ec | ||
|
|
e391dfbccc | ||
|
|
f80ecaf22a | ||
|
|
b81ec41e93 | ||
|
|
917e26ad82 | ||
|
|
d665dbacb9 | ||
|
|
d617d12c33 | ||
|
|
9010bc8fa4 | ||
|
|
1424df5697 | ||
|
|
0403c70ed4 | ||
|
|
8174faedc9 | ||
|
|
9b4434dd40 | ||
|
|
dfafb7d0c7 | ||
|
|
d7ee5cb7bc | ||
|
|
f36a0df86b | ||
|
|
b6c34cbf95 | ||
|
|
36f087f44a | ||
|
|
2e842da0eb | ||
|
|
bba7ee658e | ||
|
|
a8b4efb3cf | ||
|
|
fc85105a86 | ||
|
|
0048a631c6 | ||
|
|
f4102975f9 | ||
|
|
8df4404d93 | ||
|
|
d88de2b97c | ||
|
|
98616f50dc | ||
|
|
5c396da0df | ||
|
|
8a117aa59f | ||
|
|
d27b9b9705 | ||
|
|
31c5d82775 | ||
|
|
e9a7862a50 | ||
|
|
9878de5526 | ||
|
|
7f08489e9f | ||
|
|
b6cc3a65b5 | ||
|
|
c362d4b9e3 | ||
|
|
643bf8a3a8 | ||
|
|
59597aa10c | ||
|
|
f1860ab83d | ||
|
|
4c64470830 | ||
|
|
dc12388c93 | ||
|
|
5f6b9e2824 | ||
|
|
3005a5c2c6 | ||
|
|
843e2be8eb | ||
|
|
d2ad75daa4 | ||
|
|
f75cf277dd | ||
|
|
c8514d4590 | ||
|
|
50e35dd481 | ||
|
|
b1d985df19 | ||
|
|
89b24bef19 | ||
|
|
8b21b5dc13 | ||
|
|
5dfad4a89b | ||
|
|
d46221a4f5 | ||
|
|
18934c1b5b | ||
|
|
8a2f82efbf | ||
|
|
680db39ba9 | ||
|
|
e7e43141d6 | ||
|
|
19f66f69ee | ||
|
|
4c1cc38338 | ||
|
|
75b06bb02e | ||
|
|
fb5e5de6a3 | ||
|
|
01a6a5719e | ||
|
|
07e94de205 | ||
|
|
81523b3bd0 | ||
|
|
3a8f227355 | ||
|
|
85f785c93c | ||
|
|
2c8678ebd0 | ||
|
|
ee853a5b35 | ||
|
|
fe19ef15bc | ||
|
|
a7ec8dbd05 | ||
|
|
b776d4cfef | ||
|
|
629ed5cca6 | ||
|
|
4c002030d5 | ||
|
|
bd0377570d | ||
|
|
e0a89609ed | ||
|
|
92e9ab84ac | ||
|
|
40e869fe00 | ||
|
|
717ac8703b | ||
|
|
474ea3c9b3 | ||
|
|
781b8e9009 | ||
|
|
6b01da6dda | ||
|
|
b49cceefd7 | ||
|
|
c941a64eba | ||
|
|
03dee47d69 | ||
|
|
4512f76dd8 | ||
|
|
3ff11e0b9f | ||
|
|
a79834739e | ||
|
|
f8c9d9b823 | ||
|
|
9ace6cfec5 | ||
|
|
9e0f8dc7d1 | ||
|
|
7978aa9011 | ||
|
|
be1dc623db | ||
|
|
895b4d2c6a | ||
|
|
5e9c88ca63 | ||
|
|
e345cb6b93 | ||
|
|
8f2db587f2 | ||
|
|
80a2018c1f | ||
|
|
f25fabeae5 | ||
|
|
a8be09a866 | ||
|
|
616c3a6c50 | ||
|
|
b43422f544 | ||
|
|
dce98529d3 | ||
|
|
ec893fe330 | ||
|
|
c7820c0cf2 | ||
|
|
d11b976de3 | ||
|
|
fa033a2589 | ||
|
|
02d63b9d8d | ||
|
|
1aee4fdde8 | ||
|
|
92ec4462be | ||
|
|
2282b48ff1 | ||
|
|
9b9e983d2c | ||
|
|
0f14e9652f | ||
|
|
5bb62c0430 | ||
|
|
fd44635e74 | ||
|
|
7c76de93a0 | ||
|
|
3e18d9aff9 | ||
|
|
d71554e647 | ||
|
|
f914e6207b | ||
|
|
d3c218f95e | ||
|
|
70511c340d | ||
|
|
467264d31f | ||
|
|
1e543afb78 | ||
|
|
b9ecb32d3f | ||
|
|
bf1349bec8 | ||
|
|
28450eb4f3 | ||
|
|
068810ad36 | ||
|
|
7a0161dd86 | ||
|
|
b6c4a750de | ||
|
|
6e7ca94d84 | ||
|
|
9efa8beb81 | ||
|
|
e07ae7ad6a | ||
|
|
f84c2bf6d8 | ||
|
|
89dd783924 | ||
|
|
943e9b387c | ||
|
|
de6ccf4ce2 | ||
|
|
4dd4d7c567 | ||
|
|
a1d8cc23b9 | ||
|
|
1975384292 | ||
|
|
c1e9630052 | ||
|
|
ab8eb5a727 | ||
|
|
4ad955adcb | ||
|
|
c8b8b9bb93 | ||
|
|
1ebfedcfb5 | ||
|
|
7443a2f49e | ||
|
|
27a2478a33 | ||
|
|
1c53250211 | ||
|
|
30aa89ce8a | ||
|
|
ebe4af70dc | ||
|
|
433ced0f26 | ||
|
|
95388b07bb | ||
|
|
1e479c63bd | ||
|
|
1be4b94226 | ||
|
|
64b57359b5 | ||
|
|
39aedd158b | ||
|
|
c62ac4bcc3 | ||
|
|
964a84dc31 | ||
|
|
170f44f3d7 | ||
|
|
1b84527f8c | ||
|
|
72a1b76b63 | ||
|
|
cca49230d9 | ||
|
|
9ea0a8fe8b | ||
|
|
63d8994243 | ||
|
|
c929edfbe5 | ||
|
|
cadba248b6 | ||
|
|
872fbc130e | ||
|
|
5fdd69a657 | ||
|
|
e8fb585fa8 | ||
|
|
4bcc9ac05d | ||
|
|
8095df79f6 | ||
|
|
d6341e9ab7 | ||
|
|
30631692a5 | ||
|
|
bef51a1c6b | ||
|
|
424f9f1e5b | ||
|
|
18d234a925 | ||
|
|
e873f27eac | ||
|
|
aaa7a4ecb0 | ||
|
|
cd3af6b961 | ||
|
|
525e6f503d | ||
|
|
92497cf095 | ||
|
|
c9bca838f0 | ||
|
|
b3ddcbed53 | ||
|
|
aaae9adac3 | ||
|
|
ce23cf6ce6 | ||
|
|
ad72a137e1 | ||
|
|
37b8ccbe9d | ||
|
|
fcfc02be52 | ||
|
|
e2d138f55e | ||
|
|
2a4cbc7bee | ||
|
|
6d70751cfc | ||
|
|
5d8359c12e | ||
|
|
6c914173cb | ||
|
|
c21aea00ad | ||
|
|
7a545759f2 | ||
|
|
ac75c726ad | ||
|
|
48c6460b45 | ||
|
|
dc6e1ea987 | ||
|
|
2ba9809a7f | ||
|
|
1c48c9c1e9 | ||
|
|
0ef3f71d8d | ||
|
|
cfe2663f61 | ||
|
|
ce2c1e3f1d | ||
|
|
7eb8da5302 | ||
|
|
d3cdef44d9 | ||
|
|
59c8be210b | ||
|
|
8b357b2805 | ||
|
|
51e8b540cc | ||
|
|
01525e3164 | ||
|
|
9bc7f459ef | ||
|
|
2123917e9b | ||
|
|
a7c0020ceb | ||
|
|
299d530959 | ||
|
|
1b5756ca54 | ||
|
|
9e98fe11e0 | ||
|
|
b2949d2199 | ||
|
|
ff6de12196 | ||
|
|
b4b4e266b2 | ||
|
|
c4766b7f8d | ||
|
|
88bd50abaf | ||
|
|
39f09740b7 | ||
|
|
dca4e87d31 | ||
|
|
1265463dcf | ||
|
|
b71f6f4660 | ||
|
|
56e7c09733 | ||
|
|
34c5b53857 | ||
|
|
ad9d331257 | ||
|
|
a26602f3f2 | ||
|
|
5fa167c408 | ||
|
|
5f17720d3f | ||
|
|
1de092d84e | ||
|
|
ba82b544f0 | ||
|
|
d0c0ffc19c | ||
|
|
342e9aa95b | ||
|
|
7a1c080051 | ||
|
|
d50db13065 | ||
|
|
3c894fd130 | ||
|
|
515afa8d62 | ||
|
|
adfc3a8101 | ||
|
|
95161a2a9f | ||
|
|
76cf4d2969 | ||
|
|
71ebf1e476 | ||
|
|
1371056b20 | ||
|
|
148d563b82 | ||
|
|
db4e847e8d | ||
|
|
d37e64d3d6 | ||
|
|
f2e153744c | ||
|
|
5cb62b168f | ||
|
|
8ea5cfa2aa | ||
|
|
5378337456 | ||
|
|
983e0910b1 | ||
|
|
aec138ef32 | ||
|
|
f9da2d5c25 | ||
|
|
a983456030 | ||
|
|
0904c3d458 | ||
|
|
9eb30d9e33 | ||
|
|
74e1bf9f46 | ||
|
|
5f7c4426b7 | ||
|
|
ccb9e4a571 | ||
|
|
9c37069a6a | ||
|
|
433db65635 | ||
|
|
14acb8af1a | ||
|
|
880c4d11a0 | ||
|
|
495b1d2ba0 | ||
|
|
2f16b06a76 | ||
|
|
8be5c874ec | ||
|
|
d696013fe2 | ||
|
|
d8828c2d25 | ||
|
|
1c8722c763 | ||
|
|
5be7641f87 | ||
|
|
04a4da7fc5 | ||
|
|
03165ee3f8 | ||
|
|
a701b5d29a | ||
|
|
06b2347486 | ||
|
|
7db481fe36 | ||
|
|
e2954fee1e | ||
|
|
934f18c268 | ||
|
|
646fd467ab | ||
|
|
7b5ea80ea4 | ||
|
|
a62f914646 | ||
|
|
b01d371c46 | ||
|
|
59a80f7857 | ||
|
|
c32bf8f035 | ||
|
|
99f1f1b6d3 | ||
|
|
e08f02aca7 | ||
|
|
fa5fe2efd6 | ||
|
|
7979751d71 | ||
|
|
4e0fed18a6 | ||
|
|
5605863c79 | ||
|
|
e7c035e207 | ||
|
|
ae2e0bc57c | ||
|
|
3580e16733 | ||
|
|
cddc4afcea | ||
|
|
5d5c575251 | ||
|
|
d4c122c277 | ||
|
|
66ad7d0985 | ||
|
|
cc66905c6e | ||
|
|
12f97ee18e | ||
|
|
14f228b1b5 | ||
|
|
60c0f56724 | ||
|
|
afe65a86fb | ||
|
|
6566be04e5 | ||
|
|
2de2151f58 | ||
|
|
c2626bf934 | ||
|
|
b2cc353166 | ||
|
|
770139d2ca | ||
|
|
2bcb9caaf7 | ||
|
|
9055f90dcc | ||
|
|
b687e3297d | ||
|
|
3a3550e667 | ||
|
|
28288f70ed | ||
|
|
7d28f751b7 | ||
|
|
9637884861 | ||
|
|
d5df6a4190 | ||
|
|
32a8c0307f | ||
|
|
1372c426ef | ||
|
|
84fff1c2e2 | ||
|
|
5a51246007 | ||
|
|
712e1cada7 | ||
|
|
0f1faf06a2 | ||
|
|
cd23310042 | ||
|
|
ebfcece620 | ||
|
|
b6ef5af3d1 | ||
|
|
bd0803cf29 | ||
|
|
a1e747f4ad | ||
|
|
f3e0c63f68 | ||
|
|
771eaa33ee | ||
|
|
eccdc04268 | ||
|
|
606352b6ed | ||
|
|
e349d38581 | ||
|
|
09ee1def8f | ||
|
|
4f25392d9b | ||
|
|
4c05fbc020 | ||
|
|
4021b19dfc | ||
|
|
1622fc3673 | ||
|
|
461e79386a | ||
|
|
183edc9839 | ||
|
|
0a1cd5d9a5 | ||
|
|
a93ff02d50 | ||
|
|
a95166c381 | ||
|
|
1a8ac56673 | ||
|
|
c589e8e267 | ||
|
|
66c7f8f056 | ||
|
|
2980731db5 | ||
|
|
ef6f58a96c | ||
|
|
c750f5a768 | ||
|
|
c1a0e0ce68 | ||
|
|
dc5f34534b | ||
|
|
14e72ea337 |
14
.circleci/config.yml
Normal file
14
.circleci/config.yml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
version: 2.1
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
noop:
|
||||||
|
docker:
|
||||||
|
- image: cimg/base:2020.01
|
||||||
|
steps:
|
||||||
|
- run: echo "this is a noop"
|
||||||
|
|
||||||
|
workflows:
|
||||||
|
noop:
|
||||||
|
jobs:
|
||||||
|
- noop
|
||||||
10
.codacy.yml
Normal file
10
.codacy.yml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
engines:
|
||||||
|
duplication:
|
||||||
|
exclude_paths:
|
||||||
|
- "*"
|
||||||
|
exclude_paths:
|
||||||
|
- vendor/**/*
|
||||||
|
- tests/**/*
|
||||||
|
- "**_test.go"
|
||||||
|
- contrib/*
|
||||||
26
.devcontainer/Dockerfile
Normal file
26
.devcontainer/Dockerfile
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
FROM dokku/dokku:latest
|
||||||
|
|
||||||
|
RUN apt-get update
|
||||||
|
RUN apt-get install --no-install-recommends -y build-essential file nano && \
|
||||||
|
apt-get install --no-install-recommends -y help2man shellcheck uuid-runtime wget xmlstarlet && \
|
||||||
|
apt-get clean autoclean && \
|
||||||
|
apt-get autoremove --yes && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
RUN wget https://dl.google.com/go/go1.16.10.linux-amd64.tar.gz && \
|
||||||
|
tar -xvf go1.16.10.linux-amd64.tar.gz && \
|
||||||
|
mv go /usr/local
|
||||||
|
|
||||||
|
RUN GOROOT=/usr/local/go /usr/local/go/bin/go install golang.org/x/tools/gopls@latest 2>&1
|
||||||
|
|
||||||
|
ADD https://raw.githubusercontent.com/dokku/dokku/master/tests/dhparam.pem /mnt/dokku/etc/nginx/dhparam.pem
|
||||||
|
|
||||||
|
COPY .devcontainer/bin/ /usr/local/bin/
|
||||||
|
COPY ["tests.mk", "Makefile"]
|
||||||
|
RUN make ci-dependencies
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
ENV DOKKU_HOSTNAME=dokku.me GOROOT=/usr/local/go PATH=/usr/local/go/bin:/root/go/bin:$PATH PLUGIN_MAKE_TARGET=build
|
||||||
|
|
||||||
|
LABEL org.label-schema.schema-version=1.0 org.label-schema.vendor=dokku com.dokku.devcontainer=true
|
||||||
9
.devcontainer/bin/copy-plugin
Executable file
9
.devcontainer/bin/copy-plugin
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
main() {
|
||||||
|
declare PLUGIN_NAME="$1"
|
||||||
|
|
||||||
|
make go-build-plugin copyplugin PLUGIN_NAME=$PLUGIN_NAME PLUGIN_MAKE_TARGET=build
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
25
.devcontainer/devcontainer.json
Normal file
25
.devcontainer/devcontainer.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"build": {
|
||||||
|
"dockerfile": "Dockerfile",
|
||||||
|
"context": ".."
|
||||||
|
},
|
||||||
|
"containerEnv": {
|
||||||
|
"DOKKU_HOST_ROOT": "${localWorkspaceFolder}/tmp/data/home/dokku",
|
||||||
|
"GO_ROOT_MOUNT": "${localWorkspaceFolder}:/go/src/github.com/dokku/dokku"
|
||||||
|
},
|
||||||
|
"extensions": [
|
||||||
|
"golang.go",
|
||||||
|
"mads-hartmann.bash-ide-vscode",
|
||||||
|
"ms-vscode.makefile-tools"
|
||||||
|
],
|
||||||
|
"initializeCommand": ["mkdir", "-p", "tmp/data"],
|
||||||
|
"mounts": [
|
||||||
|
"source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind",
|
||||||
|
"source=${localWorkspaceFolder}/tmp/data/,target=/mnt/dokku/,type=bind"
|
||||||
|
],
|
||||||
|
"overrideCommand": false,
|
||||||
|
"postCreateCommand": "make setup-deploy-tests",
|
||||||
|
"runArgs": ["--init"],
|
||||||
|
"workspaceFolder": "/root/go/src/github.com/dokku/dokku",
|
||||||
|
"workspaceMount": "type=bind,source=${localWorkspaceFolder},target=/root/go/src/github.com/dokku/dokku,consistency=cached"
|
||||||
|
}
|
||||||
13
.dockerignore
Normal file
13
.dockerignore
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
*Dockerfile
|
||||||
|
.dockerignore
|
||||||
|
.git
|
||||||
|
.vagrant
|
||||||
|
contrib
|
||||||
|
build
|
||||||
|
docs
|
||||||
|
tests
|
||||||
|
!build/package/*
|
||||||
|
!tests/dhparam.pem
|
||||||
|
!contrib/bash-completion
|
||||||
|
!contrib/docker
|
||||||
|
vendor
|
||||||
@@ -14,3 +14,8 @@ indent_size = 4
|
|||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
indent_style = tab
|
indent_style = tab
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
|
|
||||||
|
[*.{go,mod}]
|
||||||
|
insert_final_newline = true
|
||||||
|
indent_style = tab
|
||||||
|
indent_size = 4
|
||||||
|
|||||||
66
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
Normal file
66
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
---
|
||||||
|
name: Bug Report
|
||||||
|
description: File a bug report
|
||||||
|
labels: ["needs: investigation", "type: bug"]
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Consider [sponsoring Dokku](https://github.com/sponsors/dokku). Sponsorship goes directly to supporting activities such as fixing bugs and general maintenance.
|
||||||
|
- type: textarea
|
||||||
|
id: description
|
||||||
|
attributes:
|
||||||
|
label: Description of problem
|
||||||
|
description: What happened? What did you expect to happen?
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: steps
|
||||||
|
attributes:
|
||||||
|
label: Steps to reproduce
|
||||||
|
description: What are the steps that we need to follow to reproduce this issue?
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: report-output
|
||||||
|
attributes:
|
||||||
|
label: dokku report $APP_NAME
|
||||||
|
description: Please paste the output of the command `dokku report $APP_NAME`, where `$APP_NAME` is the name of your app
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: additional-output
|
||||||
|
attributes:
|
||||||
|
label: Additional information
|
||||||
|
description: |
|
||||||
|
This information is useful for debugging app issues:
|
||||||
|
|
||||||
|
- Container Inspect Output (if applicable) via `dokku ps:inspect APP_NAME`
|
||||||
|
- The nginx configuration (if applicable) via `dokku nginx:show-config APP_NAME`
|
||||||
|
- Link to the exact repository being deployed (if possible/applicable)
|
||||||
|
|
||||||
|
If a deploy is failing or behaving unexpectedly:
|
||||||
|
|
||||||
|
- Application name
|
||||||
|
- The type of application being deployed (node, php, python, ruby, etc.)
|
||||||
|
- If using buildpacks, which custom buildpacks are in use
|
||||||
|
- If using a Dockerfile, the contents of that file
|
||||||
|
- If it exists, the contents of your Procfile.
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
- type: textarea
|
||||||
|
id: logs
|
||||||
|
attributes:
|
||||||
|
label: "Output of failing commands after running: dokku trace:off"
|
||||||
|
render: shell
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
- type: textarea
|
||||||
|
id: trace-logs
|
||||||
|
attributes:
|
||||||
|
label: "Output of failing commands after running: dokku trace:on"
|
||||||
|
description: |
|
||||||
|
**BEWARE**: `dokku trace:on` will cause some commands to print environment variables, be sure you're not exposing any sensitive information when posting issues. You may replace these values with XXXXXX
|
||||||
|
render: shell
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
71
.github/ISSUE_TEMPLATE/buildpack_issue.yaml
vendored
Normal file
71
.github/ISSUE_TEMPLATE/buildpack_issue.yaml
vendored
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
---
|
||||||
|
name: Buildpack Issue
|
||||||
|
description: Is your deploy failing while building your application using buildpacks? Check this out.
|
||||||
|
labels: ["upstream: buildpacks"]
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
If your build is stuck downloading something, compiling a file, or seems to always fail around the same area, Github Issues is not a great place to debug. This is because these sorts of issues tend to take a lot of back and forth to figure out, and the code for buildpacks is not generally maintained by the Dokku project.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Debugging tips:</summary>
|
||||||
|
|
||||||
|
- If you see text that says `Killed` in your output, attempt to increase free memory by using a larger server or [add swap memory](https://dokku.com/docs/getting-started/troubleshooting/#build-fails-with-killed-message).
|
||||||
|
- Turn on buildpack trace mode via `dokku config:set $APP_NAME BUILDPACK_XTRACE=1` and retry your deploy. Not all buildpacks support this, but many will output extra debugging information.
|
||||||
|
- Your hosting provider may have issues accessing AWS S3. Verify a slow/stalled download works by directly curling the file from your host.
|
||||||
|
- Many buildpacks allow downloading a file from an alternative location specified via environment variable.
|
||||||
|
- [Increase curl timeouts](https://dokku.com/docs/getting-started/troubleshooting/#deployment-fails-because-of-slow-internet-connection-messages-s) if you see gzip download issues.
|
||||||
|
- If using multi-buildpack support but a buildpack is failing to apply, ensure you have any files necessary for the `bin/detect` script of the buildpack to `exit 0`. Selected buildpacks must still pass the detection phase in order to be used.
|
||||||
|
</details>
|
||||||
|
|
||||||
|
If you are still having issues, file a ticket here and then further discussing the ticket in one of our [Monitored Support Channels](https://dokku.com/docs/getting-started/where-to-get-help/#monitored-locations) (Discord, Github Discussions, Slack). Your filed ticket may be closed or locked, but any subsequent discovery will be posted to the ticket for posterity.
|
||||||
|
- type: textarea
|
||||||
|
id: description
|
||||||
|
attributes:
|
||||||
|
label: Description of problem
|
||||||
|
description: What happened? What did you expect to happen?
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: report-output
|
||||||
|
attributes:
|
||||||
|
label: dokku report $APP_NAME
|
||||||
|
description: Please paste the output of the command `dokku report $APP_NAME`, where `$APP_NAME` is the name of your app.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: additional-output
|
||||||
|
attributes:
|
||||||
|
label: Additional information
|
||||||
|
description: |
|
||||||
|
This information is useful for debugging app issues:
|
||||||
|
|
||||||
|
- Container Inspect Output (if applicable) via `dokku ps:inspect APP_NAME`
|
||||||
|
- The nginx configuration (if applicable) via `dokku nginx:show-config APP_NAME`
|
||||||
|
- Link to the exact repository being deployed (if possible/applicable)
|
||||||
|
|
||||||
|
If a deploy is failing or behaving unexpectedly:
|
||||||
|
|
||||||
|
- Application name
|
||||||
|
- The type of application being deployed (node, php, python, ruby, etc.)
|
||||||
|
- If using buildpacks, which custom buildpacks are in use
|
||||||
|
- If it exists, the contents of your Procfile.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: logs
|
||||||
|
attributes:
|
||||||
|
label: "Output of failing deploy after running: dokku trace:off"
|
||||||
|
render: shell
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: trace-logs
|
||||||
|
attributes:
|
||||||
|
label: "Output of failing deploy after running: dokku trace:on"
|
||||||
|
description: |
|
||||||
|
**BEWARE**: `dokku trace:on` will cause some commands to print environment variables, be sure you're not exposing any sensitive information when posting issues. You may replace these values with XXXXXX
|
||||||
|
render: shell
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
18
.github/ISSUE_TEMPLATE/feature_request.yaml
vendored
Normal file
18
.github/ISSUE_TEMPLATE/feature_request.yaml
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
name: Feature Request
|
||||||
|
description: Have an idea for a new feature? Ask away!
|
||||||
|
labels: ["needs: plan", "type: enhancement"]
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
While pull requests are always welcome, feel free to fill this out with an idea of what you would like to happen and we can discuss if and how it should be implemented in Dokku.
|
||||||
|
|
||||||
|
Consider [sponsoring Dokku](https://github.com/sponsors/dokku). Sponsorship goes directly to supporting activities such as implementing new features and upgrading existing functionality.
|
||||||
|
- type: textarea
|
||||||
|
id: description
|
||||||
|
attributes:
|
||||||
|
label: Description of feature
|
||||||
|
description: When you perform what command or action, what do you think should happen?
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
51
.github/commands/bump-azure
vendored
Executable file
51
.github/commands/bump-azure
vendored
Executable file
@@ -0,0 +1,51 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
main() {
|
||||||
|
declare VERSION="$1" BOT_GITHUB_USERNAME="$2" BOT_GITHUB_API_TOKEN="$3"
|
||||||
|
local GH_VERSION=1.6.1
|
||||||
|
local DATE_UPDATED="$(date +"%Y-%m-%d")"
|
||||||
|
local GH_FOLDER="gh_${GH_VERSION}_linux_amd64"
|
||||||
|
|
||||||
|
echo "=====> Downloading gh"
|
||||||
|
wget -O gh.tar.gz "https://github.com/cli/cli/releases/download/v${GH_VERSION}/${GH_FOLDER}.tar.gz"
|
||||||
|
mkdir -p tmp
|
||||||
|
tar xzf gh.tar.gz -C tmp
|
||||||
|
if [[ ! -f tmp/$GH_FOLDER/bin/gh ]]; then
|
||||||
|
echo "Failed to extract gh"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd tmp
|
||||||
|
|
||||||
|
$GH_FOLDER/bin/gh auth login --with-token <<<"$BOT_GITHUB_API_TOKEN"
|
||||||
|
|
||||||
|
echo "=====> Cloning quickstart templates"
|
||||||
|
rm -rf azure-quickstart-templates >/dev/null
|
||||||
|
git clone https://github.com/Azure/azure-quickstart-templates.git azure-quickstart-templates
|
||||||
|
|
||||||
|
pushd azure-quickstart-templates >/dev/null
|
||||||
|
|
||||||
|
echo "=====> Updating values"
|
||||||
|
contents="$(jq '.githubUsername = "dokku"' application-workloads/dokku/dokku-vm/metadata.json)"
|
||||||
|
echo "${contents}" >application-workloads/dokku/dokku-vm/metadata.json
|
||||||
|
contents="$(jq --arg DATE_UPDATED "$DATE_UPDATED" '.dateUpdated = $DATE_UPDATED' application-workloads/dokku/dokku-vm/metadata.json)"
|
||||||
|
echo "${contents}" >application-workloads/dokku/dokku-vm/metadata.json
|
||||||
|
|
||||||
|
contents="$(jq --arg VERSION "$VERSION" '.parameters.dokkuVersion.defaultValue = $VERSION' application-workloads/dokku/dokku-vm/azuredeploy.json)"
|
||||||
|
echo "${contents}" >application-workloads/dokku/dokku-vm/azuredeploy.json
|
||||||
|
|
||||||
|
echo "=====> Updating remote repository"
|
||||||
|
git add application-workloads/dokku/dokku-vm
|
||||||
|
git checkout -b dokku-$VERSION
|
||||||
|
git commit -m "Update dokku-vm dokku version to $VERSION"
|
||||||
|
git remote set-url origin "https://$BOT_GITHUB_USERNAME:$BOT_GITHUB_API_TOKEN@github.com/dokku/azure-quickstart-templates.git"
|
||||||
|
git push -f origin dokku-$VERSION
|
||||||
|
|
||||||
|
echo "=====> Creating upstream pull request"
|
||||||
|
../$GH_FOLDER/bin/gh pr create --head dokku:dokku-$VERSION --repo Azure/azure-quickstart-templates --title "Update dokku-vm dokku version to $VERSION" --body ''
|
||||||
|
|
||||||
|
popd &>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
15
.github/commands/ci-run
vendored
Executable file
15
.github/commands/ci-run
vendored
Executable file
@@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
main() {
|
||||||
|
declare FILE_NAME="$1"
|
||||||
|
|
||||||
|
mkdir -p test-results/bats
|
||||||
|
pushd tests/unit >/dev/null
|
||||||
|
bats --report-formatter junit --output ../../test-results/bats "$FILE_NAME.bats"
|
||||||
|
popd &>/dev/null
|
||||||
|
|
||||||
|
ls -lah test-results/bats
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
29
.github/commands/ci-setup
vendored
Executable file
29
.github/commands/ci-setup
vendored
Executable file
@@ -0,0 +1,29 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -eo pipefail
|
||||||
|
set -x
|
||||||
|
|
||||||
|
echo "=====> set hostname"
|
||||||
|
hostname
|
||||||
|
internal_ip="$(ifconfig eth0 | grep 'inet ' | awk '{print $2}')"
|
||||||
|
sudo hostname "dokku.me"
|
||||||
|
echo "dokku.me" | sudo tee /etc/hostname
|
||||||
|
hostname
|
||||||
|
sudo cat /etc/hostname
|
||||||
|
|
||||||
|
echo "=====> resolve dokku.me"
|
||||||
|
sudo apt -qq -y --no-install-recommends install net-tools
|
||||||
|
# dokku.me now resolves to 10.0.0.2. add 10.0.0.2/24 to eth0
|
||||||
|
ifconfig
|
||||||
|
sudo ip addr add 10.0.0.2/24 broadcast 10.0.0.255 dev eth0
|
||||||
|
|
||||||
|
echo "=====> install ci-dependencies"
|
||||||
|
make ci-dependencies
|
||||||
|
|
||||||
|
echo "=====> setup tests"
|
||||||
|
./tests/ci/setup.sh
|
||||||
|
|
||||||
|
echo "=====> dokku cleanup:skip"
|
||||||
|
echo 'export DOKKU_SKIP_CLEANUP=true' | sudo tee /home/dokku/.dokkurc/dokku_skip_cleanup
|
||||||
|
|
||||||
|
echo "=====> dokku report"
|
||||||
|
dokku report
|
||||||
9
.github/commands/matrix
vendored
Executable file
9
.github/commands/matrix
vendored
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
|
||||||
|
keys = ["index"]
|
||||||
|
values = [[s.replace(".bats", "") for s in os.listdir("tests/unit/") if s.endswith(".bats")]]
|
||||||
|
zi = zip(keys, values)
|
||||||
|
data = json.dumps(dict(zi))
|
||||||
|
print(data.replace(" ", ""))
|
||||||
112
.github/dependabot.yml
vendored
Normal file
112
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
---
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: bundler
|
||||||
|
directory: "/tests/apps/ruby"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
- package-ecosystem: bundler
|
||||||
|
directory: "/tests/apps/multi"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: "/tests/apps/checks-root"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: "/tests/apps/config"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: "/tests/apps/dockerfile-dokku-scale"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: "/tests/apps/dockerfile-noexpose"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: "/tests/apps/dockerfile-procfile-bad"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: "/tests/apps/dockerfile-procfile"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: "/tests/apps/dockerfile"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: "/tests/apps/gitsubmodules"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
- package-ecosystem: gomod
|
||||||
|
directory: "/tests/apps/gogrpc"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
ignore:
|
||||||
|
- dependency-name: google.golang.org/grpc
|
||||||
|
versions:
|
||||||
|
- "> 1.29.1"
|
||||||
|
- package-ecosystem: pip
|
||||||
|
directory: "/tests/apps/multi"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
- package-ecosystem: maven
|
||||||
|
directory: "/tests/apps/java"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: "/tests/apps/nodejs-express"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: "/tests/apps/nodejs-worker"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: "/tests/apps/nodejs-express-noappjson"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: "/tests/apps/nodejs-express-noprocfile"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
- package-ecosystem: composer
|
||||||
|
directory: "/tests/apps/php"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
- package-ecosystem: pip
|
||||||
|
directory: "/tests/apps/python-flask"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: "/tests/apps/.websocket.disabled"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
- package-ecosystem: github-actions
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
10
.github/linters/.markdown-lint.yml
vendored
Normal file
10
.github/linters/.markdown-lint.yml
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
default: true
|
||||||
|
|
||||||
|
# Line length
|
||||||
|
# https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md013
|
||||||
|
MD013: false
|
||||||
|
|
||||||
|
# Inline HTML
|
||||||
|
# https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md033
|
||||||
|
MD033: false
|
||||||
5
.github/linters/.yamllint.yml
vendored
Normal file
5
.github/linters/.yamllint.yml
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
extends: default
|
||||||
|
|
||||||
|
rules:
|
||||||
|
line-length: disable
|
||||||
171
.github/workflows/ci.yml
vendored
Normal file
171
.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
---
|
||||||
|
name: CI
|
||||||
|
|
||||||
|
# yamllint disable-line rule:truthy
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- '*'
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- 'master'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: build
|
||||||
|
runs-on: ubuntu-18.04
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: true
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: set up qemu
|
||||||
|
uses: docker/setup-qemu-action@v1
|
||||||
|
|
||||||
|
- name: set up docker buildx
|
||||||
|
id: buildx
|
||||||
|
uses: docker/setup-buildx-action@v1
|
||||||
|
|
||||||
|
- name: build package
|
||||||
|
run: ./tests/ci/setup.sh build
|
||||||
|
|
||||||
|
- name: set matrix for build
|
||||||
|
id: set-matrix
|
||||||
|
run: |
|
||||||
|
json=$(python .github/commands/matrix)
|
||||||
|
echo $json
|
||||||
|
echo "::set-output name=matrix::$(echo "$json")"
|
||||||
|
|
||||||
|
- name: upload packages
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: build
|
||||||
|
path: build
|
||||||
|
|
||||||
|
unit-tests:
|
||||||
|
name: unit.${{ matrix.index }}
|
||||||
|
needs: build
|
||||||
|
runs-on: ubuntu-18.04
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix: ${{fromJson(needs.build.outputs.matrix)}}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: download packages
|
||||||
|
uses: actions/download-artifact@v1
|
||||||
|
with:
|
||||||
|
name: build
|
||||||
|
|
||||||
|
- name: ci-setup
|
||||||
|
run: ./.github/commands/ci-setup
|
||||||
|
|
||||||
|
# - name: start ssh session
|
||||||
|
# uses: luchihoratiu/debug-via-ssh@main
|
||||||
|
# with:
|
||||||
|
# NGROK_AUTH_TOKEN: ${{ secrets.NGROK_AUTH_TOKEN }}
|
||||||
|
# SSH_PASS: ${{ secrets.SSH_PASS }}
|
||||||
|
|
||||||
|
- name: run ci
|
||||||
|
timeout-minutes: 30
|
||||||
|
run: sudo -E ./.github/commands/ci-run ${{ matrix.index }}
|
||||||
|
env:
|
||||||
|
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
SYNC_GITHUB_PASSWORD: ${{ secrets.SYNC_GITHUB_PASSWORD }}
|
||||||
|
SYNC_GITHUB_USERNAME: ${{ secrets.SYNC_GITHUB_USERNAME }}
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: test-results-${{ matrix.index }}
|
||||||
|
path: test-results
|
||||||
|
|
||||||
|
docker-deploy-tests:
|
||||||
|
name: docker
|
||||||
|
needs: build
|
||||||
|
runs-on: ubuntu-18.04
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: download packages
|
||||||
|
uses: actions/download-artifact@v1
|
||||||
|
with:
|
||||||
|
name: build
|
||||||
|
|
||||||
|
- name: ci-setup
|
||||||
|
run: ./.github/commands/ci-setup
|
||||||
|
|
||||||
|
- name: test docker deploys
|
||||||
|
shell: bash
|
||||||
|
timeout-minutes: 20
|
||||||
|
run: |
|
||||||
|
./tests/ci/setup.sh docker
|
||||||
|
DOKKU_SSH_PORT=3022 sudo -E make -e test-ci-docker
|
||||||
|
|
||||||
|
go-tests:
|
||||||
|
name: go.${{ matrix.index }}
|
||||||
|
needs: build
|
||||||
|
runs-on: ubuntu-18.04
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
index: [0, 1, 2, 3]
|
||||||
|
env:
|
||||||
|
GITHUB_NODE_INDEX: ${{ matrix.index }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: download packages
|
||||||
|
uses: actions/download-artifact@v1
|
||||||
|
with:
|
||||||
|
name: build
|
||||||
|
|
||||||
|
- name: ci-setup
|
||||||
|
run: ./.github/commands/ci-setup
|
||||||
|
|
||||||
|
- name: run go tests
|
||||||
|
run: |
|
||||||
|
export CIRCLE_SHA1=$GITHUB_SHA
|
||||||
|
echo "CODACY_TOKEN=$CODACY_TOKEN"
|
||||||
|
if [ "$CODACY_TOKEN" != "" ]; then
|
||||||
|
echo "Detected value for CODACY_TOKEN"
|
||||||
|
fi
|
||||||
|
case $GITHUB_NODE_INDEX in
|
||||||
|
0) sudo -E make -e lint-ci go-tests ci-go-coverage ;;
|
||||||
|
1) sudo -E make -e deploy-test-checks-root deploy-test-config ;;
|
||||||
|
2) sudo -E make -e deploy-test-multi ;;
|
||||||
|
3) sudo -E make -e deploy-test-go-fail-predeploy deploy-test-go-fail-postdeploy ;;
|
||||||
|
esac
|
||||||
|
- uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: coverage.${{ matrix.index }}
|
||||||
|
path: test-results/coverage
|
||||||
|
|
||||||
|
publish-test-results:
|
||||||
|
name: publish-test-results
|
||||||
|
needs: unit-tests
|
||||||
|
runs-on: ubuntu-18.04
|
||||||
|
# the build-and-test job might be skipped, we don't need to run this job then
|
||||||
|
if: success() || failure()
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: download test-results
|
||||||
|
uses: actions/download-artifact@v2
|
||||||
|
with:
|
||||||
|
path: test-results
|
||||||
|
|
||||||
|
- name: Publish Unit Test Results
|
||||||
|
uses: docker://ghcr.io/enricomi/publish-unit-test-result-action:v1
|
||||||
|
with:
|
||||||
|
check_name: Unit Test Results
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
files: test-results/**/*.xml
|
||||||
|
comment_on_pr: false
|
||||||
70
.github/workflows/codeql-analysis.yml
vendored
Normal file
70
.github/workflows/codeql-analysis.yml
vendored
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
---
|
||||||
|
# For most projects, this workflow file will not need changing; you simply need
|
||||||
|
# to commit it to your repository.
|
||||||
|
#
|
||||||
|
# You may wish to alter this file to override the set of languages analyzed,
|
||||||
|
# or to provide custom queries or build logic.
|
||||||
|
#
|
||||||
|
# ******** NOTE ********
|
||||||
|
# We have attempted to detect the languages in your repository. Please check
|
||||||
|
# the `language` matrix defined below to confirm you have the correct set of
|
||||||
|
# supported CodeQL languages.
|
||||||
|
# ******** NOTE ********
|
||||||
|
|
||||||
|
name: "CodeQL"
|
||||||
|
|
||||||
|
# yamllint disable-line rule:truthy
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [master]
|
||||||
|
pull_request:
|
||||||
|
# The branches below must be a subset of the branches above
|
||||||
|
branches: [master]
|
||||||
|
schedule:
|
||||||
|
- cron: '18 22 * * 2'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
language: ['go']
|
||||||
|
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
||||||
|
# Learn more:
|
||||||
|
# https://docs.github.com/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
# Initializes the CodeQL tools for scanning.
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v1
|
||||||
|
with:
|
||||||
|
languages: ${{ matrix.language }}
|
||||||
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
|
# By default, queries listed here will override any specified in a config file.
|
||||||
|
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||||
|
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||||
|
|
||||||
|
# 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@v1
|
||||||
|
|
||||||
|
# ℹ️ 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@v1
|
||||||
74
.github/workflows/lint.yml
vendored
Normal file
74
.github/workflows/lint.yml
vendored
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
---
|
||||||
|
name: 'lint'
|
||||||
|
|
||||||
|
# yamllint disable-line rule:truthy
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- '*'
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- 'master'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
hadolint:
|
||||||
|
name: hadolint
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
steps:
|
||||||
|
- name: Clone
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
- name: Run hadolint
|
||||||
|
uses: hadolint/hadolint-action@f988afea3da57ee48710a9795b6bb677cc901183
|
||||||
|
# v1.6.0 => d7b38582334d9ac11c12021c16f21d63015fa250
|
||||||
|
|
||||||
|
markdown-lint:
|
||||||
|
name: markdown-lint
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
steps:
|
||||||
|
- name: Clone
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
- name: Run markdown-lint
|
||||||
|
uses: avto-dev/markdown-lint@04d43ee9191307b50935a753da3b775ab695eceb
|
||||||
|
# v1.5.0 => 04d43ee9191307b50935a753da3b775ab695eceb
|
||||||
|
with:
|
||||||
|
config: '.github/linters/.markdown-lint.yml'
|
||||||
|
args: './README.md'
|
||||||
|
|
||||||
|
shellcheck:
|
||||||
|
name: shellcheck
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
steps:
|
||||||
|
- name: Clone
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
- name: Run shellcheck
|
||||||
|
uses: ludeeus/action-shellcheck@94e0aab03ca135d11a35e5bfc14e6746dc56e7e9
|
||||||
|
# 1.1.0 => 94e0aab03ca135d11a35e5bfc14e6746dc56e7e9
|
||||||
|
env:
|
||||||
|
# keep in sync with tests/shellcheck-exclude
|
||||||
|
SHELLCHECK_OPTS: -e SC1001 -e SC1003 -e SC1090 -e SC1091 -e SC1117 -e SC2029 -e SC2030 -e SC2031 -e SC2034 -e SC2046 -e SC2064 -e SC2068 -e SC2086 -e SC2119 -e SC2120 -e SC2128 -e SC2148 -e SC2153 -e SC2154 -e SC2155 -e SC2162 -e SC2174 -e SC2179 -e SC2191 -e SC2199 -e SC2207 -e SC2219 -e SC2220 -e SC2230 -e SC2231 -e SC2235 -e SC2267 -e SC2295
|
||||||
|
|
||||||
|
shfmt:
|
||||||
|
name: shfmt
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
steps:
|
||||||
|
- name: Clone
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
- name: Run shfmt
|
||||||
|
uses: luizm/action-sh-checker@7f44869033b40ee4ffe7dc76c87a1bc66e3d025a
|
||||||
|
# v0.3.0 => 7f44869033b40ee4ffe7dc76c87a1bc66e3d025a
|
||||||
|
env:
|
||||||
|
SHFMT_OPTS: -l -bn -ci -i 2 -d
|
||||||
|
with:
|
||||||
|
sh_checker_shellcheck_disable: true
|
||||||
|
|
||||||
|
yamllint:
|
||||||
|
name: yamllint
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
steps:
|
||||||
|
- name: Clone
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
- name: Run yamllint
|
||||||
|
uses: ibiqlik/action-yamllint@81e214fd484713882ce4237cb7cd264d550856cf
|
||||||
|
# v3.0.4 => ed2b6e911569708ed121c14b87d513860a7e36a7
|
||||||
|
with:
|
||||||
|
config_file: '.github/linters/.yamllint.yml'
|
||||||
105
.github/workflows/release.yml
vendored
Normal file
105
.github/workflows/release.yml
vendored
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
---
|
||||||
|
name: 'release'
|
||||||
|
|
||||||
|
# yamllint disable-line rule:truthy
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
release_type:
|
||||||
|
description: 'Release type [build, betafish, patch, minor, major]'
|
||||||
|
required: true
|
||||||
|
default: 'build'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
release:
|
||||||
|
name: release
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
env:
|
||||||
|
PACKAGECLOUD_TOKEN: ${{ secrets.PACKAGECLOUD_TOKEN }}
|
||||||
|
outputs:
|
||||||
|
version: ${{ steps.version.outputs.version }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- uses: ruby/setup-ruby@v1
|
||||||
|
with:
|
||||||
|
ruby-version: 2.6
|
||||||
|
|
||||||
|
- name: login to docker hub
|
||||||
|
uses: docker/login-action@v1
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: set up qemu
|
||||||
|
uses: docker/setup-qemu-action@v1
|
||||||
|
|
||||||
|
- name: set up docker buildx
|
||||||
|
id: buildx
|
||||||
|
uses: docker/setup-buildx-action@v1
|
||||||
|
|
||||||
|
- name: inspect builder
|
||||||
|
run: |
|
||||||
|
echo "Name: ${{ steps.buildx.outputs.name }}"
|
||||||
|
echo "Endpoint: ${{ steps.buildx.outputs.endpoint }}"
|
||||||
|
echo "Status: ${{ steps.buildx.outputs.status }}"
|
||||||
|
echo "Flags: ${{ steps.buildx.outputs.flags }}"
|
||||||
|
echo "Platforms: ${{ steps.buildx.outputs.platforms }}"
|
||||||
|
|
||||||
|
- name: install package_cloud
|
||||||
|
run: gem install package_cloud
|
||||||
|
|
||||||
|
- name: configure git
|
||||||
|
run: |
|
||||||
|
git config --global user.name 'Dokku Bot'
|
||||||
|
git config --global user.email no-reply@dokku.com
|
||||||
|
|
||||||
|
- name: build package
|
||||||
|
run: contrib/release-dokku ${{ github.event.inputs.release_type }}
|
||||||
|
|
||||||
|
- name: output version
|
||||||
|
id: version
|
||||||
|
run: echo "::set-output name=version::$(cat build/next-version)"
|
||||||
|
|
||||||
|
- name: upload packages
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: build
|
||||||
|
path: build
|
||||||
|
|
||||||
|
bump-azure:
|
||||||
|
name: bump-azure
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
needs: release
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
- name: Bump Azure Template
|
||||||
|
env:
|
||||||
|
BOT_GITHUB_USERNAME: ${{ secrets.HOMEBREW_GITHUB_USERNAME }}
|
||||||
|
BOT_GITHUB_API_TOKEN: ${{ secrets.HOMEBREW_GITHUB_API_TOKEN }}
|
||||||
|
run: |
|
||||||
|
VERSION=${{ needs.release.outputs.version }}
|
||||||
|
git config --global user.name 'Dokku Bot'
|
||||||
|
git config --global user.email no-reply@dokku.com
|
||||||
|
.github/commands/bump-azure "${VERSION:1}" "$BOT_GITHUB_USERNAME" "$BOT_GITHUB_API_TOKEN"
|
||||||
|
|
||||||
|
bump-formula:
|
||||||
|
name: bump-formula
|
||||||
|
runs-on: macos-latest
|
||||||
|
needs: release
|
||||||
|
steps:
|
||||||
|
- name: Bump Homebrew Formula
|
||||||
|
env:
|
||||||
|
HOMEBREW_GITHUB_USERNAME: ${{ secrets.HOMEBREW_GITHUB_USERNAME }}
|
||||||
|
HOMEBREW_GITHUB_API_TOKEN: ${{ secrets.HOMEBREW_GITHUB_API_TOKEN }}
|
||||||
|
run: |
|
||||||
|
git config --global user.name 'Dokku Bot'
|
||||||
|
git config --global user.email no-reply@dokku.com
|
||||||
|
curl -sSL https://github.com/dokku/netrc/releases/download/v0.4.1/netrc_0.4.1_darwin_x86_64.tgz | tar xvf -
|
||||||
|
mv netrc /usr/local/bin/netrc
|
||||||
|
netrc set github.com "$HOMEBREW_GITHUB_USERNAME" "$HOMEBREW_GITHUB_API_TOKEN"
|
||||||
|
brew tap dokku/repo
|
||||||
|
brew bump-formula-pr -f --no-browse --no-audit --no-fork --debug --verbose --url "https://github.com/dokku/dokku/archive/${{ needs.release.outputs.version }}.tar.gz" dokku/repo/dokku
|
||||||
17
.gitignore
vendored
17
.gitignore
vendored
@@ -1,6 +1,13 @@
|
|||||||
.vagrant
|
|
||||||
.DS_Store
|
|
||||||
stack.tgz
|
|
||||||
build
|
|
||||||
tmp
|
|
||||||
*.deb
|
*.deb
|
||||||
|
*.rpm
|
||||||
|
.DS_Store
|
||||||
|
.ruby-version
|
||||||
|
.idea/
|
||||||
|
.vscode/
|
||||||
|
.vagrant
|
||||||
|
build/
|
||||||
|
data/
|
||||||
|
test-results/
|
||||||
|
stack.tgz
|
||||||
|
tmp
|
||||||
|
coverage.out
|
||||||
|
|||||||
9
.shellcheckrc
Normal file
9
.shellcheckrc
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# SC1091 - Not following: FILE: does not exist (No such file or directory) - https://github.com/koalaman/shellcheck/wiki/SC1091
|
||||||
|
# - used for sourcing function files throughout the codebase
|
||||||
|
# SC2034 - VAR appears unused - https://github.com/koalaman/shellcheck/wiki/SC2034
|
||||||
|
# - used for declaring desc and deprecated function variables
|
||||||
|
# SC2064 - Use single quotes, otherwise this expands now rather than when signalled. - https://github.com/koalaman/shellcheck/wiki/SC2064
|
||||||
|
# - used for traps
|
||||||
|
# SC2155 - Declare and assign separately to avoid masking return values - https://github.com/koalaman/shellcheck/wiki/SC2155
|
||||||
|
# - used throughout the codebase
|
||||||
|
disable=SC1091,SC2034,SC2064,SC2155
|
||||||
13
.stickler.yml
Normal file
13
.stickler.yml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
linters:
|
||||||
|
shellcheck:
|
||||||
|
shell: bash
|
||||||
|
exclude: SC2034,SC1090,SC2191
|
||||||
|
golint:
|
||||||
|
|
||||||
|
files:
|
||||||
|
ignore:
|
||||||
|
- 'debian/*'
|
||||||
|
- 'docs/*'
|
||||||
|
- 'tests/*'
|
||||||
|
- '*/vendor/*'
|
||||||
22
AUTHORS
22
AUTHORS
@@ -1,22 +0,0 @@
|
|||||||
# If you're submitting a patch, please add your name here in alphabetical order as part of the patch.
|
|
||||||
# This file lists all individuals having contributed content to the repository.
|
|
||||||
#
|
|
||||||
3onyc <3onyc@x3tech.com>
|
|
||||||
Alexander <iam.asm89@gmail.com>
|
|
||||||
Alexander Beletsky <alexander.beletsky@gmail.com>
|
|
||||||
Alexis Gavoty <kload@kload.fr>
|
|
||||||
Christian Joudrey <cmallette@gmail.com>
|
|
||||||
Felipe Coury <felipe.coury@gmail.com>
|
|
||||||
Jeff Lindsay <progrium@gmail.com>
|
|
||||||
Jose Diaz-Gonzalez <dokku@josediazgonzalez.com>
|
|
||||||
Leo Unbekandt <leo@unbekandt.eu>
|
|
||||||
Ludovic Perrine <jazzzz@gmail.com>
|
|
||||||
Luigi Maselli <grigio.org@gmail.com>
|
|
||||||
Martin Weiss <kornnflake@gmail.com>
|
|
||||||
Michael Hobbs <github@psudo.net>
|
|
||||||
Paul Lietar <paul@lietar.net>
|
|
||||||
Rajiv Makhijani <rajiv@blue-tech.org>
|
|
||||||
rhy-jot <rhy-jot@myeml.net>
|
|
||||||
Richard North <rich.north@gmail.com>
|
|
||||||
Sebastian Götte <github@jaseg.net>
|
|
||||||
Silas Baronda <silas.baronda@gmail.com>
|
|
||||||
138
CONTRIBUTING.md
Normal file
138
CONTRIBUTING.md
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
# How to contribute
|
||||||
|
|
||||||
|
The Dokku project would love to welcome your contributions. There are
|
||||||
|
several ways to help out:
|
||||||
|
|
||||||
|
- Create an [issue](https://github.com/dokku/dokku/issues) on GitHub, if you have found a bug
|
||||||
|
- Write [test cases](https://dokku.com/docs/development/testing/) for open bug issues
|
||||||
|
- Write patches for open bug/feature issues, preferably with test cases included
|
||||||
|
- Contribute to the [documentation](https://dokku.com/docs/)
|
||||||
|
- Come up with new ways, non-commercial to show off our [lovely logo](https://avatars1.githubusercontent.com/u/13455795)
|
||||||
|
- Blog about different ways you are using dokku
|
||||||
|
- Sponsor the Dokku project financially on [Github](https://github.com/sponsors/dokku), [OpenCollective](https://opencollective.com/dokku#support) or [Patreon](https://www.patreon.com/dokku)
|
||||||
|
|
||||||
|
There are a few guidelines that we need contributors to follow so that we have
|
||||||
|
a chance of keeping on top of things.
|
||||||
|
|
||||||
|
## Topics
|
||||||
|
|
||||||
|
- [Reporting Security Issues](#reporting-security-issues)
|
||||||
|
- [Reporting Issues](#reporting-other-issues)
|
||||||
|
- [Contributing](#contributing)
|
||||||
|
- [Making Changes](#making-changes)
|
||||||
|
- [Which branch to base the work](#which-branch-to-base-the-work)
|
||||||
|
- [Submitting Changes](#submitting-changes)
|
||||||
|
- [When will my change be merged?](#when-will-my-change-be-merged)
|
||||||
|
- [Running tests locally](#running-tests-locally)
|
||||||
|
- [Additional Resources](#additional-resources)
|
||||||
|
|
||||||
|
## Reporting security issues
|
||||||
|
|
||||||
|
The Dokku maintainers take security seriously. If you discover a security
|
||||||
|
issue, please bring it to their attention right away!
|
||||||
|
|
||||||
|
Please **DO NOT** file a public issue, instead send your report privately to
|
||||||
|
[dokku@josediazgonzalez.com](mailto:dokku@josediazgonzalez.com),
|
||||||
|
|
||||||
|
Security reports are greatly appreciated and we will publicly thank you for it.
|
||||||
|
|
||||||
|
## Reporting other issues
|
||||||
|
|
||||||
|
A great way to contribute to the project is to send a detailed report when you
|
||||||
|
encounter an issue. We always appreciate a well-written, thorough bug report,
|
||||||
|
and will thank you for it!
|
||||||
|
|
||||||
|
Sometimes Dokku is missing a feature you need. In some cases, those features can
|
||||||
|
be found in pre-existing [plugins](https://dokku.com/docs/plugins/),
|
||||||
|
and we encourage our users to create and contribute such packages. From time to
|
||||||
|
time, we will also pull plugins into the Dokku core when the task they solve is
|
||||||
|
a common one for our users.
|
||||||
|
|
||||||
|
Check that [our issue database](https://github.com/dokku/dokku/issues)
|
||||||
|
doesn't already include that problem or suggestion before submitting an issue.
|
||||||
|
If you find a match, add a quick "+1" or "I have this problem too." Doing this
|
||||||
|
helps prioritize the most common problems and requests.
|
||||||
|
|
||||||
|
When reporting issues, please include all the information we ask for in our
|
||||||
|
[issue template](https://github.com/dokku/dokku/blob/master/ISSUE_TEMPLATE.md).
|
||||||
|
Not doing so will prolongue the support period, making it more difficult to support
|
||||||
|
you.
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Before you contribute to the Dokku project, there are a few things that you'll
|
||||||
|
need to do
|
||||||
|
|
||||||
|
- Make sure you have a [GitHub account](https://github.com/signup/free).
|
||||||
|
- Submit an [issue](https://github.com/dokku/dokku/issues), assuming one does not already exist.
|
||||||
|
- Clearly describe the issue including steps to reproduce when it is a bug.
|
||||||
|
- Make sure you fill in the earliest version that you know has the issue.
|
||||||
|
- Fork the repository on GitHub.
|
||||||
|
|
||||||
|
### Making Changes
|
||||||
|
|
||||||
|
- Create a topic branch from where you want to base your work.
|
||||||
|
- This is usually the master branch.
|
||||||
|
- Only target an existing branch if you are certain your fix must be on that
|
||||||
|
branch.
|
||||||
|
- To quickly create a topic branch based on master; `git checkout -b my_contribution origin/master`.
|
||||||
|
It is best to avoid working directly on the `master` branch. Doing so will
|
||||||
|
help avoid conflicts if you pull in updates from origin.
|
||||||
|
- Make commits of logical units. Implementing a new function and calling it in
|
||||||
|
another file constitute a single logical unit of work.
|
||||||
|
- Before you make a pull request, squash your commits into logical units of work
|
||||||
|
using `git rebase -i` and `git push -f`.
|
||||||
|
- A majority of submissions should have a single commit, so if in doubt,
|
||||||
|
squash your commits down to one commit.
|
||||||
|
- Check for unnecessary whitespace with `git diff --check` before committing.
|
||||||
|
- Use descriptive commit messages and reference the #issue number.
|
||||||
|
- Core test cases should continue to pass. You can run tests locally or enable
|
||||||
|
[circle-ci](https://circleci.com/gh/dokku/dokku) for your fork, so all
|
||||||
|
tests and codesniffs will be executed.
|
||||||
|
- Your work should apply the [Dokku coding standards](https://github.com/progrium/bashstyle)
|
||||||
|
- Pull requests must be cleanly rebased on top of master without multiple branches
|
||||||
|
mixed into the PR.
|
||||||
|
- **Git tip**: If your PR no longer merges cleanly, use `rebase master` in your
|
||||||
|
feature branch to update your pull request rather than `merge master`.
|
||||||
|
|
||||||
|
### Which branch to base the work
|
||||||
|
|
||||||
|
All changes should be be based on the latest master commit.
|
||||||
|
|
||||||
|
### Submitting Changes
|
||||||
|
|
||||||
|
- Push your changes to a topic branch in your fork of the repository.
|
||||||
|
- Submit a pull request to the repository on github, with the correct target
|
||||||
|
branch.
|
||||||
|
|
||||||
|
### When will my change be merged?
|
||||||
|
|
||||||
|
Be patient! The Dokku maintainers will review all pull requests and comment as
|
||||||
|
quickly as possible. There may be some back and forth while the details of your
|
||||||
|
pull request are discussed.
|
||||||
|
|
||||||
|
In the unlikely event that your pull request does not get merged, the Dokku
|
||||||
|
maintainers will either provide an alternative patch or guide you towards a
|
||||||
|
better solution to the problem at hand.
|
||||||
|
|
||||||
|
During our pre-1.0 cycle, we will follow these general rules when merging pull
|
||||||
|
requests:
|
||||||
|
|
||||||
|
- bugfix (patch)
|
||||||
|
- security (patch/minor)
|
||||||
|
- minor feature (patch)
|
||||||
|
- backwards incompatible change (minor)
|
||||||
|
- major feature (minor)
|
||||||
|
|
||||||
|
### Running tests locally
|
||||||
|
|
||||||
|
Please read the [testing docs](https://dokku.com/docs/development/testing/),
|
||||||
|
which contains test setup information as well as tips for running tests.
|
||||||
|
|
||||||
|
## Additional Resources
|
||||||
|
|
||||||
|
- [Dokku coding standards](https://github.com/progrium/bashstyle)
|
||||||
|
- [Existing issues](https://github.com/dokku/dokku/issues)
|
||||||
|
- [General GitHub documentation](https://help.github.com/)
|
||||||
|
- [GitHub pull request documentation](https://help.github.com/send-pull-requests/)
|
||||||
|
- [Gliderlabs Slack in the #dokku channel](https://glider-slackin.herokuapp.com/)
|
||||||
58
Dockerfile
Normal file
58
Dockerfile
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
FROM phusion/baseimage:focal-1.1.0
|
||||||
|
|
||||||
|
CMD ["/sbin/my_init"]
|
||||||
|
|
||||||
|
ARG DOKKU_TAG=0.17.7
|
||||||
|
ARG DOKKU_GID=200
|
||||||
|
ARG DOKKU_UID=200
|
||||||
|
ARG DOKKU_HOSTNAME=dokku.invalid
|
||||||
|
ARG DOKKU_SKIP_KEY_FILE=true
|
||||||
|
ARG DOKKU_VHOST_ENABLE=false
|
||||||
|
ARG DOKKU_WEB_CONFIG=false
|
||||||
|
|
||||||
|
RUN addgroup --gid $DOKKU_GID dokku \
|
||||||
|
&& adduser --uid $DOKKU_UID --gid $DOKKU_GID --disabled-password --gecos "" "dokku"
|
||||||
|
|
||||||
|
COPY ./tests/dhparam.pem /tmp/dhparam.pem
|
||||||
|
COPY ./build/package/ /tmp
|
||||||
|
|
||||||
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||||
|
# hadolint ignore=DL3005,DL3008
|
||||||
|
RUN echo "dokku dokku/hostname string $DOKKU_HOSTNAME" | debconf-set-selections \
|
||||||
|
&& echo "dokku dokku/skip_key_file boolean $DOKKU_SKIP_KEY_FILE" | debconf-set-selections \
|
||||||
|
&& echo "dokku dokku/vhost_enable boolean $DOKKU_VHOST_ENABLE" | debconf-set-selections \
|
||||||
|
&& curl -sSL https://packagecloud.io/dokku/dokku/gpgkey | apt-key add - \
|
||||||
|
&& echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ focal main" | tee /etc/apt/sources.list.d/dokku.list \
|
||||||
|
&& mkdir -p /etc/nginx/ \
|
||||||
|
&& cp /tmp/dhparam.pem /etc/nginx/dhparam.pem \
|
||||||
|
&& apt-get update \
|
||||||
|
&& apt-get upgrade -y \
|
||||||
|
&& apt-get -y --no-install-recommends --only-upgrade install openssl openssh-server \
|
||||||
|
&& apt-get -y --no-install-recommends install rsync "/tmp/dokku-$(dpkg --print-architecture).deb" \
|
||||||
|
&& apt-get purge -y syslog-ng-core \
|
||||||
|
&& apt-get autoremove -y \
|
||||||
|
&& apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||||
|
|
||||||
|
WORKDIR /tmp
|
||||||
|
|
||||||
|
COPY ./docker .
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
rsync -a /tmp/ / \
|
||||||
|
&& rm -rf /tmp/* \
|
||||||
|
&& rm /etc/runit/runsvdir/default/sshd/down \
|
||||||
|
&& chown -R dokku:dokku /home/dokku/ \
|
||||||
|
&& mkdir -p /skel/etc /skel/home /skel/var/lib/dokku /var/log/services \
|
||||||
|
&& mv /etc/ssh /skel/etc/ssh \
|
||||||
|
&& mv /home/dokku /skel/home/dokku \
|
||||||
|
&& mv /var/lib/dokku/config /skel/var/lib/dokku/config \
|
||||||
|
&& mv /var/lib/dokku/data /skel/var/lib/dokku/data \
|
||||||
|
&& ln -sf /mnt/dokku/etc/ssh /etc/ssh \
|
||||||
|
&& ln -sf /mnt/dokku/home/dokku /home/dokku \
|
||||||
|
&& ln -sf /mnt/dokku/var/lib/dokku/config /var/lib/dokku/config \
|
||||||
|
&& ln -sf /mnt/dokku/var/lib/dokku/data /var/lib/dokku/data \
|
||||||
|
&& mv /etc/my_init.d/00_regen_ssh_host_keys.sh /etc/my_init.d/15_regen_ssh_host_keys \
|
||||||
|
&& rm -f /etc/nginx/sites-enabled/default /usr/share/nginx/html/index.html /etc/my_init.d/10_syslog-ng.init \
|
||||||
|
&& rm -f /usr/local/openresty/nginx/conf/sites-enabled/default /usr/share/openresty/html/index.html \
|
||||||
|
&& sed -i '/imklog/d' /etc/rsyslog.conf \
|
||||||
|
&& rm -f /var/log/btmp /var/log/wtmp /var/log/*log /var/log/apt/* /var/log/dokku/*.log /var/log/nginx/* /var/log/openresty/*
|
||||||
4610
HISTORY.md
4610
HISTORY.md
File diff suppressed because it is too large
Load Diff
48
ISSUE_TEMPLATE.md
Normal file
48
ISSUE_TEMPLATE.md
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
> If you're using Dokku - especially for commercial purposes - consider donating to project development via [OpenCollective](https://opencollective.com/dokku) or [Patreon](https://www.patreon.com/dokku). Funds go to general development, support, and infrastructure costs.
|
||||||
|
>
|
||||||
|
> If you'd like to sponsor specific functionality, see the project's [Sponsoring](https://github.com/dokku/.github/blob/master/SPONSORING.md) document.
|
||||||
|
>
|
||||||
|
> If you need help figuring out how to use a specific buildpack, are seeing an issue in during the buildpack process, or are having issues using multiple buildpacks, please see our [chat channels or github discussion board](https://dokku.com/docs/getting-started/where-to-get-help/#monitored-locations). Issues pertaining to buildpacks may be closed and locked.
|
||||||
|
>
|
||||||
|
> If you need support for a version of Dokku that is more than a year old, your issue may be closed without an answer. Please upgrade to a recent version.
|
||||||
|
|
||||||
|
## Description of problem
|
||||||
|
|
||||||
|
### How reproducible
|
||||||
|
|
||||||
|
### Steps to Reproduce
|
||||||
|
|
||||||
|
1.
|
||||||
|
2.
|
||||||
|
3.
|
||||||
|
|
||||||
|
#### Actual Results
|
||||||
|
|
||||||
|
#### Expected Results
|
||||||
|
|
||||||
|
<-- Please replace APP_NAME with the name of your app -->
|
||||||
|
|
||||||
|
## Environment Information
|
||||||
|
|
||||||
|
### `dokku report APP_NAME` output
|
||||||
|
|
||||||
|
> This is required! Issues missing this information may be closed.
|
||||||
|
>
|
||||||
|
> For problems affecting all applications, the report output for a broken application is useful for our debugging.
|
||||||
|
> In these cases, you may run `dokku report` without any arguments to display the top-level reporting information.
|
||||||
|
|
||||||
|
### How (deb/make/rpm) and where (AWS, VirtualBox, physical, etc.) was Dokku installed?
|
||||||
|
|
||||||
|
### Additional information
|
||||||
|
|
||||||
|
- Container Inspect Output (if applicable) via `dokku ps:inspect APP_NAME`
|
||||||
|
- The nginx configuration (if applicable) via `dokku nginx:show-config APP_NAME`
|
||||||
|
- Link to the exact repository being deployed (if possible/applicable):
|
||||||
|
- If a deploy is failing or behaving unexpectedly:
|
||||||
|
- Application name
|
||||||
|
- The type of application being deployed (node, php, python, ruby, etc.)
|
||||||
|
- If using buildpacks, which custom buildpacks are in use
|
||||||
|
- If using a `Dockerfile`, the contents of that file
|
||||||
|
- If it exists, the contents of your `Procfile`.
|
||||||
|
- Output of failing Dokku commands after running `dokku trace:on`
|
||||||
|
(BEWARE: `trace:on` will print environment variables for some commands, be sure you're not exposing any sensitive information when posting issues. You may replace these values with XXXXXX):
|
||||||
205
Makefile
205
Makefile
@@ -1,10 +1,24 @@
|
|||||||
DOKKU_VERSION = master
|
DOKKU_VERSION ?= master
|
||||||
|
|
||||||
SSHCOMMAND_URL ?= https://raw.github.com/progrium/sshcommand/master/sshcommand
|
DOCKER_IMAGE_LABELER_VERSION ?= 0.4.1
|
||||||
PLUGINHOOK_URL ?= https://s3.amazonaws.com/progrium-pluginhook/pluginhook_0.1.0_amd64.deb
|
HEROKUISH_VERSION ?= 0.5.34
|
||||||
|
NETRC_VERSION ?= 0.5.1
|
||||||
|
PLUGN_VERSION ?= 0.8.2
|
||||||
|
PROCFILE_VERSION ?= 0.14.1
|
||||||
|
SIGIL_VERSION ?= 0.8.1
|
||||||
|
SSHCOMMAND_VERSION ?= 0.15.0
|
||||||
|
DOCKER_IMAGE_LABELER_URL ?= https://github.com/dokku/docker-image-labeler/releases/download/v${DOCKER_IMAGE_LABELER_VERSION}/docker-image-labeler_${DOCKER_IMAGE_LABELER_VERSION}_linux_amd64.tgz
|
||||||
|
NETRC_URL ?= https://github.com/dokku/netrc/releases/download/v${NETRC_VERSION}/netrc_${NETRC_VERSION}_linux_amd64.tgz
|
||||||
|
PLUGN_URL ?= https://github.com/dokku/plugn/releases/download/v${PLUGN_VERSION}/plugn_${PLUGN_VERSION}_linux_amd64.tgz
|
||||||
|
PROCFILE_UTIL_URL ?= https://github.com/josegonzalez/go-procfile-util/releases/download/v${PROCFILE_VERSION}/procfile-util_${PROCFILE_VERSION}_linux_amd64.tgz
|
||||||
|
SIGIL_URL ?= https://github.com/gliderlabs/sigil/releases/download/v${SIGIL_VERSION}/gliderlabs-sigil_${SIGIL_VERSION}_linux_amd64.tgz
|
||||||
|
SSHCOMMAND_URL ?= https://github.com/dokku/sshcommand/releases/download/v${SSHCOMMAND_VERSION}/sshcommand_${SSHCOMMAND_VERSION}_linux_x86_64.tgz
|
||||||
STACK_URL ?= https://github.com/gliderlabs/herokuish.git
|
STACK_URL ?= https://github.com/gliderlabs/herokuish.git
|
||||||
PREBUILT_STACK_URL ?= gliderlabs/herokuish:latest
|
PREBUILT_STACK_URL ?= gliderlabs/herokuish:latest-20
|
||||||
PLUGINS_PATH ?= /var/lib/dokku/plugins
|
DOKKU_LIB_ROOT ?= /var/lib/dokku
|
||||||
|
PLUGINS_PATH ?= ${DOKKU_LIB_ROOT}/plugins
|
||||||
|
CORE_PLUGINS_PATH ?= ${DOKKU_LIB_ROOT}/core-plugins
|
||||||
|
PLUGIN_MAKE_TARGET ?= build-in-docker
|
||||||
|
|
||||||
# If the first argument is "vagrant-dokku"...
|
# If the first argument is "vagrant-dokku"...
|
||||||
ifeq (vagrant-dokku,$(firstword $(MAKECMDGOALS)))
|
ifeq (vagrant-dokku,$(firstword $(MAKECMDGOALS)))
|
||||||
@@ -20,104 +34,175 @@ else
|
|||||||
BUILD_STACK_TARGETS = build-in-docker
|
BUILD_STACK_TARGETS = build-in-docker
|
||||||
endif
|
endif
|
||||||
|
|
||||||
.PHONY: all apt-update install copyfiles man-db version plugins dependencies sshcommand pluginhook docker aufs stack count dokku-installer vagrant-acl-add vagrant-dokku
|
include common.mk
|
||||||
|
|
||||||
|
.PHONY: all apt-update install version copyfiles copyplugin man-db plugins dependencies docker-image-labeler netrc sshcommand procfile-util plugn docker aufs stack count vagrant-acl-add vagrant-dokku go-build
|
||||||
|
|
||||||
include tests.mk
|
include tests.mk
|
||||||
|
include package.mk
|
||||||
include deb.mk
|
include deb.mk
|
||||||
|
include rpm.mk
|
||||||
|
include arch.mk
|
||||||
|
|
||||||
all:
|
all:
|
||||||
# Type "make install" to install.
|
# Type "make install" to install.
|
||||||
|
|
||||||
install: dependencies copyfiles plugin-dependencies plugins version
|
install: dependencies version copyfiles plugin-dependencies plugins
|
||||||
|
|
||||||
release: deb-all package_cloud packer
|
|
||||||
|
|
||||||
package_cloud:
|
|
||||||
package_cloud push dokku/dokku/ubuntu/trusty herokuish*.deb
|
|
||||||
package_cloud push dokku/dokku/ubuntu/trusty sshcommand*.deb
|
|
||||||
package_cloud push dokku/dokku/ubuntu/trusty pluginhook*.deb
|
|
||||||
package_cloud push dokku/dokku/ubuntu/trusty rubygem*.deb
|
|
||||||
package_cloud push dokku/dokku/ubuntu/trusty dokku*.deb
|
|
||||||
|
|
||||||
packer:
|
packer:
|
||||||
packer build contrib/packer.json
|
packer build contrib/packer.json
|
||||||
|
|
||||||
|
go-build:
|
||||||
|
basedir=$(PWD); \
|
||||||
|
for dir in plugins/*; do \
|
||||||
|
if [ -e $$dir/Makefile ]; then \
|
||||||
|
$(MAKE) -e -C $$dir $(PLUGIN_MAKE_TARGET) || exit $$? ;\
|
||||||
|
fi ;\
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
go-build-plugin:
|
||||||
|
ifndef PLUGIN_NAME
|
||||||
|
$(error PLUGIN_NAME not specified)
|
||||||
|
endif
|
||||||
|
if [ -e plugins/$(PLUGIN_NAME)/Makefile ]; then \
|
||||||
|
$(MAKE) -e -C plugins/$(PLUGIN_NAME) $(PLUGIN_MAKE_TARGET) || exit $$? ;\
|
||||||
|
fi
|
||||||
|
|
||||||
|
go-clean:
|
||||||
|
basedir=$(PWD); \
|
||||||
|
for dir in plugins/*; do \
|
||||||
|
if [ -e $$dir/Makefile ]; then \
|
||||||
|
$(MAKE) -e -C $$dir clean ;\
|
||||||
|
fi ;\
|
||||||
|
done
|
||||||
|
|
||||||
copyfiles:
|
copyfiles:
|
||||||
|
$(MAKE) go-build || exit 1
|
||||||
cp dokku /usr/local/bin/dokku
|
cp dokku /usr/local/bin/dokku
|
||||||
mkdir -p ${PLUGINS_PATH}
|
mkdir -p ${CORE_PLUGINS_PATH} ${PLUGINS_PATH}
|
||||||
find ${PLUGINS_PATH} -mindepth 2 -maxdepth 2 -name '.core' -printf '%h\0' | xargs -0 rm -Rf
|
rm -rf ${CORE_PLUGINS_PATH}/*
|
||||||
find plugins/ -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read plugin; do \
|
test -d ${CORE_PLUGINS_PATH}/enabled || PLUGIN_PATH=${CORE_PLUGINS_PATH} plugn init
|
||||||
rm -Rf ${PLUGINS_PATH}/$$plugin && \
|
test -d ${PLUGINS_PATH}/enabled || PLUGIN_PATH=${PLUGINS_PATH} plugn init
|
||||||
cp -R plugins/$$plugin ${PLUGINS_PATH} && \
|
find plugins/ -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read plugin; do $(MAKE) copyplugin PLUGIN_NAME=$$plugin; done
|
||||||
touch ${PLUGINS_PATH}/$$plugin/.core; \
|
ifndef SKIP_GO_CLEAN
|
||||||
done
|
$(MAKE) go-clean
|
||||||
|
endif
|
||||||
|
chown dokku:dokku -R ${PLUGINS_PATH} ${CORE_PLUGINS_PATH} || true
|
||||||
$(MAKE) addman
|
$(MAKE) addman
|
||||||
|
|
||||||
addman:
|
copyplugin:
|
||||||
|
ifndef PLUGIN_NAME
|
||||||
|
$(error PLUGIN_NAME not specified)
|
||||||
|
endif
|
||||||
|
rm -Rf ${CORE_PLUGINS_PATH}/available/$(PLUGIN_NAME) && \
|
||||||
|
rm -Rf ${PLUGINS_PATH}/available/$(PLUGIN_NAME) && \
|
||||||
|
rm -rf ${CORE_PLUGINS_PATH}/$(PLUGIN_NAME) && \
|
||||||
|
rm -rf ${PLUGINS_PATH}/$(PLUGIN_NAME) && \
|
||||||
|
cp -R plugins/$(PLUGIN_NAME) ${CORE_PLUGINS_PATH}/available && \
|
||||||
|
rm -rf ${CORE_PLUGINS_PATH}/available/$(PLUGIN_NAME)/src && \
|
||||||
|
ln -s ${CORE_PLUGINS_PATH}/available/$(PLUGIN_NAME) ${PLUGINS_PATH}/available; \
|
||||||
|
find /var/lib/dokku/ -xtype l -delete;\
|
||||||
|
PLUGIN_PATH=${CORE_PLUGINS_PATH} plugn enable $(PLUGIN_NAME) ;\
|
||||||
|
PLUGIN_PATH=${PLUGINS_PATH} plugn enable $(PLUGIN_NAME)
|
||||||
|
chown dokku:dokku -R ${PLUGINS_PATH} ${CORE_PLUGINS_PATH} || true
|
||||||
|
|
||||||
|
addman: help2man man-db
|
||||||
mkdir -p /usr/local/share/man/man1
|
mkdir -p /usr/local/share/man/man1
|
||||||
|
ifneq ("$(wildcard /usr/local/share/man/man1/dokku.1-generated)","")
|
||||||
|
cp /usr/local/share/man/man1/dokku.1-generated /usr/local/share/man/man1/dokku.1
|
||||||
|
else
|
||||||
help2man -Nh help -v version -n "configure and get information from your dokku installation" -o /usr/local/share/man/man1/dokku.1 dokku
|
help2man -Nh help -v version -n "configure and get information from your dokku installation" -o /usr/local/share/man/man1/dokku.1 dokku
|
||||||
|
endif
|
||||||
mandb
|
mandb
|
||||||
|
|
||||||
version:
|
version:
|
||||||
git describe --tags > ~dokku/VERSION 2> /dev/null || echo '~${DOKKU_VERSION} ($(shell date -uIminutes))' > ~dokku/VERSION
|
mkdir -p ${DOKKU_LIB_ROOT}
|
||||||
|
ifeq ($(DOKKU_VERSION),master)
|
||||||
|
git describe --tags > ${DOKKU_LIB_ROOT}/VERSION 2>/dev/null || echo '~${DOKKU_VERSION} ($(shell date -uIminutes))' > ${DOKKU_LIB_ROOT}/VERSION
|
||||||
|
else
|
||||||
|
echo $(DOKKU_VERSION) > ${DOKKU_LIB_ROOT}/STABLE_VERSION
|
||||||
|
endif
|
||||||
|
|
||||||
plugin-dependencies: pluginhook
|
plugin-dependencies: plugn procfile-util
|
||||||
dokku plugins-install-dependencies
|
sudo -E dokku plugin:install-dependencies --core
|
||||||
|
|
||||||
plugins: pluginhook docker
|
plugins: plugn procfile-util docker
|
||||||
dokku plugins-install
|
sudo -E dokku plugin:install --core
|
||||||
|
|
||||||
dependencies: apt-update sshcommand pluginhook docker help2man man-db
|
dependencies: apt-update docker-image-labeler netrc sshcommand plugn procfile-util docker help2man man-db sigil dos2unix jq parallel
|
||||||
$(MAKE) -e stack
|
$(MAKE) -e stack
|
||||||
|
|
||||||
apt-update:
|
apt-update:
|
||||||
apt-get update
|
apt-get update -qq
|
||||||
|
|
||||||
|
parallel:
|
||||||
|
apt-get -qq -y --no-install-recommends install parallel
|
||||||
|
|
||||||
|
jq:
|
||||||
|
apt-get -qq -y --no-install-recommends install jq
|
||||||
|
|
||||||
|
dos2unix:
|
||||||
|
apt-get -qq -y --no-install-recommends install dos2unix
|
||||||
|
|
||||||
help2man:
|
help2man:
|
||||||
apt-get install -qq -y help2man
|
apt-get -qq -y --no-install-recommends install help2man
|
||||||
|
|
||||||
man-db:
|
man-db:
|
||||||
apt-get install -qq -y man-db
|
apt-get -qq -y --no-install-recommends install man-db
|
||||||
|
|
||||||
|
docker-image-labeler:
|
||||||
|
wget -qO /tmp/docker-image-labeler_latest.tgz ${DOCKER_IMAGE_LABELER_URL}
|
||||||
|
tar xzf /tmp/docker-image-labeler_latest.tgz -C /usr/local/bin
|
||||||
|
mv /usr/local/bin/docker-image-labeler-amd64 /usr/local/bin/docker-image-labeler
|
||||||
|
|
||||||
|
netrc:
|
||||||
|
wget -qO /tmp/netrc_latest.tgz ${NETRC_URL}
|
||||||
|
tar xzf /tmp/netrc_latest.tgz -C /usr/local/bin
|
||||||
|
mv /usr/local/bin/netrc-amd64 /usr/local/bin/netrc
|
||||||
|
|
||||||
|
procfile-util:
|
||||||
|
wget -qO /tmp/procfile-util_latest.tgz ${PROCFILE_UTIL_URL}
|
||||||
|
tar xzf /tmp/procfile-util_latest.tgz -C /usr/local/bin
|
||||||
|
mv /usr/local/bin/procfile-util-amd64 /usr/local/bin/procfile-util
|
||||||
|
|
||||||
|
plugn:
|
||||||
|
wget -qO /tmp/plugn_latest.tgz ${PLUGN_URL}
|
||||||
|
tar xzf /tmp/plugn_latest.tgz -C /usr/local/bin
|
||||||
|
mv /usr/local/bin/plugn-amd64 /usr/local/bin/plugn
|
||||||
|
|
||||||
|
sigil:
|
||||||
|
wget -qO /tmp/sigil_latest.tgz ${SIGIL_URL}
|
||||||
|
tar xzf /tmp/sigil_latest.tgz -C /usr/local/bin
|
||||||
|
mv /usr/local/bin/gliderlabs-sigil-amd64 /usr/local/bin/sigil
|
||||||
|
|
||||||
sshcommand:
|
sshcommand:
|
||||||
wget -qO /usr/local/bin/sshcommand ${SSHCOMMAND_URL}
|
wget -qO /tmp/sshcommand_latest.tgz ${SSHCOMMAND_URL}
|
||||||
chmod +x /usr/local/bin/sshcommand
|
tar xzf /tmp/sshcommand_latest.tgz -C /usr/local/bin
|
||||||
sshcommand create dokku /usr/local/bin/dokku
|
sshcommand create dokku /usr/local/bin/dokku
|
||||||
|
|
||||||
pluginhook:
|
docker:
|
||||||
wget -qO /tmp/pluginhook_0.1.0_amd64.deb ${PLUGINHOOK_URL}
|
apt-get -qq -y --no-install-recommends install curl
|
||||||
dpkg -i /tmp/pluginhook_0.1.0_amd64.deb
|
grep -i -E "^docker" /etc/group || groupadd docker
|
||||||
|
|
||||||
docker: aufs
|
|
||||||
apt-get install -qq -y curl
|
|
||||||
egrep -i "^docker" /etc/group || groupadd docker
|
|
||||||
usermod -aG docker dokku
|
usermod -aG docker dokku
|
||||||
ifndef CI
|
ifndef CI
|
||||||
curl -sSL https://get.docker.com/gpg | apt-key add -
|
wget -nv -O - https://get.docker.com/ | sh
|
||||||
echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list
|
|
||||||
apt-get update
|
|
||||||
ifdef DOCKER_VERSION
|
ifdef DOCKER_VERSION
|
||||||
apt-get install -qq -y lxc-docker-${DOCKER_VERSION}
|
apt-get -qq -y --no-install-recommends install docker-engine=${DOCKER_VERSION} || (apt-cache madison docker-engine ; exit 1)
|
||||||
else
|
|
||||||
apt-get install -qq -y lxc-docker-1.6.2
|
|
||||||
endif
|
endif
|
||||||
sleep 2 # give docker a moment i guess
|
sleep 2 # give docker a moment i guess
|
||||||
endif
|
endif
|
||||||
|
|
||||||
aufs:
|
|
||||||
ifndef CI
|
|
||||||
lsmod | grep aufs || modprobe aufs || apt-get install -qq -y linux-image-extra-`uname -r` > /dev/null
|
|
||||||
endif
|
|
||||||
|
|
||||||
stack:
|
stack:
|
||||||
ifeq ($(shell test -e /var/run/docker.sock && touch -c /var/run/docker.sock && echo $$?),0)
|
ifeq ($(shell test -e /var/run/docker.sock && touch -c /var/run/docker.sock && echo $$?),0)
|
||||||
ifdef BUILD_STACK
|
ifdef BUILD_STACK
|
||||||
@echo "Start building herokuish from source"
|
@echo "Start building herokuish from source"
|
||||||
docker images | grep gliderlabs/herokuish || (git clone ${STACK_URL} /tmp/herokuish && cd /tmp/herokuish && IMAGE_NAME=gliderlabs/herokuish BUILD_TAG=latest VERSION=master make -e ${BUILD_STACK_TARGETS} && rm -rf /tmp/herokuish)
|
docker images | grep gliderlabs/herokuish || (git clone ${STACK_URL} /tmp/herokuish && cd /tmp/herokuish && IMAGE_NAME=gliderlabs/herokuish BUILD_TAG=latest VERSION=master make -e ${BUILD_STACK_TARGETS} && rm -rf /tmp/herokuish)
|
||||||
else
|
else
|
||||||
ifeq ($(shell echo ${PREBUILT_STACK_URL} | egrep -q 'http.*://' && echo $$?),0)
|
ifeq ($(shell echo ${PREBUILT_STACK_URL} | grep -q -E 'http.*://|file://' && echo $$?),0)
|
||||||
@echo "Start importing herokuish from ${PREBUILT_STACK_URL}"
|
@echo "Start importing herokuish from ${PREBUILT_STACK_URL}"
|
||||||
docker images | grep gliderlabs/herokuish || curl --silent -L ${PREBUILT_STACK_URL} | gunzip -cd | docker import - gliderlabs/herokuish
|
docker images | grep gliderlabs/herokuish || wget -nv -O - ${PREBUILT_STACK_URL} | gunzip -cd | docker import - gliderlabs/herokuish
|
||||||
else
|
else
|
||||||
@echo "Start pulling herokuish from ${PREBUILT_STACK_URL}"
|
@echo "Start pulling herokuish from ${PREBUILT_STACK_URL}"
|
||||||
docker images | grep gliderlabs/herokuish || docker pull ${PREBUILT_STACK_URL}
|
docker images | grep gliderlabs/herokuish || docker pull ${PREBUILT_STACK_URL}
|
||||||
@@ -133,20 +218,8 @@ count:
|
|||||||
@echo "Test lines:"
|
@echo "Test lines:"
|
||||||
@find tests -type f -not -name .DS_Store | xargs cat | sed 's/^$$//g' | wc -l
|
@find tests -type f -not -name .DS_Store | xargs cat | sed 's/^$$//g' | wc -l
|
||||||
|
|
||||||
dokku-installer:
|
|
||||||
apt-get install -qq -y ruby
|
|
||||||
test -f /var/lib/dokku/.dokku-installer-created || gem install rack -v 1.5.2 --no-rdoc --no-ri
|
|
||||||
test -f /var/lib/dokku/.dokku-installer-created || gem install rack-protection -v 1.5.3 --no-rdoc --no-ri
|
|
||||||
test -f /var/lib/dokku/.dokku-installer-created || gem install sinatra -v 1.4.5 --no-rdoc --no-ri
|
|
||||||
test -f /var/lib/dokku/.dokku-installer-created || gem install tilt -v 1.4.1 --no-rdoc --no-ri
|
|
||||||
test -f /var/lib/dokku/.dokku-installer-created || ruby contrib/dokku-installer.rb onboot
|
|
||||||
test -f /var/lib/dokku/.dokku-installer-created || service dokku-installer start
|
|
||||||
test -f /var/lib/dokku/.dokku-installer-created || service nginx reload
|
|
||||||
test -f /var/lib/dokku/.dokku-installer-created || touch /var/lib/dokku/.dokku-installer-created
|
|
||||||
|
|
||||||
vagrant-acl-add:
|
vagrant-acl-add:
|
||||||
vagrant ssh -- sudo sshcommand acl-add dokku $(USER)
|
vagrant ssh -- sudo sshcommand acl-add dokku $(USER)
|
||||||
|
|
||||||
vagrant-dokku:
|
vagrant-dokku:
|
||||||
vagrant ssh -- "sudo -H -u root bash -c 'dokku $(RUN_ARGS)'"
|
vagrant ssh -- "sudo -H -u root bash -c 'dokku $(RUN_ARGS)'"
|
||||||
|
|
||||||
|
|||||||
142
README.md
142
README.md
@@ -1,40 +1,118 @@
|
|||||||
# Dokku [](https://circleci.com/gh/progrium/dokku/tree/master) [](https://packagecloud.io/dokku/dokku) [](https://webchat.freenode.net/?channels=dokku) [](http://progrium.viewdocs.io/dokku/)
|
# Dokku
|
||||||
|
|
||||||
Docker powered mini-Heroku. The smallest PaaS implementation you've ever seen. Sponsored by our friends at [Deis](http://deis.io/).
|
[](https://github.com/dokku/dokku/actions?query=workflow%3ACI)
|
||||||
|
[](https://packagecloud.io/dokku/dokku)
|
||||||
|
[](https://aur.archlinux.org/packages/dokku/)
|
||||||
|
[](https://glider-slackin.herokuapp.com/)
|
||||||
|
[](https://dokku.com/docs/getting-started/installation/)
|
||||||
|
[](#sponsors)
|
||||||
|
[](#backers)
|
||||||
|
[](https://www.patreon.com/dokku/)
|
||||||
|
|
||||||
## Requirements
|
Docker powered mini-Heroku. The smallest PaaS implementation you've ever seen.
|
||||||
|
|
||||||
- A fresh VM running Ubuntu `14.04 x64`
|
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
To install the latest stable release, you can run the following commands as a user that has access to `sudo`:
|
|
||||||
|
|
||||||
wget https://raw.github.com/progrium/dokku/v0.3.26/bootstrap.sh
|
|
||||||
sudo DOKKU_TAG=v0.3.26 bash bootstrap.sh
|
|
||||||
|
|
||||||
### Upgrading
|
|
||||||
|
|
||||||
[View the docs for upgrading](http://progrium.viewdocs.io/dokku/upgrading) from an older version of Dokku.
|
|
||||||
|
|
||||||
## Documentation
|
|
||||||
|
|
||||||
Full documentation - including advanced installation docs - are available online at [docs](http://progrium.viewdocs.io/dokku/)
|
|
||||||
|
|
||||||
## Support
|
|
||||||
|
|
||||||
You can use [Github Issues](https://github.com/progrium/dokku/issues), check [Troubleshooting](http://progrium.viewdocs.io/dokku/troubleshooting) in the documentation, or join us on [freenode in #dokku](https://webchat.freenode.net/?channels=%23dokku)
|
|
||||||
|
|
||||||
## Contribution
|
|
||||||
|
|
||||||
After checking [Github Issues](https://github.com/progrium/dokku/issues), the [Troubleshooting Guide](http://progrium.viewdocs.io/dokku/troubleshooting) or having a chat with us on [freenode in #dokku](https://webchat.freenode.net/?channels=%23dokku), feel free to fork and create a Pull Request.
|
|
||||||
|
|
||||||
While we may not merge your PR as is, they serve to start conversations and improve the general dokku experience for all users.
|
|
||||||
|
|
||||||
## Sponsors
|
## Sponsors
|
||||||
|
|
||||||
Dokku is currently sponsored by the enterprise grade, multi-host PaaS project [Deis](http://deis.io/).
|
Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/dokku#sponsor)]
|
||||||
|
|
||||||
|
[](https://opencollective.com/dokku/sponsor/0/website)
|
||||||
|
[](https://opencollective.com/dokku/sponsor/1/website)
|
||||||
|
[](https://opencollective.com/dokku/sponsor/2/website)
|
||||||
|
[](https://opencollective.com/dokku/sponsor/3/website)
|
||||||
|
[](https://opencollective.com/dokku/sponsor/4/website)
|
||||||
|
[](https://opencollective.com/dokku/sponsor/5/website)
|
||||||
|
[](https://opencollective.com/dokku/sponsor/6/website)
|
||||||
|
[](https://opencollective.com/dokku/sponsor/7/website)
|
||||||
|
[](https://opencollective.com/dokku/sponsor/8/website)
|
||||||
|
[](https://opencollective.com/dokku/sponsor/9/website)
|
||||||
|
[](https://opencollective.com/dokku/sponsor/10/website)
|
||||||
|
[](https://opencollective.com/dokku/sponsor/11/website)
|
||||||
|
[](https://opencollective.com/dokku/sponsor/12/website)
|
||||||
|
[](https://opencollective.com/dokku/sponsor/13/website)
|
||||||
|
[](https://opencollective.com/dokku/sponsor/14/website)
|
||||||
|
[](https://opencollective.com/dokku/sponsor/5/website)
|
||||||
|
[](https://opencollective.com/dokku/sponsor/16/website)
|
||||||
|
[](https://opencollective.com/dokku/sponsor/17/website)
|
||||||
|
[](https://opencollective.com/dokku/sponsor/18/website)
|
||||||
|
|
||||||
|
## Backers
|
||||||
|
|
||||||
|
Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/dokku#backer)]
|
||||||
|
|
||||||
|
[](https://opencollective.com/dokku/backer/0/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/1/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/2/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/3/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/4/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/5/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/6/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/7/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/8/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/9/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/10/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/11/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/12/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/13/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/14/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/15/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/16/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/17/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/18/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/19/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/20/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/21/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/22/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/23/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/24/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/25/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/26/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/27/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/28/website)
|
||||||
|
[](https://opencollective.com/dokku/backer/29/website)
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
A fresh VM running any of the following operating systems:
|
||||||
|
|
||||||
|
- Ubuntu 18.04/20.04 x64 - Any currently supported release
|
||||||
|
- Debian 9+ x64
|
||||||
|
- CentOS 7 x64 *(experimental)*
|
||||||
|
- Arch Linux x64 *(experimental)*
|
||||||
|
|
||||||
|
An SSH keypair that can be used for application deployment. If this exists before installation, it will be automatically imported into dokku.
|
||||||
|
Otherwise, you will need to import the keypair manually after installation using `dokku ssh-keys:add`.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
To install the latest stable release, run the following commands as a user who has access to `sudo`:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
wget https://raw.githubusercontent.com/dokku/dokku/v0.27.1/bootstrap.sh
|
||||||
|
sudo DOKKU_TAG=v0.27.1 bash bootstrap.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
You can then proceed to configure your server domain (via `dokku domains:set-global`) and user access (via `dokku ssh-keys:add`) to complete the installation.
|
||||||
|
|
||||||
|
If you wish for a more unattended installation method, see [these](https://dokku.com/docs/getting-started/install/debian/#unattended-installation) docs.
|
||||||
|
|
||||||
|
### Upgrade
|
||||||
|
|
||||||
|
[View the docs](https://dokku.com/docs/getting-started/upgrading/) for upgrading from an older version of Dokku.
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
Full documentation - including advanced installation docs - are available online at <https://dokku.com/docs/getting-started/installation/>.
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
You can use [GitHub Issues](https://github.com/dokku/dokku/issues), check [Troubleshooting](https://dokku.com/docs/getting-started/troubleshooting/) in the documentation, or join us on [Gliderlabs Slack in the #dokku channel](https://glider-slackin.herokuapp.com/).
|
||||||
|
|
||||||
|
## Contribution
|
||||||
|
|
||||||
|
After checking [GitHub Issues](https://github.com/dokku/dokku/issues), the [Troubleshooting Guide](https://dokku.com/docs/getting-started/troubleshooting/) or having a chat with us on [Gliderlabs Slack in the #dokku channel](https://glider-slackin.herokuapp.com/), feel free to fork and create a Pull Request.
|
||||||
|
|
||||||
|
While we may not merge your PR as is, they serve to start conversations and improve the general Dokku experience for all users.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
MIT
|
[MIT License](https://github.com/dokku/dokku/blob/master/LICENSE) © Jeff Lindsay
|
||||||
|
|||||||
81
Vagrantfile
vendored
81
Vagrantfile
vendored
@@ -1,7 +1,8 @@
|
|||||||
# -*- mode: ruby -*-
|
# -*- mode: ruby -*-
|
||||||
# vi: set ft=ruby :
|
# vi: set ft=ruby :
|
||||||
|
|
||||||
BOX_NAME = ENV["BOX_NAME"] || "chef/ubuntu-14.04"
|
BOX_NAME = ENV["BOX_NAME"] || "bento/ubuntu-18.04"
|
||||||
|
BOX_CPUS = ENV["BOX_CPUS"] || "1"
|
||||||
BOX_MEMORY = ENV["BOX_MEMORY"] || "1024"
|
BOX_MEMORY = ENV["BOX_MEMORY"] || "1024"
|
||||||
DOKKU_DOMAIN = ENV["DOKKU_DOMAIN"] || "dokku.me"
|
DOKKU_DOMAIN = ENV["DOKKU_DOMAIN"] || "dokku.me"
|
||||||
DOKKU_IP = ENV["DOKKU_IP"] || "10.0.0.2"
|
DOKKU_IP = ENV["DOKKU_IP"] || "10.0.0.2"
|
||||||
@@ -18,40 +19,106 @@ Vagrant::configure("2") do |config|
|
|||||||
config.ssh.forward_agent = true
|
config.ssh.forward_agent = true
|
||||||
|
|
||||||
config.vm.box = BOX_NAME
|
config.vm.box = BOX_NAME
|
||||||
config.vm.synced_folder File.dirname(__FILE__), "/root/dokku"
|
|
||||||
|
|
||||||
config.vm.provider :virtualbox do |vb|
|
config.vm.provider :virtualbox do |vb|
|
||||||
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
|
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
|
||||||
# Ubuntu's Raring 64-bit cloud image is set to a 32-bit Ubuntu OS type by
|
# Ubuntu's Raring 64-bit cloud image is set to a 32-bit Ubuntu OS type by
|
||||||
# default in Virtualbox and thus will not boot. Manually override that.
|
# default in Virtualbox and thus will not boot. Manually override that.
|
||||||
vb.customize ["modifyvm", :id, "--ostype", "Ubuntu_64"]
|
vb.customize ["modifyvm", :id, "--ostype", "Ubuntu_64"]
|
||||||
|
vb.customize ["modifyvm", :id, "--cpus", BOX_CPUS]
|
||||||
vb.customize ["modifyvm", :id, "--memory", BOX_MEMORY]
|
vb.customize ["modifyvm", :id, "--memory", BOX_MEMORY]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
config.vm.provider :vmware_fusion do |v, override|
|
||||||
|
v.vmx["memsize"] = BOX_MEMORY
|
||||||
|
v.ssh_info_public = true
|
||||||
|
end
|
||||||
|
|
||||||
|
config.vm.provider :vmware_desktop do |v, override|
|
||||||
|
v.vmx["memsize"] = BOX_MEMORY
|
||||||
|
v.ssh_info_public = true
|
||||||
|
end
|
||||||
|
|
||||||
config.vm.define "empty", autostart: false
|
config.vm.define "empty", autostart: false
|
||||||
|
|
||||||
config.vm.define "dokku", primary: true do |vm|
|
config.vm.define "dokku", primary: true do |vm|
|
||||||
|
vm.vm.synced_folder File.dirname(__FILE__), "/root/dokku"
|
||||||
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
|
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
|
||||||
vm.vm.hostname = "#{DOKKU_DOMAIN}"
|
vm.vm.hostname = "#{DOKKU_DOMAIN}"
|
||||||
vm.vm.network :private_network, ip: DOKKU_IP
|
vm.vm.network :private_network, ip: DOKKU_IP
|
||||||
vm.vm.provision :shell, :inline => "export DEBIAN_FRONTEND=noninteractive && apt-get update > /dev/null && apt-get -qq -y install git > /dev/null && cd /root/dokku && #{make_cmd}"
|
|
||||||
vm.vm.provision :shell, :inline => "cd /root/dokku && make dokku-installer"
|
# Use the same nameserver as the host machine in order to avoid the "too many redirects" problem.
|
||||||
|
vm.vm.provider :virtualbox do |vb|
|
||||||
|
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "off"]
|
||||||
|
vb.customize ["modifyvm", :id, "--natdnsproxy1", "off"]
|
||||||
|
# enable NAT adapter cable https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=838999
|
||||||
|
vb.customize ["modifyvm", :id, "--cableconnected1", "on"]
|
||||||
|
end
|
||||||
|
|
||||||
|
vm.vm.provision :shell, :inline => "export DEBIAN_FRONTEND=noninteractive && apt-get update -qq >/dev/null && apt-get -qq -y --no-install-recommends install git build-essential >/dev/null && cd /root/dokku && #{make_cmd}"
|
||||||
|
vm.vm.provision :shell do |s|
|
||||||
|
s.inline = <<-EOT
|
||||||
|
echo '"\e[5~": history-search-backward' > /root/.inputrc
|
||||||
|
echo '"\e[6~": history-search-forward' >> /root/.inputrc
|
||||||
|
echo 'set show-all-if-ambiguous on' >> /root/.inputrc
|
||||||
|
echo 'set completion-ignore-case on' >> /root/.inputrc
|
||||||
|
EOT
|
||||||
|
end
|
||||||
|
|
||||||
|
if Pathname.new(PUBLIC_KEY_PATH).exist?
|
||||||
|
vm.vm.provision :shell, :inline => "echo 'Importing ssh key into dokku' && cat /root/.ssh/authorized_keys | dokku ssh-keys:add admin"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# For windows users. Sharing folder from windows creates problem with sym links and so, sync the repo instead from GOS.
|
||||||
|
config.vm.define "dokku-windows", autostart: false do |vm|
|
||||||
|
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
|
||||||
|
vm.vm.hostname = "#{DOKKU_DOMAIN}"
|
||||||
|
vm.vm.network :private_network, ip: DOKKU_IP
|
||||||
|
vm.vm.provision :shell, :inline => "export DEBIAN_FRONTEND=noninteractive && apt-get update -qq >/dev/null && apt-get -qq -y --no-install-recommends install git dos2unix >/dev/null"
|
||||||
|
vm.vm.provision :shell, :inline => "cd /vagrant/ && export DOKKU_BRANCH=`git symbolic-ref -q --short HEAD 2>/dev/null` && export DOKKU_TAG=`git describe --tags --exact-match 2>/dev/null` && cd /root/ && cp /vagrant/bootstrap.sh ./ && dos2unix bootstrap.sh && bash bootstrap.sh"
|
||||||
end
|
end
|
||||||
|
|
||||||
config.vm.define "dokku-deb", autostart: false do |vm|
|
config.vm.define "dokku-deb", autostart: false do |vm|
|
||||||
|
vm.vm.synced_folder File.dirname(__FILE__), "/root/dokku"
|
||||||
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
|
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
|
||||||
vm.vm.hostname = "#{DOKKU_DOMAIN}"
|
vm.vm.hostname = "#{DOKKU_DOMAIN}"
|
||||||
vm.vm.network :private_network, ip: DOKKU_IP
|
vm.vm.network :private_network, ip: DOKKU_IP
|
||||||
vm.vm.provision :shell, :inline => "cd /root/dokku && make install-from-deb"
|
vm.vm.provision :shell, :inline => "cd /root/dokku && make install-from-deb"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
config.vm.define "dokku-rpm", autostart: false do |vm|
|
||||||
|
vm.vm.box = "centos/7"
|
||||||
|
vm.vm.synced_folder File.dirname(__FILE__), "/root/dokku"
|
||||||
|
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
|
||||||
|
vm.vm.hostname = "#{DOKKU_DOMAIN}"
|
||||||
|
vm.vm.network :private_network, ip: DOKKU_IP
|
||||||
|
vm.vm.provision :shell, :inline => "cd /root/dokku && bash bootstrap.sh"
|
||||||
|
end
|
||||||
|
|
||||||
config.vm.define "build", autostart: false do |vm|
|
config.vm.define "build", autostart: false do |vm|
|
||||||
vm.vm.provision :shell, :inline => "apt-get update > /dev/null && DEBIAN_FRONTEND=noninteractive apt-get -qq -y install git > /dev/null && cd /root/dokku && #{make_cmd}"
|
vm.vm.synced_folder File.dirname(__FILE__), "/root/dokku"
|
||||||
vm.vm.provision :shell, :inline => "cd /root/dokku && make deb-all"
|
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
|
||||||
|
vm.vm.hostname = "#{DOKKU_DOMAIN}"
|
||||||
|
vm.vm.network :private_network, ip: DOKKU_IP
|
||||||
|
vm.vm.provision :shell, :inline => "export DEBIAN_FRONTEND=noninteractive && apt-get update -qq >/dev/null && apt-get -qq -y --no-install-recommends install git >/dev/null && cd /root/dokku && #{make_cmd}"
|
||||||
|
vm.vm.provision :shell, :inline => "export IS_RELEASE=true && cd /root/dokku && make deb-all rpm-all"
|
||||||
|
end
|
||||||
|
|
||||||
|
config.vm.define "build-arch", autostart: false do |vm|
|
||||||
|
vm.vm.box = "bugyt/archlinux"
|
||||||
|
vm.vm.synced_folder File.dirname(__FILE__), "/dokku"
|
||||||
|
if Pathname.new("#{File.dirname(__FILE__)}/../dokku-arch").exist?
|
||||||
|
vm.vm.synced_folder "#{File.dirname(__FILE__)}/../dokku-arch", "/dokku-arch"
|
||||||
|
end
|
||||||
|
vm.vm.network :forwarded_port, guest: 80, host: FORWARDED_PORT
|
||||||
|
vm.vm.hostname = "#{DOKKU_DOMAIN}"
|
||||||
|
vm.vm.network :private_network, ip: DOKKU_IP
|
||||||
|
vm.vm.provision :shell, :inline => "cd /dokku && make arch-all", privileged: false
|
||||||
end
|
end
|
||||||
|
|
||||||
if Pathname.new(PUBLIC_KEY_PATH).exist?
|
if Pathname.new(PUBLIC_KEY_PATH).exist?
|
||||||
config.vm.provision :file, source: PUBLIC_KEY_PATH, destination: '/tmp/id_rsa.pub'
|
config.vm.provision :file, source: PUBLIC_KEY_PATH, destination: '/tmp/id_rsa.pub'
|
||||||
config.vm.provision :shell, :inline => "rm -f /root/.ssh/authorized_keys && mkdir -p /root/.ssh && sudo cp /tmp/id_rsa.pub /root/.ssh/authorized_keys"
|
config.vm.provision :shell, :inline => "echo 'Copying ssh key into vm' && rm -f /root/.ssh/authorized_keys && mkdir -p /root/.ssh && sudo cp /tmp/id_rsa.pub /root/.ssh/authorized_keys"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
32
arch.mk
Normal file
32
arch.mk
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
.PHONY: arch-all arch-dokku
|
||||||
|
|
||||||
|
arch-all: arch-dokku
|
||||||
|
echo "Done"
|
||||||
|
|
||||||
|
arch-setup:
|
||||||
|
echo "-> Updating pacman repository and installing package helper"
|
||||||
|
sudo pacman -Sy
|
||||||
|
sudo pacman -S --needed --noconfirm pkgbuild-introspection
|
||||||
|
|
||||||
|
echo "-> Download, build and install cower (dependency of pacaur) and pacaur"
|
||||||
|
curl -so /tmp/cower.tar.gz https://aur.archlinux.org/cgit/aur.git/snapshot/cower.tar.gz
|
||||||
|
curl -so /tmp/pacaur.tar.gz https://aur.archlinux.org/cgit/aur.git/snapshot/pacaur.tar.gz
|
||||||
|
tar -xzf /tmp/cower.tar.gz -C /tmp
|
||||||
|
tar -xzf /tmp/pacaur.tar.gz -C /tmp
|
||||||
|
gpg --recv-key 1EB2638FF56C0C53
|
||||||
|
cd /tmp/cower; makepkg -sri --noconfirm
|
||||||
|
cd /tmp/pacaur; makepkg -sri --noconfirm
|
||||||
|
|
||||||
|
echo "-> Installing build requirements"
|
||||||
|
pacaur --noconfirm --noedit -S plugn
|
||||||
|
|
||||||
|
arch-dokku: arch-setup
|
||||||
|
echo "-> Update package sums, create metadata file and test the build of the package"
|
||||||
|
ifeq ($(DOKKU_VERSION),master)
|
||||||
|
git describe --tags > /tmp/VERSION
|
||||||
|
else
|
||||||
|
echo $(DOKKU_VERSION) > /tmp/VERSION
|
||||||
|
endif
|
||||||
|
cat /tmp/VERSION | cut -d '-' -f 1 | cut -d 'v' -f 2 > /tmp/STABLE_VERSION
|
||||||
|
sed -i -e "s/pkgver=.*/pkgver=`cat /tmp/STABLE_VERSION`/" /dokku-arch/PKGBUILD
|
||||||
|
cd /dokku-arch; updpkgsums; mksrcinfo; makepkg -fd
|
||||||
308
bootstrap.sh
308
bootstrap.sh
@@ -1,86 +1,282 @@
|
|||||||
#!/bin/bash
|
#!/usr/bin/env bash
|
||||||
#
|
set -eo pipefail
|
||||||
# A script to bootstrap dokku.
|
[[ $TRACE ]] && set -x
|
||||||
# It expects to be run on Ubuntu 14.04 via 'sudo'
|
|
||||||
# If installing a tag higher than 0.3.13, it may install dokku via a package (so long as the package is higher than 0.3.13)
|
|
||||||
# It checks out the dokku source code from Github into ~/dokku and then runs 'make install' from dokku source.
|
|
||||||
|
|
||||||
# We wrap this whole script in a function, so that we won't execute
|
# A script to bootstrap dokku.
|
||||||
|
# It expects to be run on Ubuntu 18.04/20.04, or CentOS 7 via 'sudo'
|
||||||
|
# If installing a tag higher than 0.3.13, it may install dokku via a package (so long as the package is higher than 0.3.13)
|
||||||
|
# It checks out the dokku source code from GitHub into ~/dokku and then runs 'make install' from dokku source.
|
||||||
|
|
||||||
|
# We wrap this whole script in functions, so that we won't execute
|
||||||
# until the entire script is downloaded.
|
# until the entire script is downloaded.
|
||||||
# That's good because it prevents our output overlapping with curl's.
|
# That's good because it prevents our output overlapping with wget's.
|
||||||
# It also means that we can't run a partially downloaded script.
|
# It also means that we can't run a partially downloaded script.
|
||||||
|
|
||||||
|
SUPPORTED_VERSIONS="Debian [9, 10, 11], CentOS [7], Fedora (partial) [33, 34], Ubuntu [18.04, 20.04]"
|
||||||
|
|
||||||
bootstrap () {
|
log-fail() {
|
||||||
|
declare desc="log fail formatter"
|
||||||
|
echo "$@" 1>&2
|
||||||
set -eo pipefail
|
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
|
||||||
export DOKKU_REPO=${DOKKU_REPO:-"https://github.com/progrium/dokku.git"}
|
|
||||||
|
|
||||||
echo "Preparing to install $DOKKU_TAG from $DOKKU_REPO..."
|
|
||||||
if ! command -v apt-get &>/dev/null; then
|
|
||||||
echo "This installation script requires apt-get. For manual installation instructions, consult http://progrium.viewdocs.io/dokku/advanced-installation ."
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
}
|
||||||
|
|
||||||
apt-get update
|
ensure-environment() {
|
||||||
which curl > /dev/null || apt-get install -qq -y curl
|
local FREE_MEMORY
|
||||||
[[ $(lsb_release -sr) == "12.04" ]] && apt-get install -qq -y python-software-properties
|
if [[ -z "$DOKKU_TAG" ]]; then
|
||||||
|
echo "Preparing to install $DOKKU_REPO..."
|
||||||
|
else
|
||||||
|
echo "Preparing to install $DOKKU_TAG from $DOKKU_REPO..."
|
||||||
|
fi
|
||||||
|
|
||||||
dokku_install_source() {
|
hostname -f >/dev/null 2>&1 || {
|
||||||
apt-get install -qq -y git make software-properties-common
|
log-fail "This installation script requires that you have a hostname set for the instance. Please set a hostname for 127.0.0.1 in your /etc/hosts"
|
||||||
|
}
|
||||||
|
|
||||||
|
FREE_MEMORY=$(grep MemTotal /proc/meminfo | awk '{print $2}')
|
||||||
|
if [[ "$FREE_MEMORY" -lt 1003600 ]]; then
|
||||||
|
echo "For dokku to build containers, it is strongly suggested that you have 1024 megabytes or more of free memory"
|
||||||
|
echo "If necessary, please consult this document to setup swap: https://dokku.com/docs/getting-started/advanced-installation/#vms-with-less-than-1-gb-of-memory"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install-requirements() {
|
||||||
|
echo "--> Ensuring we have the proper dependencies"
|
||||||
|
|
||||||
|
case "$DOKKU_DISTRO" in
|
||||||
|
debian)
|
||||||
|
if ! dpkg -l | grep -q gpg-agent; then
|
||||||
|
apt-get update -qq >/dev/null
|
||||||
|
apt-get -qq -y --no-install-recommends install gpg-agent
|
||||||
|
fi
|
||||||
|
if ! dpkg -l | grep -q software-properties-common; then
|
||||||
|
apt-get update -qq >/dev/null
|
||||||
|
apt-get -qq -y --no-install-recommends install software-properties-common
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
ubuntu)
|
||||||
|
if ! dpkg -l | grep -q gpg-agent; then
|
||||||
|
apt-get update -qq >/dev/null
|
||||||
|
apt-get -qq -y --no-install-recommends install gpg-agent
|
||||||
|
fi
|
||||||
|
if ! dpkg -l | grep -q software-properties-common; then
|
||||||
|
apt-get update -qq >/dev/null
|
||||||
|
apt-get -qq -y --no-install-recommends install software-properties-common
|
||||||
|
fi
|
||||||
|
|
||||||
|
add-apt-repository universe >/dev/null
|
||||||
|
apt-get update -qq >/dev/null
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
install-dokku() {
|
||||||
|
if ! command -v dokku &>/dev/null; then
|
||||||
|
echo "--> Note: Installing dokku for the first time will result in removal of"
|
||||||
|
echo " files in the nginx 'sites-enabled' directory. Please manually"
|
||||||
|
echo " restore any files that may be removed after the installation and"
|
||||||
|
echo " web setup is complete."
|
||||||
|
echo ""
|
||||||
|
echo " Installation will continue in 10 seconds."
|
||||||
|
sleep 10
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n $DOKKU_BRANCH ]]; then
|
||||||
|
install-dokku-from-source "origin/$DOKKU_BRANCH"
|
||||||
|
elif [[ -n $DOKKU_TAG ]]; then
|
||||||
|
local DOKKU_SEMVER="${DOKKU_TAG//v/}"
|
||||||
|
major=$(echo "$DOKKU_SEMVER" | awk '{split($0,a,"."); print a[1]}')
|
||||||
|
minor=$(echo "$DOKKU_SEMVER" | awk '{split($0,a,"."); print a[2]}')
|
||||||
|
patch=$(echo "$DOKKU_SEMVER" | awk '{split($0,a,"."); print a[3]}')
|
||||||
|
|
||||||
|
use_plugin=false
|
||||||
|
# 0.4.0 implemented a `plugin` plugin
|
||||||
|
if [[ "$major" -eq "0" ]] && [[ "$minor" -ge "4" ]] && [[ "$patch" -ge "0" ]]; then
|
||||||
|
use_plugin=true
|
||||||
|
elif [[ "$major" -ge "1" ]]; then
|
||||||
|
use_plugin=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 0.3.13 was the first version with a debian package
|
||||||
|
if [[ "$major" -eq "0" ]] && [[ "$minor" -eq "3" ]] && [[ "$patch" -ge "13" ]]; then
|
||||||
|
install-dokku-from-package "$DOKKU_SEMVER"
|
||||||
|
echo "--> Running post-install dependency installation"
|
||||||
|
dokku plugins-install-dependencies
|
||||||
|
elif [[ "$use_plugin" == "true" ]]; then
|
||||||
|
install-dokku-from-package "$DOKKU_SEMVER"
|
||||||
|
echo "--> Running post-install dependency installation"
|
||||||
|
sudo -E dokku plugin:install-dependencies --core
|
||||||
|
else
|
||||||
|
install-dokku-from-source "$DOKKU_TAG"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
install-dokku-from-package
|
||||||
|
echo "--> Running post-install dependency installation"
|
||||||
|
sudo -E dokku plugin:install-dependencies --core
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install-dokku-from-source() {
|
||||||
|
local DOKKU_CHECKOUT="$1"
|
||||||
|
|
||||||
|
if ! command -v apt-get &>/dev/null; then
|
||||||
|
log-fail "This installation script requires apt-get. For manual installation instructions, consult https://dokku.com/docs/getting-started/advanced-installation/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
apt-get -qq -y --no-install-recommends install sudo git make software-properties-common
|
||||||
cd /root
|
cd /root
|
||||||
if [ ! -d /root/dokku ]; then
|
if [[ ! -d /root/dokku ]]; then
|
||||||
git clone $DOKKU_REPO /root/dokku
|
git clone "$DOKKU_REPO" /root/dokku
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd /root/dokku
|
cd /root/dokku
|
||||||
git fetch origin
|
git fetch origin
|
||||||
git checkout $DOKKU_CHECKOUT
|
[[ -n $DOKKU_CHECKOUT ]] && git checkout "$DOKKU_CHECKOUT"
|
||||||
make install
|
make install
|
||||||
}
|
}
|
||||||
|
|
||||||
dokku_install_package() {
|
install-dokku-from-package() {
|
||||||
curl -sSL https://get.docker.io/gpg | apt-key add -
|
case "$DOKKU_DISTRO" in
|
||||||
curl -sSL https://packagecloud.io/gpg.key | apt-key add -
|
debian | ubuntu)
|
||||||
|
install-dokku-from-deb-package "$@"
|
||||||
|
;;
|
||||||
|
centos | fedora | rhel)
|
||||||
|
install-dokku-from-rpm-package "$@"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
log-fail "Unsupported Linux distribution. For manual installation instructions, consult https://dokku.com/docs/getting-started/advanced-installation/"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
apt-get update > /dev/null
|
in-array() {
|
||||||
apt-get install -qq -y "linux-image-extra-$(uname -r)" apt-transport-https
|
declare desc="return true if value ($1) is in list (all other arguments)"
|
||||||
|
|
||||||
echo "deb https://get.docker.io/ubuntu docker main" > /etc/apt/sources.list.d/docker.list
|
local e
|
||||||
echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ trusty main" > /etc/apt/sources.list.d/dokku.list
|
for e in "${@:2}"; do
|
||||||
|
[[ "$e" == "$1" ]] && return 0
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
apt-get update > /dev/null
|
install-dokku-from-deb-package() {
|
||||||
|
local DOKKU_CHECKOUT="$1"
|
||||||
|
local NO_INSTALL_RECOMMENDS=${DOKKU_NO_INSTALL_RECOMMENDS:=""}
|
||||||
|
local OS_ID
|
||||||
|
|
||||||
|
if ! in-array "$DOKKU_DISTRO_VERSION" "18.04" "20.04" "9" "10" "11"; then
|
||||||
|
log-fail "Unsupported Linux distribution. Only the following versions are supported: $SUPPORTED_VERSIONS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n $DOKKU_DOCKERFILE ]]; then
|
||||||
|
NO_INSTALL_RECOMMENDS=" --no-install-recommends "
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "--> Initial apt-get update"
|
||||||
|
apt-get update -qq >/dev/null
|
||||||
|
apt-get -qq -y --no-install-recommends install apt-transport-https
|
||||||
|
|
||||||
|
if ! command -v docker &>/dev/null; then
|
||||||
|
echo "--> Installing docker"
|
||||||
|
if uname -r | grep -q linode; then
|
||||||
|
echo "--> NOTE: Using Linode? Docker may complain about missing AUFS support."
|
||||||
|
echo " You can safely ignore this warning."
|
||||||
|
echo ""
|
||||||
|
echo " Installation will continue in 10 seconds."
|
||||||
|
sleep 10
|
||||||
|
fi
|
||||||
|
export CHANNEL=stable
|
||||||
|
wget -nv -O - https://get.docker.com/ | sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
OS_ID="$(lsb_release -cs 2>/dev/null || echo "bionic")"
|
||||||
|
if ! in-array "$DOKKU_DISTRO" "debian" "ubuntu" "raspbian"; then
|
||||||
|
DOKKU_DISTRO="ubuntu"
|
||||||
|
OS_ID="bionic"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$DOKKU_DISTRO" == "ubuntu" ]]; then
|
||||||
|
OS_IDS=("bionic" "focal")
|
||||||
|
if ! in-array "$OS_ID" "${OS_IDS[@]}"; then
|
||||||
|
OS_ID="bionic"
|
||||||
|
fi
|
||||||
|
elif [[ "$DOKKU_DISTRO" == "debian" ]]; then
|
||||||
|
OS_IDS=("stretch" "buster" "bullseye")
|
||||||
|
if ! in-array "$OS_ID" "${OS_IDS[@]}"; then
|
||||||
|
OS_ID="bullseye"
|
||||||
|
fi
|
||||||
|
elif [[ "$DOKKU_DISTRO" == "raspbian" ]]; then
|
||||||
|
OS_IDS=("buster" "bullseye")
|
||||||
|
if ! in-array "$OS_ID" "${OS_IDS[@]}"; then
|
||||||
|
OS_ID="bullseye"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "--> Installing dokku"
|
||||||
|
wget -nv -O - https://packagecloud.io/dokku/dokku/gpgkey | apt-key add -
|
||||||
|
echo "deb https://packagecloud.io/dokku/dokku/$DOKKU_DISTRO/ $OS_ID main" | tee /etc/apt/sources.list.d/dokku.list
|
||||||
|
apt-get update -qq >/dev/null
|
||||||
|
|
||||||
|
[[ -n $DOKKU_VHOST_ENABLE ]] && echo "dokku dokku/vhost_enable boolean $DOKKU_VHOST_ENABLE" | sudo debconf-set-selections
|
||||||
|
[[ -n $DOKKU_HOSTNAME ]] && echo "dokku dokku/hostname string $DOKKU_HOSTNAME" | sudo debconf-set-selections
|
||||||
|
[[ -n $DOKKU_SKIP_KEY_FILE ]] && echo "dokku dokku/skip_key_file boolean $DOKKU_SKIP_KEY_FILE" | sudo debconf-set-selections
|
||||||
|
[[ -n $DOKKU_KEY_FILE ]] && echo "dokku dokku/key_file string $DOKKU_KEY_FILE" | sudo debconf-set-selections
|
||||||
|
[[ -n $DOKKU_NGINX_ENABLE ]] && echo "dokku dokku/nginx_enable string $DOKKU_NGINX_ENABLE" | sudo debconf-set-selections
|
||||||
|
|
||||||
if [[ -n $DOKKU_CHECKOUT ]]; then
|
if [[ -n $DOKKU_CHECKOUT ]]; then
|
||||||
apt-get install -qq -y dokku=$DOKKU_CHECKOUT
|
# shellcheck disable=SC2086
|
||||||
|
apt-get -qq -y $NO_INSTALL_RECOMMENDS install "dokku=$DOKKU_CHECKOUT"
|
||||||
else
|
else
|
||||||
apt-get install -qq -y dokku
|
# shellcheck disable=SC2086
|
||||||
|
apt-get -qq -y $NO_INSTALL_RECOMMENDS install dokku
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
if [[ -n $DOKKU_BRANCH ]]; then
|
install-dokku-from-rpm-package() {
|
||||||
export DOKKU_CHECKOUT="origin/$DOKKU_BRANCH"
|
local DOKKU_CHECKOUT="$1"
|
||||||
dokku_install_source
|
|
||||||
elif [[ -n $DOKKU_TAG ]]; then
|
|
||||||
export DOKKU_SEMVER="${DOKKU_TAG//v}"
|
|
||||||
major=$(echo $DOKKU_SEMVER | awk '{split($0,a,"."); print a[1]}')
|
|
||||||
minor=$(echo $DOKKU_SEMVER | awk '{split($0,a,"."); print a[2]}')
|
|
||||||
patch=$(echo $DOKKU_SEMVER | awk '{split($0,a,"."); print a[3]}')
|
|
||||||
|
|
||||||
# 0.3.13 was the first version with a debian package
|
if ! in-array "$DOKKU_DISTRO_VERSION" "7"; then
|
||||||
if [[ "$major" -eq "0" ]] && [[ "$minor" -lt "4" ]] && [[ "$patch" -lt "13" ]]; then
|
log-fail "Unsupported Linux distribution. Only the following versions are supported: $SUPPORTED_VERSIONS"
|
||||||
export DOKKU_CHECKOUT="$DOKKU_TAG"
|
|
||||||
dokku_install_source
|
|
||||||
else
|
|
||||||
export DOKKU_CHECKOUT="$DOKKU_SEMVER"
|
|
||||||
dokku_install_package
|
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
dokku_install_package
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
echo "--> Installing docker"
|
||||||
|
curl -fsSL https://get.docker.com/ | sh
|
||||||
|
|
||||||
|
echo "--> Installing epel for nginx packages to be available"
|
||||||
|
yum install -y epel-release
|
||||||
|
|
||||||
|
echo "--> Installing herokuish and dokku"
|
||||||
|
curl -s https://packagecloud.io/install/repositories/dokku/dokku/script.rpm.sh | bash
|
||||||
|
if [[ -n $DOKKU_CHECKOUT ]]; then
|
||||||
|
yum -y install herokuish "dokku-$DOKKU_CHECKOUT"
|
||||||
|
else
|
||||||
|
yum -y install herokuish dokku
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "--> Enabling docker and nginx on system startup"
|
||||||
|
systemctl enable docker
|
||||||
|
systemctl enable nginx
|
||||||
|
|
||||||
|
echo "--> Starting nginx"
|
||||||
|
systemctl start nginx
|
||||||
}
|
}
|
||||||
|
|
||||||
bootstrap
|
main() {
|
||||||
|
export DOKKU_DISTRO DOKKU_DISTRO_VERSION
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
DOKKU_DISTRO=$(. /etc/os-release && echo "$ID")
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
DOKKU_DISTRO_VERSION=$(. /etc/os-release && echo "$VERSION_ID")
|
||||||
|
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
export DOKKU_REPO=${DOKKU_REPO:-"https://github.com/dokku/dokku.git"}
|
||||||
|
|
||||||
|
ensure-environment
|
||||||
|
install-requirements
|
||||||
|
install-dokku
|
||||||
|
|
||||||
|
if [[ -f /etc/update-motd.d/99-dokku ]]; then
|
||||||
|
/etc/update-motd.d/99-dokku || true
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
|
|||||||
13
circle.yml
13
circle.yml
@@ -1,13 +0,0 @@
|
|||||||
machine:
|
|
||||||
services:
|
|
||||||
- docker
|
|
||||||
dependencies:
|
|
||||||
cache_directories:
|
|
||||||
- "~/docker"
|
|
||||||
override:
|
|
||||||
- ./tests/ci/parallel_runner.sh setup: { timeout: 300 }
|
|
||||||
post:
|
|
||||||
- sudo -E make -e lint
|
|
||||||
test:
|
|
||||||
override:
|
|
||||||
- ./tests/ci/parallel_runner.sh testing: { parallel: true, timeout: 1800 }
|
|
||||||
48
common.mk
Normal file
48
common.mk
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
GO_ARGS ?=
|
||||||
|
GO_PLUGIN_MAKE_TARGET ?= build
|
||||||
|
GO_REPO_ROOT := /go/src/github.com/dokku/dokku
|
||||||
|
BUILD_IMAGE := golang:1.16.10
|
||||||
|
GO_BUILD_CACHE ?= /tmp/dokku-go-build-cache
|
||||||
|
GO_MOD_CACHE ?= /tmp/dokku-go-mod-mod
|
||||||
|
GO_ROOT_MOUNT ?= $$PWD/../..:$(GO_REPO_ROOT)
|
||||||
|
GOARCH ?= amd64
|
||||||
|
|
||||||
|
.PHONY: build-in-docker build clean src-clean
|
||||||
|
|
||||||
|
build: $(BUILD)
|
||||||
|
|
||||||
|
build-in-docker: clean
|
||||||
|
mkdir -p /tmp/dokku-go-build-cache
|
||||||
|
docker run --rm \
|
||||||
|
-v $(GO_ROOT_MOUNT) \
|
||||||
|
-v $(GO_BUILD_CACHE):/root/.cache \
|
||||||
|
-v $(GO_MOD_CACHE):/go/pkg/mod \
|
||||||
|
-e PLUGIN_NAME=$(PLUGIN_NAME) \
|
||||||
|
-e GO111MODULE=on \
|
||||||
|
-w $(GO_REPO_ROOT)/plugins/$(PLUGIN_NAME) \
|
||||||
|
$(BUILD_IMAGE) \
|
||||||
|
bash -c "GO_ARGS='$(GO_ARGS)' CGO_ENABLED=0 GOOS=linux GOARCH=$(GOARCH) make -j4 $(GO_PLUGIN_MAKE_TARGET)" || exit $$?
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf $(BUILD)
|
||||||
|
find . -xtype l -delete
|
||||||
|
|
||||||
|
commands: **/**/commands.go
|
||||||
|
go build -ldflags="-s -w" $(GO_ARGS) -o commands src/commands/commands.go
|
||||||
|
|
||||||
|
subcommands:
|
||||||
|
go build -ldflags="-s -w" $(GO_ARGS) -o subcommands/subcommands src/subcommands/subcommands.go
|
||||||
|
$(MAKE) $(SUBCOMMANDS)
|
||||||
|
|
||||||
|
subcommands/%:
|
||||||
|
ln -sf subcommands $@
|
||||||
|
|
||||||
|
src-clean:
|
||||||
|
rm -rf .gitignore src vendor Makefile *.go glide.* go.sum go.mod
|
||||||
|
|
||||||
|
triggers:
|
||||||
|
go build -ldflags="-s -w" $(GO_ARGS) -o triggers src/triggers/triggers.go
|
||||||
|
$(MAKE) $(TRIGGERS)
|
||||||
|
|
||||||
|
triggers/%:
|
||||||
|
ln -sf triggers $(shell echo $@ | cut -d '/' -f2)
|
||||||
31
contrib/bash-completion
Normal file
31
contrib/bash-completion
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# bash completion for dokku -*- shell-script -*-
|
||||||
|
|
||||||
|
_dokku_complete_verify() {
|
||||||
|
declare desc="shows bash completion"
|
||||||
|
declare COMMAND="$1"
|
||||||
|
local COMMANDS=""
|
||||||
|
|
||||||
|
_dokku_complete_goals=$(cat "/var/cache/dokku-completion")
|
||||||
|
|
||||||
|
while read -r fn; do
|
||||||
|
if [[ -z "$COMMAND" ]] || [[ "$fn" == $COMMAND* ]]; then
|
||||||
|
COMMANDS="${COMMANDS};${fn}"
|
||||||
|
fi
|
||||||
|
done <<< "$_dokku_complete_goals"
|
||||||
|
|
||||||
|
echo "${COMMANDS#";"}"
|
||||||
|
}
|
||||||
|
|
||||||
|
_dokku() {
|
||||||
|
local cur prev
|
||||||
|
_get_comp_words_by_ref -n : cur
|
||||||
|
|
||||||
|
if [[ ! -f "/var/cache/dokku-completion" ]] || [[ ! -s "/var/cache/dokku-completion" ]]; then
|
||||||
|
dokku --quiet help --all | awk '/^ /{ print $1 }' | sort > "/var/cache/dokku-completion"
|
||||||
|
fi
|
||||||
|
|
||||||
|
opts=$(_dokku_complete_verify "${cur}")
|
||||||
|
COMPREPLY=($(IFS=";" compgen -W "$opts" -- "$cur"))
|
||||||
|
__ltrim_colon_completions "$cur"
|
||||||
|
} &&
|
||||||
|
complete -F _dokku dokku
|
||||||
6
contrib/build-base.Dockerfile
Normal file
6
contrib/build-base.Dockerfile
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
FROM ubuntu:18.04
|
||||||
|
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
RUN apt-get update -qq && apt-get -qq -y --no-install-recommends install gcc git build-essential wget ruby-dev ruby1.9.1 lintian rpm help2man man-db
|
||||||
|
RUN command -v fpm >/dev/null || sudo gem install fpm --no-ri --no-rdoc
|
||||||
82
contrib/build-dokku.Dockerfile
Normal file
82
contrib/build-dokku.Dockerfile
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
FROM dokku/build-base:0.0.1 AS builder
|
||||||
|
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
RUN apt-get update -qq && apt-get -qq -y --no-install-recommends install gcc git build-essential wget ruby-dev ruby1.9.1 lintian rpm help2man man-db
|
||||||
|
RUN command -v fpm >/dev/null || sudo gem install fpm --no-ri --no-rdoc
|
||||||
|
|
||||||
|
ARG GOLANG_VERSION
|
||||||
|
|
||||||
|
RUN wget -qO /tmp/go${GOLANG_VERSION}.linux-amd64.tar.gz https://storage.googleapis.com/golang/go${GOLANG_VERSION}.linux-amd64.tar.gz \
|
||||||
|
&& tar -C /usr/local -xzf /tmp/go${GOLANG_VERSION}.linux-amd64.tar.gz \
|
||||||
|
&& cp /usr/local/go/bin/* /usr/local/bin
|
||||||
|
|
||||||
|
ARG WORKDIR=/go/src/github.com/dokku/dokku
|
||||||
|
|
||||||
|
WORKDIR ${WORKDIR}
|
||||||
|
|
||||||
|
COPY Makefile ${WORKDIR}/
|
||||||
|
COPY *.mk ${WORKDIR}/
|
||||||
|
|
||||||
|
RUN make deb-setup rpm-setup sshcommand plugn
|
||||||
|
|
||||||
|
COPY . ${WORKDIR}
|
||||||
|
|
||||||
|
ENV GOPATH=/go
|
||||||
|
|
||||||
|
FROM builder as amd64
|
||||||
|
|
||||||
|
ARG PLUGIN_MAKE_TARGET
|
||||||
|
ARG DOKKU_VERSION=master
|
||||||
|
ARG DOKKU_GIT_REV
|
||||||
|
ARG IS_RELEASE=false
|
||||||
|
|
||||||
|
RUN PLUGIN_MAKE_TARGET=${PLUGIN_MAKE_TARGET} \
|
||||||
|
DOKKU_VERSION=${DOKKU_VERSION} \
|
||||||
|
DOKKU_GIT_REV=${DOKKU_GIT_REV} \
|
||||||
|
IS_RELEASE=${IS_RELEASE} \
|
||||||
|
SKIP_GO_CLEAN=true \
|
||||||
|
make version copyfiles \
|
||||||
|
&& make deb-dokku rpm-dokku
|
||||||
|
|
||||||
|
FROM builder as armhf
|
||||||
|
|
||||||
|
COPY --from=amd64 /tmp /tmp
|
||||||
|
COPY --from=amd64 /usr/local/share/man/man1/dokku.1 /usr/local/share/man/man1/dokku.1-generated
|
||||||
|
|
||||||
|
RUN rm -rf /tmp/build-dokku
|
||||||
|
|
||||||
|
ARG PLUGIN_MAKE_TARGET
|
||||||
|
ARG DOKKU_VERSION=master
|
||||||
|
ARG DOKKU_GIT_REV
|
||||||
|
ARG IS_RELEASE=false
|
||||||
|
|
||||||
|
RUN PLUGIN_MAKE_TARGET=${PLUGIN_MAKE_TARGET} \
|
||||||
|
DOKKU_VERSION=${DOKKU_VERSION} \
|
||||||
|
DOKKU_GIT_REV=${DOKKU_GIT_REV} \
|
||||||
|
IS_RELEASE=${IS_RELEASE} \
|
||||||
|
SKIP_GO_CLEAN=true \
|
||||||
|
GOARCH=arm make version copyfiles \
|
||||||
|
&& DOKKU_ARCHITECTURE=armhf GOARCH=arm make deb-dokku
|
||||||
|
|
||||||
|
FROM builder as arm64
|
||||||
|
|
||||||
|
COPY --from=armhf /tmp /tmp
|
||||||
|
COPY --from=amd64 /usr/local/share/man/man1/dokku.1 /usr/local/share/man/man1/dokku.1-generated
|
||||||
|
|
||||||
|
RUN rm -rf /tmp/build-dokku
|
||||||
|
|
||||||
|
ARG PLUGIN_MAKE_TARGET
|
||||||
|
ARG DOKKU_VERSION=master
|
||||||
|
ARG DOKKU_GIT_REV
|
||||||
|
ARG IS_RELEASE=false
|
||||||
|
|
||||||
|
RUN PLUGIN_MAKE_TARGET=${PLUGIN_MAKE_TARGET} \
|
||||||
|
DOKKU_VERSION=${DOKKU_VERSION} \
|
||||||
|
DOKKU_GIT_REV=${DOKKU_GIT_REV} \
|
||||||
|
IS_RELEASE=${IS_RELEASE} \
|
||||||
|
SKIP_GO_CLEAN=true \
|
||||||
|
GOARCH=arm64 make version copyfiles \
|
||||||
|
&& DOKKU_ARCHITECTURE=arm64 GOARCH=arm64 make deb-dokku
|
||||||
|
|
||||||
|
RUN ls -lha /tmp/
|
||||||
51
contrib/copy-packages
Normal file
51
contrib/copy-packages
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
#!/usr/bin/env python2.7
|
||||||
|
import os
|
||||||
|
import requests
|
||||||
|
import shutil
|
||||||
|
import subprocess
|
||||||
|
from requests.auth import HTTPBasicAuth
|
||||||
|
|
||||||
|
PACKAGECLOUD_TOKEN = os.getenv('DOKKU_PACKAGECLOUD_TOKEN')
|
||||||
|
|
||||||
|
|
||||||
|
def download_file(filename, url):
|
||||||
|
r = requests.get(url, stream=True)
|
||||||
|
with open(filename, 'wb') as f:
|
||||||
|
shutil.copyfileobj(r.raw, f)
|
||||||
|
|
||||||
|
|
||||||
|
def upload_file(filename):
|
||||||
|
versions = [
|
||||||
|
"focal"
|
||||||
|
]
|
||||||
|
cmd_template = "package_cloud push dokku/dokku/ubuntu/{0} {1}"
|
||||||
|
for version in versions:
|
||||||
|
cmd = cmd_template.format(version, filename)
|
||||||
|
subprocess.call(cmd, shell=True)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
auth = HTTPBasicAuth(PACKAGECLOUD_TOKEN, '')
|
||||||
|
base = requests.get('https://packagecloud.io/api/v1/repos/dokku/dokku/packages/deb/ubuntu/bionic.json',
|
||||||
|
auth=auth)
|
||||||
|
data = base.json()
|
||||||
|
urls = []
|
||||||
|
for package in data:
|
||||||
|
urls.append(package['versions_url'])
|
||||||
|
|
||||||
|
download_urls = {}
|
||||||
|
for url in urls:
|
||||||
|
base = requests.get('https://packagecloud.io{0}'.format(url),
|
||||||
|
auth=auth)
|
||||||
|
data = base.json()
|
||||||
|
for version in data:
|
||||||
|
download_urls['downloads/' + version['filename']] = version['download_url']
|
||||||
|
|
||||||
|
for filename, download_url in download_urls.items():
|
||||||
|
print("downloading {0}".format(filename))
|
||||||
|
download_file(filename, download_url)
|
||||||
|
upload_file(filename)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
8
contrib/dokku-docker-bin.sh
Executable file
8
contrib/dokku-docker-bin.sh
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -eo pipefail
|
||||||
|
[[ $DOKKU_TRACE ]] && set -x && DOKKU_DOCKER_ENV="--env DOKKU_TRACE=on"
|
||||||
|
DOKKU_DOCKER_CONTAINER_NAME=${DOKKU_DOCKER_CONTAINER_NAME:=dokku}
|
||||||
|
|
||||||
|
# TODO: handle cases where we need a tty
|
||||||
|
# shellcheck disable=SC2086
|
||||||
|
docker exec $DOKKU_DOCKER_ENV -i "$DOKKU_DOCKER_CONTAINER_NAME" dokku "$@"
|
||||||
@@ -1,125 +0,0 @@
|
|||||||
#!/usr/bin/env ruby
|
|
||||||
require "sinatra"
|
|
||||||
require "open3"
|
|
||||||
|
|
||||||
if ARGV[0] == "onboot"
|
|
||||||
File.open("/etc/init/dokku-installer.conf", "w") do |f|
|
|
||||||
f.puts "start on runlevel [2345]"
|
|
||||||
f.puts "exec #{File.absolute_path(__FILE__)} selfdestruct"
|
|
||||||
end
|
|
||||||
File.open("/etc/nginx/conf.d/dokku-installer.conf", "w") do |f|
|
|
||||||
f.puts "upstream dokku-installer { server 127.0.0.1:2000; }"
|
|
||||||
f.puts "server {"
|
|
||||||
f.puts " listen 80;"
|
|
||||||
f.puts " location / {"
|
|
||||||
f.puts " proxy_pass http://dokku-installer;"
|
|
||||||
f.puts " }"
|
|
||||||
f.puts "}"
|
|
||||||
end
|
|
||||||
`rm -f /etc/nginx/sites-enabled/*`
|
|
||||||
puts "Installed Upstart service and default Nginx virtualhost for installer to run on boot."
|
|
||||||
exit
|
|
||||||
end
|
|
||||||
|
|
||||||
version = "v0.3.26"
|
|
||||||
dokku_root = ENV["DOKKU_ROOT"] || "/home/dokku"
|
|
||||||
admin_keys = `cat /root/.ssh/authorized_keys`.split("\n")
|
|
||||||
hostname = `bash -c '[[ $(dig +short $HOSTNAME) ]] && echo $HOSTNAME || curl icanhazip.com'`.strip
|
|
||||||
template = DATA.read
|
|
||||||
|
|
||||||
set :port, 2000
|
|
||||||
set :environment, :production
|
|
||||||
disable :protection
|
|
||||||
|
|
||||||
get "/" do
|
|
||||||
ERB.new(template).result binding
|
|
||||||
end
|
|
||||||
|
|
||||||
post "/setup" do
|
|
||||||
if params[:vhost] == "true"
|
|
||||||
File.open("#{dokku_root}/VHOST", "w") {|f| f.write params[:hostname] }
|
|
||||||
else
|
|
||||||
`rm #{dokku_root}/VHOST`
|
|
||||||
end
|
|
||||||
File.open("#{dokku_root}/HOSTNAME", "w") {|f| f.write params[:hostname] }
|
|
||||||
keys = params[:keys].split("\n")
|
|
||||||
keys.each do |k|
|
|
||||||
Open3.capture2("sshcommand acl-add dokku admin", :stdin_data => k)
|
|
||||||
end
|
|
||||||
Thread.new {
|
|
||||||
`rm /etc/nginx/conf.d/dokku-installer.conf && /etc/init.d/nginx stop && /etc/init.d/nginx start`
|
|
||||||
`rm /etc/init/dokku-installer.conf && stop dokku-installer`
|
|
||||||
}.run if ARGV[0] == "selfdestruct"
|
|
||||||
end
|
|
||||||
|
|
||||||
__END__
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>Dokku Setup</title>
|
|
||||||
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" />
|
|
||||||
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="container" style="width: 640px;">
|
|
||||||
<form id="form" role="form">
|
|
||||||
<h1>Dokku Setup <small><%= version %></small></h1>
|
|
||||||
<div class="form-group">
|
|
||||||
<h3><small style="text-transform: uppercase;">Admin Access</small></h3>
|
|
||||||
<label for="key">Public Key</label><br />
|
|
||||||
<textarea class="form-control" name="keys" rows="7" id="key"><% admin_keys.each do |key| %><%= key + "\n" %><% end %></textarea>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<h3><small style="text-transform: uppercase;">Hostname Configuration</small></h3>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="hostname">Hostname</label>
|
|
||||||
<input class="form-control" type="text" id="hostname" name="hostname" value="<%= hostname %>" />
|
|
||||||
</div>
|
|
||||||
<div class="checkbox">
|
|
||||||
<label><input id="vhost" name="vhost" type="checkbox" value="true"> Use <abbr title="Nginx will be run on port 80 and backend to your apps based on hostname">virtualhost naming</abbr> for apps</label>
|
|
||||||
</div>
|
|
||||||
<p>Your app URLs will look like:</p>
|
|
||||||
<pre id="example">http://hostname:port</pre>
|
|
||||||
</div>
|
|
||||||
<button type="button" onclick="setup()" class="btn btn-primary">Finish Setup</button> <span style="padding-left: 20px;" id="result"></span>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<div id="error-output"></div>
|
|
||||||
<script>
|
|
||||||
function setup() {
|
|
||||||
if ($.trim($("#key").val()) == "") {
|
|
||||||
alert("Your admin public key cannot be blank.")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if ($.trim($("#hostname").val()) == "") {
|
|
||||||
alert("Your hostname cannot be blank.")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
data = $("#form").serialize()
|
|
||||||
$("input,textarea,button").prop("disabled", true);
|
|
||||||
$.post('/setup', data)
|
|
||||||
.done(function() {
|
|
||||||
$("#result").html("Success!")
|
|
||||||
window.location.href = "http://progrium.viewdocs.io/dokku/application-deployment";
|
|
||||||
})
|
|
||||||
.fail(function(data) {
|
|
||||||
$("#result").html("Something went wrong...")
|
|
||||||
$("#error-output").html(data.responseText)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function update() {
|
|
||||||
if ($("#vhost").is(":checked") && $("#hostname").val().match(/^(\d{1,3}\.){3}\d{1,3}$/)) {
|
|
||||||
alert("In order to use virtualhost naming, the hostname must not be an IP but a valid domain name.")
|
|
||||||
$("#vhost").prop('checked', false);
|
|
||||||
}
|
|
||||||
if ($("#vhost").is(':checked')) {
|
|
||||||
$("#example").html("http://<app-name>."+$("#hostname").val())
|
|
||||||
} else {
|
|
||||||
$("#example").html("http://"+$("#hostname").val()+":<app-port>")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$("#vhost").change(update);
|
|
||||||
$("#hostname").change(update);
|
|
||||||
update();
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
set -eo pipefail
|
||||||
|
[[ $DOKKU_TRACE ]] && set -x
|
||||||
|
export DOKKU_PORT=${DOKKU_PORT:=22}
|
||||||
|
export DOKKU_HOST=${DOKKU_HOST:=}
|
||||||
|
|
||||||
MOVES=(ABLE ABNORMA AGAIN AIREXPL ANG ANGER ASAIL ATTACK AURORA AWL BAN BAND BARE BEAT BEATED BELLY BIND BITE BLOC BLOOD BODY BOOK BREATH BUMP CAST CHAM CLAMP CLAP CLAW CLEAR CLI CLIP CLOUD CONTRO CONVY COOLHIT CRASH CRY CUT DESCRI D-FIGHT DIG DITCH DIV DOZ DRE DUL DU-PIN DYE EARTH EDU EG-BOMB EGG ELEGY ELE-HIT EMBODY EMPLI ENGL ERUPT EVENS EXPLOR EYES FALL FAST F-CAR F-DANCE FEARS F-FIGHT FIGHT FIR FIRE FIREHIT FLAME FLAP FLASH FLEW FORCE FRA FREEZE FROG G-BIRD GENKISS GIFT G-KISS G-MOUSE GRADE GROW HAMMER HARD HAT HATE H-BOMB HELL-R HEMP HINT HIT HU HUNT HYPNOSI INHA IRO IRONBAR IR-WING J-GUN KEE KICK KNIF KNIFE KNOCK LEVEL LIGH LIGHHIT LIGHT LIVE L-WALL MAD MAJUS MEL MELO MESS MILK MIMI MISS MIXING MOVE MUD NI-BED NOISY NOONLI NULL N-WAVE PAT PEACE PIN PLAN PLANE POIS POL POWDE POWE POWER PRIZE PROTECT PROUD RAGE RECOR REFLAC REFREC REGR RELIV RENEW R-FIGHT RING RKICK ROCK ROUND RUS RUSH SAND SAW SCISSOR SCRA SCRIPT SEEN SERVER SHADOW SHELL SHINE SHO SIGHT SIN SMALL SMELT SMOK SNAKE SNO SNOW SOU SO-WAVE SPAR SPEC SPID S-PIN SPRA STAM STARE STEA STONE STORM STRU STRUG STUDEN SUBS SUCID SUN-LIG SUNRIS SUPLY S-WAVE TAILS TANGL TASTE TELLI THANK TONKICK TOOTH TORL TRAIN TRIKICK TUNGE VOLT WA-GUN WATCH WAVE W-BOMB WFALL WFING WHIP WHIRL WIND WOLF WOOD WOR YUJA)
|
fn-random-number() {
|
||||||
NAMES=(SEED GRASS FLOWE SHAD CABR SNAKE GOLD COW GUIKI PEDAL DELAN B-FLY BIDE KEYU FORK LAP PIGE PIJIA CAML LAT BIRD BABOO VIV ABOKE PIKAQ RYE SAN BREAD LIDEL LIDE PIP PIKEX ROK JUGEN PUD BUDE ZHIB GELU GRAS FLOW LAFUL ATH BALA CORN MOLUF DESP DAKED MIMI BOLUX KODA GELUD MONK SUMOY GEDI WENDI NILEM NILE NILEC KEZI YONGL HUDE WANLI GELI GUAIL MADAQ WUCI WUCI MUJEF JELLY SICIB GELU NELUO BOLI JIALE YED YEDE CLO SCARE AOCO DEDE DEDEI BAWU JIUG BADEB BADEB HOLE BALUX GES FANT QUAR YIHE SWAB SLIPP CLU DEPOS BILIY YUANO SOME NO YELA EMPT ZECUN XIAHE BOLEL DEJI MACID XIHON XITO LUCK MENJI GELU DECI XIDE DASAJ DONGN RICUL MINXI BALIY ZENDA LUZEL HELE5 0FENB KAIL JIAND CARP JINDE LAPU MUDE YIFU LINLI SANDI HUSI JINC OUMU OUMUX CAP KUIZA PUD TIAO FRMAN CLAU SPARK DRAGO BOLIU GUAIL MIYOU MIY QIAOK BEIL MUKEI RIDED MADAM BAGEP CROC ALIGE OUDAL OUD DADA HEHE YEDEA NUXI NUXIN ROUY ALIAD STICK QIANG LAAND PIQI PI PUPI DEKE DEKEJ NADI NADIO MALI PEA ELECT FLOWE MAL MALI HUSHU NILEE YUZI POPOZ DUZI HEBA XIAN SHAN YEYEA WUY LUO KEFE HULA CROW YADEH MOW ANNAN SUONI KYLI HULU HUDEL YEHE GULAE YEHE BLU GELAN BOAT NIP POIT HELAK XINL BEAR LINB MAGEH MAGEJ WULI YIDE RIVE FISH AOGU DELIE MANTE KONMU DELU HELU HUAN HUMA DONGF JINCA HEDE DEFU LIBY JIAPA MEJI HELE BUHU MILK HABI THUN GARD DON YANGQ SANAQ BANQ LUJ PHIX SIEI EGG)
|
|
||||||
|
|
||||||
random_number() {
|
|
||||||
[[ -n "$1" ]] && RANGE="$1"
|
[[ -n "$1" ]] && RANGE="$1"
|
||||||
if [[ -n "$RANGE" ]];then
|
if [[ -n "$RANGE" ]]; then
|
||||||
number=$RANDOM
|
number=$RANDOM
|
||||||
let "number %= $RANGE"
|
let "number %= $RANGE"
|
||||||
else
|
else
|
||||||
@@ -15,119 +15,152 @@ random_number() {
|
|||||||
echo $number
|
echo $number
|
||||||
}
|
}
|
||||||
|
|
||||||
random_name() {
|
fn-random-name() {
|
||||||
NUM1=$(random_number ${#MOVES[@]})
|
local NUM1 NUM2 NUM3 UPPER_APPNAME lower_appname
|
||||||
NUM2=$(random_number ${#MOVES[@]})
|
local MOVES=(ABLE ABNORMA AGAIN AIREXPL ANG ANGER ASAIL ATTACK AURORA AWL BAN BAND BARE BEAT BEATED BELLY BIND BITE BLOC BLOOD BODY BOOK BREATH BUMP CAST CHAM CLAMP CLAP CLAW CLEAR CLI CLIP CLOUD CONTRO CONVY COOLHIT CRASH CRY CUT DESCRI D-FIGHT DIG DITCH DIV DOZ DRE DUL DU-PIN DYE EARTH EDU EG-BOMB EGG ELEGY ELE-HIT EMBODY EMPLI ENGL ERUPT EVENS EXPLOR EYES FALL FAST F-CAR F-DANCE FEARS F-FIGHT FIGHT FIR FIRE FIREHIT FLAME FLAP FLASH FLEW FORCE FRA FREEZE FROG G-BIRD GENKISS GIFT G-KISS G-MOUSE GRADE GROW HAMMER HARD HAT HATE H-BOMB HELL-R HEMP HINT HIT HU HUNT HYPNOSI INHA IRO IRONBAR IR-WING J-GUN KEE KICK KNIF KNIFE KNOCK LEVEL LIGH LIGHHIT LIGHT LIVE L-WALL MAD MAJUS MEL MELO MESS MILK MIMI MISS MIXING MOVE MUD NI-BED NOISY NOONLI NULL N-WAVE PAT PEACE PIN PLAN PLANE POIS POL POWDE POWE POWER PRIZE PROTECT PROUD RAGE RECOR REFLAC REFREC REGR RELIV RENEW R-FIGHT RING RKICK ROCK ROUND RUS RUSH SAND SAW SCISSOR SCRA SCRIPT SEEN SERVER SHADOW SHELL SHINE SHO SIGHT SIN SMALL SMELT SMOK SNAKE SNO SNOW SOU SO-WAVE SPAR SPEC SPID S-PIN SPRA STAM STARE STEA STONE STORM STRU STRUG STUDEN SUBS SUCID SUN-LIG SUNRIS SUPLY S-WAVE TAILS TANGL TASTE TELLI THANK TONKICK TOOTH TORL TRAIN TRIKICK TUNGE VOLT WA-GUN WATCH WAVE W-BOMB WFALL WFING WHIP WHIRL WIND WOLF WOOD WOR YUJA)
|
||||||
NUM3=$(random_number ${#NAMES[@]})
|
local NAMES=(SEED GRASS FLOWE SHAD CABR SNAKE GOLD COW GUIKI PEDAL DELAN B-FLY BIDE KEYU FORK LAP PIGE PIJIA CAML LAT BIRD BABOO VIV ABOKE PIKAQ RYE SAN BREAD LIDEL LIDE PIP PIKEX ROK JUGEN PUD BUDE ZHIB GELU GRAS FLOW LAFUL ATH BALA CORN MOLUF DESP DAKED MIMI BOLUX KODA GELUD MONK SUMOY GEDI WENDI NILEM NILE NILEC KEZI YONGL HUDE WANLI GELI GUAIL MADAQ WUCI WUCI MUJEF JELLY SICIB GELU NELUO BOLI JIALE YED YEDE CLO SCARE AOCO DEDE DEDEI BAWU JIUG BADEB BADEB HOLE BALUX GES FANT QUAR YIHE SWAB SLIPP CLU DEPOS BILIY YUANO SOME NO YELA EMPT ZECUN XIAHE BOLEL DEJI MACID XIHON XITO LUCK MENJI GELU DECI XIDE DASAJ DONGN RICUL MINXI BALIY ZENDA LUZEL HELE5 0FENB KAIL JIAND CARP JINDE LAPU MUDE YIFU LINLI SANDI HUSI JINC OUMU OUMUX CAP KUIZA PUD TIAO FRMAN CLAU SPARK DRAGO BOLIU GUAIL MIYOU MIY QIAOK BEIL MUKEI RIDED MADAM BAGEP CROC ALIGE OUDAL OUD DADA HEHE YEDEA NUXI NUXIN ROUY ALIAD STICK QIANG LAAND PIQI PI PUPI DEKE DEKEJ NADI NADIO MALI PEA ELECT FLOWE MAL MALI HUSHU NILEE YUZI POPOZ DUZI HEBA XIAN SHAN YEYEA WUY LUO KEFE HULA CROW YADEH MOW ANNAN SUONI KYLI HULU HUDEL YEHE GULAE YEHE BLU GELAN BOAT NIP POIT HELAK XINL BEAR LINB MAGEH MAGEJ WULI YIDE RIVE FISH AOGU DELIE MANTE KONMU DELU HELU HUAN HUMA DONGF JINCA HEDE DEFU LIBY JIAPA MEJI HELE BUHU MILK HABI THUN GARD DON YANGQ SANAQ BANQ LUJ PHIX SIEI EGG)
|
||||||
|
|
||||||
UPPER_APPNAME="${MOVES[${NUM1}]}-${MOVES[${NUM2}]}-${NAMES[${NUM3}]}"
|
NUM1=$(fn-random-number ${#MOVES[@]})
|
||||||
|
NUM2=$(fn-random-number ${#MOVES[@]})
|
||||||
|
NUM3=$(fn-random-number ${#NAMES[@]})
|
||||||
|
|
||||||
[[ "$BASH_VERSION" =~ 4.* ]] && lower_appname=${UPPER_APPNAME,,}
|
UPPER_APPNAME="${MOVES[${NUM1}]}-${MOVES[${NUM2}]}-${NAMES[${NUM3}]}"
|
||||||
[[ -z "$lower_appname" ]] && lower_appname=$(echo $UPPER_APPNAME | tr '[:upper:]' '[:lower:]')
|
|
||||||
echo "$lower_appname"
|
[[ "$BASH_VERSION" =~ 4.* ]] && lower_appname=${UPPER_APPNAME,,}
|
||||||
|
[[ -z "$lower_appname" ]] && lower_appname=$(echo "$UPPER_APPNAME" | tr '[:upper:]' '[:lower:]')
|
||||||
|
echo "$lower_appname"
|
||||||
}
|
}
|
||||||
|
|
||||||
client_help_msg() {
|
fn-client-help-msg() {
|
||||||
echo "==> Configure the DOKKU_HOST environment variable or run $0 from a repository with a git remote named dokku"
|
echo "=====> Configure the DOKKU_HOST environment variable or run $0 from a repository with a git remote named dokku"
|
||||||
echo "--> i.e. git remote add dokku dokku@<dokku-host>:<app-name>"
|
echo " i.e. git remote add dokku dokku@<dokku-host>:<app-name>"
|
||||||
exit 20 # exit with specific status. only used in units tests for now
|
exit 20 # exit with specific status. only used in units tests for now
|
||||||
}
|
}
|
||||||
|
|
||||||
if [[ -z $DOKKU_HOST ]]; then
|
fn-is-git-repo() {
|
||||||
if [[ -d .git ]] || git rev-parse --git-dir > /dev/null 2>&1; then
|
git rev-parse &>/dev/null
|
||||||
DOKKU_HOST=$(git remote -v 2>/dev/null | grep -Ei "^dokku" | head -n 1 | cut -f1 -d' ' | cut -f2 -d '@' | cut -f1 -d':' 2>/dev/null || true)
|
}
|
||||||
else
|
|
||||||
client_help_msg
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ! -z $DOKKU_HOST ]]; then
|
fn-has-dokku-remote() {
|
||||||
_dokku() {
|
git remote show | grep -E "^${DOKKU_GIT_REMOTE}\s"
|
||||||
appname=""
|
}
|
||||||
if [[ -d .git ]] || git rev-parse --git-dir > /dev/null 2>&1; then
|
|
||||||
|
fn-dokku-host() {
|
||||||
|
declare DOKKU_GIT_REMOTE="$1" DOKKU_HOST="$2"
|
||||||
|
|
||||||
|
if [[ -z "$DOKKU_HOST" ]]; then
|
||||||
|
if [[ -d .git ]] || git rev-parse --git-dir >/dev/null 2>&1; then
|
||||||
|
DOKKU_HOST=$(git remote -v 2>/dev/null | grep -Ei "^${DOKKU_GIT_REMOTE}\s" | head -n 1 | cut -f1 -d' ' | cut -f2 -d '@' | cut -f1 -d':' 2>/dev/null || true)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$DOKKU_HOST" ]]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$DOKKU_HOST"
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
declare CMD="$1" APP_ARG="$2"
|
||||||
|
local APP="" DOKKU_GIT_REMOTE="dokku" DOKKU_REMOTE_HOST=""
|
||||||
|
local cmd_set=false next_index=1 skip=false args=("$@")
|
||||||
|
|
||||||
|
for arg in "$@"; do
|
||||||
|
if [[ "$skip" == "true" ]]; then
|
||||||
|
next_index=$((next_index + 1))
|
||||||
|
skip=false
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
is_flag=false
|
||||||
|
|
||||||
|
[[ "$arg" =~ ^--.* ]] && is_flag=true
|
||||||
|
|
||||||
|
if [[ "$arg" == "--app" ]]; then
|
||||||
|
APP=${args[$next_index]}
|
||||||
|
skip=true
|
||||||
|
shift 2
|
||||||
|
elif [[ "$arg" == "--remote" ]]; then
|
||||||
|
DOKKU_GIT_REMOTE=${args[$next_index]}
|
||||||
|
skip=true
|
||||||
|
shift 2
|
||||||
|
elif [[ "$arg" =~ ^--.* ]]; then
|
||||||
|
[[ "$cmd_set" == "true" ]] && [[ "$is_flag" == "false" ]] && APP_ARG="$arg" && break
|
||||||
|
[[ "$arg" == "--trace" ]] && export DOKKU_TRACE=1 && set -x
|
||||||
|
else
|
||||||
|
if [[ "$cmd_set" == "true" ]] && [[ "$is_flag" == "false" ]]; then
|
||||||
|
APP_ARG="$arg"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
CMD="$arg"
|
||||||
|
cmd_set=true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
next_index=$((next_index + 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
DOKKU_REMOTE_HOST="$(fn-dokku-host "$DOKKU_GIT_REMOTE" "$DOKKU_HOST")"
|
||||||
|
if [[ -z "$DOKKU_REMOTE_HOST" ]]; then
|
||||||
|
fn-client-help-msg
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$APP" ]]; then
|
||||||
|
if [[ -d .git ]] || git rev-parse --git-dir >/dev/null 2>&1; then
|
||||||
set +e
|
set +e
|
||||||
appname=$(git remote -v 2>/dev/null | grep -Ei "dokku@$DOKKU_HOST" | head -n 1 | cut -f1 -d' ' | cut -f2 -d':' 2>/dev/null)
|
APP=$(git remote -v 2>/dev/null | grep -Ei "^${DOKKU_GIT_REMOTE}\s" | grep -Ei "dokku@$DOKKU_REMOTE_HOST" | head -n 1 | cut -f2 -d'@' | cut -f1 -d' ' | cut -f2 -d':' 2>/dev/null)
|
||||||
set -e
|
set -e
|
||||||
else
|
else
|
||||||
echo "This is not a git repository"
|
echo " ! This is not a git repository" 1>&2
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ "$appname" != "" ]] && [[ -n "$*" ]]; then
|
case "$CMD" in
|
||||||
case "$1" in
|
apps:create)
|
||||||
apps|backup*|help|plugins*|ps:restartall|trace|version)
|
if [[ -z "$APP" ]] && [[ -z "$APP_ARG" ]]; then
|
||||||
true
|
APP=$(fn-random-name)
|
||||||
;;
|
counter=0
|
||||||
apps:destroy)
|
while ssh -p "$DOKKU_PORT" "dokku@$DOKKU_REMOTE_HOST" apps 2>/dev/null | grep -q "$APP"; do
|
||||||
if [[ -z "$2" ]] || [[ "$2" == "force" ]];then
|
if [[ $counter -ge 100 ]]; then
|
||||||
donotshift="YES"
|
echo " ! Could not reasonably generate a new app name. Try cleaning up some apps..." 1>&2
|
||||||
fi
|
ssh -p "$DOKKU_PORT" "dokku@$DOKKU_REMOTE_HOST" apps
|
||||||
;;
|
exit 1
|
||||||
*)
|
|
||||||
donotshift="YES"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$1" = "apps:create" ]] && [[ -z "$2" ]]; then
|
|
||||||
appname=$(random_name)
|
|
||||||
counter=0
|
|
||||||
while ssh "dokku@$DOKKU_HOST" apps 2>/dev/null| grep -q "$appname"; do
|
|
||||||
if [[ $counter -ge 100 ]];then
|
|
||||||
echo "Error: could not reasonably generate a new app name. try cleaning up some apps..."
|
|
||||||
ssh "dokku@$DOKKU_HOST" apps
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
appname=$(random_name)
|
|
||||||
counter=$((counter+1))
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if git remote add dokku "dokku@$DOKKU_HOST:$appname"
|
|
||||||
then
|
|
||||||
echo "-----> Dokku remote added at $DOKKU_HOST"
|
|
||||||
echo "-----> Application name is $appname"
|
|
||||||
else
|
|
||||||
echo "! Dokku remote not added! Do you already have a dokku remote?"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
git push dokku master
|
|
||||||
return $?
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z "$donotshift" ]]; then
|
|
||||||
ssh -t "dokku@$DOKKU_HOST" "$@"
|
|
||||||
exit $?
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z "$verb" ]]; then
|
|
||||||
if [[ ! "$1" =~ --* ]]; then
|
|
||||||
verb=$1
|
|
||||||
shift
|
|
||||||
|
|
||||||
if [[ "$1" == "$appname" ]]; then
|
|
||||||
shift
|
|
||||||
fi
|
|
||||||
|
|
||||||
args="$*"
|
|
||||||
else
|
|
||||||
long_args="--"
|
|
||||||
for arg in "$@";do
|
|
||||||
if [[ "$arg" =~ --* ]];then
|
|
||||||
long_args+=" $arg"
|
|
||||||
args=("${args[@]/$arg}")
|
|
||||||
else
|
else
|
||||||
verb="$arg"
|
APP=$(random_name)
|
||||||
|
counter=$((counter + 1))
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
elif [[ -z "$APP" ]]; then
|
||||||
|
APP="$APP_ARG"
|
||||||
fi
|
fi
|
||||||
fi
|
if git remote add "$DOKKU_GIT_REMOTE" "dokku@$DOKKU_REMOTE_HOST:$APP"; then
|
||||||
# shellcheck disable=SC2086
|
echo "-----> Dokku remote added at ${DOKKU_REMOTE_HOST} called ${DOKKU_GIT_REMOTE}"
|
||||||
ssh -t "dokku@$DOKKU_HOST" $long_args "$verb" "$appname" "${args[@]}"
|
echo "-----> Application name is ${APP}"
|
||||||
}
|
else
|
||||||
|
echo " ! Dokku remote not added! Do you already have a dokku remote?" 1>&2
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
apps:destroy)
|
||||||
|
fn-is-git-repo && fn-has-dokku-remote && git remote remove "$DOKKU_GIT_REMOTE"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
if [[ "$0" == "dokku" ]] || [[ "$0" == *dokku_client.sh ]] || [[ "$0" == $(which dokku) ]]; then
|
[[ " apps certs help ls nginx shell storage trace version " == *" $CMD "* ]] && unset APP
|
||||||
_dokku "$@"
|
[[ " certs:chain domains:add-global domains:remove-global domains:set-global ps:restore " == *" $CMD "* ]] && unset APP
|
||||||
exit $?
|
[[ "$CMD" =~ events*|plugin*|ssh-keys* ]] && unset APP
|
||||||
fi
|
[[ -n "$APP_ARG" ]] && [[ "$APP_ARG" == "--global" ]] && unset APP
|
||||||
else
|
[[ -n "$@" ]] && [[ -n "$APP" ]] && app_arg="--app $APP"
|
||||||
client_help_msg
|
# echo "ssh -o LogLevel=QUIET -p $DOKKU_PORT -t dokku@$DOKKU_REMOTE_HOST -- $app_arg $@"
|
||||||
|
# shellcheck disable=SC2068,SC2086
|
||||||
|
ssh -o LogLevel=QUIET -p $DOKKU_PORT -t dokku@$DOKKU_REMOTE_HOST -- $app_arg $@ || {
|
||||||
|
ssh_exit_code="$?"
|
||||||
|
echo " ! Failed to execute dokku command over ssh: exit code $?" 1>&2
|
||||||
|
echo " ! If there was no output from Dokku, ensure your configured SSH Key can connect to the remote server" 1>&2
|
||||||
|
return $ssh_exit_code
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ "$0" == "dokku" ]] || [[ "$0" == *dokku_client.sh ]] || [[ "$0" == $(command -v dokku) ]]; then
|
||||||
|
main "$@"
|
||||||
|
exit $?
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -19,10 +19,10 @@
|
|||||||
"sleep 30",
|
"sleep 30",
|
||||||
|
|
||||||
"echo '--> Updating apt repositories'",
|
"echo '--> Updating apt repositories'",
|
||||||
"sudo apt-get update > /dev/null",
|
"sudo apt-get update -qq >/dev/null",
|
||||||
|
|
||||||
"echo '--> Installing make requirement'",
|
"echo '--> Installing make requirement'",
|
||||||
"sudo apt-get -qq -y install build-essential",
|
"sudo apt-get -qq -y --no-install-recommends install build-essential",
|
||||||
|
|
||||||
"cd /tmp && make install-from-deb",
|
"cd /tmp && make install-from-deb",
|
||||||
"rm /root/.ssh/authorized_keys"
|
"rm /root/.ssh/authorized_keys"
|
||||||
|
|||||||
436
contrib/release-dokku
Executable file
436
contrib/release-dokku
Executable file
@@ -0,0 +1,436 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -eo pipefail
|
||||||
|
[[ $TRACE ]] && set -x
|
||||||
|
|
||||||
|
readonly ROOT_DIR="$(cd "$(dirname "$(dirname "${BASH_SOURCE[0]}")")" && pwd)"
|
||||||
|
readonly TMP_WORK_DIR="$(mktemp -d "/tmp/dokku-release.XXXXXX")"
|
||||||
|
readonly DOKKU_GIT_REV="$(git rev-parse HEAD)"
|
||||||
|
|
||||||
|
trap "rm -rf '$TMP_WORK_DIR' >/dev/null" RETURN INT TERM EXIT
|
||||||
|
|
||||||
|
log-info() {
|
||||||
|
# shellcheck disable=SC2034
|
||||||
|
declare desc="Log info formatter"
|
||||||
|
echo "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
log-error() {
|
||||||
|
# shellcheck disable=SC2034
|
||||||
|
declare desc="Log error formatter"
|
||||||
|
echo "! $*" 1>&2
|
||||||
|
}
|
||||||
|
|
||||||
|
log-fail() {
|
||||||
|
# shellcheck disable=SC2034
|
||||||
|
declare desc="Log fail formatter"
|
||||||
|
log-error "$*"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
fn-build-dokku() {
|
||||||
|
declare desc="Builds dokku packages within a docker container"
|
||||||
|
declare IS_RELEASE="$1" DOKKU_VERSION="$2"
|
||||||
|
local NAME GOLANG_VERSION
|
||||||
|
|
||||||
|
if [[ -z "$DOKKU_VERSION" ]]; then
|
||||||
|
log-error "Invalid deb file specified"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
NAME="dokku:build"
|
||||||
|
[[ "$IS_RELEASE" == "true" ]] && NAME="dokku:build-release"
|
||||||
|
[[ -n "$DOKKU_VERSION" ]] || DOKKU_VERSION="master"
|
||||||
|
|
||||||
|
pushd "$ROOT_DIR" >/dev/null
|
||||||
|
GOLANG_VERSION="$(grep BUILD_IMAGE common.mk | cut -d' ' -f3 | cut -d':' -f2)"
|
||||||
|
docker build \
|
||||||
|
--build-arg DOKKU_VERSION="$DOKKU_VERSION" \
|
||||||
|
--build-arg DOKKU_GIT_REV="$DOKKU_GIT_REV" \
|
||||||
|
--build-arg IS_RELEASE="$IS_RELEASE" \
|
||||||
|
--build-arg PLUGIN_MAKE_TARGET="build" \
|
||||||
|
--build-arg GOLANG_VERSION="$GOLANG_VERSION" \
|
||||||
|
--progress plain \
|
||||||
|
-f "contrib/build-dokku.Dockerfile" \
|
||||||
|
-t "$NAME" .
|
||||||
|
return "$?"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn-extract-package() {
|
||||||
|
declare desc="Extract packages from a docker container to the root directory"
|
||||||
|
declare IS_RELEASE="$1" PACKAGE_NAME="$2"
|
||||||
|
local NAME
|
||||||
|
|
||||||
|
if [[ -z "$PACKAGE_NAME" ]]; then
|
||||||
|
log-error "Invalid deb file specified"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
NAME="dokku:build"
|
||||||
|
[[ "$IS_RELEASE" == "true" ]] && NAME="dokku:build-release"
|
||||||
|
|
||||||
|
log-info "(extract-package) writing ${PACKAGE_NAME} to correct path"
|
||||||
|
docker run --rm --entrypoint cat "$NAME" "/tmp/${PACKAGE_NAME}" >"${ROOT_DIR}/build/${PACKAGE_NAME}"
|
||||||
|
return "$?"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn-in-array() {
|
||||||
|
declare desc="return true if value ($1) is in list (all other arguments)"
|
||||||
|
|
||||||
|
local e
|
||||||
|
for e in "${@:2}"; do
|
||||||
|
[[ "$e" == "$1" ]] && return 0
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
fn-is-release() {
|
||||||
|
declare desc="Checks if a given run is a release run"
|
||||||
|
declare RELEASE="$1"
|
||||||
|
local IS_RELEASE=false
|
||||||
|
if [[ "$RELEASE" == "major" ]] || [[ "$RELEASE" == "minor" ]] || [[ "$RELEASE" == "patch" ]]; then
|
||||||
|
IS_RELEASE=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$IS_RELEASE"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn-version-current() {
|
||||||
|
declare desc="Retrieves the current version of dokku"
|
||||||
|
pushd "$ROOT_DIR" >/dev/null
|
||||||
|
grep Version debian/control | cut -d' ' -f2
|
||||||
|
}
|
||||||
|
|
||||||
|
fn-version-next() {
|
||||||
|
declare desc="Calculates the next version name of dokku"
|
||||||
|
declare CURRENT_VERSION="$1" RELEASE="$2"
|
||||||
|
local major minor patch short_object
|
||||||
|
|
||||||
|
major=$(echo "$CURRENT_VERSION" | awk '{split($0,a,"."); print a[1]}')
|
||||||
|
minor=$(echo "$CURRENT_VERSION" | awk '{split($0,a,"."); print a[2]}')
|
||||||
|
patch=$(echo "$CURRENT_VERSION" | awk '{split($0,a,"."); print a[3]}')
|
||||||
|
|
||||||
|
if [[ "$RELEASE" == "major" ]]; then
|
||||||
|
major=$((major + 1))
|
||||||
|
minor="0"
|
||||||
|
patch="0"
|
||||||
|
elif [[ "$RELEASE" == "minor" ]]; then
|
||||||
|
minor=$((minor + 1))
|
||||||
|
patch="0"
|
||||||
|
elif [[ "$RELEASE" == "patch" ]]; then
|
||||||
|
patch=$((patch + 1))
|
||||||
|
else
|
||||||
|
short_object=$(git log --oneline | tail -n 1 | cut -d' ' -f1)
|
||||||
|
echo "${CURRENT_VERSION}build+$(echo "$DOKKU_GIT_REV" | cut -c1-${#short_object})"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "${major}.${minor}.${patch}"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn-publish-package() {
|
||||||
|
declare desc="Publishes a package to packagecloud"
|
||||||
|
declare IS_RELEASE="$1" RELEASE_TYPE="$2" PACKAGE_NAME="$3"
|
||||||
|
local REPOSITORY=dokku/dokku-betafish DIST=ubuntu EXIT_CODE=0
|
||||||
|
local OS_ID ex
|
||||||
|
|
||||||
|
[[ "$IS_RELEASE" == "true" ]] && REPOSITORY=dokku/dokku
|
||||||
|
[[ "$RELEASE_TYPE" == "rpm" ]] && DIST=el/7
|
||||||
|
[[ "$RELEASE_TYPE" == "raspbian" ]] && DIST=raspbian
|
||||||
|
|
||||||
|
if [[ "$RELEASE_TYPE" == "raspbian" ]]; then
|
||||||
|
OS_IDS=("buster" "bullseye")
|
||||||
|
for OS_ID in "${OS_IDS[@]}"; do
|
||||||
|
log-info "(release-dokku) pushing deb to packagecloud.com/${REPOSITORY}/${DIST}"
|
||||||
|
package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME"
|
||||||
|
ex="$?"
|
||||||
|
if [[ "$ex" -ne "0" ]]; then
|
||||||
|
EXIT_CODE="$ex"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
elif [[ "$DIST" == "ubuntu" ]]; then
|
||||||
|
OS_IDS=("bionic" "focal")
|
||||||
|
for OS_ID in "${OS_IDS[@]}"; do
|
||||||
|
log-info "(release-dokku) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}"
|
||||||
|
package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME"
|
||||||
|
ex="$?"
|
||||||
|
if [[ "$ex" -ne "0" ]]; then
|
||||||
|
EXIT_CODE="$ex"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
DIST=debian
|
||||||
|
OS_IDS=("stretch" "buster" "bullseye")
|
||||||
|
for OS_ID in "${OS_IDS[@]}"; do
|
||||||
|
log-info "(release-dokku) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}"
|
||||||
|
package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME"
|
||||||
|
ex="$?"
|
||||||
|
if [[ "$ex" -ne "0" ]]; then
|
||||||
|
EXIT_CODE="$ex"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
log-info "(release-dokku) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}"
|
||||||
|
package_cloud push "${REPOSITORY}/${DIST}" "$PACKAGE_NAME"
|
||||||
|
EXIT_CODE="$?"
|
||||||
|
fi
|
||||||
|
return "$EXIT_CODE"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn-replace-version() {
|
||||||
|
declare desc="Replaces the version within a file"
|
||||||
|
local CURRENT_VERSION="$1"
|
||||||
|
local NEXT_VERSION="$2"
|
||||||
|
local FILENAME="$3"
|
||||||
|
sed -i.bak "s/${CURRENT_VERSION//./\.}/$NEXT_VERSION/g" "$FILENAME" && rm "$FILENAME.bak"
|
||||||
|
git add "$FILENAME"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn-repo-merged-requests() {
|
||||||
|
declare desc="Retrieves all pull request ids since a given release of dokku"
|
||||||
|
declare TAG="$1"
|
||||||
|
git log "v${TAG}..HEAD" --oneline | grep "Merge pull request" | cut -d' ' -f 5 | cut -d '#' -f2
|
||||||
|
}
|
||||||
|
|
||||||
|
fn-repo-push-tags() {
|
||||||
|
declare desc="Pushes tags and the repository to github"
|
||||||
|
declare IS_RELEASE="$1"
|
||||||
|
|
||||||
|
if [[ "$IS_RELEASE" == "false" ]]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
pushd "$ROOT_DIR" >/dev/null
|
||||||
|
git push --tags origin master
|
||||||
|
}
|
||||||
|
|
||||||
|
fn-repo-update() {
|
||||||
|
declare desc="Updates files within the repository for a given release"
|
||||||
|
declare IS_RELEASE="$1" CURRENT_VERSION="$2" NEXT_VERSION="$3"
|
||||||
|
|
||||||
|
log-info "(release-dokku) Replacing ${CURRENT_VERSION} with ${NEXT_VERSION}"
|
||||||
|
for f in plugins/*/plugin.toml; do
|
||||||
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" "$f"
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "$IS_RELEASE" == "false" ]]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" debian/control
|
||||||
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" Dockerfile
|
||||||
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/advanced-usage/plugin-management.md
|
||||||
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/assets/favicons/browserconfig.xml
|
||||||
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/assets/favicons/manifest.json
|
||||||
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/assets/style.css
|
||||||
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/development/release-process.md
|
||||||
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/getting-started/install/docker.md
|
||||||
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/getting-started/installation.md
|
||||||
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/home.html
|
||||||
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/template.html
|
||||||
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" README.md
|
||||||
|
|
||||||
|
if [[ "$RELEASE" == 'patch' ]]; then
|
||||||
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" docs/assets/versions.json
|
||||||
|
else
|
||||||
|
versions=$(python -c 'import json,sys;d=json.load(sys.stdin);d["max-versions"].append("'"${NEXT_VERSION}"'"); print(json.dumps(d, indent=2, sort_keys=True))' <docs/assets/versions.json)
|
||||||
|
echo "$versions" >docs/assets/versions.json
|
||||||
|
git add docs/assets/versions.json
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$IS_RELEASE" == "false" ]]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
log-info "(release-dokku) Adding HISTORY.md, committing and tagging"
|
||||||
|
fn-repo-update-history-and-commit "$CURRENT_VERSION" "$NEXT_VERSION"
|
||||||
|
git tag "v${NEXT_VERSION}"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn-repo-update-history-and-commit() {
|
||||||
|
declare desc="Updates the history file and commits the changes"
|
||||||
|
declare CURRENT_VERSION="$1" NEXT_VERSION="$2"
|
||||||
|
local PULL_REQUEST_ID TITLE AUTHOR TYPE CHANGELOG_TEXT
|
||||||
|
local COMMIT_MESSAGE HISTORY HISTORY_CONTENTS HISTORY_DOCUMENTATION HISTORY_ENHANCEMENT HISTORY_BC_BREAK HISTORY_REFACTOR HISTORY_BUG HISTORY_OTHER HISTORY_TESTS ISSUE_FILE
|
||||||
|
|
||||||
|
pushd "$ROOT_DIR" >/dev/null
|
||||||
|
|
||||||
|
mkdir -p /tmp/github-data
|
||||||
|
|
||||||
|
for PULL_REQUEST_ID in $(fn-repo-merged-requests "$CURRENT_VERSION"); do
|
||||||
|
ISSUE_FILE="/tmp/github-data/${PULL_REQUEST_ID}.json"
|
||||||
|
if [[ ! -f "$ISSUE_FILE" ]]; then
|
||||||
|
curl -sS "https://api.github.com/repos/dokku/dokku/issues/${PULL_REQUEST_ID}" >"$ISSUE_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
TITLE="$(jq -r '.title' "$ISSUE_FILE")"
|
||||||
|
AUTHOR="$(jq -r '.user.login' "$ISSUE_FILE")"
|
||||||
|
TYPE="$(jq -r '.labels[] | select( .name | contains("type") ) | .name' "$ISSUE_FILE" | cut -d' ' -f2)"
|
||||||
|
CHANGELOG_TEXT="- #${PULL_REQUEST_ID}: @${AUTHOR} ${TITLE}"
|
||||||
|
|
||||||
|
if [[ "$TYPE" == "bc-break" ]]; then
|
||||||
|
HISTORY_BC_BREAK="${HISTORY_BC_BREAK}"$'\n'"$CHANGELOG_TEXT"
|
||||||
|
elif [[ "$TYPE" == "bug" ]]; then
|
||||||
|
HISTORY_BUG="${HISTORY_BUG}"$'\n'"$CHANGELOG_TEXT"
|
||||||
|
elif [[ "$TYPE" == "documentation" ]]; then
|
||||||
|
HISTORY_DOCUMENTATION="${HISTORY_DOCUMENTATION}"$'\n'"$CHANGELOG_TEXT"
|
||||||
|
elif [[ "$TYPE" == "enhancement" ]]; then
|
||||||
|
HISTORY_ENHANCEMENT="${HISTORY_ENHANCEMENT}"$'\n'"$CHANGELOG_TEXT"
|
||||||
|
elif [[ "$TYPE" == "refactor" ]]; then
|
||||||
|
HISTORY_REFACTOR="${HISTORY_REFACTOR}"$'\n'"$CHANGELOG_TEXT"
|
||||||
|
elif [[ "$TYPE" == "tests" ]]; then
|
||||||
|
HISTORY_TESTS="${HISTORY_TESTS}"$'\n'"$CHANGELOG_TEXT"
|
||||||
|
else
|
||||||
|
HISTORY_OTHER="${HISTORY_OTHER}"$'\n'"$CHANGELOG_TEXT"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
HISTORY="# History"
|
||||||
|
HISTORY="${HISTORY}"$'\n\n'"## ${NEXT_VERSION}"
|
||||||
|
HISTORY="${HISTORY}"$'\n\n'"Install/update via the bootstrap script:"
|
||||||
|
HISTORY="${HISTORY}"$'\n\n'"\`\`\`shell"
|
||||||
|
HISTORY="${HISTORY}"$'\n'"wget https://raw.githubusercontent.com/dokku/dokku/v${NEXT_VERSION}/bootstrap.sh"
|
||||||
|
HISTORY="${HISTORY}"$'\n'"sudo DOKKU_TAG=v${NEXT_VERSION} bash bootstrap.sh"
|
||||||
|
HISTORY="${HISTORY}"$'\n'"\`\`\`"
|
||||||
|
|
||||||
|
if [[ -f "docs/appendices/${NEXT_VERSION}-migration-guide.md" ]]; then
|
||||||
|
HISTORY="${HISTORY}"$'\n\n'"See the [${NEXT_VERSION} migration guide](/docs/appendices/${NEXT_VERSION}-migration-guide.md) for more information on migrating to ${NEXT_VERSION}."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$HISTORY_BC_BREAK" ]]; then
|
||||||
|
HISTORY="${HISTORY}"$'\n\n'"### Backwards Compatibility Breaks"
|
||||||
|
HISTORY="${HISTORY}"$'\n'"$HISTORY_BC_BREAK"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$HISTORY_BUG" ]]; then
|
||||||
|
HISTORY="${HISTORY}"$'\n\n'"### Bug Fixes"
|
||||||
|
HISTORY="${HISTORY}"$'\n'"$HISTORY_BUG"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$HISTORY_ENHANCEMENT" ]]; then
|
||||||
|
HISTORY="${HISTORY}"$'\n\n'"### New Features"
|
||||||
|
HISTORY="${HISTORY}"$'\n'"$HISTORY_ENHANCEMENT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$HISTORY_REFACTOR" ]]; then
|
||||||
|
HISTORY="${HISTORY}"$'\n\n'"### Refactors"
|
||||||
|
HISTORY="${HISTORY}"$'\n'"$HISTORY_REFACTOR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$HISTORY_DOCUMENTATION" ]]; then
|
||||||
|
HISTORY="${HISTORY}"$'\n\n'"### Documentation"
|
||||||
|
HISTORY="${HISTORY}"$'\n'"$HISTORY_DOCUMENTATION"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$HISTORY_TESTS" ]]; then
|
||||||
|
HISTORY="${HISTORY}"$'\n\n'"### Tests"
|
||||||
|
HISTORY="${HISTORY}"$'\n'"$HISTORY_TESTS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$HISTORY_OTHER" ]]; then
|
||||||
|
HISTORY="${HISTORY}"$'\n\n'"### Other"
|
||||||
|
HISTORY="${HISTORY}"$'\n'"$HISTORY_OTHER"
|
||||||
|
fi
|
||||||
|
|
||||||
|
sed -i.bak '1d' HISTORY.md && rm HISTORY.md.bak
|
||||||
|
HISTORY_CONTENTS="$(cat HISTORY.md)"
|
||||||
|
echo -e "$HISTORY\n$HISTORY_CONTENTS" >HISTORY.md
|
||||||
|
git add HISTORY.md
|
||||||
|
|
||||||
|
COMMIT_MESSAGE="Release ${NEXT_VERSION}"$'\n\n'"${HISTORY}"
|
||||||
|
git commit -m "${COMMIT_MESSAGE}"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn-require-bin() {
|
||||||
|
declare desc="Checks that a binary exists"
|
||||||
|
declare BINARY="$1"
|
||||||
|
if ! command -v "$BINARY" &>/dev/null; then
|
||||||
|
log-fail "Missing ${BINARY}, please install it"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
fn-build-docker-image() {
|
||||||
|
declare desc="Builds the dokku docker image and tags it with the given version"
|
||||||
|
declare VERSION="$1" IS_RELEASE="$2"
|
||||||
|
|
||||||
|
if [[ "$IS_RELEASE" == "true" ]]; then
|
||||||
|
docker buildx build \
|
||||||
|
--platform linux/arm,linux/arm64,linux/amd64 \
|
||||||
|
--progress plain \
|
||||||
|
--push \
|
||||||
|
--tag "dokku/dokku:latest" \
|
||||||
|
--tag "dokku/dokku:$VERSION" .
|
||||||
|
else
|
||||||
|
docker buildx build \
|
||||||
|
--platform linux/arm,linux/arm64,linux/amd64 \
|
||||||
|
--progress plain \
|
||||||
|
--tag "dokku/dokku:latest" \
|
||||||
|
--tag "dokku/dokku:$(echo "$VERSION" | tr + -)" .
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
declare RELEASE="$1"
|
||||||
|
local CURRENT_VERSION NEXT_VERSION IS_RELEASE
|
||||||
|
local VALID_RELEASE_LEVELS=("major" "minor" "patch" "betafish" "build")
|
||||||
|
|
||||||
|
if [[ "$RELEASE" == '--trace' ]]; then
|
||||||
|
shift 1
|
||||||
|
RELEASE="$1"
|
||||||
|
TRACE=1 && set -x
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$RELEASE" ]]; then
|
||||||
|
log-fail "Argument 1 must be one of [major, minor, patch, betafish, build], none given"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! fn-in-array "$RELEASE" "${VALID_RELEASE_LEVELS[@]}"; then
|
||||||
|
log-fail "Argument 1 must be one of [major, minor, patch, betafish, build], '${RELEASE}' given"
|
||||||
|
fi
|
||||||
|
|
||||||
|
log-info "Creating $RELEASE release"
|
||||||
|
|
||||||
|
mkdir -p "build"
|
||||||
|
fn-require-bin "docker"
|
||||||
|
fn-require-bin "git"
|
||||||
|
if [[ "$RELEASE" != "build" ]]; then
|
||||||
|
fn-require-bin "package_cloud"
|
||||||
|
[[ -n "$PACKAGECLOUD_TOKEN" ]] || log-fail "Missing PACKAGECLOUD_TOKEN environment variable"
|
||||||
|
fi
|
||||||
|
|
||||||
|
CURRENT_VERSION="$(fn-version-current)"
|
||||||
|
NEXT_VERSION="$(fn-version-next "$CURRENT_VERSION" "$RELEASE")"
|
||||||
|
IS_RELEASE="$(fn-is-release "$RELEASE")"
|
||||||
|
|
||||||
|
echo "v${NEXT_VERSION}" >build/next-version
|
||||||
|
|
||||||
|
fn-repo-update "$IS_RELEASE" "$CURRENT_VERSION" "$NEXT_VERSION"
|
||||||
|
fn-build-dokku "$IS_RELEASE" "$NEXT_VERSION" || log-fail "Error building package"
|
||||||
|
fn-extract-package "$IS_RELEASE" "dokku_${NEXT_VERSION}_armhf.deb" || log-fail "Error extracting deb package"
|
||||||
|
fn-extract-package "$IS_RELEASE" "dokku_${NEXT_VERSION}_arm64.deb" || log-fail "Error extracting deb package"
|
||||||
|
fn-extract-package "$IS_RELEASE" "dokku_${NEXT_VERSION}_amd64.deb" || log-fail "Error extracting deb package"
|
||||||
|
fn-extract-package "$IS_RELEASE" "dokku-${NEXT_VERSION}-1.x86_64.rpm" || log-fail "Error extracting rpm package"
|
||||||
|
mkdir -p build/package
|
||||||
|
cp -f "build/dokku_${NEXT_VERSION}_amd64.deb" build/package/dokku-amd64.deb
|
||||||
|
cp -f "build/dokku_${NEXT_VERSION}_arm64.deb" build/package/dokku-arm64.deb
|
||||||
|
cp -f "build/dokku_${NEXT_VERSION}_armhf.deb" build/package/dokku-armhf.deb
|
||||||
|
cp -f "build/dokku-${NEXT_VERSION}-1.x86_64.rpm" build/package/dokku-amd64.rpm
|
||||||
|
|
||||||
|
if [[ "$RELEASE" != "build" ]]; then
|
||||||
|
fn-publish-package "$IS_RELEASE" "raspbian" "build/dokku_${NEXT_VERSION}_armhf.deb" || log-fail "Error publishing deb package"
|
||||||
|
fn-publish-package "$IS_RELEASE" "deb" "build/dokku_${NEXT_VERSION}_arm64.deb" || log-fail "Error publishing deb package"
|
||||||
|
fn-publish-package "$IS_RELEASE" "deb" "build/dokku_${NEXT_VERSION}_amd64.deb" || log-fail "Error publishing deb package"
|
||||||
|
fn-publish-package "$IS_RELEASE" "rpm" "build/dokku-${NEXT_VERSION}-1.x86_64.rpm" || log-fail "Error publishing rpm package"
|
||||||
|
fn-build-docker-image "$NEXT_VERSION" "$IS_RELEASE" || log-fail "Error building docker image"
|
||||||
|
|
||||||
|
fn-repo-push-tags "$IS_RELEASE"
|
||||||
|
else
|
||||||
|
fn-build-docker-image "$NEXT_VERSION" "$IS_RELEASE" || log-fail "Error building docker image"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$IS_RELEASE" != "true" ]]; then
|
||||||
|
git reset -q HEAD plugins/*/plugin.toml
|
||||||
|
git checkout -- plugins/*/plugin.toml
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
175
contrib/release-plugin
Executable file
175
contrib/release-plugin
Executable file
@@ -0,0 +1,175 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -eo pipefail
|
||||||
|
[[ $TRACE ]] && set -x
|
||||||
|
|
||||||
|
readonly TMP_WORK_DIR="$(mktemp -d "/tmp/dokku-plugin-release.XXXXXX")"
|
||||||
|
|
||||||
|
trap "rm -rf '$TMP_WORK_DIR' >/dev/null" RETURN INT TERM EXIT
|
||||||
|
|
||||||
|
log-info() {
|
||||||
|
# shellcheck disable=SC2034
|
||||||
|
declare desc="Log info formatter"
|
||||||
|
echo "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
log-error() {
|
||||||
|
# shellcheck disable=SC2034
|
||||||
|
declare desc="Log error formatter"
|
||||||
|
echo "! $*" 1>&2
|
||||||
|
}
|
||||||
|
|
||||||
|
log-fail() {
|
||||||
|
# shellcheck disable=SC2034
|
||||||
|
declare desc="Log fail formatter"
|
||||||
|
log-error "$*"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
fn-github-download-release() {
|
||||||
|
declare REPO_NAME="$1" VERSION="$2"
|
||||||
|
|
||||||
|
if [[ -n "$DOKKU_PLUGIN_GITHUB_ACCESS_TOKEN" ]]; then
|
||||||
|
curl -L "https://api.github.com/repos/${REPO_NAME}/tarball/${VERSION}?access_token=${DOKKU_PLUGIN_GITHUB_ACCESS_TOKEN}"
|
||||||
|
else
|
||||||
|
curl -L "https://api.github.com/repos/${REPO_NAME}/tarball/${VERSION}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
fn-replace-version() {
|
||||||
|
declare desc="Replaces the version within a file"
|
||||||
|
local CURRENT_VERSION="$1"
|
||||||
|
local NEXT_VERSION="$2"
|
||||||
|
local FILENAME="$3"
|
||||||
|
sed -i.bak "s/${CURRENT_VERSION//./\.}/$NEXT_VERSION/g" "$FILENAME" && rm "$FILENAME.bak"
|
||||||
|
git add "$FILENAME"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn-require-bin() {
|
||||||
|
declare desc="Checks that a binary exists"
|
||||||
|
declare BINARY="$1"
|
||||||
|
if ! command -v "$BINARY" &>/dev/null; then
|
||||||
|
log-fail "Missing ${BINARY}, please install it"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
local RELEASE="$1" AWS_RELEASE="$2"
|
||||||
|
local CURRENT_VERSION FILENAME NEXT_VERSION ORG_REPO_NAME REPO_NAME major minor patch
|
||||||
|
|
||||||
|
if [[ -z "$RELEASE" ]]; then
|
||||||
|
cat <<'EOF'
|
||||||
|
requirements:
|
||||||
|
|
||||||
|
- this is run in a plugin folder
|
||||||
|
- a `plugin.toml` exists
|
||||||
|
- the plugin is versioned via git
|
||||||
|
|
||||||
|
usage:
|
||||||
|
|
||||||
|
# the following commands make these assumptions
|
||||||
|
# - the plugin's folder name is dokku-example, as is the remote repository
|
||||||
|
# - the current version is `0.0.1` in the `plugin.toml`
|
||||||
|
|
||||||
|
# create the alias
|
||||||
|
alias release-dokku-plugin="path/to/dokku/contrib/release-plugin"
|
||||||
|
|
||||||
|
# make a specific kind of release
|
||||||
|
release-dokku-plugin patch # creates a 0.0.2 release
|
||||||
|
release-dokku-plugin minor # creates a 0.1.0 release
|
||||||
|
release-dokku-plugin major # creates a 1.0.0 release
|
||||||
|
|
||||||
|
# release private plugins as tarballs to S3
|
||||||
|
# note that the plugin *must* exist on github for this to work
|
||||||
|
export DOKKU_PLUGIN_GITHUB_ACCESS_TOKEN="some-github-token"
|
||||||
|
export DOKKU_PLUGIN_S3_BUCKET="example"
|
||||||
|
export DOKKU_PLUGIN_S3_PATH="some/path"
|
||||||
|
# will upload the versioned tarball url to s3://example/some/path/dokku-plugin-name-0.0.1.tar.gz
|
||||||
|
release-dokku-plugin patch
|
||||||
|
EOF
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
fn-require-bin "git"
|
||||||
|
|
||||||
|
if [[ "$AWS_RELEASE" != "true" ]] && [[ "$AWS_RELEASE" != "false" ]]; then
|
||||||
|
local AWS_RELEASE=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$AWS_RELEASE" == "true" ]] && [[ -z "$DOKKU_PLUGIN_GITHUB_ACCESS_TOKEN" ]]; then
|
||||||
|
log-info "You are running this without a DOKKU_PLUGIN_GITHUB_ACCESS_TOKEN environment variable."
|
||||||
|
log-info "Doing so disables uploading releases to S3, which may be necessary for installing private plugins."
|
||||||
|
while true; do
|
||||||
|
read -rp "Do you wish to continue? " yn
|
||||||
|
case $yn in
|
||||||
|
[Yy]*) break ;;
|
||||||
|
[Nn]*) exit ;;
|
||||||
|
*) echo "Please answer yes or no." ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$AWS_RELEASE" == "true" ]]; then
|
||||||
|
fn-require-bin "aws"
|
||||||
|
fn-require-bin "curl"
|
||||||
|
if [[ -z "$DOKKU_PLUGIN_S3_BUCKET" ]]; then
|
||||||
|
log-fail "No DOKKU_PLUGIN_S3_BUCKET environment variable set"
|
||||||
|
fi
|
||||||
|
if [[ -z "$DOKKU_PLUGIN_S3_PATH" ]]; then
|
||||||
|
log-fail "No DOKKU_PLUGIN_S3_PATH environment variable set"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f plugin.toml ]]; then
|
||||||
|
log-error "No plugin.toml found"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -d .git ]]; then
|
||||||
|
log-error "No git repository found"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
CURRENT_VERSION=$(grep version plugin.toml | cut -d '"' -f2)
|
||||||
|
major=$(echo "$CURRENT_VERSION" | awk '{split($0,a,"."); print a[1]}')
|
||||||
|
minor=$(echo "$CURRENT_VERSION" | awk '{split($0,a,"."); print a[2]}')
|
||||||
|
patch=$(echo "$CURRENT_VERSION" | awk '{split($0,a,"."); print a[3]}')
|
||||||
|
|
||||||
|
if [[ "$RELEASE" == "major" ]]; then
|
||||||
|
major=$((major + 1))
|
||||||
|
minor="0"
|
||||||
|
patch="0"
|
||||||
|
elif [[ "$RELEASE" == "minor" ]]; then
|
||||||
|
minor=$((minor + 1))
|
||||||
|
patch="0"
|
||||||
|
elif [[ "$RELEASE" == "patch" ]]; then
|
||||||
|
patch=$((patch + 1))
|
||||||
|
else
|
||||||
|
log-error "Invalid release type specified"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
NEXT_VERSION="${major}.${minor}.${patch}"
|
||||||
|
|
||||||
|
fn-replace-version "$CURRENT_VERSION" "$NEXT_VERSION" plugin.toml
|
||||||
|
git add plugin.toml
|
||||||
|
git commit -m "Release ${NEXT_VERSION}"
|
||||||
|
git tag "${NEXT_VERSION}"
|
||||||
|
git push --tags origin master
|
||||||
|
git fetch
|
||||||
|
|
||||||
|
ORG_REPO_NAME="$(git remote -v | grep origin | HEAD -n1 | cut -d':' -f2 | cut -d'.' -f1)"
|
||||||
|
REPO_NAME="$(echo "$ORG_REPO_NAME" | cut -d'/' -f2)"
|
||||||
|
FILENAME="${REPO_NAME}-${NEXT_VERSION}.tar.gz"
|
||||||
|
|
||||||
|
if [[ "$AWS_RELEASE" == "true" ]]; then
|
||||||
|
DOKKU_PLUGIN_S3_BUCKET="${DOKKU_PLUGIN_S3_BUCKET%/}"
|
||||||
|
DOKKU_PLUGIN_S3_PATH="${DOKKU_PLUGIN_S3_PATH%/}"
|
||||||
|
if [[ "$DOKKU_PLUGIN_S3_PATH" != "/" ]]; then
|
||||||
|
DOKKU_PLUGIN_S3_PATH="${DOKKU_PLUGIN_S3_PATH}/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
fn-github-download-release "$ORG_REPO_NAME" "$NEXT_VERSION" >"${TMP_WORK_DIR}/${FILENAME}"
|
||||||
|
aws s3 cp "${TMP_WORK_DIR}/${FILENAME}" "s3://${DOKKU_PLUGIN_S3_BUCKET}/${DOKKU_PLUGIN_S3_PATH}${FILENAME}" --acl public-read
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
@@ -1,183 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# <UDF name="hostname" default="" label="Hostname for dokku instance" example="example.com">
|
|
||||||
# <UDF name="ssh_key" default="" label="Public SSH Key for root user" example="Sets the root user's public ssh key, which is also automatically imported into the dokku installer">
|
|
||||||
# <UDF name="notify_email" default="" Label="Send Finish Notification To" example="Email address to send notification to when finished." />
|
|
||||||
|
|
||||||
function logit {
|
|
||||||
# Simple logging function that prepends an easy-to-find marker '=> ' and a timestamp to a message
|
|
||||||
TIMESTAMP=$(date -u +'%m/%d %H:%M:%S')
|
|
||||||
MSG="=> ${TIMESTAMP} $1"
|
|
||||||
echo ${MSG}
|
|
||||||
}
|
|
||||||
|
|
||||||
function set_ssh_key {
|
|
||||||
if [ -n "${SSH_KEY}" ]; then
|
|
||||||
logit "Setting root ssh key"
|
|
||||||
mkdir -p /root/.ssh
|
|
||||||
chmod 700 /root/.ssh
|
|
||||||
echo "$SSH_KEY" > /root/.ssh/authorized_keys
|
|
||||||
chmod 600 /root/.ssh/authorized_keys
|
|
||||||
chown -R root:root /root/.ssh
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function set_passwordless_ssh {
|
|
||||||
logit "Turn off password authentication and root login for SSH"
|
|
||||||
echo 'PasswordAuthentication no' >> /etc/ssh/sshd_config
|
|
||||||
service ssh restart
|
|
||||||
}
|
|
||||||
|
|
||||||
function system_primary_ip {
|
|
||||||
# returns the primary IP assigned to eth0
|
|
||||||
ifconfig eth0 | awk -F: '/inet addr:/ {print $2}' | awk '{ print $1 }'
|
|
||||||
}
|
|
||||||
|
|
||||||
function set_hostname {
|
|
||||||
logit "Set up hostname"
|
|
||||||
if [ -n "${HOSTNAME}" ]; then
|
|
||||||
echo $HOSTNAME > /etc/hostname
|
|
||||||
echo $IPADDR $FQDN $HOSTNAME >> /etc/hosts
|
|
||||||
else
|
|
||||||
system_primary_ip > /etc/hostname
|
|
||||||
echo "$(system_primary_ip) localhost" >> /etc/hosts
|
|
||||||
fi
|
|
||||||
|
|
||||||
IPADDR=$(/sbin/ifconfig eth0 | awk '/inet / { print $2 }' | sed 's/addr://')
|
|
||||||
hostname -F /etc/hostname
|
|
||||||
}
|
|
||||||
|
|
||||||
function postfix_install_loopback_only {
|
|
||||||
logit "Installing and configuring Postfix"
|
|
||||||
# Installs postfix and configure to listen only on the local interface. Also
|
|
||||||
# allows for local mail delivery
|
|
||||||
|
|
||||||
echo "postfix postfix/destinations string localhost.localdomain, localhost" | debconf-set-selections
|
|
||||||
echo "postfix postfix/mailname string localhost" | debconf-set-selections
|
|
||||||
echo "postfix postfix/main_mailer_type select Internet Site" | debconf-set-selections
|
|
||||||
echo "postfix postfix/myhostname string localhost" | debconf-set-selections
|
|
||||||
sudo apt-get install -qq -y postfix > /dev/null 2>&1
|
|
||||||
/usr/sbin/postconf -e "inet_interfaces = loopback-only"
|
|
||||||
#/usr/sbin/postconf -e "local_transport = error:local delivery is disabled"
|
|
||||||
|
|
||||||
touch /tmp/restart-postfix
|
|
||||||
}
|
|
||||||
|
|
||||||
function notify_install_via_email {
|
|
||||||
if [ -n "${NOTIFY_EMAIL}" ]; then
|
|
||||||
logit "Sending notification email to ${NOTIFY_EMAIL}"
|
|
||||||
/usr/sbin/sendmail "${NOTIFY_EMAIL}" <<EOD
|
|
||||||
To: ${NOTIFY_EMAIL}
|
|
||||||
Subject: Dokku installation is complete
|
|
||||||
From: Dokku StackScript <no-reply@${HOSTNAME}>
|
|
||||||
|
|
||||||
Your Dokku installation is complete and now ready to be configured: http://$(system_primary_ip) . Please visit this url to complete the setup of your Dokku instance.
|
|
||||||
|
|
||||||
Enjoy using Dokku!
|
|
||||||
EOD
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function notify_restart_via_email {
|
|
||||||
if [ -n "${NOTIFY_EMAIL}" ]; then
|
|
||||||
logit "Sending notification email to ${NOTIFY_EMAIL} of required restart"
|
|
||||||
/usr/sbin/sendmail "${NOTIFY_EMAIL}" <<EOD
|
|
||||||
To: ${NOTIFY_EMAIL}
|
|
||||||
Subject: Dokku Linode instance must be restarted
|
|
||||||
From: Dokku StackScript <no-reply@${HOSTNAME}>
|
|
||||||
|
|
||||||
The following linode instance must be restarted:
|
|
||||||
|
|
||||||
${LINODE_LISHUSERNAME}
|
|
||||||
|
|
||||||
Before restarting, please go to this url:
|
|
||||||
|
|
||||||
https://manager.linode.com/linodes/dashboard/${LINODE_LISHUSERNAME}
|
|
||||||
|
|
||||||
Then click "Edit" next to the selected configuration profile and make the following changes:
|
|
||||||
|
|
||||||
- Change the "Kernel" option to the current "pv-grub" release
|
|
||||||
- Set the "Xenify Distro" option to "no"
|
|
||||||
|
|
||||||
Then save your changes. Next, reboot the instance from the Linode Dashboard. You'll receive an email once the instance is available to continue the dokku installation.
|
|
||||||
EOD
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function setup_linode {
|
|
||||||
logit "Installing via linode"
|
|
||||||
DEBIAN_FRONTEND=noninteractive apt-get install -qq -y linux-virtual
|
|
||||||
DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y grub2 grub-pc
|
|
||||||
DEBIAN_FRONTEND=noninteractive apt-get install -qq -y grub
|
|
||||||
mkdir -p /boot/grub
|
|
||||||
update-grub -y
|
|
||||||
sed -i 's/kopt=root=UUID=.* ro/kopt=root=\/dev\/xvda console=hvc0 ro quiet/g' /boot/grub/menu.lst
|
|
||||||
sed -i 's/# groot=(hd0,0)/# groot=(hd0)/g' /boot/grub/menu.lst
|
|
||||||
update-grub
|
|
||||||
|
|
||||||
cp /etc/rc.local /etc/rc.local-bak
|
|
||||||
cat << "EOF" > /etc/rc.local
|
|
||||||
#!/bin/sh -e
|
|
||||||
sudo apt-get update >> /root/setup_linode.txt 2>&1
|
|
||||||
sudo apt-get install -y linux-image-extra-"$(uname -r)" >> /root/setup_linode.txt 2>&1
|
|
||||||
modprobe aufs >> /root/setup_linode.txt 2>&1
|
|
||||||
|
|
||||||
sudo apt-get install -y apparmor cgroup-lite >> /root/setup_linode.txt 2>&1
|
|
||||||
|
|
||||||
sudo apt-get install -y dokku >> /root/setup_linode.txt 2>&1
|
|
||||||
|
|
||||||
# Clean up this script so it only runs once
|
|
||||||
rm -f /etc/rc.local
|
|
||||||
mv /etc/rc.local-bak /etc/rc.local
|
|
||||||
exit 0
|
|
||||||
EOF
|
|
||||||
chmod +x /etc/rc.local
|
|
||||||
}
|
|
||||||
|
|
||||||
function install_prerequisites {
|
|
||||||
sudo apt-get install -qq -y curl > /dev/null 2>&1
|
|
||||||
|
|
||||||
logit "Installing docker gpg key"
|
|
||||||
curl -sSL https://get.docker.com/gpg 2> /dev/null | apt-key add - > /dev/null 2>&1
|
|
||||||
|
|
||||||
logit "Installing dokku gpg key"
|
|
||||||
curl -sSL https://packagecloud.io/gpg.key 2> /dev/null | apt-key add - > /dev/null 2>&1
|
|
||||||
|
|
||||||
logit "Running apt-get update"
|
|
||||||
sudo apt-get update > /dev/null
|
|
||||||
|
|
||||||
logit "Installing pre-requisites"
|
|
||||||
sudo apt-get install -qq -y apt-transport-https > /dev/null 2>&1
|
|
||||||
|
|
||||||
logit "Setting up apt repositories"
|
|
||||||
echo "deb https://get.docker.io/ubuntu docker main" > /etc/apt/sources.list.d/docker.list
|
|
||||||
echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ trusty main" > /etc/apt/sources.list.d/dokku.list
|
|
||||||
|
|
||||||
logit "Running apt-get update"
|
|
||||||
sudo apt-get update > /dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
function install_dokku {
|
|
||||||
logit "Installing pre-requisites"
|
|
||||||
sudo apt-get install -qq -y linux-image-extra-"$(uname -r)" > /dev/null 2>&1
|
|
||||||
|
|
||||||
logit "Installing dokku"
|
|
||||||
sudo apt-get install -qq -y dokku > /dev/null 2>&1
|
|
||||||
|
|
||||||
logit "Done!"
|
|
||||||
}
|
|
||||||
|
|
||||||
exec &> /root/stackscript.log
|
|
||||||
|
|
||||||
set_ssh_key
|
|
||||||
set_passwordless_ssh
|
|
||||||
postfix_install_loopback_only
|
|
||||||
set_hostname
|
|
||||||
install_prerequisites
|
|
||||||
|
|
||||||
if [ -n "$LINODE_ID" ]; then
|
|
||||||
setup_linode
|
|
||||||
notify_restart_via_email
|
|
||||||
else
|
|
||||||
install_dokku
|
|
||||||
notify_install_via_email
|
|
||||||
fi
|
|
||||||
192
deb.mk
192
deb.mk
@@ -1,166 +1,52 @@
|
|||||||
HEROKUISH_DESCRIPTION = 'Herokuish uses Docker and Buildpacks to build applications like Heroku'
|
BUILD_DIRECTORY ?= /tmp
|
||||||
HEROKUISH_REPO_NAME ?= gliderlabs/herokuish
|
DOKKU_DESCRIPTION = 'Docker powered PaaS that helps you build and manage the lifecycle of applications'
|
||||||
HEROKUISH_VERSION ?= 0.0.1
|
DOKKU_REPO_NAME ?= dokku/dokku
|
||||||
HEROKUISH_ARCHITECTURE = amd64
|
DOKKU_ARCHITECTURE ?= amd64
|
||||||
HEROKUISH_PACKAGE_NAME = herokuish_$(HEROKUISH_VERSION)_$(HEROKUISH_ARCHITECTURE).deb
|
|
||||||
|
|
||||||
DOKKU_DESCRIPTION = 'Docker powered mini-Heroku in around 100 lines of Bash'
|
ifndef IS_RELEASE
|
||||||
DOKKU_REPO_NAME ?= progrium/dokku
|
IS_RELEASE = true
|
||||||
DOKKU_ARCHITECTURE = amd64
|
endif
|
||||||
|
|
||||||
PLUGINHOOK_DESCRIPTION = 'Simple dispatcher and protocol for shell-based plugins, an improvement to hook scripts'
|
|
||||||
PLUGINHOOK_REPO_NAME ?= progrium/pluginhook
|
|
||||||
PLUGINHOOK_VERSION ?= 0.2.0
|
|
||||||
PLUGINHOOK_ARCHITECTURE = amd64
|
|
||||||
PLUGINHOOK_PACKAGE_NAME = pluginhook_$(PLUGINHOOK_VERSION)_$(PLUGINHOOK_ARCHITECTURE).deb
|
|
||||||
|
|
||||||
SSHCOMMAND_DESCRIPTION = 'Turn SSH into a thin client specifically for your app'
|
.PHONY: install-from-deb deb-all deb-dokku deb-setup
|
||||||
SSHCOMMAND_REPO_NAME ?= progrium/sshcommand
|
|
||||||
SSHCOMMAND_VERSION ?= 0.0.1
|
|
||||||
SSHCOMMAND_ARCHITECTURE = amd64
|
|
||||||
SSHCOMMAND_PACKAGE_NAME = sshcommand_$(SSHCOMMAND_VERSION)_$(SSHCOMMAND_ARCHITECTURE).deb
|
|
||||||
|
|
||||||
GEM_ARCHITECTURE = amd64
|
|
||||||
|
|
||||||
GOROOT = /usr/lib/go
|
|
||||||
GOBIN = /usr/bin/go
|
|
||||||
GOPATH = /home/vagrant/gocode
|
|
||||||
|
|
||||||
.PHONY: install-from-deb deb-all deb-herokuish deb-dokku deb-gems deb-pluginhook deb-setup deb-sshcommand
|
|
||||||
|
|
||||||
install-from-deb:
|
install-from-deb:
|
||||||
echo "--> Initial apt-get update"
|
@echo "--> Initial apt-get update"
|
||||||
sudo apt-get update > /dev/null
|
sudo apt-get update -qq >/dev/null
|
||||||
sudo apt-get install -y apt-transport-https curl
|
sudo apt-get -qq -y --no-install-recommends install apt-transport-https
|
||||||
|
|
||||||
echo "--> Installing docker gpg key"
|
@echo "--> Installing docker"
|
||||||
curl -sSL https://get.docker.com/gpg | apt-key add -
|
wget -nv -O - https://get.docker.com/ | sh
|
||||||
|
|
||||||
echo "--> Installing dokku gpg key"
|
@echo "--> Installing dokku"
|
||||||
curl --silent https://packagecloud.io/gpg.key 2> /dev/null | apt-key add - 2>&1 >/dev/null
|
wget -nv -O - https://packagecloud.io/dokku/dokku/gpgkey | apt-key add -
|
||||||
|
@echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ $(shell lsb_release -cs 2>/dev/null || echo "bionic") main" | sudo tee /etc/apt/sources.list.d/dokku.list
|
||||||
|
sudo apt-get update -qq >/dev/null
|
||||||
|
sudo DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true apt-get -qq -y --no-install-recommends install dokku
|
||||||
|
|
||||||
echo "--> Setting up apt repositories"
|
deb-all: deb-setup deb-dokku
|
||||||
echo "deb https://get.docker.io/ubuntu docker main" > /etc/apt/sources.list.d/docker.list
|
mv $(BUILD_DIRECTORY)/*.deb .
|
||||||
echo "deb https://packagecloud.io/dokku/dokku/ubuntu/ trusty main" > /etc/apt/sources.list.d/dokku.list
|
@echo "Done"
|
||||||
|
|
||||||
echo "--> Running apt-get update"
|
|
||||||
sudo apt-get update > /dev/null
|
|
||||||
|
|
||||||
echo "--> Installing pre-requisites"
|
|
||||||
sudo apt-get install -y linux-image-extra-`uname -r`
|
|
||||||
|
|
||||||
echo "--> Installing dokku"
|
|
||||||
sudo apt-get install -y dokku
|
|
||||||
|
|
||||||
echo "--> Done!"
|
|
||||||
|
|
||||||
deb-all: deb-herokuish deb-dokku deb-gems deb-pluginhook deb-sshcommand
|
|
||||||
mv /tmp/*.deb .
|
|
||||||
echo "Done"
|
|
||||||
|
|
||||||
deb-setup:
|
deb-setup:
|
||||||
echo "-> Updating deb repository and installing build requirements"
|
@echo "-> Updating deb repository and installing build requirements"
|
||||||
sudo apt-get update > /dev/null
|
@sudo apt-get update -qq >/dev/null
|
||||||
sudo apt-get install -qq -y gcc git ruby1.9.1-dev 2>&1 > /dev/null
|
@sudo DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true apt-get -qq -y --no-install-recommends install gcc git build-essential wget ruby-dev ruby1.9.1 lintian >/dev/null 2>&1
|
||||||
command -v fpm > /dev/null || sudo gem install fpm --no-ri --no-rdoc
|
@command -v fpm >/dev/null || sudo gem install fpm --no-ri --no-rdoc
|
||||||
ssh -o StrictHostKeyChecking=no git@github.com || true
|
@ssh -o StrictHostKeyChecking=no git@github.com || true
|
||||||
|
|
||||||
deb-herokuish: deb-setup
|
deb-dokku: /tmp/build-dokku/var/lib/dokku/GIT_REV
|
||||||
rm -rf /tmp/tmp /tmp/build $(HEROKUISH_PACKAGE_NAME)
|
rm -f $(BUILD_DIRECTORY)/dokku_*_$(DOKKU_ARCHITECTURE).deb
|
||||||
mkdir -p /tmp/tmp /tmp/build
|
|
||||||
|
|
||||||
echo "-> Creating deb files"
|
cat /tmp/build-dokku/var/lib/dokku/VERSION | cut -d '-' -f 1 | cut -d 'v' -f 2 > /tmp/build-dokku/var/lib/dokku/STABLE_VERSION
|
||||||
echo "#!/usr/bin/env bash" >> /tmp/tmp/post-install
|
ifneq (,$(findstring false,$(IS_RELEASE)))
|
||||||
echo "sleep 5" >> /tmp/tmp/post-install
|
sed -i.bak -e "s/^/`date +%s`:/" /tmp/build-dokku/var/lib/dokku/STABLE_VERSION && rm /tmp/build-dokku/var/lib/dokku/STABLE_VERSION.bak
|
||||||
echo "count=\`sudo docker images | grep gliderlabs/herokuish | wc -l\`" >> /tmp/tmp/post-install
|
endif
|
||||||
echo 'if [ "$$count" -ne 0 ]; then' >> /tmp/tmp/post-install
|
|
||||||
echo " echo 'Removing old herokuish image'" >> /tmp/tmp/post-install
|
|
||||||
echo " sudo docker rmi gliderlabs/herokuish" >> /tmp/tmp/post-install
|
|
||||||
echo "fi" >> /tmp/tmp/post-install
|
|
||||||
echo "echo 'Importing herokuish into docker (around 5 minutes)'" >> /tmp/tmp/post-install
|
|
||||||
echo "sudo docker build -t gliderlabs/herokuish /var/lib/herokuish 1> /dev/null" >> /tmp/tmp/post-install
|
|
||||||
|
|
||||||
echo "-> Cloning repository"
|
cp -r debian /tmp/build-dokku/DEBIAN
|
||||||
git clone -q "git@github.com:$(HEROKUISH_REPO_NAME).git" /tmp/tmp/herokuish > /dev/null
|
sed -i.bak "s/^Architecture: .*/Architecture: $(DOKKU_ARCHITECTURE)/g" /tmp/build-dokku/DEBIAN/control && rm /tmp/build-dokku/DEBIAN/control.bak
|
||||||
rm -rf /tmp/tmp/herokuish/.git /tmp/tmp/herokuish/.gitignore
|
rm -f /tmp/build-dokku/DEBIAN/lintian-overrides
|
||||||
|
cp debian/lintian-overrides /tmp/build-dokku/usr/share/lintian/overrides/dokku
|
||||||
echo "-> Copying files into place"
|
sed -i.bak "s/^Version: .*/Version: `cat /tmp/build-dokku/var/lib/dokku/STABLE_VERSION`/g" /tmp/build-dokku/DEBIAN/control && rm /tmp/build-dokku/DEBIAN/control.bak
|
||||||
mkdir -p "/tmp/build/var/lib"
|
dpkg-deb --build /tmp/build-dokku "$(BUILD_DIRECTORY)/dokku_`cat /tmp/build-dokku/var/lib/dokku/VERSION`_$(DOKKU_ARCHITECTURE).deb"
|
||||||
cp -rf /tmp/tmp/herokuish /tmp/build/var/lib/herokuish
|
lintian "$(BUILD_DIRECTORY)/dokku_`cat /tmp/build-dokku/var/lib/dokku/VERSION`_$(DOKKU_ARCHITECTURE).deb" || true
|
||||||
|
|
||||||
echo "-> Creating $(HEROKUISH_PACKAGE_NAME)"
|
|
||||||
sudo fpm -t deb -s dir -C /tmp/build -n herokuish -v $(HEROKUISH_VERSION) -a $(HEROKUISH_ARCHITECTURE) -p $(HEROKUISH_PACKAGE_NAME) --deb-pre-depends 'lxc-docker-1.6.2' --after-install /tmp/tmp/post-install --url "https://github.com/$(HEROKUISH_REPO_NAME)" --description $(HEROKUISH_DESCRIPTION) --license 'MIT License' .
|
|
||||||
mv *.deb /tmp
|
|
||||||
|
|
||||||
deb-dokku: deb-setup
|
|
||||||
rm -rf /tmp/tmp /tmp/build dokku_*_$(DOKKU_ARCHITECTURE).deb
|
|
||||||
mkdir -p /tmp/tmp /tmp/build
|
|
||||||
|
|
||||||
cp -r debian /tmp/build/DEBIAN
|
|
||||||
mkdir -p /tmp/build/usr/local/bin
|
|
||||||
mkdir -p /tmp/build/var/lib/dokku
|
|
||||||
mkdir -p /tmp/build/usr/local/share/man/man1
|
|
||||||
mkdir -p /tmp/build/usr/local/share/dokku/contrib
|
|
||||||
|
|
||||||
cp dokku /tmp/build/usr/local/bin
|
|
||||||
cp -r plugins /tmp/build/var/lib/dokku
|
|
||||||
find plugins/ -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read plugin; do touch /tmp/build/var/lib/dokku/plugins/$$plugin/.core; done
|
|
||||||
$(MAKE) help2man
|
|
||||||
$(MAKE) addman
|
|
||||||
cp /usr/local/share/man/man1/dokku.1 /tmp/build/usr/local/share/man/man1/dokku.1
|
|
||||||
cp contrib/dokku-installer.rb /tmp/build/usr/local/share/dokku/contrib
|
|
||||||
git describe --tags > /tmp/build/var/lib/dokku/VERSION
|
|
||||||
cat /tmp/build/var/lib/dokku/VERSION | cut -d '-' -f 1 | cut -d 'v' -f 2 > /tmp/build/var/lib/dokku/STABLE_VERSION
|
|
||||||
git rev-parse HEAD > /tmp/build/var/lib/dokku/GIT_REV
|
|
||||||
sed -i "s/^Version: .*/Version: `cat /tmp/build/var/lib/dokku/STABLE_VERSION`/g" /tmp/build/DEBIAN/control
|
|
||||||
dpkg-deb --build /tmp/build "/vagrant/dokku_`cat /tmp/build/var/lib/dokku/STABLE_VERSION`_$(DOKKU_ARCHITECTURE).deb"
|
|
||||||
mv *.deb /tmp
|
|
||||||
|
|
||||||
deb-gems: deb-setup
|
|
||||||
rm -rf /tmp/tmp /tmp/build rubygem-*.deb
|
|
||||||
mkdir -p /tmp/tmp /tmp/build
|
|
||||||
|
|
||||||
gem install --quiet --no-verbose --no-ri --no-rdoc --install-dir /tmp/tmp rack -v 1.5.2 > /dev/null
|
|
||||||
gem install --quiet --no-verbose --no-ri --no-rdoc --install-dir /tmp/tmp rack-protection -v 1.5.3 > /dev/null
|
|
||||||
gem install --quiet --no-verbose --no-ri --no-rdoc --install-dir /tmp/tmp sinatra -v 1.4.5 > /dev/null
|
|
||||||
gem install --quiet --no-verbose --no-ri --no-rdoc --install-dir /tmp/tmp tilt -v 1.4.1 > /dev/null
|
|
||||||
|
|
||||||
find /tmp/tmp/cache -name '*.gem' | xargs -rn1 fpm -d ruby -d ruby --prefix /var/lib/gems/1.9.1 -s gem -t deb -a $(GEM_ARCHITECTURE)
|
|
||||||
mv *.deb /tmp
|
|
||||||
|
|
||||||
deb-pluginhook: deb-setup
|
|
||||||
rm -rf /tmp/tmp /tmp/build $(PLUGINHOOK_PACKAGE_NAME)
|
|
||||||
mkdir -p /tmp/tmp /tmp/build
|
|
||||||
|
|
||||||
echo "-> Cloning repository"
|
|
||||||
git clone -q "git@github.com:$(PLUGINHOOK_REPO_NAME).git" /tmp/tmp/pluginhook > /dev/null
|
|
||||||
rm -rf /tmp/tmp/pluginhook/.git /tmp/tmp/pluginhook/.gitignore
|
|
||||||
|
|
||||||
echo "-> Copying files into place"
|
|
||||||
mkdir -p /tmp/build/usr/local/bin $(GOPATH)
|
|
||||||
sudo apt-get update > /dev/null
|
|
||||||
sudo apt-get install -qq -y git golang mercurial 2>&1 > /dev/null
|
|
||||||
export PATH=$(PATH):$(GOROOT)/bin:$(GOPATH)/bin && export GOROOT=$(GOROOT) && export GOPATH=$(GOPATH) && go get "golang.org/x/crypto/ssh/terminal"
|
|
||||||
export PATH=$(PATH):$(GOROOT)/bin:$(GOPATH)/bin && export GOROOT=$(GOROOT) && export GOPATH=$(GOPATH) && cd /tmp/tmp/pluginhook && go build -o pluginhook
|
|
||||||
mv /tmp/tmp/pluginhook/pluginhook /tmp/build/usr/local/bin/pluginhook
|
|
||||||
|
|
||||||
echo "-> Creating $(PLUGINHOOK_PACKAGE_NAME)"
|
|
||||||
sudo fpm -t deb -s dir -C /tmp/build -n pluginhook -v $(PLUGINHOOK_VERSION) -a $(PLUGINHOOK_ARCHITECTURE) -p $(PLUGINHOOK_PACKAGE_NAME) --url "https://github.com/$(PLUGINHOOK_REPO_NAME)" --description $(PLUGINHOOK_DESCRIPTION) --license 'MIT License' .
|
|
||||||
mv *.deb /tmp
|
|
||||||
|
|
||||||
deb-sshcommand: deb-setup
|
|
||||||
rm -rf /tmp/tmp /tmp/build $(SSHCOMMAND_PACKAGE_NAME)
|
|
||||||
mkdir -p /tmp/tmp /tmp/build
|
|
||||||
|
|
||||||
echo "-> Cloning repository"
|
|
||||||
git clone -q "git@github.com:$(SSHCOMMAND_REPO_NAME).git" /tmp/tmp/sshcommand > /dev/null
|
|
||||||
rm -rf /tmp/tmp/sshcommand/.git /tmp/tmp/sshcommand/.gitignore
|
|
||||||
|
|
||||||
echo "-> Copying files into place"
|
|
||||||
mkdir -p "/tmp/build/usr/local/bin"
|
|
||||||
cp /tmp/tmp/sshcommand/sshcommand /tmp/build/usr/local/bin/sshcommand
|
|
||||||
chmod +x /tmp/build/usr/local/bin/sshcommand
|
|
||||||
|
|
||||||
echo "-> Creating $(SSHCOMMAND_PACKAGE_NAME)"
|
|
||||||
sudo fpm -t deb -s dir -C /tmp/build -n sshcommand -v $(SSHCOMMAND_VERSION) -a $(SSHCOMMAND_ARCHITECTURE) -p $(SSHCOMMAND_PACKAGE_NAME) --url "https://github.com/$(SSHCOMMAND_REPO_NAME)" --description $(SSHCOMMAND_DESCRIPTION) --license 'MIT License' .
|
|
||||||
mv *.deb /tmp
|
|
||||||
|
|||||||
18
debian/config
vendored
18
debian/config
vendored
@@ -1,18 +1,16 @@
|
|||||||
#!/bin/sh -e
|
#!/bin/bash
|
||||||
|
set -eo pipefail
|
||||||
|
[[ $TRACE ]] && set -x
|
||||||
|
|
||||||
. /usr/share/debconf/confmodule
|
if [[ -e /usr/share/debconf/confmodule ]]; then
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
. /usr/share/debconf/confmodule
|
||||||
|
fi
|
||||||
|
|
||||||
readonly ACTION="${1:-configure}"
|
readonly ACTION="${1:-configure}"
|
||||||
readonly VERSION="${2:-dev}"
|
readonly VERSION="${2:-dev}"
|
||||||
|
|
||||||
db_input "high" "dokku/web_config" || true
|
db_input "high" "dokku/nginx_enable" || true
|
||||||
db_go || true
|
|
||||||
|
|
||||||
db_get "dokku/web_config"
|
|
||||||
if [ $RET = "true" ]; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
db_input "high" "dokku/hostname" || true
|
db_input "high" "dokku/hostname" || true
|
||||||
db_input "high" "dokku/vhost_enable" || true
|
db_input "high" "dokku/vhost_enable" || true
|
||||||
if [ "$ACTION" != "reconfigure" ]; then
|
if [ "$ACTION" != "reconfigure" ]; then
|
||||||
|
|||||||
13
debian/control
vendored
13
debian/control
vendored
@@ -1,9 +1,12 @@
|
|||||||
Package: dokku
|
Package: dokku
|
||||||
Version: 0.3.12
|
Version: 0.27.1
|
||||||
Section: base
|
Section: web
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Architecture: amd64
|
Architecture: amd64
|
||||||
Depends: locales, git, make, curl, software-properties-common, lxc-docker-1.6.2, gcc, python-software-properties, man-db, herokuish, sshcommand, pluginhook
|
Depends: locales, git, cpio, curl, man-db, netcat, sshcommand (>= 0.12.0), docker-engine-cs (>= 17.05.0) | docker-engine (>= 17.05.0) | docker-io (>= 17.05.0) | docker.io (>= 17.05.0) | docker-ce (>= 17.05.0) | docker-ee (>= 17.05.0) | moby-engine, docker-image-labeler (>= 0.2.2), net-tools, netrc, software-properties-common, parallel, procfile-util (>= 0.11.0), python-software-properties | python3-software-properties, rsync, rsyslog, dos2unix, jq, unzip
|
||||||
Pre-Depends: nginx, dnsutils, ruby, ruby-dev, rubygem-rack, rubygem-rack-protection, rubygem-sinatra, rubygem-tilt, apparmor, cgroup-lite
|
Recommends: herokuish (>= 0.3.4), bash-completion, dokku-update, dokku-event-listener
|
||||||
|
Pre-Depends: gliderlabs-sigil, nginx (>= 1.8.0) | openresty, dnsutils, cgroupfs-mount | cgroup-lite, plugn (>= 0.3.0), sudo, python3, debconf
|
||||||
Maintainer: Jose Diaz-Gonzalez <dokku@josediazgonzalez.com>
|
Maintainer: Jose Diaz-Gonzalez <dokku@josediazgonzalez.com>
|
||||||
Description: Docker powered mini-Heroku in around 100 lines of Bash
|
Description: Docker-powered PaaS that helps build and manage the lifecycle of applications
|
||||||
|
Dokku is an extensible, open source Platform as a Service
|
||||||
|
that runs on a single server of your choice.
|
||||||
|
|||||||
12
debian/lintian-overrides
vendored
Normal file
12
debian/lintian-overrides
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
dokku: command-with-path-in-maintainer-script postinst:22 /usr/bin/sshcommand
|
||||||
|
dokku: maintainer-script-calls-systemctl postinst:98
|
||||||
|
dokku: changelog-file-missing-in-native-package
|
||||||
|
dokku: statically-linked-binary
|
||||||
|
dokku: unstripped-binary-or-object
|
||||||
|
|
||||||
|
# The Go compiler is currently unable to produce read-only relocations
|
||||||
|
# (it produces static binaries).
|
||||||
|
dokku: hardening-no-relro
|
||||||
|
|
||||||
|
# Built golang binaries link to libc
|
||||||
|
dokku: missing-dependency-on-libc
|
||||||
158
debian/postinst
vendored
158
debian/postinst
vendored
@@ -1,49 +1,144 @@
|
|||||||
#!/bin/sh
|
#!/bin/bash
|
||||||
set -e
|
set -eo pipefail
|
||||||
|
[[ $TRACE ]] && set -x
|
||||||
|
|
||||||
. /usr/share/debconf/confmodule
|
if [[ -e /usr/share/debconf/confmodule ]]; then
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
. /usr/share/debconf/confmodule
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -r /etc/default/dokku ]]; then
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
source /etc/default/dokku
|
||||||
|
fi
|
||||||
|
|
||||||
readonly DOKKU_ROOT="${DOKKU_ROOT:-/home/dokku}"
|
readonly DOKKU_ROOT="${DOKKU_ROOT:-/home/dokku}"
|
||||||
|
readonly DOKKU_LIB_ROOT="${DOKKU_LIB_PATH:-/var/lib/dokku}"
|
||||||
|
|
||||||
case "$1" in
|
call-sshcommand() {
|
||||||
abort-upgrade|abort-remove|abort-deconfigure)
|
if [[ -x /usr/local/bin/sshcommand ]]; then
|
||||||
;;
|
/usr/local/bin/sshcommand "$@"
|
||||||
|
elif [[ -x /usr/bin/sshcommand ]]; then
|
||||||
|
/usr/bin/sshcommand "$@"
|
||||||
|
else
|
||||||
|
echo "Unable to find sshcommand binary" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
configure)
|
setup-user() {
|
||||||
mandb
|
echo "Setting up dokku user"
|
||||||
[ ! -x /usr/bin/docker.io ] || ln -sf /usr/bin/docker.io /usr/local/bin/docker
|
call-sshcommand create dokku /usr/bin/dokku
|
||||||
modprobe aufs || echo "WARNING: Restart server to finish installing dokku!"
|
grep -i -E "^docker" /etc/group || groupadd docker
|
||||||
sshcommand create dokku /usr/local/bin/dokku
|
usermod -aG docker dokku
|
||||||
egrep -i "^docker" /etc/group || groupadd docker
|
mkdir -p "$DOKKU_ROOT/.ssh" "$DOKKU_ROOT/.dokkurc"
|
||||||
usermod -aG docker dokku
|
touch "$DOKKU_ROOT/.ssh/authorized_keys"
|
||||||
dokku plugins-install
|
chown -R dokku:dokku "$DOKKU_ROOT/.ssh" "${DOKKU_ROOT}/.dokkurc"
|
||||||
rm -f /home/dokku/VERSION
|
}
|
||||||
cp /var/lib/dokku/STABLE_VERSION /home/dokku/VERSION
|
|
||||||
|
|
||||||
if [ -f /etc/init/dokku-installer.conf ] && service dokku-installer status 2> /dev/null | grep waiting; then
|
setup-storage() {
|
||||||
sudo service dokku-installer start
|
echo "Setting up storage directories"
|
||||||
|
mkdir -p "${DOKKU_LIB_ROOT}/data" "${DOKKU_LIB_ROOT}/data/storage"
|
||||||
|
chown dokku:dokku "${DOKKU_LIB_ROOT}/data"
|
||||||
|
}
|
||||||
|
|
||||||
|
setup-plugins() {
|
||||||
|
echo "Deleting invalid plugins"
|
||||||
|
if [ -f "${DOKKU_LIB_ROOT}/core-plugins/available/" ]; then
|
||||||
|
find "${DOKKU_LIB_ROOT}/core-plugins/available/" -type d -empty -delete
|
||||||
|
fi
|
||||||
|
if [ -f "${DOKKU_LIB_ROOT}/core-plugins/enabled/" ]; then
|
||||||
|
find "${DOKKU_LIB_ROOT}/core-plugins/enabled/" -type d -empty -delete
|
||||||
|
fi
|
||||||
|
if [ -f "${DOKKU_LIB_ROOT}/plugins/available/" ]; then
|
||||||
|
find "${DOKKU_LIB_ROOT}/plugins/available/" -type d -empty -delete
|
||||||
|
fi
|
||||||
|
if [ -f "${DOKKU_LIB_ROOT}/plugins/enabled/" ]; then
|
||||||
|
find "${DOKKU_LIB_ROOT}/plugins/enabled/" -type d -empty -delete
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Setting up plugin directories"
|
||||||
|
# should be replaced by `plugn init`
|
||||||
|
mkdir -p "${DOKKU_LIB_ROOT}/core-plugins/available" "${DOKKU_LIB_ROOT}/plugins/available"
|
||||||
|
mkdir -p "${DOKKU_LIB_ROOT}/core-plugins/enabled" "${DOKKU_LIB_ROOT}/plugins/enabled"
|
||||||
|
touch "${DOKKU_LIB_ROOT}/core-plugins/config.toml" "${DOKKU_LIB_ROOT}/plugins/config.toml"
|
||||||
|
|
||||||
|
echo "Migrating old plugins"
|
||||||
|
find ${DOKKU_LIB_ROOT}/plugins/ -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read -r plugin; do
|
||||||
|
if [ "$plugin" = "available" ] || [ "$plugin" = "enabled" ]; then
|
||||||
|
continue
|
||||||
|
elif [ -f ${DOKKU_LIB_ROOT}/plugins/$plugin/.core ]; then
|
||||||
|
rm -rf ${DOKKU_LIB_ROOT}/plugins/$plugin
|
||||||
|
elif [ ! -d ${DOKKU_LIB_ROOT}/plugins/available/$plugin ]; then
|
||||||
|
mv ${DOKKU_LIB_ROOT}/plugins/$plugin ${DOKKU_LIB_ROOT}/plugins/available
|
||||||
fi
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
db_get "dokku/web_config"
|
db_get "dokku/nginx_enable"
|
||||||
if [ "$RET" = "true" ]; then
|
echo "Enabling all core plugins"
|
||||||
exit 0
|
find "${DOKKU_LIB_ROOT}/core-plugins/available" -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read -r plugin; do
|
||||||
|
if [ "$plugin" = "nginx-vhosts" ] && [ "$RET" = "false" ]; then
|
||||||
|
echo "Skipping enable of nginx-vhosts plugin"
|
||||||
|
continue
|
||||||
|
elif [ ! -d "${DOKKU_LIB_ROOT}/plugins/available/$plugin" ]; then
|
||||||
|
ln -s "${DOKKU_LIB_ROOT}/core-plugins/available/$plugin" "${DOKKU_LIB_ROOT}/plugins/available/$plugin"
|
||||||
|
PLUGIN_PATH="${DOKKU_LIB_ROOT}/core-plugins" plugn enable "$plugin"
|
||||||
|
PLUGIN_PATH="${DOKKU_LIB_ROOT}/plugins" plugn enable "$plugin"
|
||||||
fi
|
fi
|
||||||
|
done
|
||||||
|
find -L "${DOKKU_LIB_ROOT}" -type l -delete
|
||||||
|
chown dokku:dokku -R "${DOKKU_LIB_ROOT}/plugins" "${DOKKU_LIB_ROOT}/core-plugins"
|
||||||
|
|
||||||
|
echo "Install all core plugins"
|
||||||
|
dokku plugin:install --core
|
||||||
|
}
|
||||||
|
|
||||||
|
setup-sshcommand() {
|
||||||
|
echo "Ensure proper sshcommand path"
|
||||||
|
echo '/usr/bin/dokku' >"${DOKKU_ROOT}/.sshcommand"
|
||||||
|
if [[ -f .ssh/authorized_keys ]]; then
|
||||||
|
sed -i.bak 's#/usr/local/bin/dokku#/usr/bin/dokku#' "${DOKKU_ROOT}/.ssh/authorized_keys"
|
||||||
|
rm "${DOKKU_ROOT}/.ssh/authorized_keys"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
dpkg-handling() {
|
||||||
|
if [ -f "${DOKKU_ROOT}/VHOST" ]; then
|
||||||
|
echo "VHOST file detected, skipping modification"
|
||||||
|
else
|
||||||
db_get "dokku/vhost_enable"
|
db_get "dokku/vhost_enable"
|
||||||
if [ "$RET" = "true" ]; then
|
if [ "$RET" = "true" ]; then
|
||||||
db_get "dokku/hostname"
|
db_get "dokku/hostname"
|
||||||
echo "$RET" > "${DOKKU_ROOT}/VHOST"
|
echo "Setting VHOST contents to $RET"
|
||||||
else
|
echo "$RET" >"${DOKKU_ROOT}/VHOST"
|
||||||
rm -f "${DOKKU_ROOT}/VHOST"
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "${DEBCONF_RECONFIGURE}" ]; then
|
||||||
|
db_get "dokku/key_file"
|
||||||
|
if [ -f "$RET" ]; then
|
||||||
|
call-sshcommand acl-add dokku default <"$RET" || true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
abort-upgrade | abort-remove | abort-deconfigure) ;;
|
||||||
|
|
||||||
|
\
|
||||||
|
configure)
|
||||||
|
mandb
|
||||||
|
[ ! -x /usr/bin/docker.io ] || ln -sf /usr/bin/docker.io /usr/local/bin/docker
|
||||||
|
if [[ -f /sbin/modprobe ]]; then
|
||||||
|
modprobe aufs || echo "WARNING: Restart server to finish installing dokku!"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
db_get "dokku/hostname"
|
setup-user
|
||||||
echo "$RET" > "${DOKKU_ROOT}/HOSTNAME"
|
setup-storage
|
||||||
|
|
||||||
if [ -z "${DEBCONF_RECONFIGURE}" ]; then
|
dpkg-handling
|
||||||
db_get "dokku/key_file"
|
setup-plugins
|
||||||
sshcommand acl-add dokku default < "$RET"
|
setup-sshcommand
|
||||||
fi
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
@@ -52,4 +147,5 @@ case "$1" in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
db_stop
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
61
debian/postrm
vendored
Executable file
61
debian/postrm
vendored
Executable file
@@ -0,0 +1,61 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -eo pipefail
|
||||||
|
[[ $TRACE ]] && set -x
|
||||||
|
|
||||||
|
if [[ -e /usr/share/debconf/confmodule ]]; then
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
. /usr/share/debconf/confmodule
|
||||||
|
fi
|
||||||
|
|
||||||
|
readonly DOKKU_ROOT="${DOKKU_ROOT:-/home/dokku}"
|
||||||
|
readonly DOKKU_LIB_ROOT="${DOKKU_LIB_PATH:-/var/lib/dokku}"
|
||||||
|
readonly DOKKU_LOGS_DIR="${DOKKU_LOGS_DIR:="/var/log/dokku"}"
|
||||||
|
|
||||||
|
main() {
|
||||||
|
if [[ -f /etc/systemd/system/dokku-installer.service ]] || [[ -f /etc/init/dokku-installer.conf ]]; then
|
||||||
|
service dokku-installer stop || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f /etc/init/dokku-installer.conf
|
||||||
|
rm -f /etc/init/dokku-redeploy.conf
|
||||||
|
rm -f /etc/systemd/system/dokku-installer.service
|
||||||
|
rm -f /etc/systemd/system/dokku-redeploy.service
|
||||||
|
rm -f /etc/update-motd.d/99-dokku
|
||||||
|
|
||||||
|
db_get "dokku/nginx_enable"
|
||||||
|
if [ "$RET" = "true" ]; then
|
||||||
|
(nginx -t && service nginx reload) || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$1" == "purge" ]]; then
|
||||||
|
rm -f /usr/local/openresty/nginx/conf/conf.d/dokku.conf
|
||||||
|
rm -f /usr/local/openresty/nginx/conf/conf.d/dokku-installer.conf
|
||||||
|
rm -f /etc/nginx/conf.d/dokku.conf
|
||||||
|
rm -f /etc/nginx/conf.d/dokku-installer.conf
|
||||||
|
rm -rf ${DOKKU_ROOT}/.dokkurc ${DOKKU_ROOT}/dokkurc ${DOKKU_ROOT}/tls
|
||||||
|
rm -f ${DOKKU_ROOT}/.ssh/authorized_keys ${DOKKU_ROOT}/.sshcommand
|
||||||
|
rm -f ${DOKKU_ROOT}/ENV ${DOKKU_ROOT}/HOSTNAME ${DOKKU_ROOT}/VERSION
|
||||||
|
rm -rf ${DOKKU_ROOT}/.cache
|
||||||
|
rm -rf ${DOKKU_LIB_ROOT}/core-plugins
|
||||||
|
|
||||||
|
rm -f ${DOKKU_LIB_ROOT}/plugins/config.toml
|
||||||
|
if [[ -d ${DOKKU_LIB_ROOT} ]]; then
|
||||||
|
find -L ${DOKKU_LIB_ROOT} -type l -delete
|
||||||
|
find ${DOKKU_LIB_ROOT} -type d -empty -delete
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -d ${DOKKU_ROOT} ]]; then
|
||||||
|
find -L ${DOKKU_ROOT} -type l -delete
|
||||||
|
find ${DOKKU_ROOT} -type d -empty -delete
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -rf "${DOKKU_LOGS_DIR}"
|
||||||
|
|
||||||
|
deluser dokku || true
|
||||||
|
delgroup dokku || true
|
||||||
|
|
||||||
|
db_purge
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
58
debian/preinst
vendored
58
debian/preinst
vendored
@@ -1,56 +1,32 @@
|
|||||||
#!/bin/sh
|
#!/bin/bash
|
||||||
set -e
|
set -eo pipefail
|
||||||
|
[[ $TRACE ]] && set -x
|
||||||
|
|
||||||
. /usr/share/debconf/confmodule
|
if [[ -e /usr/share/debconf/confmodule ]]; then
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
. /usr/share/debconf/confmodule
|
||||||
|
fi
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
install)
|
install)
|
||||||
db_get "dokku/web_config"
|
db_get "dokku/skip_key_file"
|
||||||
if [ "$RET" = "true" ]; then
|
if [ -z "${DEBCONF_RECONFIGURE}" ] && [ "$RET" != "true" ]; then
|
||||||
INIT_CONF="/etc/init/dokku-installer.conf"
|
|
||||||
NGINX_CONF="/etc/nginx/conf.d/dokku-installer.conf"
|
|
||||||
|
|
||||||
rm -f $INIT_CONF
|
|
||||||
touch $INIT_CONF
|
|
||||||
echo 'start on runlevel [2345]' >> $INIT_CONF
|
|
||||||
echo 'exec /usr/local/share/dokku/contrib/dokku-installer.rb selfdestruct' >> $INIT_CONF
|
|
||||||
|
|
||||||
rm -f $NGINX_CONF
|
|
||||||
touch $NGINX_CONF
|
|
||||||
|
|
||||||
{
|
|
||||||
echo 'upstream dokku-installer { server 127.0.0.1:2000; }'
|
|
||||||
echo 'server {'
|
|
||||||
echo ' listen 80;'
|
|
||||||
echo ' location / {'
|
|
||||||
echo ' proxy_pass http://dokku-installer;'
|
|
||||||
echo ' }'
|
|
||||||
echo '}'
|
|
||||||
} >> $NGINX_CONF
|
|
||||||
|
|
||||||
rm -f /etc/nginx/sites-enabled/*
|
|
||||||
service nginx reload || /etc/init.d/nginx reload
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "${DEBCONF_RECONFIGURE}" ]; then
|
|
||||||
db_get "dokku/key_file"
|
db_get "dokku/key_file"
|
||||||
if [ ! -f "$RET" ]; then
|
if [ ! -f "$RET" ]; then
|
||||||
echo "Error: keyfile '$RET' not found."
|
echo "Error: keyfile '$RET' not found." >&2
|
||||||
echo " you can enter a new keyfile path when you restart the installation."
|
echo " To deploy, you will need to generate a keypair and add with 'dokku ssh-keys:add'." >&2
|
||||||
db_reset "dokku/key_file"
|
db_reset "dokku/key_file"
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
upgrade)
|
upgrade) ;;
|
||||||
;;
|
|
||||||
|
|
||||||
abort-upgrade)
|
\
|
||||||
;;
|
abort-upgrade) ;;
|
||||||
|
|
||||||
*)
|
\
|
||||||
|
*)
|
||||||
echo "preinst called with unknown argument \`$1'" >&2
|
echo "preinst called with unknown argument \`$1'" >&2
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
|
|||||||
56
debian/prerm
vendored
Executable file
56
debian/prerm
vendored
Executable file
@@ -0,0 +1,56 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -eo pipefail
|
||||||
|
[[ $TRACE ]] && set -x
|
||||||
|
|
||||||
|
readonly DOKKU_ROOT="${DOKKU_ROOT:-/home/dokku}"
|
||||||
|
readonly DOKKU_LIB_ROOT="${DOKKU_LIB_PATH:-/var/lib/dokku}"
|
||||||
|
|
||||||
|
ps_backtrace() {
|
||||||
|
if [ $# -lt 1 ]; then
|
||||||
|
echo "Usage: $0 PID" >/dev/stderr
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
declare -i pid=$1
|
||||||
|
ppid=0
|
||||||
|
header_modifier=""
|
||||||
|
while :; do
|
||||||
|
if [ $ppid -ne 0 ]; then
|
||||||
|
header_modifier=h
|
||||||
|
fi
|
||||||
|
ppid=$(ps -o ppid= $pid)
|
||||||
|
ps uww $header_modifier -p $pid
|
||||||
|
if [ $pid -eq 1 ]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
pid=$ppid
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
# HACK: Ensure that we only delete data when purging dokku from the system
|
||||||
|
if ps_backtrace $BASHPID 2>/dev/null | grep dpkg | grep -- "--purge" >/dev/null; then
|
||||||
|
echo "Processing purge"
|
||||||
|
|
||||||
|
echo "Destroying deployed applications"
|
||||||
|
for app in $(DOKKU_QUIET_OUTPUT=1 dokku apps:list); do
|
||||||
|
dokku --force apps:destroy $app
|
||||||
|
done
|
||||||
|
|
||||||
|
# HACK: Only disable core plugins, as we don't know what data users store in non-core plugin directories
|
||||||
|
echo "Disabling all core plugins"
|
||||||
|
find ${DOKKU_LIB_ROOT}/core-plugins/available -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | while read -r plugin; do
|
||||||
|
if [ ! -d ${DOKKU_LIB_ROOT}/plugins/available/$plugin ]; then
|
||||||
|
rm ${DOKKU_LIB_ROOT}/plugins/available/$plugin
|
||||||
|
PLUGIN_PATH=${DOKKU_LIB_ROOT}/core-plugins plugn disable $plugin
|
||||||
|
PLUGIN_PATH=${DOKKU_LIB_ROOT}/plugins plugn disable $plugin
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo "Processing $1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
dokku cleanup
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
21
debian/templates
vendored
21
debian/templates
vendored
@@ -1,19 +1,24 @@
|
|||||||
Template: dokku/web_config
|
|
||||||
Description: Use the web-based config page?
|
|
||||||
Type: boolean
|
|
||||||
Default: true
|
|
||||||
|
|
||||||
Template: dokku/vhost_enable
|
Template: dokku/vhost_enable
|
||||||
Description: Use vhost based deployments?
|
Description: Enable vhost-based deployments?
|
||||||
Type: boolean
|
Type: boolean
|
||||||
Default: false
|
Default: false
|
||||||
|
|
||||||
Template: dokku/hostname
|
Template: dokku/hostname
|
||||||
Description: Machine's hostname or IP
|
Description: Hostname or IP for server:
|
||||||
Type: string
|
Type: string
|
||||||
Default: dokku.me
|
Default: dokku.me
|
||||||
|
|
||||||
|
Template: dokku/skip_key_file
|
||||||
|
Description: Skip key file requirement?
|
||||||
|
Type: boolean
|
||||||
|
Default: false
|
||||||
|
|
||||||
Template: dokku/key_file
|
Template: dokku/key_file
|
||||||
Description: Keyfile for initial user
|
Description: Keyfile for initial user:
|
||||||
Type: string
|
Type: string
|
||||||
Default: /root/.ssh/id_rsa.pub
|
Default: /root/.ssh/id_rsa.pub
|
||||||
|
|
||||||
|
Template: dokku/nginx_enable
|
||||||
|
Description: Enable nginx-vhosts plugin?
|
||||||
|
Type: boolean
|
||||||
|
Default: true
|
||||||
|
|||||||
4
docker/etc/cron.d/dokku-retire
Normal file
4
docker/etc/cron.d/dokku-retire
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
PATH=/usr/local/bin:/usr/bin:/bin
|
||||||
|
SHELL=/bin/bash
|
||||||
|
|
||||||
|
*/5 * * * * root /usr/bin/dokku ps:retire >> /var/log/dokku/retire.log 2>&1
|
||||||
9
docker/etc/logrotate.d/services
Normal file
9
docker/etc/logrotate.d/services
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
/var/log/services/*[!0-9z] {
|
||||||
|
daily
|
||||||
|
missingok
|
||||||
|
rotate 7
|
||||||
|
compress
|
||||||
|
delaycompress
|
||||||
|
notifempty
|
||||||
|
copytruncate
|
||||||
|
}
|
||||||
90
docker/etc/my_init.d/10_dokku_init
Executable file
90
docker/etc/my_init.d/10_dokku_init
Executable file
@@ -0,0 +1,90 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
log-info() {
|
||||||
|
declare desc="Log info formatter"
|
||||||
|
echo " $*" 1>&2
|
||||||
|
}
|
||||||
|
|
||||||
|
log-fail() {
|
||||||
|
declare desc="Log fail formatter"
|
||||||
|
echo "! $*" 1>&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
support-userns() {
|
||||||
|
chown 0:0 /usr/bin/sudo
|
||||||
|
chmod 4755 /usr/bin/sudo
|
||||||
|
chown 0:0 /usr/lib/sudo/sudoers.so
|
||||||
|
chown -R 0:0 /etc/sudoers
|
||||||
|
chown -R 0:0 /etc/sudoers.d
|
||||||
|
chown -R 0:0 /run/sshd
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
local NGINX_ROOT
|
||||||
|
|
||||||
|
support-userns
|
||||||
|
|
||||||
|
if [[ ! -d /mnt/dokku ]]; then
|
||||||
|
log-info "Creating missing /mnt/dokku"
|
||||||
|
mkdir -p /mnt/dokku
|
||||||
|
fi
|
||||||
|
|
||||||
|
directories=("/etc/ssh" "/home/dokku" "/var/lib/dokku/config" "/var/lib/dokku/data")
|
||||||
|
for dir in "${directories[@]}"; do
|
||||||
|
if [[ ! -e "$dir" ]]; then
|
||||||
|
log-info "Copying ${dir} skel into place"
|
||||||
|
mkdir -p "/mnt/dokku${dir}"
|
||||||
|
rsync -a "/skel${dir}/" "${dir}/" || log-fail "Unable to copy ${dir} skel into place"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# chown mount directories to "dokku:dokku"
|
||||||
|
if [[ "$dir" != "/etc/ssh" ]]; then
|
||||||
|
find "$dir" -print0 | xargs -0 chown -h dokku:dokku
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -f /mnt/dokku/plugin-list ]]; then
|
||||||
|
while read line; do
|
||||||
|
dokku plugin:install "$(echo "$line" | awk '{print $2}')" "$(echo "$line" | cut -d':' -f1)"
|
||||||
|
done </mnt/dokku/plugin-list
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$DOKKU_HOSTNAME" ]]; then
|
||||||
|
echo "dokku dokku/hostname string $DOKKU_HOSTNAME" | debconf-set-selections
|
||||||
|
echo "dokku dokku/vhost_enable boolean true" | debconf-set-selections
|
||||||
|
dokku --quiet domains:set-global "$DOKKU_HOSTNAME"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -x /usr/local/bin/docker ]]; then
|
||||||
|
mkdir -p /home/dokku/.dokkurc
|
||||||
|
echo "export DOCKER_BIN=/usr/local/bin/docker" >"/home/dokku/.dokkurc/DOCKER_BIN"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$DOKKU_HOST_ROOT" ]]; then
|
||||||
|
touch /etc/default/dokku
|
||||||
|
echo "export DOKKU_HOST_ROOT=$DOKKU_HOST_ROOT" >>/etc/default/dokku
|
||||||
|
chown dokku:dokku /etc/default/dokku
|
||||||
|
fi
|
||||||
|
|
||||||
|
NGINX_ROOT="/etc/nginx"
|
||||||
|
if [[ -x /usr/bin/openresty ]]; then
|
||||||
|
NGINX_ROOT="/usr/local/openresty/nginx/conf"
|
||||||
|
rm -rf /etc/runit/runsvdir/default/nginx
|
||||||
|
else
|
||||||
|
rm -rf /etc/runit/runsvdir/default/openresty
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f "/mnt/dokku${NGINX_ROOT}/dhparam.pem" ]]; then
|
||||||
|
mkdir -p "/mnt/dokku${NGINX_ROOT}"
|
||||||
|
openssl dhparam -out "/mnt/dokku${NGINX_ROOT}/dhparam.pem" 2048
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "${NGINX_ROOT}/conf.d"
|
||||||
|
cp -f "/mnt/dokku${NGINX_ROOT}/dhparam.pem" "${NGINX_ROOT}/dhparam.pem"
|
||||||
|
chown root:root "${NGINX_ROOT}/dhparam.pem"
|
||||||
|
chown root:root "${NGINX_ROOT}/conf.d"
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
15
docker/etc/runit/runsvdir/default/dokku-restore/finish
Executable file
15
docker/etc/runit/runsvdir/default/dokku-restore/finish
Executable file
@@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
exec >>/var/log/services/dokku-restore
|
||||||
|
exec 2>&1
|
||||||
|
|
||||||
|
if [[ "$1" -ne 0 ]]; then
|
||||||
|
echo "Error restoring dokku apps! Retrying in 30 seconds..."
|
||||||
|
exec sleep 30
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Done restoring dokku apps."
|
||||||
|
exec sleep infinity
|
||||||
|
|
||||||
|
exit 0
|
||||||
9
docker/etc/runit/runsvdir/default/dokku-restore/run
Executable file
9
docker/etc/runit/runsvdir/default/dokku-restore/run
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
exec >>/var/log/services/dokku-restore
|
||||||
|
exec 2>&1
|
||||||
|
|
||||||
|
echo "Running dokku-restore"
|
||||||
|
cd /tmp || exit 1
|
||||||
|
|
||||||
|
exec dokku ps:restore
|
||||||
7
docker/etc/runit/runsvdir/default/nginx/run
Executable file
7
docker/etc/runit/runsvdir/default/nginx/run
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
exec >>/var/log/services/nginx
|
||||||
|
exec 2>&1
|
||||||
|
|
||||||
|
echo "Running nginx"
|
||||||
|
exec /usr/sbin/nginx -c /etc/nginx/nginx.conf -g "daemon off;"
|
||||||
7
docker/etc/runit/runsvdir/default/openresty/run
Executable file
7
docker/etc/runit/runsvdir/default/openresty/run
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
exec >>/var/log/services/openresty
|
||||||
|
exec 2>&1
|
||||||
|
|
||||||
|
echo "Running openresty"
|
||||||
|
exec /usr/bin/openresty -c /usr/local/openresty/nginx/conf/nginx.conf -g "daemon off;"
|
||||||
7
docker/etc/runit/runsvdir/default/rsyslog/run
Executable file
7
docker/etc/runit/runsvdir/default/rsyslog/run
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
exec >>/var/log/services/rsyslog
|
||||||
|
exec 2>&1
|
||||||
|
|
||||||
|
echo "Running rsyslog"
|
||||||
|
exec /usr/sbin/rsyslogd -n
|
||||||
1
docker/etc/sudoers.d/dokku-docker
Normal file
1
docker/etc/sudoers.d/dokku-docker
Normal file
@@ -0,0 +1 @@
|
|||||||
|
dokku ALL=NOPASSWD:SETENV:/usr/bin/docker,/usr/bin/docker-image-labeler,/usr/bin/pack,/usr/bin/crontab
|
||||||
20
docker/usr/local/bin/docker
Executable file
20
docker/usr/local/bin/docker
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -eo pipefail
|
||||||
|
[[ $TRACE ]] && set -x
|
||||||
|
|
||||||
|
main() {
|
||||||
|
declare desc="re-runs docker commands as sudo"
|
||||||
|
local DOCKER_BIN=""
|
||||||
|
if [[ -x "/usr/bin/docker" ]]; then
|
||||||
|
DOCKER_BIN="/usr/bin/docker"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$DOCKER_BIN" ]]; then
|
||||||
|
echo "! No docker binary found" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
sudo -E "$DOCKER_BIN" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
20
docker/usr/local/bin/docker-image-labeler
Executable file
20
docker/usr/local/bin/docker-image-labeler
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -eo pipefail
|
||||||
|
[[ $TRACE ]] && set -x
|
||||||
|
|
||||||
|
main() {
|
||||||
|
declare desc="re-runs docker-image-labeler commands as sudo"
|
||||||
|
local DOCKER_IMAGE_LABELER_BIN=""
|
||||||
|
if [[ -x "/usr/bin/docker-image-labeler" ]]; then
|
||||||
|
DOCKER_IMAGE_LABELER_BIN="/usr/bin/docker-image-labeler"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$DOCKER_IMAGE_LABELER_BIN" ]]; then
|
||||||
|
echo "! No docker-image-labeler binary found" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
sudo -E "$DOCKER_IMAGE_LABELER_BIN" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
20
docker/usr/local/bin/pack
Executable file
20
docker/usr/local/bin/pack
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -eo pipefail
|
||||||
|
[[ $TRACE ]] && set -x
|
||||||
|
|
||||||
|
main() {
|
||||||
|
declare desc="re-runs pack commands as sudo"
|
||||||
|
local PACK_BIN=""
|
||||||
|
if [[ -x "/usr/bin/pack" ]]; then
|
||||||
|
PACK_BIN="/usr/bin/pack"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$PACK_BIN" ]]; then
|
||||||
|
echo "! No pack binary found" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
sudo -E "$PACK_BIN" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
30
docker/usr/local/openresty/nginx/conf/nginx.conf
Normal file
30
docker/usr/local/openresty/nginx/conf/nginx.conf
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
user www-data;
|
||||||
|
worker_processes auto;
|
||||||
|
pid /run/openresty.pid;
|
||||||
|
include /usr/local/openresty/nginx/conf/modules-enabled/*.conf;
|
||||||
|
|
||||||
|
events {
|
||||||
|
worker_connections 768;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
sendfile on;
|
||||||
|
tcp_nopush on;
|
||||||
|
tcp_nodelay on;
|
||||||
|
keepalive_timeout 65;
|
||||||
|
types_hash_max_size 2048;
|
||||||
|
|
||||||
|
include /usr/local/openresty/nginx/conf/mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
|
||||||
|
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
|
||||||
|
ssl_prefer_server_ciphers on;
|
||||||
|
|
||||||
|
access_log /var/log/openresty/access.log;
|
||||||
|
error_log /var/log/openresty/error.log;
|
||||||
|
|
||||||
|
gzip on;
|
||||||
|
|
||||||
|
include /usr/local/openresty/nginx/conf/conf.d/*.conf;
|
||||||
|
include /usr/local/openresty/nginx/conf/sites-enabled/*;
|
||||||
|
}
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
# Advanced installation
|
|
||||||
|
|
||||||
You can always install dokku straight from the latest - potentially unstable - master release via the following bash command:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
wget -qO- https://raw.github.com/progrium/dokku/master/bootstrap.sh | sudo DOKKU_BRANCH=master bash
|
|
||||||
```
|
|
||||||
|
|
||||||
## Development
|
|
||||||
|
|
||||||
If you plan on developing dokku, the easiest way to install from your own repository is cloning the repository and calling the install script. Example:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
git clone https://github.com/yourusername/dokku.git
|
|
||||||
cd dokku
|
|
||||||
sudo make install
|
|
||||||
```
|
|
||||||
|
|
||||||
The `Makefile` allows source URLs to be overridden to include customizations from your own repositories. The `DOCKER_URL`, `PLUGINHOOK_URL`, `SSHCOMMAND_URL` and `STACK_URL` environment variables may be set to override the defaults (see the `Makefile` for how these apply). Example:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
sudo SSHCOMMAND_URL=https://raw.github.com/yourusername/sshcommand/master/sshcommand make install
|
|
||||||
```
|
|
||||||
|
|
||||||
## Bootstrap a server from your own repository
|
|
||||||
|
|
||||||
The bootstrap script allows the dokku repository URL to be overridden to bootstrap a host from your own clone of dokku using the `DOKKU_REPO` environment variable. Example:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
wget https://raw.github.com/progrium/dokku/master/bootstrap.sh
|
|
||||||
chmod +x bootstrap.sh
|
|
||||||
sudo DOKKU_REPO=https://github.com/yourusername/dokku.git DOKKU_BRANCH=master ./bootstrap.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
## Custom herokuish build
|
|
||||||
|
|
||||||
Dokku ships with a pre-built version of version of the [herokuish](https://github.com/gliderlabs/herokuish) component by default. If you want to build your own version you can specify that with an env variable.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
git clone https://github.com/progrium/dokku.git
|
|
||||||
cd dokku
|
|
||||||
sudo BUILD_STACK=true STACK_URL=https://github.com/gliderlabs/herokuish.git make install
|
|
||||||
```
|
|
||||||
|
|
||||||
## Configuring
|
|
||||||
|
|
||||||
Once dokku is installed, if you are not using the web-installer, you'll want to configure a the virtualhost setup as well as the push user. If you do not, your installation will be considered incomplete and you will not be able to deploy applications.
|
|
||||||
|
|
||||||
Set up a domain and a wildcard domain pointing to that host. Make sure `/home/dokku/VHOST` is set to this domain. By default it's set to whatever hostname the host has. This file is only created if the hostname can be resolved by dig (`dig +short $(hostname -f)`). Otherwise you have to create the file manually and set it to your preferred domain. If this file still is not present when you push your app, dokku will publish the app with a port number (i.e. `http://example.com:49154` - note the missing subdomain).
|
|
||||||
|
|
||||||
You'll have to add a public key associated with a username by doing something like this from your local machine:
|
|
||||||
|
|
||||||
$ cat ~/.ssh/id_rsa.pub | ssh dokku.me "sudo sshcommand acl-add dokku $USER"
|
|
||||||
|
|
||||||
If you are using the vagrant installation, you can use the following command to add your public key to dokku:
|
|
||||||
|
|
||||||
$ cat ~/.ssh/id_rsa.pub | make vagrant-acl-add
|
|
||||||
|
|
||||||
That's it!
|
|
||||||
|
|
||||||
## VMs with less than 1GB of memory
|
|
||||||
|
|
||||||
Having less than 1GB of system memory available for dokku and its containers, for example Digital Ocean's small 512MB machines, might result in unexpected errors, such as **! [remote rejected] master -> master (pre-receive hook declined)** during installation of NPM dependencies (https://github.com/npm/npm/issues/3867).
|
|
||||||
|
|
||||||
To work around this issue, it might suffice to augment the linux swap file size to a maximum of twice the physical memory size.
|
|
||||||
|
|
||||||
To resize the swap file of a 512MB machine to 1GB, follow these steps while in SSH within your machine:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
cd /var
|
|
||||||
touch swap.img
|
|
||||||
chmod 600 swap.img
|
|
||||||
|
|
||||||
dd if=/dev/zero of=/var/swap.img bs=1024k count=1000
|
|
||||||
mkswap /var/swap.img
|
|
||||||
swapon /var/swap.img
|
|
||||||
free
|
|
||||||
|
|
||||||
echo "/var/swap.img none swap sw 0 0" >> /etc/fstab
|
|
||||||
```
|
|
||||||
Reference: https://www.digitalocean.com/community/tutorials/how-to-configure-virtual-memory-swap-file-on-a-vps
|
|
||||||
106
docs/advanced-usage/backup-recovery.md
Normal file
106
docs/advanced-usage/backup-recovery.md
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
# Backup and Recovery
|
||||||
|
|
||||||
|
> The backup plugin was deprecated in 0.4.x, below are backup recommendations for 0.5.x and later.
|
||||||
|
|
||||||
|
The best plan for disaster recovery is to always keep multiple (remote) copies of your local repo, static assets and periodic database dumps. Backups should be regularly tested for data integrity and completeness.
|
||||||
|
|
||||||
|
## TLDR
|
||||||
|
|
||||||
|
> Warning: This method has many caveats. Please read this entire document before assuming these backups work as expected, and test your backups on a regular basis.
|
||||||
|
|
||||||
|
### Creating a backup
|
||||||
|
|
||||||
|
To create a backup, run the following command at a time when not executing any Dokku commands or app deployments:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
export BACKUP_TIME=$(date +%Y-%m-%d-%H-%M)
|
||||||
|
sudo mkdir -p /var/lib/dokku/services
|
||||||
|
sudo chown dokku:dokku /var/lib/dokku/services
|
||||||
|
mkdir -p /tmp/dokku-backups/
|
||||||
|
sudo tar -czvf "/tmp/dokku-backups/${BACKUP_TIME}.tar.gz" /home/dokku /var/lib/dokku/config /var/lib/dokku/data /var/lib/dokku/services /var/lib/dokku/plugins
|
||||||
|
```
|
||||||
|
|
||||||
|
This will create a point-in-time backup of your entire Dokku installation in the `/tmp/dokku-backups` directory. This backup may be moved offsite to another location via rsync, sftp, or some other protocol.
|
||||||
|
|
||||||
|
It is recommended that backups are regularly cleaned from the originating server and tested as necessary.
|
||||||
|
|
||||||
|
### Restoring a backup
|
||||||
|
|
||||||
|
To extract the backup onto another server, copy the backup to the server and extract it using the following command.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sudo tar -xzvf path/to/dokku/backup.tar.gz -C /
|
||||||
|
```
|
||||||
|
|
||||||
|
At this point, all datastores should be individually started and checked for data integrity. Once this is complete, individual apps can be rebuilt. Please consult the [process management documentation](/docs/processes/process-management.md#rebuilding-apps) for more information on how to rebuild apps.
|
||||||
|
|
||||||
|
## Caveats
|
||||||
|
|
||||||
|
### App config
|
||||||
|
|
||||||
|
Application config is largely held in a small number of places:
|
||||||
|
|
||||||
|
- `/var/lib/dokku/config`: Properties set and managed by plugins
|
||||||
|
- `/var/lib/dokku/data`: Files generated or extracted by various plugins
|
||||||
|
- `/home/dokku`: Certain parts of Dokku core store data in this location
|
||||||
|
|
||||||
|
Compressing these directories when no Dokku commands are running is enough to ensure a complete backup of the system.
|
||||||
|
|
||||||
|
### Code Repositories
|
||||||
|
|
||||||
|
Because Dokku is git based, rebuilding a deployed app is as easy as pushing from git. You can push to a new server by updating the `dokku` remote in you local app's repo.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
git remote rm dokku
|
||||||
|
git remote add dokku dokku@[dokku.me:dokku.me]
|
||||||
|
git push dokku [master]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Docker Networks
|
||||||
|
|
||||||
|
Docker networks generated by Dokku should be recreated. Running `dokku network:report` will output all networks in use by various apps, which can then be used to recreate them via `dokku network:create $NETWORK`.
|
||||||
|
|
||||||
|
Networks created by tools other than Dokku may be created as they initially were.
|
||||||
|
|
||||||
|
### Docker Image and Tar-based Apps
|
||||||
|
|
||||||
|
These apps may fail to rebuild via the normal `ps:rebuild` method. Redeploy these apps by running the original commands used to deploy them
|
||||||
|
|
||||||
|
### Datastores
|
||||||
|
|
||||||
|
> Please note that point-in-time backups of the `/var/lib/dokku/services` directory may contain partially written data due to how various datastores work. Consult the official datastore documentation for the best documentation surrounding proper backup and restore procedures.
|
||||||
|
|
||||||
|
Some plugins, like the official [dokku-postgres](https://github.com/dokku/dokku-postgres) plugin, have built-in commands that allow non-volatile data be exported and imported.
|
||||||
|
|
||||||
|
For [dokku-postgres](https://github.com/dokku/dokku-postgres), use:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku postgres:export [db_name] > [db_name].dump
|
||||||
|
dokku postgres:import [db_name] < [db_name].dump
|
||||||
|
```
|
||||||
|
|
||||||
|
Additionally, data for official datastores is located in the `/var/lib/dokku/services` directory. If the directory is restored and the plugin is available, a `dokku $SERVICE:start` may be enough to restart the service with the underlying data, so long as the datastore version does not change and the underlying data is not corrupt. If this is the case, it may be necessary to re-import all the data onto a fresh version of the datastore service.
|
||||||
|
|
||||||
|
### Plugins
|
||||||
|
|
||||||
|
The plugin directory is contained at the `/var/lib/dokku/plugins` directory. Core plugins will automatically be included in new installs, but custom plugins may not. The aforementioned `tar` creation command will back all plugins up, and the `tar` extract command will restore the plugins.
|
||||||
|
|
||||||
|
Note that restoring a plugin will not trigger any `install` or `dependencies` triggers. You will need to run these manually. See the [plugin management documentation](/docs/advanced-usage/plugin-management.md#installing-a-plugin) for more information on how to trigger these two hooks.
|
||||||
|
|
||||||
|
### Volumes and Static Assets
|
||||||
|
|
||||||
|
Dokku doesn't enforce a [300mb](https://devcenter.heroku.com/articles/slug-compiler#slug-size) limit on apps, but it's best practice to keep binary assets outside of git. Since containers are considered volatile in Dokku, external stores like s3 or storage mounts should be used for non-volatile items like user uploads. The Dokku storage core plugin can be used to mount local directories / volumes inside the docker container.
|
||||||
|
|
||||||
|
System administrators are highly encouraged to store persistent data in app-specific subdirectories of the path `/var/lib/dokku/data/storage`. This will help ensure restores of the aforementioned primary Dokku directories will restore service to all apps.
|
||||||
|
|
||||||
|
See the [persistent storage documentation](/docs/advanced-usage/persistent-storage.md) for more information on how to attach persistent storage to your app.
|
||||||
|
|
||||||
|
## Recovering app code
|
||||||
|
|
||||||
|
In case of an emergency when your git repo and backups are completely lost, you can recover the last pushed copy from your remote Dokku server (assuming you still have the ssh key).
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mkdir [app-name] ; cd !$
|
||||||
|
git init && git remote add dokku dokku@[dokku.me:app-name]
|
||||||
|
git pull dokku/master && git checkout dokku/master
|
||||||
|
```
|
||||||
172
docs/advanced-usage/deployment-tasks.md
Normal file
172
docs/advanced-usage/deployment-tasks.md
Normal file
@@ -0,0 +1,172 @@
|
|||||||
|
# Deployment Tasks
|
||||||
|
|
||||||
|
> New as of 0.5.0
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Overview
|
||||||
|
|
||||||
|
Sometimes you need to run a command on deployment time, but before an app is completely deployed. Common use cases include:
|
||||||
|
|
||||||
|
- Checking a database is initialized
|
||||||
|
- Running database migrations
|
||||||
|
- Any commands required to set up the server (e.g. something like a Django `collectstatic`)
|
||||||
|
|
||||||
|
To support this, Dokku provides support for a special `release` command within your app's `Procfile`, as well as a special `scripts.dokku` key inside of your app's `app.json` file. Be aware that all commands are run within the context of the built docker image - no commands affect the host unless there are volume mounts attached to your app.
|
||||||
|
|
||||||
|
Each "phase" has different expectations and limitations:
|
||||||
|
|
||||||
|
- `app.json`: `scripts.dokku.predeploy`
|
||||||
|
- When to use: This should be used if your app does not support arbitrary build commands and you need to make changes to the built image.
|
||||||
|
- Are changes committed to the image at this phase: Yes
|
||||||
|
- Example use-cases
|
||||||
|
- Bundling assets in a slightly different way
|
||||||
|
- Installing a custom package from source or copying a binary into place
|
||||||
|
- `app.json`: `scripts.dokku.postdeploy`
|
||||||
|
- When to use: This should be used in conjunction with external systems to signal the completion of your deploy.
|
||||||
|
- Are changes committed to the image at this phase: No
|
||||||
|
- Example use-cases
|
||||||
|
- Notifying slack that your app is deployed
|
||||||
|
- Coordinating traffic routing with a central load balancer
|
||||||
|
- `app.json`: `scripts.postdeploy`
|
||||||
|
- When to use: This should be used when you wish to run a command _once_, after the app is created and not on subsequent deploys to the app.
|
||||||
|
- Are changes committed to the image at this phase: No
|
||||||
|
- Example use-cases
|
||||||
|
- Setting up OAuth clients and DNS
|
||||||
|
- Loading seed/test data into the app’s test database
|
||||||
|
- `Procfile`: `release`
|
||||||
|
- When to use: This should be used in conjunction with external systems to signal the completion of your app image build.
|
||||||
|
- Are changes committed to the image at this phase: No
|
||||||
|
- Example use-cases
|
||||||
|
- Sending CSS, JS, and other assets from your app’s slug to a CDN or S3 bucket
|
||||||
|
- Priming or invalidating cache stores
|
||||||
|
- Running database migrations
|
||||||
|
|
||||||
|
Additionally, if using a Dockerfile with an `ENTRYPOINT`, the deployment task is passed to that entrypoint as is. The exceptions are if the entrypoint is one of the following:
|
||||||
|
|
||||||
|
- `["/tini", "--"]`
|
||||||
|
- `["/bin/tini", "--"]`
|
||||||
|
- `["/usr/bin/tini", "--"]`
|
||||||
|
- `["/usr/local/bin/tini", "--"]`
|
||||||
|
|
||||||
|
Please keep the above in mind when utilizing deployment tasks.
|
||||||
|
|
||||||
|
> To execute commands on the host during a release phase, see the [plugin creation documentation](/docs/development/plugin-creation.md) docs for more information on building your own custom plugin.
|
||||||
|
|
||||||
|
### Changing the `app.json` location
|
||||||
|
|
||||||
|
When deploying a monorepo, it may be desirable to specify the specific path of the `app.json` file to use for a given app. This can be done via the `app-json:set` command. If a value is specified and that file does not exist within the repository, Dokku will continue the build process as if the repository has no `app.json` file.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku app-json:set node-js-app appjson-path second-app.json
|
||||||
|
```
|
||||||
|
|
||||||
|
The default value may be set by passing an empty value for the option:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku app-json:set node-js-app appjson-path
|
||||||
|
```
|
||||||
|
|
||||||
|
The `appjson-path` property can also be set globally. The global default is `app.json`, and the global value is used when no app-specific value is set.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku app-json:set --global appjson-path global-app.json
|
||||||
|
```
|
||||||
|
|
||||||
|
The default value may be set by passing an empty value for the option.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku app-json:set --global appjson-path
|
||||||
|
```
|
||||||
|
|
||||||
|
### Displaying app-json reports for an app
|
||||||
|
|
||||||
|
> New as of 0.25.0
|
||||||
|
|
||||||
|
You can get a report about the app's storage status using the `app-json:report` command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku app-json:report
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> node-js-app app-json information
|
||||||
|
App-json computed appjson path: app2.json
|
||||||
|
App-json global appjson path: app.json
|
||||||
|
App-json appjson path: app2.json
|
||||||
|
=====> python-sample app-json information
|
||||||
|
App-json computed appjson path: app.json
|
||||||
|
App-json global appjson path: app.json
|
||||||
|
App-json appjson path:
|
||||||
|
=====> ruby-sample app-json information
|
||||||
|
App-json computed appjson path: app.json
|
||||||
|
App-json global appjson path: app.json
|
||||||
|
App-json appjson path:
|
||||||
|
```
|
||||||
|
|
||||||
|
You can run the command for a specific app also.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku app-json:report node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> node-js-app app-json information
|
||||||
|
App-json computed appjson path: app2.json
|
||||||
|
App-json global appjson path: app.json
|
||||||
|
App-json appjson path: app2.json
|
||||||
|
```
|
||||||
|
|
||||||
|
You can pass flags which will output only the value of the specific information you want. For example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku app-json:report node-js-app --app-json-appjson-path
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
app2.json
|
||||||
|
```
|
||||||
|
|
||||||
|
### Deployment tasks
|
||||||
|
|
||||||
|
#### `app.json` deployment tasks
|
||||||
|
|
||||||
|
Dokku provides limited support for the `app.json` manifest from Heroku (documentation available [here](https://devcenter.heroku.com/articles/app-json-schema)). The keys available for use with Deployment Tasks are:
|
||||||
|
|
||||||
|
- `scripts.dokku.predeploy`: This is run _after_ an app's docker image is built, but _before_ any containers are scheduled. Changes made to your image are committed at this phase.
|
||||||
|
- `scripts.dokku.postdeploy`: This is run _after_ an app's containers are scheduled. Changes made to your image are _not_ committed at this phase.
|
||||||
|
- `scripts.postdeploy`: This is run _after_ an app's containers are scheduled. Changes made to your image are _not_ committed at this phase.
|
||||||
|
|
||||||
|
For buildpack-based deployments, the location of the `app.json` file should be at the root of your repository. Dockerfile-based app deploys should have the `app.json` in the configured `WORKDIR` directory; otherwise Dokku defaults to the buildpack app behavior of looking in `/app`.
|
||||||
|
|
||||||
|
> Warning: Any failed `app.json` deployment task will fail the deploy. In the case of either phase, a failure will not affect any running containers.
|
||||||
|
|
||||||
|
The following is an example `app.json` file. Please note that only the `scripts.dokku.predeploy` and `scripts.dokku.postdeploy` tasks are supported by Dokku at this time. All other fields will be ignored and can be omitted.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"scripts": {
|
||||||
|
"dokku": {
|
||||||
|
"predeploy": "touch /app/predeploy.test",
|
||||||
|
"postdeploy": "curl https://some.external.api.service.com/deployment?state=success"
|
||||||
|
},
|
||||||
|
"postdeploy": "curl https://some.external.api.service.com/created?state=success"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Procfile Release command
|
||||||
|
|
||||||
|
> New as of 0.14.0
|
||||||
|
|
||||||
|
The `Procfile` also supports a special `release` command which acts in a similar way to the [Heroku Release Phase](https://devcenter.heroku.com/articles/release-phase). This command is executed _after_ an app's docker image is built, but _before_ any containers are scheduled. This is also run _after_ any command executed by `scripts.dokku.predeploy`.
|
||||||
|
|
||||||
|
To use the `release` command, simply add a `release` stanza to your Procfile.
|
||||||
|
|
||||||
|
```Procfile
|
||||||
|
release: curl https://some.external.api.service.com/deployment?state=built
|
||||||
|
```
|
||||||
|
|
||||||
|
Unlike the `scripts.dokku.predeploy` command, changes made during by the `release` command are _not_ persisted to disk.
|
||||||
|
|
||||||
|
> Warning: scaling the release command up will likely result in unspecified issues within your deployment, and is highly discouraged.
|
||||||
127
docs/advanced-usage/docker-options.md
Normal file
127
docs/advanced-usage/docker-options.md
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
# Docker Container Options
|
||||||
|
|
||||||
|
> New as of 0.3.17
|
||||||
|
|
||||||
|
Pass [container options](https://docs.docker.com/engine/reference/run/) to the `docker run` command during Dokku's `build`, `deploy` and `run` phases
|
||||||
|
|
||||||
|
```
|
||||||
|
docker-options:add <app> <phase(s)> OPTION # Add Docker option to app for phase (comma-separated phase list)
|
||||||
|
docker-options:clear <app> [<phase(s)>...] # Clear a docker options from application
|
||||||
|
docker-options:remove <app> <phase(s)> OPTION # Remove Docker option from app for phase (comma-separated phase list)
|
||||||
|
docker-options:report [<app>] [<flag>] # Displays a docker options report for one or more apps
|
||||||
|
```
|
||||||
|
|
||||||
|
> When specifying multiple phases, they **must** be comma-separated _without_ spaces in between each phase, like so:
|
||||||
|
>
|
||||||
|
> ```shell
|
||||||
|
> dokku docker-options:add node-js-app deploy,run "-v /var/log/node-js-app:/app/logs"
|
||||||
|
> ```
|
||||||
|
|
||||||
|
## About Dokku phases
|
||||||
|
|
||||||
|
Dokku deploys your application in multiple "phases" and the `docker-options` plugin allows you to pass arguments to their underlying docker container:
|
||||||
|
|
||||||
|
- `build`: the container that executes the appropriate buildpack
|
||||||
|
- `deploy`: the container that executes your running/deployed application
|
||||||
|
- `run`: the container that executes any arbitrary command via `dokku run`
|
||||||
|
|
||||||
|
Manipulation of docker options will not restart running containers. This enables multiple options to be set/unset before final application. As such, changing an app's docker options must be followed by a `dokku ps:rebuild` in order to take effect.
|
||||||
|
|
||||||
|
More information on supported Docker options can be found here: https://docs.docker.com/engine/reference/commandline/run/.
|
||||||
|
|
||||||
|
Container options configured via the `docker-options` plugin are not used to modify the process a container runs. Container options are the `[OPTIONS]` portion of the following, where `[CONTAINER_COMMAND]` and `[ARG]` are the process and the arguments passed to it that are launched in the created container: `docker run [OPTIONS] [CONTAINER_COMMAND] [ARG...]`. Please see the documentation for [customizing the run command](/docs/deployment/builders/dockerfiles.md#customizing-the-run-command) or use a [Procfile](/docs/deployment/builders/dockerfiles.md#procfiles-and-multiple-processes) to modify the command used by a Dockerfile-based container.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
### Add Docker options
|
||||||
|
|
||||||
|
Add some options for the deployed/running app and when executing [`dokku run`](/docs/processes/one-off-tasks.md):
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# Mount a host volume in a Docker container: "-v /host/path:/container/path"
|
||||||
|
dokku docker-options:add node-js-app deploy "-v /var/log/node-js-app:/app/logs"
|
||||||
|
dokku docker-options:add node-js-app run "-v /var/log/node-js-app:/app/logs"
|
||||||
|
```
|
||||||
|
|
||||||
|
> Note: When [mounting a host directory](https://docs.docker.com/engine/reference/run/#volume-shared-filesystems) in a Dokku app you should first create that directory as user `dokku` and then mount the directory under `/app` in the container using `docker-options` as above. Otherwise the app will lack write permission in the directory.
|
||||||
|
|
||||||
|
### Remove a Docker option
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku docker-options:remove node-js-app run "-v /var/log/node-js-app:/app/logs"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Clear all Docker options for an app
|
||||||
|
|
||||||
|
Docker options can be removed for a specific app using the `docker-options:clear` command.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku docker-options:clear node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
-----> Clearing docker-options for node-js-app on all phases
|
||||||
|
```
|
||||||
|
|
||||||
|
One or more valid phases can also be specified. Phases are comma delimited, and specifying an invalid phase will result in an error.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku docker-options:clear node-js-app run
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
-----> Clearing docker-options for node-js-app on phase run
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku docker-options:clear node-js-app build,run
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
-----> Clearing docker-options for node-js-app on phase build
|
||||||
|
-----> Clearing docker-options for node-js-app on phase run
|
||||||
|
```
|
||||||
|
|
||||||
|
### Displaying docker-options reports for an app
|
||||||
|
|
||||||
|
> New as of 0.8.1
|
||||||
|
|
||||||
|
You can get a report about the app's docker-options status using the `docker-options:report` command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku docker-options:report
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> node-js-app docker options information
|
||||||
|
Docker options build:
|
||||||
|
Docker options deploy: -v /var/log/node-js-app:/app/logs
|
||||||
|
Docker options run: -v /var/log/node-js-app:/app/logs
|
||||||
|
=====> python-sample docker options information
|
||||||
|
Docker options build:
|
||||||
|
Docker options deploy:
|
||||||
|
Docker options run:
|
||||||
|
=====> ruby-sample docker options information
|
||||||
|
Docker options build:
|
||||||
|
Docker options deploy:
|
||||||
|
Docker options run:
|
||||||
|
```
|
||||||
|
|
||||||
|
You can run the command for a specific app also.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku docker-options:report node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> node-js-app docker options information
|
||||||
|
Docker options build:
|
||||||
|
Docker options deploy: -v /var/log/node-js-app:/app/logs
|
||||||
|
Docker options run: -v /var/log/node-js-app:/app/logs
|
||||||
|
```
|
||||||
|
|
||||||
|
You can pass flags which will output only the value of the specific information you want. For example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku docker-options:report node-js-app --docker-options-build
|
||||||
|
```
|
||||||
@@ -1,36 +1,43 @@
|
|||||||
# Dokku Event Logs
|
# Dokku Event Logs
|
||||||
|
|
||||||
|
> New as of 0.3.21
|
||||||
|
|
||||||
Docker provides an _events_ command to show system's real time events. Likewise, Dokku can record events as syslog entries and also provides a plugin to display the last ones.
|
Docker provides an _events_ command to show system's real time events. Likewise, Dokku can record events as syslog entries and also provides a plugin to display the last ones.
|
||||||
|
|
||||||
```
|
```
|
||||||
events [-t] Show the last events (-t follows)
|
events [-t] # Show the last events (-t follows)
|
||||||
events:list List logged events
|
events:list # List logged events
|
||||||
events:on Enable events logger
|
events:on # Enable events logger
|
||||||
events:off Disable events logger
|
events:off # Disable events logger
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Enable the plugin:
|
Enable the plugin:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku events:on
|
||||||
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
$ dokku events:on
|
|
||||||
Enabling dokku events logger
|
Enabling dokku events logger
|
||||||
```
|
```
|
||||||
|
|
||||||
Dokku will then write log entries to ``/var/log/syslog`` as well as a Dokku-specific logs sub-directory ``/var/log/dokku/events.log``, which can be easily displayed with the command `dokku events`:
|
Dokku will then write log entries to `/var/log/syslog` as well as a Dokku-specific logs sub-directory `/var/log/dokku/events.log`, which can be easily displayed with the command `dokku events`:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku events
|
||||||
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
Jul 3 16:09:48 dokku.me dokku[127630]: INVOKED: pre-release-buildstep( pythonapp )
|
Jul 3 16:09:48 dokku.me dokku[127630]: INVOKED: pre-release-buildpack( pythonapp )
|
||||||
Jul 3 16:10:02 dokku.me dokku[128095]: INVOKED: docker-args-run( rubyapp )
|
Jul 3 16:10:02 dokku.me dokku[128095]: INVOKED: docker-args-run( rubyapp )
|
||||||
Jul 3 16:10:02 dokku.me dokku[128114]: INVOKED: docker-args-run( nhl )
|
Jul 3 16:10:02 dokku.me dokku[128114]: INVOKED: docker-args-run( nhl )
|
||||||
Jul 3 16:10:03 dokku.me dokku[128136]: INVOKED: post-release-buildstep( pythonapp )
|
Jul 3 16:10:03 dokku.me dokku[128136]: INVOKED: post-release-buildpack( pythonapp )
|
||||||
Jul 3 16:10:03 dokku.me dokku[128195]: INVOKED: pre-deploy( pythonapp )
|
Jul 3 16:10:03 dokku.me dokku[128195]: INVOKED: pre-deploy( pythonapp )
|
||||||
Jul 3 16:10:23 dokku.me dokku[129253]: INVOKED: docker-args-deploy( pythonapp )
|
Jul 3 16:10:23 dokku.me dokku[129253]: INVOKED: docker-args-deploy( pythonapp )
|
||||||
Jul 3 16:10:24 dokku.me dokku[129337]: INVOKED: bind-external-ip( pythonapp )
|
|
||||||
Jul 3 16:10:24 dokku.me dokku[129451]: INVOKED: check-deploy( pythonapp 6274ced0d4be11af4490cd18abaf77cdd593f025133f403d984e80d86a39acec web 5000 10.0.16.80 )
|
Jul 3 16:10:24 dokku.me dokku[129451]: INVOKED: check-deploy( pythonapp 6274ced0d4be11af4490cd18abaf77cdd593f025133f403d984e80d86a39acec web 5000 10.0.16.80 )
|
||||||
Jul 3 16:10:35 dokku.me dokku[129561]: INVOKED: docker-args-deploy( pythonapp )
|
Jul 3 16:10:35 dokku.me dokku[129561]: INVOKED: docker-args-deploy( pythonapp )
|
||||||
Jul 3 16:10:35 dokku.me dokku[129649]: INVOKED: bind-external-ip( pythonapp )
|
|
||||||
Jul 3 16:10:36 dokku.me dokku[129760]: INVOKED: check-deploy( pythonapp ac88a56ee4161ff37e4b92d1498c3eadc91f0aa7c8b81b44fc077e2a51d54cc0 worker )
|
Jul 3 16:10:36 dokku.me dokku[129760]: INVOKED: check-deploy( pythonapp ac88a56ee4161ff37e4b92d1498c3eadc91f0aa7c8b81b44fc077e2a51d54cc0 worker )
|
||||||
Jul 3 16:10:46 dokku.me dokku[129851]: INVOKED: post-deploy( pythonapp )
|
Jul 3 16:10:46 dokku.me dokku[129851]: INVOKED: post-deploy( pythonapp )
|
||||||
Jul 3 16:10:46 dokku.me dokku[129945]: INVOKED: nginx-pre-reload( pythonapp )
|
Jul 3 16:10:46 dokku.me dokku[129945]: INVOKED: nginx-pre-reload( pythonapp )
|
||||||
@@ -40,34 +47,35 @@ Jul 3 16:30:02 dokku.me dokku[131384]: INVOKED: docker-args-run( rubyapp )
|
|||||||
```
|
```
|
||||||
|
|
||||||
You can list all events that are currently being recorded via `dokku events:list`:
|
You can list all events that are currently being recorded via `dokku events:list`:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku events:list
|
||||||
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
=====> Events currently logged
|
=====> Events currently logged
|
||||||
backup-check
|
|
||||||
docker-args-build
|
|
||||||
pre-delete
|
|
||||||
post-deploy
|
|
||||||
receive-app
|
|
||||||
pre-release-buildstep
|
|
||||||
nginx-pre-reload
|
|
||||||
docker-args-deploy
|
|
||||||
post-build-buildstep
|
|
||||||
post-domains-update
|
|
||||||
post-release-dockerfile
|
|
||||||
check-deploy
|
check-deploy
|
||||||
backup-import
|
|
||||||
backup-export
|
|
||||||
git-pre-pull
|
|
||||||
git-post-pull
|
|
||||||
nginx-hostname
|
|
||||||
bind-external-ip
|
|
||||||
pre-deploy
|
|
||||||
post-delete
|
|
||||||
dependencies
|
dependencies
|
||||||
pre-build-buildstep
|
docker-args-build
|
||||||
|
docker-args-deploy
|
||||||
docker-args-run
|
docker-args-run
|
||||||
pre-build-dockerfile
|
git-post-pull
|
||||||
post-release-buildstep
|
git-pre-pull
|
||||||
|
nginx-hostname
|
||||||
|
nginx-pre-reload
|
||||||
|
post-build-buildpack
|
||||||
post-build-dockerfile
|
post-build-dockerfile
|
||||||
|
post-delete
|
||||||
|
post-deploy
|
||||||
|
post-domains-update
|
||||||
|
post-release-buildpack
|
||||||
|
post-release-dockerfile
|
||||||
|
pre-build-buildpack
|
||||||
|
pre-build-dockerfile
|
||||||
|
pre-delete
|
||||||
|
pre-deploy
|
||||||
|
pre-release-buildpack
|
||||||
pre-release-dockerfile
|
pre-release-dockerfile
|
||||||
|
receive-app
|
||||||
update
|
update
|
||||||
```
|
```
|
||||||
178
docs/advanced-usage/persistent-storage.md
Normal file
178
docs/advanced-usage/persistent-storage.md
Normal file
@@ -0,0 +1,178 @@
|
|||||||
|
# Persistent Storage
|
||||||
|
|
||||||
|
> New as of 0.5.0
|
||||||
|
|
||||||
|
The preferred method to mount external containers to a Dokku managed container, is to use the Dokku storage plugin.
|
||||||
|
|
||||||
|
```
|
||||||
|
storage:ensure-directory [--chown option] <directory> # Creates a persistent storage directory in the recommended storage path
|
||||||
|
storage:list <app> # List bind mounts for app's container(s) (host:container)
|
||||||
|
storage:mount <app> <host-dir:container-dir> # Create a new bind mount
|
||||||
|
storage:report [<app>] [<flag>] # Displays a checks report for one or more apps
|
||||||
|
storage:unmount <app> <host-dir:container-dir> # Remove an existing bind mount
|
||||||
|
```
|
||||||
|
|
||||||
|
> The storage plugin is compatible with storage mounts created with the docker-options. The storage plugin will only list mounts from the deploy/run phase.
|
||||||
|
|
||||||
|
The storage plugin supports the following mount points:
|
||||||
|
|
||||||
|
- explicit paths that exist on the host
|
||||||
|
- docker volumes
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Creating storage directories
|
||||||
|
|
||||||
|
> New as of 0.25.5
|
||||||
|
|
||||||
|
A storage directory can be created with the `storage:ensure-directory` command. This command will create a subdirectory in the recommended `/var/lib/dokku/data/storage` path - created during Dokku installation - and prepare it for use with an app.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku storage:ensure-directory lollipop
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
-----> Ensuring /var/lib/dokku/data/storage/lollipop exists
|
||||||
|
Setting directory ownership to 32767:32767
|
||||||
|
Directory ready for mounting
|
||||||
|
```
|
||||||
|
|
||||||
|
By default, permissions are set for usage with Herokuish buildpacks. These permissions can be changed via the `--chown` option according to the following table:
|
||||||
|
|
||||||
|
- `--chown herokuish` (default): Use `32767:32767` as the folder permissions.
|
||||||
|
- This is used for apps deployed with Buildpacks via Herokuish.
|
||||||
|
- `--chown heroku`: Use `1000:1000` as the folder permissions.
|
||||||
|
- This is used for apps deployed with Cloud Native Buildpacks using the `heroku/buildpacks` builder.
|
||||||
|
- `--chown packeto`: Use `2000:2000` as the folder permissions.
|
||||||
|
- This is used for apps deployed with Cloud Native Buildpacks using the `cloudfoundry/cnb` or `packeto` builders.
|
||||||
|
- `--chown false`: Skips the `chown` call.
|
||||||
|
|
||||||
|
Users deploying via Dockerfile will want to specify `--chown false` and manually `chown` the created directory if the user and/or group id of the runnning process in the deployed container do not correspond to any of the above options.
|
||||||
|
|
||||||
|
> Warning: Failing to set the correct directory ownership may result in issues in persisting files written to the mounted storage directory.
|
||||||
|
|
||||||
|
### Mounting storage into apps
|
||||||
|
|
||||||
|
Dokku supports mounting both explicit host paths as well as docker volumes via the `storage:mount` command. This takes two arguments, an app name and a `host-path:container-path` or `docker-volume:container-path` combination.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# mount the directory into your container's /app/storage directory, relative to the container root (/)
|
||||||
|
# explicit host paths _must_ exist prior to usage.
|
||||||
|
dokku storage:mount node-js-app /var/lib/dokku/data/storage/node-js-app:/app/storage
|
||||||
|
|
||||||
|
# mount the docker volume into your container's /app/storage directory, relative to the container root (/)
|
||||||
|
# docker volumes _must_ exist prior to usage.
|
||||||
|
dokku storage:mount node-js-app some-docker-volume:/app/storage
|
||||||
|
```
|
||||||
|
|
||||||
|
In the first example, Dokku will then mount the shared contents of `/var/lib/dokku/data/storage/node-js-app` to `/app/storage` inside the container. The mount point is *not* relative to your app's working directory, and is instead relative to the root (`/`) of the container. Mounts are only available for containers created via `run` and by the deploy process, and not during the build process. In addition, the host path is never auto-created by either Dokku or Docker, and should be an explicit path, not one relative to the current working directory.
|
||||||
|
|
||||||
|
> If the `/storage` path within the container had pre-existing content, the container files will be over-written. This may be an issue for users that create assets at build time but then mount a directory at the same place during runtime. Files are not merged.
|
||||||
|
|
||||||
|
Once persistent storage is mounted, the app requires a restart. See the [process scaling documentation](/docs/processes/process-management.md) for more information.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:restart app-name
|
||||||
|
```
|
||||||
|
|
||||||
|
### Unmounting storage
|
||||||
|
|
||||||
|
If an app no longer requires a mounted volume or directory, the `storage:unmount` command can be called. This takes the same arguments as the `storage:mount` command, an app name and a `host-path:container-path` or `docker-volume:container-path` combination.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# unmount the directory from your container's /app/storage directory, relative to the container root (/)
|
||||||
|
dokku storage:unmount node-js-app /var/lib/dokku/data/storage/node-js-app:/app/storage
|
||||||
|
|
||||||
|
# unmount the docker volume from your container's /app/storage directory, relative to the container root (/)
|
||||||
|
dokku storage:unmount node-js-app some-docker-volume:/app/storage
|
||||||
|
```
|
||||||
|
|
||||||
|
Once persistent storage is unmounted, the app requires a restart. See the [process scaling documentation](/docs/processes/process-management.md) for more information.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:restart app-name
|
||||||
|
```
|
||||||
|
|
||||||
|
### Displaying storage reports for an app
|
||||||
|
|
||||||
|
> New as of 0.8.1
|
||||||
|
|
||||||
|
You can get a report about the app's storage status using the `storage:report` command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku storage:report
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> node-js-app storage information
|
||||||
|
Storage build mounts:
|
||||||
|
Storage deploy mounts: -v /var/lib/dokku/data/storage/node-js-app:/app/storage
|
||||||
|
Storage run mounts: -v /var/lib/dokku/data/storage/node-js-app:/app/storage
|
||||||
|
=====> python-sample storage information
|
||||||
|
Storage build mounts:
|
||||||
|
Storage deploy mounts:
|
||||||
|
Storage run mounts:
|
||||||
|
=====> ruby-sample storage information
|
||||||
|
Storage build mounts:
|
||||||
|
Storage deploy mounts:
|
||||||
|
Storage run mounts:
|
||||||
|
```
|
||||||
|
|
||||||
|
You can run the command for a specific app also.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku storage:report node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> node-js-app storage information
|
||||||
|
Storage build mounts:
|
||||||
|
Storage deploy mounts: -v /var/lib/dokku/data/storage/node-js-app:/app/storage
|
||||||
|
Storage run mounts: -v /var/lib/dokku/data/storage/node-js-app:/app/storage
|
||||||
|
```
|
||||||
|
|
||||||
|
You can pass flags which will output only the value of the specific information you want. For example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku storage:report node-js-app --storage-deploy-mounts
|
||||||
|
```
|
||||||
|
|
||||||
|
## Use Cases
|
||||||
|
|
||||||
|
### Sharing storage across deploys
|
||||||
|
|
||||||
|
Dokku is powered by Docker containers, which recommends in their [best practices](https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#containers-should-be-ephemeral) that containers be treated as ephemeral. In order to manage persistent storage for web apps, like user uploads or large binary assets like images, a directory outside the container should be mounted.
|
||||||
|
|
||||||
|
### Shared storage between containers
|
||||||
|
|
||||||
|
When scaling your app, you may require a common location to access shared assets between containers, a storage mount can be used in this situation.
|
||||||
|
|
||||||
|
### Shared storage across environments
|
||||||
|
|
||||||
|
Your app may be used in a cluster that requires containers or resources not running on the same host access your data. Mounting a shared file service (like S3FS or EFS) inside your container will give you great flexibility.
|
||||||
|
|
||||||
|
### Backing up
|
||||||
|
|
||||||
|
Your app may have services that are running in memory and need to be backed up locally (like a key store). Mount a non ephemeral storage mount will allow backups that are not lost when the app is shut down.
|
||||||
|
|
||||||
|
### Build phase
|
||||||
|
|
||||||
|
By default, Dokku will only bind storage mounts during the deploy and run phases. Under certain conditions, one might want to bind a storage mount during the build phase. This can be accomplished by using the `docker-options` plugin directly.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku docker-options:add node-js-app build "-v /tmp/python-test:/opt/test"
|
||||||
|
```
|
||||||
|
|
||||||
|
You cannot use mounted volumes during the build phase of a Dockerfile deploy. This is because Docker does not support volumes when executing `docker build`.
|
||||||
|
|
||||||
|
> Note: **This can cause data loss** if you bind a mount under `/app` in buildpack apps as herokuish will attempt to remove the original app path during the build phase.
|
||||||
|
|
||||||
|
## App User and Persistent Storage file ownership (buildpack apps only)
|
||||||
|
|
||||||
|
> New as of 0.7.1
|
||||||
|
|
||||||
|
By default, Dokku will execute your buildpack app processes as the `herokuishuser` user. You may override this by setting the `DOKKU_APP_USER` config variable.
|
||||||
|
|
||||||
|
> NOTE: this user must exist in your herokuish image.
|
||||||
|
|
||||||
|
Additionally, the default `docker-local` scheduler that comes with Dokku will ensure your storage mounts are owned by either `herokuishuser` or the overridden value you have set in `DOKKU_APP_USER`. See the [docker-local scheduler documentation](/docs/advanced-usage/schedulers/docker-local.md#disabling-chown-of-persistent-storage) docs for more information.
|
||||||
208
docs/advanced-usage/plugin-management.md
Normal file
208
docs/advanced-usage/plugin-management.md
Normal file
@@ -0,0 +1,208 @@
|
|||||||
|
# Plugin Management
|
||||||
|
|
||||||
|
> New as of 0.4.0
|
||||||
|
|
||||||
|
```
|
||||||
|
plugin:disable <name> # Disable an installed plugin (third-party only)
|
||||||
|
plugin:enable <name> # Enable a previously disabled plugin
|
||||||
|
plugin:install [--core|git-url [--committish tag|branch|commit|--name custom-plugin-name]] # Optionally download git-url (with custom tag/committish) & run install trigger for active plugins (or only core ones)
|
||||||
|
plugin:installed <name> # Checks if a plugin is installed
|
||||||
|
plugin:install-dependencies [--core] # Run install-dependencies trigger for active plugins (or only core ones)
|
||||||
|
plugin:list # Print active plugins
|
||||||
|
plugin:trigger <args...>. # Trigger an arbitrary plugin hook
|
||||||
|
plugin:uninstall <name> # Uninstall a plugin (third-party only)
|
||||||
|
plugin:update [name [committish]] # Optionally update named plugin from git (with custom tag/committish) & run update trigger for active plugins
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# for 0.3.x
|
||||||
|
cd /var/lib/dokku/plugins
|
||||||
|
git clone <git url>
|
||||||
|
dokku plugins-install
|
||||||
|
```
|
||||||
|
|
||||||
|
> These commands require `root` permissions as the `install` and `install-dependencies` plugin triggers may utilize commands such as `apt-get`. For non-core plugins, please inspect those plugins before running the following command as `root` user.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Listing Plugins
|
||||||
|
|
||||||
|
Installed plugins can be listed via the `plugin:list` command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku plugin:list
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
plugn: dev
|
||||||
|
00_dokku-standard 0.27.1 enabled dokku core standard plugin
|
||||||
|
20_events 0.27.1 enabled dokku core events logging plugin
|
||||||
|
app-json 0.27.1 enabled dokku core app-json plugin
|
||||||
|
apps 0.27.1 enabled dokku core apps plugin
|
||||||
|
build-env 0.27.1 enabled dokku core build-env plugin
|
||||||
|
buildpacks 0.27.1 enabled dokku core buildpacks plugin
|
||||||
|
certs 0.27.1 enabled dokku core certificate management plugin
|
||||||
|
checks 0.27.1 enabled dokku core checks plugin
|
||||||
|
common 0.27.1 enabled dokku core common plugin
|
||||||
|
config 0.27.1 enabled dokku core config plugin
|
||||||
|
docker-options 0.27.1 enabled dokku core docker-options plugin
|
||||||
|
domains 0.27.1 enabled dokku core domains plugin
|
||||||
|
enter 0.27.1 enabled dokku core enter plugin
|
||||||
|
git 0.27.1 enabled dokku core git plugin
|
||||||
|
logs 0.27.1 enabled dokku core logs plugin
|
||||||
|
network 0.27.1 enabled dokku core network plugin
|
||||||
|
nginx-vhosts 0.27.1 enabled dokku core nginx-vhosts plugin
|
||||||
|
plugin 0.27.1 enabled dokku core plugin plugin
|
||||||
|
proxy 0.27.1 enabled dokku core proxy plugin
|
||||||
|
ps 0.27.1 enabled dokku core ps plugin
|
||||||
|
repo 0.27.1 enabled dokku core repo plugin
|
||||||
|
resource 0.27.1 enabled dokku core resource plugin
|
||||||
|
scheduler-docker-local 0.27.1 enabled dokku core scheduler-docker-local plugin
|
||||||
|
shell 0.27.1 enabled dokku core shell plugin
|
||||||
|
ssh-keys 0.27.1 enabled dokku core ssh-keys plugin
|
||||||
|
storage 0.27.1 enabled dokku core storage plugin
|
||||||
|
tags 0.27.1 enabled dokku core tags plugin
|
||||||
|
tar 0.27.1 enabled dokku core tar plugin
|
||||||
|
trace 0.27.1 enabled dokku core trace plugin
|
||||||
|
```
|
||||||
|
|
||||||
|
> Warning: All plugin commands other than `plugin:list` and `plugin:help` require sudo access and must be run directly from the Dokku server.
|
||||||
|
|
||||||
|
### Checking if a plugin is installed
|
||||||
|
|
||||||
|
You can check if a plugin has been installed via the `plugin:installed` command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku plugin:installed postgres
|
||||||
|
```
|
||||||
|
|
||||||
|
### Installing a plugin
|
||||||
|
|
||||||
|
Installing a plugin is easy as well using the `plugin:install` command. This command will also trigger the `install` pluginhook on all existing plugins.
|
||||||
|
|
||||||
|
The most common usage is to install a plugin from a url. This url may be any of the following:
|
||||||
|
|
||||||
|
- `git`: For git+ssh based plugin repository clones.
|
||||||
|
- `ssh`: For git+ssh based plugin repository clones.
|
||||||
|
- `file`: For copying plugins from a path on disk.
|
||||||
|
- `https`: For http based plugin repository clones.
|
||||||
|
|
||||||
|
Additionally, any urls with the extensions `.tar.gz` or `.tgz` are treated as Gzipped Tarballs for installation purposes and will be downloaded and extracted into place.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku plugin:install https://github.com/dokku/dokku-postgres.git
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
-----> Cloning plugin repo https://github.com/dokku/dokku-postgres.git to /var/lib/dokku/plugins/available/postgres
|
||||||
|
Cloning into 'postgres'...
|
||||||
|
remote: Counting objects: 646, done.
|
||||||
|
remote: Total 646 (delta 0), reused 0 (delta 0), pack-reused 646
|
||||||
|
Receiving objects: 100% (646/646), 134.24 KiB | 0 bytes/s, done.
|
||||||
|
Resolving deltas: 100% (406/406), done.
|
||||||
|
Checking connectivity... done.
|
||||||
|
-----> Plugin postgres enabled
|
||||||
|
```
|
||||||
|
|
||||||
|
For git-based plugin installation, a commit SHA-like object may be specified (tag/branch/commit sha) via the `--committish` argument and Dokku will attempt to install the specified commit object.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# where 2.0.0 is a potential git tag
|
||||||
|
dokku plugin:install https://github.com/dokku/dokku-postgres.git --committish 2.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
Plugin names are interpolated based on the repository name minus the `dokku-` prefix. If the plugin being installed has a name other than what matches the repository name - or another name is desired - the `--name` flag can be used to override this interpolation.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku plugin:install https://github.com/dokku/smoke-test-plugin.git --name smoke-test-plugin
|
||||||
|
```
|
||||||
|
|
||||||
|
The `--core` flag may also be indicated as the sole argument, though it is only for installation of core plugins, and thus not useful for end-user installations.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku plugin:install --core
|
||||||
|
```
|
||||||
|
|
||||||
|
Finally, all flags may be omitted to trigger the `install` procedures for both core and third-party plugins:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku plugin:install
|
||||||
|
```
|
||||||
|
|
||||||
|
### Installing plugin dependencies
|
||||||
|
|
||||||
|
In some cases, plugins will have system-level dependencies. These are not automatically installed via `plugin:install`, and must be separately via the `plugin:install-dependencies` command. This will run through all the `dependencies` trigger for all plugins.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku plugin:install-dependencies
|
||||||
|
```
|
||||||
|
|
||||||
|
This command may also target _just_ core plugins via the `--core` flag. This is usually only useful for source-based installs of Dokku.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku plugin:install-dependencies --core
|
||||||
|
```
|
||||||
|
|
||||||
|
### Updating a plugin
|
||||||
|
|
||||||
|
An installed, third-party plugin can be updated can updated via the `plugin:update` command. This should be done after any upgrades of Dokku as there may be changes in the internal api that require an update of how the plugin interfaces with Dokku.
|
||||||
|
|
||||||
|
Please note that this command is only valid for plugin installs that were backed by a git-repository.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku plugin:update postgres
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
Plugin (postgres) updated
|
||||||
|
```
|
||||||
|
|
||||||
|
An optional commit SHA-like object may be specified.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku plugin:update postgres 2.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
### Uninstalling a plugin
|
||||||
|
|
||||||
|
Third party plugins can be uninstalled using the `plugin:uninstall` command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku plugin:uninstall postgres
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
-----> Plugin postgres uninstalled
|
||||||
|
```
|
||||||
|
|
||||||
|
### Disabling a plugin
|
||||||
|
|
||||||
|
Disabling a plugin can also be useful for debugging whether a third-party plugin is causing issues in a Dokku installation. Another common use case is for disabling core functionality for replacement with a third-party plugin.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku plugin:disable postgres
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
-----> Plugin postgres disabled
|
||||||
|
```
|
||||||
|
|
||||||
|
### Enabling a plugin
|
||||||
|
|
||||||
|
Disabled plugins can be re-enabled via the `plugin:enable` command.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku plugin:enable postgres
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
-----> Plugin postgres enabled
|
||||||
|
```
|
||||||
|
|
||||||
|
### Triggering a plugin trigger
|
||||||
|
|
||||||
|
The `plugin:trigger` can be used to call any internal plugin trigger. This may have unintended consequences, and thus should only be called for development or debugging purposes.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku plugin:trigger some-internal-trigger args-go-here
|
||||||
|
```
|
||||||
126
docs/advanced-usage/registry-management.md
Normal file
126
docs/advanced-usage/registry-management.md
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
# Registry Management
|
||||||
|
|
||||||
|
> New as of 0.25.0
|
||||||
|
|
||||||
|
```
|
||||||
|
registry:login [--password-stdin] <server> <username> [<password>] # Login to a docker registry
|
||||||
|
registry:report [<app>] [<flag>] # Displays a registry report for one or more apps
|
||||||
|
registry:set <app> <key> (<value>) # Set or clear a registry property for an app
|
||||||
|
```
|
||||||
|
|
||||||
|
The registry plugin enables interacting with remote registries, which is useful when either deploying images via `git:from-image` or when interacting with custom schedulers to deploy built image artifacts.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Logging into a registry
|
||||||
|
|
||||||
|
The `registry:login` command can be used to log into a docker registry. The following are examples for logging into various common registries:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# hub.docker.com
|
||||||
|
dokku registry:login docker.io $USERNAME $PASSWORD
|
||||||
|
|
||||||
|
# digitalocean
|
||||||
|
# the username and password are both defined as the same api token
|
||||||
|
dokku registry:login registry.digitalocean.com $DIGITALOCEAN_API_TOKEN $DIGITALOCEAN_API_TOKEN
|
||||||
|
|
||||||
|
# github container registry
|
||||||
|
# see the following link for information on retrieving a personal access token
|
||||||
|
# https://docs.github.com/en/packages/guides/pushing-and-pulling-docker-images#authenticating-to-github-container-registry
|
||||||
|
dokku registry:login ghcr.io $USERNAME $REGISTRY_PAT_TOKEN
|
||||||
|
|
||||||
|
# quay
|
||||||
|
# a robot user may be used to login
|
||||||
|
dokku registry:login quay.io $USERNAME $PASSWORD
|
||||||
|
```
|
||||||
|
|
||||||
|
For security reasons, the password may also be specified as stdin by specifying the `--password-stdin` flag. This is supported regardless of the registry being logged into.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
echo "$PASSWORD" | dokku registry:login --password-stdin docker.io $USERNAME
|
||||||
|
```
|
||||||
|
|
||||||
|
For certain Docker registries - such as Amazon ECR or Google's GCR registries - users may instead wish to use a docker credential helper to automatically authenticate against a server; please see the documentation regarding the credential helper in question for further setup instructions.
|
||||||
|
|
||||||
|
### Setting a remote server
|
||||||
|
|
||||||
|
To specify a remote server registry for pushes, set the `server` property via the `registry:set` command. The default value for this property is empty string. Setting the value to `docker.io` or `hub.docker.com` will result in the computed value being empty string (as that is the default, implicit registry), while any non-zero length value will have a `/` appended to it if there is not one already.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku registry:set node-js-app server docker.io
|
||||||
|
```
|
||||||
|
|
||||||
|
This property can be set for a single app or globally via the `--global` flag. When set globally, the app-specific value will always overide the global value. The default global value for this property is empty string.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku registry:set --global server docker.io
|
||||||
|
```
|
||||||
|
|
||||||
|
Setting the property value to an empty string will reset the value to the system default. Resetting the value can be done per app or globally.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# per-app
|
||||||
|
dokku registry:set node-js-app server
|
||||||
|
|
||||||
|
# globally
|
||||||
|
dokku registry:set --global server
|
||||||
|
```
|
||||||
|
|
||||||
|
The following are the values that should be used for common remote servers:
|
||||||
|
|
||||||
|
- Amazon Elastic Container Registry:
|
||||||
|
- value: `$AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/`
|
||||||
|
- notes: The `$AWS_ACCOUNT_ID` and `$AWS_REGION` should match the values for your account and region, respectively. Additionally, an IAM profile that allows `push` access to the repository specified by `image-repo` should be attached to your Dokku server.
|
||||||
|
- Azure Container Registry:
|
||||||
|
- value `$REGISTRY_NAME.azurecr.io/`
|
||||||
|
- notes: The `$AKS_REGISTRY_NAME` should match the name of the registry created on your account.
|
||||||
|
- Docker Hub:
|
||||||
|
- value: `docker.io/`
|
||||||
|
- notes: Requires owning the namespace used in the `image-repo` value.
|
||||||
|
- Digitalocean:
|
||||||
|
- value: `registry.digitalocean.com/`
|
||||||
|
- notes: Requires setting the correct `image-repo` value for your registry.
|
||||||
|
- Github Container Registry:
|
||||||
|
- value: `ghcr.io/`
|
||||||
|
- notes: Requires that the authenticated user has access to the namespace used in the `image-repo` value.
|
||||||
|
- Quay.io:
|
||||||
|
- value: `quay.io/`
|
||||||
|
|
||||||
|
### Specifying an image repository name
|
||||||
|
|
||||||
|
By default, Dokku uses the value `dokku/$APP_NAME` as the image repository that is pushed and deployed. For certain registries, the `dokku` namespace may not be available to your user. In these cases, the value can be set by changing the value of the `image-repo` property via the `registry:set` command.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku registry:set node-js-app image-repo my-awesome-prefix/node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
Setting the property value to an empty string will reset the value to the system default. Resetting the value has to be done per-app.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# per-app
|
||||||
|
dokku registry:set node-js-app push-on-release
|
||||||
|
```
|
||||||
|
|
||||||
|
### Pushing images on build
|
||||||
|
|
||||||
|
To push the image on release, set the `push-on-release` property to `true` via the `registry:set` command. The default value for this property is `false`. Setting the property to `true` will result in the image being tagged with an ID that is incremented with every release. This tag will be what is used for running app code.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku registry:set node-js-app push-on-release true
|
||||||
|
```
|
||||||
|
|
||||||
|
This property can be set for a single app or globally via the `--global` flag. When set globally, the app-specific value will always overide the global value. The default global value for this property is `false`.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku registry:set --global push-on-release true
|
||||||
|
```
|
||||||
|
|
||||||
|
Setting the property value to an empty string will reset the value to the system default. Resetting the value can be done per app or globally.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# per-app
|
||||||
|
dokku registry:set node-js-app push-on-release
|
||||||
|
|
||||||
|
# globally
|
||||||
|
dokku registry:set --global push-on-release
|
||||||
|
```
|
||||||
36
docs/advanced-usage/repository-management.md
Normal file
36
docs/advanced-usage/repository-management.md
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# Repository Management
|
||||||
|
|
||||||
|
> New as of 0.6.0
|
||||||
|
|
||||||
|
```
|
||||||
|
repo:gc <app> # Runs 'git gc --aggressive' against the application's repo
|
||||||
|
repo:purge-cache <app> # Deletes the contents of the build cache stored in the repository
|
||||||
|
```
|
||||||
|
|
||||||
|
The repository plugin is meant to allow users to perform management commands against a repository.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Git Garbage Collection
|
||||||
|
|
||||||
|
This will run a git gc --aggressive against the applications repo. This is performed on the Dokku host, and not within an application container.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku repo:gc node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
Counting objects: 396, done.
|
||||||
|
Delta compression using up to 2 threads.
|
||||||
|
Compressing objects: 100% (365/365), done.
|
||||||
|
Writing objects: 100% (396/396), done.
|
||||||
|
Total 396 (delta 79), reused 315 (delta 0)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Clearing Application cache
|
||||||
|
|
||||||
|
Building containers with buildpacks currently results in a persistent `cache` directory between deploys. If you need to clear this cache directory for any reason, you may do so by running the following shell command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku repo:purge-cache node-js-app
|
||||||
|
```
|
||||||
340
docs/advanced-usage/resource-management.md
Normal file
340
docs/advanced-usage/resource-management.md
Normal file
@@ -0,0 +1,340 @@
|
|||||||
|
# Resource Management
|
||||||
|
|
||||||
|
> New as of 0.15.0
|
||||||
|
|
||||||
|
```
|
||||||
|
resource:limit [--process-type <process-type>] [RESOURCE_OPTS...] <app> # Limit resources for a given app/process-type combination
|
||||||
|
resource:limit-clear [--process-type <process-type>] <app> # Limit resources for a given app/process-type combination
|
||||||
|
resource:report [<app>] [<flag>] # Displays a resource report for one or more apps
|
||||||
|
resource:reserve [--process-type <process-type>] [RESOURCE_OPTS...] <app> # Reserve resources for a given app/process-type combination
|
||||||
|
resource:reserve-clear [--process-type <process-type>] <app> # Reserve resources for a given app/process-type combination
|
||||||
|
```
|
||||||
|
|
||||||
|
The resource plugin is meant to allow users to limit or reserve resources for a given app/process-type combination.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
By default, Dokku allows unlimited resource access to apps deployed on a server. In some cases, it may be desirable to limit this on a per-app or per-process-type basis. The `resource` plugin allows management of both resource "limits" and resource "reservations", where each resource request type has specific meaning to the scheduler in use for a given app.
|
||||||
|
|
||||||
|
> Warning: The meaning of a values and it's units are specific to the scheduler in use for a given app. If a value is incorrect for a scheduler, this may result in containers failing to start correctly. If a scheduler does not support a given resource type combination, it will be ignored. All resource commands require an app rebuild or deploy in order to take effect.
|
||||||
|
|
||||||
|
Valid resource options include:
|
||||||
|
|
||||||
|
- `--cpu`
|
||||||
|
- `--memory`
|
||||||
|
- `--memory-swap`
|
||||||
|
- `--network`
|
||||||
|
- `--network-ingress`
|
||||||
|
- `--network-egress`
|
||||||
|
- `--nvidia-gpu`
|
||||||
|
|
||||||
|
See the [Supported Resource Management Properties](/docs/advanced-usage/schedulers/docker-local.md#supported-resource-management-properties) section of the docker local scheduler documentation for more information on how each resource limit maps to Docker.
|
||||||
|
|
||||||
|
Resource limits and reservations are applied only during the `run` and `deploy` phases of an application, and will not impact the `build` phase of an application.
|
||||||
|
|
||||||
|
### Resource Limits
|
||||||
|
|
||||||
|
When specified and supported, a resource limit will ensure that your app does not go _over_ the specified value. If this occurs, the underlying scheduler may either cap resource utilization, or it may decide to terminate and reschedule your process.
|
||||||
|
|
||||||
|
Resource limits may be set via the `resource:limit` command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku resource:limit --memory 100 node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> Setting resource limits for node-js-app
|
||||||
|
memory: 100
|
||||||
|
```
|
||||||
|
|
||||||
|
Multiple resources can be limited in a single call:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku resource:limit --cpu 100 --memory 100 node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> Setting resource limits for node-js-app
|
||||||
|
cpu: 100
|
||||||
|
memory: 100
|
||||||
|
```
|
||||||
|
|
||||||
|
Resources can also be limited on a per-process type basis. If specified, this will override any generic limits set for the app.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku resource:limit --cpu 100 --memory 100 --process-type worker node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> Setting resource limits for node-js-app (worker)
|
||||||
|
cpu: 100
|
||||||
|
memory: 100
|
||||||
|
```
|
||||||
|
|
||||||
|
A resource value can be individually cleared by setting the value to the special value `clear`.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku resource:limit --cpu clear node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> Setting resource limits for node-js-app
|
||||||
|
cpu: cleared
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Displaying Resource Limits
|
||||||
|
|
||||||
|
Running the `resource:limit` command without any flags will display the currently configured default app limits.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku resource:limit node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> resource limits node-js-app information [defaults]
|
||||||
|
cpu:
|
||||||
|
memory:
|
||||||
|
memory-swap: 100
|
||||||
|
network: 100
|
||||||
|
network-ingress:
|
||||||
|
network-egress:
|
||||||
|
nvidia-gpu:
|
||||||
|
```
|
||||||
|
|
||||||
|
This may also be combined with the `--process-type` flag to see app limits on a process-type level. Note that the displayed values are not merged with the defaults.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku resource:limit --process-type web node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> resource limits node-js-app information (web)
|
||||||
|
cpu: 100
|
||||||
|
memory: 100
|
||||||
|
memory-swap:
|
||||||
|
network:
|
||||||
|
network-ingress:
|
||||||
|
network-egress:
|
||||||
|
nvidia-gpu:
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Clearing Resource Limits
|
||||||
|
|
||||||
|
In cases where the values are incorrect - or there is no desire to limit resources - resource limits may be cleared using the `resource:limit-clear` command.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku resource:limit-clear node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
-----> Clearing resource limit for node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
Defaults can also be cleared by leaving the app unspecified.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku resource:limit-clear
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
-----> Clearing default resource limits
|
||||||
|
```
|
||||||
|
|
||||||
|
### Resource Reservations
|
||||||
|
|
||||||
|
When specified and supported, a resource reservation will ensure that your server has _at least_ the specified resources before placing a given app's process. If there a resource exhaustion, future rebuilds and deploys may fail.
|
||||||
|
|
||||||
|
Resource reservations may be set via the `resource:reserve` command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku resource:reserve --memory 100 node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> Setting resource reservation for node-js-app
|
||||||
|
memory: 100
|
||||||
|
```
|
||||||
|
|
||||||
|
Multiple resources can be limited in a single call:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku resource:reserve --cpu 100 --memory 100 node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> Setting resource reservation for node-js-app
|
||||||
|
cpu: 100
|
||||||
|
memory: 100
|
||||||
|
```
|
||||||
|
|
||||||
|
Resources can also be limited on a per-process type basis. If specified, this will override any generic limits set for the app.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku resource:reserve --cpu 100 --memory 100 --process-type worker node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> Setting resource reservation for node-js-app (worker)
|
||||||
|
cpu: 100
|
||||||
|
memory: 100
|
||||||
|
```
|
||||||
|
|
||||||
|
A resource value can be individually cleared by setting the value to the special value `clear`.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku resource:reserve --cpu clear node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> Setting resource reservation for node-js-app
|
||||||
|
cpu: cleared
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Displaying Resource Reservations
|
||||||
|
|
||||||
|
Running the `resource:reserve` command without any flags will display the currently configured default app reservations.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku resource:reserve node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> resource reservation node-js-app information [defaults]
|
||||||
|
cpu: 100
|
||||||
|
memory: 100
|
||||||
|
memory-swap:
|
||||||
|
network:
|
||||||
|
network-ingress:
|
||||||
|
network-egress:
|
||||||
|
nvidia-gpu:
|
||||||
|
```
|
||||||
|
|
||||||
|
This may also be combined with the `--process-type` flag to see app reservations on a process-type level. Note that the displayed values are not merged with the defaults.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku resource:reserve --process-type web node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> resource reservation node-js-app information (web)
|
||||||
|
cpu: 100
|
||||||
|
memory: 100
|
||||||
|
memory-swap:
|
||||||
|
network:
|
||||||
|
network-ingress:
|
||||||
|
network-egress:
|
||||||
|
nvidia-gpu:
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Clearing Resource Reservations
|
||||||
|
|
||||||
|
In cases where the values are incorrect - or there is no desire to reserve resources - resource reservations may be cleared using the `resource:reserve-clear` command.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku resource:reserve-clear node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
-----> Clearing resource reservation for node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
Defaults can also be cleared by leaving the app unspecified.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku resource:reserve-clear
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
-----> Clearing default resource reservation
|
||||||
|
```
|
||||||
|
|
||||||
|
### Displaying resource reports for an app
|
||||||
|
|
||||||
|
You can get a report about the app's resource status using the `resource:report` command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku resource:report
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> node-js-app resource information
|
||||||
|
web limit cpu:
|
||||||
|
web limit memory: 1024
|
||||||
|
web limit memory swap: 0
|
||||||
|
web limit network: 10
|
||||||
|
web limit network ingress:
|
||||||
|
web limit network egress:
|
||||||
|
web limit nvidia gpu:
|
||||||
|
web reservation cpu:
|
||||||
|
web reservation memory: 512
|
||||||
|
web reservation memory swap:
|
||||||
|
web reservation network: 8
|
||||||
|
web reservation network ingress:
|
||||||
|
web reservation network egress:
|
||||||
|
web reservation nvidia gpu:
|
||||||
|
=====> python-sample resource information
|
||||||
|
web limit cpu:
|
||||||
|
web limit memory:
|
||||||
|
web limit memory swap:
|
||||||
|
web limit network:
|
||||||
|
web limit network ingress:
|
||||||
|
web limit network egress:
|
||||||
|
web limit nvidia gpu:
|
||||||
|
web reservation cpu:
|
||||||
|
web reservation memory:
|
||||||
|
web reservation memory swap:
|
||||||
|
web reservation network:
|
||||||
|
web reservation network ingress:
|
||||||
|
web reservation network egress:
|
||||||
|
web reservation nvidia gpu:
|
||||||
|
=====> ruby-sample resource information
|
||||||
|
web limit cpu:
|
||||||
|
web limit memory:
|
||||||
|
web limit memory swap:
|
||||||
|
web limit network:
|
||||||
|
web limit network ingress:
|
||||||
|
web limit network egress:
|
||||||
|
web limit nvidia gpu:
|
||||||
|
web reservation cpu:
|
||||||
|
web reservation memory:
|
||||||
|
web reservation memory swap:
|
||||||
|
web reservation network:
|
||||||
|
web reservation network ingress:
|
||||||
|
web reservation network egress:
|
||||||
|
web reservation nvidia gpu:
|
||||||
|
```
|
||||||
|
|
||||||
|
You can run the command for a specific app also.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku resource:report node-js-app
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
=====> node-js-app resource information
|
||||||
|
web limit cpu:
|
||||||
|
web limit memory: 1024
|
||||||
|
web limit memory swap: 0
|
||||||
|
web limit network: 10
|
||||||
|
web limit network ingress:
|
||||||
|
web limit network egress:
|
||||||
|
web limit nvidia gpu:
|
||||||
|
web reservation cpu:
|
||||||
|
web reservation memory: 512
|
||||||
|
web reservation memory swap:
|
||||||
|
web reservation network: 8
|
||||||
|
web reservation network ingress:
|
||||||
|
web reservation network egress:
|
||||||
|
web reservation nvidia gpu:
|
||||||
|
```
|
||||||
|
|
||||||
|
You can pass flags which will output only the value of the specific information you want. For example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# Note the periods in the flag name
|
||||||
|
dokku resource:report node-js-app --resource-web.limit.memory
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
1024
|
||||||
|
```
|
||||||
13
docs/appendices/0.10.0-migration-guide.md
Normal file
13
docs/appendices/0.10.0-migration-guide.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# 0.10.0 Migration Guide
|
||||||
|
|
||||||
|
## PCI Compliance
|
||||||
|
|
||||||
|
By default, Dokku will ship a PCI Compliant nginx configuration. For developers whose users are on older browsers or mobile devices, you may need to ship a custom `nginx.conf.sigil` to enable ciphers for older browsers.
|
||||||
|
|
||||||
|
See the [nginx customization](/docs/configuration/nginx/#customizing-the-nginx-configuration) docs for more details.
|
||||||
|
|
||||||
|
## Nginx Error Pages
|
||||||
|
|
||||||
|
We now ship with nicer error pages by default. You are free to customize your Dokku installation via a custom `nginx.conf.sigil` to change what error pages are displayed in different circumstances.
|
||||||
|
|
||||||
|
See the [nginx customization](/docs/configuration/nginx/#customizing-the-nginx-configuration) docs for more details.
|
||||||
93
docs/appendices/0.20.0-migration-guide.md
Normal file
93
docs/appendices/0.20.0-migration-guide.md
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
# 0.20.0 Migration Guide
|
||||||
|
|
||||||
|
## Removals
|
||||||
|
|
||||||
|
### Command removals
|
||||||
|
|
||||||
|
The following commands were previously deprecated and were removed in this release.
|
||||||
|
|
||||||
|
- `apps`: Use `apps:list` instead.
|
||||||
|
- `certs`: Use `certs:report` instead.
|
||||||
|
- `certs:info`: Use `certs:report` instead.
|
||||||
|
- `checks`: Use `checks:report` instead.
|
||||||
|
- `docker-options`: Use `docker-options:report` instead.
|
||||||
|
- `domains`: Use `domains:report` instead.
|
||||||
|
- `plugin`: Use `plugin:list` instead.
|
||||||
|
- `proxy`: Use `proxy:report` instead.
|
||||||
|
- `trace`: Use `trace:on` or `trace:off` instead.
|
||||||
|
- `ps`: Use `enter` with a container ID instead to run `ps auxww` within a container.
|
||||||
|
|
||||||
|
The refactor of the proxy plugin removes the following functions from being sourced in plugins:
|
||||||
|
|
||||||
|
- `proxy#get_app_proxy_port_map()`
|
||||||
|
- `proxy#list_app_proxy_ports()`
|
||||||
|
- `proxy#filter_app_proxy_ports()`
|
||||||
|
- `proxy#add_proxy_ports()`
|
||||||
|
- `proxy#remove_proxy_ports()`
|
||||||
|
- `proxy#set_proxy_ports()`
|
||||||
|
|
||||||
|
The informal policy is to allow removal of functions within a `functions` file if they are not used in OSS plugins. Should you be affected by any such removals, please file an issue to expose the functionality via a plugin trigger.
|
||||||
|
|
||||||
|
### Function renames
|
||||||
|
|
||||||
|
- `tar#tar_in_cmd` was renamed to `tar#cmd-tar-in`. Users should avoid using `cmd-*` commands directly, and instead file an issue to have them exposed via a plugin trigger.
|
||||||
|
- `tar#tar_from_cmd` was renamed to `tar#cmd-tar-from`. Users should avoid using `cmd-*` commands directly, and instead file an issue to have them exposed via a plugin trigger.
|
||||||
|
|
||||||
|
### Remove support for Unsupported Operating Systems
|
||||||
|
|
||||||
|
Dokku will no longer distribute packages for Ubuntu versions that have reached either End of Life or End of Standard Support (for LTS releases). This currently includes the following releases:
|
||||||
|
|
||||||
|
- Ubuntu 14.04 (trusty)
|
||||||
|
- Ubuntu 14.10 (utopic)
|
||||||
|
- Ubuntu 15.04 (vivid)
|
||||||
|
- Ubuntu 15.10 (wily)
|
||||||
|
- Ubuntu 16.10 (yakkety)
|
||||||
|
- Ubuntu 17.04 (zesty)
|
||||||
|
- Ubuntu 17.10 (artful)
|
||||||
|
|
||||||
|
Dokku will no longer distribute packages for Debian versions that are not `stable` or `oldstable`. This currently includes the following releases:
|
||||||
|
|
||||||
|
- Debian 7 (wheezy)
|
||||||
|
- Debian 8 (jessie)
|
||||||
|
|
||||||
|
### Removed App report flags
|
||||||
|
|
||||||
|
The `--git-sha` flag was moved from the `apps:report` command to the `git:report` command.
|
||||||
|
|
||||||
|
## App report output
|
||||||
|
|
||||||
|
When an app is not deployed, the `apps:report` command no longer shows the message `not deployed`. Please use the `--deployed` flag on `ps:report` instead to see if the app has been deployed.
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
### App report flags
|
||||||
|
|
||||||
|
The following changes on the `apps:report` command were made in this release:
|
||||||
|
|
||||||
|
- The `--deploy-source` flag was renamed to `--app-deploy-source`.
|
||||||
|
- The `--locked` flag was renamed to `--app-locked`.
|
||||||
|
|
||||||
|
### Network report flags
|
||||||
|
|
||||||
|
The following changes on the `network:report` command were made in this release:
|
||||||
|
|
||||||
|
- The `--network-listeners` flag was renamed to `--network-web-listeners`.
|
||||||
|
|
||||||
|
### Plugin Triggers
|
||||||
|
|
||||||
|
- The `network-get-port` trigger was incorrectly documented to have the `isHerokuishContainer` argument as the third argument. The code has been fixed to respect the documentation.
|
||||||
|
- The `network-get-listeners` trigger now takes an additional `processType` argument. If not specified, it defaults to `web`. This default will be removed in an upcoming release.
|
||||||
|
|
||||||
|
## Deprecations
|
||||||
|
|
||||||
|
- `nginx:show-conf` has been deprecated in favor of `nginx:show-config`.
|
||||||
|
- `proxy#is_app_proxy_enabled()` is deprecated in favor of `plugn trigger proxy-is-enabled`.
|
||||||
|
- `proxy#get_app_proxy_type()` is deprecated in favor of `plugn trigger proxy-type`.
|
||||||
|
- `apps#apps_create()` is deprecated in favor of `plugn trigger app-create`.
|
||||||
|
- `apps#apps_destroy()` is deprecated in favor of `plugn trigger app-destroy`.
|
||||||
|
- `apps#apps_exists()` is deprecated in favor of `plugn trigger app-exists`.
|
||||||
|
- `apps#apps_maybe_create()` is deprecated in favor of `plugn trigger app-maybe-create`.
|
||||||
|
- `plugin trigger network-get-listeners` usage without a second `processType` argument is deprecated.
|
||||||
|
- `.NGINX_PORT` variable usage within `nginx.conf.sigil` templates is deprecated in favor of `.PROXY_PORT`.
|
||||||
|
- `.NGINX_SSL_PORT` variable usage within `nginx.conf.sigil` templates is deprecated in favor of `.PROXY_SSL_PORT`.
|
||||||
|
- `.DOKKU_APP_LISTENERS` variable usage within `nginx.conf.sigil` templates is deprecated in favor of `.DOKKU_APP_WEB_LISTENERS`.
|
||||||
18
docs/appendices/0.21.0-migration-guide.md
Normal file
18
docs/appendices/0.21.0-migration-guide.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# 0.21.0 Migration Guide
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
The `tls` name is no longer a reserved app name, and can be used by applications. This was previously a reserved app name due to it's use as a place for global SSL certificate files; Dokku has not supported global SSL certificates for many releases, and thus there is no need to reserve the name.
|
||||||
|
|
||||||
|
## Deprecations
|
||||||
|
|
||||||
|
- `git#git_deploy_branch()` is deprecated in favor of `plugn trigger git-deploy-branch`.
|
||||||
|
- The `config` command is deprecated in favor of `config:show`.
|
||||||
|
- Usage of this command in conjunction with either the `--export` or `--shell` flag is deprecated in favor of `config:export --format` with the correct format value (`exports` or `shell`, respectively).
|
||||||
|
- The `nginx:build-config` command is deprecated in favor of `proxy:build-config`.
|
||||||
|
|
||||||
|
## Removals
|
||||||
|
|
||||||
|
The `apps:destroy` command no longer takes a second argument `force`. Instead, this can be passed as the `--force` flag, either globally or as a flag to the command itself.
|
||||||
|
|
||||||
|
The `proxy:enable` and `proxy:disable` no longer restart apps when setting the `DOKKU_DISABLE_PROXY` environment variable. A future release will disable usage of `DOKKU_DISABLE_PROXY` altogether.
|
||||||
27
docs/appendices/0.22.0-migration-guide.md
Normal file
27
docs/appendices/0.22.0-migration-guide.md
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
# 0.22.0 Migration Guide
|
||||||
|
|
||||||
|
## Deprecations
|
||||||
|
|
||||||
|
- Calling `logs:failed` without either a `<name>` or the `--all` flag is deprecated.
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
- Underscores are no longer valid characters in app names. Please rename applications before upgrading.
|
||||||
|
- Process type names specified in Procfile may no longer use characters not valid in DNS Label Names ([RFC 1123](https://tools.ietf.org/html/rfc1123)).
|
||||||
|
- The minimum Docker version is now 17.05.0.
|
||||||
|
- The `common.GetDeployingAppImageName()` function now returns an `error` as the second return argument instead of calling `common.LogFail()` internally.
|
||||||
|
- Setting `DOKKU_DISABLE_ANSI_PREFIX_REMOVAL` is deprecated; Dokku 0.23.0 will avoid removing the `remote:` ansi prefix entirely. No warning will be added in this release.
|
||||||
|
|
||||||
|
## Removals
|
||||||
|
|
||||||
|
The `ps` command has had a few removals as a result of a rewrite to Golang:
|
||||||
|
|
||||||
|
- The `ps:set-restart-policy` command has been removed in favor the `ps:set` command.
|
||||||
|
- The `ps:restart-policy` command has been removed in favor of the `ps:report` command.
|
||||||
|
- The `ps:rebuildall` command has been removed in favor of calling the `ps:rebuild` with the `--all` flag instead of an app name.
|
||||||
|
- The `ps:restartall` command has been removed in favor of calling the `ps:restart` with the `--all` flag instead of an app name.
|
||||||
|
- The `ps:stopall` command has been removed in favor of calling the `ps:stop` with the `--all` flag instead of an app name.
|
||||||
|
- The `ps:startall` command has been removed in favor of calling the `ps:start` with the `--all` flag instead of an app name.
|
||||||
|
- The `DOKKU_PROCFILE` file is no longer located in the git directory for a given app on the server. It's location is currently not exposed.
|
||||||
|
- The `procfile-get-command` plugin trigger no longer takes a `procfile path` as the final argument.
|
||||||
|
- All `ps` functions have been removed. Please us a trigger as appropriate or file a PR to have a new trigger/wrapper function added.
|
||||||
8
docs/appendices/0.23.0-migration-guide.md
Normal file
8
docs/appendices/0.23.0-migration-guide.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# 0.23.0 Migration Guide
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
- The `plugin:list` command no longer outputs the version for the `plugn` binary.
|
||||||
|
- Users building docker images that run Dokku will need to use a new sudoer wrapper for the `docker-image-labeler` binary to work correctly. A reference version has been placed in the `docker` skeleton directory. This should only impact platform developers, and users of our Docker image will already have the file available.
|
||||||
|
- The `dokku` user's cron is now in use by Dokku itself. Customizations will be overwritten. Users are encouraged to use a cron entry in `/etc/cron.d/dokku` to avoid this issue.
|
||||||
|
- As of 0.23.0, Dokku will now inject the `max-size` log driver option for applications. This is restricted to app-configured log driver values empty, `local` or `json-file` in 0.23.1 to increase setup compatibility. Users who configure alternative log drivers at the system level will need to either set the global `max-size` property to `unlimited` or switch to the built-in `vector` logging support.
|
||||||
12
docs/appendices/0.24.0-migration-guide.md
Normal file
12
docs/appendices/0.24.0-migration-guide.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# 0.24.0 Migration Guide
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
- The commands `proxy:enable`, `proxy:disable` and `proxy:build-config` now support the `--all` flag in addition to general parallelism.
|
||||||
|
- The `builder-cnb` plugin has been renamed `builder-pack`, and all related plugin triggers have had the suffix `-cnb` changed to `-pack`.
|
||||||
|
|
||||||
|
## Deprecations
|
||||||
|
|
||||||
|
- The 1.0.0 release of Dokku will no longer select buildpack builders over dockerfile builders if both builders match. Instead, Dokku will choose the first builder that responds to the `builder-detect` trigger. Users that wish to use a specific builder may set a builder using the `builder:set` command, which will force Dokku to use the specified builder regardless of what might be auto-detected.
|
||||||
|
- The `tags` plugin is deprecated in favor of the [`git:from-image`](/docs/deployment/methods/git.md#initializing-an-app-repository-from-a-docker-image) command. It will be removed in the next minor release, and is considered unmaintained. Users are highly encouraged to switch their workflows to `git:from-image`.
|
||||||
|
- The `tar` plugin is deprecated in favor of the [`git:from-archive`](/docs/deployment/methods/git.md#initializing-an-app-repository-from-an-archive-file) command. It will be removed in the next minor release, and is considered unmaintained. Users are highly encouraged to switch their workflows to `git:from-archive`.
|
||||||
35
docs/appendices/0.25.0-migration-guide.md
Normal file
35
docs/appendices/0.25.0-migration-guide.md
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# 0.25.0 Migration Guide
|
||||||
|
|
||||||
|
## Registry Plugin
|
||||||
|
|
||||||
|
The [dokku-registry](https://github.com/dokku/dokku-registry) plugin is now built-in. This comes with a few changes:
|
||||||
|
|
||||||
|
- Builder plugins should call `post-release-builder` at the end of the build.
|
||||||
|
- The `push` and `pull` command are not implemented. Users wishing to deploy a remote image should use `git:from-image`. Image pushing is not available at this time.
|
||||||
|
- At this time, remote docker repositories are not automatically created for AWS, and users must create those repositories for their applications as necessary. This may be implemented in the future.
|
||||||
|
- Docker images are only pushed when configured to do so. See the [registry management documentation](/docs/deployment/registry-management.md) for more details.
|
||||||
|
|
||||||
|
## Other
|
||||||
|
|
||||||
|
### Changes
|
||||||
|
|
||||||
|
- The network plugin can now set an `initial-network` for all containers on creation. This is a replacement for specifying the `--network` flag via the `docker-options` plugin. Please see the [network documentation](/docs/networking/network.md#attaching-an-app-to-a-network) for more information.
|
||||||
|
- The `dokku run` command now always removes the ephemeral container on exit. Users that need a persistent container should instead specify a `console` process type in their `Procfile` specifying an available shell (usually either `bash` or `sh`) and scale that container appropriately.
|
||||||
|
- The `pre-deploy` plugin trigger is now called internally by Dokku. Scheduler plugins should avoid calling this trigger, as any image changes introduced by subsequent trigger calls will be ignored.
|
||||||
|
- The default image used for Herokuish Buildpack builds is now `gliderlabs/herokuish:latest-20`, and is based on both the `heroku-20` stack as well as Ubuntu 20.04. Users that wish to stick with the old, `heroku-18`/Ubuntu 18.04 builder may specify `gliderlabs/herokuish:latest-18` as their builder image. Please see the [herokuish buildpack deployment documentation](/docs/deployment/builders/herokuish-buildpacks.md#customizing-the-buildpack-stack-builder) for more information on how to specify a custom buildpack stack builder.
|
||||||
|
- This change does not impact any users of Cloud Native Buildpacks.
|
||||||
|
- We fixed an issue that required extracting Procfiles at the beginning of a deploy. Due to this change, a `Dockerfile` app contains a `Procfile` that does not specify a `web` process will fail to start. Usage of a `Procfile` with _only_ a `release` command should be replaced with a `scripts.dokku.postdeploy` deployment task in the `app.json` file. The alternative is to define the `web` process in the `Procfile`. See the [deployment task documentation](/docs/advanced-usage/deployment-tasks.md) for more information.
|
||||||
|
|
||||||
|
### Deprecations
|
||||||
|
|
||||||
|
- In previous versions of Dokku, the only way to specify a custom `Dockerfile` was to use the `docker-options` plugin to set the `--file` flag for a docker build. As of 0.25.0, the `builder-dockerfile:set` command should be used instead, as outlined in the [docs here](/docs/deployment/builders/dockerfiles.md#changingthe-dockerfile-location). Usage of the old method should be migrated to the new method.
|
||||||
|
- The `--rm` and `--rm-container` flags may be specified but no longer have any effect on `dokku run`.
|
||||||
|
- The `--detach` flag is deprecated in favor of the `run:detached` command.
|
||||||
|
- The `DOKKU_SCALE` file is deprecated. Please see the [process management documentation](/docs/processes/process-management.md#manually-managing-process-scaling) for more information on it's replacement with the `formation` key of the `app.json` file.
|
||||||
|
- The hooks `post-release-buildpack`, `post-release-dockerfile`, and `post-release-pack` are deprecated in favor of `post-release-builder`. See the [plugin triggers documentation](https://dokku.com/docs/development/plugin-triggers/#post-release-builder) for more details.
|
||||||
|
|
||||||
|
## Removals
|
||||||
|
|
||||||
|
- As of April 2021, Ubuntu 16.04 is no longer an LTS release, and support has been removed. Packages may still install on older versions of Ubuntu, but are no longer tested, and therefore no support will be provided.
|
||||||
|
- The web installer has been removed. Users are now required to setup Dokku via cli commands. This change was made to combat potential security issues where users ignored the web installer, allowing unauthorized users to add their keys to the host.
|
||||||
|
- The `scheduler-docker-cleanup` plugin trigger has been removed from the scheduler interface, and is no longer invoked.
|
||||||
12
docs/appendices/0.26.0-migration-guide.md
Normal file
12
docs/appendices/0.26.0-migration-guide.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# 0.26.0 Migration Guide
|
||||||
|
|
||||||
|
## Removals
|
||||||
|
|
||||||
|
- The `tags` plugin - deprecated in [0.24.0](/docs/appendices/0.24.0-migration-guide.md) - was removed. Users are highly encouraged to switch their workflows to `git:from-image`.
|
||||||
|
- The `tar` plugin - deprecated in [0.24.0](/docs/appendices/0.24.0-migration-guide.md) - was removed. Users are highly encouraged to switch their workflows to `git:from-archive`.
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
- The `scheduler` plugin now controls the scheduler in use for deploys. Apps will have their `DOKKU_SCHEDULER` environment variables migrated to the scheduler plugin, after which that value will be removed from said app. Please see the [scheduler documentation](/docs/deployment/schedulers/scheduler-management.md) for more information.
|
||||||
|
- The `deploy-source` metadata from `apps:report` is now no longer computed on the fly, but hydrated at deploy time via the `deploy-source-set` trigger. This value may be empty until your next deploy.
|
||||||
|
- Additionally, the `deploy-source` trigger has now been removed.
|
||||||
13
docs/appendices/0.27.0-migration-guide.md
Normal file
13
docs/appendices/0.27.0-migration-guide.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# 0.27.0 Migration Guide
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
- Renaming an application will now only rename domains that are associated with global domains. As an example:
|
||||||
|
```shell
|
||||||
|
dokku domains:set-global dokku.me
|
||||||
|
dokku apps:create node-js-app
|
||||||
|
dokku domains:set node-js-app node-js-app.dokku.me node-js-app.dokku.com
|
||||||
|
dokku apps:rename node-js-app other-name
|
||||||
|
dokku domains:report node-js-app --domains-app-vhosts
|
||||||
|
# output: other-name.dokku.me node-js-app.dokku.com
|
||||||
|
```
|
||||||
25
docs/appendices/0.5.0-migration-guide.md
Normal file
25
docs/appendices/0.5.0-migration-guide.md
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
# 0.5.0 Migration Guide
|
||||||
|
|
||||||
|
## `nginx-vhosts` plugin
|
||||||
|
|
||||||
|
- The nginx-vhosts template language is now [sigil](https://github.com/gliderlabs/sigil)
|
||||||
|
- No need to escape literal `$` characters (or other "bash-isms")
|
||||||
|
- Template variables are represented as {{ .VARIABLE_NAME }}
|
||||||
|
- A detailed list of template variables can be found [here](/docs/configuration/nginx.md#available-template-variables)
|
||||||
|
- A custom nginx-vhosts template must be named `nginx.conf.sigil`
|
||||||
|
- The default path for this custom template is the root of your repo (i.e. `/app` in the container or `WORKDIR` if defined in a dockerfile app)
|
||||||
|
- Dokku no longer looks for this file in `/home/dokku/node-js-app` on the Dokku server
|
||||||
|
- Check out an example template [here](/docs/configuration/nginx.md)
|
||||||
|
- Support for server-wide SSL certs have been dropped in favor of using the `certs` plugin
|
||||||
|
- `dokku certs:add node-js-app < certs.tar`
|
||||||
|
- All domains for an SSL-enabled app will be redirected to https by default
|
||||||
|
- This can be overridden with a custom template
|
||||||
|
- Replaced "magic" `NO_VHOST` variable with `domains:enable/disable`
|
||||||
|
- Simplified zero downtime control
|
||||||
|
- `checks:enable/disable`
|
||||||
|
|
||||||
|
## Dockerfile apps with exposed ports
|
||||||
|
|
||||||
|
- Dockerfiles with `EXPOSE` clauses will get [all **tcp** ports proxied by default](/docs/deployment/builders/dockerfiles.md#exposed-ports)
|
||||||
|
- Note that nginx will proxy the same port numbers to listen publicly
|
||||||
|
- UDP ports can be exposed by disabling the [nginx proxy](/docs/networking/proxy-management.md) with `dokku proxy:disable node-js-app`
|
||||||
32
docs/appendices/0.6.0-migration-guide.md
Normal file
32
docs/appendices/0.6.0-migration-guide.md
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# 0.6.0 Migration Guide
|
||||||
|
|
||||||
|
## Zero-downtime deployment
|
||||||
|
|
||||||
|
- You can now **actually** disable zero-downtime deployments per-app and per-process-type
|
||||||
|
- Some config variables have been moved around
|
||||||
|
- `DOKKU_CHECKS_ENABLED` has been migrated to `DOKKU_CHECKS_SKIPPED`
|
||||||
|
- `DOKKU_CHECKS_DISABLED` is now a thing
|
||||||
|
- The values for the above can be a comma-separated list of process-types or the literal string `_all_`
|
||||||
|
- See the [updated `checks`](/docs/deployment/zero-downtime-deploys.md) docs for more info
|
||||||
|
|
||||||
|
## Proxy port mapping
|
||||||
|
|
||||||
|
- You can now configure host -> container proxy port mappings
|
||||||
|
- The UI is handled by the [proxy](/docs/networking/proxy-management.md) interface plugin by setting the `DOKKU_PROXY_PORT_MAP` config variable in the format of `scheme:host-port:container-port`. The default `nginx-vhosts` proxy plugin supports both the `http` and `https` schemes.
|
||||||
|
- Default port mappings
|
||||||
|
- buildpack apps will be set to `http:80:5000` and will also include `https:443:5000` if SSL is enabled.
|
||||||
|
- dockerfile apps with explicitly exposed ports (i.e. using the `EXPOSE` directive) will be configured with a listener on each exposed port that proxies to the same port of the deployed application container.
|
||||||
|
- You may override this behavior with the [`proxy:ports-*` commands](/docs/networking/proxy-management.md) or by directly setting `DOKKU_PROXY_PORT_MAP` with the `config:set` command
|
||||||
|
- dockerfile apps without explicitly exposed ports will behave the same as a buildpack app
|
||||||
|
- NOTE: These defaults **are not** automatically changed on subsequent pushes and must be manipulated with the aforementioned commands
|
||||||
|
|
||||||
|
## Calling the `dokku` binary
|
||||||
|
|
||||||
|
- Plugins should *not* call the `dokku` binary directly. Clients using the `--app` argument are potentially broken, amongst others, when doing so. Instead, please source the `functions` file for a given plugin when attempting to call Dokku internal functions. As a result, the following Dokku commands are no longer publicly exposed:
|
||||||
|
- `dokku build`
|
||||||
|
- `dokku receive`
|
||||||
|
- `dokku release`
|
||||||
|
- `dokku tar:build`
|
||||||
|
- `dokku tar:build-locked`
|
||||||
|
- `dokku git:build`
|
||||||
|
- `dokku git:build-locked`
|
||||||
13
docs/appendices/0.7.0-migration-guide.md
Normal file
13
docs/appendices/0.7.0-migration-guide.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# 0.7.0 Migration Guide
|
||||||
|
|
||||||
|
## Persistent Storage
|
||||||
|
|
||||||
|
We should now properly handle file ownership for mounted directories. This was enhanced in 0.7.1. See the [persistent storage documentation](/docs/advanced-usage/persistent-storage.md) for more details.
|
||||||
|
|
||||||
|
## Restart Policies
|
||||||
|
|
||||||
|
If you previously managed container restart policies via docker-options, these can now be managed natively via the built-in `ps` plugin. There is no migration necessary. See the [restart policy documentation](/docs/processes/process-management.md#restart-policies) for more details.
|
||||||
|
|
||||||
|
## SSH Keys
|
||||||
|
|
||||||
|
Dokku now has an `ssh-keys` plugin that can be used to manage ssh keys for the `dokku` user on the host operating system. See the [user management documentation](/docs/deployment/user-management.md) for more details.
|
||||||
19
docs/appendices/0.8.0-migration-guide.md
Normal file
19
docs/appendices/0.8.0-migration-guide.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# 0.8.0 Migration Guide
|
||||||
|
|
||||||
|
## Domain Management
|
||||||
|
|
||||||
|
You can now set global and app domains via `domains:set` and `domains:set-global`. See the [domains documentation](/docs/configuration/domains/) for more details.
|
||||||
|
|
||||||
|
## Plugin Uninstallation
|
||||||
|
|
||||||
|
A new `uninstall` plugin trigger was introduced. This functionality may be in use for newer plugins, so be aware that older Dokku versions may require manual cleanup.
|
||||||
|
|
||||||
|
See the [uninstall trigger documentation](/docs/development/plugin-triggers/#uninstall) for implementation instructions.
|
||||||
|
|
||||||
|
## Deployment Tasks
|
||||||
|
|
||||||
|
Should a pre or post deployment task fail, we now fail the entire deploy.
|
||||||
|
|
||||||
|
## Nginx HTTP2 Support
|
||||||
|
|
||||||
|
Due to bugs in Nginx, the minimum version for HTTP2 is now 1.11.5.
|
||||||
12
docs/appendices/0.9.0-migration-guide.md
Normal file
12
docs/appendices/0.9.0-migration-guide.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# 0.9.0 Migration Guide
|
||||||
|
|
||||||
|
## Golang Migration
|
||||||
|
|
||||||
|
There is an ongoing migration to rewrite Dokku in Golang. The reasons are beyond the scope of this document, but this may impact any patches you have for Dokku. As of 0.9.0, only the `repo` plugin is in Golang.
|
||||||
|
|
||||||
|
The following shall remain true, regardless of the state of our rewrite:
|
||||||
|
|
||||||
|
- You will be able to write custom plugins in any language.
|
||||||
|
- You will be able to enable or disable core plugins.
|
||||||
|
- `plugn` will continue to be used for executing plugin triggers.
|
||||||
|
- We will provide bash wrappers that can be sourced to execute core functionality that is implemented in golang.
|
||||||
@@ -1,160 +0,0 @@
|
|||||||
# Deploy an App
|
|
||||||
|
|
||||||
Now you can deploy apps on your Dokku. Let's deploy the [Heroku Node.js sample app](https://github.com/heroku/node-js-sample). All you have to do is add a remote to name the app. It's created on-the-fly.
|
|
||||||
|
|
||||||
```
|
|
||||||
$ cd node-js-sample
|
|
||||||
$ git remote add dokku dokku@dokku.me:node-js-app
|
|
||||||
$ git push dokku master
|
|
||||||
Counting objects: 296, done.
|
|
||||||
Delta compression using up to 4 threads.
|
|
||||||
Compressing objects: 100% (254/254), done.
|
|
||||||
Writing objects: 100% (296/296), 193.59 KiB, done.
|
|
||||||
Total 296 (delta 25), reused 276 (delta 13)
|
|
||||||
-----> Building node-js-app ...
|
|
||||||
Node.js app detected
|
|
||||||
-----> Resolving engine versions
|
|
||||||
|
|
||||||
... blah blah blah ...
|
|
||||||
|
|
||||||
-----> Application deployed:
|
|
||||||
http://node-js-app.dokku.me
|
|
||||||
```
|
|
||||||
|
|
||||||
You're done!
|
|
||||||
|
|
||||||
Dokku only supports deploying from its master branch, so if you'd like to deploy a different local branch use: ```git push dokku <local branch>:master```
|
|
||||||
|
|
||||||
Right now Herokuish supports buildpacks for Node.js, Ruby, Python, [and more](https://github.com/gliderlabs/herokuish#buildpacks).
|
|
||||||
Please check the documentation for your particular build pack as you may need to include configuration files (such as a Procfile) in your project root.
|
|
||||||
|
|
||||||
## Deploying to server over SSH
|
|
||||||
|
|
||||||
Pushing to the dokku remote may prompt you to input a password for the dokku user. It's preferable, however, to use key-based authentication, and you can add your public key to the dokku user's authorized_keys file with:
|
|
||||||
|
|
||||||
```
|
|
||||||
cat ~/.ssh/id_rsa.pub | ssh [sudouser]@[yourdomain].com "sudo sshcommand acl-add dokku [description]"
|
|
||||||
```
|
|
||||||
|
|
||||||
## Deploying with private git submodules
|
|
||||||
|
|
||||||
Dokku uses git locally (i.e. not a docker image) to build its own copy of your app repo, including submodules. This is done as the `dokku` user. Therefore, in order to deploy private git submodules, you'll need to drop your deploy key in `~dokku/.ssh` and potentially add github.com (or your VCS host key) into `~dokku/.ssh/known_hosts`. A decent test like this should help confirm you've done it correctly.
|
|
||||||
|
|
||||||
```
|
|
||||||
su - dokku
|
|
||||||
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
|
|
||||||
ssh -T git@github.com
|
|
||||||
```
|
|
||||||
|
|
||||||
## Specifying a custom buildpack
|
|
||||||
|
|
||||||
If buildpack detection isn't working well for you or you want to specify a custom buildpack for one repository you can create & commit a file in the root of your git repository named `.env` containing `export BUILDPACK_URL=<repository>` before pushing. This will tell herokuish to fetch the specified buildpack and use it instead of relying on the built-in buildpacks & their detection methods.
|
|
||||||
|
|
||||||
## Dockerfile deployment
|
|
||||||
|
|
||||||
Deployment of `Dockerfile` repos is supported as of v0.3.15. Simply place a Dockerfile in the root of your repo and push to dokku. If you are converting from a heroku/dokku buildpack deployment, ensure you are not setting `$BUILDPACK_URL` or including a `.buildpacks` file in the root of your repo.
|
|
||||||
|
|
||||||
By default, we will extract the first `EXPOSE` port and tell nginx to proxy your app to that port. Alternatively, you can set `$DOCKERFILE_PORT` in your app's dokku configuration.
|
|
||||||
|
|
||||||
By default no arguments are passed to `docker run` when deploying the container and the `CMD` or `ENTRYPOINT` defined in the `Dockerfile` are executed. You can take advantage of docker ability of overriding the `CMD` or passing parameters to your `ENTRYPOINT` setting `$DOKKU_DOCKERFILE_START_CMD`. Let's say for example you are deploying a base nodejs image, with the following `ENTRYPOINT`:
|
|
||||||
|
|
||||||
```
|
|
||||||
ENTRYPOINT ["node"]
|
|
||||||
```
|
|
||||||
|
|
||||||
You can do:
|
|
||||||
|
|
||||||
```
|
|
||||||
dokku config:set DOKKU_DOCKERFILE_START_CMD="--harmony server.js"
|
|
||||||
```
|
|
||||||
|
|
||||||
To tell docker what to run.
|
|
||||||
|
|
||||||
Setting `$DOKKU_DOCKERFILE_CACHE_BUILD` to `true` or `false` will enable or disable docker's image layer cache. Lastly, for more granular build control, you may also pass any `docker build` option to `docker`, by setting `$DOKKU_DOCKER_BUILD_OPTS`.
|
|
||||||
|
|
||||||
## Default vhost
|
|
||||||
|
|
||||||
You might notice the default vhost for Nginx will be one of the apps. If an app doesn't exist, it will use this vhost and it may be confusing for it to go to another app. You can create a default vhost using a configuration under `sites-enabled`. You just have to change one thing in the main nginx.conf:
|
|
||||||
|
|
||||||
Swap both conf.d include line and the sites-enabled include line. From:
|
|
||||||
```
|
|
||||||
include /etc/nginx/conf.d/*.conf;
|
|
||||||
include /etc/nginx/sites-enabled/*;
|
|
||||||
```
|
|
||||||
to
|
|
||||||
```
|
|
||||||
include /etc/nginx/sites-enabled/*;
|
|
||||||
include /etc/nginx/conf.d/*.conf;
|
|
||||||
```
|
|
||||||
|
|
||||||
Alternatively, you may push an app to your dokku host with a name like "00-default". As long as it lists first in `ls /home/dokku/*/nginx.conf | head`, it will be used as the default nginx vhost.
|
|
||||||
|
|
||||||
## Deploying to subdomains
|
|
||||||
|
|
||||||
The name of remote repository is used as the name of application to be deployed, as for example above:
|
|
||||||
|
|
||||||
$ git remote add dokku dokku@dokku.me:node-js-app
|
|
||||||
$ git push dokku master
|
|
||||||
|
|
||||||
Is deployed to,
|
|
||||||
|
|
||||||
remote: -----> Application deployed:
|
|
||||||
remote: http://node-js-app.dokku.me
|
|
||||||
|
|
||||||
You can also specify fully qualified names, say `app.dokku.me`, as
|
|
||||||
|
|
||||||
$ git remote add dokku dokku@dokku.me:app.dokku.me
|
|
||||||
$ git push dokku master
|
|
||||||
|
|
||||||
So, after deployment the application will be available at,
|
|
||||||
|
|
||||||
remote: -----> Application deployed:
|
|
||||||
remote: http://app.dokku.me
|
|
||||||
|
|
||||||
This is in particular useful, then you want to deploy to root domain, as
|
|
||||||
|
|
||||||
$ git remote add dokku dokku@dokku.me:dokku.me
|
|
||||||
$ git push dokku master
|
|
||||||
|
|
||||||
... deployment ...
|
|
||||||
|
|
||||||
remote: -----> Application deployed:
|
|
||||||
remote: http://dokku.me
|
|
||||||
|
|
||||||
# Zero downtime deploy
|
|
||||||
|
|
||||||
Following a deploy, dokku will now wait `DOKKU_DEFAULT_CHECKS_WAIT` seconds (default: `10`), and if the container is still running, then route traffic to the new container.
|
|
||||||
|
|
||||||
This can be problematic for applications whose boot up time can vary and can lead to `502 Bad Gateway` errors.
|
|
||||||
|
|
||||||
Dokku provides a way to run a set of more precise checks against the new container, and only switch traffic over if all checks complete successfully.
|
|
||||||
|
|
||||||
To specify checks, add a `CHECKS` file to the root of your project directory. This is a text file with one line per check. Empty lines and lines starting with `#` are ignored.
|
|
||||||
|
|
||||||
A check is a relative URL and may be followed by expected content from the page, for example:
|
|
||||||
|
|
||||||
```
|
|
||||||
/about Our Amazing Team
|
|
||||||
```
|
|
||||||
|
|
||||||
Dokku will wait `DOKKU_CHECKS_WAIT` seconds (default: `5`) before running the checks to give server time to start. For shorter/longer wait, change the `DOKKU_CHECKS_WAIT` environment variable. This can also be overridden in the CHECKS file by setting WAIT=nn.
|
|
||||||
|
|
||||||
Dokku will wait `DOKKU_WAIT_TO_RETIRE` seconds (default: `60`) before stopping the old container such that no existing connections to it are dropped.
|
|
||||||
|
|
||||||
Dokku will retry the checks DOKKU_CHECKS_ATTEMPTS times until the checks are successful or DOKKU_CHECKS_ATTEMPTS is exceeded. In the latter case, the deployment is considered failed. This can be overridden in the CHECKS file by setting ATTEMPTS=nn.
|
|
||||||
|
|
||||||
Checks can be skipped entirely by setting `DOKKU_SKIP_ALL_CHECKS` to `true` either globally or per application. You can choose to skip only default checks by setting `DOKKU_SKIP_DEFAULT_CHECKS` to `true` either globally or per application.
|
|
||||||
|
|
||||||
See [checks-examples.md](checks-examples.md) for examples and output.
|
|
||||||
|
|
||||||
# Removing a deployed app
|
|
||||||
|
|
||||||
SSH onto the server, then execute:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku apps:destroy myapp
|
|
||||||
```
|
|
||||||
|
|
||||||
# Dokku/Docker Container Management Compatibility
|
|
||||||
|
|
||||||
Dokku is, at it's core, a docker container manager. Thus, it does not necessarily play well with other out-of-band processes interacting with the docker daemon. One thing to note as in [issue #1220](https://github.com/progrium/dokku/issues/1220), dokku executes a cleanup function prior to every deployment. This function removes all exited containers and all 'unattached' images.
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 31 KiB |
BIN
docs/assets/dokku-large.png
Normal file
BIN
docs/assets/dokku-large.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 78 KiB |
3006
docs/assets/dokku.ai
Normal file
3006
docs/assets/dokku.ai
Normal file
File diff suppressed because one or more lines are too long
BIN
docs/assets/dokku.png
Normal file
BIN
docs/assets/dokku.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.1 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 61 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user