Compare commits

...

262 Commits

Author SHA1 Message Date
LinuxServer-CI
513bae9473 Bot Updating Package Versions 2023-07-02 06:53:22 +00:00
LinuxServer-CI
a07eafe4e3 Bot Updating Templated Files 2023-07-02 06:50:46 +00:00
LinuxServer-CI
a9a6e5f35d Bot Updating Package Versions 2023-06-18 09:59:08 +00:00
Roxedus
02b69402a4 Merge pull request #247 from linuxserver/libtorrentv1-3.18 2023-06-18 11:56:18 +02:00
LinuxServer-CI
e746ca1838 Bot Updating Package Versions 2023-06-18 06:51:24 +00:00
TheSpad
c505363d41 Rebase to 3.18, deprecate armhf 2023-06-17 14:35:17 +01:00
LinuxServer-CI
e2af3e35d6 Bot Updating Package Versions 2023-06-10 20:54:03 +00:00
LinuxServer-CI
bce3884d59 Bot Updating Templated Files 2023-06-10 20:50:59 +00:00
Adam
97c2077aa4 Merge pull request #245 from linuxserver/libtorrent-unrar 2023-06-10 21:48:32 +01:00
TheSpad
0755b20a13 Bump unrar to 6.2.8 (libtorrentv1) 2023-06-10 21:31:29 +01:00
LinuxServer-CI
8a49243b56 Bot Updating Package Versions 2023-06-04 06:53:26 +00:00
LinuxServer-CI
921a6d1e84 Bot Updating Package Versions 2023-05-28 06:53:44 +00:00
LinuxServer-CI
a0de273f3e Bot Updating Templated Files 2023-05-28 06:50:54 +00:00
LinuxServer-CI
d9ca668e51 Bot Updating Package Versions 2023-05-21 06:51:26 +00:00
LinuxServer-CI
137ca6ca74 Bot Updating Package Versions 2023-05-07 06:51:44 +00:00
LinuxServer-CI
a4c145c268 Bot Updating Templated Files 2023-04-30 06:51:21 +00:00
LinuxServer-CI
1d98c327af Bot Updating Templated Files 2023-04-30 06:50:23 +00:00
LinuxServer-CI
13b6c54b4f Bot Updating Package Versions 2023-04-23 06:50:49 +00:00
LinuxServer-CI
66d950a135 Bot Updating Package Versions 2023-04-16 01:53:34 -05:00
LinuxServer-CI
632e534c91 Bot Updating Package Versions 2023-04-09 01:51:56 -05:00
LinuxServer-CI
b2b97e43ab Bot Updating Package Versions 2023-04-02 22:53:12 -05:00
LinuxServer-CI
bdb50ffd84 Bot Updating Templated Files 2023-04-02 22:50:03 -05:00
LinuxServer-CI
fa4737da3a Bot Updating Templated Files 2023-04-02 22:48:22 -05:00
LinuxServer-CI
49433013a2 Bot Updating Templated Files 2023-04-02 22:46:50 -05:00
LinuxServer-CI
ca2cedf6c1 Bot Updating Package Versions 2023-03-26 22:47:49 -05:00
LinuxServer-CI
8926734ef4 Bot Updating Package Versions 2023-03-05 21:49:47 -06:00
LinuxServer-CI
3d01e03440 Bot Updating Templated Files 2023-03-05 21:46:54 -06:00
LinuxServer-CI
db1b1f1c94 Bot Updating Package Versions 2023-02-26 13:01:18 +01:00
LinuxServer-CI
d1925b5e13 Bot Updating Templated Files 2023-02-26 05:58:11 -06:00
Adam
4a9b6f298d Merge pull request #231 from SinTan1729/libtorrentv1 2023-02-26 11:56:35 +00:00
SinTan1729
3a90a5eec0 Add qt6-qtbase-sqlite to support SQLite database for resume files 2023-02-25 18:11:28 -06:00
LinuxServer-CI
e43f486d16 Bot Updating Package Versions 2023-02-19 21:47:41 -06:00
LinuxServer-CI
7efc5801dc Bot Updating Package Versions 2023-02-12 12:53:33 -06:00
LinuxServer-CI
39a079c766 Bot Updating Templated Files 2023-02-12 12:49:36 -06:00
LinuxServer-CI
7cc3e7d627 Bot Updating Templated Files 2023-02-12 12:48:15 -06:00
LinuxServer-CI
eb03ce2bbe Bot Updating Package Versions 2023-01-23 04:47:35 +01:00
LinuxServer-CI
8836919a6d Bot Updating Package Versions 2023-01-15 16:01:12 +01:00
LinuxServer-CI
b211f562d7 Bot Updating Templated Files 2023-01-15 15:57:32 +01:00
Adam
e3b8e0e41f Merge pull request #221 from linuxserver/buildbase-v1 2023-01-15 14:56:16 +00:00
TheSpad
00af514426 Rebase to 3.17, use build-base for unrar build. 2023-01-15 14:32:17 +00:00
LinuxServer-CI
c9ac84c3e4 Bot Updating Package Versions 2023-01-01 21:47:30 -06:00
LinuxServer-CI
862d075e4f Bot Updating Package Versions 2022-12-11 21:47:21 -06:00
LinuxServer-CI
15e7bffaa1 Bot Updating Package Versions 2022-11-29 11:43:18 -06:00
LinuxServer-CI
976764d73a Bot Updating Templated Files 2022-11-29 11:40:44 -06:00
Adam
40b6cde6c4 Merge pull request #202 from linuxserver/icu-libtorrentv1 2022-11-29 17:39:26 +00:00
TheSpad
d6955bc54d Only needs icu-libs, not the full package 2022-11-29 15:48:47 +00:00
TheSpad
6b57af6725 Add icu to support qbittorrent-cli 2022-11-29 15:47:03 +00:00
LinuxServer-CI
182367f4d3 Bot Updating Package Versions 2022-11-20 22:06:13 -06:00
LinuxServer-CI
af5eca6c29 Bot Updating Package Versions 2022-11-13 09:38:52 -06:00
LinuxServer-CI
5458155228 Bot Updating Templated Files 2022-11-13 09:35:38 -06:00
Adam
1b884bdbc1 Merge pull request #201 from linuxserver/lsiown-libtorrentv1 2022-11-13 15:34:07 +00:00
TheSpad
a80250f2ea Use lsiown for init 2022-11-12 14:23:56 +00:00
LinuxServer-CI
23f7ef7167 Bot Updating Package Versions 2022-11-07 05:27:27 +01:00
LinuxServer-CI
00d380478f Bot Updating Package Versions 2022-10-31 08:52:44 -05:00
Adam
88205f46fd Merge pull request #197 from linuxserver/libtorrent-initial 2022-10-31 13:49:20 +00:00
TheSpad
9ce3cbaa0d Initial commit 2022-10-30 14:46:27 +00:00
LinuxServer-CI
a10c1b8729 Bot Updating Package Versions 2022-10-23 08:30:00 -05:00
LinuxServer-CI
74008d71f2 Bot Updating Package Versions 2022-10-19 15:43:10 +02:00
LinuxServer-CI
f063e52eb9 Bot Updating Package Versions 2022-10-17 00:16:49 -05:00
Adam
134527e4a9 Merge pull request #195 from linuxserver/v3-tidyup 2022-10-10 22:53:18 +01:00
TheSpad
bc0d17401d Remove unnecessary packages 2022-10-10 22:15:05 +01:00
TheSpad
d97b2e7d4a Make init more consistent with s6v3 standard 2022-10-10 22:14:57 +01:00
LinuxServer-CI
60df08ba86 Bot Updating Package Versions 2022-10-10 00:11:55 -05:00
LinuxServer-CI
fe250e22db Bot Updating Package Versions 2022-10-03 06:35:43 +02:00
LinuxServer-CI
3816f56755 Bot Updating Package Versions 2022-09-26 07:18:42 +02:00
LinuxServer-CI
f1eac2644f Bot Updating Package Versions 2022-09-20 11:29:07 -05:00
Adam
384f7ba365 Merge pull request #192 from linuxserver/exec-master 2022-09-20 17:25:59 +01:00
TheSpad
c828bd5ccd Exec notify 2022-09-20 16:42:11 +01:00
LinuxServer-CI
dde6f08046 Bot Updating Package Versions 2022-09-19 00:19:09 -05:00
LinuxServer-CI
56ac0242f7 Bot Updating Templated Files 2022-09-19 07:15:49 +02:00
LinuxServer-CI
18d310d3c0 Bot Updating Package Versions 2022-09-12 07:17:07 +02:00
LinuxServer-CI
b0261130d1 Bot Updating Package Versions 2022-09-05 07:10:23 +02:00
LinuxServer-CI
38ce6e4eaf Bot Updating Package Versions 2022-08-31 15:52:36 -05:00
LinuxServer-CI
6483e582e8 Bot Updating Package Versions 2022-08-31 12:45:00 -05:00
LinuxServer-CI
61d98c0113 Bot Updating Templated Files 2022-08-31 19:42:20 +02:00
Adam
a8abbc12e2 v3ify qbittorrent image (#184) 2022-08-31 18:41:04 +01:00
LinuxServer-CI
97d4b22608 Bot Updating Package Versions 2022-08-29 07:11:28 +02:00
LinuxServer-CI
871008c306 Bot Updating Package Versions 2022-08-12 12:19:44 +02:00
LinuxServer-CI
6b27825bd7 Bot Updating Templated Files 2022-08-12 05:16:39 -05:00
Adam
a3ac4ce7a9 Merge pull request #186 from linuxserver/unrar617-master 2022-08-12 11:15:05 +01:00
TheSpad
beeb9de294 Bump unrar to 6.1.7 2022-08-12 10:35:36 +01:00
LinuxServer-CI
06bec27898 Bot Updating Package Versions 2022-08-07 23:21:33 -05:00
LinuxServer-CI
a081d82d11 Bot Updating Package Versions 2022-08-01 00:02:16 -05:00
LinuxServer-CI
5c73db523b Bot Updating Package Versions 2022-07-25 06:36:28 +02:00
LinuxServer-CI
5318d90428 Bot Updating Package Versions 2022-07-10 23:22:21 -05:00
LinuxServer-CI
d5e03be2cf Bot Updating Package Versions 2022-07-04 06:35:13 +02:00
LinuxServer-CI
ce85d8e0ce Bot Updating Package Versions 2022-06-16 21:03:29 -05:00
thelamer
b0576b6f80 rebase to alpine 3.16 from edge 2022-06-16 22:00:42 -04:00
LinuxServer-CI
bb25c8d32e Bot Updating Package Versions 2022-06-16 12:05:26 -05:00
LinuxServer-CI
4f68b52b04 Bot Updating Package Versions 2022-06-12 23:24:03 -05:00
LinuxServer-CI
72d7f0639c Bot Updating Package Versions 2022-06-05 23:09:21 -05:00
LinuxServer-CI
c0196b94a9 Bot Updating Package Versions 2022-05-31 01:51:26 +02:00
LinuxServer-CI
6c107b1b8e Bot Updating Package Versions 2022-05-26 14:49:48 -05:00
LinuxServer-CI
d688fd93ac Bot Updating Package Versions 2022-05-25 14:46:13 +02:00
Adam
cb886eabea Merge pull request #174 from linuxserver/qbt 2022-05-25 13:43:20 +01:00
TheSpad
10baef17ec Pull qbittorrent-cli from upstream repo 2022-05-25 13:20:51 +01:00
LinuxServer-CI
2196ea8947 Bot Updating Package Versions 2022-05-23 17:51:57 -05:00
LinuxServer-CI
27358397df Bot Updating Package Versions 2022-05-22 23:19:43 -05:00
LinuxServer-CI
7b1fd614bc Bot Updating Package Versions 2022-05-16 06:01:16 +02:00
LinuxServer-CI
151bd9ef20 Bot Updating Package Versions 2022-05-14 07:06:35 +02:00
LinuxServer-CI
1de14c6540 Bot Updating Package Versions 2022-05-08 23:09:54 -05:00
LinuxServer-CI
9e2f4c203c Bot Updating Package Versions 2022-05-02 06:42:55 +02:00
LinuxServer-CI
ff4883d743 Bot Updating Templated Files 2022-05-02 06:38:50 +02:00
LinuxServer-CI
8197ab7ad0 Bot Updating Templated Files 2022-05-02 06:37:41 +02:00
LinuxServer-CI
bf8e5f1962 Bot Updating Package Versions 2022-04-25 06:05:13 +02:00
LinuxServer-CI
987952046f Bot Updating Package Versions 2022-04-17 23:04:32 -05:00
LinuxServer-CI
f0938c4f2b Bot Updating Package Versions 2022-04-15 16:50:35 +02:00
LinuxServer-CI
d17662b2d7 Bot Updating Package Versions 2022-04-10 23:00:34 -05:00
LinuxServer-CI
565e33a035 Bot Updating Package Versions 2022-04-10 06:56:16 +02:00
LinuxServer-CI
f5d7576098 Bot Updating Package Versions 2022-04-03 22:57:29 -05:00
LinuxServer-CI
01863767be Bot Updating Templated Files 2022-03-27 13:36:28 +02:00
Roxedus
1f480ed6a9 Merge pull request #165 from mynameisbogdan/fix-ports-order
Fix ports order
2022-03-27 13:35:11 +02:00
Bogdan
aa8bf3811b fix ports order 2022-03-27 14:15:20 +03:00
LinuxServer-CI
6d4d5ae9d5 Bot Updating Package Versions 2022-03-26 17:51:55 -05:00
LinuxServer-CI
ac95fb5904 Bot Updating Package Versions 2022-03-25 06:49:43 +01:00
LinuxServer-CI
0358202857 Bot Updating Package Versions 2022-03-20 22:52:27 -05:00
LinuxServer-CI
52f469a40d Bot Updating Package Versions 2022-03-14 04:51:12 +01:00
LinuxServer-CI
c067dc6e28 Bot Updating Package Versions 2022-03-07 04:48:25 +01:00
LinuxServer-CI
e9c36e0989 Bot Updating Package Versions 2022-03-03 21:04:03 +01:00
thelamer
afe1de3e7f use bash wrapper for qbt and do not use single bin 2022-03-03 11:54:26 -08:00
thelamer
0ec11ff56a build unrar add 7zip and use qbt bins for alpine 2022-03-03 11:54:26 -08:00
LinuxServer-CI
0ff8121521 Bot Updating Package Versions 2022-03-01 14:42:14 +01:00
LinuxServer-CI
df6b84fcee Bot Updating Templated Files 2022-03-01 14:39:36 +01:00
aptalca
9a6fca93a4 Merge pull request #160 from linuxserver/python
Add python for search plugin support
2022-03-01 08:38:09 -05:00
TheSpad
3f1abde2d5 Add python for search plugin support 2022-03-01 10:21:03 +00:00
LinuxServer-CI
aa53903516 Bot Updating Package Versions 2022-02-28 04:47:38 +01:00
LinuxServer-CI
11399fc0b8 Bot Updating Package Versions 2022-02-27 15:00:19 +01:00
aptalca
d86db02334 Merge pull request #157 from linuxserver/edge
Rebase to Edge, install from repos.
2022-02-27 08:57:50 -05:00
TheSpad
7c0eb4e676 Fix formatting, restore 4.3.3 migration check. 2022-02-23 22:17:26 +00:00
TheSpad
f4688d02a6 Run builder 2022-02-23 21:53:27 +00:00
TheSpad
e219ebb68a Rebase to Edge, install from repos. 2022-02-23 21:50:19 +00:00
LinuxServer-CI
6b33e52b99 Bot Updating Package Versions 2022-02-21 04:56:14 +01:00
LinuxServer-CI
d8521268eb Bot Updating Templated Files 2022-02-20 00:04:50 +01:00
Adam
0589233f7e Merge pull request #156 from rchenzheng/ISSUE-155/missing-jq 2022-02-19 23:03:45 +00:00
Richard Chen Zheng
73869214a6 Include jq for build-stage 2022-02-19 16:42:19 -05:00
LinuxServer-CI
4ca216b6a5 Bot Updating Package Versions 2022-02-17 14:57:18 +01:00
Adam
7e84208a53 Change release logic (#154) 2022-02-17 13:16:55 +00:00
LinuxServer-CI
7c6e03cbee Bot Updating Package Versions 2022-02-14 05:01:04 +01:00
LinuxServer-CI
0d8a8358bc Bot Updating Package Versions 2022-02-07 05:00:34 +01:00
LinuxServer-CI
d8875f90f2 Bot Updating Package Versions 2022-01-24 04:57:38 +01:00
LinuxServer-CI
ffcce8c8ca Bot Updating Package Versions 2022-01-17 05:05:42 +01:00
LinuxServer-CI
196ab45449 Bot Updating Package Versions 2022-01-09 13:23:10 +01:00
Adam
ae8a2b630c Rebase to Alpine, build from source (#147) 2022-01-09 11:38:59 +00:00
LinuxServer-CI
bc82fbd112 Bot Updating Package Versions 2022-01-06 19:05:52 +01:00
LinuxServer-CI
6ff254fa94 Bot Updating Templated Files 2022-01-06 19:02:56 +01:00
Adam
161be85ba4 Merge pull request #146 from linuxserver/update-readme 2022-01-06 18:01:44 +00:00
TheSpad
ab5459e94a Deprecate unstable branch 2022-01-06 17:36:29 +00:00
LinuxServer-CI
8eedd9fc6b Bot Updating Package Versions 2021-12-27 04:49:41 +01:00
LinuxServer-CI
52f71c421d Bot Updating Package Versions 2021-12-20 04:53:54 +01:00
LinuxServer-CI
3864769098 Bot Updating Templated Files 2021-12-20 04:50:10 +01:00
LinuxServer-CI
3959ef3929 Bot Updating Templated Files 2021-12-20 04:48:55 +01:00
LinuxServer-CI
d0bd08d681 Bot Updating Package Versions 2021-11-29 04:49:22 +01:00
LinuxServer-CI
31fd25b76e Bot Updating Package Versions 2021-11-22 04:48:10 +01:00
LinuxServer-CI
f602e3f3de Bot Updating Package Versions 2021-11-15 04:48:50 +01:00
LinuxServer-CI
404387d1bf Bot Updating Package Versions 2021-11-08 04:48:38 +01:00
LinuxServer-CI
b43a38d223 Bot Updating Package Versions 2021-10-31 16:52:40 +01:00
LinuxServer-CI
7a5e9ce7a8 Bot Updating Package Versions 2021-10-12 10:51:40 +02:00
LinuxServer-CI
9a9a5ace5f Bot Updating Package Versions 2021-10-08 16:50:05 +02:00
LinuxServer-CI
0e9d1cd2a7 Bot Updating Package Versions 2021-10-04 05:52:02 +02:00
LinuxServer-CI
388c14d39f Bot Updating Templated Files 2021-10-04 05:48:33 +02:00
LinuxServer-CI
05353a4ffa Bot Updating Templated Files 2021-10-04 05:47:23 +02:00
LinuxServer-CI
f403791b9b Bot Updating Package Versions 2021-09-27 05:48:15 +02:00
LinuxServer-CI
8957575e62 Bot Updating Package Versions 2021-09-10 06:59:12 +02:00
LinuxServer-CI
51cd1d2cb9 Bot Updating Package Versions 2021-09-06 05:48:08 +02:00
LinuxServer-CI
42c5efa42d Bot Updating Package Versions 2021-08-29 22:51:09 +02:00
LinuxServer-CI
88a3d3fffb Bot Updating Templated Files 2021-08-29 22:47:59 +02:00
LinuxServer-CI
04b7ad8614 Bot Updating Package Versions 2021-08-23 11:49:40 +02:00
LinuxServer-CI
fa2c992f99 Bot Updating Package Versions 2021-08-21 11:50:06 +02:00
LinuxServer-CI
7b96dd8081 Bot Updating Package Versions 2021-08-04 03:47:26 +02:00
LinuxServer-CI
788e6ac4d1 Bot Updating Package Versions 2021-08-02 05:52:01 +02:00
LinuxServer-CI
1920d0a36b Bot Updating Package Versions 2021-07-26 05:53:21 +02:00
LinuxServer-CI
7b7b90e21c Bot Updating Templated Files 2021-07-19 17:35:59 +02:00
j0nnymoe
d9604dae91 Merge pull request #130 from linuxserver/old-kernels-stable
Add issue note for old kernels
2021-07-19 16:34:49 +01:00
Adam
f09bcb7608 Add issue note for old kernels 2021-07-19 15:42:30 +01:00
LinuxServer-CI
ad68a8d8b5 Bot Updating Package Versions 2021-07-12 11:50:27 +00:00
LinuxServer-CI
51fa07ef4c Bot Updating Package Versions 2021-07-12 03:52:15 +00:00
LinuxServer-CI
4dcbcffd20 Bot Updating Package Versions 2021-07-05 10:58:46 +00:00
LinuxServer-CI
36f6c4727c Bot Updating Package Versions 2021-07-04 23:56:23 -04:00
LinuxServer-CI
f4599598d5 Bot Updating Templated Files 2021-07-05 03:52:40 +00:00
LinuxServer-CI
4b7c5cfa3c Bot Updating Templated Files 2021-07-05 03:50:38 +00:00
LinuxServer-CI
453fa3ab17 Bot Updating Package Versions 2021-06-27 20:53:23 +00:00
LinuxServer-CI
1b01d5533e Bot Updating Package Versions 2021-06-21 18:03:19 +00:00
LinuxServer-CI
e4c0d9a5ca Bot Updating Package Versions 2021-06-20 15:50:06 -04:00
LinuxServer-CI
f95cc6ad6b Bot Updating Package Versions 2021-06-19 19:08:58 +00:00
LinuxServer-CI
6f70db3f3c Bot Updating Package Versions 2021-06-15 15:53:21 +01:00
LinuxServer-CI
a14a44463b Bot Updating Package Versions 2021-06-08 09:03:49 +00:00
LinuxServer-CI
c6a679f65e Bot Updating Package Versions 2021-06-07 05:19:22 +00:00
LinuxServer-CI
3f43261f08 Bot Updating Package Versions 2021-05-31 05:42:53 +00:00
LinuxServer-CI
9c6a639487 Bot Updating Package Versions 2021-05-10 04:11:48 +00:00
LinuxServer-CI
83d85cedc1 Bot Updating Package Versions 2021-05-03 02:00:21 +00:00
LinuxServer-CI
d9f7f21791 Bot Updating Package Versions 2021-04-30 18:03:23 -04:00
LinuxServer-CI
2375382a28 Bot Updating Package Versions 2021-04-28 16:09:23 +00:00
LinuxServer-CI
5d811b36c6 Bot Updating Package Versions 2021-04-26 19:39:15 +00:00
Adam
e824d378e7 Merge pull request #122 from linuxserver/qbittorrent-cli-patch 2021-04-26 20:31:43 +01:00
TheSpad
f9483a88b6 Fix indentation 2021-04-26 19:58:22 +01:00
TheSpad
f83f3fd5fb Update repos for qbittorrent-cli 2021-04-26 19:27:58 +01:00
Adam
ecbb937c39 Merge pull request #120 from TheSpad/master 2021-04-26 17:49:48 +01:00
TheSpad
2bbec40d33 Don't try and chown non-existent directory 2021-04-26 13:28:49 +01:00
Adam
05fbba3e20 Remove /downloads VOLUME declaration 2021-04-26 12:58:17 +01:00
Adam
f3de1fa5e5 Remove /downloads VOLUME declaration 2021-04-26 12:58:07 +01:00
Adam
ca6d61ebe6 Remove /downloads VOLUME declaration 2021-04-26 12:57:49 +01:00
LinuxServer-CI
0bf1c72566 Bot Updating Package Versions 2021-04-25 03:09:06 -04:00
LinuxServer-CI
45fcca6ea9 Bot Updating Package Versions 2021-04-18 08:00:37 +00:00
LinuxServer-CI
1dfe1b178b Bot Updating Templated Files 2021-04-18 07:52:38 +00:00
LinuxServer-CI
46b481c1f2 Bot Updating Templated Files 2021-04-18 08:51:08 +01:00
LinuxServer-CI
dd76ae8615 Bot Updating Package Versions 2021-04-09 06:00:14 +00:00
LinuxServer-CI
2862d4c64b Bot Updating Package Versions 2021-04-03 07:56:31 -04:00
LinuxServer-CI
9d15a99d0d Bot Updating Package Versions 2021-03-28 06:14:19 +01:00
LinuxServer-CI
3e1c6f411d Bot Updating Package Versions 2021-03-27 06:06:10 +00:00
LinuxServer-CI
727670c265 Bot Updating Package Versions 2021-03-25 17:05:45 +00:00
LinuxServer-CI
2b0dbd321b Bot Updating Package Versions 2021-03-24 20:50:54 +00:00
Roxedus
4aeb003f8f Merge pull request #117 from linuxserver/master-custom-trigger
2 stage external trigger to check for artifacts
2021-03-24 21:47:21 +01:00
aptalca
9e38503877 2 stage external trigger to check for artifacts 2021-03-24 15:48:12 -04:00
LinuxServer-CI
0efdf54653 Bot Updating Package Versions 2021-03-22 04:37:19 +00:00
LinuxServer-CI
ef9930aed5 Bot Updating Package Versions 2021-03-15 00:01:29 -04:00
LinuxServer-CI
f2a15340dc Bot Updating Package Versions 2021-02-28 23:05:11 -05:00
LinuxServer-CI
21daeaf0d5 Bot Updating Package Versions 2021-02-22 04:09:13 +00:00
aptalca
af977a986c Merge pull request #102 from TheSpad/patch-1
Safer BT_backup migration
2021-02-13 08:46:51 -05:00
Adam
5bb96a4860 Safer BT_backup migration
Backup /config/qBittorrent/BT_backup/ before we copy anything
Rename /config/data/qBittorrent/BT_backup/ after copy so we don't do it again.
2021-02-13 13:18:26 +00:00
LinuxServer-CI
b1d457d6cf Bot Updating Package Versions 2021-02-13 08:11:31 -05:00
LinuxServer-CI
14f875769b Bot Updating Templated Files 2021-02-13 13:04:00 +00:00
LinuxServer-CI
c361bde9db Bot Updating Templated Files 2021-02-13 13:02:28 +00:00
LinuxServer-CI
2a51275b3a Bot Updating Templated Files 2021-02-13 13:01:07 +00:00
j0nnymoe
9e1a9ee654 Merge pull request #100 from linuxserver/focal
rebase to focal
2021-02-13 12:59:23 +00:00
aptalca
82e6971458 Merge pull request #98 from zaggash/patch-1
v4.3.3 upgrade path
2021-02-10 18:07:39 -05:00
aptalca
db769dc00c rebase to focal 2021-02-10 17:49:24 -05:00
LinuxServer-CI
6b02d3dd3f Bot Updating Package Versions 2021-02-08 03:58:50 +00:00
LinuxServer-CI
c7d44af955 Bot Updating Package Versions 2021-02-01 04:09:18 +00:00
Alexandre Pinon
9a267928a3 v4.3.3 upgrade path 2021-01-25 23:58:51 +01:00
aptalca
a82199f478 Merge pull request #95 from linuxserver/master-deprecate-umask_set
Deprecate UMASK_SET in favor of UMASK in baseimage
2021-01-20 08:04:19 -05:00
Roxedus
2b00f83793 Deprecate UMASK_SET in favor of UMASK in baseimage 2021-01-20 13:19:04 +01:00
LinuxServer-CI
c730612170 Bot Updating Package Versions 2021-01-19 20:29:51 +00:00
LinuxServer-CI
f4aa670e36 Bot Updating Package Versions 2021-01-18 12:07:40 +00:00
LinuxServer-CI
de3c3d3f8f Bot Updating Templated Files 2021-01-18 07:00:42 -05:00
LinuxServer-CI
0ad6143ad5 Bot Updating Package Versions 2021-01-08 05:18:43 -05:00
LinuxServer-CI
c40da0d2fa Bot Updating Package Versions 2021-01-04 11:47:00 +00:00
LinuxServer-CI
8c57809c37 Bot Updating Package Versions 2020-12-27 22:04:12 +00:00
LinuxServer-CI
c0319dd36f Bot Updating Package Versions 2020-12-21 06:39:10 -05:00
Eric Nemchik
453b53f443 Update Jenkinsfile 2020-12-15 18:54:43 -06:00
LinuxServer-CI
f2aa60834d Bot Updating Package Versions 2020-12-15 21:25:06 +00:00
LinuxServer-CI
d732a5aa06 Bot Updating Templated Files 2020-12-15 21:17:43 +00:00
LinuxServer-CI
1d603b153f Bot Updating Templated Files 2020-12-15 21:16:40 +00:00
LinuxServer-CI
c40bd11abd Bot Updating Package Versions 2020-12-02 05:02:39 +00:00
LinuxServer-CI
fe17f2fc18 Bot Updating Package Versions 2020-11-25 12:13:02 -05:00
LinuxServer-CI
e43be66cdb Bot Updating Package Versions 2020-11-25 05:02:46 +00:00
LinuxServer-CI
763ec46cf3 Bot Updating Package Versions 2020-11-18 00:01:03 -05:00
LinuxServer-CI
9f10b8e233 Bot Updating Package Versions 2020-11-12 16:38:29 +00:00
LinuxServer-CI
520e471b04 Bot Updating Templated Files 2020-11-12 16:31:34 +00:00
Aaron
2b913e4df5 readme-vars.yml: Update changelog
Signed-off-by: Aaron <admin@datahoarder.dev>
2020-11-12 08:30:10 -08:00
Aaron
79d5ee0cd7 30-config: Stop creating /config/data directory on startup
Signed-off-by: Aaron <admin@datahoarder.dev>
2020-11-12 08:30:10 -08:00
LinuxServer-CI
46b6b4e375 Bot Updating Package Versions 2020-11-11 00:01:48 -05:00
LinuxServer-CI
8b363149a1 Bot Updating Package Versions 2020-11-02 03:48:20 +00:00
LinuxServer-CI
c87b025488 Bot Updating Templated Files 2020-11-02 03:42:20 +00:00
thelamer
cfc4e1cd36 update baseimages 2020-11-01 19:40:55 -08:00
LinuxServer-CI
a76f73b6d4 Bot Updating Package Versions 2020-10-23 08:13:03 -04:00
LinuxServer-CI
b468b496e9 Bot Updating Package Versions 2020-10-22 08:10:41 -04:00
LinuxServer-CI
6fb3ff602a Bot Updating Package Versions 2020-10-19 06:12:40 +00:00
LinuxServer-CI
19e9414071 Bot Updating Templated Files 2020-10-07 03:57:33 +00:00
LinuxServer-CI
e1105c3c10 Bot Updating Templated Files 2020-10-07 03:56:14 +00:00
LinuxServer-CI
12eeada89e Bot Updating Package Versions 2020-09-30 00:00:14 -04:00
LinuxServer-CI
a9570058b0 Bot Updating Package Versions 2020-09-23 04:59:52 +01:00
LinuxServer-CI
ea87627cc4 Bot Updating Package Versions 2020-09-16 04:59:42 +01:00
39 changed files with 1538 additions and 719 deletions

20
.editorconfig Executable file
View File

@@ -0,0 +1,20 @@
# This file is globally distributed to all container image projects from
# https://github.com/linuxserver/docker-jenkins-builder/blob/master/.editorconfig
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true
# trim_trailing_whitespace may cause unintended issues and should not be globally set true
trim_trailing_whitespace = false
[{Dockerfile*,**.yml}]
indent_style = space
indent_size = 2
[{**.sh,root/etc/s6-overlay/s6-rc.d/**,root/etc/cont-init.d/**,root/etc/services.d/**}]
indent_style = space
indent_size = 4

123
.github/CONTRIBUTING.md vendored Executable file
View File

@@ -0,0 +1,123 @@
# Contributing to qbittorrent
## Gotchas
* While contributing make sure to make all your changes before creating a Pull Request, as our pipeline builds each commit after the PR is open.
* Read, and fill the Pull Request template
* If this is a fix for a typo (in code, documentation, or the README) please file an issue and let us sort it out. We do not need a PR
* If the PR is addressing an existing issue include, closes #\<issue number>, in the body of the PR commit message
* If you want to discuss changes, you can also bring it up in [#dev-talk](https://discordapp.com/channels/354974912613449730/757585807061155840) in our [Discord server](https://discord.gg/YWrKVTn)
## Common files
| File | Use case |
| :----: | --- |
| `Dockerfile` | Dockerfile used to build amd64 images |
| `Dockerfile.aarch64` | Dockerfile used to build 64bit ARM architectures |
| `Dockerfile.armhf` | Dockerfile used to build 32bit ARM architectures |
| `Jenkinsfile` | This file is a product of our builder and should not be edited directly. This is used to build the image |
| `jenkins-vars.yml` | This file is used to generate the `Jenkinsfile` mentioned above, it only affects the build-process |
| `package_versions.txt` | This file is generated as a part of the build-process and should not be edited directly. It lists all the installed packages and their versions |
| `README.md` | This file is a product of our builder and should not be edited directly. This displays the readme for the repository and image registries |
| `readme-vars.yml` | This file is used to generate the `README.md` |
## Readme
If you would like to change our readme, please __**do not**__ directly edit the readme, as it is auto-generated on each commit.
Instead edit the [readme-vars.yml](https://github.com/linuxserver/docker-qbittorrent/edit/libtorrentv1/readme-vars.yml).
These variables are used in a template for our [Jenkins Builder](https://github.com/linuxserver/docker-jenkins-builder) as part of an ansible play.
Most of these variables are also carried over to [docs.linuxserver.io](https://docs.linuxserver.io/images/docker-qbittorrent)
### Fixing typos or clarify the text in the readme
There are variables for multiple parts of the readme, the most common ones are:
| Variable | Description |
| :----: | --- |
| `project_blurb` | This is the short excerpt shown above the project logo. |
| `app_setup_block` | This is the text that shows up under "Application Setup" if enabled |
### Parameters
The compose and run examples are also generated from these variables.
We have a [reference file](https://github.com/linuxserver/docker-jenkins-builder/blob/master/vars/_container-vars-blank) in our Jenkins Builder.
These are prefixed with `param_` for required parameters, or `opt_param` for optional parameters, except for `cap_add`.
Remember to enable param, if currently disabled. This differs between parameters, and can be seen in the reference file.
Devices, environment variables, ports and volumes expects its variables in a certain way.
### Devices
```yml
param_devices:
- { device_path: "/dev/dri", device_host_path: "/dev/dri", desc: "For hardware transcoding" }
opt_param_devices:
- { device_path: "/dev/dri", device_host_path: "/dev/dri", desc: "For hardware transcoding" }
```
### Environment variables
```yml
param_env_vars:
- { env_var: "TZ", env_value: "Europe/London", desc: "Specify a timezone to use EG Europe/London." }
opt_param_env_vars:
- { env_var: "VERSION", env_value: "latest", desc: "Supported values are LATEST, PLEXPASS or a specific version number." }
```
### Ports
```yml
param_ports:
- { external_port: "80", internal_port: "80", port_desc: "Application WebUI" }
opt_param_ports:
- { external_port: "80", internal_port: "80", port_desc: "Application WebUI" }
```
### Volumes
```yml
param_volumes:
- { vol_path: "/config", vol_host_path: "</path/to/appdata/config>", desc: "Configuration files." }
opt_param_volumes:
- { vol_path: "/config", vol_host_path: "</path/to/appdata/config>", desc: "Configuration files." }
```
### Testing template changes
After you make any changes to the templates, you can use our [Jenkins Builder](https://github.com/linuxserver/docker-jenkins-builder) to have the files updated from the modified templates. Please use the command found under `Running Locally` [on this page](https://github.com/linuxserver/docker-jenkins-builder/blob/master/README.md) to generate them prior to submitting a PR.
## Dockerfiles
We use multiple Dockerfiles in our repos, this is because sometimes some CPU architectures needs different packages to work.
If you are proposing additional packages to be added, ensure that you added the packages to all the Dockerfiles in alphabetical order.
### Testing your changes
```bash
git clone https://github.com/linuxserver/docker-qbittorrent.git
cd docker-qbittorrent
docker build \
--no-cache \
--pull \
-t linuxserver/qbittorrent:latest .
```
The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static`
```bash
docker run --rm --privileged multiarch/qemu-user-static:register --reset
```
Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`.
## Update the changelog
If you are modifying the Dockerfiles or any of the startup scripts in [root](https://github.com/linuxserver/docker-qbittorrent/tree/libtorrentv1/root), add an entry to the changelog
```yml
changelogs:
- { date: "DD.MM.YY:", desc: "Added some love to templates" }
```

View File

@@ -1,34 +0,0 @@
[linuxserverurl]: https://linuxserver.io
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)][linuxserverurl]
If you are new to Docker or this application our issue tracker is **ONLY** used for reporting bugs or requesting features. Please use [our discord server](https://discord.gg/YWrKVTn) for general support.
<!--- Provide a general summary of the issue in the Title above -->
------------------------------
## Expected Behavior
<!--- Tell us what should happen -->
## Current Behavior
<!--- Tell us what happens instead of the expected behavior -->
## Steps to Reproduce
<!--- Provide a link to a live example, or an unambiguous set of steps to -->
<!--- reproduce this bug. Include code to reproduce, if relevant -->
1.
2.
3.
4.
## Environment
**OS:**
**CPU architecture:** x86_64/arm32/arm64
**How docker service was installed:**
<!--- Providing context helps us come up with a solution that is most useful in the real world -->
## Command used to create docker container (run/create/compose/screenshot)
<!--- Provide your docker create/run command or compose yaml snippet, or a screenshot of settings if using a gui to create the container -->
## Docker logs
<!--- Provide a full docker log, output of "docker logs qbittorrent" -->

13
.github/ISSUE_TEMPLATE/config.yml vendored Executable file
View File

@@ -0,0 +1,13 @@
blank_issues_enabled: false
contact_links:
- name: Discord chat support
url: https://discord.gg/YWrKVTn
about: Realtime support / chat with the community and the team.
- name: Discourse discussion forum
url: https://discourse.linuxserver.io
about: Post on our community forum.
- name: Documentation
url: https://docs.linuxserver.io/images/docker-qbittorrent
about: Documentation - information about all of our containers.

76
.github/ISSUE_TEMPLATE/issue.bug.yml vendored Normal file
View File

@@ -0,0 +1,76 @@
# Based on the issue template
name: Bug report
description: Create a report to help us improve
title: "[BUG] <title>"
labels: [Bug]
body:
- type: checkboxes
attributes:
label: Is there an existing issue for this?
description: Please search to see if an issue already exists for the bug you encountered.
options:
- label: I have searched the existing issues
required: true
- type: textarea
attributes:
label: Current Behavior
description: Tell us what happens instead of the expected behavior.
validations:
required: true
- type: textarea
attributes:
label: Expected Behavior
description: Tell us what should happen.
validations:
required: false
- type: textarea
attributes:
label: Steps To Reproduce
description: Steps to reproduce the behavior.
placeholder: |
1. In this environment...
2. With this config...
3. Run '...'
4. See error...
validations:
required: true
- type: textarea
attributes:
label: Environment
description: |
examples:
- **OS**: Ubuntu 20.04
- **How docker service was installed**: distro's packagemanager
value: |
- OS:
- How docker service was installed:
render: markdown
validations:
required: false
- type: dropdown
attributes:
label: CPU architecture
options:
- x86-64
- arm64
validations:
required: true
- type: textarea
attributes:
label: Docker creation
description: |
Command used to create docker container
Provide your docker create/run command or compose yaml snippet, or a screenshot of settings if using a gui to create the container
render: bash
validations:
required: true
- type: textarea
attributes:
description: |
Provide a full docker log, output of "docker logs linuxserver.io"
label: Container logs
placeholder: |
Output of `docker logs linuxserver.io`
render: bash
validations:
required: true

View File

@@ -0,0 +1,31 @@
# Based on the issue template
name: Feature request
description: Suggest an idea for this project
title: "[FEAT] <title>"
labels: [enhancement]
body:
- type: checkboxes
attributes:
label: Is this a new feature request?
description: Please search to see if a feature request already exists.
options:
- label: I have searched the existing issues
required: true
- type: textarea
attributes:
label: Wanted change
description: Tell us what you want to happen.
validations:
required: true
- type: textarea
attributes:
label: Reason for change
description: Justify your request, why do you want it, what is the benefit.
validations:
required: true
- type: textarea
attributes:
label: Proposed code change
description: Do you have a potential code change in mind?
validations:
required: false

View File

@@ -6,7 +6,7 @@
<!--- Before submitting a pull request please check the following --> <!--- Before submitting a pull request please check the following -->
<!--- If this is a fix for a typo in code or documentation in the README please file an issue and let us sort it out we do not need a PR --> <!--- If this is a fix for a typo (in code, documentation, or the README) please file an issue and let us sort it out. We do not need a PR -->
<!--- Ask yourself if this modification is something the whole userbase will benefit from, if this is a specific change for corner case functionality or plugins please look at making a Docker Mod or local script https://blog.linuxserver.io/2019/09/14/customizing-our-containers/ --> <!--- Ask yourself if this modification is something the whole userbase will benefit from, if this is a specific change for corner case functionality or plugins please look at making a Docker Mod or local script https://blog.linuxserver.io/2019/09/14/customizing-our-containers/ -->
<!--- That if the PR is addressing an existing issue include, closes #<issue number> , in the body of the PR commit message --> <!--- That if the PR is addressing an existing issue include, closes #<issue number> , in the body of the PR commit message -->
<!--- You have included links to any files / patches etc your PR may be using in the body of the PR commit message --> <!--- You have included links to any files / patches etc your PR may be using in the body of the PR commit message -->
@@ -21,7 +21,11 @@
------------------------------ ------------------------------
We welcome all PRs though this doesnt guarantee it will be accepted. - [ ] I have read the [contributing](https://github.com/linuxserver/docker-qbittorrent/blob/libtorrentv1/.github/CONTRIBUTING.md) guideline and understand that I have made the correct modifications
------------------------------
<!--- We welcome all PRs though this doesnt guarantee it will be accepted. -->
## Description: ## Description:
<!--- Describe your changes in detail --> <!--- Describe your changes in detail -->

16
.github/workflows/call_issue_pr_tracker.yml vendored Executable file
View File

@@ -0,0 +1,16 @@
name: Issue & PR Tracker
on:
issues:
types: [opened,reopened,labeled,unlabeled,closed]
pull_request_target:
types: [opened,reopened,review_requested,review_request_removed,labeled,unlabeled,closed]
pull_request_review:
types: [submitted,edited,dismissed]
jobs:
manage-project:
permissions:
issues: write
uses: linuxserver/github-workflows/.github/workflows/issue-pr-tracker.yml@v1
secrets: inherit

13
.github/workflows/call_issues_cron.yml vendored Executable file
View File

@@ -0,0 +1,13 @@
name: Mark stale issues and pull requests
on:
schedule:
- cron: '29 15 * * *'
workflow_dispatch:
jobs:
stale:
permissions:
issues: write
pull-requests: write
uses: linuxserver/github-workflows/.github/workflows/issues-cron.yml@v1
secrets: inherit

104
.github/workflows/external_trigger.yml vendored Executable file
View File

@@ -0,0 +1,104 @@
name: External Trigger Main
on:
workflow_dispatch:
jobs:
external-trigger-libtorrentv1:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.1.0
- name: External Trigger
if: github.ref == 'refs/heads/libtorrentv1'
run: |
if [ -n "${{ secrets.PAUSE_EXTERNAL_TRIGGER_QBITTORRENT_LIBTORRENTV1 }}" ]; then
echo "**** Github secret PAUSE_EXTERNAL_TRIGGER_QBITTORRENT_LIBTORRENTV1 is set; skipping trigger. ****"
echo "Github secret \`PAUSE_EXTERNAL_TRIGGER_QBITTORRENT_LIBTORRENTV1\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
echo "**** External trigger running off of libtorrentv1 branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_QBITTORRENT_LIBTORRENTV1\". ****"
echo "External trigger running off of libtorrentv1 branch. To disable this trigger, set a Github secret named \`PAUSE_EXTERNAL_TRIGGER_QBITTORRENT_LIBTORRENTV1\`" >> $GITHUB_STEP_SUMMARY
echo "**** Retrieving external version ****"
EXT_RELEASE=$(curl -u ${{ secrets.CR_USER }}:${{ secrets.CR_PAT }} -sL 'https://api.github.com/repos/userdocs/qbittorrent-nox-static/releases' | jq -r 'first(.[] | select(.prerelease == true) | .tag_name)')
if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then
echo "**** Can't retrieve external version, exiting ****"
FAILURE_REASON="Can't retrieve external version for qbittorrent branch libtorrentv1"
GHA_TRIGGER_URL="https://github.com/linuxserver/docker-qbittorrent/actions/runs/${{ github.run_id }}"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680,
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n**Trigger URL:** '"${GHA_TRIGGER_URL}"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
exit 1
fi
EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
echo "**** External version: ${EXT_RELEASE} ****"
echo "External version: ${EXT_RELEASE}" >> $GITHUB_STEP_SUMMARY
echo "**** Retrieving last pushed version ****"
image="linuxserver/qbittorrent"
tag="libtorrentv1"
token=$(curl -sX GET \
"https://ghcr.io/token?scope=repository%3Alinuxserver%2Fqbittorrent%3Apull" \
| jq -r '.token')
multidigest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${tag}" \
| jq -r 'first(.manifests[].digest)')
digest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${multidigest}" \
| jq -r '.config.digest')
image_info=$(curl -sL \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/blobs/${digest}")
if [[ $(echo $image_info | jq -r '.container_config') == "null" ]]; then
image_info=$(echo $image_info | jq -r '.config')
else
image_info=$(echo $image_info | jq -r '.container_config')
fi
IMAGE_RELEASE=$(echo ${image_info} | jq -r '.Labels.build_version' | awk '{print $3}')
IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-ls' '{print $1}')
if [ -z "${IMAGE_VERSION}" ]; then
echo "**** Can't retrieve last pushed version, exiting ****"
FAILURE_REASON="Can't retrieve last pushed version for qbittorrent tag libtorrentv1"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680,
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
exit 1
fi
echo "**** Last pushed version: ${IMAGE_VERSION} ****"
echo "Last pushed version: ${IMAGE_VERSION}" >> $GITHUB_STEP_SUMMARY
if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then
echo "**** Version ${EXT_RELEASE} already pushed, exiting ****"
echo "Version ${EXT_RELEASE} already pushed, exiting" >> $GITHUB_STEP_SUMMARY
exit 0
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-qbittorrent/job/libtorrentv1/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "**** New version ${EXT_RELEASE} found; but there already seems to be an active build on Jenkins; exiting ****"
echo "New version ${EXT_RELEASE} found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY
exit 0
else
echo "**** New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build ****"
echo "New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-qbittorrent/job/libtorrentv1/buildWithParameters?PACKAGE_CHECK=false \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
echo "**** Jenkins job queue url: ${response%$'\r'} ****"
echo "**** Sleeping 10 seconds until job starts ****"
sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}"
echo "**** Jenkins job build url: ${buildurl} ****"
echo "Jenkins job build url: ${buildurl}" >> $GITHUB_STEP_SUMMARY
echo "**** Attempting to change the Jenkins job description ****"
curl -iX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"
echo "**** Notifying Discord ****"
TRIGGER_REASON="A version change was detected for qbittorrent tag libtorrentv1. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE}"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
fi

View File

@@ -0,0 +1,45 @@
name: External Trigger Scheduler
on:
schedule:
- cron: '42 * * * *'
workflow_dispatch:
jobs:
external-trigger-scheduler:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.1.0
with:
fetch-depth: '0'
- name: External Trigger Scheduler
run: |
echo "**** Branches found: ****"
git for-each-ref --format='%(refname:short)' refs/remotes
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes)
do
br=$(echo "$br" | sed 's|origin/||g')
echo "**** Evaluating branch ${br} ****"
ls_jenkins_vars=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-qbittorrent/${br}/jenkins-vars.yml)
ls_branch=$(echo "${ls_jenkins_vars}" | yq -r '.ls_branch')
ls_trigger=$(echo "${ls_jenkins_vars}" | yq -r '.external_type')
if [[ "${br}" == "${ls_branch}" ]] && [[ "${ls_trigger}" != "os" ]]; then
echo "**** Branch ${br} appears to be live and trigger is not os; checking workflow. ****"
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-qbittorrent/${br}/.github/workflows/external_trigger.yml > /dev/null 2>&1; then
echo "**** Workflow exists. Triggering external trigger workflow for branch ${br} ****."
echo "Triggering external trigger workflow for branch ${br}" >> $GITHUB_STEP_SUMMARY
curl -iX POST \
-H "Authorization: token ${{ secrets.CR_PAT }}" \
-H "Accept: application/vnd.github.v3+json" \
-d "{\"ref\":\"refs/heads/${br}\"}" \
https://api.github.com/repos/linuxserver/docker-qbittorrent/actions/workflows/external_trigger.yml/dispatches
else
echo "**** Workflow doesn't exist; skipping trigger. ****"
echo "Skipping branch ${br} due to no external trigger workflow present." >> $GITHUB_STEP_SUMMARY
fi
else
echo "**** ${br} is either a dev branch, or has no external version; skipping trigger. ****"
echo "Skipping branch ${br} due to being detected as dev branch or having no external version." >> $GITHUB_STEP_SUMMARY
fi
done

View File

@@ -8,6 +8,6 @@ jobs:
steps: steps:
- uses: actions/first-interaction@v1 - uses: actions/first-interaction@v1
with: with:
issue-message: 'Thanks for opening your first issue here! Be sure to follow the [issue template](https://github.com/linuxserver/docker-qbittorrent/.github/ISSUE_TEMPLATE.md)!' issue-message: 'Thanks for opening your first issue here! Be sure to follow the relevant issue templates, or risk having this issue marked as invalid.'
pr-message: 'Thanks for opening this pull request! Be sure to follow the [pull request template](https://github.com/linuxserver/docker-qbittorrent/.github/PULL_REQUEST_TEMPLATE.md)!' pr-message: 'Thanks for opening this pull request! Be sure to follow the [pull request template](https://github.com/linuxserver/docker-qbittorrent/blob/libtorrentv1/.github/PULL_REQUEST_TEMPLATE.md)!'
repo-token: ${{ secrets.GITHUB_TOKEN }} repo-token: ${{ secrets.GITHUB_TOKEN }}

42
.github/workflows/package_trigger.yml vendored Executable file
View File

@@ -0,0 +1,42 @@
name: Package Trigger Main
on:
workflow_dispatch:
jobs:
package-trigger-libtorrentv1:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.1.0
- name: Package Trigger
if: github.ref == 'refs/heads/libtorrentv1'
run: |
if [ -n "${{ secrets.PAUSE_PACKAGE_TRIGGER_QBITTORRENT_LIBTORRENTV1 }}" ]; then
echo "**** Github secret PAUSE_PACKAGE_TRIGGER_QBITTORRENT_LIBTORRENTV1 is set; skipping trigger. ****"
echo "Github secret \`PAUSE_PACKAGE_TRIGGER_QBITTORRENT_LIBTORRENTV1\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
if [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-qbittorrent/job/libtorrentv1/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "**** There already seems to be an active build on Jenkins; skipping package trigger ****"
echo "There already seems to be an active build on Jenkins; skipping package trigger" >> $GITHUB_STEP_SUMMARY
exit 0
fi
echo "**** Package trigger running off of libtorrentv1 branch. To disable, set a Github secret named \"PAUSE_PACKAGE_TRIGGER_QBITTORRENT_LIBTORRENTV1\". ****"
echo "Package trigger running off of libtorrentv1 branch. To disable, set a Github secret named \`PAUSE_PACKAGE_TRIGGER_QBITTORRENT_LIBTORRENTV1\`" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-qbittorrent/job/libtorrentv1/buildWithParameters?PACKAGE_CHECK=true \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
echo "**** Jenkins job queue url: ${response%$'\r'} ****"
echo "**** Sleeping 10 seconds until job starts ****"
sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}"
echo "**** Jenkins job build url: ${buildurl} ****"
echo "Jenkins job build url: ${buildurl}" >> $GITHUB_STEP_SUMMARY
echo "**** Attempting to change the Jenkins job description ****"
curl -iX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA package trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"

View File

@@ -0,0 +1,50 @@
name: Package Trigger Scheduler
on:
schedule:
- cron: '48 6 * * 0'
workflow_dispatch:
jobs:
package-trigger-scheduler:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.1.0
with:
fetch-depth: '0'
- name: Package Trigger Scheduler
run: |
echo "**** Branches found: ****"
git for-each-ref --format='%(refname:short)' refs/remotes
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes)
do
br=$(echo "$br" | sed 's|origin/||g')
echo "**** Evaluating branch ${br} ****"
ls_branch=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-qbittorrent/${br}/jenkins-vars.yml | yq -r '.ls_branch')
if [ "${br}" == "${ls_branch}" ]; then
echo "**** Branch ${br} appears to be live; checking workflow. ****"
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-qbittorrent/${br}/.github/workflows/package_trigger.yml > /dev/null 2>&1; then
echo "**** Workflow exists. Triggering package trigger workflow for branch ${br}. ****"
echo "Triggering package trigger workflow for branch ${br}" >> $GITHUB_STEP_SUMMARY
triggered_branches="${triggered_branches}${br} "
curl -iX POST \
-H "Authorization: token ${{ secrets.CR_PAT }}" \
-H "Accept: application/vnd.github.v3+json" \
-d "{\"ref\":\"refs/heads/${br}\"}" \
https://api.github.com/repos/linuxserver/docker-qbittorrent/actions/workflows/package_trigger.yml/dispatches
sleep 30
else
echo "**** Workflow doesn't exist; skipping trigger. ****"
echo "Skipping branch ${br} due to no package trigger workflow present." >> $GITHUB_STEP_SUMMARY
fi
else
echo "**** ${br} appears to be a dev branch; skipping trigger. ****"
echo "Skipping branch ${br} due to being detected as dev branch." >> $GITHUB_STEP_SUMMARY
fi
done
echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****"
echo "**** Notifying Discord ****"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Package Check Build(s) Triggered for qbittorrent** \n**Branch(es):** '"${triggered_branches}"' \n**Build URL:** '"https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-qbittorrent/activity/"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}

10
.github/workflows/permissions.yml vendored Executable file
View File

@@ -0,0 +1,10 @@
name: Permission check
on:
pull_request_target:
paths:
- '**/run'
- '**/finish'
- '**/check'
jobs:
permission_check:
uses: linuxserver/github-workflows/.github/workflows/init-svc-executable-permissions.yml@v1

View File

@@ -1,23 +0,0 @@
name: Mark stale issues and pull requests
on:
schedule:
- cron: "30 1 * * *"
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v1
with:
stale-issue-message: "This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions."
stale-pr-message: "This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions."
stale-issue-label: 'no-issue-activity'
stale-pr-label: 'no-pr-activity'
days-before-stale: 30
days-before-close: 365
exempt-issue-labels: 'awaiting-approval,work-in-progress'
exempt-pr-labels: 'awaiting-approval,work-in-progress'
repo-token: ${{ secrets.GITHUB_TOKEN }}

1
.gitignore vendored
View File

@@ -41,3 +41,4 @@ $RECYCLE.BIN/
Network Trash Folder Network Trash Folder
Temporary Items Temporary Items
.apdisk .apdisk
.jenkins-external

View File

@@ -1,53 +1,74 @@
FROM lsiobase/ubuntu:bionic # syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine:3.18
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
ARG VERSION ARG VERSION
ARG QBITTORRENT_VERSION ARG QBITTORRENT_VERSION
ARG QBT_VERSION
LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
LABEL maintainer="sparklyballs, thelamer" LABEL maintainer="thespad"
# environment settings # environment settings
ARG DEBIAN_FRONTEND="noninteractive" ARG UNRAR_VERSION=6.2.8
ENV HOME="/config" \ ENV HOME="/config" \
XDG_CONFIG_HOME="/config" \ XDG_CONFIG_HOME="/config" \
XDG_DATA_HOME="/config" XDG_DATA_HOME="/config"
# add repo and install qbitorrent # install runtime packages and qbitorrent-cli
RUN \ RUN \
echo "***** add qbitorrent repositories ****" && \ echo "**** install build packages ****" && \
apt-get update && \ apk add --no-cache --upgrade --virtual=build-dependencies \
apt-get install -y \ build-base && \
gnupg \
python3 && \
curl -s https://bintray.com/user/downloadSubjectPublicKey?username=fedarovich | apt-key add - && \
apt-key adv --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 7CA69FC4 && \
echo "deb http://ppa.launchpad.net/qbittorrent-team/qbittorrent-stable/ubuntu bionic main" >> /etc/apt/sources.list.d/qbitorrent.list && \
echo "deb-src http://ppa.launchpad.net/qbittorrent-team/qbittorrent-stable/ubuntu bionic main" >> /etc/apt/sources.list.d/qbitorrent.list && \
echo "deb https://dl.bintray.com/fedarovich/qbittorrent-cli-debian bionic main" >> /etc/apt/sources.list.d/qbitorrent.list && \
echo "**** install packages ****" && \ echo "**** install packages ****" && \
apk add -U --update --no-cache \
icu-libs \
openssl1.1-compat \
p7zip \
python3 \
qt6-qtbase-sqlite && \
echo "**** install unrar from source ****" && \
mkdir /tmp/unrar && \
curl -o \
/tmp/unrar.tar.gz -L \
"https://www.rarlab.com/rar/unrarsrc-${UNRAR_VERSION}.tar.gz" && \
tar xf \
/tmp/unrar.tar.gz -C \
/tmp/unrar --strip-components=1 && \
cd /tmp/unrar && \
make && \
install -v -m755 unrar /usr/bin && \
echo "**** install qbittorrent ****" && \
if [ -z ${QBITTORRENT_VERSION+x} ]; then \ if [ -z ${QBITTORRENT_VERSION+x} ]; then \
QBITTORRENT_VERSION=$(curl -sX GET http://ppa.launchpad.net/qbittorrent-team/qbittorrent-stable/ubuntu/dists/bionic/main/binary-amd64/Packages.gz | gunzip -c \ QBITTORRENT_VERSION=$(curl -sL "https://api.github.com/repos/userdocs/qbittorrent-nox-static/releases" | \
|grep -A 7 -m 1 "Package: qbittorrent-nox" | awk -F ": " '/Version/{print $2;exit}');\ jq -r 'first(.[] | select(.prerelease == true) | .tag_name)'); \
fi && \ fi && \
apt-get update && \ curl -o \
apt-get install -y \ /app/qbittorrent-nox -L \
p7zip-full \ "https://github.com/userdocs/qbittorrent-nox-static/releases/download/${QBITTORRENT_VERSION}/x86_64-qbittorrent-nox" && \
qbittorrent-cli \ chmod +x /app/qbittorrent-nox && \
qbittorrent-nox=${QBITTORRENT_VERSION} \ echo "***** install qbitorrent-cli ****" && \
unrar \ mkdir /qbt && \
geoip-bin \ QBT_VERSION=$(curl -sL "https://api.github.com/repos/fedarovich/qbittorrent-cli/releases" \
unzip && \ | awk '/tag_name/{print $4;exit}' FS='[""]'); \
curl -o \
/tmp/qbt.tar.gz -L \
"https://github.com/fedarovich/qbittorrent-cli/releases/download/${QBT_VERSION}/qbt-linux-alpine-x64-${QBT_VERSION:1}.tar.gz" && \
tar xf \
/tmp/qbt.tar.gz -C \
/qbt && \
echo "**** cleanup ****" && \ echo "**** cleanup ****" && \
apt-get clean && \ apk del --purge \
build-dependencies && \
rm -rf \ rm -rf \
/tmp/* \ /root/.cache \
/var/lib/apt/lists/* \ /tmp/*
/var/tmp/*
# add local files # add local files
COPY root/ / COPY root/ /
# ports and volumes # ports and volumes
EXPOSE 6881 6881/udp 8080 EXPOSE 8080 6881 6881/udp
VOLUME /config /downloads
VOLUME /config

View File

@@ -1,53 +1,74 @@
FROM lsiobase/ubuntu:arm64v8-bionic # syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.18
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
ARG VERSION ARG VERSION
ARG QBITTORRENT_VERSION ARG QBITTORRENT_VERSION
ARG QBT_VERSION
LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
LABEL maintainer="sparklyballs, thelamer" LABEL maintainer="thespad"
# environment settings # environment settings
ARG DEBIAN_FRONTEND="noninteractive" ARG UNRAR_VERSION=6.2.8
ENV HOME="/config" \ ENV HOME="/config" \
XDG_CONFIG_HOME="/config" \ XDG_CONFIG_HOME="/config" \
XDG_DATA_HOME="/config" XDG_DATA_HOME="/config"
# add repo and install qbitorrent # install runtime packages and qbitorrent-cli
RUN \ RUN \
echo "***** add qbitorrent repositories ****" && \ echo "**** install build packages ****" && \
apt-get update && \ apk add --no-cache --upgrade --virtual=build-dependencies \
apt-get install -y \ build-base && \
gnupg \
python3 && \
curl -s https://bintray.com/user/downloadSubjectPublicKey?username=fedarovich | apt-key add - && \
apt-key adv --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 7CA69FC4 && \
echo "deb http://ppa.launchpad.net/qbittorrent-team/qbittorrent-stable/ubuntu bionic main" >> /etc/apt/sources.list.d/qbitorrent.list && \
echo "deb-src http://ppa.launchpad.net/qbittorrent-team/qbittorrent-stable/ubuntu bionic main" >> /etc/apt/sources.list.d/qbitorrent.list && \
echo "deb https://dl.bintray.com/fedarovich/qbittorrent-cli-debian bionic main" >> /etc/apt/sources.list.d/qbitorrent.list && \
echo "**** install packages ****" && \ echo "**** install packages ****" && \
apk add -U --update --no-cache \
icu-libs \
openssl1.1-compat \
p7zip \
python3 \
qt6-qtbase-sqlite && \
echo "**** install unrar from source ****" && \
mkdir /tmp/unrar && \
curl -o \
/tmp/unrar.tar.gz -L \
"https://www.rarlab.com/rar/unrarsrc-${UNRAR_VERSION}.tar.gz" && \
tar xf \
/tmp/unrar.tar.gz -C \
/tmp/unrar --strip-components=1 && \
cd /tmp/unrar && \
make && \
install -v -m755 unrar /usr/bin && \
echo "**** install qbittorrent ****" && \
if [ -z ${QBITTORRENT_VERSION+x} ]; then \ if [ -z ${QBITTORRENT_VERSION+x} ]; then \
QBITTORRENT_VERSION=$(curl -sX GET http://ppa.launchpad.net/qbittorrent-team/qbittorrent-stable/ubuntu/dists/bionic/main/binary-amd64/Packages.gz | gunzip -c \ QBITTORRENT_VERSION=$(curl -sL "https://api.github.com/repos/userdocs/qbittorrent-nox-static/releases" | \
|grep -A 7 -m 1 "Package: qbittorrent-nox" | awk -F ": " '/Version/{print $2;exit}');\ jq -r 'first(.[] | select(.prerelease == true) | .tag_name)'); \
fi && \ fi && \
apt-get update && \ curl -o \
apt-get install -y \ /app/qbittorrent-nox -L \
p7zip-full \ "https://github.com/userdocs/qbittorrent-nox-static/releases/download/${QBITTORRENT_VERSION}/aarch64-qbittorrent-nox" && \
qbittorrent-cli \ chmod +x /app/qbittorrent-nox && \
qbittorrent-nox=${QBITTORRENT_VERSION} \ echo "***** install qbitorrent-cli ****" && \
unrar \ mkdir /qbt && \
geoip-bin \ QBT_VERSION=$(curl -sL "https://api.github.com/repos/fedarovich/qbittorrent-cli/releases" \
unzip && \ | awk '/tag_name/{print $4;exit}' FS='[""]'); \
curl -o \
/tmp/qbt.tar.gz -L \
"https://github.com/fedarovich/qbittorrent-cli/releases/download/${QBT_VERSION}/qbt-linux-alpine-arm64-${QBT_VERSION:1}.tar.gz" && \
tar xf \
/tmp/qbt.tar.gz -C \
/qbt && \
echo "**** cleanup ****" && \ echo "**** cleanup ****" && \
apt-get clean && \ apk del --purge \
build-dependencies && \
rm -rf \ rm -rf \
/tmp/* \ /root/.cache \
/var/lib/apt/lists/* \ /tmp/*
/var/tmp/*
# add local files # add local files
COPY root/ / COPY root/ /
# ports and volumes # ports and volumes
EXPOSE 6881 6881/udp 8080 EXPOSE 8080 6881 6881/udp
VOLUME /config /downloads
VOLUME /config

View File

@@ -1,53 +0,0 @@
FROM lsiobase/ubuntu:arm32v7-bionic
# set version label
ARG BUILD_DATE
ARG VERSION
ARG QBITTORRENT_VERSION
LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
LABEL maintainer="sparklyballs, thelamer"
# environment settings
ARG DEBIAN_FRONTEND="noninteractive"
ENV HOME="/config" \
XDG_CONFIG_HOME="/config" \
XDG_DATA_HOME="/config"
# add repo and install qbitorrent
RUN \
echo "***** add qbitorrent repositories ****" && \
apt-get update && \
apt-get install -y \
gnupg \
python3 && \
curl -s https://bintray.com/user/downloadSubjectPublicKey?username=fedarovich | apt-key add - && \
apt-key adv --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 7CA69FC4 && \
echo "deb http://ppa.launchpad.net/qbittorrent-team/qbittorrent-stable/ubuntu bionic main" >> /etc/apt/sources.list.d/qbitorrent.list && \
echo "deb-src http://ppa.launchpad.net/qbittorrent-team/qbittorrent-stable/ubuntu bionic main" >> /etc/apt/sources.list.d/qbitorrent.list && \
echo "deb https://dl.bintray.com/fedarovich/qbittorrent-cli-debian bionic main" >> /etc/apt/sources.list.d/qbitorrent.list && \
echo "**** install packages ****" && \
if [ -z ${QBITTORRENT_VERSION+x} ]; then \
QBITTORRENT_VERSION=$(curl -sX GET http://ppa.launchpad.net/qbittorrent-team/qbittorrent-stable/ubuntu/dists/bionic/main/binary-amd64/Packages.gz | gunzip -c \
|grep -A 7 -m 1 "Package: qbittorrent-nox" | awk -F ": " '/Version/{print $2;exit}');\
fi && \
apt-get update && \
apt-get install -y \
p7zip-full \
qbittorrent-cli \
qbittorrent-nox=${QBITTORRENT_VERSION} \
unrar \
geoip-bin \
unzip && \
echo "**** cleanup ****" && \
apt-get clean && \
rm -rf \
/tmp/* \
/var/lib/apt/lists/* \
/var/tmp/*
# add local files
COPY root/ /
# ports and volumes
EXPOSE 6881 6881/udp 8080
VOLUME /config /downloads

664
Jenkinsfile vendored
View File

@@ -16,6 +16,7 @@ pipeline {
GITHUB_TOKEN=credentials('498b4638-2d02-4ce5-832d-8a57d01d97ab') GITHUB_TOKEN=credentials('498b4638-2d02-4ce5-832d-8a57d01d97ab')
GITLAB_TOKEN=credentials('b6f0f1dd-6952-4cf6-95d1-9c06380283f0') GITLAB_TOKEN=credentials('b6f0f1dd-6952-4cf6-95d1-9c06380283f0')
GITLAB_NAMESPACE=credentials('gitlab-namespace-id') GITLAB_NAMESPACE=credentials('gitlab-namespace-id')
SCARF_TOKEN=credentials('scarf_api_key')
CONTAINER_NAME = 'qbittorrent' CONTAINER_NAME = 'qbittorrent'
BUILD_VERSION_ARG = 'QBITTORRENT_VERSION' BUILD_VERSION_ARG = 'QBITTORRENT_VERSION'
LS_USER = 'linuxserver' LS_USER = 'linuxserver'
@@ -23,7 +24,8 @@ pipeline {
DOCKERHUB_IMAGE = 'linuxserver/qbittorrent' DOCKERHUB_IMAGE = 'linuxserver/qbittorrent'
DEV_DOCKERHUB_IMAGE = 'lsiodev/qbittorrent' DEV_DOCKERHUB_IMAGE = 'lsiodev/qbittorrent'
PR_DOCKERHUB_IMAGE = 'lspipepr/qbittorrent' PR_DOCKERHUB_IMAGE = 'lspipepr/qbittorrent'
DIST_IMAGE = 'ubuntu' DIST_IMAGE = 'alpine'
DIST_TAG = '3.18'
MULTIARCH='true' MULTIARCH='true'
CI='true' CI='true'
CI_WEB='true' CI_WEB='true'
@@ -38,10 +40,16 @@ pipeline {
// Setup all the basic environment variables needed for the build // Setup all the basic environment variables needed for the build
stage("Set ENV Variables base"){ stage("Set ENV Variables base"){
steps{ steps{
sh '''#! /bin/bash
containers=$(docker ps -aq)
if [[ -n "${containers}" ]]; then
docker stop ${containers}
fi
docker system prune -af --volumes || : '''
script{ script{
env.EXIT_STATUS = '' env.EXIT_STATUS = ''
env.LS_RELEASE = sh( env.LS_RELEASE = sh(
script: '''docker run --rm alexeiled/skopeo sh -c 'skopeo inspect docker://docker.io/'${DOCKERHUB_IMAGE}':latest 2>/dev/null' | jq -r '.Labels.build_version' | awk '{print $3}' | grep '\\-ls' || : ''', script: '''docker run --rm quay.io/skopeo/stable:v1 inspect docker://ghcr.io/${LS_USER}/${CONTAINER_NAME}:libtorrentv1 2>/dev/null | jq -r '.Labels.build_version' | awk '{print $3}' | grep '\\-ls' || : ''',
returnStdout: true).trim() returnStdout: true).trim()
env.LS_RELEASE_NOTES = sh( env.LS_RELEASE_NOTES = sh(
script: '''cat readme-vars.yml | awk -F \\" '/date: "[0-9][0-9].[0-9][0-9].[0-9][0-9]:/ {print $4;exit;}' | sed -E ':a;N;$!ba;s/\\r{0,1}\\n/\\\\n/g' ''', script: '''cat readme-vars.yml | awk -F \\" '/date: "[0-9][0-9].[0-9][0-9].[0-9][0-9]:/ {print $4;exit;}' | sed -E ':a;N;$!ba;s/\\r{0,1}\\n/\\\\n/g' ''',
@@ -55,7 +63,7 @@ pipeline {
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/commit/' + env.GIT_COMMIT env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/commit/' + env.GIT_COMMIT
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/' env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/'
env.PULL_REQUEST = env.CHANGE_ID env.PULL_REQUEST = env.CHANGE_ID
env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE.md ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/greetings.yml ./.github/workflows/stale.yml' env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.yml ./.github/ISSUE_TEMPLATE/issue.feature.yml ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/call_issue_pr_tracker.yml ./.github/workflows/call_issues_cron.yml ./.github/workflows/permissions.yml ./.github/workflows/external_trigger.yml ./.github/workflows/package_trigger.yml'
} }
script{ script{
env.LS_RELEASE_NUMBER = sh( env.LS_RELEASE_NUMBER = sh(
@@ -65,7 +73,7 @@ pipeline {
script{ script{
env.LS_TAG_NUMBER = sh( env.LS_TAG_NUMBER = sh(
script: '''#! /bin/bash script: '''#! /bin/bash
tagsha=$(git rev-list -n 1 ${LS_RELEASE} 2>/dev/null) tagsha=$(git rev-list -n 1 libtorrentv1-${LS_RELEASE} 2>/dev/null)
if [ "${tagsha}" == "${COMMIT_SHA}" ]; then if [ "${tagsha}" == "${COMMIT_SHA}" ]; then
echo ${LS_RELEASE_NUMBER} echo ${LS_RELEASE_NUMBER}
elif [ -z "${GIT_COMMIT}" ]; then elif [ -z "${GIT_COMMIT}" ]; then
@@ -103,7 +111,7 @@ pipeline {
steps{ steps{
script{ script{
env.EXT_RELEASE = sh( env.EXT_RELEASE = sh(
script: ''' curl -sX GET http://ppa.launchpad.net/qbittorrent-team/qbittorrent-stable/ubuntu/dists/bionic/main/binary-amd64/Packages.gz | gunzip -c |grep -A 7 -m 1 'Package: qbittorrent-nox' | awk -F ': ' '/Version/{print $2;exit}' ''', script: ''' curl -sL 'https://api.github.com/repos/userdocs/qbittorrent-nox-static/releases' | jq -r 'first(.[] | select(.prerelease == true) | .tag_name)' ''',
returnStdout: true).trim() returnStdout: true).trim()
env.RELEASE_LINK = 'custom_command' env.RELEASE_LINK = 'custom_command'
} }
@@ -116,46 +124,76 @@ pipeline {
env.EXT_RELEASE_CLEAN = sh( env.EXT_RELEASE_CLEAN = sh(
script: '''echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''', script: '''echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g' ''',
returnStdout: true).trim() returnStdout: true).trim()
def semver = env.EXT_RELEASE_CLEAN =~ /(\d+)\.(\d+)\.(\d+)/
if (semver.find()) {
env.SEMVER = "${semver[0][1]}.${semver[0][2]}.${semver[0][3]}"
} else {
semver = env.EXT_RELEASE_CLEAN =~ /(\d+)\.(\d+)(?:\.(\d+))?(.*)/
if (semver.find()) {
if (semver[0][3]) {
env.SEMVER = "${semver[0][1]}.${semver[0][2]}.${semver[0][3]}"
} else if (!semver[0][3] && !semver[0][4]) {
env.SEMVER = "${semver[0][1]}.${semver[0][2]}.${(new Date()).format('YYYYMMdd')}"
} }
} }
} }
// If this is a master build use live docker endpoints
if (env.SEMVER != null) {
if (BRANCH_NAME != "master" && BRANCH_NAME != "main") {
env.SEMVER = "${env.SEMVER}-${BRANCH_NAME}"
}
println("SEMVER: ${env.SEMVER}")
} else {
println("No SEMVER detected")
}
}
}
}
// If this is a libtorrentv1 build use live docker endpoints
stage("Set ENV live build"){ stage("Set ENV live build"){
when { when {
branch "master" branch "libtorrentv1"
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
} }
steps { steps {
script{ script{
env.IMAGE = env.DOCKERHUB_IMAGE env.IMAGE = env.DOCKERHUB_IMAGE
env.GITHUBIMAGE = 'docker.pkg.github.com/' + env.LS_USER + '/' + env.LS_REPO + '/' + env.CONTAINER_NAME env.GITHUBIMAGE = 'ghcr.io/' + env.LS_USER + '/' + env.CONTAINER_NAME
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/' + env.CONTAINER_NAME env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/' + env.CONTAINER_NAME
env.QUAYIMAGE = 'quay.io/linuxserver.io/' + env.CONTAINER_NAME
if (env.MULTIARCH == 'true') { if (env.MULTIARCH == 'true') {
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER env.CI_TAGS = 'amd64-libtorrentv1-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER + '|arm64v8-libtorrentv1-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
} else { } else {
env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER env.CI_TAGS = 'libtorrentv1-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
} }
env.META_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.META_TAG = 'libtorrentv1-' + env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
env.EXT_RELEASE_TAG = 'libtorrentv1-version-' + env.EXT_RELEASE_CLEAN
} }
} }
} }
// If this is a dev build use dev docker endpoints // If this is a dev build use dev docker endpoints
stage("Set ENV dev build"){ stage("Set ENV dev build"){
when { when {
not {branch "master"} not {branch "libtorrentv1"}
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
} }
steps { steps {
script{ script{
env.IMAGE = env.DEV_DOCKERHUB_IMAGE env.IMAGE = env.DEV_DOCKERHUB_IMAGE
env.GITHUBIMAGE = 'docker.pkg.github.com/' + env.LS_USER + '/' + env.LS_REPO + '/lsiodev-' + env.CONTAINER_NAME env.GITHUBIMAGE = 'ghcr.io/' + env.LS_USER + '/lsiodev-' + env.CONTAINER_NAME
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lsiodev-' + env.CONTAINER_NAME env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lsiodev-' + env.CONTAINER_NAME
env.QUAYIMAGE = 'quay.io/linuxserver.io/lsiodev-' + env.CONTAINER_NAME
if (env.MULTIARCH == 'true') { if (env.MULTIARCH == 'true') {
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA env.CI_TAGS = 'amd64-libtorrentv1-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '|arm64v8-libtorrentv1-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
} else { } else {
env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA env.CI_TAGS = 'libtorrentv1-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
} }
env.META_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
env.META_TAG = 'libtorrentv1-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA
env.EXT_RELEASE_TAG = 'libtorrentv1-version-' + env.EXT_RELEASE_CLEAN
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DEV_DOCKERHUB_IMAGE + '/tags/' env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DEV_DOCKERHUB_IMAGE + '/tags/'
} }
} }
@@ -168,14 +206,17 @@ pipeline {
steps { steps {
script{ script{
env.IMAGE = env.PR_DOCKERHUB_IMAGE env.IMAGE = env.PR_DOCKERHUB_IMAGE
env.GITHUBIMAGE = 'docker.pkg.github.com/' + env.LS_USER + '/' + env.LS_REPO + '/lspipepr-' + env.CONTAINER_NAME env.GITHUBIMAGE = 'ghcr.io/' + env.LS_USER + '/lspipepr-' + env.CONTAINER_NAME
env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lspipepr-' + env.CONTAINER_NAME env.GITLABIMAGE = 'registry.gitlab.com/linuxserver.io/' + env.LS_REPO + '/lspipepr-' + env.CONTAINER_NAME
env.QUAYIMAGE = 'quay.io/linuxserver.io/lspipepr-' + env.CONTAINER_NAME
if (env.MULTIARCH == 'true') { if (env.MULTIARCH == 'true') {
env.CI_TAGS = 'amd64-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm32v7-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST + '|arm64v8-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST env.CI_TAGS = 'amd64-libtorrentv1-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST + '|arm64v8-libtorrentv1-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
} else { } else {
env.CI_TAGS = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST env.CI_TAGS = 'libtorrentv1-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
} }
env.META_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-pr-' + env.PULL_REQUEST env.VERSION_TAG = env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
env.META_TAG = 'libtorrentv1-' + env.EXT_RELEASE_CLEAN + '-pkg-' + env.PACKAGE_TAG + '-dev-' + env.COMMIT_SHA + '-pr-' + env.PULL_REQUEST
env.EXT_RELEASE_TAG = 'libtorrentv1-version-' + env.EXT_RELEASE_CLEAN
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/pull/' + env.PULL_REQUEST env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/pull/' + env.PULL_REQUEST
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.PR_DOCKERHUB_IMAGE + '/tags/' env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.PR_DOCKERHUB_IMAGE + '/tags/'
} }
@@ -188,32 +229,29 @@ pipeline {
} }
steps { steps {
withCredentials([ withCredentials([
string(credentialsId: 'spaces-key', variable: 'DO_KEY'), string(credentialsId: 'ci-tests-s3-key-id', variable: 'S3_KEY'),
string(credentialsId: 'spaces-secret', variable: 'DO_SECRET') string(credentialsId: 'ci-tests-s3-secret-access-key', variable: 'S3_SECRET')
]) { ]) {
script{ script{
env.SHELLCHECK_URL = 'https://lsio-ci.ams3.digitaloceanspaces.com/' + env.IMAGE + '/' + env.META_TAG + '/shellcheck-result.xml' env.SHELLCHECK_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/shellcheck-result.xml'
} }
sh '''curl -sL https://raw.githubusercontent.com/linuxserver/docker-shellcheck/master/checkrun.sh | /bin/bash''' sh '''curl -sL https://raw.githubusercontent.com/linuxserver/docker-jenkins-builder/master/checkrun.sh | /bin/bash'''
sh '''#! /bin/bash sh '''#! /bin/bash
set -e
docker pull lsiodev/spaces-file-upload:latest
docker run --rm \ docker run --rm \
-e DESTINATION=\"${IMAGE}/${META_TAG}/shellcheck-result.xml\" \
-e FILE_NAME="shellcheck-result.xml" \
-e MIMETYPE="text/xml" \
-v ${WORKSPACE}:/mnt \ -v ${WORKSPACE}:/mnt \
-e SECRET_KEY=\"${DO_SECRET}\" \ -e AWS_ACCESS_KEY_ID=\"${S3_KEY}\" \
-e ACCESS_KEY=\"${DO_KEY}\" \ -e AWS_SECRET_ACCESS_KEY=\"${S3_SECRET}\" \
-t lsiodev/spaces-file-upload:latest \ ghcr.io/linuxserver/baseimage-alpine:3.17 s6-envdir -fn -- /var/run/s6/container_environment /bin/bash -c "\
python /upload.py''' apk add --no-cache py3-pip && \
pip install s3cmd && \
s3cmd put --no-preserve --acl-public -m text/xml /mnt/shellcheck-result.xml s3://ci-tests.linuxserver.io/${IMAGE}/${META_TAG}/shellcheck-result.xml" || :'''
} }
} }
} }
// Use helper containers to render templated files // Use helper containers to render templated files
stage('Update-Templates') { stage('Update-Templates') {
when { when {
branch "master" branch "libtorrentv1"
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
expression { expression {
env.CONTAINER_NAME != null env.CONTAINER_NAME != null
@@ -223,21 +261,69 @@ pipeline {
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
TEMPDIR=$(mktemp -d) TEMPDIR=$(mktemp -d)
docker pull linuxserver/jenkins-builder:latest docker pull ghcr.io/linuxserver/jenkins-builder:latest
docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH=master -v ${TEMPDIR}:/ansible/jenkins linuxserver/jenkins-builder:latest docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH=libtorrentv1 -v ${TEMPDIR}:/ansible/jenkins ghcr.io/linuxserver/jenkins-builder:latest
CURRENTHASH=$(grep -hs ^ ${TEMPLATED_FILES} | md5sum | cut -c1-8) # Stage 1 - Jenkinsfile update
cd ${TEMPDIR}/docker-${CONTAINER_NAME} if [[ "$(md5sum Jenkinsfile | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile | awk '{ print $1 }')" ]]; then
NEWHASH=$(grep -hs ^ ${TEMPLATED_FILES} | md5sum | cut -c1-8)
if [[ "${CURRENTHASH}" != "${NEWHASH}" ]]; then
mkdir -p ${TEMPDIR}/repo mkdir -p ${TEMPDIR}/repo
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO} git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
cd ${TEMPDIR}/repo/${LS_REPO} cd ${TEMPDIR}/repo/${LS_REPO}
git checkout -f master git checkout -f libtorrentv1
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/Jenkinsfile ${TEMPDIR}/repo/${LS_REPO}/
git add Jenkinsfile
git commit -m 'Bot Updating Templated Files'
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
echo "Updating Jenkinsfile"
rm -Rf ${TEMPDIR}
exit 0
else
echo "Jenkinsfile is up to date."
fi
# Stage 2 - Delete old templates
OLD_TEMPLATES=".github/ISSUE_TEMPLATE.md .github/ISSUE_TEMPLATE/issue.bug.md .github/ISSUE_TEMPLATE/issue.feature.md .github/workflows/call_invalid_helper.yml .github/workflows/stale.yml Dockerfile.armhf"
for i in ${OLD_TEMPLATES}; do
if [[ -f "${i}" ]]; then
TEMPLATES_TO_DELETE="${i} ${TEMPLATES_TO_DELETE}"
fi
done
if [[ -n "${TEMPLATES_TO_DELETE}" ]]; then
mkdir -p ${TEMPDIR}/repo
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
cd ${TEMPDIR}/repo/${LS_REPO}
git checkout -f libtorrentv1
for i in ${TEMPLATES_TO_DELETE}; do
git rm "${i}"
done
git commit -m 'Bot Updating Templated Files'
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
echo "Deleting old and deprecated templates"
rm -Rf ${TEMPDIR}
exit 0
else
echo "No templates to delete"
fi
# Stage 3 - Update templates
CURRENTHASH=$(grep -hs ^ ${TEMPLATED_FILES} | md5sum | cut -c1-8)
cd ${TEMPDIR}/docker-${CONTAINER_NAME}
NEWHASH=$(grep -hs ^ ${TEMPLATED_FILES} | md5sum | cut -c1-8)
if [[ "${CURRENTHASH}" != "${NEWHASH}" ]] || ! grep -q '.jenkins-external' "${WORKSPACE}/.gitignore" 2>/dev/null; then
mkdir -p ${TEMPDIR}/repo
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/repo/${LS_REPO}
cd ${TEMPDIR}/repo/${LS_REPO}
git checkout -f libtorrentv1
cd ${TEMPDIR}/docker-${CONTAINER_NAME} cd ${TEMPDIR}/docker-${CONTAINER_NAME}
mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/workflows mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/workflows
cp --parents ${TEMPLATED_FILES} ${TEMPDIR}/repo/${LS_REPO}/ mkdir -p ${TEMPDIR}/repo/${LS_REPO}/.github/ISSUE_TEMPLATE
cp --parents ${TEMPLATED_FILES} ${TEMPDIR}/repo/${LS_REPO}/ || :
cp --parents readme-vars.yml ${TEMPDIR}/repo/${LS_REPO}/ || :
cd ${TEMPDIR}/repo/${LS_REPO}/ cd ${TEMPDIR}/repo/${LS_REPO}/
git add ${TEMPLATED_FILES} if ! grep -q '.jenkins-external' .gitignore 2>/dev/null; then
echo ".jenkins-external" >> .gitignore
git add .gitignore
fi
git add readme-vars.yml ${TEMPLATED_FILES}
git commit -m 'Bot Updating Templated Files' git commit -m 'Bot Updating Templated Files'
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git --all
echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER} echo "true" > /tmp/${COMMIT_SHA}-${BUILD_NUMBER}
@@ -246,13 +332,36 @@ pipeline {
fi fi
mkdir -p ${TEMPDIR}/gitbook mkdir -p ${TEMPDIR}/gitbook
git clone https://github.com/linuxserver/docker-documentation.git ${TEMPDIR}/gitbook/docker-documentation git clone https://github.com/linuxserver/docker-documentation.git ${TEMPDIR}/gitbook/docker-documentation
if [[ "${BRANCH_NAME}" == "master" ]] && [[ (! -f ${TEMPDIR}/gitbook/docker-documentation/images/docker-${CONTAINER_NAME}.md) || ("$(md5sum ${TEMPDIR}/gitbook/docker-documentation/images/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')") ]]; then if [[ ("${BRANCH_NAME}" == "master") || ("${BRANCH_NAME}" == "main") ]] && [[ (! -f ${TEMPDIR}/gitbook/docker-documentation/images/docker-${CONTAINER_NAME}.md) || ("$(md5sum ${TEMPDIR}/gitbook/docker-documentation/images/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md | awk '{ print $1 }')") ]]; then
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/docker-${CONTAINER_NAME}.md ${TEMPDIR}/gitbook/docker-documentation/images/ cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/docker-${CONTAINER_NAME}.md ${TEMPDIR}/gitbook/docker-documentation/images/
cd ${TEMPDIR}/gitbook/docker-documentation/ cd ${TEMPDIR}/gitbook/docker-documentation/
git add images/docker-${CONTAINER_NAME}.md git add images/docker-${CONTAINER_NAME}.md
git commit -m 'Bot Updating Documentation' git commit -m 'Bot Updating Documentation'
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git --all git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/docker-documentation.git --all
fi fi
mkdir -p ${TEMPDIR}/unraid
git clone https://github.com/linuxserver/docker-templates.git ${TEMPDIR}/unraid/docker-templates
git clone https://github.com/linuxserver/templates.git ${TEMPDIR}/unraid/templates
if [[ -f ${TEMPDIR}/unraid/docker-templates/linuxserver.io/img/${CONTAINER_NAME}-logo.png ]]; then
sed -i "s|master/linuxserver.io/img/linuxserver-ls-logo.png|master/linuxserver.io/img/${CONTAINER_NAME}-logo.png|" ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml
elif [[ -f ${TEMPDIR}/unraid/docker-templates/linuxserver.io/img/${CONTAINER_NAME}-icon.png ]]; then
sed -i "s|master/linuxserver.io/img/linuxserver-ls-logo.png|master/linuxserver.io/img/${CONTAINER_NAME}-icon.png|" ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml
fi
if [[ ("${BRANCH_NAME}" == "master") || ("${BRANCH_NAME}" == "main") ]] && [[ (! -f ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml) || ("$(md5sum ${TEMPDIR}/unraid/templates/unraid/${CONTAINER_NAME}.xml | awk '{ print $1 }')" != "$(md5sum ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml | awk '{ print $1 }')") ]]; then
cd ${TEMPDIR}/unraid/templates/
if grep -wq "${CONTAINER_NAME}" ${TEMPDIR}/unraid/templates/unraid/ignore.list; then
echo "Image is on the ignore list, marking Unraid template as deprecated"
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml ${TEMPDIR}/unraid/templates/unraid/
git add -u unraid/${CONTAINER_NAME}.xml
git mv unraid/${CONTAINER_NAME}.xml unraid/deprecated/${CONTAINER_NAME}.xml || :
git commit -m 'Bot Moving Deprecated Unraid Template' || :
else
cp ${TEMPDIR}/docker-${CONTAINER_NAME}/.jenkins-external/${CONTAINER_NAME}.xml ${TEMPDIR}/unraid/templates/unraid/
git add unraid/${CONTAINER_NAME}.xml
git commit -m 'Bot Updating Unraid Template'
fi
git push https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/linuxserver/templates.git --all
fi
rm -Rf ${TEMPDIR}''' rm -Rf ${TEMPDIR}'''
script{ script{
env.FILES_UPDATED = sh( env.FILES_UPDATED = sh(
@@ -264,7 +373,7 @@ pipeline {
// Exit the build if the Templated files were just updated // Exit the build if the Templated files were just updated
stage('Template-exit') { stage('Template-exit') {
when { when {
branch "master" branch "libtorrentv1"
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
environment name: 'FILES_UPDATED', value: 'true' environment name: 'FILES_UPDATED', value: 'true'
expression { expression {
@@ -277,6 +386,26 @@ pipeline {
} }
} }
} }
// If this is a libtorrentv1 build check the S6 service file perms
stage("Check S6 Service file Permissions"){
when {
branch "libtorrentv1"
environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: ''
}
steps {
script{
sh '''#! /bin/bash
WRONG_PERM=$(find ./ -path "./.git" -prune -o \\( -name "run" -o -name "finish" -o -name "check" \\) -not -perm -u=x,g=x,o=x -print)
if [[ -n "${WRONG_PERM}" ]]; then
echo "The following S6 service files are missing the executable bit; canceling the faulty build: ${WRONG_PERM}"
exit 1
else
echo "S6 service file perms look good."
fi '''
}
}
}
/* ####################### /* #######################
GitLab Mirroring GitLab Mirroring
####################### */ ####################### */
@@ -297,60 +426,95 @@ pipeline {
"visibility":"public"}' ''' "visibility":"public"}' '''
} }
} }
/* #######################
Scarf.sh package registry
####################### */
// Add package to Scarf.sh and set permissions
stage("Scarf.sh package registry"){
when {
branch "libtorrentv1"
environment name: 'EXIT_STATUS', value: ''
}
steps{
sh '''#! /bin/bash
PACKAGE_UUID=$(curl -X GET -H "Authorization: Bearer ${SCARF_TOKEN}" https://scarf.sh/api/v1/organizations/linuxserver-ci/packages | jq -r '.[] | select(.name=="linuxserver/qbittorrent") | .uuid' || :)
if [ -z "${PACKAGE_UUID}" ]; then
echo "Adding package to Scarf.sh"
curl -sX POST https://scarf.sh/api/v1/organizations/linuxserver-ci/packages \
-H "Authorization: Bearer ${SCARF_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"name":"linuxserver/qbittorrent",\
"shortDescription":"example description",\
"libraryType":"docker",\
"website":"https://github.com/linuxserver/docker-qbittorrent",\
"backendUrl":"https://ghcr.io/linuxserver/qbittorrent",\
"publicUrl":"https://lscr.io/linuxserver/qbittorrent"}' || :
else
echo "Package already exists on Scarf.sh"
fi
'''
}
}
/* ############### /* ###############
Build Container Build Container
############### */ ############### */
// Build Docker container for push to LS Repo // Build Docker container for push to LS Repo
stage('Build-Single') { stage('Build-Single') {
when { when {
environment name: 'MULTIARCH', value: 'false' expression {
env.MULTIARCH == 'false' || params.PACKAGE_CHECK == 'true'
}
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
} }
steps { steps {
sh "docker build --no-cache --pull -t ${IMAGE}:${META_TAG} \ echo "Running on node: ${NODE_NAME}"
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." sh "sed -r -i 's|(^FROM .*)|\\1\\n\\nENV LSIO_FIRST_PARTY=true|g' Dockerfile"
sh "docker buildx build \
--label \"org.opencontainers.image.created=${GITHUB_DATE}\" \
--label \"org.opencontainers.image.authors=linuxserver.io\" \
--label \"org.opencontainers.image.url=https://github.com/linuxserver/docker-qbittorrent/packages\" \
--label \"org.opencontainers.image.documentation=https://docs.linuxserver.io/images/docker-qbittorrent\" \
--label \"org.opencontainers.image.source=https://github.com/linuxserver/docker-qbittorrent\" \
--label \"org.opencontainers.image.version=${EXT_RELEASE_CLEAN}-ls${LS_TAG_NUMBER}\" \
--label \"org.opencontainers.image.revision=${COMMIT_SHA}\" \
--label \"org.opencontainers.image.vendor=linuxserver.io\" \
--label \"org.opencontainers.image.licenses=GPL-3.0-only\" \
--label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \
--label \"org.opencontainers.image.title=Qbittorrent\" \
--label \"org.opencontainers.image.description=The [Qbittorrent](https://www.qbittorrent.org/) project aims to provide an open-source software alternative to µTorrent. qBittorrent is based on the Qt toolkit and libtorrent-rasterbar library.\" \
--no-cache --pull -t ${IMAGE}:${META_TAG} --platform=linux/amd64 \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
} }
} }
// Build MultiArch Docker containers for push to LS Repo // Build MultiArch Docker containers for push to LS Repo
stage('Build-Multi') { stage('Build-Multi') {
when { when {
allOf {
environment name: 'MULTIARCH', value: 'true' environment name: 'MULTIARCH', value: 'true'
expression { params.PACKAGE_CHECK == 'false' }
}
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
} }
parallel { parallel {
stage('Build X86') { stage('Build X86') {
steps { steps {
sh "docker build --no-cache --pull -t ${IMAGE}:amd64-${META_TAG} \ echo "Running on node: ${NODE_NAME}"
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." sh "sed -r -i 's|(^FROM .*)|\\1\\n\\nENV LSIO_FIRST_PARTY=true|g' Dockerfile"
} sh "docker buildx build \
} --label \"org.opencontainers.image.created=${GITHUB_DATE}\" \
stage('Build ARMHF') { --label \"org.opencontainers.image.authors=linuxserver.io\" \
agent { --label \"org.opencontainers.image.url=https://github.com/linuxserver/docker-qbittorrent/packages\" \
label 'ARMHF' --label \"org.opencontainers.image.documentation=https://docs.linuxserver.io/images/docker-qbittorrent\" \
} --label \"org.opencontainers.image.source=https://github.com/linuxserver/docker-qbittorrent\" \
steps { --label \"org.opencontainers.image.version=${EXT_RELEASE_CLEAN}-ls${LS_TAG_NUMBER}\" \
withCredentials([ --label \"org.opencontainers.image.revision=${COMMIT_SHA}\" \
[ --label \"org.opencontainers.image.vendor=linuxserver.io\" \
$class: 'UsernamePasswordMultiBinding', --label \"org.opencontainers.image.licenses=GPL-3.0-only\" \
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207', --label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \
usernameVariable: 'DOCKERUSER', --label \"org.opencontainers.image.title=Qbittorrent\" \
passwordVariable: 'DOCKERPASS' --label \"org.opencontainers.image.description=The [Qbittorrent](https://www.qbittorrent.org/) project aims to provide an open-source software alternative to µTorrent. qBittorrent is based on the Qt toolkit and libtorrent-rasterbar library.\" \
] --no-cache --pull -t ${IMAGE}:amd64-${META_TAG} --platform=linux/amd64 \
]) { --build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
echo 'Logging into DockerHub'
sh '''#! /bin/bash
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
'''
sh "docker build --no-cache --pull -f Dockerfile.armhf -t ${IMAGE}:arm32v7-${META_TAG} \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
sh "docker tag ${IMAGE}:arm32v7-${META_TAG} lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}"
retry(5) {
sh "docker push lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER}"
}
sh '''docker rmi \
${IMAGE}:arm32v7-${META_TAG} \
lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} || :'''
}
} }
} }
stage('Build ARM64') { stage('Build ARM64') {
@@ -358,28 +522,37 @@ pipeline {
label 'ARM64' label 'ARM64'
} }
steps { steps {
withCredentials([ echo "Running on node: ${NODE_NAME}"
[ echo 'Logging into Github'
$class: 'UsernamePasswordMultiBinding',
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS'
]
]) {
echo 'Logging into DockerHub'
sh '''#! /bin/bash sh '''#! /bin/bash
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
''' '''
sh "docker build --no-cache --pull -f Dockerfile.aarch64 -t ${IMAGE}:arm64v8-${META_TAG} \ sh "sed -r -i 's|(^FROM .*)|\\1\\n\\nENV LSIO_FIRST_PARTY=true|g' Dockerfile.aarch64"
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${META_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ." sh "docker buildx build \
sh "docker tag ${IMAGE}:arm64v8-${META_TAG} lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}" --label \"org.opencontainers.image.created=${GITHUB_DATE}\" \
--label \"org.opencontainers.image.authors=linuxserver.io\" \
--label \"org.opencontainers.image.url=https://github.com/linuxserver/docker-qbittorrent/packages\" \
--label \"org.opencontainers.image.documentation=https://docs.linuxserver.io/images/docker-qbittorrent\" \
--label \"org.opencontainers.image.source=https://github.com/linuxserver/docker-qbittorrent\" \
--label \"org.opencontainers.image.version=${EXT_RELEASE_CLEAN}-ls${LS_TAG_NUMBER}\" \
--label \"org.opencontainers.image.revision=${COMMIT_SHA}\" \
--label \"org.opencontainers.image.vendor=linuxserver.io\" \
--label \"org.opencontainers.image.licenses=GPL-3.0-only\" \
--label \"org.opencontainers.image.ref.name=${COMMIT_SHA}\" \
--label \"org.opencontainers.image.title=Qbittorrent\" \
--label \"org.opencontainers.image.description=The [Qbittorrent](https://www.qbittorrent.org/) project aims to provide an open-source software alternative to µTorrent. qBittorrent is based on the Qt toolkit and libtorrent-rasterbar library.\" \
--no-cache --pull -f Dockerfile.aarch64 -t ${IMAGE}:arm64v8-${META_TAG} --platform=linux/arm64 \
--build-arg ${BUILD_VERSION_ARG}=${EXT_RELEASE} --build-arg VERSION=\"${VERSION_TAG}\" --build-arg BUILD_DATE=${GITHUB_DATE} ."
sh "docker tag ${IMAGE}:arm64v8-${META_TAG} ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
retry(5) { retry(5) {
sh "docker push lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}" sh "docker push ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}"
}
sh '''docker rmi \
${IMAGE}:arm64v8-${META_TAG} \
lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || :'''
} }
sh '''#! /bin/bash
containers=$(docker ps -aq)
if [[ -n "${containers}" ]]; then
docker stop ${containers}
fi
docker system prune -af --volumes || : '''
} }
} }
} }
@@ -387,7 +560,7 @@ pipeline {
// Take the image we just built and dump package versions for comparison // Take the image we just built and dump package versions for comparison
stage('Update-packages') { stage('Update-packages') {
when { when {
branch "master" branch "libtorrentv1"
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
} }
@@ -395,27 +568,22 @@ pipeline {
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
TEMPDIR=$(mktemp -d) TEMPDIR=$(mktemp -d)
if [ "${MULTIARCH}" == "true" ]; then if [ "${MULTIARCH}" == "true" ] && [ "${PACKAGE_CHECK}" == "false" ]; then
LOCAL_CONTAINER=${IMAGE}:amd64-${META_TAG} LOCAL_CONTAINER=${IMAGE}:amd64-${META_TAG}
else else
LOCAL_CONTAINER=${IMAGE}:${META_TAG} LOCAL_CONTAINER=${IMAGE}:${META_TAG}
fi fi
if [ "${DIST_IMAGE}" == "alpine" ]; then touch ${TEMPDIR}/package_versions.txt
docker run --rm --entrypoint '/bin/sh' -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\ docker run --rm \
apk info -v > /tmp/package_versions.txt && \ -v /var/run/docker.sock:/var/run/docker.sock:ro \
sort -o /tmp/package_versions.txt /tmp/package_versions.txt && \ -v ${TEMPDIR}:/tmp \
chmod 777 /tmp/package_versions.txt' ghcr.io/anchore/syft:latest \
elif [ "${DIST_IMAGE}" == "ubuntu" ]; then ${LOCAL_CONTAINER} -o table=/tmp/package_versions.txt
docker run --rm --entrypoint '/bin/sh' -v ${TEMPDIR}:/tmp ${LOCAL_CONTAINER} -c '\
apt list -qq --installed | sed "s#/.*now ##g" | cut -d" " -f1 > /tmp/package_versions.txt && \
sort -o /tmp/package_versions.txt /tmp/package_versions.txt && \
chmod 777 /tmp/package_versions.txt'
fi
NEW_PACKAGE_TAG=$(md5sum ${TEMPDIR}/package_versions.txt | cut -c1-8 ) NEW_PACKAGE_TAG=$(md5sum ${TEMPDIR}/package_versions.txt | cut -c1-8 )
echo "Package tag sha from current packages in buit container is ${NEW_PACKAGE_TAG} comparing to old ${PACKAGE_TAG} from github" echo "Package tag sha from current packages in buit container is ${NEW_PACKAGE_TAG} comparing to old ${PACKAGE_TAG} from github"
if [ "${NEW_PACKAGE_TAG}" != "${PACKAGE_TAG}" ]; then if [ "${NEW_PACKAGE_TAG}" != "${PACKAGE_TAG}" ]; then
git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/${LS_REPO} git clone https://github.com/${LS_USER}/${LS_REPO}.git ${TEMPDIR}/${LS_REPO}
git --git-dir ${TEMPDIR}/${LS_REPO}/.git checkout -f master git --git-dir ${TEMPDIR}/${LS_REPO}/.git checkout -f libtorrentv1
cp ${TEMPDIR}/package_versions.txt ${TEMPDIR}/${LS_REPO}/ cp ${TEMPDIR}/package_versions.txt ${TEMPDIR}/${LS_REPO}/
cd ${TEMPDIR}/${LS_REPO}/ cd ${TEMPDIR}/${LS_REPO}/
wait wait
@@ -439,7 +607,7 @@ pipeline {
// Exit the build if the package file was just updated // Exit the build if the package file was just updated
stage('PACKAGE-exit') { stage('PACKAGE-exit') {
when { when {
branch "master" branch "libtorrentv1"
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
environment name: 'PACKAGE_UPDATED', value: 'true' environment name: 'PACKAGE_UPDATED', value: 'true'
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
@@ -453,7 +621,7 @@ pipeline {
// Exit the build if this is just a package check and there are no changes to push // Exit the build if this is just a package check and there are no changes to push
stage('PACKAGECHECK-exit') { stage('PACKAGECHECK-exit') {
when { when {
branch "master" branch "libtorrentv1"
environment name: 'CHANGE_ID', value: '' environment name: 'CHANGE_ID', value: ''
environment name: 'PACKAGE_UPDATED', value: 'false' environment name: 'PACKAGE_UPDATED', value: 'false'
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
@@ -478,20 +646,19 @@ pipeline {
} }
steps { steps {
withCredentials([ withCredentials([
string(credentialsId: 'spaces-key', variable: 'DO_KEY'), string(credentialsId: 'ci-tests-s3-key-id', variable: 'S3_KEY'),
string(credentialsId: 'spaces-secret', variable: 'DO_SECRET') string(credentialsId: 'ci-tests-s3-secret-access-key ', variable: 'S3_SECRET')
]) { ]) {
script{ script{
env.CI_URL = 'https://lsio-ci.ams3.digitaloceanspaces.com/' + env.IMAGE + '/' + env.META_TAG + '/index.html' env.CI_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/index.html'
env.CI_JSON_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/report.json'
} }
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
docker pull lsiodev/ci:latest docker pull ghcr.io/linuxserver/ci:latest
if [ "${MULTIARCH}" == "true" ]; then if [ "${MULTIARCH}" == "true" ]; then
docker pull lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
docker pull lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
docker tag lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
docker tag lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
fi fi
docker run --rm \ docker run --rm \
--shm-size=1gb \ --shm-size=1gb \
@@ -503,16 +670,14 @@ pipeline {
-e PORT=\"${CI_PORT}\" \ -e PORT=\"${CI_PORT}\" \
-e SSL=\"${CI_SSL}\" \ -e SSL=\"${CI_SSL}\" \
-e BASE=\"${DIST_IMAGE}\" \ -e BASE=\"${DIST_IMAGE}\" \
-e SECRET_KEY=\"${DO_SECRET}\" \ -e SECRET_KEY=\"${S3_SECRET}\" \
-e ACCESS_KEY=\"${DO_KEY}\" \ -e ACCESS_KEY=\"${S3_KEY}\" \
-e DOCKER_ENV=\"${CI_DOCKERENV}\" \ -e DOCKER_ENV=\"${CI_DOCKERENV}\" \
-e WEB_SCREENSHOT=\"${CI_WEB}\" \ -e WEB_SCREENSHOT=\"${CI_WEB}\" \
-e WEB_AUTH=\"${CI_AUTH}\" \ -e WEB_AUTH=\"${CI_AUTH}\" \
-e WEB_PATH=\"${CI_WEBPATH}\" \ -e WEB_PATH=\"${CI_WEBPATH}\" \
-e DO_REGION="ams3" \ -t ghcr.io/linuxserver/ci:latest \
-e DO_BUCKET="lsio-ci" \ python3 test_build.py'''
-t lsiodev/ci:latest \
python /ci/ci.py'''
} }
} }
} }
@@ -532,29 +697,37 @@ pipeline {
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207', credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER', usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS' passwordVariable: 'DOCKERPASS'
],
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot',
usernameVariable: 'QUAYUSER',
passwordVariable: 'QUAYPASS'
] ]
]) { ]) {
retry(5) { retry(5) {
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
echo $GITHUB_TOKEN | docker login docker.pkg.github.com -u LinuxServer-CI --password-stdin echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
for PUSHIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${QUAYIMAGE}" "${IMAGE}"; do
docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG} docker tag ${IMAGE}:${META_TAG} ${PUSHIMAGE}:${META_TAG}
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:latest docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:libtorrentv1
docker push ${PUSHIMAGE}:latest docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker tag ${PUSHIMAGE}:${META_TAG} ${PUSHIMAGE}:${SEMVER}
fi
docker push ${PUSHIMAGE}:libtorrentv1
docker push ${PUSHIMAGE}:${META_TAG} docker push ${PUSHIMAGE}:${META_TAG}
docker push ${PUSHIMAGE}:${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker push ${PUSHIMAGE}:${SEMVER}
fi
done done
''' '''
} }
sh '''#! /bin/bash
for DELETEIMAGE in "${GITHUBIMAGE}" "{GITLABIMAGE}" "${IMAGE}"; do
docker rmi \
${DELETEIMAGE}:${META_TAG} \
${DELETEIMAGE}:latest || :
done
'''
} }
} }
} }
@@ -571,81 +744,86 @@ pipeline {
credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207', credentialsId: '3f9ba4d5-100d-45b0-a3c4-633fd6061207',
usernameVariable: 'DOCKERUSER', usernameVariable: 'DOCKERUSER',
passwordVariable: 'DOCKERPASS' passwordVariable: 'DOCKERPASS'
],
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: 'Quay.io-Robot',
usernameVariable: 'QUAYUSER',
passwordVariable: 'QUAYPASS'
] ]
]) { ]) {
retry(5) { retry(5) {
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
echo $GITHUB_TOKEN | docker login docker.pkg.github.com -u LinuxServer-CI --password-stdin echo $GITHUB_TOKEN | docker login ghcr.io -u LinuxServer-CI --password-stdin
echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin echo $GITLAB_TOKEN | docker login registry.gitlab.com -u LinuxServer.io --password-stdin
echo $QUAYPASS | docker login quay.io -u $QUAYUSER --password-stdin
if [ "${CI}" == "false" ]; then if [ "${CI}" == "false" ]; then
docker pull lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} docker pull ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER}
docker pull lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} docker tag ghcr.io/linuxserver/lsiodev-buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
docker tag lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm32v7-${META_TAG}
docker tag lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} ${IMAGE}:arm64v8-${META_TAG}
fi fi
for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}"; do for MANIFESTIMAGE in "${IMAGE}" "${GITLABIMAGE}" "${GITHUBIMAGE}" "${QUAYIMAGE}"; do
docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} docker tag ${IMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG}
docker tag ${IMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG} docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-libtorrentv1
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} docker tag ${IMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-latest docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-libtorrentv1
docker tag ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm32v7-latest docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-latest if [ -n "${SEMVER}" ]; then
docker tag ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:amd64-${SEMVER}
docker tag ${MANIFESTIMAGE}:arm64v8-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
fi
docker push ${MANIFESTIMAGE}:amd64-${META_TAG} docker push ${MANIFESTIMAGE}:amd64-${META_TAG}
docker push ${MANIFESTIMAGE}:arm32v7-${META_TAG} docker push ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG}
docker push ${MANIFESTIMAGE}:amd64-libtorrentv1
docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG} docker push ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker push ${MANIFESTIMAGE}:amd64-latest docker push ${MANIFESTIMAGE}:arm64v8-libtorrentv1
docker push ${MANIFESTIMAGE}:arm32v7-latest docker push ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
docker push ${MANIFESTIMAGE}:arm64v8-latest if [ -n "${SEMVER}" ]; then
docker manifest push --purge ${MANIFESTIMAGE}:latest || : docker push ${MANIFESTIMAGE}:amd64-${SEMVER}
docker manifest create ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:amd64-latest ${MANIFESTIMAGE}:arm32v7-latest ${MANIFESTIMAGE}:arm64v8-latest docker push ${MANIFESTIMAGE}:arm64v8-${SEMVER}
docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm32v7-latest --os linux --arch arm fi
docker manifest annotate ${MANIFESTIMAGE}:latest ${MANIFESTIMAGE}:arm64v8-latest --os linux --arch arm64 --variant v8 docker manifest push --purge ${MANIFESTIMAGE}:libtorrentv1 || :
docker manifest create ${MANIFESTIMAGE}:libtorrentv1 ${MANIFESTIMAGE}:amd64-libtorrentv1 ${MANIFESTIMAGE}:arm64v8-libtorrentv1
docker manifest annotate ${MANIFESTIMAGE}:libtorrentv1 ${MANIFESTIMAGE}:arm64v8-libtorrentv1 --os linux --arch arm64 --variant v8
docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG} || : docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG} || :
docker manifest create ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} docker manifest create ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:amd64-${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG}
docker manifest annotate ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:arm32v7-${META_TAG} --os linux --arch arm
docker manifest annotate ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} --os linux --arch arm64 --variant v8 docker manifest annotate ${MANIFESTIMAGE}:${META_TAG} ${MANIFESTIMAGE}:arm64v8-${META_TAG} --os linux --arch arm64 --variant v8
docker manifest push --purge ${MANIFESTIMAGE}:latest docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} || :
docker manifest create ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:amd64-${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG}
docker manifest annotate ${MANIFESTIMAGE}:${EXT_RELEASE_TAG} ${MANIFESTIMAGE}:arm64v8-${EXT_RELEASE_TAG} --os linux --arch arm64 --variant v8
if [ -n "${SEMVER}" ]; then
docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER} || :
docker manifest create ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:amd64-${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER}
docker manifest annotate ${MANIFESTIMAGE}:${SEMVER} ${MANIFESTIMAGE}:arm64v8-${SEMVER} --os linux --arch arm64 --variant v8
fi
token=$(curl -sX GET "https://ghcr.io/token?scope=repository%3Alinuxserver%2F${CONTAINER_NAME}%3Apull" | jq -r '.token')
digest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/linuxserver/${CONTAINER_NAME}/manifests/arm32v7-libtorrentv1")
if [[ $(echo "$digest" | jq -r '.layers') != "null" ]]; then
docker manifest push --purge ${MANIFESTIMAGE}:arm32v7-libtorrentv1 || :
docker manifest create ${MANIFESTIMAGE}:arm32v7-libtorrentv1 ${MANIFESTIMAGE}:amd64-libtorrentv1
docker manifest push --purge ${MANIFESTIMAGE}:arm32v7-libtorrentv1
fi
docker manifest push --purge ${MANIFESTIMAGE}:libtorrentv1
docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG} docker manifest push --purge ${MANIFESTIMAGE}:${META_TAG}
docker manifest push --purge ${MANIFESTIMAGE}:${EXT_RELEASE_TAG}
if [ -n "${SEMVER}" ]; then
docker manifest push --purge ${MANIFESTIMAGE}:${SEMVER}
fi
done done
docker tag ${IMAGE}:amd64-${META_TAG} ${GITHUBIMAGE}:amd64-${META_TAG}
docker tag ${IMAGE}:arm32v7-${META_TAG} ${GITHUBIMAGE}:arm32v7-${META_TAG}
docker tag ${IMAGE}:arm64v8-${META_TAG} ${GITHUBIMAGE}:arm64v8-${META_TAG}
docker tag ${GITHUBIMAGE}:amd64-${META_TAG} ${GITHUBIMAGE}:latest
docker tag ${GITHUBIMAGE}:amd64-${META_TAG} ${GITHUBIMAGE}:${META_TAG}
docker tag ${GITHUBIMAGE}:arm32v7-${META_TAG} ${GITHUBIMAGE}:arm32v7-latest
docker tag ${GITHUBIMAGE}:arm64v8-${META_TAG} ${GITHUBIMAGE}:arm64v8-latest
docker push ${GITHUBIMAGE}:amd64-${META_TAG}
docker push ${GITHUBIMAGE}:arm32v7-${META_TAG}
docker push ${GITHUBIMAGE}:arm64v8-${META_TAG}
docker push ${GITHUBIMAGE}:latest
docker push ${GITHUBIMAGE}:${META_TAG}
docker push ${GITHUBIMAGE}:arm32v7-latest
docker push ${GITHUBIMAGE}:arm64v8-latest
''' '''
} }
sh '''#! /bin/bash
for DELETEIMAGE in "${GITHUBIMAGE}" "${GITLABIMAGE}" "${IMAGE}"; do
docker rmi \
${DELETEIMAGE}:amd64-${META_TAG} \
${DELETEIMAGE}:amd64-latest \
${DELETEIMAGE}:arm32v7-${META_TAG} \
${DELETEIMAGE}:arm32v7-latest \
${DELETEIMAGE}:arm64v8-${META_TAG} \
${DELETEIMAGE}:arm64v8-latest || :
done
docker rmi \
lsiodev/buildcache:arm32v7-${COMMIT_SHA}-${BUILD_NUMBER} \
lsiodev/buildcache:arm64v8-${COMMIT_SHA}-${BUILD_NUMBER} || :
'''
} }
} }
} }
// If this is a public release tag it in the LS Github // If this is a public release tag it in the LS Github
stage('Github-Tag-Push-Release') { stage('Github-Tag-Push-Release') {
when { when {
branch "master" branch "libtorrentv1"
expression { expression {
env.LS_RELEASE != env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER env.LS_RELEASE != env.EXT_RELEASE_CLEAN + '-ls' + env.LS_TAG_NUMBER
} }
@@ -653,21 +831,21 @@ pipeline {
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
} }
steps { steps {
echo "Pushing New tag for current commit ${EXT_RELEASE_CLEAN}-ls${LS_TAG_NUMBER}" echo "Pushing New tag for current commit ${META_TAG}"
sh '''curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \ sh '''curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/git/tags \
-d '{"tag":"'${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}'",\ -d '{"tag":"'${META_TAG}'",\
"object": "'${COMMIT_SHA}'",\ "object": "'${COMMIT_SHA}'",\
"message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to master",\ "message": "Tagging Release '${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}' to libtorrentv1",\
"type": "commit",\ "type": "commit",\
"tagger": {"name": "LinuxServer Jenkins","email": "jenkins@linuxserver.io","date": "'${GITHUB_DATE}'"}}' ''' "tagger": {"name": "LinuxServer Jenkins","email": "jenkins@linuxserver.io","date": "'${GITHUB_DATE}'"}}' '''
echo "Pushing New release for Tag" echo "Pushing New release for Tag"
sh '''#! /bin/bash sh '''#! /bin/bash
echo "Updating to ${EXT_RELEASE_CLEAN}" > releasebody.json echo "Updating to ${EXT_RELEASE_CLEAN}" > releasebody.json
echo '{"tag_name":"'${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}'",\ echo '{"tag_name":"'${META_TAG}'",\
"target_commitish": "master",\ "target_commitish": "libtorrentv1",\
"name": "'${EXT_RELEASE_CLEAN}'-ls'${LS_TAG_NUMBER}'",\ "name": "'${META_TAG}'",\
"body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n**Remote Changes:**\\n\\n' > start "body": "**LinuxServer Changes:**\\n\\n'${LS_RELEASE_NOTES}'\\n\\n**Remote Changes:**\\n\\n' > start
printf '","draft": false,"prerelease": false}' >> releasebody.json printf '","draft": false,"prerelease": true}' >> releasebody.json
paste -d'\\0' start releasebody.json > releasebody.json.done paste -d'\\0' start releasebody.json > releasebody.json.done
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done''' curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/releases -d @releasebody.json.done'''
} }
@@ -690,9 +868,9 @@ pipeline {
sh '''#! /bin/bash sh '''#! /bin/bash
set -e set -e
TEMPDIR=$(mktemp -d) TEMPDIR=$(mktemp -d)
docker pull linuxserver/jenkins-builder:latest docker pull ghcr.io/linuxserver/jenkins-builder:latest
docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH=master -v ${TEMPDIR}:/ansible/jenkins linuxserver/jenkins-builder:latest docker run --rm -e CONTAINER_NAME=${CONTAINER_NAME} -e GITHUB_BRANCH="${BRANCH_NAME}" -v ${TEMPDIR}:/ansible/jenkins ghcr.io/linuxserver/jenkins-builder:latest
docker pull lsiodev/readme-sync docker pull ghcr.io/linuxserver/readme-sync
docker run --rm=true \ docker run --rm=true \
-e DOCKERHUB_USERNAME=$DOCKERUSER \ -e DOCKERHUB_USERNAME=$DOCKERUSER \
-e DOCKERHUB_PASSWORD=$DOCKERPASS \ -e DOCKERHUB_PASSWORD=$DOCKERPASS \
@@ -700,7 +878,7 @@ pipeline {
-e DOCKER_REPOSITORY=${IMAGE} \ -e DOCKER_REPOSITORY=${IMAGE} \
-e GIT_BRANCH=master \ -e GIT_BRANCH=master \
-v ${TEMPDIR}/docker-${CONTAINER_NAME}:/mnt \ -v ${TEMPDIR}/docker-${CONTAINER_NAME}:/mnt \
lsiodev/readme-sync bash -c 'node sync' ghcr.io/linuxserver/readme-sync bash -c 'node sync'
rm -Rf ${TEMPDIR} ''' rm -Rf ${TEMPDIR} '''
} }
} }
@@ -709,12 +887,78 @@ pipeline {
stage('Pull Request Comment') { stage('Pull Request Comment') {
when { when {
not {environment name: 'CHANGE_ID', value: ''} not {environment name: 'CHANGE_ID', value: ''}
environment name: 'CI', value: 'true'
environment name: 'EXIT_STATUS', value: '' environment name: 'EXIT_STATUS', value: ''
} }
steps { steps {
sh '''curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST https://api.github.com/repos/${LS_USER}/${LS_REPO}/issues/${PULL_REQUEST}/comments \ sh '''#! /bin/bash
-d '{"body": "I am a bot, here are the test results for this PR: \\n'${CI_URL}' \\n'${SHELLCHECK_URL}'"}' ''' # Function to retrieve JSON data from URL
get_json() {
local url="$1"
local response=$(curl -s "$url")
if [ $? -ne 0 ]; then
echo "Failed to retrieve JSON data from $url"
return 1
fi
local json=$(echo "$response" | jq .)
if [ $? -ne 0 ]; then
echo "Failed to parse JSON data from $url"
return 1
fi
echo "$json"
}
build_table() {
local data="$1"
# Get the keys in the JSON data
local keys=$(echo "$data" | jq -r 'to_entries | map(.key) | .[]')
# Check if keys are empty
if [ -z "$keys" ]; then
echo "JSON report data does not contain any keys or the report does not exist."
return 1
fi
# Build table header
local header="| Tag | Passed |\\n| --- | --- |\\n"
# Loop through the JSON data to build the table rows
local rows=""
for build in $keys; do
local status=$(echo "$data" | jq -r ".[\\"$build\\"].test_success")
if [ "$status" = "true" ]; then
status="✅"
else
status="❌"
fi
local row="| "$build" | "$status" |\\n"
rows="${rows}${row}"
done
local table="${header}${rows}"
local escaped_table=$(echo "$table" | sed 's/\"/\\\\"/g')
echo "$escaped_table"
}
if [[ "${CI}" = "true" ]]; then
# Retrieve JSON data from URL
data=$(get_json "$CI_JSON_URL")
# Create table from JSON data
table=$(build_table "$data")
echo -e "$table"
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
-d "{\\"body\\": \\"I am a bot, here are the test results for this PR: \\n${CI_URL}\\n${SHELLCHECK_URL}\\n${table}\\"}"
else
curl -X POST -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/$LS_USER/$LS_REPO/issues/$PULL_REQUEST/comments" \
-d "{\\"body\\": \\"I am a bot, here is the pushed image/manifest for this PR: \\n\\n\\`${GITHUBIMAGE}:${META_TAG}\\`\\"}"
fi
'''
} }
} }
} }
@@ -728,18 +972,26 @@ pipeline {
sh 'echo "build aborted"' sh 'echo "build aborted"'
} }
else if (currentBuild.currentResult == "SUCCESS"){ else if (currentBuild.currentResult == "SUCCESS"){
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png","embeds": [{"color": 1681177,\ sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/jenkins-avatar.png","embeds": [{"color": 1681177,\
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** Success\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\ "description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** Success\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
"username": "Jenkins"}' ${BUILDS_DISCORD} ''' "username": "Jenkins"}' ${BUILDS_DISCORD} '''
} }
else { else {
sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://wiki.jenkins-ci.org/download/attachments/2916393/headshot.png","embeds": [{"color": 16711680,\ sh ''' curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/jenkins-avatar.png","embeds": [{"color": 16711680,\
"description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** failure\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\ "description": "**Build:** '${BUILD_NUMBER}'\\n**CI Results:** '${CI_URL}'\\n**ShellCheck Results:** '${SHELLCHECK_URL}'\\n**Status:** failure\\n**Job:** '${RUN_DISPLAY_URL}'\\n**Change:** '${CODE_URL}'\\n**External Release:**: '${RELEASE_LINK}'\\n**DockerHub:** '${DOCKERHUB_LINK}'\\n"}],\
"username": "Jenkins"}' ${BUILDS_DISCORD} ''' "username": "Jenkins"}' ${BUILDS_DISCORD} '''
} }
} }
} }
cleanup { cleanup {
sh '''#! /bin/bash
echo "Performing docker system prune!!"
containers=$(docker ps -aq)
if [[ -n "${containers}" ]]; then
docker stop ${containers}
fi
docker system prune -af --volumes || :
'''
cleanWs() cleanWs()
} }
} }

219
README.md
View File

@@ -1,3 +1,6 @@
<!-- DO NOT EDIT THIS FILE MANUALLY -->
<!-- Please read the https://github.com/linuxserver/docker-qbittorrent/blob/libtorrentv1/.github/CONTRIBUTING.md -->
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io) [![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io)
[![Blog](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Blog)](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!") [![Blog](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Blog)](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!")
@@ -16,6 +19,7 @@ The [LinuxServer.io](https://linuxserver.io) team brings you another container r
* regular security updates * regular security updates
Find us at: Find us at:
* [Blog](https://blog.linuxserver.io) - all the things you can do with our containers including How-To guides, opinions and much more! * [Blog](https://blog.linuxserver.io) - all the things you can do with our containers including How-To guides, opinions and much more!
* [Discord](https://discord.gg/YWrKVTn) - realtime support / chat with the community and the team. * [Discord](https://discord.gg/YWrKVTn) - realtime support / chat with the community and the team.
* [Discourse](https://discourse.linuxserver.io) - post on our community forum. * [Discourse](https://discourse.linuxserver.io) - post on our community forum.
@@ -25,15 +29,16 @@ Find us at:
# [linuxserver/qbittorrent](https://github.com/linuxserver/docker-qbittorrent) # [linuxserver/qbittorrent](https://github.com/linuxserver/docker-qbittorrent)
[![Scarf.io pulls](https://scarf.sh/installs-badge/linuxserver-ci/linuxserver%2Fqbittorrent?color=94398d&label-color=555555&logo-color=ffffff&style=for-the-badge&package-type=docker)](https://scarf.sh/gateway/linuxserver-ci/docker/linuxserver%2Fqbittorrent)
[![GitHub Stars](https://img.shields.io/github/stars/linuxserver/docker-qbittorrent.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-qbittorrent) [![GitHub Stars](https://img.shields.io/github/stars/linuxserver/docker-qbittorrent.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-qbittorrent)
[![GitHub Release](https://img.shields.io/github/release/linuxserver/docker-qbittorrent.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-qbittorrent/releases) [![GitHub Release](https://img.shields.io/github/release/linuxserver/docker-qbittorrent.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-qbittorrent/releases)
[![GitHub Package Repository](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub%20Package&logo=github)](https://github.com/linuxserver/docker-qbittorrent/packages) [![GitHub Package Repository](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub%20Package&logo=github)](https://github.com/linuxserver/docker-qbittorrent/packages)
[![GitLab Container Registry](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitLab%20Registry&logo=gitlab)](https://gitlab.com/Linuxserver.io/docker-qbittorrent/container_registry) [![GitLab Container Registry](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitLab%20Registry&logo=gitlab)](https://gitlab.com/linuxserver.io/docker-qbittorrent/container_registry)
[![MicroBadger Layers](https://img.shields.io/microbadger/layers/linuxserver/qbittorrent.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge)](https://microbadger.com/images/linuxserver/qbittorrent "Get your own version badge on microbadger.com") [![Quay.io](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Quay.io)](https://quay.io/repository/linuxserver.io/qbittorrent)
[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/qbittorrent.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=pulls&logo=docker)](https://hub.docker.com/r/linuxserver/qbittorrent) [![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/qbittorrent.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=pulls&logo=docker)](https://hub.docker.com/r/linuxserver/qbittorrent)
[![Docker Stars](https://img.shields.io/docker/stars/linuxserver/qbittorrent.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=stars&logo=docker)](https://hub.docker.com/r/linuxserver/qbittorrent) [![Docker Stars](https://img.shields.io/docker/stars/linuxserver/qbittorrent.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=stars&logo=docker)](https://hub.docker.com/r/linuxserver/qbittorrent)
[![Jenkins Build](https://img.shields.io/jenkins/build?labelColor=555555&logoColor=ffffff&style=for-the-badge&jobUrl=https%3A%2F%2Fci.linuxserver.io%2Fjob%2FDocker-Pipeline-Builders%2Fjob%2Fdocker-qbittorrent%2Fjob%2Fmaster%2F&logo=jenkins)](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-qbittorrent/job/master/) [![Jenkins Build](https://img.shields.io/jenkins/build?labelColor=555555&logoColor=ffffff&style=for-the-badge&jobUrl=https%3A%2F%2Fci.linuxserver.io%2Fjob%2FDocker-Pipeline-Builders%2Fjob%2Fdocker-qbittorrent%2Fjob%2Flibtorrentv1%2F&logo=jenkins)](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-qbittorrent/job/libtorrentv1/)
[![LSIO CI](https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=CI&query=CI&url=https%3A%2F%2Flsio-ci.ams3.digitaloceanspaces.com%2Flinuxserver%2Fqbittorrent%2Flatest%2Fci-status.yml)](https://lsio-ci.ams3.digitaloceanspaces.com/linuxserver/qbittorrent/latest/index.html) [![LSIO CI](https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=CI&query=CI&url=https%3A%2F%2Fci-tests.linuxserver.io%2Flinuxserver%2Fqbittorrent%2Flatest%2Fci-status.yml)](https://ci-tests.linuxserver.io/linuxserver/qbittorrent/latest/index.html)
The [Qbittorrent](https://www.qbittorrent.org/) project aims to provide an open-source software alternative to µTorrent. qBittorrent is based on the Qt toolkit and libtorrent-rasterbar library. The [Qbittorrent](https://www.qbittorrent.org/) project aims to provide an open-source software alternative to µTorrent. qBittorrent is based on the Qt toolkit and libtorrent-rasterbar library.
@@ -41,91 +46,111 @@ The [Qbittorrent](https://www.qbittorrent.org/) project aims to provide an open-
## Supported Architectures ## Supported Architectures
Our images support multiple architectures such as `x86-64`, `arm64` and `armhf`. We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://github.com/docker/distribution/blob/master/docs/spec/manifest-v2-2.md#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/). We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://github.com/docker/distribution/blob/master/docs/spec/manifest-v2-2.md#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/).
Simply pulling `linuxserver/qbittorrent` should retrieve the correct image for your arch, but you can also pull specific arch images via tags. Simply pulling `lscr.io/linuxserver/qbittorrent:libtorrentv1` should retrieve the correct image for your arch, but you can also pull specific arch images via tags.
The architectures supported by this image are: The architectures supported by this image are:
| Architecture | Tag | | Architecture | Available | Tag |
| :----: | --- | | :----: | :----: | ---- |
| x86-64 | amd64-latest | | x86-64 | ✅ | amd64-\<version tag\> |
| arm64 | arm64v8-latest | | arm64 | ✅ | arm64v8-\<version tag\> |
| armhf | arm32v7-latest | | armhf | ❌ | |
## Version Tags ## Version Tags
This image provides various versions that are available via tags. `latest` tag usually provides the latest stable version. Others are considered under development and caution must be exercised when using them. This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.
| Tag | Description | | Tag | Available | Description |
| :----: | --- | | :----: | :----: |--- |
| latest | Stable qbittorrent releases | | latest | ✅ | Stable qbittorrent releases |
| unstable | Unstable qbittorrent releases | | libtorrentv1 | ✅ | Static qbittorrent builds using libtorrent v1 |
## Application Setup
The webui is at `<your-ip>:8080` and the default username/password is `admin/adminadmin`.
Change username/password via the webui in the webui section of settings.
### WEBUI_PORT variable
Due to issues with CSRF and port mapping, should you require to alter the port for the webui you need to change both sides of the -p 8080 switch AND set the WEBUI_PORT variable to the new port.
For example, to set the port to 8090 you need to set -p 8090:8090 and -e WEBUI_PORT=8090
This should alleviate the "white screen" issue.
If you have no webui , check the file /config/qBittorrent/qBittorrent.conf
edit or add the following lines
```text
WebUI\Address=*
WebUI\ServerDomains=*
```
If you are running a very old (3.x) kernel you may run into [this issue](https://github.com/linuxserver/docker-qbittorrent/issues/103) which can be worked around using [this method](https://github.com/linuxserver/docker-qbittorrent/issues/103#issuecomment-831238484)
## Usage ## Usage
Here are some example snippets to help you get started creating a container. Here are some example snippets to help you get started creating a container.
### docker ### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose))
``` ```yaml
docker create \
--name=qbittorrent \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Europe/London \
-e UMASK_SET=022 \
-e WEBUI_PORT=8080 \
-p 6881:6881 \
-p 6881:6881/udp \
-p 8080:8080 \
-v </path/to/appdata/config>:/config \
-v </path/to/downloads>:/downloads \
--restart unless-stopped \
linuxserver/qbittorrent
```
### docker-compose
Compatible with docker-compose v2 schemas.
```
--- ---
version: "2.1" version: "2.1"
services: services:
qbittorrent: qbittorrent:
image: linuxserver/qbittorrent image: lscr.io/linuxserver/qbittorrent:libtorrentv1
container_name: qbittorrent container_name: qbittorrent
environment: environment:
- PUID=1000 - PUID=1000
- PGID=1000 - PGID=1000
- TZ=Europe/London - TZ=Etc/UTC
- UMASK_SET=022
- WEBUI_PORT=8080 - WEBUI_PORT=8080
volumes: volumes:
- </path/to/appdata/config>:/config - /path/to/appdata/config:/config
- </path/to/downloads>:/downloads - /path/to/downloads:/downloads
ports: ports:
- 8080:8080
- 6881:6881 - 6881:6881
- 6881:6881/udp - 6881:6881/udp
- 8080:8080
restart: unless-stopped restart: unless-stopped
``` ```
### docker cli ([click here for more info](https://docs.docker.com/engine/reference/commandline/cli/))
```bash
docker run -d \
--name=qbittorrent \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Etc/UTC \
-e WEBUI_PORT=8080 \
-p 8080:8080 \
-p 6881:6881 \
-p 6881:6881/udp \
-v /path/to/appdata/config:/config \
-v /path/to/downloads:/downloads \
--restart unless-stopped \
lscr.io/linuxserver/qbittorrent:libtorrentv1
```
## Parameters ## Parameters
Container images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate `<external>:<internal>` respectively. For example, `-p 8080:80` would expose port `80` from inside the container to be accessible from the host's IP on port `8080` outside the container. Container images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate `<external>:<internal>` respectively. For example, `-p 8080:80` would expose port `80` from inside the container to be accessible from the host's IP on port `8080` outside the container.
| Parameter | Function | | Parameter | Function |
| :----: | --- | | :----: | --- |
| `-p 8080` | WebUI |
| `-p 6881` | tcp connection port | | `-p 6881` | tcp connection port |
| `-p 6881/udp` | udp connection port | | `-p 6881/udp` | udp connection port |
| `-p 8080` | http gui |
| `-e PUID=1000` | for UserID - see below for explanation | | `-e PUID=1000` | for UserID - see below for explanation |
| `-e PGID=1000` | for GroupID - see below for explanation | | `-e PGID=1000` | for GroupID - see below for explanation |
| `-e TZ=Europe/London` | Specify a timezone to use EG Europe/London | | `-e TZ=Etc/UTC` | specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List). |
| `-e UMASK_SET=022` | for umask setting of qbittorrent, optional , default if left unset is 022 |
| `-e WEBUI_PORT=8080` | for changing the port of the webui, see below for explanation | | `-e WEBUI_PORT=8080` | for changing the port of the webui, see below for explanation |
| `-v /config` | Contains all relevant configuration files. | | `-v /config` | Contains all relevant configuration files. |
| `-v /downloads` | Location of downloads on disk. | | `-v /downloads` | Location of downloads on disk. |
@@ -136,7 +161,7 @@ You can set any environment variable from a file by using a special prepend `FIL
As an example: As an example:
``` ```bash
-e FILE__PASSWORD=/run/secrets/mysecretpassword -e FILE__PASSWORD=/run/secrets/mysecretpassword
``` ```
@@ -155,44 +180,16 @@ Ensure any volume directories on the host are owned by the same user you specify
In this instance `PUID=1000` and `PGID=1000`, to find yours use `id user` as below: In this instance `PUID=1000` and `PGID=1000`, to find yours use `id user` as below:
``` ```bash
$ id username $ id username
uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup) uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
``` ```
&nbsp;
## Application Setup
The webui is at `<your-ip>:8080` and the default username/password is `admin/adminadmin`.
Change username/password via the webui in the webui section of settings.
### WEBUI_PORT variable
Due to issues with CSRF and port mapping, should you require to alter the port for the webui you need to change both sides of the -p 8080 switch AND set the WEBUI_PORT variable to the new port.
For example, to set the port to 8090 you need to set -p 8090:8090 and -e WEBUI_PORT=8090
This should alleviate the "white screen" issue.
If you have no webui , check the file /config/qBittorrent/qBittorrent.conf
edit or add the following lines
```
WebUI\Address=*
WebUI\ServerDomains=*
```
## Docker Mods ## Docker Mods
[![Docker Mods](https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=mods&query=%24.mods%5B%27qbittorrent%27%5D.mod_count&url=https%3A%2F%2Fraw.githubusercontent.com%2Flinuxserver%2Fdocker-mods%2Fmaster%2Fmod-list.yml)](https://mods.linuxserver.io/?mod=qbittorrent "view available mods for this container.")
We publish various [Docker Mods](https://github.com/linuxserver/docker-mods) to enable additional functionality within the containers. The list of Mods available for this image (if any) can be accessed via the dynamic badge above. [![Docker Mods](https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=qbittorrent&query=%24.mods%5B%27qbittorrent%27%5D.mod_count&url=https%3A%2F%2Fraw.githubusercontent.com%2Flinuxserver%2Fdocker-mods%2Fmaster%2Fmod-list.yml)](https://mods.linuxserver.io/?mod=qbittorrent "view available mods for this container.") [![Docker Universal Mods](https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=universal&query=%24.mods%5B%27universal%27%5D.mod_count&url=https%3A%2F%2Fraw.githubusercontent.com%2Flinuxserver%2Fdocker-mods%2Fmaster%2Fmod-list.yml)](https://mods.linuxserver.io/?mod=universal "view available universal mods.")
We publish various [Docker Mods](https://github.com/linuxserver/docker-mods) to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.
## Support Info ## Support Info
@@ -201,7 +198,7 @@ We publish various [Docker Mods](https://github.com/linuxserver/docker-mods) to
* container version number * container version number
* `docker inspect -f '{{ index .Config.Labels "build_version" }}' qbittorrent` * `docker inspect -f '{{ index .Config.Labels "build_version" }}' qbittorrent`
* image version number * image version number
* `docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/qbittorrent` * `docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/qbittorrent:libtorrentv1`
## Updating Info ## Updating Info
@@ -209,48 +206,57 @@ Most of our images are static, versioned, and require an image update and contai
Below are the instructions for updating containers: Below are the instructions for updating containers:
### Via Docker Run/Create
* Update the image: `docker pull linuxserver/qbittorrent`
* Stop the running container: `docker stop qbittorrent`
* Delete the container: `docker rm qbittorrent`
* Recreate a new container with the same docker create parameters as instructed above (if mapped correctly to a host folder, your `/config` folder and settings will be preserved)
* Start the new container: `docker start qbittorrent`
* You can also remove the old dangling images: `docker image prune`
### Via Docker Compose ### Via Docker Compose
* Update all images: `docker-compose pull` * Update all images: `docker-compose pull`
* or update a single image: `docker-compose pull qbittorrent` * or update a single image: `docker-compose pull qbittorrent`
* Let compose update all containers as necessary: `docker-compose up -d` * Let compose update all containers as necessary: `docker-compose up -d`
* or update a single container: `docker-compose up -d qbittorrent` * or update a single container: `docker-compose up -d qbittorrent`
* You can also remove the old dangling images: `docker image prune` * You can also remove the old dangling images: `docker image prune`
### Via Watchtower auto-updater (especially useful if you don't remember the original parameters) ### Via Docker Run
* Update the image: `docker pull lscr.io/linuxserver/qbittorrent:libtorrentv1`
* Stop the running container: `docker stop qbittorrent`
* Delete the container: `docker rm qbittorrent`
* Recreate a new container with the same docker run parameters as instructed above (if mapped correctly to a host folder, your `/config` folder and settings will be preserved)
* You can also remove the old dangling images: `docker image prune`
### Via Watchtower auto-updater (only use if you don't remember the original parameters)
* Pull the latest image at its tag and replace it with the same env variables in one run: * Pull the latest image at its tag and replace it with the same env variables in one run:
```
```bash
docker run --rm \ docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \ -v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \ containrrr/watchtower \
--run-once qbittorrent --run-once qbittorrent
``` ```
**Note:** We do not endorse the use of Watchtower as a solution to automated updates of existing Docker containers. In fact we generally discourage automated updates. However, this is a useful tool for one-time manual updates of containers where you have forgotten the original parameters. In the long term, we highly recommend using Docker Compose.
* You can also remove the old dangling images: `docker image prune` * You can also remove the old dangling images: `docker image prune`
**Note:** We do not endorse the use of Watchtower as a solution to automated updates of existing Docker containers. In fact we generally discourage automated updates. However, this is a useful tool for one-time manual updates of containers where you have forgotten the original parameters. In the long term, we highly recommend using [Docker Compose](https://docs.linuxserver.io/general/docker-compose).
### Image Update Notifications - Diun (Docker Image Update Notifier)
* We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported.
## Building locally ## Building locally
If you want to make local modifications to these images for development purposes or just to customize the logic: If you want to make local modifications to these images for development purposes or just to customize the logic:
```
```bash
git clone https://github.com/linuxserver/docker-qbittorrent.git git clone https://github.com/linuxserver/docker-qbittorrent.git
cd docker-qbittorrent cd docker-qbittorrent
docker build \ docker build \
--no-cache \ --no-cache \
--pull \ --pull \
-t linuxserver/qbittorrent:latest . -t lscr.io/linuxserver/qbittorrent:libtorrentv1 .
``` ```
The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static` The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static`
```
```bash
docker run --rm --privileged multiarch/qemu-user-static:register --reset docker run --rm --privileged multiarch/qemu-user-static:register --reset
``` ```
@@ -258,6 +264,25 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
## Versions ## Versions
* **17.06.23:** - Rebase to Alpine 3.18, deprecate armhf as per [https://www.linuxserver.io/armhf](https://www.linuxserver.io/armhf).
* **10.06.23:** - Bump unrar to 6.2.8.
* **25.02.23:** - Add qt6-qtbase-sqlite to support SQLite database for resume files.
* **15.01.23:** - Rebase to Alpine 3.17, add openssl1.1-compat.
* **29.11.22:** - Add icu-libs to support qbittorrent-cli.
* **30.10.22:** - Add libtorrent v1 branch.
* **31.08.22:** - Rebase to Alpine Edge again to follow latest releases.
* **12.08.22:** - Bump unrar to 6.1.7.
* **16.06.22:** - Rebase to Alpine 3.16 from edge.
* **25.05.22:** - Fetch qbitorrent-cli from upstream repo.
* **02.03.22:** - Add unrar, 7zip, and qbitorrent-cli.
* **01.03.22:** - Add python for search plugin support.
* **23.02.22:** - Rebase to Alpine Edge, install from Alpine repos.
* **19.02.22:** - Add jq to build-stage
* **07.01.22:** - Rebase to Alpine, build from source.
* **06.01.22:** - Deprecate unstable branch.
* **10.02.21:** - Rebase to focal.
* **20.01.21:** - Deprecate `UMASK_SET` in favor of UMASK in baseimage, see above for more information.
* **12.11.20:** - Stop creating /config/data directory on startup
* **03.04.20:** - Fix adding search engine plugin * **03.04.20:** - Fix adding search engine plugin
* **02.08.19:** - Add qbitorrent-cli for processing scripts. * **02.08.19:** - Add qbitorrent-cli for processing scripts.
* **23.03.19:** - Switching to new Base images, shift to arm32v7 tag. * **23.03.19:** - Switching to new Base images, shift to arm32v7 tag.

View File

@@ -3,10 +3,11 @@
# jenkins variables # jenkins variables
project_name: docker-qbittorrent project_name: docker-qbittorrent
external_type: na external_type: na
custom_version_command: "curl -sX GET http://ppa.launchpad.net/qbittorrent-team/qbittorrent-stable/ubuntu/dists/bionic/main/binary-amd64/Packages.gz | gunzip -c |grep -A 7 -m 1 'Package: qbittorrent-nox' | awk -F ': ' '/Version/{print $2;exit}'" custom_version_command: "curl -sL 'https://api.github.com/repos/userdocs/qbittorrent-nox-static/releases' | jq -r 'first(.[] | select(.prerelease == true) | .tag_name)'"
release_type: stable release_type: prerelease
release_tag: latest release_tag: libtorrentv1
ls_branch: master ls_branch: libtorrentv1
build_armhf: false
repo_vars: repo_vars:
- CONTAINER_NAME = 'qbittorrent' - CONTAINER_NAME = 'qbittorrent'
- BUILD_VERSION_ARG = 'QBITTORRENT_VERSION' - BUILD_VERSION_ARG = 'QBITTORRENT_VERSION'
@@ -15,7 +16,8 @@ repo_vars:
- DOCKERHUB_IMAGE = 'linuxserver/qbittorrent' - DOCKERHUB_IMAGE = 'linuxserver/qbittorrent'
- DEV_DOCKERHUB_IMAGE = 'lsiodev/qbittorrent' - DEV_DOCKERHUB_IMAGE = 'lsiodev/qbittorrent'
- PR_DOCKERHUB_IMAGE = 'lspipepr/qbittorrent' - PR_DOCKERHUB_IMAGE = 'lspipepr/qbittorrent'
- DIST_IMAGE = 'ubuntu' - DIST_IMAGE = 'alpine'
- DIST_TAG = '3.18'
- MULTIARCH='true' - MULTIARCH='true'
- CI='true' - CI='true'
- CI_WEB='true' - CI_WEB='true'

View File

@@ -1,180 +1,203 @@
adduser3.116ubuntu1 NAME VERSION TYPE
apt1.6.12ubuntu0.1 7zip 22.01-r5 apk
apt-utils1.6.12ubuntu0.1 Alba.CsConsoleFormat 1.0.0 dotnet
base-files10.1ubuntu2.9 BencodeNET 2.3.0 dotnet
base-passwd3.5.44 CsvHelper 12.1.2 dotnet
bash4.4.18-2ubuntu1.2 IPNetwork2 2.5.235 dotnet
bsdutils1:2.31.1-0.4ubuntu3.6 McMaster.Extensions.CommandLineUtils 2.4.4 dotnet
bzip21.0.6-8.1ubuntu0.2 Microsoft.CSharp 4.4.0 dotnet
ca-certificates20190110~18.04.1 Microsoft.NETCore.Platforms 1.1.0 dotnet
coreutils8.28-1ubuntu1 Microsoft.NETCore.Targets 1.1.0 dotnet
curl7.58.0-2ubuntu3.10 Microsoft.Win32.Primitives 4.3.0 dotnet
dash0.5.8-2.10 Mono.Posix.NETStandard 1.0.0 dotnet
dbus1.12.2-1ubuntu1.2 NETStandard.Library 1.6.1 dotnet
debconf1.5.66ubuntu1 NJsonSchema 9.14.1 dotnet
debianutils4.8.4 Newtonsoft.Json 13.0.1 dotnet
diffutils1:3.6-1 Portable.BouncyCastle 1.8.8 dotnet
dirmngr2.2.4-1ubuntu1.2 Portable.Xaml 0.18.0 dotnet
dpkg1.19.0.5ubuntu2.3 QBittorrent.Client 1.8.23016.2 dotnet
e2fsprogs1.44.1-1ubuntu1.3 System.AppContext 4.3.0 dotnet
fdisk2.31.1-0.4ubuntu3.6 System.Buffers 4.3.0 dotnet
file1:5.32-2ubuntu0.4 System.Collections 4.3.0 dotnet
findutils4.6.0+git+20170828-2 System.Collections.Concurrent 4.3.0 dotnet
gcc-8-base8.4.0-1ubuntu1~18.04 System.Collections.NonGeneric 4.3.0 dotnet
geoip-bin1.6.12-1 System.Collections.Specialized 4.3.0 dotnet
geoip-database20180315-1 System.ComponentModel 4.3.0 dotnet
gnupg2.2.4-1ubuntu1.2 System.ComponentModel.Annotations 4.4.1 dotnet
gnupg-l10n2.2.4-1ubuntu1.2 System.ComponentModel.Primitives 4.3.0 dotnet
gnupg-utils2.2.4-1ubuntu1.2 System.ComponentModel.TypeConverter 4.3.0 dotnet
gpg2.2.4-1ubuntu1.2 System.Console 4.3.0 dotnet
gpg-agent2.2.4-1ubuntu1.2 System.Diagnostics.Debug 4.3.0 dotnet
gpgconf2.2.4-1ubuntu1.2 System.Diagnostics.DiagnosticSource 4.3.0 dotnet
gpgsm2.2.4-1ubuntu1.2 System.Diagnostics.Tools 4.3.0 dotnet
gpgv2.2.4-1ubuntu1.2 System.Diagnostics.Tracing 4.3.0 dotnet
gpg-wks-client2.2.4-1ubuntu1.2 System.Globalization 4.3.0 dotnet
gpg-wks-server2.2.4-1ubuntu1.2 System.Globalization.Calendars 4.3.0 dotnet
grep3.1-2build1 System.Globalization.Extensions 4.3.0 dotnet
gzip1.6-5ubuntu1 System.IO 4.3.0 dotnet
hostname3.20 System.IO.Compression 4.3.0 dotnet
init-system-helpers1.51 System.IO.Compression.ZipFile 4.3.0 dotnet
krb5-locales1.16-2ubuntu0.1 System.IO.FileSystem 4.3.0 dotnet
libacl12.2.52-3build1 System.IO.FileSystem.Primitives 4.3.0 dotnet
libapparmor12.12-4ubuntu5.1 System.Linq 4.3.0 dotnet
libapt-inst2.01.6.12ubuntu0.1 System.Linq.Expressions 4.3.0 dotnet
libapt-pkg5.01.6.12ubuntu0.1 System.Net.Http 4.3.0 dotnet
libasn1-8-heimdal7.5.0+dfsg-1 System.Net.NameResolution 4.3.0 dotnet
libassuan02.5.1-2 System.Net.Primitives 4.3.0 dotnet
libattr11:2.4.47-2build1 System.Net.Sockets 4.3.0 dotnet
libaudit11:2.8.2-1ubuntu1 System.ObjectModel 4.3.0 dotnet
libaudit-common1:2.8.2-1ubuntu1 System.Private.Uri 4.3.0 dotnet
libblkid12.31.1-0.4ubuntu3.6 System.Reflection 4.3.0 dotnet
libboost-system1.65.11.65.1+dfsg-0ubuntu5 System.Reflection.Emit 4.3.0 dotnet
libbz2-1.01.0.6-8.1ubuntu0.2 System.Reflection.Emit.ILGeneration 4.3.0 dotnet
libc62.27-3ubuntu1.2 System.Reflection.Emit.Lightweight 4.3.0 dotnet
libcap-ng00.7.7-3.1 System.Reflection.Extensions 4.3.0 dotnet
libc-bin2.27-3ubuntu1.2 System.Reflection.Primitives 4.3.0 dotnet
libcom-err21.44.1-1ubuntu1.3 System.Reflection.TypeExtensions 4.4.0 dotnet
libcurl47.58.0-2ubuntu3.10 System.Resources.ResourceManager 4.3.0 dotnet
libdb5.35.3.28-13.1ubuntu1.1 System.Runtime 4.3.0 dotnet
libdbus-1-31.12.2-1ubuntu1.2 System.Runtime.Extensions 4.3.0 dotnet
libdebconfclient00.213ubuntu1 System.Runtime.Handles 4.3.0 dotnet
libdouble-conversion12.0.1-4ubuntu1 System.Runtime.InteropServices 4.3.0 dotnet
libexpat12.2.5-3ubuntu0.2 System.Runtime.InteropServices.RuntimeInformation 4.3.0 dotnet
libext2fs21.44.1-1ubuntu1.3 System.Runtime.Numerics 4.3.0 dotnet
libfdisk12.31.1-0.4ubuntu3.6 System.Runtime.Serialization.Primitives 4.3.0 dotnet
libffi63.2.1-8 System.Security.Claims 4.3.0 dotnet
libgcc11:8.4.0-1ubuntu1~18.04 System.Security.Cryptography.Algorithms 4.3.0 dotnet
libgcrypt201.8.1-4ubuntu1.2 System.Security.Cryptography.Cng 4.3.0 dotnet
libgeoip11.6.12-1 System.Security.Cryptography.Csp 4.3.0 dotnet
libglib2.0-02.56.4-0ubuntu0.18.04.6 System.Security.Cryptography.Encoding 4.3.0 dotnet
libglib2.0-data2.56.4-0ubuntu0.18.04.6 System.Security.Cryptography.OpenSsl 4.3.0 dotnet
libgmp102:6.1.2+dfsg-2 System.Security.Cryptography.Primitives 4.3.0 dotnet
libgnutls303.5.18-1ubuntu1.4 System.Security.Cryptography.ProtectedData 5.0.0 dotnet
libgpg-error01.27-6 System.Security.Cryptography.X509Certificates 4.3.0 dotnet
libgssapi3-heimdal7.5.0+dfsg-1 System.Security.Principal 4.3.0 dotnet
libgssapi-krb5-21.16-2ubuntu0.1 System.Security.Principal.Windows 4.3.0 dotnet
libhcrypto4-heimdal7.5.0+dfsg-1 System.Text.Encoding 4.3.0 dotnet
libheimbase1-heimdal7.5.0+dfsg-1 System.Text.Encoding.Extensions 4.3.0 dotnet
libheimntlm0-heimdal7.5.0+dfsg-1 System.Text.RegularExpressions 4.3.0 dotnet
libhogweed43.4-1 System.Threading 4.3.0 dotnet
libhx509-5-heimdal7.5.0+dfsg-1 System.Threading.Tasks 4.3.0 dotnet
libicu6060.2-3ubuntu3.1 System.Threading.Tasks.Extensions 4.3.0 dotnet
libidn2-02.0.4-1.1ubuntu0.2 System.Threading.ThreadPool 4.3.0 dotnet
libk5crypto31.16-2ubuntu0.1 System.Threading.Timer 4.3.0 dotnet
libkeyutils11.5.9-9.2ubuntu2 System.Xml.ReaderWriter 4.3.0 dotnet
libkrb5-26-heimdal7.5.0+dfsg-1 System.Xml.XDocument 4.3.0 dotnet
libkrb5-31.16-2ubuntu0.1 System.Xml.XmlDocument 4.3.0 dotnet
libkrb5support01.16-2ubuntu0.1 alpine-baselayout 3.4.3-r1 apk
libksba81.3.5-2 alpine-baselayout-data 3.4.3-r1 apk
libldap-2.4-22.4.45+dfsg-1ubuntu1.6 alpine-keys 2.4-r1 apk
libldap-common2.4.45+dfsg-1ubuntu1.6 alpine-release 3.18.2-r0 apk
liblz4-10.0~r131-2ubuntu3 apk-tools 2.14.0-r2 apk
liblzma55.2.2-1.3 bash 5.2.15-r5 apk
libmagic11:5.32-2ubuntu0.4 brotli-libs 1.0.9-r14 apk
libmagic-mgc1:5.32-2ubuntu0.4 busybox 1.36.1 binary
libmount12.31.1-0.4ubuntu3.6 busybox 1.36.1-r0 apk
libmpdec22.4.2-1ubuntu1 busybox-binsh 1.36.1-r0 apk
libncurses56.1-1ubuntu1.18.04 ca-certificates 20230506-r0 apk
libncursesw56.1-1ubuntu1.18.04 ca-certificates-bundle 20230506-r0 apk
libnettle63.4-1 coreutils 9.3-r1 apk
libnghttp2-141.30.0-1ubuntu1 curl 8.1.2-r0 apk
libnpth01.5-3 dbus-libs 1.14.8-r0 apk
libp11-kit00.23.9-2 double-conversion 3.2.1-r1 apk
libpam0g1.1.8-3.6ubuntu2.18.04.1 gdbm 1.23-r1 apk
libpam-modules1.1.8-3.6ubuntu2.18.04.1 glib 2.76.3-r0 apk
libpam-modules-bin1.1.8-3.6ubuntu2.18.04.1 icu-data-en 73.2-r1 apk
libpam-runtime1.1.8-3.6ubuntu2.18.04.1 icu-libs 73.2-r1 apk
libpcre32:8.39-9 jq 1.6-r3 apk
libprocps62:3.3.12-3ubuntu1.2 libacl 2.3.1-r3 apk
libpsl50.19.1-5build1 libattr 2.5.1-r4 apk
libpython3.6-minimal3.6.9-1~18.04ubuntu1.1 libb2 0.98.1-r2 apk
libpython3.6-stdlib3.6.9-1~18.04ubuntu1.1 libblkid 2.38.1-r8 apk
libpython3-stdlib3.6.7-1~18.04 libbsd 0.11.7-r1 apk
libqt5core5a5.9.5+dfsg-0ubuntu2.5 libbz2 1.0.8-r5 apk
libqt5dbus55.9.5+dfsg-0ubuntu2.5 libc-utils 0.7.2-r5 apk
libqt5network55.9.5+dfsg-0ubuntu2.5 libcrypto1.1 1.1.1u-r0 apk
libqt5xml55.9.5+dfsg-0ubuntu2.5 libcrypto3 3.1.1-r1 apk
libreadline77.0-3 libcurl 8.1.2-r0 apk
libroken18-heimdal7.5.0+dfsg-1 libexpat 2.5.0-r1 apk
librtmp12.4+20151223.gitfa8646d.1-1 libffi 3.4.4-r2 apk
libsasl2-22.1.27~101-g0780600+dfsg-3ubuntu2.1 libgcc 12.2.1_git20220924-r10 apk
libsasl2-modules2.1.27~101-g0780600+dfsg-3ubuntu2.1 libgomp 12.2.1_git20220924-r10 apk
libsasl2-modules-db2.1.27~101-g0780600+dfsg-3ubuntu2.1 libidn2 2.3.4-r1 apk
libseccomp22.4.3-1ubuntu3.18.04.3 libintl 0.21.1-r7 apk
libselinux12.7-2build2 libmd 1.0.4-r2 apk
libsemanage12.7-2build2 libmount 2.38.1-r8 apk
libsemanage-common2.7-2build2 libncursesw 6.4_p20230506-r0 apk
libsepol12.7-1 libpanelw 6.4_p20230506-r0 apk
libsmartcols12.31.1-0.4ubuntu3.6 libpcre2-16 10.42-r1 apk
libsqlite3-03.22.0-1ubuntu0.4 libproc2 4.0.3-r1 apk
libss21.44.1-1ubuntu1.3 libssl1.1 1.1.1u-r0 apk
libssl1.0.01.0.2n-1ubuntu5.3 libssl3 3.1.1-r1 apk
libssl1.11.1.1-1ubuntu2.1~18.04.6 libstdc++ 12.2.1_git20220924-r10 apk
libstdc++68.4.0-1ubuntu1~18.04 libunistring 1.1-r1 apk
libsystemd0237-3ubuntu10.42 linux-pam 1.5.2-r10 apk
libtasn1-64.13-2 mpdecimal 2.5.1-r2 apk
libtinfo56.1-1ubuntu1.18.04 musl 1.2.4-r0 apk
libtorrent-rasterbar101.2.6+git20200425.a9968916ca-1ppa1~18.04 musl-utils 1.2.4-r0 apk
libudev1237-3ubuntu10.42 ncurses-terminfo-base 6.4_p20230506-r0 apk
libunistring20.9.9-0ubuntu2 netcat-openbsd 1.219-r1 apk
libuuid12.31.1-0.4ubuntu3.6 nghttp2-libs 1.53.0-r0 apk
libwind0-heimdal7.5.0+dfsg-1 oniguruma 6.9.8-r1 apk
libxml22.9.4+dfsg1-6.1ubuntu1.3 openssl1.1-compat 1.1.1u-r0 apk
libzstd11.3.3+dfsg-2ubuntu1.1 pcre2 10.42-r1 apk
locales2.27-3ubuntu1.2 procps-ng 4.0.3-r1 apk
login1:4.5-1ubuntu2 pyc 0.1-r0 apk
lsb-base9.20170808ubuntu1 python 3.11.4 binary
mawk1.3.3-17ubuntu3 python3 3.11.4-r0 apk
mime-support3.60ubuntu1 python3-pyc 3.11.4-r0 apk
mount2.31.1-0.4ubuntu3.6 python3-pycache-pyc0 3.11.4-r0 apk
ncurses-base6.1-1ubuntu1.18.04 qt6-qtbase 6.5.1-r1 apk
ncurses-bin6.1-1ubuntu1.18.04 qt6-qtbase-sqlite 6.5.1-r1 apk
openssl1.1.1-1ubuntu2.1~18.04.6 readline 8.2.1-r1 apk
p7zip16.02+dfsg-6 runtime.any.System.Collections 4.3.0 dotnet
p7zip-full16.02+dfsg-6 runtime.any.System.Diagnostics.Tools 4.3.0 dotnet
passwd1:4.5-1ubuntu2 runtime.any.System.Diagnostics.Tracing 4.3.0 dotnet
perl-base5.26.1-6ubuntu0.3 runtime.any.System.Globalization 4.3.0 dotnet
pinentry-curses1.1.0-1 runtime.any.System.Globalization.Calendars 4.3.0 dotnet
procps2:3.3.12-3ubuntu1.2 runtime.any.System.IO 4.3.0 dotnet
publicsuffix20180223.1310-1 runtime.any.System.Reflection 4.3.0 dotnet
python33.6.7-1~18.04 runtime.any.System.Reflection.Extensions 4.3.0 dotnet
python3.63.6.9-1~18.04ubuntu1.1 runtime.any.System.Reflection.Primitives 4.3.0 dotnet
python3.6-minimal3.6.9-1~18.04ubuntu1.1 runtime.any.System.Resources.ResourceManager 4.3.0 dotnet
python3-minimal3.6.7-1~18.04 runtime.any.System.Runtime 4.3.0 dotnet
qbittorrent-cli1.5.19350-1 runtime.any.System.Runtime.Handles 4.3.0 dotnet
qbittorrent-nox1:4.2.5.99~202004250119-7015-2c65b79~ubuntu18.04.1 runtime.any.System.Runtime.InteropServices 4.3.0 dotnet
qttranslations5-l10n5.9.5-0ubuntu1 runtime.any.System.Text.Encoding 4.3.0 dotnet
readline-common7.0-3 runtime.any.System.Text.Encoding.Extensions 4.3.0 dotnet
sed4.4-2 runtime.any.System.Threading.Tasks 4.3.0 dotnet
sensible-utils0.0.12 runtime.any.System.Threading.Timer 4.3.0 dotnet
shared-mime-info1.9-2 runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl 4.3.0 dotnet
sysvinit-utils2.88dsf-59.10ubuntu1 runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl 4.3.0 dotnet
tar1.29b-2ubuntu0.1 runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl 4.3.0 dotnet
tzdata2020a-0ubuntu0.18.04 runtime.native.System 4.3.0 dotnet
ubuntu-keyring2018.09.18.1~18.04.0 runtime.native.System.IO.Compression 4.3.0 dotnet
unrar1:5.5.8-1 runtime.native.System.Net.Http 4.3.0 dotnet
unzip6.0-21ubuntu1 runtime.native.System.Security.Cryptography.Apple 4.3.0 dotnet
util-linux2.31.1-0.4ubuntu3.6 runtime.native.System.Security.Cryptography.OpenSsl 4.3.0 dotnet
xdg-user-dirs0.17-1ubuntu1 runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl 4.3.0 dotnet
xz-utils5.2.2-1.3 runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl 4.3.0 dotnet
zlib1g1:1.2.11.dfsg-0ubuntu2 runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple 4.3.0 dotnet
runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl 4.3.0 dotnet
runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl 4.3.0 dotnet
runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl 4.3.0 dotnet
runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl 4.3.0 dotnet
runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl 4.3.0 dotnet
runtime.unix.Microsoft.Win32.Primitives 4.3.0 dotnet
runtime.unix.System.Console 4.3.0 dotnet
runtime.unix.System.Diagnostics.Debug 4.3.0 dotnet
runtime.unix.System.IO.FileSystem 4.3.0 dotnet
runtime.unix.System.Net.Primitives 4.3.0 dotnet
runtime.unix.System.Net.Sockets 4.3.0 dotnet
runtime.unix.System.Private.Uri 4.3.0 dotnet
runtime.unix.System.Runtime.Extensions 4.3.0 dotnet
scanelf 1.3.7-r1 apk
shadow 4.13-r4 apk
skalibs 2.13.1.1-r1 apk
sqlite-libs 3.41.2-r2 apk
ssl_client 1.36.1-r0 apk
tzdata 2023c-r1 apk
utmps-libs 0.1.2.1-r1 apk
xz-libs 5.4.3-r0 apk
zlib 1.2.13-r1 apk
zstd-libs 1.5.5-r4 apk

View File

@@ -11,30 +11,28 @@ project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_
available_architectures: available_architectures:
- { arch: "{{ arch_x86_64 }}", tag: "amd64-latest"} - { arch: "{{ arch_x86_64 }}", tag: "amd64-latest"}
- { arch: "{{ arch_arm64 }}", tag: "arm64v8-latest"} - { arch: "{{ arch_arm64 }}", tag: "arm64v8-latest"}
- { arch: "{{ arch_armhf }}", tag: "arm32v7-latest"}
# development version # development version
development_versions: true development_versions: true
development_versions_items: development_versions_items:
- { tag: "latest", desc: "Stable qbittorrent releases" } - { tag: "latest", desc: "Stable qbittorrent releases" }
- { tag: "unstable", desc: "Unstable qbittorrent releases" } - { tag: "libtorrentv1", desc: "Static qbittorrent builds using libtorrent v1" }
# container parameters # container parameters
common_param_env_vars_enabled: true common_param_env_vars_enabled: true
param_container_name: "{{ project_name }}" param_container_name: "{{ project_name }}"
param_usage_include_vols: true param_usage_include_vols: true
param_volumes: param_volumes:
- { vol_path: "/config", vol_host_path: "</path/to/appdata/config>", desc: "Contains all relevant configuration files." } - { vol_path: "/config", vol_host_path: "/path/to/appdata/config", desc: "Contains all relevant configuration files." }
- { vol_path: "/downloads", vol_host_path: "</path/to/downloads>", desc: "Location of downloads on disk." } - { vol_path: "/downloads", vol_host_path: "/path/to/downloads", desc: "Location of downloads on disk." }
param_usage_include_ports: true param_usage_include_ports: true
param_ports: param_ports:
- { external_port: "8080", internal_port: "8080", port_desc: "WebUI" }
- { external_port: "6881", internal_port: "6881", port_desc: "tcp connection port" } - { external_port: "6881", internal_port: "6881", port_desc: "tcp connection port" }
- { external_port: "6881", internal_port: "6881/udp", port_desc: "udp connection port" } - { external_port: "6881", internal_port: "6881/udp", port_desc: "udp connection port" }
- { external_port: "8080", internal_port: "8080", port_desc: "http gui" }
param_usage_include_env: true param_usage_include_env: true
param_env_vars: param_env_vars:
- { env_var: "TZ", env_value: "Europe/London", desc: "Specify a timezone to use EG Europe/London"} - { env_var: "TZ", env_value: "Europe/London", desc: "Specify a timezone to use EG Europe/London"}
- { env_var: "UMASK_SET", env_value: "022", desc: "for umask setting of qbittorrent, optional , default if left unset is 022"}
- { env_var: "WEBUI_PORT", env_value: "8080", desc: "for changing the port of the webui, see below for explanation"} - { env_var: "WEBUI_PORT", env_value: "8080", desc: "for changing the port of the webui, see below for explanation"}
# optional parameters # optional parameters
@@ -48,7 +46,6 @@ app_setup_block: |
Change username/password via the webui in the webui section of settings. Change username/password via the webui in the webui section of settings.
### WEBUI_PORT variable ### WEBUI_PORT variable
Due to issues with CSRF and port mapping, should you require to alter the port for the webui you need to change both sides of the -p 8080 switch AND set the WEBUI_PORT variable to the new port. Due to issues with CSRF and port mapping, should you require to alter the port for the webui you need to change both sides of the -p 8080 switch AND set the WEBUI_PORT variable to the new port.
@@ -61,14 +58,35 @@ app_setup_block: |
edit or add the following lines edit or add the following lines
``` ```text
WebUI\Address=* WebUI\Address=*
WebUI\ServerDomains=* WebUI\ServerDomains=*
``` ```
If you are running a very old (3.x) kernel you may run into [this issue](https://github.com/linuxserver/docker-qbittorrent/issues/103) which can be worked around using [this method](https://github.com/linuxserver/docker-qbittorrent/issues/103#issuecomment-831238484)
# changelog # changelog
changelogs: changelogs:
- { date: "17.06.23:", desc: "Rebase to Alpine 3.18, deprecate armhf as per [https://www.linuxserver.io/armhf](https://www.linuxserver.io/armhf)." }
- { date: "10.06.23:", desc: "Bump unrar to 6.2.8." }
- { date: "25.02.23:", desc: "Add qt6-qtbase-sqlite to support SQLite database for resume files."}
- { date: "15.01.23:", desc: "Rebase to Alpine 3.17, add openssl1.1-compat." }
- { date: "29.11.22:", desc: "Add icu-libs to support qbittorrent-cli." }
- { date: "30.10.22:", desc: "Add libtorrent v1 branch." }
- { date: "31.08.22:", desc: "Rebase to Alpine Edge again to follow latest releases." }
- { date: "12.08.22:", desc: "Bump unrar to 6.1.7." }
- { date: "16.06.22:", desc: "Rebase to Alpine 3.16 from edge." }
- { date: "25.05.22:", desc: "Fetch qbitorrent-cli from upstream repo." }
- { date: "02.03.22:", desc: "Add unrar, 7zip, and qbitorrent-cli." }
- { date: "01.03.22:", desc: "Add python for search plugin support." }
- { date: "23.02.22:", desc: "Rebase to Alpine Edge, install from Alpine repos." }
- { date: "19.02.22:", desc: "Add jq to build-stage" }
- { date: "07.01.22:", desc: "Rebase to Alpine, build from source." }
- { date: "06.01.22:", desc: "Deprecate unstable branch." }
- { date: "10.02.21:", desc: "Rebase to focal." }
- { date: "20.01.21:", desc: "Deprecate `UMASK_SET` in favor of UMASK in baseimage, see above for more information." }
- { date: "12.11.20:", desc: "Stop creating /config/data directory on startup" }
- { date: "03.04.20:", desc: "Fix adding search engine plugin" } - { date: "03.04.20:", desc: "Fix adding search engine plugin" }
- { date: "02.08.19:", desc: "Add qbitorrent-cli for processing scripts." } - { date: "02.08.19:", desc: "Add qbitorrent-cli for processing scripts." }
- { date: "23.03.19:", desc: "Switching to new Base images, shift to arm32v7 tag." } - { date: "23.03.19:", desc: "Switching to new Base images, shift to arm32v7 tag." }

View File

@@ -1,19 +0,0 @@
#!/usr/bin/with-contenv bash
# make our folders
mkdir -p \
/config/qBittorrent \
/config/data
# copy config
[[ ! -e /config/qBittorrent/qBittorrent.conf ]] && \
cp /defaults/qBittorrent.conf /config/qBittorrent/qBittorrent.conf
# chown download directory if currently not set to abc
if [[ "$(stat -c '%U' /downloads)" != "abc" ]]; then
chown -R abc:abc /downloads
fi
# permissions
chown -R abc:abc \
/config

View File

@@ -0,0 +1,21 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
# make our folder
mkdir -p /config/qBittorrent
# copy default config
if [[ ! -f /config/qBittorrent/qBittorrent.conf ]]; then
cp /defaults/qBittorrent.conf /config/qBittorrent/qBittorrent.conf
fi
# chown download directory if currently not set to abc
if [[ -d /downloads ]]; then
if [[ "$(stat -c '%U' /downloads)" != "abc" ]]; then
lsiown -R abc:abc /downloads
fi
fi
# permissions
lsiown -R abc:abc \
/config

View File

@@ -0,0 +1 @@
oneshot

View File

@@ -0,0 +1 @@
/etc/s6-overlay/s6-rc.d/init-qbittorrent-config/run

View File

@@ -0,0 +1 @@
3

View File

@@ -0,0 +1,8 @@
#!/usr/bin/with-contenv bash
# shellcheck shell=bash
WEBUI_PORT=${WEBUI_PORT:-8080}
exec \
s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z localhost ${WEBUI_PORT}" \
s6-setuidgid abc /app/qbittorrent-nox --webui-port="${WEBUI_PORT}"

View File

@@ -0,0 +1 @@
longrun

View File

@@ -1,9 +0,0 @@
#!/usr/bin/with-contenv bash
UMASK_SET=${UMASK_SET:-022}
WEBUI_PORT=${WEBUI_PORT:-8080}
umask "$UMASK_SET"
exec \
s6-setuidgid abc /usr/bin/qbittorrent-nox --webui-port="${WEBUI_PORT}"

14
root/usr/bin/qbt Executable file
View File

@@ -0,0 +1,14 @@
#!/usr/bin/with-contenv bash
# qbt bash wrapper to prompt user when trying to save password
if [[ "$@" == "settings set password" ]]; then
echo "Setting password is not supported"
echo "Please use --ask-for-password or --password"
elif [[ "$@" == "settings set"* ]]; then
/qbt/qbt "$@"
elif [[ "$@" != *"--ask-for-password"* ]] && [[ "$@" != *"--password"* ]];then
echo "Please use --ask-for-password or --password and ensure username/url are set"
/qbt/qbt "$@"
else
/qbt/qbt "$@"
fi