Compare commits
559 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d4484d0373 | ||
|
|
d9c520216a | ||
|
|
7d5e0868f4 | ||
|
|
86ce579680 | ||
|
|
7104d203bd | ||
|
|
32cd56faa5 | ||
|
|
360cbcf8b9 | ||
|
|
dd61cf9e8d | ||
|
|
b8e55331e1 | ||
|
|
0a3f7262a4 | ||
|
|
434a111976 | ||
|
|
cfd7b84c5e | ||
|
|
4593547e35 | ||
|
|
ef2d014ed6 | ||
|
|
882ca8781b | ||
|
|
5737286ac5 | ||
|
|
390a2254a0 | ||
|
|
5d5d56c560 | ||
|
|
cfc25bc9da | ||
|
|
62099db5fe | ||
|
|
2381069096 | ||
|
|
637221f450 | ||
|
|
7f14bb22b0 | ||
|
|
a3b99c5d0e | ||
|
|
17f71e1269 | ||
|
|
f4cf0e15b9 | ||
|
|
3705b5f847 | ||
|
|
ac4f576951 | ||
|
|
b790fd745a | ||
|
|
c8d7fb0aed | ||
|
|
5d4ac8179a | ||
|
|
097da0436e | ||
|
|
b7b5fa4f3c | ||
|
|
cd70c5279f | ||
|
|
86be96ad24 | ||
|
|
a95f077496 | ||
|
|
bf6c784b91 | ||
|
|
1cc6c1bc3e | ||
|
|
b75c7f3b8c | ||
|
|
6525f147c6 | ||
|
|
11bf30d744 | ||
|
|
2aabb209d9 | ||
|
|
bd03e45860 | ||
|
|
f4d2437922 | ||
|
|
8b5f134946 | ||
|
|
3f0cc989d0 | ||
|
|
ed0832370d | ||
|
|
a55d5a10e0 | ||
|
|
07695e9aac | ||
|
|
e28dd15881 | ||
|
|
3421d1082c | ||
|
|
bfb424dc09 | ||
|
|
fe47ebd906 | ||
|
|
f2e421daba | ||
|
|
6ec9bc800d | ||
|
|
b759230411 | ||
|
|
82829ab84c | ||
|
|
94eb2d0d8b | ||
|
|
54b7ab616a | ||
|
|
b0c2912453 | ||
|
|
3eeb9be292 | ||
|
|
c44d729831 | ||
|
|
e5280dbe34 | ||
|
|
64f4314df3 | ||
|
|
dc35a7876c | ||
|
|
a82c79d5b5 | ||
|
|
d3054c4908 | ||
|
|
9ea08636d4 | ||
|
|
33e559adf6 | ||
|
|
2aa319a81a | ||
|
|
2f196e5c9c | ||
|
|
38426ba304 | ||
|
|
38beed755b | ||
|
|
6bc410204e | ||
|
|
abcc7f00e1 | ||
|
|
0690265f71 | ||
|
|
cdb2d35adb | ||
|
|
3deee63036 | ||
|
|
bef36c3b7c | ||
|
|
12e6c71fb7 | ||
|
|
a05ef80d64 | ||
|
|
9887134a4e | ||
|
|
38a21b8c2f | ||
|
|
e8dc3c650a | ||
|
|
38db727e2f | ||
|
|
de6f998fbc | ||
|
|
2138a882a0 | ||
|
|
063750948d | ||
|
|
51cdcab328 | ||
|
|
db0ba7ad89 | ||
|
|
2597ec2c3d | ||
|
|
b3bbb30a6b | ||
|
|
0a56782780 | ||
|
|
201da01ae7 | ||
|
|
abf62bdf1f | ||
|
|
1b5332cd45 | ||
|
|
083cf3ac90 | ||
|
|
bdf87e32e8 | ||
|
|
410f1b3d23 | ||
|
|
e57a141b36 | ||
|
|
9b8faf2b27 | ||
|
|
1ae63ebe01 | ||
|
|
548e891004 | ||
|
|
9df8b7c25e | ||
|
|
95b237c3c7 | ||
|
|
0a0368864d | ||
|
|
203af51f02 | ||
|
|
98e8a9bd67 | ||
|
|
29cf81c45e | ||
|
|
aff910c85a | ||
|
|
4ac363cdb2 | ||
|
|
f011631c67 | ||
|
|
d26b5de742 | ||
|
|
a4078e97bd | ||
|
|
dc959d6a41 | ||
|
|
61bab89189 | ||
|
|
3a0d0c182c | ||
|
|
19f37b537a | ||
|
|
9e44195694 | ||
|
|
f45ad26429 | ||
|
|
86351887f4 | ||
|
|
8f99cd5f2b | ||
|
|
dc67a5cb5b | ||
|
|
e971ca3686 | ||
|
|
46e22ba573 | ||
|
|
f1aba77b1b | ||
|
|
05e6de4fe2 | ||
|
|
7e108de502 | ||
|
|
074de26cbd | ||
|
|
05637fa64b | ||
|
|
ebf20e9236 | ||
|
|
35d7597a25 | ||
|
|
f91b7154d4 | ||
|
|
fdbdbd50fc | ||
|
|
9ffa564abd | ||
|
|
a9df9cfd86 | ||
|
|
d226b02a49 | ||
|
|
fa9b5308cd | ||
|
|
60d8a667af | ||
|
|
328aa3779c | ||
|
|
b1b43f487c | ||
|
|
344cb39a44 | ||
|
|
bcefa92f30 | ||
|
|
245263d2ad | ||
|
|
dd7589323e | ||
|
|
4aed599d8c | ||
|
|
cd275138f3 | ||
|
|
476cc6045f | ||
|
|
553378085f | ||
|
|
2958f906e4 | ||
|
|
68f909b91d | ||
|
|
78bde7f817 | ||
|
|
e7964ee99d | ||
|
|
8f44a57158 | ||
|
|
d33393d3fd | ||
|
|
7595351b1d | ||
|
|
3edddac0c1 | ||
|
|
0a86ffe01b | ||
|
|
563365b712 | ||
|
|
b6fdd4511c | ||
|
|
b24035c80a | ||
|
|
58c6b137b0 | ||
|
|
fd6e56cc5f | ||
|
|
d0ffd7d9f9 | ||
|
|
272327af89 | ||
|
|
e83ba595aa | ||
|
|
04917b72d4 | ||
|
|
e0617b209d | ||
|
|
1b4e02eb62 | ||
|
|
5ae6c1c845 | ||
|
|
e034421ea9 | ||
|
|
1cbaabdda0 | ||
|
|
577f46153f | ||
|
|
3116880b75 | ||
|
|
5961306813 | ||
|
|
acf2c854d2 | ||
|
|
bf3b2d396b | ||
|
|
3c6796bd7b | ||
|
|
22c3d34877 | ||
|
|
b151192394 | ||
|
|
fb405c64ab | ||
|
|
3826f40c6f | ||
|
|
0156cffe0f | ||
|
|
a19741aba9 | ||
|
|
85eca2167b | ||
|
|
431e43ac6d | ||
|
|
936706e880 | ||
|
|
1ecf975b53 | ||
|
|
7859145409 | ||
|
|
77694de6ff | ||
|
|
83de73ccdb | ||
|
|
d8938ebf77 | ||
|
|
2d4039ab69 | ||
|
|
e584e336f8 | ||
|
|
27b5fd93fd | ||
|
|
249df86dfd | ||
|
|
ff01c3df7b | ||
|
|
2c30c03ef7 | ||
|
|
93f12c59e6 | ||
|
|
3cc29ff016 | ||
|
|
b336e3633d | ||
|
|
4a891f74bd | ||
|
|
27dbae3703 | ||
|
|
f7800adb68 | ||
|
|
c472c2a3c7 | ||
|
|
1b95e01ea3 | ||
|
|
6da9be2d65 | ||
|
|
fd2fb6c605 | ||
|
|
04b2643b4f | ||
|
|
c4d700c1b0 | ||
|
|
2bcfea9b2b | ||
|
|
8b07e92391 | ||
|
|
a2ac21130a | ||
|
|
ea6adbbf56 | ||
|
|
b11c72d0ae | ||
|
|
77970a6b0d | ||
|
|
6a0701fa65 | ||
|
|
a062e283fe | ||
|
|
624acb8e18 | ||
|
|
67311264d7 | ||
|
|
b97086a8bd | ||
|
|
ce0da53f86 | ||
|
|
1a27cdd0ea | ||
|
|
7b45131486 | ||
|
|
06de81b61b | ||
|
|
a331d27945 | ||
|
|
926176bbb6 | ||
|
|
5cd86d23e6 | ||
|
|
8e178f5895 | ||
|
|
9496b9cfaf | ||
|
|
6fc2d42fe0 | ||
|
|
1eb41f32dc | ||
|
|
bc75bffed2 | ||
|
|
944d808bc6 | ||
|
|
885178eed5 | ||
|
|
7e37f9dc79 | ||
|
|
7cd077a79b | ||
|
|
7c2df65514 | ||
|
|
2324cb888b | ||
|
|
4ae9cca6f1 | ||
|
|
ed851fe399 | ||
|
|
776013b0f4 | ||
|
|
6f0039ebf1 | ||
|
|
8d0c35f133 | ||
|
|
bc61d106e4 | ||
|
|
d0208b0ecc | ||
|
|
5df1d77c04 | ||
|
|
29dc0b5980 | ||
|
|
a4983f8d7d | ||
|
|
ecf852567c | ||
|
|
f9f931b2b6 | ||
|
|
024715fbf1 | ||
|
|
73be6989ff | ||
|
|
67003ed469 | ||
|
|
2758b3cc47 | ||
|
|
36da77a2ff | ||
|
|
b663f71878 | ||
|
|
398a78b2f6 | ||
|
|
2dea993804 | ||
|
|
7b0d3b14bc | ||
|
|
0d6199d0cb | ||
|
|
56d65bfaba | ||
|
|
d83978760e | ||
|
|
3e08a71a95 | ||
|
|
5ca09b0081 | ||
|
|
5e1f177d1c | ||
|
|
86a6b2e246 | ||
|
|
3a16724fbe | ||
|
|
5d1a3fb079 | ||
|
|
f0bf7aa0b6 | ||
|
|
4942ebaec1 | ||
|
|
9beab4d50d | ||
|
|
758d9f8a83 | ||
|
|
dd45bebc3e | ||
|
|
0263d37d43 | ||
|
|
d0b87936db | ||
|
|
0f4b5d4305 | ||
|
|
c0eb12f572 | ||
|
|
cc395b54dd | ||
|
|
80f35370ab | ||
|
|
98e7f467b7 | ||
|
|
d3ae9360ce | ||
|
|
b44ccae796 | ||
|
|
1060189d78 | ||
|
|
8eb8760a46 | ||
|
|
1486c5e170 | ||
|
|
10b31fcd4a | ||
|
|
82f3613ed7 | ||
|
|
3354effff0 | ||
|
|
3557de3485 | ||
|
|
5c3eea3ccb | ||
|
|
220443fc99 | ||
|
|
47f46fd930 | ||
|
|
bf6da2d971 | ||
|
|
ff5970e1ac | ||
|
|
343e19fcc7 | ||
|
|
6d38d0c04d | ||
|
|
a0eb35f989 | ||
|
|
603717eaa4 | ||
|
|
ec84e66722 | ||
|
|
df7194667e | ||
|
|
eeb686b4fe | ||
|
|
3869395513 | ||
|
|
0306a4a018 | ||
|
|
094ddfec46 | ||
|
|
2151dbecd6 | ||
|
|
c8775fb10b | ||
|
|
a85777ff02 | ||
|
|
918431f075 | ||
|
|
a24ed084b1 | ||
|
|
1c851d7b17 | ||
|
|
4a19bfebc4 | ||
|
|
034c139777 | ||
|
|
67f60c0859 | ||
|
|
8ad62e204a | ||
|
|
070485eb08 | ||
|
|
194678c7ba | ||
|
|
ca30bd4d7b | ||
|
|
6ce10b5be6 | ||
|
|
41ac56e54b | ||
|
|
6b8127ae84 | ||
|
|
f2e14cdddc | ||
|
|
3ae19a8364 | ||
|
|
6c4a0cbb34 | ||
|
|
71324ba5c1 | ||
|
|
69c3c62577 | ||
|
|
3cf05b40de | ||
|
|
40f9d9a318 | ||
|
|
4644c594f0 | ||
|
|
06cf2ebecf | ||
|
|
77825342f5 | ||
|
|
9ff17a93c1 | ||
|
|
85c857bbe0 | ||
|
|
6806007060 | ||
|
|
693bca5709 | ||
|
|
2a88463919 | ||
|
|
be63a22d2f | ||
|
|
f86d6975ad | ||
|
|
fd0ca02038 | ||
|
|
863566f1a0 | ||
|
|
74c1d25692 | ||
|
|
a633502675 | ||
|
|
ceacae003a | ||
|
|
bc4226990f | ||
|
|
e0470b7641 | ||
|
|
919916ea23 | ||
|
|
e137178765 | ||
|
|
112b77bb01 | ||
|
|
50d7ec3d29 | ||
|
|
ad9490efcb | ||
|
|
e45977e763 | ||
|
|
9c80367706 | ||
|
|
1f2ef9874d | ||
|
|
0701a091ef | ||
|
|
b6aeb4a028 | ||
|
|
5cadeb52bf | ||
|
|
597db38489 | ||
|
|
cfe9997452 | ||
|
|
8badedd49f | ||
|
|
5ed42b364f | ||
|
|
f52bc35465 | ||
|
|
82d1264634 | ||
|
|
61cfdc4a55 | ||
|
|
3cfbe4aa83 | ||
|
|
842c801b46 | ||
|
|
ca7332957a | ||
|
|
09024baefe | ||
|
|
2824665652 | ||
|
|
611c35110e | ||
|
|
14c74db96f | ||
|
|
f2f6618177 | ||
|
|
3ee983b98b | ||
|
|
4a477c7dd5 | ||
|
|
b0b4bdc74e | ||
|
|
7fae00435b | ||
|
|
870a5b4095 | ||
|
|
7ecbc27ea3 | ||
|
|
ee6945525e | ||
|
|
5f241919a3 | ||
|
|
fe3ef4e1f6 | ||
|
|
523759e650 | ||
|
|
b7c7dd5b91 | ||
|
|
5db8b32021 | ||
|
|
1485ef7e2d | ||
|
|
f100477484 | ||
|
|
b210e4bc35 | ||
|
|
f14c67f247 | ||
|
|
4f8cd30a21 | ||
|
|
ab671132f9 | ||
|
|
013b2b62d7 | ||
|
|
8c19fcf54a | ||
|
|
5d111795b5 | ||
|
|
7decbc7e6c | ||
|
|
ea26b9ba4a | ||
|
|
d2abbb002a | ||
|
|
b4c3c6fb71 | ||
|
|
6f9f65bf4d | ||
|
|
9bd20715f9 | ||
|
|
5aa81a3461 | ||
|
|
b236e4c97b | ||
|
|
8627439479 | ||
|
|
2b531fdbb2 | ||
|
|
7048164e25 | ||
|
|
5d79c895f8 | ||
|
|
5d822fd8a9 | ||
|
|
2e070e63b7 | ||
|
|
9e7a34e950 | ||
|
|
bb17d06f22 | ||
|
|
41c86ac8b6 | ||
|
|
9aba7a35be | ||
|
|
0b817f0313 | ||
|
|
eb20fff0ac | ||
|
|
7975c05395 | ||
|
|
1b65295161 | ||
|
|
9525db0f35 | ||
|
|
d40e28e340 | ||
|
|
c288001abf | ||
|
|
03b0239538 | ||
|
|
dfff84a92c | ||
|
|
fa4ea016b9 | ||
|
|
cb5bba1c14 | ||
|
|
bb0dd6e358 | ||
|
|
1234c49d13 | ||
|
|
d3e6057d92 | ||
|
|
66922986a2 | ||
|
|
04d8a37e55 | ||
|
|
21796aea67 | ||
|
|
c327239c1a | ||
|
|
13f8b029aa | ||
|
|
45f52b7a54 | ||
|
|
57ea516f86 | ||
|
|
f89e73dc19 | ||
|
|
d58292fc73 | ||
|
|
8cd5b372cf | ||
|
|
f02fd40538 | ||
|
|
0aa7f0297f | ||
|
|
f23e269bd8 | ||
|
|
98968e0eaf | ||
|
|
7b172f6bbd | ||
|
|
12b340d7c5 | ||
|
|
5b166271d3 | ||
|
|
1e6075037f | ||
|
|
e057d7d5b0 | ||
|
|
84a8de4574 | ||
|
|
739caf0b8c | ||
|
|
c917bbdcae | ||
|
|
5c1e61ccbb | ||
|
|
d2e138864a | ||
|
|
791d037220 | ||
|
|
cab578f7ef | ||
|
|
59ab1bac26 | ||
|
|
cfdcb037f6 | ||
|
|
7466e7452f | ||
|
|
701b0cdb86 | ||
|
|
4743814033 | ||
|
|
b36d4d3821 | ||
|
|
9ec97dab68 | ||
|
|
874a9b1dd1 | ||
|
|
4f6450eef9 | ||
|
|
995bd926ab | ||
|
|
7fe6be5052 | ||
|
|
8cb2301501 | ||
|
|
ec32883e46 | ||
|
|
c8d0dc6ba2 | ||
|
|
84e895c56d | ||
|
|
e8e7caa0d1 | ||
|
|
dbc04701b1 | ||
|
|
b37f2f36b4 | ||
|
|
0ab96218a6 | ||
|
|
8ac5de449f | ||
|
|
b44b55c08f | ||
|
|
4aca626164 | ||
|
|
961bc7e92a | ||
|
|
89e8564325 | ||
|
|
d1db19a441 | ||
|
|
e17733d680 | ||
|
|
95cbe155c5 | ||
|
|
e76aac1499 | ||
|
|
a5e784bfb0 | ||
|
|
ea7de5c045 | ||
|
|
5a3cd2d0c7 | ||
|
|
7f27af260d | ||
|
|
8aea3e273a | ||
|
|
b97e8f3601 | ||
|
|
9e2836fe7f | ||
|
|
0e470f0fee | ||
|
|
17edd856d3 | ||
|
|
833a96998b | ||
|
|
df0dee3269 | ||
|
|
672027dc7e | ||
|
|
cf953a0147 | ||
|
|
f1525b7cd9 | ||
|
|
55f395b593 | ||
|
|
7d5ff0910f | ||
|
|
92005c0fdb | ||
|
|
b982612903 | ||
|
|
86386450f0 | ||
|
|
6c979f7c2d | ||
|
|
7d221552ee | ||
|
|
5de1cd959a | ||
|
|
598509e7cd | ||
|
|
41f12df14b | ||
|
|
4e6dcc5f54 | ||
|
|
cfb6980ebd | ||
|
|
11f94739ab | ||
|
|
ed9d9e3268 | ||
|
|
fa55f38258 | ||
|
|
bb575d5839 | ||
|
|
c4270621c9 | ||
|
|
152081f15d | ||
|
|
80c78dab9f | ||
|
|
3b3bdb8c5d | ||
|
|
f44392f561 | ||
|
|
506763ad17 | ||
|
|
2e012cee38 | ||
|
|
61d017517a | ||
|
|
be024cb372 | ||
|
|
17531e646b | ||
|
|
f3c0187fb7 | ||
|
|
8a06e87a6c | ||
|
|
008d84d3e3 | ||
|
|
cf4b27d510 | ||
|
|
9458642eb9 | ||
|
|
c5847184c0 | ||
|
|
a6dd27ee7d | ||
|
|
70d2f24e1d | ||
|
|
96bb17d70c | ||
|
|
0249653e17 | ||
|
|
2107b6f147 | ||
|
|
a59584bb6e | ||
|
|
16ff43de75 | ||
|
|
d52eb382b8 | ||
|
|
f381dd768b | ||
|
|
77cfa63196 | ||
|
|
8faaef4a7b | ||
|
|
3985fdcca4 | ||
|
|
c7f35eb8a2 | ||
|
|
87cbbdbc9a | ||
|
|
ed58641d41 | ||
|
|
751a1a77cd | ||
|
|
b4f3741ac7 | ||
|
|
da166bc537 | ||
|
|
4ffbd357ee | ||
|
|
6007a95683 | ||
|
|
07bcc67597 | ||
|
|
c7141d7503 | ||
|
|
65dd4bc1e0 | ||
|
|
ed7ee5aacd | ||
|
|
888d1d4bf3 | ||
|
|
52c05558f9 | ||
|
|
c888ca5b58 | ||
|
|
d8e55f4b9b | ||
|
|
715875adf8 | ||
|
|
d9d6f1e044 | ||
|
|
07566b6484 | ||
|
|
0250627b3e | ||
|
|
a8786acf0d | ||
|
|
1d5fb5cb39 | ||
|
|
5ea2712d0a |
@@ -31,9 +31,10 @@
|
|||||||
],
|
],
|
||||||
"overrideCommand": false,
|
"overrideCommand": false,
|
||||||
"postCreateCommand": "setup-dev-env",
|
"postCreateCommand": "setup-dev-env",
|
||||||
|
"postStartCommand": "printenv > .vscode/devcontainer.env",
|
||||||
"runArgs": [
|
"runArgs": [
|
||||||
"--init"
|
"--init"
|
||||||
],
|
],
|
||||||
"workspaceFolder": "/root/go/src/github.com/dokku/dokku",
|
"workspaceFolder": "/root/go/src/github.com/dokku/dokku",
|
||||||
"workspaceMount": "type=bind,source=${localWorkspaceFolder},target=/root/go/src/github.com/dokku/dokku,consistency=cached"
|
"workspaceMount": "type=bind,source=${localWorkspaceFolder},target=/root/go/src/github.com/dokku/dokku,consistency=cached"
|
||||||
}
|
}
|
||||||
28
.github/commands/bump-azure
vendored
28
.github/commands/bump-azure
vendored
@@ -18,7 +18,11 @@ main() {
|
|||||||
|
|
||||||
cd tmp
|
cd tmp
|
||||||
|
|
||||||
$GH_FOLDER/bin/gh auth login --with-token <<<"$BOT_GITHUB_API_TOKEN"
|
if [[ -n "$BOT_GITHUB_API_TOKEN" ]]; then
|
||||||
|
$GH_FOLDER/bin/gh auth login --with-token <<<"$BOT_GITHUB_API_TOKEN"
|
||||||
|
else
|
||||||
|
echo "BOT_GITHUB_API_TOKEN is not set, skipping gh auth login"
|
||||||
|
fi
|
||||||
|
|
||||||
echo "=====> Cloning quickstart templates"
|
echo "=====> Cloning quickstart templates"
|
||||||
rm -rf azure-quickstart-templates >/dev/null
|
rm -rf azure-quickstart-templates >/dev/null
|
||||||
@@ -35,15 +39,29 @@ main() {
|
|||||||
contents="$(jq --arg VERSION "$VERSION" '.parameters.dokkuVersion.defaultValue = $VERSION' application-workloads/dokku/dokku-vm/azuredeploy.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 "${contents}" >application-workloads/dokku/dokku-vm/azuredeploy.json
|
||||||
|
|
||||||
|
# update the version in main.bicep
|
||||||
|
# the line being updated looks like this:
|
||||||
|
# param dokkuVersion string = '0.28.4'
|
||||||
|
# we need to update the value of dokkuVersion to the new version
|
||||||
|
sed -i "s/param dokkuVersion string = '[^']*'/param dokkuVersion string = '$VERSION'/" application-workloads/dokku/dokku-vm/main.bicep
|
||||||
|
|
||||||
echo "=====> Updating remote repository"
|
echo "=====> Updating remote repository"
|
||||||
git add application-workloads/dokku/dokku-vm
|
git add application-workloads/dokku/dokku-vm
|
||||||
git checkout -b dokku-$VERSION
|
git checkout -b dokku-$VERSION
|
||||||
git commit -m "Update dokku-vm dokku version to $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"
|
if [[ -z "$BOT_GITHUB_API_TOKEN" ]] || [[ -z "$BOT_GITHUB_USERNAME" ]]; then
|
||||||
git push -f origin dokku-$VERSION
|
echo "BOT_GITHUB_API_TOKEN or BOT_GITHUB_USERNAME is not set, skipping git remote set-url"
|
||||||
|
else
|
||||||
|
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
|
||||||
|
fi
|
||||||
|
|
||||||
echo "=====> Creating upstream pull request"
|
if [[ -z "$BOT_GITHUB_API_TOKEN" ]] || [[ -z "$BOT_GITHUB_USERNAME" ]]; then
|
||||||
../$GH_FOLDER/bin/gh pr create --head dokku:dokku-$VERSION --repo Azure/azure-quickstart-templates --title "Update dokku-vm dokku version to $VERSION" --body ''
|
echo "BOT_GITHUB_API_TOKEN or BOT_GITHUB_USERNAME is not set, skipping gh pr create"
|
||||||
|
else
|
||||||
|
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 ''
|
||||||
|
fi
|
||||||
|
|
||||||
popd &>/dev/null
|
popd &>/dev/null
|
||||||
}
|
}
|
||||||
|
|||||||
14
.github/dependabot.yml
vendored
14
.github/dependabot.yml
vendored
@@ -134,6 +134,13 @@ updates:
|
|||||||
open-pull-requests-limit: 2
|
open-pull-requests-limit: 2
|
||||||
labels:
|
labels:
|
||||||
- "type: dependencies"
|
- "type: dependencies"
|
||||||
|
- package-ecosystem: gomod
|
||||||
|
directory: "/plugins/scheduler-k3s"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 2
|
||||||
|
labels:
|
||||||
|
- "type: dependencies"
|
||||||
- package-ecosystem: gomod
|
- package-ecosystem: gomod
|
||||||
directory: "/plugins/scheduler"
|
directory: "/plugins/scheduler"
|
||||||
schedule:
|
schedule:
|
||||||
@@ -267,6 +274,13 @@ updates:
|
|||||||
open-pull-requests-limit: 10
|
open-pull-requests-limit: 10
|
||||||
labels:
|
labels:
|
||||||
- "type: dependencies"
|
- "type: dependencies"
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: "/tests/apps/multi"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
labels:
|
||||||
|
- "type: dependencies"
|
||||||
- package-ecosystem: npm
|
- package-ecosystem: npm
|
||||||
directory: "/tests/apps/nodejs-express"
|
directory: "/tests/apps/nodejs-express"
|
||||||
schedule:
|
schedule:
|
||||||
|
|||||||
24
.github/workflows/ci.yml
vendored
24
.github/workflows/ci.yml
vendored
@@ -24,7 +24,7 @@ jobs:
|
|||||||
skip: ${{ steps.check-commit.outputs.skip }}
|
skip: ${{ steps.check-commit.outputs.skip }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.pull_request.head.sha }}
|
ref: ${{ github.event.pull_request.head.sha }}
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ jobs:
|
|||||||
timeout-minutes: 45
|
timeout-minutes: 45
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: set up qemu
|
- name: set up qemu
|
||||||
uses: docker/setup-qemu-action@v3
|
uses: docker/setup-qemu-action@v3
|
||||||
@@ -87,7 +87,7 @@ jobs:
|
|||||||
timeout-minutes: 20
|
timeout-minutes: 20
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: build-image
|
- name: build-image
|
||||||
uses: ./.github/actions/build-image
|
uses: ./.github/actions/build-image
|
||||||
@@ -97,11 +97,11 @@ jobs:
|
|||||||
build-image-arm64:
|
build-image-arm64:
|
||||||
name: build-image.linux/arm64
|
name: build-image.linux/arm64
|
||||||
needs: build
|
needs: build
|
||||||
runs-on: buildjet-4vcpu-ubuntu-2204-arm
|
runs-on: ubuntu-24.04-arm
|
||||||
timeout-minutes: 20
|
timeout-minutes: 20
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: build-image
|
- name: build-image
|
||||||
uses: ./.github/actions/build-image
|
uses: ./.github/actions/build-image
|
||||||
@@ -117,10 +117,10 @@ jobs:
|
|||||||
matrix: ${{fromJson(needs.build.outputs.matrix)}}
|
matrix: ${{fromJson(needs.build.outputs.matrix)}}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: download packages
|
- name: download packages
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: build
|
name: build
|
||||||
path: build
|
path: build
|
||||||
@@ -156,10 +156,10 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: download packages
|
- name: download packages
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: build
|
name: build
|
||||||
path: build
|
path: build
|
||||||
@@ -190,10 +190,10 @@ jobs:
|
|||||||
GITHUB_NODE_INDEX: ${{ matrix.index }}
|
GITHUB_NODE_INDEX: ${{ matrix.index }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: download packages
|
- name: download packages
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: build
|
name: build
|
||||||
path: build
|
path: build
|
||||||
@@ -230,7 +230,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: download test-results
|
- name: download test-results
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v5
|
||||||
with:
|
with:
|
||||||
path: test-results
|
path: test-results
|
||||||
|
|
||||||
|
|||||||
2
.github/workflows/codeql-analysis.yml
vendored
2
.github/workflows/codeql-analysis.yml
vendored
@@ -42,7 +42,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
# workaround for https://github.com/github/codeql/issues/14235
|
# workaround for https://github.com/github/codeql/issues/14235
|
||||||
- name: Remove go.work file
|
- name: Remove go.work file
|
||||||
|
|||||||
2
.github/workflows/docs.yml
vendored
2
.github/workflows/docs.yml
vendored
@@ -16,7 +16,7 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Cloning repo
|
- name: Cloning repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
|||||||
18
.github/workflows/lint.yml
vendored
18
.github/workflows/lint.yml
vendored
@@ -20,7 +20,7 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Clone
|
- name: Clone
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
- name: Run hadolint
|
- name: Run hadolint
|
||||||
uses: hadolint/hadolint-action@54c9adbab1582c2ef04b2016b760714a4bfde3cf
|
uses: hadolint/hadolint-action@54c9adbab1582c2ef04b2016b760714a4bfde3cf
|
||||||
# v3.0.0 => 4b5806eb9c6bee4954fc0e0cc3ad6175fc9782c1
|
# v3.0.0 => 4b5806eb9c6bee4954fc0e0cc3ad6175fc9782c1
|
||||||
@@ -30,7 +30,7 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Clone
|
- name: Clone
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
- name: Setup node
|
- name: Setup node
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
@@ -47,7 +47,7 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
- name: Setup packer
|
- name: Setup packer
|
||||||
uses: hashicorp/setup-packer@main
|
uses: hashicorp/setup-packer@main
|
||||||
with:
|
with:
|
||||||
@@ -56,15 +56,9 @@ jobs:
|
|||||||
run: "make image/init/digitalocean"
|
run: "make image/init/digitalocean"
|
||||||
env:
|
env:
|
||||||
PACKER_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
PACKER_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
- name: Get changed files in the docs folder
|
|
||||||
id: changed-files-specific
|
|
||||||
uses: tj-actions/changed-files@v45.0.7
|
|
||||||
with:
|
|
||||||
files: contrib/images/digitalocean/**
|
|
||||||
- name: Run `packer validate`
|
- name: Run `packer validate`
|
||||||
env:
|
env:
|
||||||
DIGITALOCEAN_TOKEN: ${{ secrets.DIGITALOCEAN_TOKEN }}
|
DIGITALOCEAN_TOKEN: ${{ secrets.DIGITALOCEAN_TOKEN }}
|
||||||
if: steps.changed-files-specific.outputs.any_changed == 'true'
|
|
||||||
run: "make image/validate/digitalocean"
|
run: "make image/validate/digitalocean"
|
||||||
|
|
||||||
shellcheck:
|
shellcheck:
|
||||||
@@ -72,7 +66,7 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Clone
|
- name: Clone
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
- name: Run shellcheck
|
- name: Run shellcheck
|
||||||
uses: ludeeus/action-shellcheck@00cae500b08a931fb5698e11e79bfbd38e612a38
|
uses: ludeeus/action-shellcheck@00cae500b08a931fb5698e11e79bfbd38e612a38
|
||||||
# 1.1.0 => 94e0aab03ca135d11a35e5bfc14e6746dc56e7e9
|
# 1.1.0 => 94e0aab03ca135d11a35e5bfc14e6746dc56e7e9
|
||||||
@@ -82,7 +76,7 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Clone
|
- name: Clone
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
- name: Run shfmt
|
- name: Run shfmt
|
||||||
uses: luizm/action-sh-checker@17bd25a6ee188d2b91f677060038f4ba37ba14b2
|
uses: luizm/action-sh-checker@17bd25a6ee188d2b91f677060038f4ba37ba14b2
|
||||||
# v0.5.0 => edd0e45ecff35b05f162052b50df50976c1b74fc
|
# v0.5.0 => edd0e45ecff35b05f162052b50df50976c1b74fc
|
||||||
@@ -96,7 +90,7 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Clone
|
- name: Clone
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
- name: Run yamllint
|
- name: Run yamllint
|
||||||
uses: ibiqlik/action-yamllint@2576378a8e339169678f9939646ee3ee325e845c
|
uses: ibiqlik/action-yamllint@2576378a8e339169678f9939646ee3ee325e845c
|
||||||
# v3.1.1 => 2576378a8e339169678f9939646ee3ee325e845c
|
# v3.1.1 => 2576378a8e339169678f9939646ee3ee325e845c
|
||||||
|
|||||||
12
.github/workflows/release.yml
vendored
12
.github/workflows/release.yml
vendored
@@ -25,7 +25,7 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
version: ${{ steps.version.outputs.version }}
|
version: ${{ steps.version.outputs.version }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@@ -84,7 +84,7 @@ jobs:
|
|||||||
needs: release
|
needs: release
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Setup packer
|
- name: Setup packer
|
||||||
uses: hashicorp/setup-packer@main
|
uses: hashicorp/setup-packer@main
|
||||||
@@ -120,7 +120,7 @@ jobs:
|
|||||||
needs: release
|
needs: release
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
- name: Bump Azure Template
|
- name: Bump Azure Template
|
||||||
env:
|
env:
|
||||||
BOT_GITHUB_USERNAME: ${{ secrets.HOMEBREW_GITHUB_USERNAME }}
|
BOT_GITHUB_USERNAME: ${{ secrets.HOMEBREW_GITHUB_USERNAME }}
|
||||||
@@ -147,6 +147,10 @@ jobs:
|
|||||||
brew untap homebrew/core || true
|
brew untap homebrew/core || true
|
||||||
echo "====> Untapping homebrew/cask"
|
echo "====> Untapping homebrew/cask"
|
||||||
brew untap homebrew/cask || true
|
brew untap homebrew/cask || true
|
||||||
|
echo "====> Untapping aws/tap"
|
||||||
|
brew untap aws/tap || true
|
||||||
|
echo "====> Untapping hashicorp/tap"
|
||||||
|
brew untap hashicorp/tap || true
|
||||||
echo "====> Uninstalling openssl@1.1"
|
echo "====> Uninstalling openssl@1.1"
|
||||||
brew uninstall openssl@1.1 || true
|
brew uninstall openssl@1.1 || true
|
||||||
echo "====> Uninstalling ruby@3.0"
|
echo "====> Uninstalling ruby@3.0"
|
||||||
@@ -154,7 +158,7 @@ jobs:
|
|||||||
echo "====> Running brew cleanup"
|
echo "====> Running brew cleanup"
|
||||||
brew cleanup || true
|
brew cleanup || true
|
||||||
- name: Brew doctor
|
- name: Brew doctor
|
||||||
run: brew doctor
|
run: brew doctor || true
|
||||||
- name: Brew config
|
- name: Brew config
|
||||||
run: brew config
|
run: brew config
|
||||||
- name: Bump Homebrew Formula
|
- name: Bump Homebrew Formula
|
||||||
|
|||||||
16
Dockerfile
16
Dockerfile
@@ -1,4 +1,4 @@
|
|||||||
FROM phusion/baseimage:noble-1.0.0
|
FROM phusion/baseimage:noble-1.0.2
|
||||||
|
|
||||||
CMD ["/sbin/my_init"]
|
CMD ["/sbin/my_init"]
|
||||||
|
|
||||||
@@ -16,15 +16,22 @@ RUN addgroup --gid $DOKKU_GID dokku \
|
|||||||
COPY ./tests/dhparam.pem /tmp/dhparam.pem
|
COPY ./tests/dhparam.pem /tmp/dhparam.pem
|
||||||
COPY ./build/package/ /tmp
|
COPY ./build/package/ /tmp
|
||||||
|
|
||||||
|
ENV DOKKU_INIT_SYSTEM=sv
|
||||||
|
|
||||||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||||
# hadolint ignore=DL3005,DL3008
|
# hadolint ignore=DL3005,DL3008
|
||||||
RUN mkdir -p /etc/apt/keyrings \
|
RUN mkdir -p /etc/apt/keyrings \
|
||||||
&& mkdir -p /etc/apt/keyrings \
|
&& mkdir -p /etc/apt/keyrings \
|
||||||
&& apt-get remove -y systemd && apt-get autoremove -y && apt-get update && apt-get install -y --no-install-recommends gpg lsb-release \
|
&& apt-get remove -y systemd && apt-get autoremove -y && apt-get update && apt-get -y --no-install-recommends install gpg lsb-release openssl openssh-server rsync software-properties-common \
|
||||||
&& curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg \
|
&& curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg \
|
||||||
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \
|
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \
|
||||||
|
&& add-apt-repository ppa:cncf-buildpacks/pack-cli \
|
||||||
&& apt-get update \
|
&& apt-get update \
|
||||||
&& apt-get -y --no-install-recommends install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin \
|
&& apt-get -y --no-install-recommends install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin pack-cli \
|
||||||
|
&& curl -o /tmp/nixpacks.bash -sSL https://nixpacks.com/install.sh \
|
||||||
|
&& chmod +x /tmp/nixpacks.bash \
|
||||||
|
&& /tmp/nixpacks.bash \
|
||||||
|
&& rm -rf /tmp/nixpacks.bash \
|
||||||
&& echo "dokku dokku/hostname string $DOKKU_HOSTNAME" | debconf-set-selections \
|
&& 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/skip_key_file boolean $DOKKU_SKIP_KEY_FILE" | debconf-set-selections \
|
||||||
&& echo "dokku dokku/vhost_enable boolean $DOKKU_VHOST_ENABLE" | debconf-set-selections \
|
&& echo "dokku dokku/vhost_enable boolean $DOKKU_VHOST_ENABLE" | debconf-set-selections \
|
||||||
@@ -34,8 +41,7 @@ RUN mkdir -p /etc/apt/keyrings \
|
|||||||
&& cp /tmp/dhparam.pem /etc/nginx/dhparam.pem \
|
&& cp /tmp/dhparam.pem /etc/nginx/dhparam.pem \
|
||||||
&& apt-get update \
|
&& apt-get update \
|
||||||
&& apt-get upgrade -y \
|
&& apt-get upgrade -y \
|
||||||
&& apt-get -y --no-install-recommends --only-upgrade install openssl openssh-server \
|
&& apt-get -y --no-install-recommends install lambda-builder "/tmp/dokku-$(dpkg --print-architecture).deb" \
|
||||||
&& DOKKU_INIT_SYSTEM=sv apt-get -y --no-install-recommends install rsync "/tmp/dokku-$(dpkg --print-architecture).deb" \
|
|
||||||
&& apt-get purge -y syslog-ng-core \
|
&& apt-get purge -y syslog-ng-core \
|
||||||
&& apt-get autoremove -y \
|
&& apt-get autoremove -y \
|
||||||
&& apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
&& apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||||
|
|||||||
386
HISTORY.md
386
HISTORY.md
@@ -1,5 +1,391 @@
|
|||||||
# History
|
# History
|
||||||
|
|
||||||
|
## 0.36.2
|
||||||
|
|
||||||
|
Install/update via the bootstrap script:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
wget -NP . https://dokku.com/install/v0.36.2/bootstrap.sh
|
||||||
|
sudo DOKKU_TAG=v0.36.2 bash bootstrap.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
- #7872: @josegonzalez Correct issues when scaling non-web processes for the scheduler-k3s plugin
|
||||||
|
|
||||||
|
### Refactors
|
||||||
|
|
||||||
|
- #7871: @josegonzalez Remove public exposure of DOKKU_APP_TYPE in favor of builder detected property
|
||||||
|
|
||||||
|
### Dependencies
|
||||||
|
|
||||||
|
- #7868: @dependabot[bot] chore(deps): bump grunt-cli from 1.4.3 to 1.5.0 in /tests/apps/multi
|
||||||
|
- #7869: @dependabot[bot] chore(deps): bump bower from 1.8.12 to 1.8.14 in /tests/apps/multi
|
||||||
|
- #7870: @dependabot[bot] chore(deps): bump tmp from 0.2.4 to 0.2.5 in /tests/apps/multi
|
||||||
|
- #7867: @dependabot[bot] chore(deps): bump grunt from 1.5.3 to 1.6.1 in /tests/apps/multi
|
||||||
|
- #7866: @dependabot[bot] chore(deps): bump github.com/fluxcd/pkg/kustomize from 1.18.0 to 1.19.0 in /plugins/scheduler-k3s
|
||||||
|
- #7862: @dependabot[bot] chore(deps): bump google.golang.org/protobuf from 1.36.7 to 1.36.8 in /tests/apps/gogrpc
|
||||||
|
|
||||||
|
### Other
|
||||||
|
|
||||||
|
- #7864: @josegonzalez chore(deps): add dependabot entries for plugins/scheduler-k3s and tests/apps/multi
|
||||||
|
|
||||||
|
## 0.36.1
|
||||||
|
|
||||||
|
Install/update via the bootstrap script:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
wget -NP . https://dokku.com/install/v0.36.1/bootstrap.sh
|
||||||
|
sudo DOKKU_TAG=v0.36.1 bash bootstrap.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
- #7846: @josegonzalez Correct issue in parsing escaped plus signs in vector sink values
|
||||||
|
- #7841: @leksyib14 Fix handling of equals sign in vector sink values
|
||||||
|
- #7844: @josegonzalez Do not change permissions on config directory symlinks
|
||||||
|
|
||||||
|
### Tests
|
||||||
|
|
||||||
|
- #7848: @josegonzalez Ensure tests properly fetch data from json output
|
||||||
|
- #7845: @josegonzalez Use the official github actions arm64 runner
|
||||||
|
|
||||||
|
### Dependencies
|
||||||
|
|
||||||
|
- #7861: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.74.2 to 1.75.0 in /tests/apps/gogrpc
|
||||||
|
- #7860: @dependabot[bot] chore(deps): bump flask from 3.1.1 to 3.1.2 in /tests/apps/python-flask
|
||||||
|
- #7859: @dependabot[bot] chore(deps): bump flask from 3.1.1 to 3.1.2 in /tests/apps/multi
|
||||||
|
- #7856: @dependabot[bot] chore(deps): bump mkdocs-material from 9.6.16 to 9.6.17 in /docs/_build
|
||||||
|
- #7857: @dependabot[bot] chore(deps): bump python from 3.13.6-alpine to 3.13.7-alpine in /docs/_build
|
||||||
|
- #7858: @dependabot[bot] chore(deps): bump python from 3.13.6-bookworm to 3.13.7-bookworm in /tests/apps/dockerfile-release
|
||||||
|
- #7855: @dependabot[bot] chore(deps): bump org.eclipse.jetty:jetty-servlet from 11.0.25 to 11.0.26 in /tests/apps/java
|
||||||
|
- #7849: @dependabot[bot] chore(deps): bump golang from 1.24.6 to 1.25.0 in /tests/apps/zombies-dockerfile-tini
|
||||||
|
- #7850: @dependabot[bot] chore(deps): bump golang from 1.24.6 to 1.25.0 in /tests/apps/go-fail-predeploy
|
||||||
|
- #7851: @dependabot[bot] chore(deps): bump golang from 1.24.6 to 1.25.0 in /tests/apps/go-fail-postdeploy
|
||||||
|
- #7852: @dependabot[bot] chore(deps): bump golang from 1.24.6 to 1.25.0 in /tests/apps/gogrpc
|
||||||
|
- #7853: @dependabot[bot] chore(deps): bump golang from 1.24.6 to 1.25.0 in /tests/apps/zombies-dockerfile-no-tini
|
||||||
|
- #7842: @dependabot[bot] chore(deps): bump actions/checkout from 4 to 5
|
||||||
|
- #7821: @dependabot[bot] chore(deps): bump traefik from 3.4.4 to 3.5.0 in /plugins/traefik-vhosts
|
||||||
|
- #7843: @josegonzalez Bump go modules
|
||||||
|
- #7824: @dependabot[bot] chore(deps): bump mkdocs-material from 9.6.15 to 9.6.16 in /docs/_build
|
||||||
|
- #7823: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.16 to 10.16.1 in /docs/_build
|
||||||
|
- #7831: @dependabot[bot] chore(deps): bump google.golang.org/protobuf from 1.36.6 to 1.36.7 in /tests/apps/gogrpc
|
||||||
|
- #7839: @dependabot[bot] chore(deps): bump python from 3.13.5-bookworm to 3.13.6-bookworm in /tests/apps/dockerfile-release
|
||||||
|
- #7838: @dependabot[bot] chore(deps): bump python from 3.13.5-alpine to 3.13.6-alpine in /docs/_build
|
||||||
|
- #7837: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.40.0 to 0.41.0 in /plugins/common
|
||||||
|
- #7836: @dependabot[bot] chore(deps): bump golang from 1.24.5 to 1.24.6 in /tests/apps/zombies-dockerfile-tini
|
||||||
|
- #7835: @dependabot[bot] chore(deps): bump golang from 1.24.5 to 1.24.6 in /tests/apps/zombies-dockerfile-no-tini
|
||||||
|
- #7834: @dependabot[bot] chore(deps): bump golang from 1.24.5 to 1.24.6 in /tests/apps/go-fail-postdeploy
|
||||||
|
- #7833: @dependabot[bot] chore(deps): bump golang from 1.24.5 to 1.24.6 in /tests/apps/gogrpc
|
||||||
|
- #7832: @dependabot[bot] chore(deps): bump golang from 1.24.5 to 1.24.6 in /tests/apps/go-fail-predeploy
|
||||||
|
- #7828: @dependabot[bot] chore(deps): bump actions/download-artifact from 4 to 5
|
||||||
|
|
||||||
|
### Other
|
||||||
|
|
||||||
|
- #7854: @dependabot[bot] chore(deps): bump helm.sh/helm/v3 from 3.18.4 to 3.18.5 in /plugins/scheduler-k3s
|
||||||
|
- #7825: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.26 to 2.11.28 in /plugins/scheduler-k3s
|
||||||
|
- #7830: @dependabot[bot] chore(deps): bump tmp from 0.2.1 to 0.2.4 in /tests/apps/multi
|
||||||
|
- #7829: @dependabot[bot] chore(deps): bump github.com/go-acme/lego/v4 from 4.24.0 to 4.25.2 in /plugins/scheduler-k3s
|
||||||
|
|
||||||
|
## 0.36.0
|
||||||
|
|
||||||
|
Install/update via the bootstrap script:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
wget -NP . https://dokku.com/install/v0.36.0/bootstrap.sh
|
||||||
|
sudo DOKKU_TAG=v0.36.0 bash bootstrap.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
See the [0.36.0 migration guide](/docs/appendices/0.36.0-migration-guide.md) for more information on migrating to 0.36.0.
|
||||||
|
|
||||||
|
### Backwards Compatibility Breaks
|
||||||
|
|
||||||
|
- #7442: @turicas Update how domains:clear works and add domains:reset command
|
||||||
|
- #7577: @josegonzalez Migrate DOKKU_DOCKER_STOP_TIMEOUT to ps setting
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
- #7579: @josegonzalez Stop all app containers when calling ps:stop
|
||||||
|
- #7820: @josegonzalez Ignore brew doctor warnings when releasing Dokku as a homebrew formula
|
||||||
|
- #7811: @slava-sh Fix issue deploying from a tar file
|
||||||
|
- #7781: @josegonzalez Update gitignore to remove compiled triggers from repo
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
|
||||||
|
- #7780: @josegonzalez Export the devcontainer environment to allow docker exec to work
|
||||||
|
- #7776: @josegonzalez Add kustomize support for applying helm charts
|
||||||
|
- #7773: @josegonzalez Use values.yaml correctly within internal Kubernetes Helm Chart
|
||||||
|
- #7769: @devopswithnaman Improve error handling in docker operations
|
||||||
|
- #7578: @josegonzalez Add ability to set maintenance mode for all cron tasks running for an app
|
||||||
|
- #7504: @josegonzalez Only redeploy formations that have had their values changed
|
||||||
|
- #7499: @nonZero Add support for custom nginx service command
|
||||||
|
- #7812: @CiTroNaK Allow specifying a custom top-level label key for the caddy proxy
|
||||||
|
|
||||||
|
### Removals
|
||||||
|
|
||||||
|
- #7818: @josegonzalez Drop support for Ubuntu 20.04
|
||||||
|
- #7774: @josegonzalez Remove ansi escape characters that dropped the remote: prefix in deploy output
|
||||||
|
|
||||||
|
### Refactors
|
||||||
|
|
||||||
|
- #7816: @josegonzalez Use helper go functions to handle extracting files from a repository
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
- #7777: @coorasse Fix typo in 0.36.0 migration guide
|
||||||
|
- #7761: @largemouth Fix struct name in comment
|
||||||
|
- #7760: @olleolleolle Drop dokku-client gem, homepage 404s
|
||||||
|
- #7759: @olleolleolle Drop mention of dokkufy gem archived in 2017
|
||||||
|
- #7755: @olleolleolle Update checkout action version in github actions documentation
|
||||||
|
|
||||||
|
### Tests
|
||||||
|
|
||||||
|
- #7762: @josegonzalez Reference new packeto buildpack urls
|
||||||
|
|
||||||
|
### Dependencies
|
||||||
|
|
||||||
|
- #7815: @dependabot[bot] chore(deps): bump github.com/onsi/gomega from 1.37.0 to 1.38.0 in /plugins/config
|
||||||
|
- #7814: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.73.0 to 1.74.2 in /tests/apps/gogrpc
|
||||||
|
- #7810: @dependabot[bot] chore(deps): bump github.com/spf13/pflag from 1.0.6 to 1.0.7 in /plugins/config
|
||||||
|
- #7792: @dependabot[bot] chore(deps): bump ruby from 3.4.4 to 3.4.5 in /tests/apps/dockerfile-entrypoint
|
||||||
|
- #7791: @dependabot[bot] chore(deps): bump traefik from 3.4.1 to 3.4.4 in /plugins/traefik-vhosts
|
||||||
|
- #7790: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.39.0 to 0.40.0 in /plugins/common
|
||||||
|
- #7787: @dependabot[bot] chore(deps): bump golang from 1.24.4 to 1.24.5 in /tests/apps/zombies-dockerfile-no-tini
|
||||||
|
- #7786: @dependabot[bot] chore(deps): bump golang from 1.24.4 to 1.24.5 in /tests/apps/zombies-dockerfile-tini
|
||||||
|
- #7785: @dependabot[bot] chore(deps): bump golang from 1.24.4 to 1.24.5 in /tests/apps/go-fail-predeploy
|
||||||
|
- #7784: @dependabot[bot] chore(deps): bump golang from 1.24.4 to 1.24.5 in /tests/apps/gogrpc
|
||||||
|
- #7783: @dependabot[bot] chore(deps): bump golang from 1.24.4 to 1.24.5 in /tests/apps/go-fail-postdeploy
|
||||||
|
- #7782: @josegonzalez Update golang dependencies in scheduler-k3s plugin
|
||||||
|
- #7779: @josegonzalez Update golang to 1.24
|
||||||
|
- #7775: @dependabot[bot] chore(deps): bump mvdan.cc/sh/v3 from 3.11.0 to 3.12.0 in /plugins/cron
|
||||||
|
- #7772: @dependabot[bot] chore(deps): bump timberio/vector from 0.47.0-debian to 0.48.0-debian in /plugins/logs
|
||||||
|
- #7771: @dependabot[bot] chore(deps): bump mkdocs-material from 9.6.14 to 9.6.15 in /docs/_build
|
||||||
|
- #7768: @dependabot[bot] chore(deps): bump thin from 1.8.2 to 2.0.1 in /tests/apps/ruby
|
||||||
|
- #7766: @dependabot[bot] chore(deps): bump lucaslorentz/caddy-docker-proxy from 2.9 to 2.10 in /plugins/caddy-vhosts
|
||||||
|
- #7765: @dependabot[bot] chore(deps): bump pygments from 2.19.1 to 2.19.2 in /docs/_build
|
||||||
|
- #7763: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.15 to 10.16 in /docs/_build
|
||||||
|
- #7757: @dependabot[bot] chore(deps): bump python from 3.13.4-alpine to 3.13.5-alpine in /docs/_build
|
||||||
|
- #7756: @dependabot[bot] chore(deps): bump python from 3.13.4-bookworm to 3.13.5-bookworm in /tests/apps/dockerfile-release
|
||||||
|
- #7754: @dependabot[bot] chore(deps): bump requests from 2.32.0 to 2.32.4 in /tests/apps/lambda-python
|
||||||
|
- #7753: @dependabot[bot] chore(deps): bump zipp from 3.22.0 to 3.23.0 in /docs/_build
|
||||||
|
- #7749: @josegonzalez chore: update herokuish from 0.10.3 to 0.11.0
|
||||||
|
- #7748: @josegonzalez chore: update docker-container-healthchecker from 0.11.5 to 0.14.0
|
||||||
|
- #7628: @dependabot[bot] chore(deps): bump express from 4.21.2 to 5.1.0 in /tests/apps/nodejs-express-noappjson
|
||||||
|
- #7621: @dependabot[bot] chore(deps): bump express from 4.21.2 to 5.1.0 in /tests/apps/nodejs-express
|
||||||
|
- #7819: @dependabot[bot] chore(deps): bump brace-expansion from 1.1.11 to 1.1.12 in /tests/apps/multi
|
||||||
|
|
||||||
|
## 0.35.20
|
||||||
|
|
||||||
|
Install/update via the bootstrap script:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
wget -NP . https://dokku.com/install/v0.35.20/bootstrap.sh
|
||||||
|
sudo DOKKU_TAG=v0.35.20 bash bootstrap.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
- #7726: @josegonzalez Ensure compose projects are spawned from the /tmp directory
|
||||||
|
- #7725: @josegonzalez Uninstall hashicorp tap to fix formula releases
|
||||||
|
|
||||||
|
### Dependencies
|
||||||
|
|
||||||
|
- #7735: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.72.2 to 1.73.0 in /tests/apps/gogrpc
|
||||||
|
- #7737: @dependabot[bot] chore(deps): bump python from 3.13.3-alpine to 3.13.4-alpine in /docs/_build
|
||||||
|
- #7738: @dependabot[bot] chore(deps): bump python from 3.13.3-bookworm to 3.13.4-bookworm in /tests/apps/dockerfile-release
|
||||||
|
- #7745: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.38.0 to 0.39.0 in /plugins/common
|
||||||
|
- #7740: @dependabot[bot] chore(deps): bump golang from 1.24.3 to 1.24.4 in /tests/apps/gogrpc
|
||||||
|
- #7741: @dependabot[bot] chore(deps): bump golang from 1.24.3 to 1.24.4 in /tests/apps/go-fail-postdeploy
|
||||||
|
- #7742: @dependabot[bot] chore(deps): bump golang from 1.24.3 to 1.24.4 in /tests/apps/zombies-dockerfile-tini
|
||||||
|
- #7743: @dependabot[bot] chore(deps): bump golang from 1.24.3 to 1.24.4 in /tests/apps/go-fail-predeploy
|
||||||
|
- #7744: @dependabot[bot] chore(deps): bump golang from 1.24.3 to 1.24.4 in /tests/apps/zombies-dockerfile-no-tini
|
||||||
|
- #7730: @dependabot[bot] chore(deps): bump traefik from 3.4.0 to 3.4.1 in /plugins/traefik-vhosts
|
||||||
|
- #7729: @dependabot[bot] chore(deps): bump zipp from 3.21.0 to 3.22.0 in /docs/_build
|
||||||
|
- #7727: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.72.1 to 1.72.2 in /tests/apps/gogrpc
|
||||||
|
|
||||||
|
### Other
|
||||||
|
|
||||||
|
- #7746: @dependabot[bot] chore(deps): bump django from 5.0.14 to 5.1.10 in /tests/apps/dockerfile-release
|
||||||
|
- #7731: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.24 to 2.11.25 in /plugins/scheduler-k3s
|
||||||
|
|
||||||
|
## 0.35.19
|
||||||
|
|
||||||
|
Install/update via the bootstrap script:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
wget -NP . https://dokku.com/install/v0.35.19/bootstrap.sh
|
||||||
|
sudo DOKKU_TAG=v0.35.19 bash bootstrap.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
- #7686: @josegonzalez Untap aws/tap to correct issues in formula release
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
- #7707: @swrobel Remove duplicate hostname plugin
|
||||||
|
- #7687: @d9i Fix cron key in app.json docs
|
||||||
|
- #7677: @plafue Add continuous integration example for woodpecker ci
|
||||||
|
|
||||||
|
### Tests
|
||||||
|
|
||||||
|
- #7585: @josegonzalez Add test to prove Dokku respects the Procfile when deploying from an image
|
||||||
|
- #7678: @josegonzalez Revert "fix: update CID count in ps tests"
|
||||||
|
|
||||||
|
### Dependencies
|
||||||
|
|
||||||
|
- #7692: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.37.0 to 0.38.0 in /plugins/common
|
||||||
|
- #7626: @dependabot[bot] chore(deps): bump express from 4.21.2 to 5.1.0 in /tests/apps/dockerfile
|
||||||
|
- #7693: @dependabot[bot] chore(deps): bump traefik from 3.3.5 to 3.4.0 in /plugins/traefik-vhosts
|
||||||
|
- #7694: @dependabot[bot] chore(deps): bump golang from 1.24.2 to 1.24.3 in /tests/apps/go-fail-postdeploy
|
||||||
|
- #7695: @dependabot[bot] chore(deps): bump node from 23-alpine to 24-alpine in /tests/apps/dockerfile-procfile-bad
|
||||||
|
- #7696: @dependabot[bot] chore(deps): bump golang from 1.24.2 to 1.24.3 in /tests/apps/gogrpc
|
||||||
|
- #7697: @dependabot[bot] chore(deps): bump golang from 1.24.2 to 1.24.3 in /tests/apps/go-fail-predeploy
|
||||||
|
- #7698: @dependabot[bot] chore(deps): bump node from 23-alpine to 24-alpine in /tests/apps/dockerfile-procfile
|
||||||
|
- #7699: @dependabot[bot] chore(deps): bump golang from 1.24.2 to 1.24.3 in /tests/apps/zombies-dockerfile-no-tini
|
||||||
|
- #7700: @dependabot[bot] chore(deps): bump golang from 1.24.2 to 1.24.3 in /tests/apps/zombies-dockerfile-tini
|
||||||
|
- #7701: @dependabot[bot] chore(deps): bump node from 23-alpine to 24-alpine in /tests/apps/dockerfile
|
||||||
|
- #7702: @dependabot[bot] chore(deps): bump node from 23-alpine to 24-alpine in /tests/apps/dockerfile-app-json-formations
|
||||||
|
- #7704: @dependabot[bot] chore(deps): bump rack from 2.2.13 to 2.2.14 in /tests/apps/ruby
|
||||||
|
- #7711: @dependabot[bot] chore(deps): bump flask from 3.1.0 to 3.1.1 in /tests/apps/multi
|
||||||
|
- #7712: @dependabot[bot] chore(deps): bump flask from 3.1.0 to 3.1.1 in /tests/apps/python-flask
|
||||||
|
- #7713: @dependabot[bot] chore(deps): bump pyyaml-env-tag from 0.1 to 1.1 in /docs/_build
|
||||||
|
- #7714: @dependabot[bot] chore(deps): bump mkdocs-material from 9.6.12 to 9.6.14 in /docs/_build
|
||||||
|
- #7715: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.72.0 to 1.72.1 in /tests/apps/gogrpc
|
||||||
|
- #7716: @dependabot[bot] chore(deps): bump ruby from 3.4.3 to 3.4.4 in /tests/apps/dockerfile-entrypoint
|
||||||
|
- #7718: @dependabot[bot] chore(deps): bump timberio/vector from 0.46.1-debian to 0.47.0-debian in /plugins/logs
|
||||||
|
- #7703: @dependabot[bot] chore(deps): bump node from 23-alpine to 24-alpine in /tests/apps/dockerfile-noexpose
|
||||||
|
- #7688: @dependabot[bot] chore(deps): bump pymdown-extensions from 10.14.3 to 10.15 in /docs/_build
|
||||||
|
- #7689: @dependabot[bot] chore(deps): bump importlib-metadata from 8.6.1 to 8.7.0 in /docs/_build
|
||||||
|
- #7671: @dependabot[bot] chore(deps): bump golang.org/x/net from 0.36.0 to 0.38.0 in /tests/apps/gogrpc
|
||||||
|
- #7681: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.71.1 to 1.72.0 in /tests/apps/gogrpc
|
||||||
|
- #7680: @dependabot[bot] chore(deps): bump soupsieve from 2.6 to 2.7 in /docs/_build
|
||||||
|
- #7682: @dependabot[bot] chore(deps): bump packaging from 24.2 to 25.0 in /docs/_build
|
||||||
|
- #7673: @dependabot[bot] chore(deps): bump golang.org/x/net from 0.37.0 to 0.38.0 in /plugins/common
|
||||||
|
- #7675: @dependabot[bot] chore(deps): bump byjg/easy-haproxy from 4.4.0 to 4.5.0 in /plugins/haproxy-vhosts
|
||||||
|
- #7676: @dependabot[bot] chore(deps): bump mkdocs-material from 9.6.11 to 9.6.12 in /docs/_build
|
||||||
|
|
||||||
|
### Other
|
||||||
|
|
||||||
|
- #7723: @josegonzalez Revert "chore(deps): bump helm.sh/helm/v3 from 3.14.2 to 3.17.3 in /plugins/scheduler-k3s"
|
||||||
|
- #7645: @dependabot[bot] chore(deps): bump helm.sh/helm/v3 from 3.14.2 to 3.17.3 in /plugins/scheduler-k3s
|
||||||
|
- #7717: @dependabot[bot] chore(deps): bump setuptools from 70.0.0 to 78.1.1 in /tests/apps/dockerfile-release
|
||||||
|
- #7719: @d1ceward Fix: Add missing `systemctl` path detection in nginx-vhost plugin
|
||||||
|
- #7679: @dependabot[bot] chore(deps): bump github.com/traefik/traefik/v2 from 2.11.15 to 2.11.24 in /plugins/scheduler-k3s
|
||||||
|
|
||||||
|
## 0.35.18
|
||||||
|
|
||||||
|
Install/update via the bootstrap script:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
wget -NP . https://dokku.com/install/v0.35.18/bootstrap.sh
|
||||||
|
sudo DOKKU_TAG=v0.35.18 bash bootstrap.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
- #7669: @josegonzalez fix: update CID count in ps tests
|
||||||
|
|
||||||
|
### Dependencies
|
||||||
|
|
||||||
|
- #7668: @dependabot[bot] chore(deps): bump timberio/vector from 0.43.1-debian to 0.46.1-debian in /plugins/logs
|
||||||
|
- #7670: @dependabot[bot] chore(deps): bump beautifulsoup4 from 4.13.3 to 4.13.4 in /docs/_build
|
||||||
|
- #7630: @dependabot[bot] chore(deps): bump express from 4.21.2 to 5.1.0 in /tests/apps/gitsubmodules
|
||||||
|
- #7666: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.36.0 to 0.37.0 in /plugins/common
|
||||||
|
- #7618: @dependabot[bot] chore(deps): bump express from 4.21.2 to 5.1.0 in /tests/apps/.websocket.disabled
|
||||||
|
- #7620: @dependabot[bot] chore(deps): bump express from 4.21.2 to 5.1.0 in /tests/apps/dockerfile-procfile-bad
|
||||||
|
- #7622: @dependabot[bot] chore(deps): bump express from 4.21.2 to 5.1.0 in /tests/apps/dockerfile-procfile
|
||||||
|
- #7629: @dependabot[bot] chore(deps): bump express from 5.0.1 to 5.1.0 in /tests/apps/checks-root
|
||||||
|
- #7623: @dependabot[bot] chore(deps): bump express from 4.21.2 to 5.1.0 in /tests/apps/dockerfile-noexpose
|
||||||
|
- #7627: @dependabot[bot] chore(deps): bump express from 4.21.2 to 5.1.0 in /tests/apps/nodejs-express-noprocfile
|
||||||
|
- #7631: @dependabot[bot] chore(deps): bump express from 4.21.2 to 5.1.0 in /tests/apps/dockerfile-app-json-formations
|
||||||
|
- #7667: @dependabot[bot] chore(deps): bump ruby from 3.4.2 to 3.4.3 in /tests/apps/dockerfile-entrypoint
|
||||||
|
|
||||||
|
### Other
|
||||||
|
|
||||||
|
- #7661: @josegonzalez chore: bump dokku-event-listener from 0.17.0 to 0.17.2
|
||||||
|
- #7660: @josegonzalez chore: bump plugn from 0.15.3 to 0.16.0
|
||||||
|
- #7659: @josegonzalez chore: bump gliderlabs-sigil from 0.11.0 to 0.11.4
|
||||||
|
- #7656: @josegonzalez chore: bump netrc from 0.10.0 to 0.10.2
|
||||||
|
- #7655: @josegonzalez chore: bump lambda-builder from 0.8.0 to 0.9.1
|
||||||
|
- #7663: @josegonzalez chore: bump herokuish from 0.10.2 to 0.10.3
|
||||||
|
- #7662: @josegonzalez chore: bump dokku-update from 0.9.4 to 0.9.6
|
||||||
|
- #7658: @josegonzalez chore: bump sshcommand from 0.19.0 to 0.20.0
|
||||||
|
- #7657: @josegonzalez chore: bump procfile-util from 0.19.0 to 0.20.3
|
||||||
|
- #7654: @josegonzalez chore: bump docker-image-builder from 0.8.0 to 0.8.1
|
||||||
|
- #7653: @josegonzalez chore: bump docker-container-healthchecker from 0.11.0 to 0.11.5
|
||||||
|
|
||||||
|
## 0.35.17
|
||||||
|
|
||||||
|
Install/update via the bootstrap script:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
wget -NP . https://dokku.com/install/v0.35.17/bootstrap.sh
|
||||||
|
sudo DOKKU_TAG=v0.35.17 bash bootstrap.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
- #7606: @josegonzalez fix: bump dokku version in main.bicep when bumping azure versions
|
||||||
|
- #7650: @josegonzalez fix: set the correct default ingress class for k3s clusters
|
||||||
|
- #7649: @josegonzalez fix: decrease default in-use keda resources
|
||||||
|
- #7587: @turicas Correctly name paketo chown option
|
||||||
|
- #7584: @josegonzalez Install all builder binaries in Dokku docker image
|
||||||
|
- #7580: @josegonzalez Do not set network flag when building dockerfile images
|
||||||
|
- #7575: @josegonzalez Restore the git head ref when running repo:gc
|
||||||
|
- #7574: @josegonzalez fix: do not write VHOST file if the DOKKU_ROOT directory does not exist
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
|
||||||
|
- #7648: @josegonzalez feat: add ability to ship k3s container logs via vector
|
||||||
|
- #7581: @josegonzalez Allow --volume flags to be passed to pack at buildtime
|
||||||
|
- #7583: @josegonzalez Send Host header when running container checks in docker-local
|
||||||
|
- #7572: @josegonzalez Add support for setting shm-size for kubernetes deployments
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
- #7652: @josegonzalez docs: use a cid-file in the plugin example
|
||||||
|
- #7647: @closeobserve Fix some golang docblock comments
|
||||||
|
- #7586: @turicas Remove `--` from `--git-url` in plugin installation docs
|
||||||
|
|
||||||
|
### Dependencies
|
||||||
|
|
||||||
|
- #7603: @dependabot[bot] chore(deps): bump org.eclipse.jetty:jetty-servlet from 11.0.24 to 11.0.25 in /tests/apps/java
|
||||||
|
- #7641: @dependabot[bot] chore(deps): bump golang.org/x/sync from 0.12.0 to 0.13.0 in /plugins/scheduler-docker-local
|
||||||
|
- #7639: @dependabot[bot] chore(deps): bump github.com/onsi/gomega from 1.36.2 to 1.37.0 in /plugins/common
|
||||||
|
- #7646: @dependabot[bot] chore(deps): bump phusion/baseimage from noble-1.0.0 to noble-1.0.2
|
||||||
|
- #7610: @dependabot[bot] chore(deps): bump google.golang.org/protobuf from 1.36.5 to 1.36.6 in /tests/apps/gogrpc
|
||||||
|
- #7619: @dependabot[bot] chore(deps): bump google.golang.org/grpc from 1.71.0 to 1.71.1 in /tests/apps/gogrpc
|
||||||
|
- #7624: @dependabot[bot] chore(deps): bump traefik from 3.3.4 to 3.3.5 in /plugins/traefik-vhosts
|
||||||
|
- #7632: @dependabot[bot] chore(deps): bump golang from 1.24.1 to 1.24.2 in /tests/apps/go-fail-postdeploy
|
||||||
|
- #7633: @dependabot[bot] chore(deps): bump golang from 1.24.1 to 1.24.2 in /tests/apps/zombies-dockerfile-tini
|
||||||
|
- #7634: @dependabot[bot] chore(deps): bump golang from 1.24.1 to 1.24.2 in /tests/apps/go-fail-predeploy
|
||||||
|
- #7643: @dependabot[bot] chore(deps): bump python from 3.13.2-bookworm to 3.13.3-bookworm in /tests/apps/dockerfile-release
|
||||||
|
- #7635: @dependabot[bot] chore(deps): bump golang from 1.24.1 to 1.24.2 in /tests/apps/gogrpc
|
||||||
|
- #7636: @dependabot[bot] chore(deps): bump golang from 1.24.1 to 1.24.2 in /tests/apps/zombies-dockerfile-no-tini
|
||||||
|
- #7613: @dependabot[bot] chore(deps): bump pyparsing from 3.2.1 to 3.2.3 in /docs/_build
|
||||||
|
- #7625: @dependabot[bot] chore(deps): bump mkdocs-material from 9.6.8 to 9.6.11 in /docs/_build
|
||||||
|
- #7644: @dependabot[bot] chore(deps): bump python from 3.13.2-alpine to 3.13.3-alpine in /docs/_build
|
||||||
|
- #7651: @dependabot[bot] chore(deps): update markdown requirement from <3.8,>=3.2.1 to >=3.2.1,<3.9 in /docs/_build
|
||||||
|
- #7595: @dependabot[bot] chore(deps): bump tj-actions/changed-files from 45.0.7 to 45.0.8
|
||||||
|
- #7593: @dependabot[bot] chore(deps): bump mkdocs-material from 9.6.7 to 9.6.8 in /docs/_build
|
||||||
|
- #7589: @dependabot[bot] chore(deps): bump golang.org/x/net from 0.34.0 to 0.36.0 in /tests/apps/gogrpc
|
||||||
|
- #7588: @dependabot[bot] chore(deps): bump rack from 2.2.12 to 2.2.13 in /tests/apps/ruby
|
||||||
|
- #7570: @dependabot[bot] chore(deps): bump mvdan.cc/sh/v3 from 3.10.0 to 3.11.0 in /plugins/cron
|
||||||
|
- #7569: @dependabot[bot] chore(deps): bump golang.org/x/crypto from 0.35.0 to 0.36.0 in /plugins/common
|
||||||
|
- #7568: @dependabot[bot] chore(deps): bump jinja2 from 3.1.5 to 3.1.6 in /docs/_build
|
||||||
|
|
||||||
|
### Other
|
||||||
|
|
||||||
|
- #7601: @dependabot[bot] chore(deps): bump github.com/expr-lang/expr from 1.15.8 to 1.17.0 in /plugins/scheduler-k3s
|
||||||
|
- #7602: @dependabot[bot] chore(deps): bump github.com/containerd/containerd from 1.7.20 to 1.7.27 in /plugins/scheduler-k3s
|
||||||
|
- #7637: @dependabot[bot] chore(deps): bump django from 5.0.13 to 5.0.14 in /tests/apps/dockerfile-release
|
||||||
|
- #7607: @dependabot[bot] chore(deps): bump gunicorn from 22.0.0 to 23.0.0 in /tests/apps/dockerfile-release
|
||||||
|
- #7596: @josegonzalez Drop compromisde tj-actions/changed-files from Ci
|
||||||
|
- #7582: @josegonzalez Add ability to disable vhosts for all apps
|
||||||
|
- #7576: @josegonzalez fix: properly handle NoAppsExist in network:rebuild-all and buildpacks:set
|
||||||
|
- #7571: @dependabot[bot] chore(deps): bump django from 5.0.11 to 5.0.13 in /tests/apps/dockerfile-release
|
||||||
|
|
||||||
## 0.35.16
|
## 0.35.16
|
||||||
|
|
||||||
Install/update via the bootstrap script:
|
Install/update via the bootstrap script:
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ Support us with a monthly donation and help us continue our activities. [[Become
|
|||||||
|
|
||||||
A fresh VM running any of the following operating systems:
|
A fresh VM running any of the following operating systems:
|
||||||
|
|
||||||
- Ubuntu 20.04 / 22.04 / 24.04 (amd64/arm64) - Any currently supported release
|
- Ubuntu 22.04 / 24.04 (amd64/arm64) - Any currently supported release
|
||||||
- Debian 11+ (amd64/arm64)
|
- Debian 11+ (amd64/arm64)
|
||||||
|
|
||||||
An SSH keypair that can be used for application deployment. If this exists before installation, it will be automatically imported into dokku.
|
An SSH keypair that can be used for application deployment. If this exists before installation, it will be automatically imported into dokku.
|
||||||
@@ -85,8 +85,8 @@ Otherwise, you will need to import the keypair manually after installation using
|
|||||||
To install the latest stable release, run the following commands as a user who has access to `sudo`:
|
To install the latest stable release, run the following commands as a user who has access to `sudo`:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
wget -NP . https://dokku.com/install/v0.35.16/bootstrap.sh
|
wget -NP . https://dokku.com/install/v0.36.2/bootstrap.sh
|
||||||
sudo DOKKU_TAG=v0.35.16 bash bootstrap.sh
|
sudo DOKKU_TAG=v0.36.2 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.
|
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.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ set -eo pipefail
|
|||||||
[[ $TRACE ]] && set -x
|
[[ $TRACE ]] && set -x
|
||||||
|
|
||||||
# A script to bootstrap dokku.
|
# A script to bootstrap dokku.
|
||||||
# It expects to be run on Ubuntu 20.04/22.04/24.04 via 'sudo`
|
# It expects to be run on Ubuntu 22.04/24.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)
|
# 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.
|
# It checks out the dokku source code from GitHub into ~/dokku and then runs 'make install' from dokku source.
|
||||||
|
|
||||||
@@ -12,7 +12,7 @@ set -eo pipefail
|
|||||||
# That's good because it prevents our output overlapping with wget'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 [11, 12], Ubuntu [20.04, 22.04, 24.04]"
|
SUPPORTED_VERSIONS="Debian [11, 12], Ubuntu [22.04, 24.04]"
|
||||||
|
|
||||||
log-fail() {
|
log-fail() {
|
||||||
declare desc="log fail formatter"
|
declare desc="log fail formatter"
|
||||||
@@ -160,7 +160,7 @@ install-dokku-from-deb-package() {
|
|||||||
local NO_INSTALL_RECOMMENDS=${DOKKU_NO_INSTALL_RECOMMENDS:=""}
|
local NO_INSTALL_RECOMMENDS=${DOKKU_NO_INSTALL_RECOMMENDS:=""}
|
||||||
local OS_ID
|
local OS_ID
|
||||||
|
|
||||||
if ! in-array "$DOKKU_DISTRO_VERSION" "20.04" "22.04" "24.04" "10" "11" "12"; then
|
if ! in-array "$DOKKU_DISTRO_VERSION" "22.04" "24.04" "10" "11" "12"; then
|
||||||
log-fail "Unsupported Linux distribution. Only the following versions are supported: $SUPPORTED_VERSIONS"
|
log-fail "Unsupported Linux distribution. Only the following versions are supported: $SUPPORTED_VERSIONS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -188,7 +188,7 @@ install-dokku-from-deb-package() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$DOKKU_DISTRO" == "ubuntu" ]]; then
|
if [[ "$DOKKU_DISTRO" == "ubuntu" ]]; then
|
||||||
OS_IDS=("focal" "jammy" "noble")
|
OS_IDS=("jammy" "noble")
|
||||||
if ! in-array "$OS_ID" "${OS_IDS[@]}"; then
|
if ! in-array "$OS_ID" "${OS_IDS[@]}"; then
|
||||||
OS_ID="noble"
|
OS_ID="noble"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
GO_ARGS ?=
|
GO_ARGS ?=
|
||||||
GO_PLUGIN_MAKE_TARGET ?= build
|
GO_PLUGIN_MAKE_TARGET ?= build
|
||||||
GO_REPO_ROOT := /go/src/github.com/dokku/dokku
|
GO_REPO_ROOT := /go/src/github.com/dokku/dokku
|
||||||
BUILD_IMAGE := golang:1.23.0
|
BUILD_IMAGE := golang:1.24.5
|
||||||
GO_BUILD_CACHE ?= /tmp/dokku-go-build-cache
|
GO_BUILD_CACHE ?= /tmp/dokku-go-build-cache
|
||||||
GO_MOD_CACHE ?= /tmp/dokku-go-mod-mod
|
GO_MOD_CACHE ?= /tmp/dokku-go-mod-mod
|
||||||
GO_ROOT_MOUNT ?= $$PWD/../..:$(GO_REPO_ROOT)
|
GO_ROOT_MOUNT ?= $$PWD/../..:$(GO_REPO_ROOT)
|
||||||
|
|||||||
@@ -2,94 +2,94 @@
|
|||||||
"dependencies": [
|
"dependencies": [
|
||||||
{
|
{
|
||||||
"name": "docker-container-healthchecker",
|
"name": "docker-container-healthchecker",
|
||||||
"version": "0.11.0",
|
"version": "0.14.0",
|
||||||
"urls": {
|
"urls": {
|
||||||
"amd64": "https://github.com/dokku/docker-container-healthchecker/releases/download/v0.11.0/docker-container-healthchecker-linux-amd64",
|
"amd64": "https://github.com/dokku/docker-container-healthchecker/releases/download/v0.14.0/docker-container-healthchecker-linux-amd64",
|
||||||
"arm64": "https://github.com/dokku/docker-container-healthchecker/releases/download/v0.11.0/docker-container-healthchecker-linux-arm64"
|
"arm64": "https://github.com/dokku/docker-container-healthchecker/releases/download/v0.14.0/docker-container-healthchecker-linux-arm64"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "docker-image-labeler",
|
"name": "docker-image-labeler",
|
||||||
"version": "0.8.0",
|
"version": "0.8.1",
|
||||||
"urls": {
|
"urls": {
|
||||||
"amd64": "https://github.com/dokku/docker-image-labeler/releases/download/v0.8.0/docker-image-labeler-linux-amd64",
|
"amd64": "https://github.com/dokku/docker-image-labeler/releases/download/v0.8.1/docker-image-labeler-linux-amd64",
|
||||||
"arm64": "https://github.com/dokku/docker-image-labeler/releases/download/v0.8.0/docker-image-labeler-linux-arm64"
|
"arm64": "https://github.com/dokku/docker-image-labeler/releases/download/v0.8.1/docker-image-labeler-linux-arm64"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "lambda-builder",
|
"name": "lambda-builder",
|
||||||
"version": "0.8.0",
|
"version": "0.9.1",
|
||||||
"urls": {
|
"urls": {
|
||||||
"amd64": "https://github.com/dokku/lambda-builder/releases/download/v0.8.0/lambda-builder-linux-amd64",
|
"amd64": "https://github.com/dokku/lambda-builder/releases/download/v0.9.1/lambda-builder-linux-amd64",
|
||||||
"arm64": "https://github.com/dokku/lambda-builder/releases/download/v0.8.0/lambda-builder-linux-arm64"
|
"arm64": "https://github.com/dokku/lambda-builder/releases/download/v0.9.1/lambda-builder-linux-arm64"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "netrc",
|
"name": "netrc",
|
||||||
"version": "0.10.0",
|
"version": "0.10.2",
|
||||||
"urls": {
|
"urls": {
|
||||||
"amd64": "https://github.com/dokku/netrc/releases/download/v0.10.0/netrc-linux-amd64",
|
"amd64": "https://github.com/dokku/netrc/releases/download/v0.10.2/netrc-linux-amd64",
|
||||||
"arm64": "https://github.com/dokku/netrc/releases/download/v0.10.0/netrc-linux-arm64"
|
"arm64": "https://github.com/dokku/netrc/releases/download/v0.10.2/netrc-linux-arm64"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "procfile-util",
|
"name": "procfile-util",
|
||||||
"version": "0.19.0",
|
"version": "0.20.3",
|
||||||
"urls": {
|
"urls": {
|
||||||
"amd64": "https://github.com/dokku/procfile-util/releases/download/v0.19.0/procfile-util-linux-amd64",
|
"amd64": "https://github.com/dokku/procfile-util/releases/download/v0.20.3/procfile-util-linux-amd64",
|
||||||
"arm64": "https://github.com/dokku/procfile-util/releases/download/v0.19.0/procfile-util-linux-arm64"
|
"arm64": "https://github.com/dokku/procfile-util/releases/download/v0.20.3/procfile-util-linux-arm64"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sshcommand",
|
"name": "sshcommand",
|
||||||
"version": "0.19.0",
|
"version": "0.20.0",
|
||||||
"urls": {
|
"urls": {
|
||||||
"amd64": "https://github.com/dokku/sshcommand/releases/download/v0.19.0/sshcommand",
|
"amd64": "https://github.com/dokku/sshcommand/releases/download/v0.20.0/sshcommand",
|
||||||
"arm64": "https://github.com/dokku/sshcommand/releases/download/v0.19.0/sshcommand"
|
"arm64": "https://github.com/dokku/sshcommand/releases/download/v0.20.0/sshcommand"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"predependencies": [
|
"predependencies": [
|
||||||
{
|
{
|
||||||
"name": "gliderlabs-sigil",
|
"name": "gliderlabs-sigil",
|
||||||
"version": "0.11.0",
|
"version": "0.11.4",
|
||||||
"urls": {
|
"urls": {
|
||||||
"amd64": "https://github.com/gliderlabs/sigil/releases/download/v0.11.0/sigil-linux-amd64",
|
"amd64": "https://github.com/gliderlabs/sigil/releases/download/v0.11.4/sigil-linux-amd64",
|
||||||
"arm64": "https://github.com/gliderlabs/sigil/releases/download/v0.11.0/sigil-linux-arm64"
|
"arm64": "https://github.com/gliderlabs/sigil/releases/download/v0.11.4/sigil-linux-arm64"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "plugn",
|
"name": "plugn",
|
||||||
"version": "0.15.3",
|
"version": "0.16.0",
|
||||||
"urls": {
|
"urls": {
|
||||||
"amd64": "https://github.com/dokku/plugn/releases/download/v0.15.3/plugn-linux-amd64",
|
"amd64": "https://github.com/dokku/plugn/releases/download/v0.16.0/plugn-linux-amd64",
|
||||||
"arm64": "https://github.com/dokku/plugn/releases/download/v0.15.3/plugn-linux-arm64"
|
"arm64": "https://github.com/dokku/plugn/releases/download/v0.16.0/plugn-linux-arm64"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"recommendations": [
|
"recommendations": [
|
||||||
{
|
{
|
||||||
"name": "dokku-event-listener",
|
"name": "dokku-event-listener",
|
||||||
"version": "0.17.0",
|
"version": "0.17.2",
|
||||||
"urls": {
|
"urls": {
|
||||||
"amd64": "https://github.com/dokku/dokku-event-listener/releases/download/v0.17.0/dokku-event-listener-linux-amd64",
|
"amd64": "https://github.com/dokku/dokku-event-listener/releases/download/v0.17.2/dokku-event-listener-linux-amd64",
|
||||||
"arm64": "https://github.com/dokku/dokku-event-listener/releases/download/v0.17.0/dokku-event-listener-linux-arm64"
|
"arm64": "https://github.com/dokku/dokku-event-listener/releases/download/v0.17.2/dokku-event-listener-linux-arm64"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "dokku-update",
|
"name": "dokku-update",
|
||||||
"version": "0.9.4",
|
"version": "0.9.6",
|
||||||
"urls": {
|
"urls": {
|
||||||
"amd64": "https://github.com/dokku/dokku-update/releases/download/v0.9.4/dokku-update",
|
"amd64": "https://github.com/dokku/dokku-update/releases/download/v0.9.6/dokku-update",
|
||||||
"arm64": "https://github.com/dokku/dokku-update/releases/download/v0.9.4/dokku-update"
|
"arm64": "https://github.com/dokku/dokku-update/releases/download/v0.9.6/dokku-update"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "herokuish",
|
"name": "herokuish",
|
||||||
"version": "0.10.2",
|
"version": "0.11.0",
|
||||||
"urls": {
|
"urls": {
|
||||||
"amd64": "https://github.com/gliderlabs/herokuish/releases/download/v0.10.2/herokuish_0.10.2_linux_x86_64.tgz",
|
"amd64": "https://github.com/gliderlabs/herokuish/releases/download/v0.11.0/herokuish_0.11.0_linux_x86_64.tgz",
|
||||||
"arm64": "https://github.com/gliderlabs/herokuish/releases/download/v0.10.2/herokuish_0.10.2_linux_x86_64.tgz"
|
"arm64": "https://github.com/gliderlabs/herokuish/releases/download/v0.11.0/herokuish_0.11.0_linux_x86_64.tgz"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -355,7 +355,7 @@ function checkFirewall {
|
|||||||
elif [[ $OS == "CentOS Linux" ]] || [[ $OS == "CentOS Stream" ]] || [[ $OS == "Rocky Linux" ]] || [[ $OS == "AlmaLinux" ]]; then
|
elif [[ $OS == "CentOS Linux" ]] || [[ $OS == "CentOS Stream" ]] || [[ $OS == "Rocky Linux" ]] || [[ $OS == "AlmaLinux" ]]; then
|
||||||
if [ -f /usr/lib/systemd/system/csf.service ]; then
|
if [ -f /usr/lib/systemd/system/csf.service ]; then
|
||||||
fw="csf"
|
fw="csf"
|
||||||
if [[ $(systemctl status $fw >/dev/null 2>&1) ]]; then
|
if systemctl status $fw >/dev/null 2>&1; then
|
||||||
|
|
||||||
FW_VER="\e[32m[PASS]\e[0m Firewall service (${fw}) is active\n"
|
FW_VER="\e[32m[PASS]\e[0m Firewall service (${fw}) is active\n"
|
||||||
((PASS++))
|
((PASS++))
|
||||||
|
|||||||
@@ -144,7 +144,7 @@ fn-publish-package() {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
elif [[ "$DIST" == "ubuntu" ]]; then
|
elif [[ "$DIST" == "ubuntu" ]]; then
|
||||||
OS_IDS=("focal" "jammy" "noble")
|
OS_IDS=("jammy" "noble")
|
||||||
for OS_ID in "${OS_IDS[@]}"; do
|
for OS_ID in "${OS_IDS[@]}"; do
|
||||||
log-info "(release-dokku) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}"
|
log-info "(release-dokku) pushing ${RELEASE_TYPE} to packagecloud.com/${REPOSITORY}/${DIST}"
|
||||||
package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME"
|
package_cloud push "${REPOSITORY}/${DIST}/${OS_ID}" "$PACKAGE_NAME"
|
||||||
@@ -183,9 +183,9 @@ fn-replace-version() {
|
|||||||
|
|
||||||
fn-repo-merged-requests() {
|
fn-repo-merged-requests() {
|
||||||
declare desc="Retrieves all pull request ids since a given release of dokku"
|
declare desc="Retrieves all pull request ids since a given release of dokku"
|
||||||
declare TAG="$1" IS_PATCH="$2"
|
declare CURRENT_VERSION="$1" NEXT_VERSION="$2" IS_PATCH="$3"
|
||||||
if [[ "$IS_PATCH" == "true" ]]; then
|
if [[ "$IS_PATCH" == "true" ]]; then
|
||||||
git log "v${TAG}..HEAD" --oneline | grep "Merge pull request" | cut -d' ' -f 5 | cut -d '#' -f2
|
git log "v${CURRENT_VERSION}..HEAD" --oneline | grep "Merge pull request" | cut -d' ' -f 5 | cut -d '#' -f2
|
||||||
else
|
else
|
||||||
curl -u "$RELEASE_GITHUB_USERNAME:$RELEASE_GITHUB_API_TOKEN" --fail -sS "https://api.github.com/search/issues?q=repo:dokku/dokku+milestone:v${NEXT_VERSION}+is:pr&per_page=100" | jq '.items[].number'
|
curl -u "$RELEASE_GITHUB_USERNAME:$RELEASE_GITHUB_API_TOKEN" --fail -sS "https://api.github.com/search/issues?q=repo:dokku/dokku+milestone:v${NEXT_VERSION}+is:pr&per_page=100" | jq '.items[].number'
|
||||||
fi
|
fi
|
||||||
@@ -256,7 +256,7 @@ fn-repo-update-history-and-commit() {
|
|||||||
|
|
||||||
mkdir -p /tmp/github-data
|
mkdir -p /tmp/github-data
|
||||||
|
|
||||||
for PULL_REQUEST_ID in $(fn-repo-merged-requests "$CURRENT_VERSION" "$IS_PATCH"); do
|
for PULL_REQUEST_ID in $(fn-repo-merged-requests "$CURRENT_VERSION" "$NEXT_VERSION" "$IS_PATCH"); do
|
||||||
ISSUE_FILE="/tmp/github-data/${PULL_REQUEST_ID}.json"
|
ISSUE_FILE="/tmp/github-data/${PULL_REQUEST_ID}.json"
|
||||||
if [[ ! -f "$ISSUE_FILE" ]]; then
|
if [[ ! -f "$ISSUE_FILE" ]]; then
|
||||||
while true; do
|
while true; do
|
||||||
|
|||||||
2
debian/control
vendored
2
debian/control
vendored
@@ -1,5 +1,5 @@
|
|||||||
Package: dokku
|
Package: dokku
|
||||||
Version: 0.35.16
|
Version: 0.36.2
|
||||||
Section: web
|
Section: web
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Architecture: amd64
|
Architecture: amd64
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
dokku ALL=NOPASSWD:SETENV:/usr/bin/docker,/usr/bin/docker-container-healthchecker,/usr/bin/docker-image-labeler,/usr/bin/pack
|
dokku ALL=NOPASSWD:SETENV:/usr/bin/docker,/usr/bin/docker-container-healthchecker,/usr/bin/docker-image-labeler,/usr/bin/lambda-builder,/usr/bin/nixpacks,/usr/bin/pack
|
||||||
|
|||||||
20
docker/usr/local/bin/lambda-builder
Normal file
20
docker/usr/local/bin/lambda-builder
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -eo pipefail
|
||||||
|
[[ $TRACE ]] && set -x
|
||||||
|
|
||||||
|
main() {
|
||||||
|
declare desc="re-runs lambda-builder commands as sudo"
|
||||||
|
local LAMBDA_BUILDER_BIN=""
|
||||||
|
if [[ -x "/usr/bin/lambda-builder" ]]; then
|
||||||
|
LAMBDA_BUILDER_BIN="/usr/bin/lambda-builder"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$LAMBDA_BUILDER_BIN" ]]; then
|
||||||
|
echo "! No lambda-builder binary found" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
sudo -E "$LAMBDA_BUILDER_BIN" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
20
docker/usr/local/bin/nixpacks
Normal file
20
docker/usr/local/bin/nixpacks
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -eo pipefail
|
||||||
|
[[ $TRACE ]] && set -x
|
||||||
|
|
||||||
|
main() {
|
||||||
|
declare desc="re-runs nixpacks commands as sudo"
|
||||||
|
local NIXPACKS_BIN=""
|
||||||
|
if [[ -x "/usr/bin/nixpacks" ]]; then
|
||||||
|
NIXPACKS_BIN="/usr/bin/nixpacks"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$NIXPACKS_BIN" ]]; then
|
||||||
|
echo "! No nixpacks binary found" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
sudo -E "$NIXPACKS_BIN" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
2
docs/_build/Dockerfile
vendored
2
docs/_build/Dockerfile
vendored
@@ -1,4 +1,4 @@
|
|||||||
FROM python:3.13.2-alpine
|
FROM python:3.13.7-alpine
|
||||||
|
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
|
|
||||||
|
|||||||
24
docs/_build/requirements.txt
vendored
24
docs/_build/requirements.txt
vendored
@@ -1,23 +1,23 @@
|
|||||||
beautifulsoup4==4.13.3
|
beautifulsoup4==4.13.4
|
||||||
click==8.1.8
|
click==8.1.8
|
||||||
ghp-import==2.1.0
|
ghp-import==2.1.0
|
||||||
importlib-metadata==8.6.1
|
importlib-metadata==8.7.0
|
||||||
Jinja2==3.1.5
|
Jinja2==3.1.6
|
||||||
Markdown>=3.2.1,<3.8
|
Markdown>=3.2.1,<3.9
|
||||||
MarkupSafe==3.0.2
|
MarkupSafe==3.0.2
|
||||||
mergedeep==1.3.4
|
mergedeep==1.3.4
|
||||||
mkdocs==1.6.1
|
mkdocs==1.6.1
|
||||||
mkdocs-exclude==1.0.2
|
mkdocs-exclude==1.0.2
|
||||||
mkdocs-material==9.6.7
|
mkdocs-material==9.6.17
|
||||||
mkdocs-material-extensions==1.3.1
|
mkdocs-material-extensions==1.3.1
|
||||||
packaging==24.2
|
packaging==25.0
|
||||||
Pygments==2.19.1
|
Pygments==2.19.2
|
||||||
pymdown-extensions==10.14.3
|
pymdown-extensions==10.16.1
|
||||||
pyparsing==3.2.1
|
pyparsing==3.2.3
|
||||||
python-dateutil==2.9.0.post0
|
python-dateutil==2.9.0.post0
|
||||||
PyYAML==6.0.2
|
PyYAML==6.0.2
|
||||||
pyyaml_env_tag==0.1
|
pyyaml_env_tag==1.1
|
||||||
six==1.17.0
|
six==1.17.0
|
||||||
soupsieve==2.6
|
soupsieve==2.7
|
||||||
watchdog==6.0.0
|
watchdog==6.0.0
|
||||||
zipp==3.21.0
|
zipp==3.23.0
|
||||||
|
|||||||
@@ -74,8 +74,8 @@ By default, permissions are set for usage with Herokuish buildpacks. These permi
|
|||||||
- This is used for apps deployed with Buildpacks via Herokuish.
|
- This is used for apps deployed with Buildpacks via Herokuish.
|
||||||
- `--chown heroku`: Use `1000:1000` as the folder permissions.
|
- `--chown heroku`: Use `1000:1000` as the folder permissions.
|
||||||
- This is used for apps deployed with Cloud Native Buildpacks using the `heroku/builder` builder.
|
- This is used for apps deployed with Cloud Native Buildpacks using the `heroku/builder` builder.
|
||||||
- `--chown packeto`: Use `2000:2000` as the folder permissions.
|
- `--chown paketo`: Use `2000:2000` as the folder permissions.
|
||||||
- This is used for apps deployed with Cloud Native Buildpacks using the `cloudfoundry/cnb` or `packeto` builders.
|
- This is used for apps deployed with Cloud Native Buildpacks using the `cloudfoundry/cnb` or `paketo` builders.
|
||||||
- `--chown root`: Use `0:0` as the folder permissions.
|
- `--chown root`: Use `0:0` as the folder permissions.
|
||||||
- This is used for containers that run their processes as root, as is typical for most Dockerfile or Docker image deploys.
|
- This is used for containers that run their processes as root, as is typical for most Dockerfile or Docker image deploys.
|
||||||
- `--chown false`: Skips the `chown` call.
|
- `--chown false`: Skips the `chown` call.
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
```
|
```
|
||||||
plugin:disable <name> # Disable an installed plugin (third-party only)
|
plugin:disable <name> # Disable an installed plugin (third-party only)
|
||||||
plugin:enable <name> # Enable a previously disabled plugin
|
plugin:enable <name> # Enable a previously disabled plugin
|
||||||
plugin:install [--core|--git-url] [--committish branch|commit|tag] [--name custom-plugin-name] # Optionally download git-url (and pin to the specified branch/commit/tag) & run install trigger for active plugins (or only core ones)
|
plugin:install [--core|git-url] [--committish branch|commit|tag] [--name custom-plugin-name] # Optionally download git-url (and pin to the specified branch/commit/tag) & run install trigger for active plugins (or only core ones)
|
||||||
plugin:installed <name> # Checks if a plugin is installed
|
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:install-dependencies [--core] # Run install-dependencies trigger for active plugins (or only core ones)
|
||||||
plugin:list # Print active plugins
|
plugin:list # Print active plugins
|
||||||
@@ -36,35 +36,35 @@ dokku plugin:list
|
|||||||
|
|
||||||
```
|
```
|
||||||
plugn: dev
|
plugn: dev
|
||||||
00_dokku-standard 0.35.16 enabled dokku core standard plugin
|
00_dokku-standard 0.36.2 enabled dokku core standard plugin
|
||||||
20_events 0.35.16 enabled dokku core events logging plugin
|
20_events 0.36.2 enabled dokku core events logging plugin
|
||||||
app-json 0.35.16 enabled dokku core app-json plugin
|
app-json 0.36.2 enabled dokku core app-json plugin
|
||||||
apps 0.35.16 enabled dokku core apps plugin
|
apps 0.36.2 enabled dokku core apps plugin
|
||||||
build-env 0.35.16 enabled dokku core build-env plugin
|
build-env 0.36.2 enabled dokku core build-env plugin
|
||||||
buildpacks 0.35.16 enabled dokku core buildpacks plugin
|
buildpacks 0.36.2 enabled dokku core buildpacks plugin
|
||||||
certs 0.35.16 enabled dokku core certificate management plugin
|
certs 0.36.2 enabled dokku core certificate management plugin
|
||||||
checks 0.35.16 enabled dokku core checks plugin
|
checks 0.36.2 enabled dokku core checks plugin
|
||||||
common 0.35.16 enabled dokku core common plugin
|
common 0.36.2 enabled dokku core common plugin
|
||||||
config 0.35.16 enabled dokku core config plugin
|
config 0.36.2 enabled dokku core config plugin
|
||||||
docker-options 0.35.16 enabled dokku core docker-options plugin
|
docker-options 0.36.2 enabled dokku core docker-options plugin
|
||||||
domains 0.35.16 enabled dokku core domains plugin
|
domains 0.36.2 enabled dokku core domains plugin
|
||||||
enter 0.35.16 enabled dokku core enter plugin
|
enter 0.36.2 enabled dokku core enter plugin
|
||||||
git 0.35.16 enabled dokku core git plugin
|
git 0.36.2 enabled dokku core git plugin
|
||||||
logs 0.35.16 enabled dokku core logs plugin
|
logs 0.36.2 enabled dokku core logs plugin
|
||||||
network 0.35.16 enabled dokku core network plugin
|
network 0.36.2 enabled dokku core network plugin
|
||||||
nginx-vhosts 0.35.16 enabled dokku core nginx-vhosts plugin
|
nginx-vhosts 0.36.2 enabled dokku core nginx-vhosts plugin
|
||||||
plugin 0.35.16 enabled dokku core plugin plugin
|
plugin 0.36.2 enabled dokku core plugin plugin
|
||||||
proxy 0.35.16 enabled dokku core proxy plugin
|
proxy 0.36.2 enabled dokku core proxy plugin
|
||||||
ps 0.35.16 enabled dokku core ps plugin
|
ps 0.36.2 enabled dokku core ps plugin
|
||||||
repo 0.35.16 enabled dokku core repo plugin
|
repo 0.36.2 enabled dokku core repo plugin
|
||||||
resource 0.35.16 enabled dokku core resource plugin
|
resource 0.36.2 enabled dokku core resource plugin
|
||||||
scheduler-docker-local 0.35.16 enabled dokku core scheduler-docker-local plugin
|
scheduler-docker-local 0.36.2 enabled dokku core scheduler-docker-local plugin
|
||||||
shell 0.35.16 enabled dokku core shell plugin
|
shell 0.36.2 enabled dokku core shell plugin
|
||||||
ssh-keys 0.35.16 enabled dokku core ssh-keys plugin
|
ssh-keys 0.36.2 enabled dokku core ssh-keys plugin
|
||||||
storage 0.35.16 enabled dokku core storage plugin
|
storage 0.36.2 enabled dokku core storage plugin
|
||||||
tags 0.35.16 enabled dokku core tags plugin
|
tags 0.36.2 enabled dokku core tags plugin
|
||||||
tar 0.35.16 enabled dokku core tar plugin
|
tar 0.36.2 enabled dokku core tar plugin
|
||||||
trace 0.35.16 enabled dokku core trace plugin
|
trace 0.36.2 enabled dokku core trace plugin
|
||||||
```
|
```
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
|
|||||||
12
docs/appendices/0.36.0-migration-guide.md
Normal file
12
docs/appendices/0.36.0-migration-guide.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# 0.36.0 Migration Guide
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
- Process stop timeouts are now configured via the `ps` property `stop-timeout-seconds`. Existing `DOKKU_DOCKER_STOP_TIMEOUT` environment variables will be automatically migrated to the new value.
|
||||||
|
- Processes now default to a `30` second stop timeout.
|
||||||
|
- The `domains:clear` command no longer runs domain setup after clearing the domains. Use `domains:reset` or run `domains:setup` manually to have the same effect.
|
||||||
|
- The deprecated `DOKKU_DISABLE_ANSI_PREFIX_REMOVAL` setting has been removed. Dokku deploys no longer use shell escape codes to modify output, and thus deploy output may now contain `remote:` as a prefix in each lines output.
|
||||||
|
|
||||||
|
## Deprecations
|
||||||
|
|
||||||
|
Ubuntu 20.04 is now a deprecated installation target. The operating system will be considered EOL by Canonical in April 2025. Users are encouraged to upgrade to Ubuntu 24.04 or consider switching their instllation method to the [Docker-based installation method](/docs/getting-started/install/docker.md) to avoid any disruption in usage.
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"crons": [
|
"cron": [
|
||||||
{
|
{
|
||||||
"command": "echo 'hello'",
|
"command": "echo 'hello'",
|
||||||
"schedule": "0 1 * * *"
|
"schedule": "0 1 * * *"
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
<browserconfig>
|
<browserconfig>
|
||||||
<msapplication>
|
<msapplication>
|
||||||
<tile>
|
<tile>
|
||||||
<square70x70logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/mstile-70x70.png"/>
|
<square70x70logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/mstile-70x70.png"/>
|
||||||
<square150x150logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/mstile-150x150.png"/>
|
<square150x150logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/mstile-150x150.png"/>
|
||||||
<square310x310logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/mstile-310x310.png"/>
|
<square310x310logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/mstile-310x310.png"/>
|
||||||
<wide310x150logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/mstile-310x150.png"/>
|
<wide310x150logo src="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/mstile-310x150.png"/>
|
||||||
<TileColor>#da532c</TileColor>
|
<TileColor>#da532c</TileColor>
|
||||||
</tile>
|
</tile>
|
||||||
</msapplication>
|
</msapplication>
|
||||||
|
|||||||
@@ -2,37 +2,37 @@
|
|||||||
"name": "Dokku",
|
"name": "Dokku",
|
||||||
"icons": [
|
"icons": [
|
||||||
{
|
{
|
||||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.35.16\/docs\/assets\/favicons\/android-chrome-36x36.png",
|
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.36.2\/docs\/assets\/favicons\/android-chrome-36x36.png",
|
||||||
"sizes": "36x36",
|
"sizes": "36x36",
|
||||||
"type": "image\/png",
|
"type": "image\/png",
|
||||||
"density": "0.75"
|
"density": "0.75"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.35.16\/docs\/assets\/favicons\/android-chrome-48x48.png",
|
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.36.2\/docs\/assets\/favicons\/android-chrome-48x48.png",
|
||||||
"sizes": "48x48",
|
"sizes": "48x48",
|
||||||
"type": "image\/png",
|
"type": "image\/png",
|
||||||
"density": "1.0"
|
"density": "1.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.35.16\/docs\/assets\/favicons\/android-chrome-72x72.png",
|
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.36.2\/docs\/assets\/favicons\/android-chrome-72x72.png",
|
||||||
"sizes": "72x72",
|
"sizes": "72x72",
|
||||||
"type": "image\/png",
|
"type": "image\/png",
|
||||||
"density": "1.5"
|
"density": "1.5"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.35.16\/docs\/assets\/favicons\/android-chrome-96x96.png",
|
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.36.2\/docs\/assets\/favicons\/android-chrome-96x96.png",
|
||||||
"sizes": "96x96",
|
"sizes": "96x96",
|
||||||
"type": "image\/png",
|
"type": "image\/png",
|
||||||
"density": "2.0"
|
"density": "2.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.35.16\/docs\/assets\/favicons\/android-chrome-144x144.png",
|
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.36.2\/docs\/assets\/favicons\/android-chrome-144x144.png",
|
||||||
"sizes": "144x144",
|
"sizes": "144x144",
|
||||||
"type": "image\/png",
|
"type": "image\/png",
|
||||||
"density": "3.0"
|
"density": "3.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.35.16\/docs\/assets\/favicons\/android-chrome-192x192.png",
|
"src": "https:\/\/cdn.jsdelivr.net\/dokku\/dokku@v0.36.2\/docs\/assets\/favicons\/android-chrome-192x192.png",
|
||||||
"sizes": "192x192",
|
"sizes": "192x192",
|
||||||
"type": "image\/png",
|
"type": "image\/png",
|
||||||
"density": "4.0"
|
"density": "4.0"
|
||||||
|
|||||||
@@ -32,6 +32,7 @@
|
|||||||
"0.32.4",
|
"0.32.4",
|
||||||
"0.33.9",
|
"0.33.9",
|
||||||
"0.34.9",
|
"0.34.9",
|
||||||
"0.35.16"
|
"0.35.20",
|
||||||
|
"0.36.2"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,26 +28,6 @@ gem install dokku-cli
|
|||||||
|
|
||||||
See [documentation here](https://github.com/SebastianSzturo/dokku-cli) for more information.
|
See [documentation here](https://github.com/SebastianSzturo/dokku-cli) for more information.
|
||||||
|
|
||||||
## (ruby) DokkuClient
|
|
||||||
|
|
||||||
DokkuClient is another rubygem that acts as a client for your Dokku installation with built-in support for certain external plugins. You can install it via the following shell command (assuming you have ruby and rubygems installed):
|
|
||||||
|
|
||||||
```shell
|
|
||||||
gem install dokku_client
|
|
||||||
```
|
|
||||||
|
|
||||||
See [documentation here](https://github.com/netguru/dokku_client) for more information.
|
|
||||||
|
|
||||||
## (ruby) Dokkufy
|
|
||||||
|
|
||||||
Dokkufy is a rubygem that handles automation of certain tasks, such as Dokku setup, plugin installation, etc. You can install it via the following shell command (assuming you have ruby and rubygems installed):
|
|
||||||
|
|
||||||
```shell
|
|
||||||
gem install dokkufy
|
|
||||||
```
|
|
||||||
|
|
||||||
See [documentation here](https://github.com/cbetta/dokkufy) for more information.
|
|
||||||
|
|
||||||
## (ruby) Dockland
|
## (ruby) Dockland
|
||||||
|
|
||||||
Dockland is a rubygem that acts as a client for your Dokku installation. You can install it via the following shell command (assuming you have ruby and rubygems installed):
|
Dockland is a rubygem that acts as a client for your Dokku installation. You can install it via the following shell command (assuming you have ruby and rubygems installed):
|
||||||
|
|||||||
@@ -123,7 +123,6 @@ The following plugins are available and provided by Dokku maintainers. Please f
|
|||||||
| [Host post-build command hook](https://github.com/baikunz/dokku-post-deploy-script) | [baikunz][] | 0.4.0+ |
|
| [Host post-build command hook](https://github.com/baikunz/dokku-post-deploy-script) | [baikunz][] | 0.4.0+ |
|
||||||
| [Host pre-build command hook](https://github.com/fteychene/dokku-build-hook) | [fteychene][] | 0.4.0+ |
|
| [Host pre-build command hook](https://github.com/fteychene/dokku-build-hook) | [fteychene][] | 0.4.0+ |
|
||||||
| [Hostname](https://github.com/michaelshobbs/dokku-hostname) | [michaelshobbs][] | 0.4.0+ |
|
| [Hostname](https://github.com/michaelshobbs/dokku-hostname) | [michaelshobbs][] | 0.4.0+ |
|
||||||
| [Hostname](https://github.com/michaelshobbs/dokku-hostname) | [michaelshobbs][] | 0.4.0+ |
|
|
||||||
| [HTTP Auth Secure Apps](https://github.com/matto1990/dokku-secure-apps) | [matto1990][] | 0.4.0+ |
|
| [HTTP Auth Secure Apps](https://github.com/matto1990/dokku-secure-apps) | [matto1990][] | 0.4.0+ |
|
||||||
| [Image Size Limit](https://github.com/Tashows/dokku-image-size-limit) | [Tashows][] | |
|
| [Image Size Limit](https://github.com/Tashows/dokku-image-size-limit) | [Tashows][] | |
|
||||||
| [Litestream](https://github.com/AxelTheGerman/dokku-litestream)<sup>4</sup> | [AxelTheGerman][] | 0.27.0+ |
|
| [Litestream](https://github.com/AxelTheGerman/dokku-litestream)<sup>4</sup> | [AxelTheGerman][] | 0.27.0+ |
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ domains:enable <app> # Enable VHOST support
|
|||||||
domains:remove <app> <domain> [<domain> ...] # Remove domains from app
|
domains:remove <app> <domain> [<domain> ...] # Remove domains from app
|
||||||
domains:remove-global <domain> [<domain> ...] # Remove global domain names
|
domains:remove-global <domain> [<domain> ...] # Remove global domain names
|
||||||
domains:report [<app>|--global] [<flag>] # Displays a domains report for one or more apps
|
domains:report [<app>|--global] [<flag>] # Displays a domains report for one or more apps
|
||||||
|
domains:reset <app> # Reset app domains to global-configured domains
|
||||||
domains:set <app> <domain> [<domain> ...] # Set domains for app
|
domains:set <app> <domain> [<domain> ...] # Set domains for app
|
||||||
domains:set-global <domain> [<domain> ...] # Set global domain names
|
domains:set-global <domain> [<domain> ...] # Set global domain names
|
||||||
```
|
```
|
||||||
@@ -33,7 +34,7 @@ If an FQDN such as `dokku.org` is used as the application name, the global virtu
|
|||||||
|
|
||||||
You can optionally override this in a plugin by implementing the `nginx-hostname` plugin trigger. If the `nginx-hostname` plugin has no output, the normal hostname algorithm will be executed. See the [plugin trigger documentation](/docs/development/plugin-triggers.md#nginx-hostname) for more information.
|
You can optionally override this in a plugin by implementing the `nginx-hostname` plugin trigger. If the `nginx-hostname` plugin has no output, the normal hostname algorithm will be executed. See the [plugin trigger documentation](/docs/development/plugin-triggers.md#nginx-hostname) for more information.
|
||||||
|
|
||||||
## Disabling VHOSTS
|
## Enabling and disabling VHOSTS
|
||||||
|
|
||||||
If desired, it is possible to disable vhosts with the domains plugin.
|
If desired, it is possible to disable vhosts with the domains plugin.
|
||||||
|
|
||||||
@@ -41,8 +42,21 @@ If desired, it is possible to disable vhosts with the domains plugin.
|
|||||||
dokku domains:disable node-js-app
|
dokku domains:disable node-js-app
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Vhosts can also be disabled for all apps:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku domains:disable --all
|
||||||
|
```
|
||||||
|
|
||||||
On subsequent deploys, the nginx virtualhost will be discarded. This is useful when deploying internal-facing services that should not be publicly routeable. As of 0.4.0, nginx will still be configured to proxy your app on some random high port. This allows internal services to maintain the same port between deployments. You may change this port by setting `DOKKU_PROXY_PORT` and/or `DOKKU_PROXY_SSL_PORT` (for services configured to use SSL.)
|
On subsequent deploys, the nginx virtualhost will be discarded. This is useful when deploying internal-facing services that should not be publicly routeable. As of 0.4.0, nginx will still be configured to proxy your app on some random high port. This allows internal services to maintain the same port between deployments. You may change this port by setting `DOKKU_PROXY_PORT` and/or `DOKKU_PROXY_SSL_PORT` (for services configured to use SSL.)
|
||||||
|
|
||||||
|
To re-enable, run the `domains:enable` subcommand:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku domains:enable node-js-app
|
||||||
|
dokku domains:enable --all
|
||||||
|
```
|
||||||
|
|
||||||
The domains plugin allows you to specify custom domains for applications. This plugin is aware of any ssl certificates that are imported via `certs:add`. Be aware that disabling domains (with `domains:disable`) will override any custom domains.
|
The domains plugin allows you to specify custom domains for applications. This plugin is aware of any ssl certificates that are imported via `certs:add`. Be aware that disabling domains (with `domains:disable`) will override any custom domains.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
@@ -62,6 +76,9 @@ dokku domains:remove node-js-app dokku.me
|
|||||||
|
|
||||||
# set all custom domains for app
|
# set all custom domains for app
|
||||||
dokku domains:set node-js-app dokku.me dokku.org
|
dokku domains:set node-js-app dokku.me dokku.org
|
||||||
|
|
||||||
|
# delete all app domains and configure available global domains on it
|
||||||
|
dokku domains:reset node-js-app
|
||||||
```
|
```
|
||||||
|
|
||||||
## Displaying domains reports for an app
|
## Displaying domains reports for an app
|
||||||
|
|||||||
@@ -101,7 +101,6 @@ The following config variables have special meanings and can be set in a variety
|
|||||||
| `DOKKU_APP_PROXY_TYPE` | `nginx` | `dokku proxy:set` | |
|
| `DOKKU_APP_PROXY_TYPE` | `nginx` | `dokku proxy:set` | |
|
||||||
| `DOKKU_APP_RESTORE` | `1` | `dokku config:set` <br /> `dokku ps:stop` | |
|
| `DOKKU_APP_RESTORE` | `1` | `dokku config:set` <br /> `dokku ps:stop` | |
|
||||||
| `DOKKU_APP_SHELL` | `/bin/bash` | `dokku config:set` | Allows users to change the default shell used by Dokku for `dokku enter` and execution of deployment tasks. |
|
| `DOKKU_APP_SHELL` | `/bin/bash` | `dokku config:set` | Allows users to change the default shell used by Dokku for `dokku enter` and execution of deployment tasks. |
|
||||||
| `DOKKU_APP_TYPE` | `herokuish` | Auto-detected by using buildpacks or dockerfile | |
|
|
||||||
| `DOKKU_CHECKS_DISABLED` | none | `dokku checks:disable` | |
|
| `DOKKU_CHECKS_DISABLED` | none | `dokku checks:disable` | |
|
||||||
| `DOKKU_CHECKS_ENABLED` | none | `dokku checks:enable` | |
|
| `DOKKU_CHECKS_ENABLED` | none | `dokku checks:enable` | |
|
||||||
| `DOKKU_CHECKS_SKIPPED` | none | `dokku checks:skip` | |
|
| `DOKKU_CHECKS_SKIPPED` | none | `dokku checks:skip` | |
|
||||||
@@ -110,9 +109,7 @@ The following config variables have special meanings and can be set in a variety
|
|||||||
| `DOKKU_CHECKS_ATTEMPTS` | `5` | `dokku config:set` | Number of retries for to run for a specific check before marking it as a failure
|
| `DOKKU_CHECKS_ATTEMPTS` | `5` | `dokku config:set` | Number of retries for to run for a specific check before marking it as a failure
|
||||||
| `DOKKU_DEFAULT_CHECKS_WAIT` | `10` | `dokku config:set` | If no user-defined checks are specified - or if the process being checked is not a `web` process - this is the period of time Dokku will wait before checking that a container is still running. |
|
| `DOKKU_DEFAULT_CHECKS_WAIT` | `10` | `dokku config:set` | If no user-defined checks are specified - or if the process being checked is not a `web` process - this is the period of time Dokku will wait before checking that a container is still running. |
|
||||||
| `DOKKU_DISABLE_PROXY` | none | `dokku proxy:disable` <br /> `dokku proxy:enable` | Disables the proxy in front of your application, resulting in publicly routing the docker container. |
|
| `DOKKU_DISABLE_PROXY` | none | `dokku proxy:disable` <br /> `dokku proxy:enable` | Disables the proxy in front of your application, resulting in publicly routing the docker container. |
|
||||||
| `DOKKU_DISABLE_ANSI_PREFIX_REMOVAL` | none | `dokku config:set` <br /> `/etc/environment` <br /> `~dokku/.dokkurc` <br /> `~dokku/.dokkurc/*` | Disables removal of the ANSI prefix during deploys. Can be used in cases where the client deployer does not understand ansi escape codes. |
|
|
||||||
| `DOKKU_DISABLE_APP_AUTOCREATION` | none | `dokku config:set` | Disables automatic creation of a non-existent app on deploy. |
|
| `DOKKU_DISABLE_APP_AUTOCREATION` | none | `dokku config:set` | Disables automatic creation of a non-existent app on deploy. |
|
||||||
| `DOKKU_DOCKER_STOP_TIMEOUT` | `10` | `dokku config:set` | Configurable grace period given to the `docker stop` command. If a container has not stopped by this time, a `kill -9` signal or equivalent is sent in order to force-terminate the container. Both the `ps:stop` and `apps:destroy` commands _also_ respect this value. If not specified, the docker defaults for the [docker stop command](https://docs.docker.com/engine/reference/commandline/stop/) will be used.|
|
|
||||||
| `DOKKU_DOCKERFILE_CACHE_BUILD` | none | `dokku config:set` | |
|
| `DOKKU_DOCKERFILE_CACHE_BUILD` | none | `dokku config:set` | |
|
||||||
| `DOKKU_DOCKERFILE_START_CMD` | none | `dokku config:set` | |
|
| `DOKKU_DOCKERFILE_START_CMD` | none | `dokku config:set` | |
|
||||||
| `DOKKU_PARALLEL_ARGUMENTS`. | none | `dokku config:set` | Allows passing custom arguments to parallel for `ps:*all` commands |
|
| `DOKKU_PARALLEL_ARGUMENTS`. | none | `dokku config:set` | Allows passing custom arguments to parallel for `ps:*all` commands |
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ Assuming a Docker image can be run as a CI task with environment variables injec
|
|||||||
- [gitlab-ci](https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/)
|
- [gitlab-ci](https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/)
|
||||||
- [semaphoreci](https://semaphoreci.com/)
|
- [semaphoreci](https://semaphoreci.com/)
|
||||||
- [travisci](https://travis-ci.com/)
|
- [travisci](https://travis-ci.com/)
|
||||||
|
- [woodpecker ci](https://woodpecker-ci.org/)
|
||||||
|
|
||||||
## Simple Usage
|
## Simple Usage
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Cloning repo
|
- name: Cloning repo
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
|||||||
29
docs/deployment/continuous-integration/woodpecker-ci.md
Normal file
29
docs/deployment/continuous-integration/woodpecker-ci.md
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# Woodpecker CI
|
||||||
|
|
||||||
|
[Woodpecker CI](https://woodpecker-ci.org/docs/intro) can be used to automatically deploy a Dokku application via the official [dokku/ci-docker-image](https://github.com/dokku/ci-docker-image). The simplest example is as follows:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
when:
|
||||||
|
- event: push
|
||||||
|
branch: main
|
||||||
|
|
||||||
|
clone:
|
||||||
|
git:
|
||||||
|
image: woodpeckerci/plugin-git
|
||||||
|
settings:
|
||||||
|
partial: false
|
||||||
|
depth: 0
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: deploy
|
||||||
|
image: dokku/ci-docker-image
|
||||||
|
environment:
|
||||||
|
GIT_REMOTE_URL: ssh://dokku@dokku.me:22/appname
|
||||||
|
SSH_PRIVATE_KEY:
|
||||||
|
from_secret: DOKKU_ME_SSH_DEPLOY_KEY
|
||||||
|
commands:
|
||||||
|
- dokku-deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
- The standard `clone` stage is replaced with one that performs a complete clone of the repository (the default is a shallow clone, which dokku would reject).
|
||||||
|
- A `GIT_REMOTE_URL` and a `SSH_PRIVATE_KEY` (with help of the `from_secret` directive) suffice to carry out a deployment.
|
||||||
@@ -134,110 +134,43 @@ When attaching an worker or server node, the K3s plugin will look at the IP asso
|
|||||||
dokku scheduler-k3s:set --global network-interface eth1
|
dokku scheduler-k3s:set --global network-interface eth1
|
||||||
```
|
```
|
||||||
|
|
||||||
### Changing deploy timeouts
|
### Changing deployment settings
|
||||||
|
|
||||||
By default, app deploys will timeout after 300s. To customize this value, set the `deploy-timeout` property via `scheduler-k3s:set`:
|
The k3s plugin provides a number of settings that can be used to managed deployments on a per-app basis. The following table outlines ones not covered elsewhere:
|
||||||
|
|
||||||
|
| Name | Description | Global Default |
|
||||||
|
|-----------------------|---------------------------------------------------|--------------------|
|
||||||
|
| `deploy-timeout` | Controls when app deploys will timeout in seconds | `300s` |
|
||||||
|
| `kustomize-root-path` | Controls the folder context from the deployed repository used for Kustomize | `config/kustomize` |
|
||||||
|
| `image-pull-secrets` | Name of a kubernetes secret used to auth against a registry | Contents of `~/.docker/config.json` from Dokku server |
|
||||||
|
| `namespace` | Controls the namespace used for resource creation | `default` |
|
||||||
|
| `rollback-on-failure` | Whether to rollback failed deploys | `false` |
|
||||||
|
| `shm-size` | Default shared memory size for pods | Kubernetes default |
|
||||||
|
|
||||||
|
All settings can be set via the `scheduler-k3s:set` command. Using `deploy-timeout` as an example:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku scheduler-k3s:set node-js-app deploy-timeout 60s
|
dokku scheduler-k3s:set node-js-app deploy-timeout 60s
|
||||||
```
|
```
|
||||||
|
|
||||||
The default value may be set by passing an empty value for the option:
|
The default value may be set by passing an empty value for the option in question:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku scheduler-k3s:set node-js-app deploy-timeout
|
dokku scheduler-k3s:set node-js-app deploy-timeout
|
||||||
```
|
```
|
||||||
|
|
||||||
The `deploy-timeout` property can also be set globally. The global default is `300s`.
|
Properties can also be set globally. If not set for an app, the global value will apply.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku scheduler-k3s:set --global deploy-timeout 60s
|
dokku scheduler-k3s:set --global deploy-timeout 60s
|
||||||
```
|
```
|
||||||
|
|
||||||
The default value may be set by passing an empty value for the option.
|
The global default value may be set by passing an empty value for the option.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku scheduler-k3s:set --global deploy-timeout
|
dokku scheduler-k3s:set --global deploy-timeout
|
||||||
```
|
```
|
||||||
|
|
||||||
### Customizing the namespace
|
|
||||||
|
|
||||||
By default, app deploys will run against the `default` Kubernetes namespace. To customize this value, set the `namespace` property via `scheduler-k3s:set`:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku scheduler-k3s:set node-js-app namespace lollipop
|
|
||||||
```
|
|
||||||
|
|
||||||
The default value may be set by passing an empty value for the option:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku scheduler-k3s:set node-js-app namespace
|
|
||||||
```
|
|
||||||
|
|
||||||
The `namespace` property can also be set globally. The global default is `default`.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku scheduler-k3s:set --global namespace 60s
|
|
||||||
```
|
|
||||||
|
|
||||||
The default value may be set by passing an empty value for the option.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku scheduler-k3s:set --global namespace
|
|
||||||
```
|
|
||||||
|
|
||||||
### Enabling rollback on failure
|
|
||||||
|
|
||||||
By default, app deploys do not rollback on failure. To enable this functionality, set the `rollback-on-failure` property via `scheduler-k3s:set`:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku scheduler-k3s:set node-js-app rollback-on-failure true
|
|
||||||
```
|
|
||||||
|
|
||||||
The default value may be set by passing an empty value for the option:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku scheduler-k3s:set node-js-app rollback-on-failure
|
|
||||||
```
|
|
||||||
|
|
||||||
The `rollback-on-failure` property can also be set globally. The global default is `false`.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku scheduler-k3s:set --global rollback-on-failure false
|
|
||||||
```
|
|
||||||
|
|
||||||
The default value may be set by passing an empty value for the option.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku scheduler-k3s:set --global rollback-on-failure
|
|
||||||
```
|
|
||||||
|
|
||||||
### Using image pull secrets
|
|
||||||
|
|
||||||
When authenticating against a registry via `registry:login`, the scheduler-k3s plugin will authenticate all servers in the cluster against the registry specified. If desired, an image pull secret can be used instead. To customize this value, set the `image-pull-secrets` property via `scheduler-k3s:set`:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku scheduler-k3s:set node-js-app image-pull-secrets lollipop
|
|
||||||
```
|
|
||||||
|
|
||||||
The default value may be set by passing an empty value for the option:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku scheduler-k3s:set node-js-app image-pull-secrets
|
|
||||||
```
|
|
||||||
|
|
||||||
The `image-pull-secrets` property can also be set globally. The global default is empty string, and k3s will use Dokku's locally configured `~/.docker/config.json` for any private registry pulls.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku scheduler-k3s:set --global image-pull-secrets 60s
|
|
||||||
```
|
|
||||||
|
|
||||||
The default value may be set by passing an empty value for the option.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
dokku scheduler-k3s:set --global image-pull-secrets
|
|
||||||
```
|
|
||||||
|
|
||||||
### SSL Certificates
|
### SSL Certificates
|
||||||
|
|
||||||
#### Enabling letsencrypt integration
|
#### Enabling letsencrypt integration
|
||||||
@@ -433,7 +366,6 @@ dokku scheduler-k3s:ensure-charts
|
|||||||
|
|
||||||
Once the chart is configured, an `http` trigger can be specified like so:
|
Once the chart is configured, an `http` trigger can be specified like so:
|
||||||
|
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"formation": {
|
"formation": {
|
||||||
@@ -529,6 +461,30 @@ dokku scheduler-k3s:autoscaling-auth:report node-js-app --include-metadata
|
|||||||
Datadog datadogSite: us5.datadoghq.com
|
Datadog datadogSite: us5.datadoghq.com
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Integrating Kustomize
|
||||||
|
|
||||||
|
Dokku supports integration with [Kustomize](https://kustomize.io/) to further customize the generated helm charts for app deployments. For example, a `config/kustomize/kustomization.yaml` file with the following contents will override the scale for each process deployed to `3`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
resources:
|
||||||
|
- rendered.yaml
|
||||||
|
patches:
|
||||||
|
- patch: |-
|
||||||
|
- op: replace
|
||||||
|
path: /spec/replicas
|
||||||
|
value: 3
|
||||||
|
target:
|
||||||
|
group: apps
|
||||||
|
version: v1
|
||||||
|
kind: Deployment
|
||||||
|
```
|
||||||
|
|
||||||
|
When using Kustomize with Dokku, all Kustomize-files _must_ be placed in the `config/kustomize` folder, with a `kustomization.yaml` file being the entrypoint to Kustomize. Dokku will render the helm chart to a `rendered.yaml` file, and then execute Kustomize with the `config/kustomize` folder as the context.
|
||||||
|
|
||||||
|
See the [Kustomize](https://kustomize.io/) website for more details on how to use Kustomize.
|
||||||
|
|
||||||
### Using kubectl remotely
|
### Using kubectl remotely
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
@@ -583,7 +539,6 @@ dokku scheduler-k3s:set --global chart.cert-manager.version 1.13.3
|
|||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> Properties follow dot-notation, and are expanded according to Helm's internal logic. See the [Helm documentation](https://helm.sh/docs/helm/helm_install/#helm-install) for `helm install` for further details.
|
> Properties follow dot-notation, and are expanded according to Helm's internal logic. See the [Helm documentation](https://helm.sh/docs/helm/helm_install/#helm-install) for `helm install` for further details.
|
||||||
|
|
||||||
|
|
||||||
To unset a chart property, omit the value from the `scheduler-k3s:set` call:
|
To unset a chart property, omit the value from the `scheduler-k3s:set` call:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
@@ -599,7 +554,7 @@ dokku scheduler-k3s:ensure-charts --force
|
|||||||
Alternatively, a comma separated list of chart names can be specified to only force install the specified charts:
|
Alternatively, a comma separated list of chart names can be specified to only force install the specified charts:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku scheduler-k3s:ensure-charts --force --chart-names cert-manager
|
dokku scheduler-k3s:ensure-charts --charts cert-manager
|
||||||
```
|
```
|
||||||
|
|
||||||
## Scheduler Interface
|
## Scheduler Interface
|
||||||
@@ -643,7 +598,19 @@ The following Dokku functionality is not implemented at this time.
|
|||||||
|
|
||||||
### Logging support
|
### Logging support
|
||||||
|
|
||||||
App logs for the `logs` command are fetched by Dokku from running containers via the `kubectl` cli. Persisting logs via Vector is not implemented at this time. Users may choose to configure the Vector Kubernetes integration directly by following [this guide](https://vector.dev/docs/setup/installation/platforms/kubernetes/).
|
App logs for the `logs` command are fetched by Dokku from running containers via the Kubernetes api. While the `k3s` scheduler does not integrate with the `logs:vector-*` subcommands, it does respect the global `vector-sink` logs property. When that property is set, the `scheduler-k3s:ensure-charts` command can be utilized to reconfigure vector to ship kubernetes logs to the provided sink.
|
||||||
|
|
||||||
|
To setup log shipping, configure the global `vector-sink` property for the `logs` plugin.. Note that this can be run before _or_ after the `scheduler-k3s:ensure-charts` command - if run before, the `scheduler-k3s:ensure-charts` subcommand will pick up the value.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku logs:set --global vector-sink "console://?encoding[codec]=json"
|
||||||
|
```
|
||||||
|
|
||||||
|
Next, run the `scheduler-k3s:ensure-charts` command with the `vector` chart to force the `k3s` scheduler to reconfigure vector with the specified sink:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku scheduler-k3s:ensure-charts --charts vector
|
||||||
|
```
|
||||||
|
|
||||||
### Supported Resource Management Properties
|
### Supported Resource Management Properties
|
||||||
|
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ At this time, the following dokku commands are used to implement a complete sche
|
|||||||
- `apps:clone`: handles app cloning
|
- `apps:clone`: handles app cloning
|
||||||
- triggers: post-app-clone-setup
|
- triggers: post-app-clone-setup
|
||||||
- `cron`: generates cron tasks for the app
|
- `cron`: generates cron tasks for the app
|
||||||
- triggers: cron-write
|
- triggers: scheduler-cron-write
|
||||||
- `deploy`: deploys app proceses and checks the status of a deploy
|
- `deploy`: deploys app proceses and checks the status of a deploy
|
||||||
- triggers: scheduler-app-status, scheduler-deploy, scheduler-is-deployed, scheduler-logs-failed
|
- triggers: scheduler-app-status, scheduler-deploy, scheduler-is-deployed, scheduler-logs-failed
|
||||||
- `enter`: enters a running container
|
- `enter`: enters a running container
|
||||||
@@ -112,7 +112,9 @@ At this time, the following dokku commands are used to implement a complete sche
|
|||||||
- `run:logs`: fetches running container logs
|
- `run:logs`: fetches running container logs
|
||||||
- triggers: scheduler-run-logs
|
- triggers: scheduler-run-logs
|
||||||
- `ps:stop`: stops app processes
|
- `ps:stop`: stops app processes
|
||||||
- triggers: scheduler-stop
|
- triggers: scheduler-stop, scheduler-cron-write
|
||||||
|
- `ps:start`: starts app processes
|
||||||
|
- triggers: scheduler-deploy, scheduler-cron-write
|
||||||
- `ps:inspect`: outputs inspect output for processes in an app
|
- `ps:inspect`: outputs inspect output for processes in an app
|
||||||
- triggers: scheduler-inspect
|
- triggers: scheduler-inspect
|
||||||
|
|
||||||
|
|||||||
@@ -36,12 +36,15 @@ dokku checks:set node-js-app wait-to-retire 30
|
|||||||
|
|
||||||
Defaults to `60`.
|
Defaults to `60`.
|
||||||
|
|
||||||
|
## Setting stop grace period
|
||||||
|
|
||||||
|
You can set the `stop-timeout-seconds` property on the `ps` plugin to change this value (default: `30`). See the [process management documentation](/docs/processes/process-management.md#changing-process-management-settings) for more information.
|
||||||
|
|
||||||
## Configuring check settings using the `config` plugin
|
## Configuring check settings using the `config` plugin
|
||||||
|
|
||||||
There are certain settings that can be configured via environment variables:
|
There are certain settings that can be configured via environment variables:
|
||||||
|
|
||||||
- `DOKKU_DEFAULT_CHECKS_WAIT`: (default: `10`) If no user-defined checks are specified - or if the process being checked is not a `web` process - this is the period of time Dokku will wait before checking that a container is still running.
|
- `DOKKU_DEFAULT_CHECKS_WAIT`: (default: `10`) If no user-defined checks are specified - or if the process being checked is not a `web` process - this is the period of time Dokku will wait before checking that a container is still running.
|
||||||
- `DOKKU_DOCKER_STOP_TIMEOUT`: (default: `10`) Configurable grace period given to the `docker stop` command. If a container has not stopped by this time, a `kill -9` signal or equivalent is sent in order to force-terminate the container. Both the `ps:stop` and `apps:destroy` commands *also* respect this value. If not specified, the Docker defaults for the [`docker stop` command](https://docs.docker.com/engine/reference/commandline/stop/) will be used.
|
|
||||||
|
|
||||||
The following settings may also be specified in the `app.json` file, though are available as environment variables in order to ease application reuse.
|
The following settings may also be specified in the `app.json` file, though are available as environment variables in order to ease application reuse.
|
||||||
|
|
||||||
|
|||||||
@@ -119,6 +119,21 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
|||||||
# TODO
|
# TODO
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `app-json-is-valid`
|
||||||
|
|
||||||
|
- Description: Checks to see if the provided app.json file is valid
|
||||||
|
- Invoked by: Appjson extraction during deployment
|
||||||
|
- Arguments: `$APP $APP_JSON_PATH`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
### `app-maybe-create`
|
### `app-maybe-create`
|
||||||
|
|
||||||
- Description: Creates an app (gated by whether this is globally enabled or not)
|
- Description: Creates an app (gated by whether this is globally enabled or not)
|
||||||
@@ -583,22 +598,6 @@ DOKKU_SCHEDULER="$1"
|
|||||||
# TODO
|
# TODO
|
||||||
```
|
```
|
||||||
|
|
||||||
### `cron-write`
|
|
||||||
|
|
||||||
- Description: Force triggers writing out cron entries
|
|
||||||
- Invoked by:
|
|
||||||
- Arguments:
|
|
||||||
- Example:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
|
||||||
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
|
||||||
|
|
||||||
# TODO
|
|
||||||
```
|
|
||||||
|
|
||||||
### `dependencies`
|
### `dependencies`
|
||||||
|
|
||||||
- Description: Used to install system-level dependencies.
|
- Description: Used to install system-level dependencies.
|
||||||
@@ -1700,7 +1699,7 @@ curl "http://httpstat.us/200"
|
|||||||
### `post-domains-update`
|
### `post-domains-update`
|
||||||
|
|
||||||
- Description: Allows you to run commands once the domain for an app has been updated. It also sends in the command that has been used. This can be "add", "clear" or "remove". The third argument will be the optional list of domains
|
- Description: Allows you to run commands once the domain for an app has been updated. It also sends in the command that has been used. This can be "add", "clear" or "remove". The third argument will be the optional list of domains
|
||||||
- Invoked by: `dokku domains:add`, `dokku domains:clear`, `dokku domains:remove`, `dokku domains:set`
|
- Invoked by: `dokku domains:add`, `dokku domains:clear`, `dokku domains:remove`, `dokku domains:reset`, `dokku domains:set`
|
||||||
- Arguments: `$APP` `action name` `domains`
|
- Arguments: `$APP` `action name` `domains`
|
||||||
- Example:
|
- Example:
|
||||||
|
|
||||||
@@ -2051,7 +2050,9 @@ CMD="cat > gm && \
|
|||||||
dpkg -s graphicsmagick &>/dev/null || \
|
dpkg -s graphicsmagick &>/dev/null || \
|
||||||
(apt-get update -qq && apt-get -qq -y --no-install-recommends install graphicsmagick && apt-get clean)"
|
(apt-get update -qq && apt-get -qq -y --no-install-recommends install graphicsmagick && apt-get clean)"
|
||||||
|
|
||||||
CID=$(docker run $DOKKU_GLOBAL_RUN_ARGS -i -a stdin $IMAGE /bin/bash -c "$CMD")
|
CID_FILE=/tmp/cid-file
|
||||||
|
docker run $DOKKU_GLOBAL_RUN_ARGS -i -a stdin --cidfile /tmp/cid-file "$IMAGE" /bin/bash -c "$CMD"
|
||||||
|
CID="$(cat "$CID_FILE")"
|
||||||
test $(docker wait $CID) -eq 0
|
test $(docker wait $CID) -eq 0
|
||||||
DOCKER_COMMIT_LABEL_ARGS=("--change" "LABEL org.label-schema.schema-version=1.0" "--change" "LABEL org.label-schema.vendor=dokku" "--change" "LABEL com.dokku.app-name=$APP")
|
DOCKER_COMMIT_LABEL_ARGS=("--change" "LABEL org.label-schema.schema-version=1.0" "--change" "LABEL org.label-schema.vendor=dokku" "--change" "LABEL com.dokku.app-name=$APP")
|
||||||
docker commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" $CID $IMAGE >/dev/null
|
docker commit "${DOCKER_COMMIT_LABEL_ARGS[@]}" $CID $IMAGE >/dev/null
|
||||||
@@ -2443,6 +2444,26 @@ DOKKU_SCHEDULER="$1"; APP="$2";
|
|||||||
# TODO
|
# TODO
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `scheduler-cron-write`
|
||||||
|
|
||||||
|
> [!WARNING]
|
||||||
|
> The scheduler plugin trigger apis are under development and may change
|
||||||
|
> between minor releases until the 1.0 release.
|
||||||
|
|
||||||
|
- Description: Force triggers writing out cron entries. Arguments are optional.
|
||||||
|
- Invoked by: `ps:start`, `ps:stop`, `cron:set`
|
||||||
|
- Arguments: `$DOKKU_SCHEDULER $APP`
|
||||||
|
- Example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
|
||||||
|
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
```
|
||||||
|
|
||||||
### `scheduler-deploy`
|
### `scheduler-deploy`
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
@@ -2588,6 +2609,7 @@ DOKKU_SCHEDULER="$1"; APP="$2";
|
|||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> The scheduler plugin trigger apis are under development and may change
|
> The scheduler plugin trigger apis are under development and may change
|
||||||
> between minor releases until the 1.0 release.
|
> between minor releases until the 1.0 release.
|
||||||
|
|
||||||
- Description: Allows you to run scheduler commands when retrieving failed container logs
|
- Description: Allows you to run scheduler commands when retrieving failed container logs
|
||||||
- Invoked by: `dokku nginx:access-logs` and `dokku nginx:error-logs`
|
- Invoked by: `dokku nginx:access-logs` and `dokku nginx:error-logs`
|
||||||
- Arguments: `$DOKKU_SCHEDULER $APP $PROXY_TYPE $LOG_TYPE $TAIL $NUM_LINES`
|
- Arguments: `$DOKKU_SCHEDULER $APP $PROXY_TYPE $LOG_TYPE $TAIL $NUM_LINES`
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ The workflow looks like this:
|
|||||||
```shell
|
```shell
|
||||||
# having dokku-arch in ../dokku-arch
|
# having dokku-arch in ../dokku-arch
|
||||||
vagrant up build-arch
|
vagrant up build-arch
|
||||||
# wait for "==> build-arch: ==> Finished making: dokku 0.35.16-2 (Mon Feb 22 23:20:37 CET 2016)"
|
# wait for "==> build-arch: ==> Finished making: dokku 0.36.2-2 (Mon Feb 22 23:20:37 CET 2016)"
|
||||||
cd ../dokku-arch
|
cd ../dokku-arch
|
||||||
git add PKGBUILD .SRCINFO
|
git add PKGBUILD .SRCINFO
|
||||||
git commit -m 'Update to dokku 0.9.9'
|
git commit -m 'Update to dokku 0.9.9'
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ All pull requests have tests run against them on [GitHub Actions](https://github
|
|||||||
|
|
||||||
If you wish to skip tests for a particular commit, e.g. documentation changes, you may add the `[ci skip]` designator to your commit message. Commits that _should_ be tested but have the above designator will not be merged.
|
If you wish to skip tests for a particular commit, e.g. documentation changes, you may add the `[ci skip]` designator to your commit message. Commits that _should_ be tested but have the above designator will not be merged.
|
||||||
|
|
||||||
While we do provide official packages for a variety of platforms, as our test suite currently runs on Ubuntu Noble 24.04, we only provide official installation support for that platform and the supported LTS releases of Ubuntu (currently 20.04, 22.04, and 24.04).
|
While we do provide official packages for a variety of platforms, as our test suite currently runs on Ubuntu Noble 24.04, we only provide official installation support for that platform and the supported LTS releases of Ubuntu (currently 22.04, and 24.04).
|
||||||
|
|
||||||
## Local Test Execution
|
## Local Test Execution
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
Pull the dokku/dokku image:
|
Pull the dokku/dokku image:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
docker pull dokku/dokku:0.35.16
|
docker pull dokku/dokku:0.36.2
|
||||||
```
|
```
|
||||||
|
|
||||||
Next, run the image.
|
Next, run the image.
|
||||||
@@ -19,7 +19,7 @@ docker container run -d \
|
|||||||
--publish 8443:443 \
|
--publish 8443:443 \
|
||||||
--volume /var/lib/dokku:/mnt/dokku \
|
--volume /var/lib/dokku:/mnt/dokku \
|
||||||
--volume /var/run/docker.sock:/var/run/docker.sock \
|
--volume /var/run/docker.sock:/var/run/docker.sock \
|
||||||
dokku/dokku:0.35.16
|
dokku/dokku:0.36.2
|
||||||
```
|
```
|
||||||
|
|
||||||
Alternatively, you can use `docker-compose.yml`:
|
Alternatively, you can use `docker-compose.yml`:
|
||||||
@@ -27,7 +27,7 @@ Alternatively, you can use `docker-compose.yml`:
|
|||||||
```yaml
|
```yaml
|
||||||
services:
|
services:
|
||||||
dokku:
|
dokku:
|
||||||
image: dokku/dokku:0.35.16
|
image: dokku/dokku:0.36.2
|
||||||
container_name: dokku
|
container_name: dokku
|
||||||
network_mode: bridge
|
network_mode: bridge
|
||||||
ports:
|
ports:
|
||||||
@@ -83,7 +83,7 @@ redis: https://github.com/dokku/dokku-redis.git
|
|||||||
The alternative is to build a custom docker image via a custom Dockerfile. This Dockerfile can run any `plugin:install` command. Note that the version installed at that time will be the one that persists. Below is an example Dockerfile showing this method.
|
The alternative is to build a custom docker image via a custom Dockerfile. This Dockerfile can run any `plugin:install` command. Note that the version installed at that time will be the one that persists. Below is an example Dockerfile showing this method.
|
||||||
|
|
||||||
```Dockerfile
|
```Dockerfile
|
||||||
FROM dokku/dokku:0.35.16
|
FROM dokku/dokku:0.36.2
|
||||||
RUN dokku plugin:install https://github.com/dokku/dokku-postgres.git postgres
|
RUN dokku plugin:install https://github.com/dokku/dokku-postgres.git postgres
|
||||||
RUN dokku plugin:install https://github.com/dokku/dokku-redis.git redis
|
RUN dokku plugin:install https://github.com/dokku/dokku-redis.git redis
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Dokku is an extensible, open source Platform as a Service that runs on a single
|
|||||||
To start using Dokku, you'll need a system that meets the following minimum requirements:
|
To start using Dokku, you'll need a system that meets the following minimum requirements:
|
||||||
|
|
||||||
- A fresh installation of any of the following operating systems:
|
- A fresh installation of any of the following operating systems:
|
||||||
- [Ubuntu 20.04/22.04/24.04](https://www.ubuntu.com/download)
|
- [Ubuntu 22.04/24.04](https://www.ubuntu.com/download)
|
||||||
- [Debian 11+ x64](https://www.debian.org/distrib/)
|
- [Debian 11+ x64](https://www.debian.org/distrib/)
|
||||||
- A server with one of the following architectures
|
- A server with one of the following architectures
|
||||||
- AMD64 (alternatively known as `x86_64`), commonly used for Intel cloud servers
|
- AMD64 (alternatively known as `x86_64`), commonly used for Intel cloud servers
|
||||||
@@ -37,8 +37,8 @@ To install the latest stable version of Dokku, you can run the following shell c
|
|||||||
|
|
||||||
```shell
|
```shell
|
||||||
# for debian systems, installs Dokku via apt-get
|
# for debian systems, installs Dokku via apt-get
|
||||||
wget -NP . https://dokku.com/install/v0.35.16/bootstrap.sh
|
wget -NP . https://dokku.com/install/v0.36.2/bootstrap.sh
|
||||||
sudo DOKKU_TAG=v0.35.16 bash bootstrap.sh
|
sudo DOKKU_TAG=v0.36.2 bash bootstrap.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
The installation process takes about 5-10 minutes, depending upon internet connection speed.
|
The installation process takes about 5-10 minutes, depending upon internet connection speed.
|
||||||
|
|||||||
@@ -10,26 +10,26 @@
|
|||||||
<meta name="author" content="">
|
<meta name="author" content="">
|
||||||
<title>Dokku - The smallest PaaS implementation you've ever seen</title>
|
<title>Dokku - The smallest PaaS implementation you've ever seen</title>
|
||||||
|
|
||||||
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/apple-touch-icon-57x57.png">
|
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/apple-touch-icon-57x57.png">
|
||||||
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/apple-touch-icon-60x60.png">
|
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/apple-touch-icon-60x60.png">
|
||||||
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/apple-touch-icon-72x72.png">
|
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/apple-touch-icon-72x72.png">
|
||||||
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/apple-touch-icon-76x76.png">
|
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/apple-touch-icon-76x76.png">
|
||||||
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/apple-touch-icon-114x114.png">
|
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/apple-touch-icon-114x114.png">
|
||||||
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/apple-touch-icon-120x120.png">
|
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/apple-touch-icon-120x120.png">
|
||||||
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/apple-touch-icon-144x144.png">
|
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/apple-touch-icon-144x144.png">
|
||||||
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/apple-touch-icon-152x152.png">
|
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/apple-touch-icon-152x152.png">
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/apple-touch-icon-180x180.png">
|
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/apple-touch-icon-180x180.png">
|
||||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
||||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
|
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
|
||||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
||||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
||||||
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/manifest.json">
|
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/manifest.json">
|
||||||
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/favicon.ico">
|
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/favicon.ico">
|
||||||
<meta name="apple-mobile-web-app-title" content="Dokku">
|
<meta name="apple-mobile-web-app-title" content="Dokku">
|
||||||
<meta name="application-name" content="Dokku">
|
<meta name="application-name" content="Dokku">
|
||||||
<meta name="msapplication-TileColor" content="#da532c">
|
<meta name="msapplication-TileColor" content="#da532c">
|
||||||
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/mstile-144x144.png">
|
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/mstile-144x144.png">
|
||||||
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/browserconfig.xml">
|
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/browserconfig.xml">
|
||||||
<meta name="theme-color" content="#ffffff">
|
<meta name="theme-color" content="#ffffff">
|
||||||
|
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor" crossorigin="anonymous">
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor" crossorigin="anonymous">
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;700;900&display=swap" rel="stylesheet">
|
<link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;700;900&display=swap" rel="stylesheet">
|
||||||
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/style.css" rel="stylesheet">
|
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/style.css" rel="stylesheet">
|
||||||
<!-- <link href="./assets/style.css" rel="stylesheet"> -->
|
<!-- <link href="./assets/style.css" rel="stylesheet"> -->
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
<main class="container px-4 px-lg-5">
|
<main class="container px-4 px-lg-5">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-7">
|
<div class="col-lg-7">
|
||||||
<a class="badge-link" href="https://github.com/dokku/dokku/releases"><span class="badge py-2 d-flex fit-content"><div class="circle align-self-center me-2"></div>Latest release <span id="releaseVersion" class="ms-1">v0.35.16</span></span></a>
|
<a class="badge-link" href="https://github.com/dokku/dokku/releases"><span class="badge py-2 d-flex fit-content"><div class="circle align-self-center me-2"></div>Latest release <span id="releaseVersion" class="ms-1">v0.36.2</span></span></a>
|
||||||
<h1 class="text-white hero-heading mt-5">An open source PAAS alternative to Heroku.</h1>
|
<h1 class="text-white hero-heading mt-5">An open source PAAS alternative to Heroku.</h1>
|
||||||
<h4 class="text-white mt-5">Dokku helps you build and manage the lifecycle of applications from building to scaling.</h4>
|
<h4 class="text-white mt-5">Dokku helps you build and manage the lifecycle of applications from building to scaling.</h4>
|
||||||
<div class="d-flex mt-5">
|
<div class="d-flex mt-5">
|
||||||
@@ -125,7 +125,7 @@
|
|||||||
</p>
|
</p>
|
||||||
<p class="line">
|
<p class="line">
|
||||||
<span class="prompt">$</span>
|
<span class="prompt">$</span>
|
||||||
<span class="command">sudo DOKKU_TAG=v0.35.16 bash bootstrap.sh</span>
|
<span class="command">sudo DOKKU_TAG=v0.36.2 bash bootstrap.sh</span>
|
||||||
</p>
|
</p>
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
|
|||||||
@@ -117,6 +117,16 @@ dokku caddy:set --global log-level DEBUG
|
|||||||
|
|
||||||
After modifying, the Caddy container will need to be restarted.
|
After modifying, the Caddy container will need to be restarted.
|
||||||
|
|
||||||
|
### Changing the label key for the app
|
||||||
|
|
||||||
|
The default label key for the app is `caddy`. This can be changed by setting the `label-key` property:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku caddy:set node-js-app label-key caddy_0
|
||||||
|
```
|
||||||
|
|
||||||
|
This will update the app's label key to `caddy_0`. The label key is used to identify the app in the Caddy configuration. If you change the label key, you will need to restart or rebuild the app to apply the updates.
|
||||||
|
|
||||||
### SSL Configuration
|
### SSL Configuration
|
||||||
|
|
||||||
The caddy plugin only supports automatic ssl certificates from it's letsencrypt integration. Managed certificates provided by the `certs` plugin are ignored.
|
The caddy plugin only supports automatic ssl certificates from it's letsencrypt integration. Managed certificates provided by the `certs` plugin are ignored.
|
||||||
|
|||||||
@@ -332,6 +332,7 @@ Changing these value globally or on a per-app basis will require rebuilding the
|
|||||||
| keepalive-timeout | `75s` | string | Timeout (with units) during which a keep-alive client connection will stay open on the server side |
|
| keepalive-timeout | `75s` | string | Timeout (with units) during which a keep-alive client connection will stay open on the server side |
|
||||||
| lingering-timeout | `5s` | string | Timeout (with units) is the maximum waiting time for more client data to arrive |
|
| lingering-timeout | `5s` | string | Timeout (with units) is the maximum waiting time for more client data to arrive |
|
||||||
| nginx-conf-sigil-path | `nginx.conf.sigil` | string | Path in the repository to the `nginx.conf.sigil` file |
|
| nginx-conf-sigil-path | `nginx.conf.sigil` | string | Path in the repository to the `nginx.conf.sigil` file |
|
||||||
|
| nginx-service-command | | string | Full path to an executable script or binary to invoke instead of the system's init process when interacting with nginx |
|
||||||
| proxy-buffer-size | `8k` (# is os pagesize) | string | Size of the buffer used for reading the first part of proxied server response |
|
| proxy-buffer-size | `8k` (# is os pagesize) | string | Size of the buffer used for reading the first part of proxied server response |
|
||||||
| proxy-buffering | `on` | string | Enables or disables buffering of responses from the proxied server |
|
| proxy-buffering | `on` | string | Enables or disables buffering of responses from the proxied server |
|
||||||
| proxy-buffers | `8 8k` | string | Number and size of the buffers used for reading the proxied server response, for a single connection |
|
| proxy-buffers | `8 8k` | string | Number and size of the buffers used for reading the proxied server response, for a single connection |
|
||||||
@@ -487,7 +488,7 @@ See the [customizing hostnames documentation](/docs/configuration/domains.md#cus
|
|||||||
|
|
||||||
### Disabling VHOSTS
|
### Disabling VHOSTS
|
||||||
|
|
||||||
See the [disabling vhosts documentation](/docs/configuration/domains.md#disabling-vhosts) for more information on how to disable domain usage for your app.
|
See the [enabling and disabling vhosts documentation](/docs/configuration/domains.md#enabling-and-disabling-vhosts) for more information on how to disable domain usage for your app.
|
||||||
|
|
||||||
### SSL Configuration
|
### SSL Configuration
|
||||||
|
|
||||||
|
|||||||
@@ -158,6 +158,8 @@ At this time, the following dokku commands are used to interact with a complete
|
|||||||
- triggers: `pre-enable-vhost`
|
- triggers: `pre-enable-vhost`
|
||||||
- `domains:remove`: Removes a domain from an app.
|
- `domains:remove`: Removes a domain from an app.
|
||||||
- triggers: `post-domains-update`
|
- triggers: `post-domains-update`
|
||||||
|
- `domains:reset`: Reset app domains to global-configured domains.
|
||||||
|
- triggers: `post-domains-update`
|
||||||
- `domains:set`: Sets all domains for a given app.
|
- `domains:set`: Sets all domains for a given app.
|
||||||
- triggers: `post-domains-update`
|
- triggers: `post-domains-update`
|
||||||
- `proxy:build-config`: Builds - or rebuilds - external proxy configuration.
|
- `proxy:build-config`: Builds - or rebuilds - external proxy configuration.
|
||||||
|
|||||||
@@ -107,6 +107,38 @@ proctype: qty
|
|||||||
web: 1
|
web: 1
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Changing process management settings
|
||||||
|
|
||||||
|
The `ps` plugin provides a number of settings that can be used to managed deployments on a per-app basis. The following table outlines ones not covered elsewhere:
|
||||||
|
|
||||||
|
| Name | Description | Global Default |
|
||||||
|
|-----------------------|---------------------------------------------------|--------------------|
|
||||||
|
| `stop-timeout` | Configurable grace period given to the `docker stop` command. If a container has not stopped by this time, a `kill -9` signal or equivalent is sent in order to force-terminate the container. Both the `ps:stop` and `apps:destroy` commands *also* respect this value. If not specified, the Docker defaults for the [`docker stop` command](https://docs.docker.com/engine/reference/commandline/stop/) will be used. | `30` |
|
||||||
|
|
||||||
|
All settings can be set via the `ps:set` command. Using `stop-timeout` as an example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:set node-js-app stop-timeout 60
|
||||||
|
```
|
||||||
|
|
||||||
|
The default value may be set by passing an empty value for the option in question:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:set node-js-app stop-timeout
|
||||||
|
```
|
||||||
|
|
||||||
|
Properties can also be set globally. If not set for an app, the global value will apply.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:set --global stop-timeout 60
|
||||||
|
```
|
||||||
|
|
||||||
|
The global default value may be set by passing an empty value for the option.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
dokku ps:set --global stop-timeout
|
||||||
|
```
|
||||||
|
|
||||||
### Defining Processes
|
### Defining Processes
|
||||||
|
|
||||||
#### Procfile
|
#### Procfile
|
||||||
|
|||||||
@@ -53,39 +53,39 @@ When running scheduled cron tasks, there are a few items to be aware of:
|
|||||||
- Scheduled cron tasks are supported on a per-scheduler basis, and are currently only implemented by the `docker-local` scheduler.
|
- Scheduled cron tasks are supported on a per-scheduler basis, and are currently only implemented by the `docker-local` scheduler.
|
||||||
- Tasks for _all_ apps managed by the `docker-local` scheduler are written to a single crontab file owned by the `dokku` user. The `dokku` user's crontab should be considered reserved for this purpose.
|
- Tasks for _all_ apps managed by the `docker-local` scheduler are written to a single crontab file owned by the `dokku` user. The `dokku` user's crontab should be considered reserved for this purpose.
|
||||||
|
|
||||||
#### Specifying a MAILFROM value
|
|
||||||
|
|
||||||
> [!IMPORTANT]
|
### Changing cron management settings
|
||||||
> New as of 0.35.14
|
|
||||||
|
|
||||||
Users can specify a value for `MAILFROM` via the global `mailfrom` cron property by using the `cron:set` command.
|
The `cron` plugin provides a number of settings that can be used to managed deployments on a per-app basis. The following table outlines ones not covered elsewhere:
|
||||||
|
|
||||||
|
| Name | Description | Level | Global Default |
|
||||||
|
|-----------------------|----------------------------------------------------------------|-------------|----------------|
|
||||||
|
| `mailfrom` | Sets the `MAILFROM` variable in a cron file for cron reporting | Global-only | empty string |
|
||||||
|
| `maintenance` | Whether to have cron running for the app or not. | App-only | `false` |
|
||||||
|
| `mailto` | Sets the `MAILTO` variable in a cron file for cron reporting | Global-only | empty string |
|
||||||
|
|
||||||
|
All settings can be set via the `cron:set` command. Using `maintenance` as an example:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku cron:set --global mailfrom example@example.com
|
dokku cron:set node-js-app maintenance true
|
||||||
```
|
```
|
||||||
|
|
||||||
All output for individual cron runs will be sent from the specified email.
|
The default value may be set by passing an empty value for the option in question:
|
||||||
|
|
||||||
Cron emails can be reset to use the system email by running the `cron:set` command for the global `mailfrom` property with no value.
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku cron:set --global mailfrom
|
dokku cron:set node-js-app maintenance
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Specifying a MAILTO value
|
If a property can be set globally - such as `mailto`, use the `--global` flag. If not set for an app, the global value will apply if it exists.
|
||||||
|
|
||||||
By default, cron tasks complete and do not perform any reporting. Users can specify a value for `MAILTO` via the global `mailto` cron property by using the `cron:set` command.
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku cron:set --global mailto example@example.com
|
dokku cron:set --global maintenance true
|
||||||
```
|
```
|
||||||
|
|
||||||
All output for individual cron runs will be sent to the specified email.
|
The global default value may be set by passing an empty value for the option.
|
||||||
|
|
||||||
Cron emails can be disabled by running the `cron:set` command for the global `mailto` property with no value.
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
dokku cron:set --global mailto
|
dokku cron:set --global maintenance
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Listing Cron tasks
|
#### Listing Cron tasks
|
||||||
|
|||||||
@@ -9,26 +9,26 @@
|
|||||||
<meta name="author" content="">
|
<meta name="author" content="">
|
||||||
<title>Dokku - {{DOC_TITLE}}</title>
|
<title>Dokku - {{DOC_TITLE}}</title>
|
||||||
|
|
||||||
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/apple-touch-icon-57x57.png">
|
<link rel="apple-touch-icon" sizes="57x57" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/apple-touch-icon-57x57.png">
|
||||||
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/apple-touch-icon-60x60.png">
|
<link rel="apple-touch-icon" sizes="60x60" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/apple-touch-icon-60x60.png">
|
||||||
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/apple-touch-icon-72x72.png">
|
<link rel="apple-touch-icon" sizes="72x72" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/apple-touch-icon-72x72.png">
|
||||||
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/apple-touch-icon-76x76.png">
|
<link rel="apple-touch-icon" sizes="76x76" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/apple-touch-icon-76x76.png">
|
||||||
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/apple-touch-icon-114x114.png">
|
<link rel="apple-touch-icon" sizes="114x114" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/apple-touch-icon-114x114.png">
|
||||||
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/apple-touch-icon-120x120.png">
|
<link rel="apple-touch-icon" sizes="120x120" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/apple-touch-icon-120x120.png">
|
||||||
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/apple-touch-icon-144x144.png">
|
<link rel="apple-touch-icon" sizes="144x144" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/apple-touch-icon-144x144.png">
|
||||||
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/apple-touch-icon-152x152.png">
|
<link rel="apple-touch-icon" sizes="152x152" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/apple-touch-icon-152x152.png">
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/apple-touch-icon-180x180.png">
|
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/apple-touch-icon-180x180.png">
|
||||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/favicon-32x32.png" sizes="32x32">
|
||||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
|
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/android-chrome-192x192.png" sizes="192x192">
|
||||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/favicon-96x96.png" sizes="96x96">
|
||||||
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/favicon-16x16.png" sizes="16x16">
|
||||||
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/manifest.json">
|
<link rel="manifest" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/manifest.json">
|
||||||
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/favicon.ico">
|
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/favicon.ico">
|
||||||
<meta name="apple-mobile-web-app-title" content="Dokku">
|
<meta name="apple-mobile-web-app-title" content="Dokku">
|
||||||
<meta name="application-name" content="Dokku">
|
<meta name="application-name" content="Dokku">
|
||||||
<meta name="msapplication-TileColor" content="#da532c">
|
<meta name="msapplication-TileColor" content="#da532c">
|
||||||
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/mstile-144x144.png">
|
<meta name="msapplication-TileImage" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/mstile-144x144.png">
|
||||||
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/favicons/browserconfig.xml">
|
<meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/favicons/browserconfig.xml">
|
||||||
<meta name="theme-color" content="#ffffff">
|
<meta name="theme-color" content="#ffffff">
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;700;900&display=swap" rel="stylesheet">
|
<link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;700;900&display=swap" rel="stylesheet">
|
||||||
|
|
||||||
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.35.16/docs/assets/style.css" rel="stylesheet">
|
<link href="https://cdn.jsdelivr.net/gh/dokku/dokku@v0.36.2/docs/assets/style.css" rel="stylesheet">
|
||||||
<!-- <link href="./assets/style.css" rel="stylesheet"> -->
|
<!-- <link href="./assets/style.css" rel="stylesheet"> -->
|
||||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet">
|
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet">
|
||||||
</head>
|
</head>
|
||||||
@@ -215,6 +215,7 @@
|
|||||||
<a href="/{{NAME}}/deployment/continuous-integration/github-actions/" class="list-group-item">GitHub Actions</a>
|
<a href="/{{NAME}}/deployment/continuous-integration/github-actions/" class="list-group-item">GitHub Actions</a>
|
||||||
<a href="/{{NAME}}/deployment/continuous-integration/gitlab-ci/" class="list-group-item">GitLab CI</a>
|
<a href="/{{NAME}}/deployment/continuous-integration/gitlab-ci/" class="list-group-item">GitLab CI</a>
|
||||||
<a href="/{{NAME}}/deployment/continuous-integration/generic/" class="list-group-item">Generic</a>
|
<a href="/{{NAME}}/deployment/continuous-integration/generic/" class="list-group-item">Generic</a>
|
||||||
|
<a href="/{{NAME}}/deployment/continuous-integration/woodpecker-ci/" class="list-group-item">Woodpecker CI</a>
|
||||||
|
|
||||||
<a href="#" class="list-group-item disabled">Community Contributions</a>
|
<a href="#" class="list-group-item disabled">Community Contributions</a>
|
||||||
<a href="/{{NAME}}/community/clients/" class="list-group-item">Clients</a>
|
<a href="/{{NAME}}/community/clients/" class="list-group-item">Clients</a>
|
||||||
|
|||||||
2
go.work
2
go.work
@@ -1,4 +1,4 @@
|
|||||||
go 1.23.0
|
go 1.24.5
|
||||||
|
|
||||||
use (
|
use (
|
||||||
./plugins/app-json
|
./plugins/app-json
|
||||||
|
|||||||
@@ -2,8 +2,10 @@
|
|||||||
set -eo pipefail
|
set -eo pipefail
|
||||||
[[ $DOKKU_TRACE ]] && set -x
|
[[ $DOKKU_TRACE ]] && set -x
|
||||||
|
|
||||||
if [[ ! -f "$DOKKU_ROOT/VHOST" ]]; then
|
if [[ ! -f "$DOKKU_ROOT/VHOST" ]] && [[ -n "$(dig +short "$(hostname -f)")" ]]; then
|
||||||
[[ $(dig +short "$(hostname -f)") ]] && hostname -f >"$DOKKU_ROOT/VHOST"
|
if [[ -d "$DOKKU_ROOT" ]] || [[ -L "$DOKKU_ROOT" ]]; then
|
||||||
|
hostname -f >"$DOKKU_ROOT/VHOST"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dokku_path="$(command -v dokku)"
|
dokku_path="$(command -v dokku)"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[plugin]
|
[plugin]
|
||||||
description = "dokku core standard plugin"
|
description = "dokku core standard plugin"
|
||||||
version = "0.35.16"
|
version = "0.36.2"
|
||||||
[plugin.config]
|
[plugin.config]
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[plugin]
|
[plugin]
|
||||||
description = "dokku core events logging plugin"
|
description = "dokku core events logging plugin"
|
||||||
version = "0.35.16"
|
version = "0.36.2"
|
||||||
[plugin.config]
|
[plugin.config]
|
||||||
|
|||||||
@@ -200,21 +200,9 @@ func GetAppJSON(appName string) (AppJSON, error) {
|
|||||||
return AppJSON{}, nil
|
return AppJSON{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
b, err := os.ReadFile(getProcessSpecificAppJSONPath(appName))
|
appJSONPath := getProcessSpecificAppJSONPath(appName)
|
||||||
if err != nil {
|
|
||||||
return AppJSON{}, fmt.Errorf("Cannot read app.json file: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if strings.TrimSpace(string(b)) == "" {
|
return ReadAppJSON(appJSONPath)
|
||||||
return AppJSON{}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var appJSON AppJSON
|
|
||||||
if err = json.Unmarshal(b, &appJSON); err != nil {
|
|
||||||
return AppJSON{}, fmt.Errorf("Cannot parse app.json: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return appJSON, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetAutoscalingConfig(appName string, processType string, replicas int) (FormationAutoscaling, bool, error) {
|
func GetAutoscalingConfig(appName string, processType string, replicas int) (FormationAutoscaling, bool, error) {
|
||||||
@@ -256,3 +244,22 @@ func GetAutoscalingConfig(appName string, processType string, replicas int) (For
|
|||||||
|
|
||||||
return autoscaling, true, nil
|
return autoscaling, true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ReadAppJSON reads an app.json file from a given path
|
||||||
|
func ReadAppJSON(path string) (AppJSON, error) {
|
||||||
|
b, err := os.ReadFile(path)
|
||||||
|
if err != nil {
|
||||||
|
return AppJSON{}, fmt.Errorf("Cannot read app.json file: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if strings.TrimSpace(string(b)) == "" {
|
||||||
|
return AppJSON{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var appJSON AppJSON
|
||||||
|
if err = json.Unmarshal(b, &appJSON); err != nil {
|
||||||
|
return AppJSON{}, fmt.Errorf("Cannot parse app.json: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return appJSON, nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
module github.com/dokku/dokku/plugins/app-json
|
module github.com/dokku/dokku/plugins/app-json
|
||||||
|
|
||||||
go 1.23.0
|
go 1.24.5
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/dokku/dokku/plugins/common v0.0.0-00010101000000-000000000000
|
github.com/dokku/dokku/plugins/common v0.0.0-00010101000000-000000000000
|
||||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
|
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
|
||||||
github.com/spf13/pflag v1.0.6
|
github.com/spf13/pflag v1.0.7
|
||||||
k8s.io/utils v0.0.0-20240102154912-e7106e64919e
|
k8s.io/utils v0.0.0-20240102154912-e7106e64919e
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -23,9 +23,9 @@ require (
|
|||||||
github.com/pkg/errors v0.9.1 // indirect
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
github.com/pkg/sftp v1.13.5 // indirect
|
github.com/pkg/sftp v1.13.5 // indirect
|
||||||
github.com/ryanuber/columnize v2.1.2+incompatible // indirect
|
github.com/ryanuber/columnize v2.1.2+incompatible // indirect
|
||||||
golang.org/x/crypto v0.35.0 // indirect
|
golang.org/x/crypto v0.41.0 // indirect
|
||||||
golang.org/x/sync v0.12.0 // indirect
|
golang.org/x/sync v0.16.0 // indirect
|
||||||
golang.org/x/sys v0.30.0 // indirect
|
golang.org/x/sys v0.35.0 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
replace github.com/dokku/dokku/plugins/common => ../common
|
replace github.com/dokku/dokku/plugins/common => ../common
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
|
|||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
|
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
|
||||||
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
|
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
|
||||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||||
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
|
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
|
||||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
||||||
@@ -22,8 +22,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE
|
|||||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
github.com/melbahja/goph v1.4.0 h1:z0PgDbBFe66lRYl3v5dGb9aFgPy0kotuQ37QOwSQFqs=
|
github.com/melbahja/goph v1.4.0 h1:z0PgDbBFe66lRYl3v5dGb9aFgPy0kotuQ37QOwSQFqs=
|
||||||
github.com/melbahja/goph v1.4.0/go.mod h1:uG+VfK2Dlhk+O32zFrRlc3kYKTlV6+BtvPWd/kK7U68=
|
github.com/melbahja/goph v1.4.0/go.mod h1:uG+VfK2Dlhk+O32zFrRlc3kYKTlV6+BtvPWd/kK7U68=
|
||||||
github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
|
github.com/onsi/gomega v1.38.0 h1:c/WX+w8SLAinvuKKQFh77WEucCnPk4j2OTUr7lt7BeY=
|
||||||
github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
|
github.com/onsi/gomega v1.38.0/go.mod h1:OcXcwId0b9QsE7Y49u+BTrL4IdKOBOKnD6VQNTJEB6o=
|
||||||
github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8=
|
github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8=
|
||||||
github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I=
|
github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I=
|
||||||
github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs=
|
github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs=
|
||||||
@@ -36,8 +36,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
|
|||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/ryanuber/columnize v2.1.2+incompatible h1:C89EOx/XBWwIXl8wm8OPJBd7kPF25UfsK2X7Ph/zCAk=
|
github.com/ryanuber/columnize v2.1.2+incompatible h1:C89EOx/XBWwIXl8wm8OPJBd7kPF25UfsK2X7Ph/zCAk=
|
||||||
github.com/ryanuber/columnize v2.1.2+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
github.com/ryanuber/columnize v2.1.2+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
||||||
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
|
github.com/spf13/pflag v1.0.7 h1:vN6T9TfwStFPFM5XzjsvmzZkLuaLX+HS+0SeFLRgU6M=
|
||||||
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
github.com/spf13/pflag v1.0.7/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
@@ -46,20 +46,20 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
|
|||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
|
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
|
||||||
golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
|
golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
|
||||||
golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
|
golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
|
golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
|
||||||
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
|
golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
|
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
|
||||||
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@@ -70,20 +70,20 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
|
||||||
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU=
|
golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4=
|
||||||
golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s=
|
golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
|
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
|
||||||
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
|
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[plugin]
|
[plugin]
|
||||||
description = "dokku core app-json plugin"
|
description = "dokku core app-json plugin"
|
||||||
version = "0.35.16"
|
version = "0.36.2"
|
||||||
[plugin.config]
|
[plugin.config]
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
package appjson
|
package appjson
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
|
||||||
"path/filepath"
|
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/dokku/dokku/plugins/common"
|
"github.com/dokku/dokku/plugins/common"
|
||||||
@@ -58,90 +57,70 @@ func TriggerAppJSONGetContent(appName string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// TriggerCorePostDeploy sets a property to
|
// TriggerCorePostDeploy moves the extracted app.json to the app data directory
|
||||||
// allow the app to be restored on boot
|
// allowing the app to be restored on boot
|
||||||
func TriggerCorePostDeploy(appName string) error {
|
func TriggerCorePostDeploy(appName string) error {
|
||||||
existingAppJSON := getAppJSONPath(appName)
|
return common.CorePostDeploy(common.CorePostDeployInput{
|
||||||
processSpecificAppJSON := fmt.Sprintf("%s.%s", existingAppJSON, os.Getenv("DOKKU_PID"))
|
AppName: appName,
|
||||||
if common.FileExists(processSpecificAppJSON) {
|
Destination: common.GetAppDataDirectory("app-json", appName),
|
||||||
if err := os.Rename(processSpecificAppJSON, existingAppJSON); err != nil {
|
PluginName: "app-json",
|
||||||
return err
|
ExtractedPaths: []common.CorePostDeployPath{
|
||||||
}
|
{Path: "app.json", IsDirectory: false},
|
||||||
} else if common.FileExists(fmt.Sprintf("%s.missing", processSpecificAppJSON)) {
|
},
|
||||||
if err := os.Remove(fmt.Sprintf("%s.missing", processSpecificAppJSON)); err != nil {
|
})
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if common.FileExists(existingAppJSON) {
|
|
||||||
if err := os.Remove(existingAppJSON); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TriggerCorePostExtract ensures that the main app.json is the one specified by app-json-path
|
// TriggerCorePostExtract ensures that the main app.json is the one specified by app-json-path
|
||||||
func TriggerCorePostExtract(appName string, sourceWorkDir string) error {
|
func TriggerCorePostExtract(appName string, sourceWorkDir string) error {
|
||||||
|
destination := common.GetAppDataDirectory("app-json", appName)
|
||||||
appJSONPath := strings.Trim(reportComputedAppjsonpath(appName), "/")
|
appJSONPath := strings.Trim(reportComputedAppjsonpath(appName), "/")
|
||||||
if appJSONPath == "" {
|
if appJSONPath == "" {
|
||||||
appJSONPath = "app.json"
|
appJSONPath = "app.json"
|
||||||
}
|
}
|
||||||
|
|
||||||
existingAppJSON := getAppJSONPath(appName)
|
validator := func(appName string, path string) error {
|
||||||
files, err := filepath.Glob(fmt.Sprintf("%s.*", existingAppJSON))
|
if !common.FileExists(path) {
|
||||||
if err != nil {
|
return nil
|
||||||
return err
|
}
|
||||||
}
|
|
||||||
for _, f := range files {
|
result, err := common.CallPlugnTrigger(common.PlugnTriggerInput{
|
||||||
if err := os.Remove(f); err != nil {
|
Trigger: "app-json-is-valid",
|
||||||
|
Args: []string{appName, path},
|
||||||
|
StreamStdout: true,
|
||||||
|
StreamStderr: true,
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
if result.StderrContents() != "" {
|
||||||
|
return errors.New(result.StderrContents())
|
||||||
|
}
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
processSpecificAppJSON := fmt.Sprintf("%s.%s", existingAppJSON, os.Getenv("DOKKU_PID"))
|
|
||||||
results, _ := common.CallPlugnTrigger(common.PlugnTriggerInput{
|
results, _ := common.CallPlugnTrigger(common.PlugnTriggerInput{
|
||||||
Trigger: "git-get-property",
|
|
||||||
Args: []string{appName, "source-image"},
|
|
||||||
})
|
|
||||||
appSourceImage := results.StdoutContents()
|
|
||||||
|
|
||||||
results, _ = common.CallPlugnTrigger(common.PlugnTriggerInput{
|
|
||||||
Trigger: "builder-get-property",
|
Trigger: "builder-get-property",
|
||||||
Args: []string{appName, "build-dir"},
|
Args: []string{appName, "build-dir"},
|
||||||
})
|
})
|
||||||
buildDir := results.StdoutContents()
|
buildDir := results.StdoutContents()
|
||||||
|
return common.CorePostExtract(common.CorePostExtractInput{
|
||||||
repoDefaultAppJSONPath := path.Join(sourceWorkDir, "app.json")
|
AppName: appName,
|
||||||
if appSourceImage == "" {
|
BuildDir: buildDir,
|
||||||
repoAppJSONPath := path.Join(sourceWorkDir, buildDir, appJSONPath)
|
Destination: destination,
|
||||||
if !common.FileExists(repoAppJSONPath) {
|
PluginName: "app-json",
|
||||||
if appJSONPath != "app.json" && common.FileExists(repoDefaultAppJSONPath) {
|
SourceWorkDir: sourceWorkDir,
|
||||||
if err := os.Remove(repoDefaultAppJSONPath); err != nil {
|
ToExtract: []common.CorePostExtractToExtract{
|
||||||
return err
|
{
|
||||||
}
|
Path: appJSONPath,
|
||||||
}
|
IsDirectory: false,
|
||||||
return common.TouchFile(fmt.Sprintf("%s.missing", processSpecificAppJSON))
|
Name: "app.json",
|
||||||
}
|
Destination: "app.json",
|
||||||
|
Validator: validator,
|
||||||
if err := common.Copy(repoAppJSONPath, processSpecificAppJSON); err != nil {
|
},
|
||||||
return fmt.Errorf("Unable to extract app.json: %v", err.Error())
|
},
|
||||||
}
|
})
|
||||||
|
|
||||||
if appJSONPath != "app.json" {
|
|
||||||
if err := common.Copy(repoAppJSONPath, repoDefaultAppJSONPath); err != nil {
|
|
||||||
return fmt.Errorf("Unable to move app.json into place: %v", err.Error())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if err := common.CopyFromImage(appName, appSourceImage, path.Join(buildDir, appJSONPath), processSpecificAppJSON); err != nil {
|
|
||||||
return common.TouchFile(fmt.Sprintf("%s.missing", processSpecificAppJSON))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: add validation to app.json file by ensuring it can be deserialized
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TriggerInstall initializes app-json directory structures
|
// TriggerInstall initializes app-json directory structures
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
module github.com/dokku/dokku/plugins/apps
|
module github.com/dokku/dokku/plugins/apps
|
||||||
|
|
||||||
go 1.23.0
|
go 1.24.5
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/dokku/dokku/plugins/common v0.0.0-00010101000000-000000000000
|
github.com/dokku/dokku/plugins/common v0.0.0-00010101000000-000000000000
|
||||||
github.com/spf13/pflag v1.0.6
|
github.com/spf13/pflag v1.0.7
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
@@ -21,9 +21,9 @@ require (
|
|||||||
github.com/pkg/errors v0.9.1 // indirect
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
github.com/pkg/sftp v1.13.5 // indirect
|
github.com/pkg/sftp v1.13.5 // indirect
|
||||||
github.com/ryanuber/columnize v2.1.2+incompatible // indirect
|
github.com/ryanuber/columnize v2.1.2+incompatible // indirect
|
||||||
golang.org/x/crypto v0.35.0 // indirect
|
golang.org/x/crypto v0.41.0 // indirect
|
||||||
golang.org/x/sync v0.12.0 // indirect
|
golang.org/x/sync v0.16.0 // indirect
|
||||||
golang.org/x/sys v0.30.0 // indirect
|
golang.org/x/sys v0.35.0 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
replace github.com/dokku/dokku/plugins/common => ../common
|
replace github.com/dokku/dokku/plugins/common => ../common
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8
|
|||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
|
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
|
||||||
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
|
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
|
||||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||||
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
|
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
|
||||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
||||||
@@ -19,8 +19,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE
|
|||||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
github.com/melbahja/goph v1.4.0 h1:z0PgDbBFe66lRYl3v5dGb9aFgPy0kotuQ37QOwSQFqs=
|
github.com/melbahja/goph v1.4.0 h1:z0PgDbBFe66lRYl3v5dGb9aFgPy0kotuQ37QOwSQFqs=
|
||||||
github.com/melbahja/goph v1.4.0/go.mod h1:uG+VfK2Dlhk+O32zFrRlc3kYKTlV6+BtvPWd/kK7U68=
|
github.com/melbahja/goph v1.4.0/go.mod h1:uG+VfK2Dlhk+O32zFrRlc3kYKTlV6+BtvPWd/kK7U68=
|
||||||
github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
|
github.com/onsi/gomega v1.38.0 h1:c/WX+w8SLAinvuKKQFh77WEucCnPk4j2OTUr7lt7BeY=
|
||||||
github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
|
github.com/onsi/gomega v1.38.0/go.mod h1:OcXcwId0b9QsE7Y49u+BTrL4IdKOBOKnD6VQNTJEB6o=
|
||||||
github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8=
|
github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8=
|
||||||
github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I=
|
github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I=
|
||||||
github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs=
|
github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs=
|
||||||
@@ -33,8 +33,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
|
|||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/ryanuber/columnize v2.1.2+incompatible h1:C89EOx/XBWwIXl8wm8OPJBd7kPF25UfsK2X7Ph/zCAk=
|
github.com/ryanuber/columnize v2.1.2+incompatible h1:C89EOx/XBWwIXl8wm8OPJBd7kPF25UfsK2X7Ph/zCAk=
|
||||||
github.com/ryanuber/columnize v2.1.2+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
github.com/ryanuber/columnize v2.1.2+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
||||||
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
|
github.com/spf13/pflag v1.0.7 h1:vN6T9TfwStFPFM5XzjsvmzZkLuaLX+HS+0SeFLRgU6M=
|
||||||
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
github.com/spf13/pflag v1.0.7/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
@@ -43,20 +43,20 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
|
|||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
|
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
|
||||||
golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
|
golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
|
||||||
golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
|
golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
|
golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
|
||||||
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
|
golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
|
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
|
||||||
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@@ -67,20 +67,20 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
|
||||||
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU=
|
golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4=
|
||||||
golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s=
|
golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
|
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
|
||||||
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
|
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[plugin]
|
[plugin]
|
||||||
description = "dokku core apps plugin"
|
description = "dokku core apps plugin"
|
||||||
version = "0.35.16"
|
version = "0.36.2"
|
||||||
[plugin.config]
|
[plugin.config]
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[plugin]
|
[plugin]
|
||||||
description = "dokku core builder-dockerfile plugin"
|
description = "dokku core builder-dockerfile plugin"
|
||||||
version = "0.35.16"
|
version = "0.36.2"
|
||||||
[plugin.config]
|
[plugin.config]
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ trigger-builder-herokuish-docker-args() {
|
|||||||
local STDIN DOKKU_APP_TYPE DOKKU_APP_USER
|
local STDIN DOKKU_APP_TYPE DOKKU_APP_USER
|
||||||
|
|
||||||
STDIN=$(cat)
|
STDIN=$(cat)
|
||||||
DOKKU_APP_TYPE=$(config_get "$APP" DOKKU_APP_TYPE || true)
|
DOKKU_APP_TYPE="$(plugn trigger builder-get-property "$APP" "detected" || true)"
|
||||||
DOKKU_APP_USER=$(config_get "$APP" DOKKU_APP_USER || true)
|
DOKKU_APP_USER="$(config_get "$APP" DOKKU_APP_USER || true)"
|
||||||
DOKKU_APP_USER=${DOKKU_APP_USER:="herokuishuser"}
|
DOKKU_APP_USER="${DOKKU_APP_USER:="herokuishuser"}"
|
||||||
|
|
||||||
if [[ "$DOKKU_APP_TYPE" == "herokuish" ]]; then
|
if [[ "$DOKKU_APP_TYPE" == "herokuish" ]]; then
|
||||||
local docker_args="$STDIN --env=USER=${DOKKU_APP_USER}"
|
local docker_args="$STDIN --env=USER=${DOKKU_APP_USER}"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[plugin]
|
[plugin]
|
||||||
description = "dokku core builder-herokuish plugin"
|
description = "dokku core builder-herokuish plugin"
|
||||||
version = "0.35.16"
|
version = "0.36.2"
|
||||||
[plugin.config]
|
[plugin.config]
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[plugin]
|
[plugin]
|
||||||
description = "dokku core builder-lambda plugin"
|
description = "dokku core builder-lambda plugin"
|
||||||
version = "0.35.16"
|
version = "0.36.2"
|
||||||
[plugin.config]
|
[plugin.config]
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[plugin]
|
[plugin]
|
||||||
description = "dokku core builder-nixpacks plugin"
|
description = "dokku core builder-nixpacks plugin"
|
||||||
version = "0.35.16"
|
version = "0.36.2"
|
||||||
[plugin.config]
|
[plugin.config]
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[plugin]
|
[plugin]
|
||||||
description = "dokku core builder-null plugin"
|
description = "dokku core builder-null plugin"
|
||||||
version = "0.35.16"
|
version = "0.36.2"
|
||||||
[plugin.config]
|
[plugin.config]
|
||||||
|
|||||||
@@ -37,7 +37,35 @@ trigger-builder-pack-builder-build() {
|
|||||||
fi
|
fi
|
||||||
plugn trigger pre-build "$BUILDER_TYPE" "$APP" "$SOURCECODE_WORK_DIR"
|
plugn trigger pre-build "$BUILDER_TYPE" "$APP" "$SOURCECODE_WORK_DIR"
|
||||||
|
|
||||||
pack build "$IMAGE" --builder "$DOKKU_CNB_BUILDER" --path "$SOURCECODE_WORK_DIR" --default-process web "${ENV_ARGS[@]}"
|
local DOCKER_ARGS=$(: | plugn trigger docker-args-build "$APP" "$BUILDER_TYPE")
|
||||||
|
[[ "$DOKKU_TRACE" ]] && DOCKER_ARGS+=" --env=TRACE=true "
|
||||||
|
DOCKER_ARGS+=$(: | plugn trigger docker-args-process-build "$APP" "$BUILDER_TYPE")
|
||||||
|
|
||||||
|
DOCKER_ARGS=" $DOCKER_ARGS "
|
||||||
|
declare -a ARG_ARRAY
|
||||||
|
eval "ARG_ARRAY=($DOCKER_ARGS)"
|
||||||
|
|
||||||
|
eval set -- "$DOCKER_ARGS"
|
||||||
|
|
||||||
|
declare -a PACK_ARGS
|
||||||
|
while true; do
|
||||||
|
case "$1" in
|
||||||
|
--volume=* | -v=*)
|
||||||
|
PACK_ARGS+=("$1")
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--volume | -v)
|
||||||
|
PACK_ARGS+=("--volume")
|
||||||
|
PACK_ARGS+=("$2")
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
pack build "$IMAGE" --builder "$DOKKU_CNB_BUILDER" --path "$SOURCECODE_WORK_DIR" --default-process web "${PACK_ARGS[@]}" "${ENV_ARGS[@]}"
|
||||||
docker-image-labeler relabel --label=dokku --label=org.label-schema.schema-version=1.0 --label=org.label-schema.vendor=dokku --label=com.dokku.image-stage=build --label=com.dokku.builder-type=pack --label=com.dokku.app-name=$APP "$IMAGE"
|
docker-image-labeler relabel --label=dokku --label=org.label-schema.schema-version=1.0 --label=org.label-schema.vendor=dokku --label=com.dokku.image-stage=build --label=com.dokku.builder-type=pack --label=com.dokku.app-name=$APP "$IMAGE"
|
||||||
|
|
||||||
# ensure we have a port mapping
|
# ensure we have a port mapping
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[plugin]
|
[plugin]
|
||||||
description = "dokku core builder-pack plugin"
|
description = "dokku core builder-pack plugin"
|
||||||
version = "0.35.16"
|
version = "0.36.2"
|
||||||
[plugin.config]
|
[plugin.config]
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
SUBCOMMANDS = subcommands/report subcommands/set
|
SUBCOMMANDS = subcommands/report subcommands/set
|
||||||
TRIGGERS = triggers/builder-detect triggers/builder-get-property triggers/builder-image-is-cnb triggers/builder-image-is-herokuish triggers/core-post-extract triggers/install triggers/post-app-clone-setup triggers/post-app-rename-setup triggers/post-delete triggers/report
|
TRIGGERS = triggers/builder-detect triggers/builder-get-property triggers/builder-image-is-cnb triggers/builder-image-is-herokuish triggers/builder-set-property triggers/core-post-extract triggers/install triggers/post-app-clone-setup triggers/post-app-rename-setup triggers/post-delete triggers/report
|
||||||
BUILD = commands subcommands triggers
|
BUILD = commands subcommands triggers
|
||||||
PLUGIN_NAME = builder
|
PLUGIN_NAME = builder
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ var (
|
|||||||
// DefaultProperties is a map of all valid builder properties with corresponding default property values
|
// DefaultProperties is a map of all valid builder properties with corresponding default property values
|
||||||
DefaultProperties = map[string]string{
|
DefaultProperties = map[string]string{
|
||||||
"selected": "",
|
"selected": "",
|
||||||
|
"detected": "",
|
||||||
"build-dir": "",
|
"build-dir": "",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
module github.com/dokku/dokku/plugins/builder
|
module github.com/dokku/dokku/plugins/builder
|
||||||
|
|
||||||
go 1.23.0
|
go 1.24.5
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/dokku/dokku/plugins/common v0.0.0-00010101000000-000000000000
|
github.com/dokku/dokku/plugins/common v0.0.0-00010101000000-000000000000
|
||||||
github.com/spf13/pflag v1.0.6
|
github.com/spf13/pflag v1.0.7
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
@@ -21,9 +21,9 @@ require (
|
|||||||
github.com/pkg/errors v0.9.1 // indirect
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
github.com/pkg/sftp v1.13.5 // indirect
|
github.com/pkg/sftp v1.13.5 // indirect
|
||||||
github.com/ryanuber/columnize v2.1.2+incompatible // indirect
|
github.com/ryanuber/columnize v2.1.2+incompatible // indirect
|
||||||
golang.org/x/crypto v0.35.0 // indirect
|
golang.org/x/crypto v0.41.0 // indirect
|
||||||
golang.org/x/sync v0.12.0 // indirect
|
golang.org/x/sync v0.16.0 // indirect
|
||||||
golang.org/x/sys v0.30.0 // indirect
|
golang.org/x/sys v0.35.0 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
replace github.com/dokku/dokku/plugins/common => ../common
|
replace github.com/dokku/dokku/plugins/common => ../common
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8
|
|||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
|
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
|
||||||
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
|
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
|
||||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||||
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
|
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
|
||||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
||||||
@@ -19,8 +19,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE
|
|||||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
github.com/melbahja/goph v1.4.0 h1:z0PgDbBFe66lRYl3v5dGb9aFgPy0kotuQ37QOwSQFqs=
|
github.com/melbahja/goph v1.4.0 h1:z0PgDbBFe66lRYl3v5dGb9aFgPy0kotuQ37QOwSQFqs=
|
||||||
github.com/melbahja/goph v1.4.0/go.mod h1:uG+VfK2Dlhk+O32zFrRlc3kYKTlV6+BtvPWd/kK7U68=
|
github.com/melbahja/goph v1.4.0/go.mod h1:uG+VfK2Dlhk+O32zFrRlc3kYKTlV6+BtvPWd/kK7U68=
|
||||||
github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
|
github.com/onsi/gomega v1.38.0 h1:c/WX+w8SLAinvuKKQFh77WEucCnPk4j2OTUr7lt7BeY=
|
||||||
github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
|
github.com/onsi/gomega v1.38.0/go.mod h1:OcXcwId0b9QsE7Y49u+BTrL4IdKOBOKnD6VQNTJEB6o=
|
||||||
github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8=
|
github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8=
|
||||||
github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I=
|
github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I=
|
||||||
github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs=
|
github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs=
|
||||||
@@ -33,8 +33,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
|
|||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/ryanuber/columnize v2.1.2+incompatible h1:C89EOx/XBWwIXl8wm8OPJBd7kPF25UfsK2X7Ph/zCAk=
|
github.com/ryanuber/columnize v2.1.2+incompatible h1:C89EOx/XBWwIXl8wm8OPJBd7kPF25UfsK2X7Ph/zCAk=
|
||||||
github.com/ryanuber/columnize v2.1.2+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
github.com/ryanuber/columnize v2.1.2+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
||||||
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
|
github.com/spf13/pflag v1.0.7 h1:vN6T9TfwStFPFM5XzjsvmzZkLuaLX+HS+0SeFLRgU6M=
|
||||||
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
github.com/spf13/pflag v1.0.7/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
@@ -43,20 +43,20 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
|
|||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
|
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
|
||||||
golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
|
golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
|
||||||
golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
|
golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
|
golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
|
||||||
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
|
golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
|
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
|
||||||
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@@ -67,20 +67,20 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
|
||||||
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU=
|
golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4=
|
||||||
golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s=
|
golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
|
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
|
||||||
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
|
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[plugin]
|
[plugin]
|
||||||
description = "dokku core builder plugin"
|
description = "dokku core builder plugin"
|
||||||
version = "0.35.16"
|
version = "0.36.2"
|
||||||
[plugin.config]
|
[plugin.config]
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ func ReportSingleApp(appName string, format string, infoFlag string) error {
|
|||||||
"--builder-computed-selected": reportComputedSelected,
|
"--builder-computed-selected": reportComputedSelected,
|
||||||
"--builder-global-selected": reportGlobalSelected,
|
"--builder-global-selected": reportGlobalSelected,
|
||||||
"--builder-selected": reportSelected,
|
"--builder-selected": reportSelected,
|
||||||
|
"--builder-detected": reportDetected,
|
||||||
"--builder-computed-build-dir": reportComputedBuildDir,
|
"--builder-computed-build-dir": reportComputedBuildDir,
|
||||||
"--builder-global-build-dir": reportGlobalBuildDir,
|
"--builder-global-build-dir": reportGlobalBuildDir,
|
||||||
"--builder-build-dir": reportBuildDir,
|
"--builder-build-dir": reportBuildDir,
|
||||||
@@ -43,6 +44,10 @@ func reportGlobalSelected(appName string) string {
|
|||||||
return common.PropertyGet("builder", "--global", "selected")
|
return common.PropertyGet("builder", "--global", "selected")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func reportDetected(appName string) string {
|
||||||
|
return common.PropertyGet("builder", appName, "detected")
|
||||||
|
}
|
||||||
|
|
||||||
func reportSelected(appName string) string {
|
func reportSelected(appName string) string {
|
||||||
return common.PropertyGet("builder", appName, "selected")
|
return common.PropertyGet("builder", appName, "selected")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,11 @@ func main() {
|
|||||||
appName := flag.Arg(0)
|
appName := flag.Arg(0)
|
||||||
image := flag.Arg(1)
|
image := flag.Arg(1)
|
||||||
err = builder.TriggerBuilderImageIsHerokuish(appName, image)
|
err = builder.TriggerBuilderImageIsHerokuish(appName, image)
|
||||||
|
case "builder-set-property":
|
||||||
|
appName := flag.Arg(0)
|
||||||
|
property := flag.Arg(1)
|
||||||
|
value := flag.Arg(2)
|
||||||
|
err = builder.TriggerBuilderSetProperty(appName, property, value)
|
||||||
case "core-post-extract":
|
case "core-post-extract":
|
||||||
appName := flag.Arg(0)
|
appName := flag.Arg(0)
|
||||||
sourceWorkDir := flag.Arg(1)
|
sourceWorkDir := flag.Arg(1)
|
||||||
|
|||||||
@@ -30,6 +30,11 @@ func CommandReport(appName string, format string, infoFlag string) error {
|
|||||||
|
|
||||||
// CommandSet set or clear a builder property for an app
|
// CommandSet set or clear a builder property for an app
|
||||||
func CommandSet(appName string, property string, value string) error {
|
func CommandSet(appName string, property string, value string) error {
|
||||||
|
if property == "detected" {
|
||||||
|
common.LogWarn("detected is a read-only property")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
common.CommandPropertySet("builder", appName, property, value, DefaultProperties, GlobalProperties)
|
common.CommandPropertySet("builder", appName, property, value, DefaultProperties, GlobalProperties)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,14 +27,23 @@ func TriggerBuilderDetect(appName string) error {
|
|||||||
|
|
||||||
// TriggerBuilderGetProperty writes the builder key to stdout for a given app container
|
// TriggerBuilderGetProperty writes the builder key to stdout for a given app container
|
||||||
func TriggerBuilderGetProperty(appName string, key string) error {
|
func TriggerBuilderGetProperty(appName string, key string) error {
|
||||||
if key != "selected" && key != "build-dir" {
|
if _, ok := DefaultProperties[key]; !ok {
|
||||||
return errors.New("Invalid logs property specified")
|
return errors.New("Invalid builder property specified")
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println(common.PropertyGet("builder", appName, key))
|
fmt.Println(common.PropertyGet("builder", appName, key))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TriggerBuilderSetProperty writes the builder key to stdout for a given app container
|
||||||
|
func TriggerBuilderSetProperty(appName string, key string, value string) error {
|
||||||
|
if _, ok := DefaultProperties[key]; !ok {
|
||||||
|
return errors.New("Invalid builder property specified")
|
||||||
|
}
|
||||||
|
|
||||||
|
return common.PropertyWrite("builder", appName, key, value)
|
||||||
|
}
|
||||||
|
|
||||||
// TriggerBuilderImageIsCNB prints true if an image is cnb based, false otherwise
|
// TriggerBuilderImageIsCNB prints true if an image is cnb based, false otherwise
|
||||||
func TriggerBuilderImageIsCNB(appName string, image string) error {
|
func TriggerBuilderImageIsCNB(appName string, image string) error {
|
||||||
if common.IsImageCnbBased(image) {
|
if common.IsImageCnbBased(image) {
|
||||||
@@ -99,7 +108,30 @@ func TriggerInstall() error {
|
|||||||
return fmt.Errorf("Unable to install the builder plugin: %s", err.Error())
|
return fmt.Errorf("Unable to install the builder plugin: %s", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := common.CallPlugnTrigger(common.PlugnTriggerInput{
|
apps, err := common.UnfilteredDokkuApps()
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, appName := range apps {
|
||||||
|
if common.PropertyExists("builder", appName, "detected") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
results, err := common.CallPlugnTrigger(common.PlugnTriggerInput{
|
||||||
|
Trigger: "config-get",
|
||||||
|
Args: []string{appName, "DOKKU_APP_TYPE"},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if results.StdoutContents() != "" {
|
||||||
|
common.PropertyWrite("builder", appName, "detected", results.StdoutContents())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = common.CallPlugnTrigger(common.PlugnTriggerInput{
|
||||||
Trigger: "install-builder-prune",
|
Trigger: "install-builder-prune",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
module github.com/dokku/dokku/plugins/buildpacks
|
module github.com/dokku/dokku/plugins/buildpacks
|
||||||
|
|
||||||
go 1.23.0
|
go 1.24.5
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/dokku/dokku/plugins/common v0.0.0-00010101000000-000000000000
|
github.com/dokku/dokku/plugins/common v0.0.0-00010101000000-000000000000
|
||||||
github.com/spf13/pflag v1.0.6
|
github.com/spf13/pflag v1.0.7
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
@@ -21,9 +21,9 @@ require (
|
|||||||
github.com/pkg/errors v0.9.1 // indirect
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
github.com/pkg/sftp v1.13.5 // indirect
|
github.com/pkg/sftp v1.13.5 // indirect
|
||||||
github.com/ryanuber/columnize v2.1.2+incompatible // indirect
|
github.com/ryanuber/columnize v2.1.2+incompatible // indirect
|
||||||
golang.org/x/crypto v0.35.0 // indirect
|
golang.org/x/crypto v0.41.0 // indirect
|
||||||
golang.org/x/sync v0.12.0 // indirect
|
golang.org/x/sync v0.16.0 // indirect
|
||||||
golang.org/x/sys v0.30.0 // indirect
|
golang.org/x/sys v0.35.0 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
replace github.com/dokku/dokku/plugins/common => ../common
|
replace github.com/dokku/dokku/plugins/common => ../common
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8
|
|||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
|
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
|
||||||
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
|
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
|
||||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||||
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
|
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
|
||||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
||||||
@@ -19,8 +19,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE
|
|||||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
github.com/melbahja/goph v1.4.0 h1:z0PgDbBFe66lRYl3v5dGb9aFgPy0kotuQ37QOwSQFqs=
|
github.com/melbahja/goph v1.4.0 h1:z0PgDbBFe66lRYl3v5dGb9aFgPy0kotuQ37QOwSQFqs=
|
||||||
github.com/melbahja/goph v1.4.0/go.mod h1:uG+VfK2Dlhk+O32zFrRlc3kYKTlV6+BtvPWd/kK7U68=
|
github.com/melbahja/goph v1.4.0/go.mod h1:uG+VfK2Dlhk+O32zFrRlc3kYKTlV6+BtvPWd/kK7U68=
|
||||||
github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
|
github.com/onsi/gomega v1.38.0 h1:c/WX+w8SLAinvuKKQFh77WEucCnPk4j2OTUr7lt7BeY=
|
||||||
github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
|
github.com/onsi/gomega v1.38.0/go.mod h1:OcXcwId0b9QsE7Y49u+BTrL4IdKOBOKnD6VQNTJEB6o=
|
||||||
github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8=
|
github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8=
|
||||||
github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I=
|
github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I=
|
||||||
github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs=
|
github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs=
|
||||||
@@ -33,8 +33,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
|
|||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/ryanuber/columnize v2.1.2+incompatible h1:C89EOx/XBWwIXl8wm8OPJBd7kPF25UfsK2X7Ph/zCAk=
|
github.com/ryanuber/columnize v2.1.2+incompatible h1:C89EOx/XBWwIXl8wm8OPJBd7kPF25UfsK2X7Ph/zCAk=
|
||||||
github.com/ryanuber/columnize v2.1.2+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
github.com/ryanuber/columnize v2.1.2+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
||||||
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
|
github.com/spf13/pflag v1.0.7 h1:vN6T9TfwStFPFM5XzjsvmzZkLuaLX+HS+0SeFLRgU6M=
|
||||||
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
github.com/spf13/pflag v1.0.7/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
@@ -43,20 +43,20 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
|
|||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
|
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
|
||||||
golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
|
golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
|
||||||
golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
|
golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
|
golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
|
||||||
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
|
golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
|
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
|
||||||
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@@ -67,20 +67,20 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
|
||||||
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU=
|
golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4=
|
||||||
golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s=
|
golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
|
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
|
||||||
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
|
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[plugin]
|
[plugin]
|
||||||
description = "dokku core buildpacks plugin"
|
description = "dokku core buildpacks plugin"
|
||||||
version = "0.35.16"
|
version = "0.36.2"
|
||||||
[plugin.config]
|
[plugin.config]
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ func CommandSetProperty(appName string, property string, value string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
apps, err := common.DokkuApps()
|
apps, err := common.DokkuApps()
|
||||||
if err != nil {
|
if err != nil && !errors.Is(err, common.NoAppsExist) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
for _, app := range apps {
|
for _, app := range apps {
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
FROM lucaslorentz/caddy-docker-proxy:2.9
|
FROM lucaslorentz/caddy-docker-proxy:2.10
|
||||||
@@ -133,7 +133,9 @@ cmd-caddy-start() {
|
|||||||
|
|
||||||
fn-plugin-property-write "caddy" "--global" "proxy-status" "started"
|
fn-plugin-property-write "caddy" "--global" "proxy-status" "started"
|
||||||
fn-caddy-template-compose-file "$TMP_COMPOSE_FILE"
|
fn-caddy-template-compose-file "$TMP_COMPOSE_FILE"
|
||||||
"$DOCKER_BIN" compose -f "$TMP_COMPOSE_FILE" -p caddy up -d --quiet-pull
|
if ! "$PLUGIN_CORE_AVAILABLE_PATH/common/common" compose-up "caddy" "$TMP_COMPOSE_FILE"; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd-caddy-stop() {
|
cmd-caddy-stop() {
|
||||||
@@ -150,5 +152,7 @@ cmd-caddy-stop() {
|
|||||||
|
|
||||||
fn-plugin-property-write "caddy" "--global" "proxy-status" "stopped"
|
fn-plugin-property-write "caddy" "--global" "proxy-status" "stopped"
|
||||||
fn-caddy-template-compose-file "$TMP_COMPOSE_FILE"
|
fn-caddy-template-compose-file "$TMP_COMPOSE_FILE"
|
||||||
"$DOCKER_BIN" compose -f "$TMP_COMPOSE_FILE" -p caddy down --remove-orphans
|
if ! "$PLUGIN_CORE_AVAILABLE_PATH/common/common" compose-down "caddy" "$TMP_COMPOSE_FILE"; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ trigger-caddy-vhosts-docker-args-process-deploy() {
|
|||||||
declare desc="nginx-vhosts core-post-deploy plugin trigger"
|
declare desc="nginx-vhosts core-post-deploy plugin trigger"
|
||||||
declare trigger="docker-args-process-deploy"
|
declare trigger="docker-args-process-deploy"
|
||||||
declare APP="$1" IMAGE_SOURCE_TYPE="$2" IMAGE_TAG="$3" PROC_TYPE="$4" CONTAINER_INDEX="$5"
|
declare APP="$1" IMAGE_SOURCE_TYPE="$2" IMAGE_TAG="$3" PROC_TYPE="$4" CONTAINER_INDEX="$5"
|
||||||
local app_domains caddy_domains is_app_listening letsencrypt_email output proxy_container_port proxy_host_port port_map proxy_scheme proxy_schemes scheme tls_internal
|
local app_domains caddy_domains is_app_listening letsencrypt_email output proxy_container_port proxy_host_port port_map proxy_scheme proxy_schemes scheme tls_internal label_key
|
||||||
local proxy_container_http_port proxy_container_http_port_candidate proxy_host_http_port_candidate
|
local proxy_container_http_port proxy_container_http_port_candidate proxy_host_http_port_candidate
|
||||||
local proxy_container_https_port proxy_container_https_port_candidate proxy_host_https_port_candidate
|
local proxy_container_https_port proxy_container_https_port_candidate proxy_host_https_port_candidate
|
||||||
local STDIN=$(cat)
|
local STDIN=$(cat)
|
||||||
@@ -88,13 +88,14 @@ trigger-caddy-vhosts-docker-args-process-deploy() {
|
|||||||
if [[ -n "$is_app_listening" ]] && [[ -n "$caddy_domains" ]]; then
|
if [[ -n "$is_app_listening" ]] && [[ -n "$caddy_domains" ]]; then
|
||||||
has_443_mapping=false
|
has_443_mapping=false
|
||||||
tls_internal="$(fn-caddy-tls-internal)"
|
tls_internal="$(fn-caddy-tls-internal)"
|
||||||
|
label_key="$(fn-caddy-label-key "$APP")"
|
||||||
if [[ -n "$proxy_container_https_port" ]] || [[ -n "$proxy_container_https_port_candidate" ]]; then
|
if [[ -n "$proxy_container_https_port" ]] || [[ -n "$proxy_container_https_port_candidate" ]]; then
|
||||||
has_443_mapping=true
|
has_443_mapping=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ssl_warning_mapping="https:443"
|
ssl_warning_mapping="https:443"
|
||||||
if [[ "$tls_internal" == "true" ]]; then
|
if [[ "$tls_internal" == "true" ]]; then
|
||||||
output="--label caddy.tls=internal"
|
output="--label ${label_key}.tls=internal"
|
||||||
if [[ "$has_443_mapping" == "false" ]]; then
|
if [[ "$has_443_mapping" == "false" ]]; then
|
||||||
ssl_warning_mapping="http:80"
|
ssl_warning_mapping="http:80"
|
||||||
proxy_host_https_port_candidate="$proxy_host_http_port_candidate"
|
proxy_host_https_port_candidate="$proxy_host_http_port_candidate"
|
||||||
@@ -105,7 +106,7 @@ trigger-caddy-vhosts-docker-args-process-deploy() {
|
|||||||
|
|
||||||
scheme="http"
|
scheme="http"
|
||||||
if [[ -n "$letsencrypt_email" ]] && [[ "$has_443_mapping" == "true" ]]; then
|
if [[ -n "$letsencrypt_email" ]] && [[ "$has_443_mapping" == "true" ]]; then
|
||||||
output="--label 'caddy=${caddy_domains}'"
|
output="--label '${label_key}=${caddy_domains}'"
|
||||||
scheme="https"
|
scheme="https"
|
||||||
if [[ -z "$proxy_container_https_port" ]]; then
|
if [[ -z "$proxy_container_https_port" ]]; then
|
||||||
warning_scheme="$(awk -F ':' '{ print $1 }' <<<"$ssl_warning_mapping")"
|
warning_scheme="$(awk -F ':' '{ print $1 }' <<<"$ssl_warning_mapping")"
|
||||||
@@ -114,17 +115,17 @@ trigger-caddy-vhosts-docker-args-process-deploy() {
|
|||||||
proxy_container_https_port="$proxy_container_https_port_candidate"
|
proxy_container_https_port="$proxy_container_https_port_candidate"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
output="$output --label \"caddy.reverse_proxy={{ upstreams $proxy_container_https_port }}\""
|
output="$output --label \"${label_key}.reverse_proxy={{ upstreams $proxy_container_https_port }}\""
|
||||||
elif [[ -n "$proxy_container_http_port" ]] || [[ -n "$proxy_container_http_port_candidate" ]]; then
|
elif [[ -n "$proxy_container_http_port" ]] || [[ -n "$proxy_container_http_port_candidate" ]]; then
|
||||||
caddy_domains="${caddy_domains//, /:80, }"
|
caddy_domains="${caddy_domains//, /:80, }"
|
||||||
output="--label 'caddy=${caddy_domains}:80'"
|
output="--label '${label_key}=${caddy_domains}:80'"
|
||||||
if [[ -z "$proxy_container_http_port" ]]; then
|
if [[ -z "$proxy_container_http_port" ]]; then
|
||||||
dokku_log_warn "Warning: http:80 port mapping not found"
|
dokku_log_warn "Warning: http:80 port mapping not found"
|
||||||
dokku_log_warn "Utilizing first http port mapping, http:$proxy_host_http_port_candidate:$proxy_container_http_port_candidate"
|
dokku_log_warn "Utilizing first http port mapping, http:$proxy_host_http_port_candidate:$proxy_container_http_port_candidate"
|
||||||
proxy_container_http_port="$proxy_container_http_port_candidate"
|
proxy_container_http_port="$proxy_container_http_port_candidate"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
output="$output --label \"caddy.reverse_proxy={{ upstreams $proxy_container_http_port }}\""
|
output="$output --label \"${label_key}.reverse_proxy={{ upstreams $proxy_container_http_port }}\""
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -71,3 +71,8 @@ fn-caddy-tls-internal() {
|
|||||||
declare APP="$1"
|
declare APP="$1"
|
||||||
fn-plugin-property-get-default "caddy" "$APP" "tls-internal" "false"
|
fn-plugin-property-get-default "caddy" "$APP" "tls-internal" "false"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn-caddy-label-key() {
|
||||||
|
declare APP="$1"
|
||||||
|
fn-plugin-property-get-default "caddy" "$APP" "label-key" "caddy"
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[plugin]
|
[plugin]
|
||||||
description = "dokku core caddy-vhosts plugin"
|
description = "dokku core caddy-vhosts plugin"
|
||||||
version = "0.35.16"
|
version = "0.36.2"
|
||||||
[plugin.config]
|
[plugin.config]
|
||||||
|
|||||||
@@ -9,13 +9,13 @@ cmd-caddy-set() {
|
|||||||
declare cmd="caddy:set"
|
declare cmd="caddy:set"
|
||||||
[[ "$1" == "$cmd" ]] && shift 1
|
[[ "$1" == "$cmd" ]] && shift 1
|
||||||
declare APP="$1" KEY="$2" VALUE="$3"
|
declare APP="$1" KEY="$2" VALUE="$3"
|
||||||
local VALID_KEYS=("image" "letsencrypt-email" "letsencrypt-server" "log-level" "polling-interval" "tls-internal")
|
local VALID_KEYS=("image" "letsencrypt-email" "letsencrypt-server" "log-level" "polling-interval" "label-key" "tls-internal")
|
||||||
local GLOBAL_KEYS=("image" "letsencrypt-email" "letsencrypt-server" "log-level" "polling-interval")
|
local GLOBAL_KEYS=("image" "letsencrypt-email" "letsencrypt-server" "log-level" "polling-interval")
|
||||||
|
|
||||||
[[ -z "$KEY" ]] && dokku_log_fail "No key specified"
|
[[ -z "$KEY" ]] && dokku_log_fail "No key specified"
|
||||||
|
|
||||||
if ! fn-in-array "$KEY" "${VALID_KEYS[@]}"; then
|
if ! fn-in-array "$KEY" "${VALID_KEYS[@]}"; then
|
||||||
dokku_log_fail "Invalid key specified, valid keys include: image letsencrypt-email letsencrypt-server log-level polling-interval tls-internal"
|
dokku_log_fail "Invalid key specified, valid keys include: image letsencrypt-email letsencrypt-server log-level polling-interval label-key tls-internal"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! fn-in-array "$KEY" "${GLOBAL_KEYS[@]}"; then
|
if ! fn-in-array "$KEY" "${GLOBAL_KEYS[@]}"; then
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[plugin]
|
[plugin]
|
||||||
description = "dokku core certificate management plugin"
|
description = "dokku core certificate management plugin"
|
||||||
version = "0.35.16"
|
version = "0.36.2"
|
||||||
[plugin.config]
|
[plugin.config]
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[plugin]
|
[plugin]
|
||||||
description = "dokku core checks plugin"
|
description = "dokku core checks plugin"
|
||||||
version = "0.35.16"
|
version = "0.36.2"
|
||||||
[plugin.config]
|
[plugin.config]
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"unicode"
|
"unicode"
|
||||||
|
|
||||||
|
"github.com/otiai10/copy"
|
||||||
"github.com/ryanuber/columnize"
|
"github.com/ryanuber/columnize"
|
||||||
"golang.org/x/sync/errgroup"
|
"golang.org/x/sync/errgroup"
|
||||||
)
|
)
|
||||||
@@ -74,6 +75,298 @@ func CommandUsage(helpHeader string, helpContent string) {
|
|||||||
fmt.Println(columnize.Format(content, config))
|
fmt.Println(columnize.Format(content, config))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CorePostDeployPath is a file or directory that was extracted
|
||||||
|
type CorePostDeployPath struct {
|
||||||
|
// IsDirectory is whether the source is a directory
|
||||||
|
IsDirectory bool
|
||||||
|
|
||||||
|
// Path is the name of the file or directory
|
||||||
|
Path string
|
||||||
|
}
|
||||||
|
|
||||||
|
// CorePostDeployInput is the input for the CorePostDeploy function
|
||||||
|
type CorePostDeployInput struct {
|
||||||
|
// AppName is the name of the app
|
||||||
|
AppName string
|
||||||
|
|
||||||
|
// Destination is the destination directory
|
||||||
|
Destination string
|
||||||
|
|
||||||
|
// PluginName is the name of the plugin that is deploying the file or directory
|
||||||
|
PluginName string
|
||||||
|
|
||||||
|
// ExtractedPaths is the list of paths that were extracted
|
||||||
|
ExtractedPaths []CorePostDeployPath
|
||||||
|
}
|
||||||
|
|
||||||
|
// CorePostDeploy moves extracted paths to the destination directory
|
||||||
|
// and removes any existing files or directories that were not extracted
|
||||||
|
//
|
||||||
|
// CorePostDeploy(CorePostDeployInput{
|
||||||
|
// AppName: "my-app",
|
||||||
|
// Destination: "/var/lib/dokku/data/my-app",
|
||||||
|
// ExtractedPaths: []CorePostDeployPath{
|
||||||
|
// {Name: "app.json", IsDirectory: false},
|
||||||
|
// {Name: "kustomization", IsDirectory: true},
|
||||||
|
// },
|
||||||
|
// })
|
||||||
|
func CorePostDeploy(input CorePostDeployInput) error {
|
||||||
|
if input.PluginName == "" {
|
||||||
|
return fmt.Errorf("Missing required PluginName in CorePostDeploy")
|
||||||
|
}
|
||||||
|
|
||||||
|
if input.AppName == "" {
|
||||||
|
return fmt.Errorf("Missing required AppName in CorePostDeploy for plugin %v", input.PluginName)
|
||||||
|
}
|
||||||
|
|
||||||
|
if input.Destination == "" {
|
||||||
|
return fmt.Errorf("Missing required Destination in CorePostDeploy for plugin %v", input.PluginName)
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, extractedPath := range input.ExtractedPaths {
|
||||||
|
if extractedPath.Path == "" {
|
||||||
|
return fmt.Errorf("Missing required Name in CorePostDeploy for index %v for plugin %v", i, input.PluginName)
|
||||||
|
}
|
||||||
|
|
||||||
|
existingPath := filepath.Join(input.Destination, extractedPath.Path)
|
||||||
|
processSpecificPath := fmt.Sprintf("%s.%s", existingPath, os.Getenv("DOKKU_PID"))
|
||||||
|
|
||||||
|
if extractedPath.IsDirectory {
|
||||||
|
if DirectoryExists(processSpecificPath) {
|
||||||
|
if err := os.RemoveAll(existingPath); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := os.Rename(processSpecificPath, existingPath); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else if DirectoryExists(fmt.Sprintf("%s.missing", processSpecificPath)) {
|
||||||
|
if err := os.RemoveAll(fmt.Sprintf("%s.missing", processSpecificPath)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if DirectoryExists(existingPath) {
|
||||||
|
if err := os.RemoveAll(existingPath); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if FileExists(processSpecificPath) {
|
||||||
|
if err := os.Rename(processSpecificPath, existingPath); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else if FileExists(fmt.Sprintf("%s.missing", processSpecificPath)) {
|
||||||
|
if err := os.Remove(fmt.Sprintf("%s.missing", processSpecificPath)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if FileExists(existingPath) {
|
||||||
|
if err := os.Remove(existingPath); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// CorePostExtractValidator is a function that validates the file or directory
|
||||||
|
type CorePostExtractValidator func(appName string, path string) error
|
||||||
|
|
||||||
|
// CorePostExtractToExtract is a file or directory to extract
|
||||||
|
type CorePostExtractToExtract struct {
|
||||||
|
// Destination is an optional alias destination path
|
||||||
|
// If not provided, the Path will be used as the destination
|
||||||
|
Destination string
|
||||||
|
|
||||||
|
// IsDirectory is whether the source is a directory
|
||||||
|
IsDirectory bool
|
||||||
|
|
||||||
|
// Name is the common name of the file or directory to extract
|
||||||
|
Name string
|
||||||
|
|
||||||
|
// Path is the path to the file or directory to extract
|
||||||
|
Path string
|
||||||
|
|
||||||
|
// Validator is a function that validates the file or directory
|
||||||
|
Validator CorePostExtractValidator
|
||||||
|
}
|
||||||
|
|
||||||
|
// CorePostExtractInput is the input for the CorePostExtract function
|
||||||
|
type CorePostExtractInput struct {
|
||||||
|
// AppName is the name of the app
|
||||||
|
AppName string
|
||||||
|
|
||||||
|
// BuildDir is the optional build directory to extract from
|
||||||
|
BuildDir string
|
||||||
|
|
||||||
|
// DestinationDir is the destination directory
|
||||||
|
Destination string
|
||||||
|
|
||||||
|
// PluginName is the name of the plugin that is extracting the file or directory
|
||||||
|
PluginName string
|
||||||
|
|
||||||
|
// SourceWorkDir is the source work directory
|
||||||
|
SourceWorkDir string
|
||||||
|
|
||||||
|
// ToExtract is a list of files or directories to extract
|
||||||
|
ToExtract []CorePostExtractToExtract
|
||||||
|
}
|
||||||
|
|
||||||
|
// CorePostExtract extracts files or directories from a source work directory to a destination directory
|
||||||
|
//
|
||||||
|
// CorePostExtract(CorePostExtractInput{
|
||||||
|
// AppName: "my-app",
|
||||||
|
// SourceWorkDir: "/tmp/my-app-source",
|
||||||
|
// Destination: "/var/lib/dokku/data/my-app",
|
||||||
|
// ToExtract: []CorePostExtractToExtract{
|
||||||
|
// {Path: "app2.json", IsDirectory: false, Name: "app.json"},
|
||||||
|
// {Path: "config/kustomize", IsDirectory: true, Destination: "kustomization"},
|
||||||
|
// },
|
||||||
|
// })
|
||||||
|
func CorePostExtract(input CorePostExtractInput) error {
|
||||||
|
if input.PluginName == "" {
|
||||||
|
return fmt.Errorf("Missing required PluginName in CorePostExtract")
|
||||||
|
}
|
||||||
|
|
||||||
|
if input.AppName == "" {
|
||||||
|
return fmt.Errorf("Missing required AppName in CorePostExtract for plugin %v", input.PluginName)
|
||||||
|
}
|
||||||
|
|
||||||
|
if input.Destination == "" {
|
||||||
|
return fmt.Errorf("Missing required Destination in CorePostExtract for plugin %v", input.PluginName)
|
||||||
|
}
|
||||||
|
|
||||||
|
if input.SourceWorkDir == "" {
|
||||||
|
return fmt.Errorf("Missing required SourceWorkDir in CorePostExtract for plugin %v", input.PluginName)
|
||||||
|
}
|
||||||
|
|
||||||
|
results, _ := CallPlugnTrigger(PlugnTriggerInput{
|
||||||
|
Trigger: "git-get-property",
|
||||||
|
Args: []string{input.AppName, "source-image"},
|
||||||
|
})
|
||||||
|
sourceImage := results.StdoutContents()
|
||||||
|
|
||||||
|
for i, toExtract := range input.ToExtract {
|
||||||
|
if toExtract.Name == "" {
|
||||||
|
return fmt.Errorf("Name is required for index %v in CorePostExtract for plugin %v", i, input.PluginName)
|
||||||
|
}
|
||||||
|
|
||||||
|
if toExtract.Path == "" {
|
||||||
|
return fmt.Errorf("Path is required for index %v in CorePostExtract for plugin %v", i, input.PluginName)
|
||||||
|
}
|
||||||
|
|
||||||
|
if toExtract.Destination == "" {
|
||||||
|
toExtract.Destination = toExtract.Path
|
||||||
|
}
|
||||||
|
|
||||||
|
sourcePath := filepath.Join(input.SourceWorkDir, toExtract.Path)
|
||||||
|
repoDefaultSourcePath := filepath.Join(input.SourceWorkDir, toExtract.Name)
|
||||||
|
imageSourcePath := toExtract.Path
|
||||||
|
if input.BuildDir != "" {
|
||||||
|
sourcePath = filepath.Join(input.SourceWorkDir, input.BuildDir, toExtract.Path)
|
||||||
|
repoDefaultSourcePath = filepath.Join(input.SourceWorkDir, input.BuildDir, toExtract.Name)
|
||||||
|
imageSourcePath = filepath.Join(input.BuildDir, toExtract.Path)
|
||||||
|
}
|
||||||
|
|
||||||
|
destination := filepath.Join(input.Destination, toExtract.Destination)
|
||||||
|
processSpecificDestination := fmt.Sprintf("%s.%s", destination, os.Getenv("DOKKU_PID"))
|
||||||
|
missingDestination := fmt.Sprintf("%s.missing", processSpecificDestination)
|
||||||
|
files, err := filepath.Glob(fmt.Sprintf("%s.*", destination))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, f := range files {
|
||||||
|
if err := os.Remove(f); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ignore if the path is empty
|
||||||
|
if toExtract.Path == "" {
|
||||||
|
if err := TouchFile(missingDestination); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if sourceImage == "" {
|
||||||
|
// ignore if the file does not exist
|
||||||
|
if toExtract.IsDirectory {
|
||||||
|
if !DirectoryExists(sourcePath) {
|
||||||
|
if sourcePath != repoDefaultSourcePath && DirectoryExists(repoDefaultSourcePath) {
|
||||||
|
if err := os.RemoveAll(repoDefaultSourcePath); err != nil {
|
||||||
|
return fmt.Errorf("Unable to remove existing %v: %s", toExtract.Name, err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := TouchFile(missingDestination); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := Copy(sourcePath, processSpecificDestination); err != nil {
|
||||||
|
return fmt.Errorf("Unable to extract %v from %v: %s", toExtract.Name, toExtract.Path, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if sourcePath != repoDefaultSourcePath {
|
||||||
|
if err := Copy(sourcePath, repoDefaultSourcePath); err != nil {
|
||||||
|
return fmt.Errorf("Unable to move %v into place: %s", toExtract.Name, err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if !FileExists(sourcePath) {
|
||||||
|
// delete the existing file if the user tried to override it with a non-existent file
|
||||||
|
if sourcePath != repoDefaultSourcePath && FileExists(repoDefaultSourcePath) {
|
||||||
|
if err := os.Remove(repoDefaultSourcePath); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := TouchFile(missingDestination); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := Copy(sourcePath, processSpecificDestination); err != nil {
|
||||||
|
return fmt.Errorf("Unable to extract %v from %v: %v", toExtract.Name, toExtract.Path, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if sourcePath != repoDefaultSourcePath {
|
||||||
|
// ensure the file in the repo is the same as the one the user specified
|
||||||
|
if err := copy.Copy(sourcePath, repoDefaultSourcePath); err != nil {
|
||||||
|
return fmt.Errorf("Unable to move %v into place: %v", toExtract.Name, err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if toExtract.IsDirectory {
|
||||||
|
|
||||||
|
if err := CopyDirFromImage(input.AppName, sourceImage, imageSourcePath, processSpecificDestination); err != nil {
|
||||||
|
return TouchFile(missingDestination)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if err := CopyFromImage(input.AppName, sourceImage, imageSourcePath, processSpecificDestination); err != nil {
|
||||||
|
return TouchFile(missingDestination)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// validate the file
|
||||||
|
if toExtract.Validator != nil {
|
||||||
|
if err := toExtract.Validator(input.AppName, processSpecificDestination); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// EnvWrap wraps a func with a setenv call and resets the value at the end
|
// EnvWrap wraps a func with a setenv call and resets the value at the end
|
||||||
func EnvWrap(fn func() error, environ map[string]string) error {
|
func EnvWrap(fn func() error, environ map[string]string) error {
|
||||||
oldEnviron := map[string]string{}
|
oldEnviron := map[string]string{}
|
||||||
@@ -578,7 +871,7 @@ func SuppressOutput(f errfunc) error {
|
|||||||
os.Stdout = rescueStdout
|
os.Stdout = rescueStdout
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf(string(out[:]))
|
fmt.Print(string(out[:]))
|
||||||
}
|
}
|
||||||
|
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -11,6 +11,63 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// ComposeUpInput is the input for the ComposeUp function
|
||||||
|
type ComposeUpInput struct {
|
||||||
|
ProjectName string
|
||||||
|
ComposeFile string
|
||||||
|
}
|
||||||
|
|
||||||
|
// ComposeUp executes a docker compose up command
|
||||||
|
func ComposeUp(input ComposeUpInput) error {
|
||||||
|
result, err := CallExecCommand(ExecCommandInput{
|
||||||
|
Command: DockerBin(),
|
||||||
|
Args: []string{
|
||||||
|
"compose",
|
||||||
|
"--file", input.ComposeFile,
|
||||||
|
"--project-name", input.ProjectName,
|
||||||
|
"up",
|
||||||
|
"--detach",
|
||||||
|
"--quiet-pull",
|
||||||
|
},
|
||||||
|
StreamStdio: true,
|
||||||
|
WorkingDirectory: "/tmp",
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil || result.ExitCode != 0 {
|
||||||
|
return fmt.Errorf("Unable to start compose project: %s", result.Stderr)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ComposeDownInput is the input for the ComposeDown function
|
||||||
|
type ComposeDownInput struct {
|
||||||
|
ProjectName string
|
||||||
|
ComposeFile string
|
||||||
|
}
|
||||||
|
|
||||||
|
// ComposeDown executes a docker compose down command
|
||||||
|
func ComposeDown(input ComposeDownInput) error {
|
||||||
|
result, err := CallExecCommand(ExecCommandInput{
|
||||||
|
Command: DockerBin(),
|
||||||
|
Args: []string{
|
||||||
|
"compose",
|
||||||
|
"--file", input.ComposeFile,
|
||||||
|
"--project-name", input.ProjectName,
|
||||||
|
"down",
|
||||||
|
"--remove-orphans",
|
||||||
|
},
|
||||||
|
StreamStdio: true,
|
||||||
|
WorkingDirectory: "/tmp",
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil || result.ExitCode != 0 {
|
||||||
|
return fmt.Errorf("Unable to stop %s: %s", input.ProjectName, result.Stderr)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// ContainerIsRunning checks to see if a container is running
|
// ContainerIsRunning checks to see if a container is running
|
||||||
func ContainerIsRunning(containerID string) bool {
|
func ContainerIsRunning(containerID string) bool {
|
||||||
b, err := DockerInspect(containerID, "'{{.State.Running}}'")
|
b, err := DockerInspect(containerID, "'{{.State.Running}}'")
|
||||||
@@ -94,6 +151,98 @@ func ContainerWaitTilReady(containerID string, timeout time.Duration) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CopyDirFromImage copies a directory from named image to destination
|
||||||
|
func CopyDirFromImage(appName string, image string, source string, destination string) error {
|
||||||
|
if !VerifyImage(image) {
|
||||||
|
return fmt.Errorf("Invalid docker image for copying content")
|
||||||
|
}
|
||||||
|
|
||||||
|
if !IsAbsPath(source) {
|
||||||
|
workDir := GetWorkingDir(appName, image)
|
||||||
|
if workDir != "" {
|
||||||
|
source = fmt.Sprintf("%s/%s", workDir, source)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tmpDir, err := os.MkdirTemp("", fmt.Sprintf("dokku-%s-%s", MustGetEnv("DOKKU_PID"), "CopyFromImage"))
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error creating temporary directory: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
if err := os.RemoveAll(tmpDir); err != nil {
|
||||||
|
LogWarn(fmt.Sprintf("Error removing temporary directory %s: %v\n", tmpDir, err))
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
globalRunArgs := MustGetEnv("DOKKU_GLOBAL_RUN_ARGS")
|
||||||
|
createLabelArgs := []string{"--label", fmt.Sprintf("com.dokku.app-name=%s", appName), globalRunArgs}
|
||||||
|
containerID, err := DockerContainerCreate(image, createLabelArgs)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Unable to create temporary container: %v", err)
|
||||||
|
}
|
||||||
|
defer ContainerRemove(containerID)
|
||||||
|
|
||||||
|
// docker cp exits with status 1 when run as non-root user when it tries to chown the file
|
||||||
|
// after successfully copying the file. Thus, we suppress stderr.
|
||||||
|
// ref: https://github.com/dotcloud/docker/issues/3986
|
||||||
|
result, err := CallExecCommand(ExecCommandInput{
|
||||||
|
Command: DockerBin(),
|
||||||
|
Args: []string{"container", "cp", "--quiet", fmt.Sprintf("%s:%s", containerID, source), tmpDir},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Unable to copy file %s from image: %w", source, err)
|
||||||
|
}
|
||||||
|
if result.ExitCode != 0 {
|
||||||
|
return fmt.Errorf("Unable to copy file %s from image: %v", source, result.StderrContents())
|
||||||
|
}
|
||||||
|
|
||||||
|
if !DirectoryExists(tmpDir) {
|
||||||
|
return fmt.Errorf("Unable to copy file %s from image: %v", source, result.StderrContents())
|
||||||
|
}
|
||||||
|
|
||||||
|
files, err := os.ReadDir(tmpDir)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Unable to read temporary directory: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, file := range files {
|
||||||
|
if file.IsDir() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceFile := fmt.Sprintf("%s/%s", tmpDir, file.Name())
|
||||||
|
destinationFile := fmt.Sprintf("%s/%s", destination, file.Name())
|
||||||
|
// workaround when owner is root. seems to only happen when running inside docker
|
||||||
|
CallExecCommand(ExecCommandInput{
|
||||||
|
Command: "dos2unix",
|
||||||
|
Args: []string{"-l", "-n", sourceFile, destinationFile},
|
||||||
|
}) // nolint: errcheck
|
||||||
|
|
||||||
|
// add trailing newline for certain places where file parsing depends on it
|
||||||
|
result, err = CallExecCommand(ExecCommandInput{
|
||||||
|
Command: "tail",
|
||||||
|
Args: []string{"-c1", destination},
|
||||||
|
})
|
||||||
|
if err != nil || result.ExitCode != 0 {
|
||||||
|
return fmt.Errorf("Unable to append trailing newline to copied file: %v", result.Stderr)
|
||||||
|
}
|
||||||
|
|
||||||
|
if result.Stdout != "" {
|
||||||
|
f, err := os.OpenFile(destination, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
if _, err := f.WriteString("\n"); err != nil {
|
||||||
|
return fmt.Errorf("Unable to append trailing newline to copied file: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// CopyFromImage copies a file from named image to destination
|
// CopyFromImage copies a file from named image to destination
|
||||||
func CopyFromImage(appName string, image string, source string, destination string) error {
|
func CopyFromImage(appName string, image string, source string, destination string) error {
|
||||||
if !VerifyImage(image) {
|
if !VerifyImage(image) {
|
||||||
|
|||||||
@@ -50,6 +50,9 @@ type ExecCommandInput struct {
|
|||||||
|
|
||||||
// Sudo runs the command with sudo -n -u root
|
// Sudo runs the command with sudo -n -u root
|
||||||
Sudo bool
|
Sudo bool
|
||||||
|
|
||||||
|
// WorkingDirectory is the working directory to run the command in
|
||||||
|
WorkingDirectory string
|
||||||
}
|
}
|
||||||
|
|
||||||
// ExecCommandResponse is the response for the ExecCommand function
|
// ExecCommandResponse is the response for the ExecCommand function
|
||||||
@@ -134,6 +137,10 @@ func CallExecCommandWithContext(ctx context.Context, input ExecCommandInput) (Ex
|
|||||||
DisableStdioBuffer: input.DisableStdioBuffer,
|
DisableStdioBuffer: input.DisableStdioBuffer,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if input.WorkingDirectory != "" {
|
||||||
|
cmd.Cwd = input.WorkingDirectory
|
||||||
|
}
|
||||||
|
|
||||||
if os.Getenv("DOKKU_TRACE") == "1" {
|
if os.Getenv("DOKKU_TRACE") == "1" {
|
||||||
argsSt := ""
|
argsSt := ""
|
||||||
if len(cmd.Args) > 0 {
|
if len(cmd.Args) > 0 {
|
||||||
|
|||||||
@@ -488,7 +488,6 @@ parse_args() {
|
|||||||
copy_from_image() {
|
copy_from_image() {
|
||||||
declare desc="copy file from named image to destination"
|
declare desc="copy file from named image to destination"
|
||||||
declare IMAGE="$1" SRC_FILE="$2" DST_FILE="$3"
|
declare IMAGE="$1" SRC_FILE="$2" DST_FILE="$3"
|
||||||
local WORK_DIR=""
|
|
||||||
|
|
||||||
if ! "$PLUGIN_CORE_AVAILABLE_PATH/common/common" copy-from-image "$APP" "$IMAGE" "$SRC_FILE" "$DST_FILE"; then
|
if ! "$PLUGIN_CORE_AVAILABLE_PATH/common/common" copy-from-image "$APP" "$IMAGE" "$SRC_FILE" "$DST_FILE"; then
|
||||||
return 1
|
return 1
|
||||||
@@ -498,56 +497,8 @@ copy_from_image() {
|
|||||||
copy_dir_from_image() {
|
copy_dir_from_image() {
|
||||||
declare desc="copy a directory from named image to destination"
|
declare desc="copy a directory from named image to destination"
|
||||||
declare IMAGE="$1" SRC_DIR="$2" DST_DIR="$3"
|
declare IMAGE="$1" SRC_DIR="$2" DST_DIR="$3"
|
||||||
local WORK_DIR=""
|
|
||||||
|
|
||||||
local DOCKER_CREATE_LABEL_ARGS="--label=com.dokku.app-name=$APP"
|
if ! "$PLUGIN_CORE_AVAILABLE_PATH/common/common" copy-dir-from-image "$APP" "$IMAGE" "$SRC_DIR" "$DST_DIR"; then
|
||||||
|
|
||||||
if verify_image "$IMAGE"; then
|
|
||||||
if ! is_abs_path "$SRC_DIR"; then
|
|
||||||
if is_image_cnb_based "$IMAGE"; then
|
|
||||||
WORKDIR="/workspace"
|
|
||||||
elif is_image_herokuish_based "$IMAGE" "$APP"; then
|
|
||||||
WORKDIR="/app"
|
|
||||||
else
|
|
||||||
WORKDIR="$("$DOCKER_BIN" image inspect --format '{{.Config.WorkingDir}}' "$IMAGE")"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -n "$WORKDIR" ]]; then
|
|
||||||
SRC_DIR="${WORKDIR}/${SRC_DIR}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
TMP_DIR_COMMAND_OUTPUT=$(mktemp -d "/tmp/dokku-${DOKKU_PID}-${FUNCNAME[0]}.XXXXXX")
|
|
||||||
trap "rm -rf '$TMP_DIR_COMMAND_OUTPUT' &>/dev/null || true" RETURN
|
|
||||||
|
|
||||||
local CID=$("$DOCKER_BIN" container create "${DOCKER_CREATE_LABEL_ARGS[@]}" $DOKKU_GLOBAL_RUN_ARGS "$IMAGE")
|
|
||||||
"$DOCKER_BIN" container cp "$CID:$SRC_DIR" "$TMP_DIR_COMMAND_OUTPUT" 2>/dev/null || true
|
|
||||||
"$DOCKER_BIN" container rm --force "$CID" &>/dev/null
|
|
||||||
plugn trigger scheduler-register-retired "$APP" "$CID"
|
|
||||||
|
|
||||||
# docker cp exits with status 1 when run as non-root user when it tries to chown the file
|
|
||||||
# after successfully copying the file. Thus, we suppress stderr.
|
|
||||||
# ref: https://github.com/dotcloud/docker/issues/3986
|
|
||||||
if [[ ! -d "$TMP_DIR_COMMAND_OUTPUT" ]]; then
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
pushd "$TMP_DIR_COMMAND_OUTPUT" >/dev/null
|
|
||||||
for filename in *; do
|
|
||||||
if [[ ! -f "$TMP_DIR_COMMAND_OUTPUT/$filename" ]]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# workaround for CHECKS file when owner is root. seems to only happen when running inside docker
|
|
||||||
dos2unix -l <"$TMP_DIR_COMMAND_OUTPUT/$filename" >"$DST_DIR/$filename"
|
|
||||||
|
|
||||||
# add trailing newline for certain places where file parsing depends on it
|
|
||||||
if [[ "$(tail -c1 "$DST_DIR/$filename")" != "" ]]; then
|
|
||||||
echo "" >>"$DST_DIR/$filename"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
popd &>/dev/null || pushd "/tmp" >/dev/null
|
|
||||||
else
|
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -719,7 +670,7 @@ dokku_receive() {
|
|||||||
IMAGE_SOURCE_TYPE="pack"
|
IMAGE_SOURCE_TYPE="pack"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
DOKKU_QUIET_OUTPUT=1 config_set --no-restart "$APP" DOKKU_APP_TYPE="$IMAGE_SOURCE_TYPE"
|
plugn trigger builder-set-property "$APP" "detected" "$IMAGE_SOURCE_TYPE"
|
||||||
if ! dokku_build "$APP" "$IMAGE_SOURCE_TYPE" "$TMP_WORK_DIR"; then
|
if ! dokku_build "$APP" "$IMAGE_SOURCE_TYPE" "$TMP_WORK_DIR"; then
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,22 +1,22 @@
|
|||||||
module github.com/dokku/dokku/plugins/common
|
module github.com/dokku/dokku/plugins/common
|
||||||
|
|
||||||
go 1.23.0
|
go 1.24.5
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/alexellis/go-execute/v2 v2.2.1
|
github.com/alexellis/go-execute/v2 v2.2.1
|
||||||
github.com/fatih/color v1.18.0
|
github.com/fatih/color v1.18.0
|
||||||
github.com/hashicorp/go-multierror v1.1.1
|
github.com/hashicorp/go-multierror v1.1.1
|
||||||
github.com/melbahja/goph v1.4.0
|
github.com/melbahja/goph v1.4.0
|
||||||
github.com/onsi/gomega v1.36.2
|
github.com/onsi/gomega v1.38.0
|
||||||
github.com/otiai10/copy v1.14.1
|
github.com/otiai10/copy v1.14.1
|
||||||
github.com/ryanuber/columnize v2.1.2+incompatible
|
github.com/ryanuber/columnize v2.1.2+incompatible
|
||||||
github.com/spf13/pflag v1.0.6
|
github.com/spf13/pflag v1.0.7
|
||||||
golang.org/x/crypto v0.35.0
|
golang.org/x/crypto v0.41.0
|
||||||
golang.org/x/sync v0.12.0
|
golang.org/x/sync v0.16.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/google/go-cmp v0.6.0 // indirect
|
github.com/google/go-cmp v0.7.0 // indirect
|
||||||
github.com/hashicorp/errwrap v1.0.0 // indirect
|
github.com/hashicorp/errwrap v1.0.0 // indirect
|
||||||
github.com/kr/fs v0.1.0 // indirect
|
github.com/kr/fs v0.1.0 // indirect
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
@@ -24,8 +24,8 @@ require (
|
|||||||
github.com/otiai10/mint v1.6.3 // indirect
|
github.com/otiai10/mint v1.6.3 // indirect
|
||||||
github.com/pkg/errors v0.9.1 // indirect
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
github.com/pkg/sftp v1.13.5 // indirect
|
github.com/pkg/sftp v1.13.5 // indirect
|
||||||
golang.org/x/net v0.33.0 // indirect
|
golang.org/x/net v0.42.0 // indirect
|
||||||
golang.org/x/sys v0.30.0 // indirect
|
golang.org/x/sys v0.35.0 // indirect
|
||||||
golang.org/x/text v0.22.0 // indirect
|
golang.org/x/text v0.28.0 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -8,10 +8,10 @@ github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
|
|||||||
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||||
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
|
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
|
||||||
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
|
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
|
||||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||||
github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg=
|
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8=
|
||||||
github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
|
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA=
|
||||||
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
|
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
|
||||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
||||||
@@ -25,10 +25,10 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE
|
|||||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
github.com/melbahja/goph v1.4.0 h1:z0PgDbBFe66lRYl3v5dGb9aFgPy0kotuQ37QOwSQFqs=
|
github.com/melbahja/goph v1.4.0 h1:z0PgDbBFe66lRYl3v5dGb9aFgPy0kotuQ37QOwSQFqs=
|
||||||
github.com/melbahja/goph v1.4.0/go.mod h1:uG+VfK2Dlhk+O32zFrRlc3kYKTlV6+BtvPWd/kK7U68=
|
github.com/melbahja/goph v1.4.0/go.mod h1:uG+VfK2Dlhk+O32zFrRlc3kYKTlV6+BtvPWd/kK7U68=
|
||||||
github.com/onsi/ginkgo/v2 v2.22.1 h1:QW7tbJAUDyVDVOM5dFa7qaybo+CRfR7bemlQUN6Z8aM=
|
github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus=
|
||||||
github.com/onsi/ginkgo/v2 v2.22.1/go.mod h1:S6aTpoRsSq2cZOd+pssHAlKW/Q/jZt6cPrPlnj4a1xM=
|
github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8=
|
||||||
github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
|
github.com/onsi/gomega v1.38.0 h1:c/WX+w8SLAinvuKKQFh77WEucCnPk4j2OTUr7lt7BeY=
|
||||||
github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
|
github.com/onsi/gomega v1.38.0/go.mod h1:OcXcwId0b9QsE7Y49u+BTrL4IdKOBOKnD6VQNTJEB6o=
|
||||||
github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8=
|
github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8=
|
||||||
github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I=
|
github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I=
|
||||||
github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs=
|
github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs=
|
||||||
@@ -41,30 +41,32 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
|
|||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/ryanuber/columnize v2.1.2+incompatible h1:C89EOx/XBWwIXl8wm8OPJBd7kPF25UfsK2X7Ph/zCAk=
|
github.com/ryanuber/columnize v2.1.2+incompatible h1:C89EOx/XBWwIXl8wm8OPJBd7kPF25UfsK2X7Ph/zCAk=
|
||||||
github.com/ryanuber/columnize v2.1.2+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
github.com/ryanuber/columnize v2.1.2+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
||||||
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
|
github.com/spf13/pflag v1.0.7 h1:vN6T9TfwStFPFM5XzjsvmzZkLuaLX+HS+0SeFLRgU6M=
|
||||||
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
github.com/spf13/pflag v1.0.7/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
|
go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs=
|
||||||
|
go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
|
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
|
||||||
golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
|
golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
|
||||||
golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
|
golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
|
golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
|
||||||
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
|
golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
|
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
|
||||||
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@@ -75,25 +77,25 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
|
||||||
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU=
|
golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4=
|
||||||
golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s=
|
golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
|
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
|
||||||
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
|
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
|
golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0=
|
||||||
golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
|
golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
|||||||
@@ -108,6 +108,17 @@ func IsAbsPath(path string) bool {
|
|||||||
return strings.HasPrefix(path, "/")
|
return strings.HasPrefix(path, "/")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsSymlink returns true if the path is a symlink
|
||||||
|
// if lstat fails, it returns false
|
||||||
|
func IsSymlink(path string) bool {
|
||||||
|
info, err := os.Lstat(path)
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return info.Mode()&os.ModeSymlink == os.ModeSymlink
|
||||||
|
}
|
||||||
|
|
||||||
// ListFilesWithPrefix lists files within a given path that have a given prefix
|
// ListFilesWithPrefix lists files within a given path that have a given prefix
|
||||||
func ListFilesWithPrefix(path string, prefix string) []string {
|
func ListFilesWithPrefix(path string, prefix string) []string {
|
||||||
names, err := os.ReadDir(path)
|
names, err := os.ReadDir(path)
|
||||||
@@ -152,7 +163,7 @@ func ReadFirstLine(filename string) (text string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetPermissionsInput is the input struct for SetPermissions
|
// SetPermissionInput is the input struct for SetPermissions
|
||||||
type SetPermissionInput struct {
|
type SetPermissionInput struct {
|
||||||
Filename string
|
Filename string
|
||||||
GroupName string
|
GroupName string
|
||||||
@@ -195,26 +206,36 @@ func SetPermissions(input SetPermissionInput) error {
|
|||||||
return os.Chown(input.Filename, uid, gid)
|
return os.Chown(input.Filename, uid, gid)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TouchDir creates an empty directory at the specified path
|
||||||
|
func TouchDir(filename string) error {
|
||||||
|
mode := os.FileMode(0700)
|
||||||
|
return os.MkdirAll(filename, mode)
|
||||||
|
}
|
||||||
|
|
||||||
// TouchFile creates an empty file at the specified path
|
// TouchFile creates an empty file at the specified path
|
||||||
func TouchFile(filename string) error {
|
func TouchFile(filename string) error {
|
||||||
mode := os.FileMode(0600)
|
mode := os.FileMode(0600)
|
||||||
file, err := os.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, mode)
|
file, err := os.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, mode)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return fmt.Errorf("Error opening file %v for creation: %v", filename, err)
|
||||||
}
|
}
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
|
|
||||||
if err := file.Chmod(mode); err != nil {
|
if err := file.Chmod(mode); err != nil {
|
||||||
return err
|
return fmt.Errorf("Error setting chown for new file %v: %v", filename, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return SetPermissions(SetPermissionInput{
|
if err := SetPermissions(SetPermissionInput{
|
||||||
Filename: filename,
|
Filename: filename,
|
||||||
Mode: mode,
|
Mode: mode,
|
||||||
})
|
}); err != nil {
|
||||||
|
return fmt.Errorf("Error setting permissions for new file %v: %v", filename, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteSliceToFile writes a slice of strings to a file
|
// WriteSliceToFileInput writes a slice of strings to a file
|
||||||
type WriteSliceToFileInput struct {
|
type WriteSliceToFileInput struct {
|
||||||
Filename string
|
Filename string
|
||||||
GroupName string
|
GroupName string
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[plugin]
|
[plugin]
|
||||||
description = "dokku core common plugin"
|
description = "dokku core common plugin"
|
||||||
version = "0.35.16"
|
version = "0.36.2"
|
||||||
[plugin.config]
|
[plugin.config]
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user