Compare commits

..

288 Commits

Author SHA1 Message Date
alexlebens
610af91b32 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2025-03-06 00:10:46 +00:00
alexlebens
d3abb9efb5 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2025-03-03 17:17:28 +00:00
alexlebens
473bbf0dba Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2025-03-03 17:16:31 +00:00
alexlebens
9de1e8bb20 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2025-02-26 19:58:07 +00:00
alexlebens
c273645944 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2025-02-18 02:19:47 +00:00
alexlebens
35b6e040fb Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2025-02-18 02:17:50 +00:00
alexlebens
0a73098177 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2025-02-18 02:16:40 +00:00
alexlebens
2510671468 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2025-01-31 03:08:56 +00:00
alexlebens
528fb29dc1 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2025-01-17 23:23:32 +00:00
alexlebens
71a76aef91 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2025-01-08 23:39:27 +00:00
alexlebens
a683733861 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2025-01-08 21:50:39 +00:00
alexlebens
7193fa0e43 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2025-01-08 21:34:13 +00:00
alexlebens
4d0778700c Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2025-01-08 21:20:44 +00:00
alexlebens
9400aae940 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2025-01-07 20:22:42 +00:00
alexlebens
bd37be4bd5 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2025-01-07 19:45:54 +00:00
alexlebens
11918960dc Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-30 23:11:15 +00:00
alexlebens
e5ad8122cb Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-30 23:04:31 +00:00
alexlebens
34c5ae6ff9 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-30 23:00:56 +00:00
alexlebens
efaf49caeb Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-30 22:55:32 +00:00
alexlebens
c0b6e849ae Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-25 03:08:20 +00:00
alexlebens
38487b296b Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-22 23:29:48 +00:00
alexlebens
13b0b3c060 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-22 05:48:31 +00:00
alexlebens
81d804f550 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-22 05:40:38 +00:00
alexlebens
72c30e6dc5 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-22 05:30:04 +00:00
alexlebens
f0c2cd0b19 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-22 05:26:54 +00:00
alexlebens
45670a55c8 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-22 05:22:53 +00:00
alexlebens
5d96c9a1d6 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-22 05:08:32 +00:00
alexlebens
9c0b97c753 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-22 04:54:14 +00:00
alexlebens
5b4f8d0ed7 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-22 04:46:33 +00:00
alexlebens
f07d9ec151 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-22 04:40:09 +00:00
alexlebens
515f4f91be Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-22 04:31:16 +00:00
alexlebens
a2dc782e14 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-22 04:20:27 +00:00
alexlebens
fe322f909e Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-21 01:33:43 +00:00
alexlebens
fd75a39adb Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-21 01:25:55 +00:00
alexlebens
7b29fe16d8 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-19 20:50:15 +00:00
alexlebens
081ac23ce4 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-19 19:59:50 +00:00
alexlebens
552ee9f4ce Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-19 19:58:55 +00:00
alexlebens
9b96e15872 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-16 16:32:15 +00:00
alexlebens
6b9abf71cb Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-12-12 17:13:15 +00:00
alexlebens
4b84ec822a Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-11-24 04:41:10 +00:00
alexlebens
c08ddac2cb Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-11-24 04:38:54 +00:00
alexlebens
0194e3fb79 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-10-19 05:59:06 +00:00
alexlebens
37e3de028e Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-10-13 17:39:19 +00:00
alexlebens
3ac94f8aed Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-10-13 04:35:21 +00:00
alexlebens
30c8789ffa Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-10-13 04:18:28 +00:00
alexlebens
8f4de35f4a Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-10-12 00:03:40 +00:00
alexlebens
4dafc9c9e2 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-09-28 21:44:00 +00:00
alexlebens
b42ff70fb3 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-09-28 07:07:44 +00:00
alexlebens
047338cf09 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-09-28 02:30:22 +00:00
alexlebens
9524ccad75 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-08-24 06:30:34 +00:00
alexlebens
a82c593200 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-08-19 21:43:11 +00:00
alexlebens
13da8c9acb Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-08-19 21:41:35 +00:00
alexlebens
b6ceaa4dcd Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-08-19 21:40:30 +00:00
alexlebens
500d1cb201 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-07-08 17:09:44 +00:00
alexlebens
6d5e37091c Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-07-05 03:52:17 +00:00
alexlebens
d374fb1638 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-07-05 03:45:55 +00:00
alexlebens
563b46e16b Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-07-05 03:41:51 +00:00
alexlebens
7776863d14 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-07-01 23:08:39 +00:00
alexlebens
4f02bbc1c7 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-06-28 22:01:20 +00:00
alexlebens
224437bb9b Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-06-22 23:26:36 +00:00
alexlebens
d5a477f068 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-06-22 23:22:39 +00:00
alexlebens
9149d3c05c Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-06-22 23:18:20 +00:00
alexlebens
dc072ba102 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-06-22 22:59:00 +00:00
alexlebens
c3bb7d6137 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-06-15 02:37:15 +00:00
alexlebens
7e38a8aa04 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-06-15 02:31:10 +00:00
alexlebens
4486902d0e Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-06-15 02:24:04 +00:00
alexlebens
81006a958e Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-06-15 02:17:59 +00:00
alexlebens
a1b6a39989 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-06-13 16:01:17 +00:00
alexlebens
4caa7851a4 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-06-13 15:58:46 +00:00
alexlebens
0930742d3e Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-28 20:28:16 +00:00
alexlebens
4f2ed4e5cc Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-28 20:09:51 +00:00
alexlebens
43f7bf3766 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-28 19:04:11 +00:00
alexlebens
ad7e930bd9 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-26 20:43:35 +00:00
alexlebens
7a3cfda12f Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-26 20:31:27 +00:00
alexlebens
da8171ce2c Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-26 20:28:37 +00:00
alexlebens
e4cbf821a7 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-25 02:50:46 +00:00
alexlebens
efed4951f6 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-25 02:01:05 +00:00
alexlebens
32927c3c64 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-20 17:14:22 +00:00
alexlebens
6239551f2c Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-20 17:12:31 +00:00
alexlebens
3992d9a7a0 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-18 19:40:36 +00:00
alexlebens
9700f8c662 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-18 19:40:23 +00:00
alexlebens
a12294d785 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-17 17:08:33 +00:00
alexlebens
939bb2a104 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-17 17:08:04 +00:00
alexlebens
98a660ac54 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-16 22:19:58 +00:00
alexlebens
784bd59523 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-16 18:57:46 +00:00
alexlebens
064e67a9fd Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-16 18:44:44 +00:00
alexlebens
b9a68c67b1 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-16 18:44:26 +00:00
alexlebens
0b69ea6362 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-16 18:15:32 +00:00
alexlebens
1ba753446f Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-16 17:49:02 +00:00
alexlebens
9f1c32e5fc Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-16 17:48:43 +00:00
alexlebens
4147016809 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-16 17:47:56 +00:00
alexlebens
24b52d8716 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-16 17:46:59 +00:00
alexlebens
2576527aa0 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-16 17:46:04 +00:00
alexlebens
2aae35d757 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-16 17:45:31 +00:00
alexlebens
548db97f81 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-16 17:45:02 +00:00
alexlebens
094a8b3b90 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-16 17:43:19 +00:00
alexlebens
222a87befc Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-16 17:42:05 +00:00
alexlebens
44be1ae304 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-16 17:35:54 +00:00
alexlebens
e8fb911722 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-16 17:35:46 +00:00
alexlebens
7cd16dd92f Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-05-16 17:35:21 +00:00
alexlebens
1f240a8fac Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-26 20:36:10 +00:00
alexlebens
4b84bd188e Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-26 20:05:43 +00:00
alexlebens
f4a591eaca Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-26 16:00:28 +00:00
alexlebens
8a0068c120 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-23 22:43:42 +00:00
alexlebens
fc751e627b Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-23 21:58:06 +00:00
alexlebens
37e374fa31 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-23 09:35:00 +00:00
alexlebens
d6062263de Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-23 09:33:12 +00:00
alexlebens
631e5c3073 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-22 12:43:52 +00:00
alexlebens
d9e72caf94 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-21 12:41:00 +00:00
alexlebens
4d909a32b4 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-21 10:03:50 +00:00
alexlebens
390b7ccfa1 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-21 09:59:41 +00:00
alexlebens
5e0fc7ffbe Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-20 03:37:42 +00:00
alexlebens
7fd290fb89 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-19 11:41:59 +00:00
alexlebens
4b4acdf570 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-19 11:32:49 +00:00
alexlebens
4ee3bb4d49 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-19 11:22:34 +00:00
alexlebens
d04e10a4e5 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-19 11:05:31 +00:00
alexlebens
86b7430210 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-19 11:01:43 +00:00
alexlebens
c4c054f983 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-19 10:59:06 +00:00
alexlebens
933a92bb07 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-19 10:54:26 +00:00
alexlebens
952ab164d4 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-19 10:51:14 +00:00
alexlebens
c588e18077 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-19 10:41:47 +00:00
alexlebens
0e91873833 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-19 10:09:46 +00:00
alexlebens
3843f7d272 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-19 04:03:15 +00:00
alexlebens
b3f43086d7 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-18 11:49:33 +00:00
alexlebens
af8a8127fe Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-18 11:35:26 +00:00
alexlebens
c0f6ac7fbc Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-18 10:35:57 +00:00
alexlebens
bf62fdd631 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-18 09:44:09 +00:00
alexlebens
b4718bce46 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-18 09:27:18 +00:00
alexlebens
792a5723be Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-18 07:51:23 +00:00
alexlebens
6ca9b94db4 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-18 07:48:20 +00:00
alexlebens
a530195ea9 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-18 07:39:49 +00:00
alexlebens
02801b1aa1 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-18 07:35:35 +00:00
alexlebens
810d74b2ae Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-18 07:17:31 +00:00
alexlebens
d69a2d28b0 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-18 07:07:54 +00:00
alexlebens
d054e42199 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-18 02:02:05 +00:00
alexlebens
63b5ca7614 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-18 02:00:24 +00:00
alexlebens
4be5cd418d Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-18 01:16:18 +00:00
alexlebens
df96e6556e Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-18 01:14:18 +00:00
alexlebens
59b2ed8001 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-18 01:10:07 +00:00
alexlebens
cd9fbe56a4 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-18 01:05:45 +00:00
alexlebens
20fcd67ea3 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-18 01:05:27 +00:00
alexlebens
6f6d30a862 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-18 01:03:35 +00:00
alexlebens
f1a65dd177 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-18 00:55:51 +00:00
alexlebens
bdd7060748 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-17 10:43:21 +00:00
alexlebens
07e2ac7acd Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-15 09:32:13 +00:00
alexlebens
787765f1e7 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-15 08:48:10 +00:00
alexlebens
9f18f3ba2f Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-15 08:44:39 +00:00
alexlebens
e62daee353 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-14 05:38:22 +00:00
alexlebens
85f3f47dca Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-14 05:33:14 +00:00
alexlebens
9ff16890c5 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-14 05:28:29 +00:00
alexlebens
c68b04c38e Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-14 05:20:27 +00:00
alexlebens
04d98c0d65 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-14 05:14:46 +00:00
alexlebens
62512ca909 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-14 05:12:10 +00:00
alexlebens
9409e36b58 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-14 05:07:43 +00:00
alexlebens
25af8d718d Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-14 05:05:34 +00:00
alexlebens
554c480d39 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-14 04:58:16 +00:00
alexlebens
b55dfc3cad Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-14 04:31:36 +00:00
alexlebens
afd5c8b4b2 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-14 04:30:03 +00:00
alexlebens
c7cf440b0e Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-14 04:18:12 +00:00
alexlebens
a5be172d48 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-13 20:58:43 +00:00
alexlebens
dbc1cdd8d5 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-13 09:28:43 +00:00
alexlebens
3c2d3d6ef4 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-13 09:25:13 +00:00
alexlebens
6890d1d974 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-13 08:42:04 +00:00
alexlebens
df8bfb1b55 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-13 08:06:16 +00:00
alexlebens
a6cb051c9c Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-13 02:11:30 +00:00
alexlebens
8154a36b2d Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-12 23:42:50 +00:00
alexlebens
297b3f9a70 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-12 01:38:02 +00:00
alexlebens
af003f0990 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-12 01:35:24 +00:00
alexlebens
0a2facc20d Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-12 01:33:37 +00:00
alexlebens
f06d4e26a1 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-12 01:32:16 +00:00
alexlebens
a2a25f3e2d Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-12 01:05:35 +00:00
alexlebens
e7ee0ee1d6 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-12 00:04:57 +00:00
alexlebens
0553d58a6b Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-12 00:04:10 +00:00
alexlebens
5db00bf5b8 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-11 23:45:21 +00:00
alexlebens
57178b4b42 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-11 23:38:45 +00:00
alexlebens
18f2464049 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-10 04:35:45 +00:00
alexlebens
ba610b41c8 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-10 02:17:05 +00:00
alexlebens
3cfedcd13f Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-09 00:19:33 +00:00
alexlebens
1d4547aea8 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-08 17:30:43 +00:00
alexlebens
eea3e93b2c Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-08 17:28:25 +00:00
alexlebens
72087e86aa Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-06 21:41:20 +00:00
alexlebens
ee1f7a1760 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-05 05:22:32 +00:00
alexlebens
97d93a6f55 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-04 20:53:50 +00:00
alexlebens
98cc39ddcc Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-04 19:43:30 +00:00
alexlebens
cd41ea7174 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-04 19:36:55 +00:00
alexlebens
c65b033644 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-04 17:48:42 +00:00
alexlebens
e07b07eb64 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-04-04 02:15:59 +00:00
AlexanderLebens
871e6e0a62 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-04-01 15:28:34 +00:00
AlexanderLebens
e80814b9b9 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-30 22:47:56 +00:00
AlexanderLebens
e37a5842f5 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-30 20:49:04 +00:00
AlexanderLebens
7be8dfcd6b Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-30 20:43:27 +00:00
AlexanderLebens
d69358027d Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-30 20:32:36 +00:00
AlexanderLebens
3c36d6ce01 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-30 20:27:42 +00:00
AlexanderLebens
4a583293fc Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-30 20:23:11 +00:00
AlexanderLebens
04bce9d600 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-30 20:17:37 +00:00
AlexanderLebens
c8b61dec7e Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-30 19:31:03 +00:00
AlexanderLebens
fca1400d3b Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-30 19:30:25 +00:00
alexlebens
ec74e2fae0 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-03-25 16:16:36 +00:00
alexlebens
f0d53c3b4a Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-03-25 16:16:00 +00:00
alexlebens
25b7379a06 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-03-25 16:13:23 +00:00
alexlebens
6462d8fed1 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-03-25 16:12:41 +00:00
alexlebens
de2b2541c0 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-03-22 21:50:46 +00:00
alexlebens
8dde430d41 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-03-22 21:42:25 +00:00
alexlebens
f27eaafdaa Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-03-18 07:30:19 +00:00
alexlebens
fc12a578fb Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-03-18 07:28:35 +00:00
AlexanderLebens
a05bcb83cb Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-17 07:32:37 +00:00
AlexanderLebens
c62e8ab3ef Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 15:56:20 +00:00
AlexanderLebens
f44a361278 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 15:52:30 +00:00
AlexanderLebens
558fdfd00e Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 15:42:04 +00:00
AlexanderLebens
f38e146609 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 15:37:11 +00:00
AlexanderLebens
10129a8e68 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 15:34:23 +00:00
AlexanderLebens
814ac3c4f8 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 15:29:21 +00:00
AlexanderLebens
23d159db0a Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 15:21:50 +00:00
AlexanderLebens
51ae6468dc Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 15:13:01 +00:00
AlexanderLebens
cbff0f59f2 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 15:04:39 +00:00
AlexanderLebens
bce9ccfa78 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 14:16:57 +00:00
AlexanderLebens
f6a0eedc3f Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 13:25:42 +00:00
AlexanderLebens
3cca83b6cc Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 13:16:04 +00:00
AlexanderLebens
3f309e422c Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 11:44:27 +00:00
AlexanderLebens
455e9d9384 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 10:38:58 +00:00
AlexanderLebens
c7fdfd8f5c Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 10:12:03 +00:00
AlexanderLebens
bd13cce830 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 10:11:36 +00:00
AlexanderLebens
bfc0e8b773 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 07:43:11 +00:00
AlexanderLebens
c784a90fed Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 07:35:02 +00:00
AlexanderLebens
6eba5070ff Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 05:05:02 +00:00
AlexanderLebens
9ef14fba32 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 04:38:07 +00:00
AlexanderLebens
3c9a2f82af Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 04:37:02 +00:00
AlexanderLebens
e1c29c604f Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-16 01:12:28 +00:00
AlexanderLebens
c3e8cf22cc Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-15 08:23:47 +00:00
AlexanderLebens
bbfb4ee61c Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-15 08:19:27 +00:00
AlexanderLebens
c459ef40d3 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-15 08:16:54 +00:00
AlexanderLebens
9f16e49683 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-15 08:01:11 +00:00
AlexanderLebens
5b21ae3351 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-15 07:57:42 +00:00
AlexanderLebens
57458962e8 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-15 05:59:33 +00:00
alexlebens
543addccb4 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-03-14 23:11:53 +00:00
AlexanderLebens
02f2335783 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-14 14:59:42 +00:00
AlexanderLebens
08d9c65bd9 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-14 14:53:10 +00:00
AlexanderLebens
716d16810f Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-14 14:47:17 +00:00
AlexanderLebens
7bb2f3ff91 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-14 12:32:57 +00:00
AlexanderLebens
e8d1097b55 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-14 07:30:33 +00:00
AlexanderLebens
106f40f661 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-14 06:18:30 +00:00
AlexanderLebens
27cf8540f7 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-13 12:00:48 +00:00
AlexanderLebens
5273942d52 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-13 12:00:42 +00:00
AlexanderLebens
76049fa566 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-13 11:55:07 +00:00
AlexanderLebens
69252499cd Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-13 11:49:51 +00:00
AlexanderLebens
d913d3da59 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-13 11:46:28 +00:00
AlexanderLebens
396bbfe5f2 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-13 11:40:51 +00:00
AlexanderLebens
4c895a4ed0 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-13 10:43:34 +00:00
AlexanderLebens
e9a392c950 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-13 10:38:16 +00:00
AlexanderLebens
445738af76 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-13 07:12:16 +00:00
AlexanderLebens
9ea0742dfa Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-13 07:08:49 +00:00
AlexanderLebens
4e9899edc7 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-13 07:07:19 +00:00
AlexanderLebens
f55b3255e3 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-13 05:23:51 +00:00
AlexanderLebens
f39c7c4a80 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-12 04:53:06 +00:00
AlexanderLebens
480d729a4c Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-12 04:50:09 +00:00
AlexanderLebens
250938ffff Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-03-12 04:36:40 +00:00
alexlebens
6c3ad7f7ad Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-03-07 18:25:14 +00:00
alexlebens
e1bc375c55 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-02-28 15:41:17 +00:00
alexlebens
c75b850bfa Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-02-28 14:42:47 +00:00
alexlebens
ed29678481 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-02-27 00:46:29 +00:00
alexlebens
a7a249fe91 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-02-24 00:12:51 +00:00
alexlebens
15375ef4ba Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-02-23 20:14:02 +00:00
alexlebens
d49119097b Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-02-23 02:02:58 +00:00
alexlebens
570a13a8f4 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-02-23 01:02:14 +00:00
alexlebens
6888ede71a Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-02-22 20:57:28 +00:00
alexlebens
16acf28739 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-02-22 20:49:20 +00:00
alexlebens
6bda8bee03 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-02-22 20:05:19 +00:00
alexlebens
0278d8c496 Update index.yaml
Signed-off-by: alexlebens <alexlebens@users.noreply.github.com>
2024-02-21 12:50:25 +00:00
AlexanderLebens
6dfd30b631 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-02-15 18:47:52 +00:00
AlexanderLebens
e62ffb332d Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-02-13 14:34:35 +00:00
AlexanderLebens
3792ad098f Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-02-13 14:07:08 +00:00
AlexanderLebens
ad46386aaf Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-02-13 13:58:08 +00:00
AlexanderLebens
8976ae00ec Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-02-13 13:41:25 +00:00
AlexanderLebens
3ca7ae0bec Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-02-13 13:40:11 +00:00
AlexanderLebens
cfa13cf66a Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-02-13 13:16:12 +00:00
AlexanderLebens
8bf1ac6e6c Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-02-13 13:07:07 +00:00
AlexanderLebens
aaf2cda058 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-02-13 13:01:22 +00:00
AlexanderLebens
75c28e6358 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-02-13 04:05:20 +00:00
AlexanderLebens
a36ea6690f Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-02-13 03:56:01 +00:00
AlexanderLebens
6cb3333d9f Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-02-13 03:06:36 +00:00
AlexanderLebens
5e9f0b0c7c Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-02-13 02:34:06 +00:00
AlexanderLebens
663f974072 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-02-10 18:35:00 +00:00
AlexanderLebens
4b0c86c2b9 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-02-10 18:12:55 +00:00
AlexanderLebens
ee7ea230e6 Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-02-10 11:09:13 +00:00
AlexanderLebens
5f147e0d0a Update index.yaml
Signed-off-by: AlexanderLebens <AlexanderLebens@users.noreply.github.com>
2024-02-10 10:16:35 +00:00
1ab49f7f94 change readme 2024-02-10 03:04:42 -07:00
2992ee5b5b change readme 2024-02-10 03:03:06 -07:00
be85591839 remove for page 2024-02-10 02:53:41 -07:00
165 changed files with 6018 additions and 8866 deletions

View File

@@ -1,2 +0,0 @@
# This file is processed by Renovate bot so that it creates a PR on new major Renovate versions
FROM renovate/renovate:37

112
.github/renovate.json vendored
View File

@@ -1,112 +0,0 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:recommended",
"mergeConfidence:all-badges",
":rebaseStalePrs"
],
"timezone": "US/Mountain",
"schedule": [
"every weekday"
],
"labels": [],
"packageRules": [
{
"description": "Disables for non major Renovate version",
"matchPaths": [
".github/renovate-update-notification/Dockerfile"
],
"matchUpdateTypes": [
"minor",
"patch",
"pin",
"digest",
"rollback"
],
"enabled": false
},
{
"description": "Generate for major Renovate version",
"matchPaths": [
".github/renovate-update-notification/Dockerfile"
],
"matchUpdateTypes": [
"major"
],
"addLabels": [
"upgrade"
],
"automerge": false
},
{
"description": "Label service images",
"matchPackageNames": [
"ghcr.io/alex1989hu/kubelet-serving-cert-approver",
"ghcr.io/cloudnative-pg/postgresql",
"redis/redis-stack-server"
],
"matchDatasources": [
"docker"
],
"addLabels": [
"service",
"image"
],
"automerge": false,
"minimumReleaseAge": "3 days"
},
{
"description": "Label service charts",
"matchPackageNames": [
"elasticsearch",
"redis"
],
"matchDatasources": [
"helm"
],
"addLabels": [
"serivce",
"chart"
],
"automerge": false,
"minimumReleaseAge": "3 days"
},
{
"description": "Label application images",
"matchPackageNames": [
"bbilly1/tubearchivist-jf",
"bbilly1/tubearchivist",
"freshrss/freshrss",
"ghcr.io/gethomepage/homepage",
"homeassistant/home-assistant",
"linuxserver/calibre",
"linuxserver/code-server",
"linuxserver/cops",
"outlinewiki/outline",
"rmcrackan/libation"
],
"matchDatasources": [
"docker"
],
"addLabels": [
"application",
"image"
],
"automerge": false,
"minimumReleaseAge": "3 days"
},
{
"description": "Label application charts",
"matchPackageNames": [],
"matchDatasources": [
"helm"
],
"addLabels": [
"application",
"chart"
],
"automerge": false,
"minimumReleaseAge": "3 days"
}
]
}

View File

@@ -1,37 +0,0 @@
name: lint-and-test-charts
on: pull_request
jobs:
lint-test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Helm
uses: azure/setup-helm@v4
with:
version: v3.13.3
- uses: actions/setup-python@v5
with:
python-version: "3.10"
check-latest: true
- name: Set up chart-testing
uses: helm/chart-testing-action@v2.6.1
- name: Run chart-testing (list-changed)
id: list-changed
run: |
changed=$(ct list-changed --target-branch ${{ github.event.repository.default_branch }})
if [[ -n "$changed" ]]; then
echo "changed=true" >> "$GITHUB_OUTPUT"
fi
- name: Run chart-testing (lint)
if: steps.list-changed.outputs.changed == 'true'
run: ct lint --target-branch ${{ github.event.repository.default_branch }}

View File

@@ -1,27 +0,0 @@
name: release-charts
on:
push:
branches:
- main
jobs:
release:
permissions:
contents: write
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Configure Git
run: |
git config user.name "$GITHUB_ACTOR"
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
- name: Run chart-releaser
uses: helm/chart-releaser-action@v1.6.0
env:
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"

9
.gitignore vendored
View File

@@ -1,9 +0,0 @@
# Compiled Helm chart dependencies
charts/**/Chart.lock
charts/**/charts/
# Testing
__snapshot__/
# Docs
_site/

201
LICENSE
View File

@@ -1,201 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

1
_config.yml Normal file
View File

@@ -0,0 +1 @@
theme: jekyll-theme-cayman

View File

@@ -1,13 +0,0 @@
apiVersion: v2
name: calibre-server
version: 0.0.6
description: Chart for Calibre content database
keywords:
- media
- books
sources:
- https://github.com/kovidgoyal/calibre
maintainers:
- name: alexlebens
icon: https://raw.githubusercontent.com/kovidgoyal/calibre/master/resources/images/lt.png
appVersion: 7.5.1

View File

@@ -1,18 +0,0 @@
## Introduction
[Calibre](https://calibre-ebook.com/)
calibre is an e-book manager. It can view, convert, edit and catalog e-books in all of the major e-book formats. It can also talk to e-book reader devices. It can go out to the internet and fetch metadata for your books. It can download newspapers and convert them into e-books for convenient reading.
This chart bootstraps a [Calibre](https://github.com/home-assistant) deployment on a [Kubernetes](https://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
## Prerequisites
- Kubernetes
- Helm
- Traefik v2 / IngressRoute
- Authentik / Auth
## Parameters
See the [values files](values.yaml).

View File

@@ -1,83 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: calibre-server
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: calibre-server
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
revisionHistoryLimit: 3
replicas: {{ .Values.deployment.replicas }}
strategy:
type: {{ .Values.deployment.strategy }}
selector:
matchLabels:
app.kubernetes.io/name: calibre-server
app.kubernetes.io/instance: {{ .Release.Name }}
template:
metadata:
labels:
app.kubernetes.io/name: calibre-server
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
serviceAccountName: calibre-server
automountServiceAccountToken: true
containers:
- name: calibre-server
image: "{{ .Values.deployment.image.repository }}:{{ .Values.deployment.image.tag }}"
imagePullPolicy: {{ .Values.deployment.image.imagePullPolicy }}
ports:
- name: http
containerPort: {{ .Values.service.http.port }}
protocol: TCP
- name: content
containerPort: {{ .Values.service.content.port }}
protocol: TCP
env:
{{- range $k,$v := .Values.deployment.env }}
- name: {{ $k }}
value: {{ $v | quote }}
{{- end }}
{{- with .Values.deployment.envFrom }}
envFrom:
{{- toYaml . | nindent 12 }}
{{- end }}
volumeMounts:
- mountPath: /config
name: calibre-server-config
- mountPath: /books
name: calibre-server-books
resources:
{{- toYaml .Values.deployment.resources | nindent 12 }}
livenessProbe:
tcpSocket:
port: {{ .Values.service.http.port }}
initialDelaySeconds: 0
failureThreshold: 3
timeoutSeconds: 1
periodSeconds: 10
readinessProbe:
tcpSocket:
port: {{ .Values.service.http.port }}
initialDelaySeconds: 0
failureThreshold: 3
timeoutSeconds: 1
periodSeconds: 10
startupProbe:
tcpSocket:
port: {{ .Values.service.http.port }}
initialDelaySeconds: 0
failureThreshold: 30
timeoutSeconds: 1
periodSeconds: 5
volumes:
- name: calibre-server-config
persistentVolumeClaim:
claimName: calibre-server-config
- name: calibre-server-books
persistentVolumeClaim:
claimName: {{ .Values.persistence.books.claimName }}

View File

@@ -1,34 +0,0 @@
{{- if .Values.ingressRoute.enabled }}
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: calibre-server
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: calibre-server
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: calibre-server
spec:
entryPoints:
- websecure
routes:
- kind: Rule
match: "Host(`{{ .Values.ingressRoute.http.host }}`)"
middlewares:
- name: "authentik-{{ .Release.Name }}"
namespace: {{ .Release.Namespace }}
priority: 10
services:
- kind: Service
name: calibre-server
port: {{ .Values.service.http.port }}
- kind: Rule
match: "Host(`{{ .Values.ingressRoute.http.host }}`) && PathPrefix(`/outpost.goauthentik.io/`)"
priority: 15
services:
- kind: Service
name: {{ .Values.ingressRoute.authentik.outpost }}
port: {{ .Values.ingressRoute.authentik.port }}
{{- end }}

View File

@@ -1,29 +0,0 @@
{{- if .Values.ingressRoute.enabled }}
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: "authentik-{{ .Release.Name }}"
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: auth
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
forwardAuth:
address: "http://{{ .Values.ingressRoute.authentik.outpost }}.authentik:{{ .Values.ingressRoute.authentik.port }}/outpost.goauthentik.io/auth/traefik"
trustForwardHeader: true
authResponseHeaders:
- X-authentik-username
- X-authentik-groups
- X-authentik-email
- X-authentik-name
- X-authentik-uid
- X-authentik-jwt
- X-authentik-meta-jwks
- X-authentik-meta-outpost
- X-authentik-meta-provider
- X-authentik-meta-app
- X-authentik-meta-version
{{- end }}

View File

@@ -1,19 +0,0 @@
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: calibre-server-config
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: calibre-server
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.persistence.config.storageSize }}
storageClassName: {{ .Values.persistence.config.storageClassName }}
volumeMode: {{ .Values.persistence.config.volumeMode }}

View File

@@ -1,11 +0,0 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: calibre-server
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: calibre-server
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: calibre-server

View File

@@ -1,44 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: calibre-server
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: calibre-server
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
type: ClusterIP
ports:
- port: {{ .Values.service.http.port }}
targetPort: http
protocol: TCP
name: http
selector:
app.kubernetes.io/name: calibre-server
app.kubernetes.io/instance: {{ .Release.Name }}
---
apiVersion: v1
kind: Service
metadata:
name: calibre-server-content
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: calibre-server
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
type: ClusterIP
ports:
- port: {{ .Values.service.content.port }}
targetPort: content
protocol: TCP
name: content
selector:
app.kubernetes.io/name: calibre-server
app.kubernetes.io/instance: {{ .Release.Name }}

View File

@@ -1,42 +0,0 @@
deployment:
replicas: 1
strategy: Recreate
image:
repository: linuxserver/calibre
tag: v7.5.1-ls269
imagePullPolicy: IfNotPresent
env:
PGID: "1001"
PUID: "1001"
TZ: UTC
UMASK_SET: "022"
CUSTOM_USER: calibre
TITLE: Calibre Server
NO_DECOR: true
envFrom:
resources:
requests:
memory: 256Mi
cpu: 50m
limits:
memory: 1Gi
cpu: 500m
service:
http:
port: 8080
content:
port: 8081
ingressRoute:
enabled: true
http:
host:
authentik:
outpost:
port: 9000
persistence:
config:
storageClassName: default
storageSize: 5Gi
volumeMode: Filesystem
books:
claimName:

View File

@@ -1,12 +0,0 @@
apiVersion: v2
name: cops
version: 0.0.3
description: Chart for Calibre OPDS (and HTML) PHP Server
keywords:
- calibre
- OPDS
sources:
- https://github.com/seblucas/cops
maintainers:
- name: alexlebens
appVersion: 1.1.3

View File

@@ -1,22 +0,0 @@
## Introduction
[Calibre OPDS (and HTML) PHP Server](https://github.com/seblucas/cops)
COPS's main advantages are :
- No need for many dependencies.
- No need for a lot of CPU or RAM.
- Not much code.
- Search is available.
- It was fun to code.
This chart bootstraps a [COPS](https://github.com/seblucas/cops) deployment on a [Kubernetes](https://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
## Prerequisites
- Kubernetes
- Helm
## Parameters
See the [values files](values.yaml).

View File

@@ -1,82 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace | quote }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
revisionHistoryLimit: 3
replicas: {{ .Values.deployment.replicas }}
strategy:
type: {{ .Values.deployment.strategy }}
selector:
matchLabels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
template:
metadata:
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
serviceAccountName: {{ .Release.Name }}
containers:
- name: {{ .Release.Name }}
image: "{{ .Values.deployment.image.repository }}:{{ .Values.deployment.image.tag }}"
imagePullPolicy: {{ .Values.deployment.image.imagePullPolicy }}
ports:
- name: http
containerPort: {{ .Values.service.http.port }}
protocol: TCP
volumeMounts:
- mountPath: /config
name: cops-config
- mountPath: /books
name: cops-books
resources:
{{- toYaml .Values.deployment.resources | nindent 12 }}
env:
{{- range $k,$v := .Values.deployment.env }}
- name: {{ $k }}
value: {{ $v | quote }}
{{- end }}
{{- with .Values.deployment.envFrom }}
envFrom:
{{- toYaml . | nindent 12 }}
{{- end }}
livenessProbe:
httpGet:
path: /
port: {{ .Values.service.http.port }}
initialDelaySeconds: 0
failureThreshold: 5
timeoutSeconds: 1
periodSeconds: 10
readinessProbe:
httpGet:
path: /
port: {{ .Values.service.http.port }}
initialDelaySeconds: 0
failureThreshold: 5
timeoutSeconds: 1
periodSeconds: 10
startupProbe:
httpGet:
path: /
port: {{ .Values.service.http.port }}
initialDelaySeconds: 5
failureThreshold: 30
periodSeconds: 10
timeoutSeconds: 1
volumes:
- name: cops-config
persistentVolumeClaim:
claimName: cops-config
- name: cops-books
persistentVolumeClaim:
claimName: {{ .Values.persistence.books.claimName }}

View File

@@ -1,32 +0,0 @@
{{- if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
annotations:
{{- toYaml .Values.ingress.annotations | nindent 4 }}
spec:
ingressClassName: {{ .Values.ingress.className }}
tls:
- hosts:
- {{ .Values.ingress.host }}
secretName: {{ .Release.Name }}-secret-tls
rules:
- host: {{ .Values.ingress.host }}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: {{ .Release.Name }}
port:
name: http
{{- end }}

View File

@@ -1,19 +0,0 @@
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: cops-config
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: storage
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.persistence.config.storageSize }}
storageClassName: {{ .Values.persistence.config.storageClassName }}
volumeMode: {{ .Values.persistence.config.volumeMode }}

View File

@@ -1,26 +0,0 @@
apiVersion: v1
kind: Pod
metadata:
name: "{{ .Release.Name }}-test-connection"
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
annotations:
"helm.sh/hook": test-success
spec:
restartPolicy: Never
containers:
- name: wget
image: busybox
command: ['wget']
args: ['{{ .Release.Name }}:{{ .Values.service.http.port }}']
resources:
limits:
cpu: 500m
memory: 1Gi
requests:
cpu: 50m
memory: 256Mi

View File

@@ -1,11 +0,0 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}

View File

@@ -1,22 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
type: ClusterIP
externalTrafficPolicy:
ports:
- port: {{ .Values.service.http.port }}
targetPort: http
protocol: TCP
name: http
selector:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}

View File

@@ -1,36 +0,0 @@
deployment:
replicas: 1
strategy: Recreate
image:
repository: linuxserver/cops
tag: 2.3.1-ls185
imagePullPolicy: IfNotPresent
env:
PGID: "1000"
PUID: "1000"
TZ: UTC
envFrom:
resources:
limits:
cpu: 500m
memory: 1Gi
requests:
cpu: 50m
memory: 256Mi
serviceAccount:
create: true
service:
http:
port: 80
ingress:
enabled: false
annotations:
className:
host:
persistence:
config:
storageClassName: default
storageSize: 5Gi
volumeMode: Filesystem
books:
claimName:

View File

@@ -1,12 +0,0 @@
apiVersion: v2
name: freshrss
version: 0.0.3
description: Chart for Freshrss
keywords:
- rss
sources:
- https://github.com/FreshRSS/FreshRSS
maintainers:
- name: alexlebens
icon: https://avatars.githubusercontent.com/u/9414285?s=48&v=4
appVersion: "1.23.1"

View File

@@ -1,18 +0,0 @@
## Introduction
[FreshRSS](https://github.com/FreshRSS/FreshRSS)
FreshRSS is a self-hosted RSS feed aggregator.
It is lightweight, easy to work with, powerful, and customizable.
This chart bootstraps a [FreshRSS](https://github.com/FreshRSS/FreshRSS) deployment on a [Kubernetes](https://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
## Prerequisites
- Kubernetes
- Helm
## Parameters
See the [values files](values.yaml).

View File

@@ -1,76 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace | quote }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
revisionHistoryLimit: 3
replicas: {{ .Values.deployment.replicas }}
strategy:
type: {{ .Values.deployment.strategy }}
selector:
matchLabels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
template:
metadata:
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
serviceAccountName: {{ .Release.Name }}
containers:
- name: {{ .Release.Name }}
image: "{{ .Values.deployment.image.repository }}:{{ .Values.deployment.image.tag }}"
imagePullPolicy: {{ .Values.deployment.image.imagePullPolicy }}
ports:
- name: http
containerPort: {{ .Values.service.http.port }}
protocol: TCP
volumeMounts:
- name: {{ .Release.Name }}-config
mountPath: /config
resources:
{{- toYaml .Values.deployment.resources | nindent 12 }}
env:
- name: LISTEN
value: "0.0.0.0:{{ .Values.service.http.port }}"
{{- range $k,$v := .Values.deployment.env }}
- name: {{ $k }}
value: {{ $v | quote }}
{{- end }}
{{- with .Values.deployment.envFrom }}
envFrom:
{{- toYaml . | nindent 12 }}
{{- end }}
livenessProbe:
tcpSocket:
port: {{ .Values.service.http.port }}
initialDelaySeconds: 0
failureThreshold: 3
timeoutSeconds: 1
periodSeconds: 10
readinessProbe:
tcpSocket:
port: {{ .Values.service.http.port }}
initialDelaySeconds: 0
failureThreshold: 3
timeoutSeconds: 1
periodSeconds: 10
startupProbe:
tcpSocket:
port: {{ .Values.service.http.port }}
initialDelaySeconds: 0
failureThreshold: 30
timeoutSeconds: 1
periodSeconds: 5
volumes:
- name: {{ .Release.Name }}-config
persistentVolumeClaim:
claimName: {{ .Release.Name }}-config

View File

@@ -1,32 +0,0 @@
{{- if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
annotations:
{{- toYaml .Values.ingress.annotations | nindent 4 }}
spec:
ingressClassName: {{ .Values.ingress.className }}
tls:
- hosts:
- {{ .Values.ingress.host }}
secretName: {{ .Release.Name }}-secret-tls
rules:
- host: {{ .Values.ingress.host }}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: {{ .Release.Name }}
port:
name: http
{{- end }}

View File

@@ -1,19 +0,0 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: {{ .Release.Name }}-config
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: storage
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.persistence.config.storageSize }}
storageClassName: {{ .Values.persistence.config.storageClassName }}
volumeMode: {{ .Values.persistence.config.volumeMode }}

View File

@@ -1,26 +0,0 @@
apiVersion: v1
kind: Pod
metadata:
name: "{{ .Release.Name }}-test-connection"
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
annotations:
"helm.sh/hook": test-success
spec:
restartPolicy: Never
containers:
- name: wget
image: busybox
command: ['wget']
args: ['{{ .Release.Name }}:{{ .Values.service.http.port }}']
resources:
limits:
cpu: 500m
memory: 1Gi
requests:
cpu: 50m
memory: 256Mi

View File

@@ -1,11 +0,0 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}

View File

@@ -1,21 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
type: ClusterIP
ports:
- port: {{ .Values.service.http.port }}
targetPort: http
protocol: TCP
name: http
selector:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}

View File

@@ -1,33 +0,0 @@
deployment:
replicas: 1
strategy: Recreate
image:
repository: freshrss/freshrss
tag: 1.23.1
imagePullPolicy: IfNotPresent
env:
PGID: "568"
PUID: "568"
TZ: UTC
FRESHRSS_ENV: production
envFrom:
resources:
limits:
cpu: 500m
memory: 1Gi
requests:
cpu: 50m
memory: 256Mi
service:
http:
port: 80
ingress:
enabled: true
className:
annotations:
host:
persistence:
config:
storageClassName: default
storageSize: 5Gi
volumeMode: Filesystem

View File

@@ -1,12 +0,0 @@
apiVersion: v2
name: home-assistant
version: 0.1.10
description: Chart for Home Assistant
keywords:
- home-automation
sources:
- https://github.com/home-assistant
maintainers:
- name: alexlebens
icon: https://avatars.githubusercontent.com/u/13844975?s=200&v=4
appVersion: v2024.4.3

View File

@@ -1,18 +0,0 @@
## Introduction
[Home Assistant](https://www.home-assistant.io/)
Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts. Perfect to run on a Raspberry Pi or a local server.
This chart bootstraps a [Home-Assistant](https://github.com/home-assistant) deployment on a [Kubernetes](https://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
## Prerequisites
- Kubernetes
- Helm
- Traefik v2 / IngressRoute
- Authentik / Auth
## Parameters
See the [values files](values.yaml).

View File

@@ -1,98 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: home-assistant
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
revisionHistoryLimit: 3
replicas: {{ .Values.deployment.replicas }}
strategy:
type: {{ .Values.deployment.strategy }}
selector:
matchLabels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
template:
metadata:
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
serviceAccountName: {{ .Release.Name }}
automountServiceAccountToken: true
containers:
- name: {{ .Release.Name }}
image: "{{ .Values.deployment.image.repository }}:{{ .Values.deployment.image.tag }}"
imagePullPolicy: {{ .Values.deployment.image.imagePullPolicy }}
ports:
- name: http
containerPort: {{ .Values.service.http.port }}
protocol: TCP
env:
{{- range $k,$v := .Values.deployment.env }}
- name: {{ $k }}
value: {{ $v | quote }}
{{- end }}
{{- with .Values.deployment.envFrom }}
envFrom:
{{- toYaml . | nindent 12 }}
{{- end }}
volumeMounts:
- mountPath: /config
name: home-assistant-config
resources:
{{- toYaml .Values.deployment.resources | nindent 12 }}
livenessProbe:
tcpSocket:
port: {{ .Values.service.http.port }}
initialDelaySeconds: 0
failureThreshold: 3
timeoutSeconds: 1
periodSeconds: 10
readinessProbe:
tcpSocket:
port: {{ .Values.service.http.port }}
initialDelaySeconds: 0
failureThreshold: 3
timeoutSeconds: 1
periodSeconds: 10
startupProbe:
tcpSocket:
port: {{ .Values.service.http.port }}
initialDelaySeconds: 0
failureThreshold: 30
timeoutSeconds: 1
periodSeconds: 5
{{- if .Values.codeserver.enabled }}
- name: codeserver
image: "{{ .Values.codeserver.image.repository }}:{{ .Values.codeserver.image.tag }}"
imagePullPolicy: {{ .Values.codeserver.image.imagePullPolicy }}
ports:
- containerPort: {{ .Values.codeserver.service.http.port }}
name: codeserver-http
protocol: TCP
env:
{{- range $k,$v := .Values.codeserver.env }}
- name: {{ $k }}
value: {{ $v | quote }}
{{- end }}
{{- with .Values.codeserver.envFrom }}
envFrom:
{{- toYaml . | nindent 12 }}
{{- end }}
securityContext:
{{- toYaml .Values.codeserver.securityContext | nindent 12 }}
volumeMounts:
- mountPath: /config/home-assistant
name: home-assistant-config
{{- end }}
volumes:
- name: home-assistant-config
persistentVolumeClaim:
claimName: "{{ .Release.Name }}-config"

View File

@@ -1,70 +0,0 @@
{{- if .Values.ingressRoute.enabled }}
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
entryPoints:
- websecure
routes:
- kind: Rule
match: "Host(`{{ .Values.ingressRoute.host }}`)"
middlewares:
- name: "authentik-{{ .Release.Name }}"
namespace: {{ .Release.Namespace }}
priority: 10
services:
- kind: Service
name: {{ .Release.Name }}
port: {{ .Values.service.http.port }}
- kind: Rule
match: "Host(`{{ .Values.ingressRoute.host }}`) && PathPrefix(`/outpost.goauthentik.io/`)"
priority: 15
services:
- kind: Service
name: {{ .Values.ingressRoute.authentik.outpost }}
port: {{ .Values.ingressRoute.authentik.port }}
{{- end }}
---
{{- if and .Values.codeserver.ingressRoute.enabled .Values.codeserver.enabled }}
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: "{{ .Release.Name }}-codeserver"
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
entryPoints:
- websecure
routes:
- kind: Rule
match: "Host(`{{ .Values.codeserver.ingressRoute.host }}`)"
middlewares:
- name: "authentik-{{ .Release.Name }}"
namespace: {{ .Release.Namespace }}
priority: 10
services:
- kind: Service
name: "{{ .Release.Name }}-codeserver"
port: {{ .Values.codeserver.service.http.port }}
- kind: Rule
match: "Host(`{{ .Values.ingressRoute.host }}`) && PathPrefix(`/outpost.goauthentik.io/`)"
priority: 15
services:
- kind: Service
name: {{ .Values.ingressRoute.authentik.outpost }}
port: {{ .Values.ingressRoute.authentik.port }}
{{- end }}

View File

@@ -1,29 +0,0 @@
{{- if .Values.ingressRoute.enabled }}
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: "authentik-{{ .Release.Name }}"
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: auth
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
forwardAuth:
address: "http://{{ .Values.ingressRoute.authentik.outpost }}.authentik:{{ .Values.ingressRoute.authentik.port }}/outpost.goauthentik.io/auth/traefik"
trustForwardHeader: true
authResponseHeaders:
- X-authentik-username
- X-authentik-groups
- X-authentik-email
- X-authentik-name
- X-authentik-uid
- X-authentik-jwt
- X-authentik-meta-jwks
- X-authentik-meta-outpost
- X-authentik-meta-provider
- X-authentik-meta-app
- X-authentik-meta-version
{{- end }}

View File

@@ -1,19 +0,0 @@
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: "{{ .Release.Name }}-config"
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.persistence.config.storageSize }}
storageClassName: {{ .Values.persistence.config.storageClassName }}
volumeMode: {{ .Values.persistence.config.volumeMode }}

View File

@@ -1,18 +0,0 @@
{{- if and .Values.metrics.enabled .Values.metrics.prometheusRule.enabled }}
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
groups:
- name: {{ .Release.Name }}
rules:
{{- toYaml .Values.metrics.prometheusRule.rules | nindent 8 }}
{{- end }}

View File

@@ -1,11 +0,0 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}

View File

@@ -1,26 +0,0 @@
{{- if .Values.metrics.enabled }}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
selector:
matchLabels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
endpoints:
- port: http
interval: {{ .Values.metrics.serviceMonitor.interval }}
scrapeTimeout: {{ .Values.metrics.serviceMonitor.scrapeTimeout }}
path: /api/prometheus
bearerTokenSecret:
name: {{ .Values.metrics.serviceMonitor.bearerTokenSecret.name }}
key: {{ .Values.metrics.serviceMonitor.bearerTokenSecret.key }}
{{- end }}

View File

@@ -1,46 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
type: ClusterIP
ports:
- port: {{ .Values.service.http.port }}
targetPort: http
protocol: TCP
name: http
selector:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
---
{{- if .Values.codeserver.enabled }}
apiVersion: v1
kind: Service
metadata:
name: "{{ .Release.Name }}-codeserver"
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
type: ClusterIP
ports:
- port: {{ .Values.codeserver.service.http.port }}
targetPort: codeserver-http
protocol: TCP
name: codeserver-http
selector:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}

View File

@@ -1,74 +0,0 @@
deployment:
replicas: 1
strategy: Recreate
image:
repository: homeassistant/home-assistant
tag: 2024.4.3
imagePullPolicy: IfNotPresent
env:
TZ: UTC
envFrom:
resources:
requests:
memory: 512Mi
cpu: 50m
limits:
memory: 1Gi
cpu: 500m
service:
http:
port: 8123
ingressRoute:
enabled: true
host:
authentik:
outpost:
port: 9000
metrics:
enabled: false
serviceMonitor:
interval: 1m
scrapeTimeout: 30s
## See https://www.home-assistant.io/docs/authentication/ for where to find
## long lived access token creation under your account profile, which is
## needed to monitor Home Assistant
bearerTokenSecret:
name: ""
key: ""
prometheusRule:
enabled: false
rules:
- alert: HomeAssistantAbsent
annotations:
description: Home Assistant has disappeared from Prometheus service discovery.
summary: Home Assistant is down.
expr: |
absent(up{job=~".*home-assistant.*"} == 1)
for: 5m
labels:
severity: critical
persistence:
config:
storageClassName: default
storageSize: 1Gi
volumeMode: Filesystem
codeserver:
enabled: false
image:
repository: linuxserver/code-server
tag: 4.23.1
imagePullPolicy: IfNotPresent
env:
TZ: UTC
PUID: 1000
PGID: 1000
DEFAULT_WORKSPACE: /config
envFrom:
securityContext:
runAsUser: 0
service:
http:
port: 8443
ingressRoute:
enabled: false
host:

View File

@@ -1,12 +0,0 @@
apiVersion: v2
name: homepage
version: 0.0.11
description: Chart for benphelps homepage
keywords:
- dashboard
sources:
- https://github.com/gethomepage/homepage
maintainers:
- name: alexlebens
icon: https://github.com/benphelps/homepage/blob/de584eae8f12a0d257e554e9511ef19bd2a1232c/public/mstile-150x150.png
appVersion: v0.8.12

View File

@@ -1,18 +0,0 @@
## Introduction
[Homepage](https://github.com/benphelps/homepage)
A modern (fully static, fast), secure (fully proxied), highly customizable application dashboard with integrations for more than 25 services and translations for over 15 languages. Easily configured via YAML files (or discovery via docker labels).
This chart bootstraps a [Homepage](https://github.com/benphelps/homepage) deployment on a [Kubernetes](https://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
## Prerequisites
- Kubernetes
- Helm
- Traefik v2 / IngressRoute
- Authentik / Auth
## Parameters
See the [values files](values.yaml).

View File

@@ -1,19 +0,0 @@
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: {{ .Release.Name }}
subjects:
- kind: ServiceAccount
name: homepage
namespace: {{ .Release.Namespace }}

View File

@@ -1,51 +0,0 @@
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
rules:
- apiGroups:
- ""
resources:
- namespaces
- pods
- nodes
verbs:
- get
- list
- apiGroups:
- extensions
- networking.k8s.io
resources:
- ingresses
verbs:
- get
- list
- apiGroups:
- traefik.containo.us
- traefik.io
resources:
- ingressroutes
verbs:
- get
- list
- apiGroups:
- metrics.k8s.io
resources:
- nodes
- pods
verbs:
- get
- list
- apiGroups:
- apiextensions.k8s.io
resources:
- customresourcedefinitions/status
verbs:
- get

View File

@@ -1,36 +0,0 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: homepage-config
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: homepage
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: homepage
data:
bookmarks.yaml: {{- if .Values.config.bookmarks }} |
{{- .Values.config.bookmarks | toYaml | nindent 4}}
{{- else }} ""
{{- end }}
docker.yaml: {{- if .Values.config.docker }} |
{{- .Values.config.docker | toYaml | nindent 4 }}
{{- else }} ""
{{- end }}
kubernetes.yaml: {{- if .Values.config.kubernetes }} |
{{- .Values.config.kubernetes | toYaml | nindent 4 }}
{{- else }} ""
{{- end }}
services.yaml: {{- if .Values.config.services }} |
{{- .Values.config.services | toYaml | nindent 4 }}
{{- else }} ""
{{- end }}
settings.yaml: {{- if .Values.config.settings }} |
{{- .Values.config.settings | toYaml | nindent 4 }}
{{- else }} ""
{{- end }}
widgets.yaml: {{- if .Values.config.widgets }} |
{{- .Values.config.widgets | toYaml | nindent 4 }}
{{- else }} ""
{{- end }}

View File

@@ -1,95 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: homepage
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: homepage
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: homepage
spec:
revisionHistoryLimit: 3
replicas: {{ .Values.deployment.replicas }}
strategy:
type: {{ .Values.deployment.strategy }}
selector:
matchLabels:
app.kubernetes.io/name: homepage
app.kubernetes.io/instance: {{ .Release.Name }}
template:
metadata:
labels:
app.kubernetes.io/name: homepage
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
serviceAccountName: homepage
automountServiceAccountToken: true
containers:
- name: {{ .Release.Name }}
image: "{{ .Values.deployment.image.repository }}:{{ .Values.deployment.image.tag }}"
imagePullPolicy: {{ .Values.deployment.image.imagePullPolicy }}
ports:
- name: http
containerPort: {{ .Values.service.http.port }}
protocol: TCP
env:
{{- range $k,$v := .Values.deployment.env }}
- name: {{ $k }}
value: {{ $v | quote }}
{{- end }}
{{- with .Values.deployment.envFrom }}
envFrom:
{{- toYaml . | nindent 12 }}
{{- end }}
volumeMounts:
- name: homepage-config
subPath: bookmarks.yaml
mountPath: /app/config/bookmarks.yaml
- name: homepage-config
subPath: docker.yaml
mountPath: /app/config/docker.yaml
- name: homepage-config
subPath: kubernetes.yaml
mountPath: /app/config/kubernetes.yaml
- name: homepage-config
subPath: services.yaml
mountPath: /app/config/services.yaml
- name: homepage-config
subPath: settings.yaml
mountPath: /app/config/settings.yaml
- name: homepage-config
subPath: widgets.yaml
mountPath: /app/config/widgets.yaml
- name: logs
mountPath: /app/config/logs
resources:
{{- toYaml .Values.deployment.resources | nindent 12 }}
livenessProbe:
failureThreshold: 3
initialDelaySeconds: 0
periodSeconds: 10
tcpSocket:
port: {{ .Values.service.http.port }}
timeoutSeconds: 1
readinessProbe:
failureThreshold: 3
initialDelaySeconds: 0
periodSeconds: 10
tcpSocket:
port: {{ .Values.service.http.port }}
timeoutSeconds: 1
startupProbe:
failureThreshold: 30
initialDelaySeconds: 0
periodSeconds: 5
tcpSocket:
port: {{ .Values.service.http.port }}
timeoutSeconds: 1
volumes:
- name: homepage-config
configMap:
name: homepage-config
- name: logs
emptyDir: {}

View File

@@ -1,32 +0,0 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: homepage
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: homepage
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: homepage
spec:
entryPoints:
- websecure
routes:
- kind: Rule
match: "Host(`{{ .Values.ingressRoute.host }}`)"
middlewares:
- name: "authentik-{{ .Release.Name }}"
namespace: {{ .Release.Namespace }}
priority: 10
services:
- kind: Service
name: homepage
port: {{ .Values.service.http.port }}
- kind: Rule
match: "Host(`{{ .Values.ingressRoute.host }}`) && PathPrefix(`/outpost.goauthentik.io/`)"
priority: 15
services:
- kind: Service
name: {{ .Values.ingressRoute.authentik.outpost }}
port: {{ .Values.ingressRoute.authentik.port }}

View File

@@ -1,27 +0,0 @@
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: "authentik-{{ .Release.Name }}"
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ .Release.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: auth
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
forwardAuth:
address: "http://{{ .Values.ingressRoute.authentik.outpost }}.authentik:{{ .Values.ingressRoute.authentik.port }}/outpost.goauthentik.io/auth/traefik"
trustForwardHeader: true
authResponseHeaders:
- X-authentik-username
- X-authentik-groups
- X-authentik-email
- X-authentik-name
- X-authentik-uid
- X-authentik-jwt
- X-authentik-meta-jwks
- X-authentik-meta-outpost
- X-authentik-meta-provider
- X-authentik-meta-app
- X-authentik-meta-version

View File

@@ -1,14 +0,0 @@
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
name: "{{ .Release.Name }}-sa-token"
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: homepage
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: homepage
annotations:
kubernetes.io/service-account.name: homepage

View File

@@ -1,13 +0,0 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: homepage
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: homepage
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: homepage
secrets:
- name: "{{ .Release.Name }}-sa-token"

View File

@@ -1,21 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: homepage
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: homepage
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: homepage
spec:
type: ClusterIP
ports:
- port: {{ .Values.service.http.port }}
targetPort: http
protocol: TCP
name: http
selector:
app.kubernetes.io/name: homepage
app.kubernetes.io/instance: {{ .Release.Name }}

View File

@@ -1,32 +0,0 @@
deployment:
replicas: 1
strategy: Recreate
image:
repository: ghcr.io/gethomepage/homepage
tag: v0.8.12
imagePullPolicy: IfNotPresent
env:
envFrom:
resources:
requests:
memory: 256Mi
cpu: 50m
limits:
memory: 512Mi
cpu: 500m
service:
http:
port: 3000
ingressRoute:
host:
authentik:
outpost:
port: 9000
config:
bookmarks:
services:
widgets:
kubernetes:
mode: cluster
docker:
settings:

View File

@@ -1,13 +0,0 @@
apiVersion: v2
name: kubelet-serving-cert-approver
version: 0.0.4
description: Kubelet Serving TLS Certificate Signing Request Approver
keywords:
- kubernetes
- certificate
sources:
- https://github.com/alex1989hu/kubelet-serving-cert-approver
- https://github.com/alexlebens/helm-charts/charts/homepage
maintainers:
- name: alexlebens
appVersion: 0.8.1

View File

@@ -1,16 +0,0 @@
## Introduction
[Kubelet Serving Certificate Approver](https://github.com/alex1989hu/kubelet-serving-cert-approver)
Kubelet Serving Certificate Approver is a custom approving controller which approves kubernetes.io/kubelet-serving Certificate Signing Request that kubelet use to serve TLS endpoints.
This chart bootstraps a [Kubelet Serving Certificate Approver](https://github.com/alex1989hu/kubelet-serving-cert-approver) deployment on a [Kubernetes](https://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
## Prerequisites
- Kubernetes
- Helm
## Parameters
See the [values files](values.yaml).

View File

@@ -1,19 +0,0 @@
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kubelet-serving-cert-approver
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: kubelet-serving-cert-approver
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: server
app.kubernetes.io/part-of: kubelet-serving-cert-approver
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: "certificates:{{ .Release.Name }}"
subjects:
- kind: ServiceAccount
name: {{ .Release.Name }}
namespace: {{ .Release.Namespace }}

View File

@@ -1,61 +0,0 @@
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: "certificates:{{ .Release.Name }}"
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: kubelet-serving-cert-approver
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: server
app.kubernetes.io/part-of: kubelet-serving-cert-approver
rules:
- apiGroups:
- certificates.k8s.io
resources:
- certificatesigningrequests
verbs:
- get
- list
- watch
- apiGroups:
- certificates.k8s.io
resources:
- certificatesigningrequests/approval
verbs:
- update
- apiGroups:
- authorization.k8s.io
resources:
- subjectaccessreviews
verbs:
- create
- apiGroups:
- certificates.k8s.io
resourceNames:
- kubernetes.io/kubelet-serving
resources:
- signers
verbs:
- approve
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: "events:{{ .Release.Name }}"
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: kubelet-serving-cert-approver
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: server
app.kubernetes.io/part-of: kubelet-serving-cert-approverv
rules:
- apiGroups:
- ""
resources:
- events
verbs:
- create
- patch

View File

@@ -1,88 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: kubelet-serving-cert-approver
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: kubelet-serving-cert-approver
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: server
app.kubernetes.io/part-of: kubelet-serving-cert-approver
spec:
revisionHistoryLimit: 3
replicas: {{ .Values.deployment.replicas }}
strategy:
type: {{ .Values.deployment.strategy }}
selector:
matchLabels:
app.kubernetes.io/name: kubelet-serving-cert-approver
app.kubernetes.io/instance: {{ .Release.Name }}
template:
metadata:
labels:
app.kubernetes.io/name: kubelet-serving-cert-approver
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- preference:
matchExpressions:
- key: node-role.kubernetes.io/master
operator: DoesNotExist
- key: node-role.kubernetes.io/control-plane
operator: DoesNotExist
weight: 100
containers:
- name: {{ .Release.Name }}
image: "{{ .Values.deployment.image.repository }}:{{ .Values.deployment.image.tag }}"
imagePullPolicy: {{ .Values.deployment.image.imagePullPolicy }}
ports:
- containerPort: 8080
name: health
- containerPort: 9090
name: metrics
args:
- serve
env:
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
resources:
{{- toYaml .Values.deployment.resources | nindent 12 }}
livenessProbe:
httpGet:
path: /healthz
port: health
initialDelaySeconds: 6
readinessProbe:
httpGet:
path: /readyz
port: health
initialDelaySeconds: 3
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
privileged: false
readOnlyRootFilesystem: true
runAsNonRoot: true
priorityClassName: {{ .Values.deployment.priorityClassName }}
securityContext:
fsGroup: 65534
runAsGroup: 65534
runAsUser: 65534
seccompProfile:
type: RuntimeDefault
serviceAccountName: kubelet-serving-cert-approver
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/master
operator: Exists
- effect: NoSchedule
key: node-role.kubernetes.io/control-plane
operator: Exists

View File

@@ -1,10 +0,0 @@
apiVersion: v1
kind: Namespace
metadata:
name: kubelet-serving-cert-approver
labels:
app.kubernetes.io/name: kubelet-serving-cert-approver
app.kubernetes.io/instance: {{ .Release.Name }}
pod-security.kubernetes.io/audit: restricted
pod-security.kubernetes.io/enforce: restricted
pod-security.kubernetes.io/warn: restricted

View File

@@ -1,19 +0,0 @@
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: "events:{{ .Release.Name }}"
namespace: default
labels:
app.kubernetes.io/name: kubelet-serving-cert-approver
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: server
app.kubernetes.io/part-of: kubelet-serving-cert-approver
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: "events:{{ .Release.Name }}"
subjects:
- kind: ServiceAccount
name: kubelet-serving-cert-approver
namespace: {{ .Release.Name }}

View File

@@ -1,11 +0,0 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: kubelet-serving-cert-approver
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: kubelet-serving-cert-approver
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: server
app.kubernetes.io/part-of: kubelet-serving-cert-approver

View File

@@ -1,20 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: kubelet-serving-cert-approver
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: kubelet-serving-cert-approver
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: server
app.kubernetes.io/part-of: kubelet-serving-cert-approver
spec:
ports:
- name: metrics
port: 9090
protocol: TCP
targetPort: metrics
selector:
app.kubernetes.io/name: kubelet-serving-cert-approver
app.kubernetes.io/instance: {{ .Release.Name }}

View File

@@ -1,15 +0,0 @@
deployment:
replicas: 1
strategy: Recreate
priorityClassName: system-cluster-critical
image:
repository: ghcr.io/alex1989hu/kubelet-serving-cert-approver
tag: main
imagePullPolicy: Always
resources:
limits:
cpu: 250m
memory: 32Mi
requests:
cpu: 10m
memory: 16Mi

View File

@@ -1,13 +0,0 @@
apiVersion: v2
name: libation
version: 0.0.6
description: Import library from audible
keywords:
- audiobooks
- job
sources:
- https://github.com/rmcrackan/Libation
maintainers:
- name: alexlebens
icon: https://getlibation.com/images/libation-logo.png
appVersion: "11.1.0"

View File

@@ -1,18 +0,0 @@
## Introduction
[Libation](https://github.com/rmcrackan/Libation)
Libation: Liberate your Library. Import library from audible, including cover art
This chart bootstraps a [Libation](https://github.com/benphelps/homepage) CronJob on a [Kubernetes](https://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
## Prerequisites
- Kubernetes
- Helm
- CronJob
## Parameters
See the [values files](values.yaml).

View File

@@ -1,39 +0,0 @@
apiVersion: batch/v1
kind: CronJob
metadata:
name: libation
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: libation
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: job
app.kubernetes.io/part-of: libation
spec:
schedule: {{ .Values.job.schedule }}
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
jobTemplate:
spec:
template:
spec:
restartPolicy: Never
containers:
- name: libation
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
env:
- name: SLEEP_TIME
value: "-1"
volumeMounts:
- name: libation-config
mountPath: /config
- name: libation-books
mountPath: /data
volumes:
- name: libation-config
persistentVolumeClaim:
claimName: libation-config
- name: libation-books
persistentVolumeClaim:
claimName: {{ .Values.persistence.books.claimName }}

View File

@@ -1,19 +0,0 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: libation-config
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: libation
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: storage
app.kubernetes.io/part-of: libation
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.persistence.config.storageSize }}
storageClassName: {{ .Values.persistence.config.storageClassName }}
volumeMode: {{ .Values.persistence.config.volumeMode }}

View File

@@ -1,13 +0,0 @@
job:
schedule: "0 * * * *"
image:
repository: rmcrackan/libation
tag: "11.1.0"
pullPolicy: IfNotPresent
persistence:
config:
storageClassName: default
storageSize: 1Gi
volumeMode: Filesystem
books:
claimName:

View File

@@ -1,14 +0,0 @@
apiVersion: v2
name: matrix-hookshot
version: 0.1.1
description: Chart for Matrix Hookshot
keywords:
- matrix
- matrix-hookshot
- webhook
sources:
- https://github.com/matrix-org/matrix-hookshot
maintainers:
- name: alexlebens
icon: https://avatars.githubusercontent.com/u/8418310?s=48&v=4
appVersion: "5.3.0"

View File

@@ -1,43 +0,0 @@
{{/*
Helper for secret name
*/}}
{{- define "hookshot.secretName" -}}
{{- if .Values.hookshot.existingSecret }}
{{- printf "%s" .Values.hookshot.existingSecret -}}
{{- else }}
{{- printf "matrix-hookshot-config-secret" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{/*
Helper for registration secret name
*/}}
{{- define "hookshot.registrationSecretName" -}}
{{- if .Values.hookshot.existingRegistrationSecret }}
{{- printf "%s" .Values.hookshot.existingRegistrationSecret -}}
{{- else }}
{{- printf "matrix-hookshot-registration-secret" }}
{{- end }}
{{- end }}
{{/*
Helper for passkey secret name
*/}}
{{- define "hookshot.passkeySecretName" -}}
{{- if .Values.hookshot.existingPasskeySecret }}
{{- printf "%s" .Values.hookshot.existingPasskeySecret -}}
{{- else }}
{{- printf "matrix-hookshot-passkey-secret" }}
{{- end }}
{{- end }}
{{/*
Helper for passkey file name
*/}}
{{- define "hookshot.passFile" -}}
{{- if .Values.hookshot.config.passFile }}
{{- printf "%s" .Values.hookshot.config.passFile -}}
{{- else }}
{{- printf "passkey.pem" }}
{{- end }}
{{- end }}

View File

@@ -1,79 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: matrix-hookshot
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: matrix-hookshot
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
revisionHistoryLimit: 3
replicas: {{ .Values.deployment.replicas }}
strategy:
type: {{ .Values.deployment.strategy }}
selector:
matchLabels:
app.kubernetes.io/name: matrix-hookshot
app.kubernetes.io/instance: {{ .Release.Name }}
template:
metadata:
labels:
app.kubernetes.io/name: matrix-hookshot
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
serviceAccountName: matrix-hookshot
automountServiceAccountToken: true
containers:
- name: matrix-hookshot
image: "{{ .Values.deployment.image.repository }}:{{ .Values.deployment.image.tag }}"
imagePullPolicy: {{ .Values.deployment.image.imagePullPolicy }}
ports:
- name: webhook
containerPort: {{ .Values.service.webhook.port }}
protocol: TCP
- name: metrics
containerPort: {{ .Values.service.metrics.port }}
protocol: TCP
- name: appservice
containerPort: {{ .Values.service.appservice.port }}
protocol: TCP
- name: widgets
containerPort: {{ .Values.service.widgets.port }}
protocol: TCP
env:
{{- range $k,$v := .Values.deployment.env }}
- name: {{ $k }}
value: {{ $v | quote }}
{{- end }}
{{- with .Values.deployment.envFrom }}
envFrom:
{{- toYaml . | nindent 12 }}
{{- end }}
resources:
{{- toYaml .Values.deployment.resources | nindent 12 }}
volumeMounts:
- name: config
mountPath: /data/config.yml
subPath: config.yml
readOnly: true
- name: registration
mountPath: /data/registration.yml
subPath: registration.yml
readOnly: true
- name: passkey
mountPath: "/data/{{ template "hookshot.passFile" . }}"
subPath: {{ template "hookshot.passFile" . }}
readOnly: true
volumes:
- name: config
secret:
secretName: {{ template "hookshot.secretName" . }}
- name: registration
secret:
secretName: {{ template "hookshot.registrationSecretName" . }}
- name: passkey
secret:
secretName: {{ template "hookshot.passkeySecretName" . }}

View File

@@ -1,100 +0,0 @@
{{- if .Values.ingress.webhook.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: matrix-hookshot-webhook
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: matrix-hookshot-webhook
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
annotations:
{{- toYaml .Values.ingress.webhook.annotations | nindent 4 }}
spec:
ingressClassName: {{ .Values.ingress.webhook.className }}
tls:
- hosts:
- {{ .Values.ingress.webhook.host }}
secretName: {{ .Release.Name }}-webhook-secret-tls
rules:
- host: {{ .Values.ingress.webhook.host }}
http:
paths:
- path: /webhook/
pathType: Prefix
backend:
service:
name: {{ .Release.Name }}
port:
name: webhook
{{- end }}
---
{{- if .Values.ingress.appservice.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: matrix-hookshot-appservice
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: matrix-hookshot-appservice
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
annotations:
{{- toYaml .Values.ingress.appservice.annotations | nindent 4 }}
spec:
ingressClassName: {{ .Values.ingress.appservice.className }}
tls:
- hosts:
- {{ .Values.ingress.appservice.host }}
secretName: {{ .Release.Name }}-appservice-secret-tls
rules:
- host: {{ .Values.ingress.appservice.host }}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: {{ .Release.Name }}
port:
name: appservice
{{- end }}
---
{{- if .Values.ingress.widgets.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: matrix-hookshot-widgets
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: matrix-hookshot-widgets
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
annotations:
{{- toYaml .Values.ingress.widgets.annotations | nindent 4 }}
spec:
ingressClassName: {{ .Values.ingress.widgets.className }}
tls:
- hosts:
- {{ .Values.ingress.widgets.host }}
secretName: {{ .Release.Name }}-widgets-secret-tls
rules:
- host: {{ .Values.ingress.widgets.host }}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: {{ .Release.Name }}
port:
name: widgets
{{- end }}

View File

@@ -1,26 +0,0 @@
apiVersion: v1
kind: Pod
metadata:
name: matrix-hookshot-test-connection
labels:
app.kubernetes.io/name: matrix-hookshot-test-connection
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
annotations:
"helm.sh/hook": test-success
spec:
restartPolicy: Never
containers:
- name: wget
image: busybox
command: ['wget']
args: ['matrix-hookshot:{{ .Values.service.webhook.port }}']
resources:
limits:
cpu: 500m
memory: 1Gi
requests:
cpu: 50m
memory: 256Mi

View File

@@ -1,52 +0,0 @@
{{- if not .Values.hookshot.existingSecret }}
apiVersion: v1
kind: Secret
metadata:
name: matrix-hookshot-config-secret
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: matrix-hookshot-config
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
data:
config.yml: |
{{ toYaml .Values.hookshot.config | indent 4 }}
{{- end }}
---
{{- if not .Values.hookshot.existingRegistrationSecret }}
apiVersion: v1
kind: Secret
metadata:
name: matrix-hookshot-registration-secret
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: matrix-hookshot-registration
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
data:
registration.yml: |
{{ toYaml .Values.hookshot.registration | indent 4 }}
{{- end }}
---
{{- if not .Values.hookshot.existingPasskeySecret }}
apiVersion: v1
kind: Secret
metadata:
name: matrix-hookshot-passkey-secret
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: matrix-hookshot-passkey
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
data:
{{ .Values.hookshot.config.passFile }}: |
{{ toYaml .Values.hookshot.passkey | indent 4 }}
{{- end }}

View File

@@ -1,11 +0,0 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: matrix-hookshot
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: matrix-hookshot
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}

View File

@@ -1,23 +0,0 @@
{{- if and .Values.metrics.enabled .Values.metrics.serviceMonitor.enabled }}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: matrix-hookshot
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: matrix-hookshot
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
endpoints:
- port: metrics
interval: {{ .Values.metrics.serviceMonitor.interval }}
scrapeTimeout: {{ .Values.metrics.serviceMonitor.scrapeTimeout }}
path: /metrics
selector:
matchLabels:
app.kubernetes.io/name: matrix-hookshot
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}

View File

@@ -1,33 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: matrix-hookshot
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: matrix-hookshot
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.webhook.port }}
targetPort: webhook
protocol: TCP
name: webhook
- port: {{ .Values.service.metrics.port }}
targetPort: metrics
protocol: TCP
name: metrics
- port: {{ .Values.service.appservice.port }}
targetPort: appservice
protocol: TCP
name: appservice
- port: {{ .Values.service.widgets.port }}
targetPort: widgets
protocol: TCP
name: widgets
selector:
app.kubernetes.io/name: matrix-hookshot
app.kubernetes.io/instance: {{ .Release.Name }}

View File

@@ -1,248 +0,0 @@
deployment:
replicas: 1
strategy: Recreate
image:
repository: halfshot/matrix-hookshot
tag: "5.3.0"
imagePullPolicy: IfNotPresent
env: {}
envFrom: []
resources:
limits:
memory: 512Mi
cpu: 100m
requests:
memory: 256Mi
cpu: 50m
service:
type: ClusterIP
webhook:
port: 9000
metrics:
port: 9001
appservice:
port: 9002
widgets:
port: 9003
ingress:
webhook:
enabled: false
className: ""
annotations: {}
host: ""
appservice:
enabled: false
className: ""
annotations: {}
host: ""
widgets:
enabled: false
className: ""
annotations: {}
host: ""
metrics:
enabled: false
serviceMonitor:
enabled: false
interval: 15s
scrapeTimeout: 5s
# Reference the following for examples
# https://matrix-org.github.io/matrix-hookshot/latest/setup/sample-configuration.html
hookshot:
# config.yml contents
existingSecret: ""
config:
bridge:
domain: example.com
url: http://localhost:8008
mediaUrl: https://example.com
port: 9993
bindAddress: 0.0.0.0
passFile: passkey.pem
logging:
level: info
colorize: true
json: false
timestampFormat: HH:mm:ss:SSS
listeners:
- port: 9000
bindAddress: 0.0.0.0
resources:
- webhooks
- port: 9001
bindAddress: 0.0.0.0
resources:
- metrics
- provisioning
- port: 9003
bindAddress: 0.0.0.0
resources:
- widgets
# github:
# # (Optional) Configure this to enable GitHub support
# auth:
# # Authentication for the GitHub App.
# id: 123
# privateKeyFile: github-key.pem
# webhook:
# # Webhook settings for the GitHub app.
# secret: secrettoken
# oauth:
# # (Optional) Settings for allowing users to sign in via OAuth.
# client_id: foo
# client_secret: bar
# redirect_uri: https://example.com/oauth/
# defaultOptions:
# # (Optional) Default options for GitHub connections.
# showIssueRoomLink: false
# hotlinkIssues:
# prefix: "#"
# userIdPrefix:
# # (Optional) Prefix used when creating ghost users for GitHub accounts.
# _github_
# gitlab:
# # (Optional) Configure this to enable GitLab support
# instances:
# gitlab.com:
# url: https://gitlab.com
# webhook:
# secret: secrettoken
# publicUrl: https://example.com/hookshot/
# userIdPrefix:
# # (Optional) Prefix used when creating ghost users for GitLab accounts.
# _gitlab_
# commentDebounceMs:
# # (Optional) Aggregate comments by waiting this many miliseconds before posting them to Matrix. Defaults to 5000 (5 seconds)
# 5000
# figma:
# # (Optional) Configure this to enable Figma support
# publicUrl: https://example.com/hookshot/
# instances:
# your-instance:
# teamId: your-team-id
# accessToken: your-personal-access-token
# passcode: your-webhook-passcode
# jira:
# # (Optional) Configure this to enable Jira support. Only specify `url` if you are using a On Premise install (i.e. not atlassian.com)
# webhook:
# # Webhook settings for JIRA
# secret: secrettoken
# oauth:
# # (Optional) OAuth settings for connecting users to JIRA. See documentation for more information
# client_id: foo
# client_secret: bar
# redirect_uri: https://example.com/oauth/
# generic:
# # (Optional) Support for generic webhook events.
# #'allowJsTransformationFunctions' will allow users to write short transformation snippets in code, and thus is unsafe in untrusted environments
# enabled: false
# enableHttpGet: false
# urlPrefix: https://example.com/webhook/
# userIdPrefix: _webhooks_
# allowJsTransformationFunctions: false
# waitForComplete: false
# feeds:
# # (Optional) Configure this to enable RSS/Atom feed support
# enabled: false
# pollConcurrency: 4
# pollIntervalSeconds: 600
# pollTimeoutSeconds: 30
# provisioning:
# # (Optional) Provisioning API for integration managers
# secret: "!secretToken"
# bot:
# # (Optional) Define profile information for the bot user
# displayname: Hookshot Bot
# avatar: mxc://half-shot.uk/2876e89ccade4cb615e210c458e2a7a6883fe17d
# serviceBots:
# # (Optional) Define additional bot users for specific services
# - localpart: feeds
# displayname: Feeds
# avatar: ./assets/feeds_avatar.png
# prefix: "!feeds"
# service: feeds
# metrics:
# # (Optional) Prometheus metrics support
# enabled: true
# cache:
# # (Optional) Cache options for large scale deployments.
# # For encryption to work, this must be configured.
# redisUri: redis://localhost:6379
# queue:
# # (Optional) Message queue configuration options for large scale deployments.
# # For encryption to work, this must not be configured.
# redisUri: redis://localhost:6379
# widgets:
# # (Optional) EXPERIMENTAL support for complimentary widgets
# addToAdminRooms: false
# disallowedIpRanges:
# - 127.0.0.0/8
# - 10.0.0.0/8
# - 172.16.0.0/12
# - 192.168.0.0/16
# - 100.64.0.0/10
# - 192.0.0.0/24
# - 169.254.0.0/16
# - 192.88.99.0/24
# - 198.18.0.0/15
# - 192.0.2.0/24
# - 198.51.100.0/24
# - 203.0.113.0/24
# - 224.0.0.0/4
# - ::1/128
# - fe80::/10
# - fc00::/7
# - 2001:db8::/32
# - ff00::/8
# - fec0::/10
# roomSetupWidget:
# addOnInvite: false
# publicUrl: https://example.com/widgetapi/v1/static/
# branding:
# widgetTitle: Hookshot Configuration
# sentry:
# # (Optional) Configure Sentry error reporting
# dsn: https://examplePublicKey@o0.ingest.sentry.io/0
# environment: production
# permissions:
# # (Optional) Permissions for using the bridge. See docs/setup.md#permissions for help
# - actor: example.com
# services:
# - service: "*"
# level: admin
# registration.yml contents
existingRegistrationSecret: ""
registration:
id: matrix-hookshot
as_token: ""
hs_token: ""
namespaces:
rooms: []
users: []
sender_localpart: hookshot
url: "http://example.com"
rate_limited: false
# A passkey used to encrypt tokens stored inside the bridge.
# Run openssl genpkey -out passkey.pem -outform PEM -algorithm RSA -pkeyopt rsa_keygen_bits:4096 to generate
existingPasskeySecret: ""
passkey: ""

View File

@@ -1,15 +0,0 @@
apiVersion: v2
name: mautrix-discord
version: 0.0.2
description: Chart for Matrix Discord Bridge
keywords:
- matrix
- mautrix-discord
- bridge
- discord
sources:
- https://github.com/mautrix/discord
maintainers:
- name: alexlebens
icon: https://avatars.githubusercontent.com/u/88519669?s=48&v=4
appVersion: v0.6.5

View File

@@ -1,41 +0,0 @@
{{/*
Helper for secret name
*/}}
{{- define "mautrix-discord.secretName" -}}
{{- if .Values.mautrixDiscord.existingSecret }}
{{- printf "%s" .Values.mautrixDiscord.existingSecret -}}
{{- else }}
{{- printf "mautrix-discord-config-secret" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{/*
Helper for registration secret name
*/}}
{{- define "mautrix-discord.registrationSecretName" -}}
{{- if .Values.mautrixDiscord.existingRegistrationSecret }}
{{- printf "%s" .Values.mautrixDiscord.existingRegistrationSecret -}}
{{- else }}
{{- printf "mautrix-discord-registration-secret" }}
{{- end }}
{{- end }}
{{/*
Generate registration.yaml if not from existing secret
*/}}
{{- define "mautrix-discord.registration-yaml" -}}
id: {{ .Values.mautrixDiscord.config.appservice.id | quote }}
as_token: {{ .Values.mautrixDiscord.config.appservice.as_token | quote }}
hs_token: {{ .Values.mautrixDiscord.config.appservice.hs_token | quote }}
namespaces:
users:
- regex: {{ printf "^@discordbot:%s$" (replace "." "\\." .Values.mautrixDiscord.config.homeserver.domain) }}
exclusive: true
- regex: {{ printf "^@%s:%s$" (replace "{{.}}" ".*" (tpl .Values.mautrixDiscord.config.bridge.username_template .)) (replace "." "\\." .Values.mautrixDiscord.config.homeserver.domain) }}
exclusive: true
url: {{ .Values.mautrixDiscord.config.appservice.address | quote }}
sender_localpart: {{ .Values.mautrixDiscord.registration.sender_localpart | quote }}
rate_limited: {{ .Values.mautrixDiscord.registration.rate_limited }}
de.sorunome.msc2409.push_ephemeral: true
push_ephemeral: true
{{- end -}}

View File

@@ -1,96 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: mautrix-discord
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: mautrix-discord
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
revisionHistoryLimit: 3
replicas: {{ .Values.deployment.replicas }}
strategy:
type: {{ .Values.deployment.strategy }}
selector:
matchLabels:
app.kubernetes.io/name: mautrix-discord
app.kubernetes.io/instance: {{ .Release.Name }}
template:
metadata:
labels:
app.kubernetes.io/name: mautrix-discord
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
serviceAccountName: mautrix-discord
automountServiceAccountToken: true
containers:
- name: mautrix-discord
image: "{{ .Values.deployment.image.repository }}:{{ .Values.deployment.image.tag }}"
imagePullPolicy: {{ .Values.deployment.image.imagePullPolicy }}
ports:
- name: http
containerPort: {{ .Values.service.port }}
protocol: TCP
env:
{{- range $k,$v := .Values.deployment.env }}
- name: {{ $k }}
value: {{ $v | quote }}
{{- end }}
{{- with .Values.deployment.envFrom }}
envFrom:
{{- toYaml . | nindent 12 }}
{{- end }}
livenessProbe:
httpGet:
path: /_matrix/mau/live
port: http
failureThreshold: {{ .Values.deployment.probes.liveness.failureThreshold }}
periodSeconds: {{ .Values.deployment.probes.liveness.periodSeconds }}
readinessProbe:
httpGet:
path: /_matrix/mau/ready
port: http
failureThreshold: {{ .Values.deployment.probes.readiness.failureThreshold }}
periodSeconds: {{ .Values.deployment.probes.readiness.periodSeconds }}
resources:
{{- toYaml .Values.deployment.resources | nindent 12 }}
volumeMounts:
- name: config
mountPath: /data/config.yaml
subPath: config.yaml
readOnly: true
- name: registration
mountPath: /data/registration.yaml
subPath: registration.yaml
readOnly: true
- name: data
mountPath: /data
volumes:
- name: config
secret:
secretName: {{ template "mautrix-discord.secretName" . }}
- name: registration
secret:
secretName: {{ template "mautrix-discord.registrationSecretName" . }}
- name: data
{{- if .Values.persistence.enabled }}
persistentVolumeClaim:
claimName: {{ .Values.persistence.existingClaim | default "mautrix-discord-data" }}
{{- else }}
emptyDir: {}
{{- end }}
{{- with .Values.deployment.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.deployment.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.deployment.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}

View File

@@ -1,32 +0,0 @@
{{- if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: mautrix-discord
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: mautrix-discord
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
annotations:
{{- toYaml .Values.ingress.annotations | nindent 4 }}
spec:
ingressClassName: {{ .Values.ingress.className }}
tls:
- hosts:
- {{ .Values.ingress.host }}
secretName: {{ .Release.Name }}-secret-tls
rules:
- host: {{ .Values.ingress.host }}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: mautrix-discord
port:
name: http
{{- end }}

View File

@@ -1,26 +0,0 @@
{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) }}
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mautrix-discord-data
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: mautrix-discord
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
accessModes:
- {{ .Values.persistence.accessMode | quote }}
resources:
requests:
storage: {{ .Values.persistence.size | quote }}
{{- if .Values.persistence.storageClass }}
{{- if not .Values.persistence.storageClass }}
storageClassName: ""
{{- else }}
storageClassName: {{ .Values.persistence.storageClass | quote }}
{{- end }}
{{- end }}
{{- end }}

View File

@@ -1,33 +0,0 @@
{{- if not .Values.mautrixDiscord.existingSecret }}
apiVersion: v1
kind: Secret
metadata:
name: mautrix-discord-config-secret
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: mautrix-discord-config
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
data:
config.yaml: |
{{ toYaml .Values.mautrixDiscord.config | indent 4 }}
{{- end }}
---
{{- if not .Values.mautrixDiscord.existingRegistrationSecret }}
apiVersion: v1
kind: Secret
metadata:
name: mautrix-discord-registration-secret
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: mautrix-discord-registration
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
data:
registration.yaml: {{ include "mautrix-discord.registration-yaml" . | b64enc | quote }}
{{- end }}

View File

@@ -1,17 +0,0 @@
{{- if .Values.serviceAccount.create -}}
apiVersion: v1
kind: ServiceAccount
metadata:
name: mautrix-discord
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: mautrix-discord
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
{{- with .Values.serviceAccount.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- end -}}

View File

@@ -1,24 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: mautrix-discord
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: mautrix-discord
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
type: {{ .Values.service.type }}
clusterIP: {{ .Values.service.clusterIP | quote }}
externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }}
publishNotReadyAddresses: {{ .Values.service.publishNotReadyAddresses }}
ports:
- port: {{ .Values.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
app.kubernetes.io/name: mautrix-discord
app.kubernetes.io/instance: {{ .Release.Name }}

View File

@@ -1,427 +0,0 @@
deployment:
replicas: 1
strategy: Recreate
image:
repository: dock.mau.dev/mautrix/discord
tag: v0.6.5
imagePullPolicy: IfNotPresent
env: {}
envFrom: []
resources:
limits:
memory: 128Mi
cpu: 200m
requests:
memory: 64Mi
cpu: 50m
probes:
liveness:
failureThreshold: 5
periodSeconds: 10
readiness:
failureThreshold: 5
periodSeconds: 10
nodeSelector: {}
tolerations: []
affinity: {}
serviceAccount:
create: true
annotations: {}
service:
type: ClusterIP
clusterIP: None
port: 29334
externalTrafficPolicy: ""
publishNotReadyAddresses: true
ingress:
enabled: false
className: ""
annotations: {}
host: ""
persistence:
enabled: false
existingClaim: ""
storageClass: ""
accessMode: ReadWriteOnce
size: 500Mi
# Reference the following for examples
# https://github.com/mautrix/discord/blob/main/example-config.yaml
mautrixDiscord:
# config.yml contents
existingSecret: ""
config:
# Homeserver details.
homeserver:
# The address that this appservice can use to connect to the homeserver.
address: https://matrix.example.com
# Publicly accessible base URL for media, used for avatars in relay mode.
# If not set, the connection address above will be used.
public_address: null
# The domain of the homeserver (also known as server_name, used for MXIDs, etc).
domain: example.com
# What software is the homeserver running?
# Standard Matrix homeservers like Synapse, Dendrite and Conduit should just use "standard" here.
software: standard
# The URL to push real-time bridge status to.
# If set, the bridge will make POST requests to this URL whenever a user's discord connection state changes.
# The bridge will use the appservice as_token to authorize requests.
status_endpoint: null
# Endpoint for reporting per-message status.
message_send_checkpoint_endpoint: null
# Does the homeserver support https://github.com/matrix-org/matrix-spec-proposals/pull/2246?
async_media: false
# Should the bridge use a websocket for connecting to the homeserver?
# The server side is currently not documented anywhere and is only implemented by mautrix-wsproxy,
# mautrix-asmux (deprecated), and hungryserv (proprietary).
websocket: false
# How often should the websocket be pinged? Pinging will be disabled if this is zero.
ping_interval_seconds: 0
# Application service host/registration related details.
# Changing these values requires regeneration of the registration.
appservice:
# The address that the homeserver can use to connect to this appservice.
address: http://localhost:29334
# The hostname and port where this appservice should listen.
hostname: 0.0.0.0
port: 29334
# Database config.
database:
# The database type. "sqlite3-fk-wal" and "postgres" are supported.
type: postgres
# The database URI.
# SQLite: A raw file path is supported, but `file:<path>?_txlock=immediate` is recommended.
# https://github.com/mattn/go-sqlite3#connection-string
# Postgres: Connection string. For example, postgres://user:password@host/database?sslmode=disable
# To connect via Unix socket, use something like postgres:///dbname?host=/var/run/postgresql
uri: postgres://user:password@host/database?sslmode=disable
# Maximum number of connections. Mostly relevant for Postgres.
max_open_conns: 20
max_idle_conns: 2
# Maximum connection idle time and lifetime before they're closed. Disabled if null.
# Parsed with https://pkg.go.dev/time#ParseDuration
max_conn_idle_time: null
max_conn_lifetime: null
# The unique ID of this appservice.
id: discord
# Appservice bot details.
bot:
# Username of the appservice bot.
username: discordbot
# Display name and avatar for bot. Set to "remove" to remove display name/avatar, leave empty
# to leave display name/avatar as-is.
displayname: Discord bridge bot
avatar: mxc://maunium.net/nIdEykemnwdisvHbpxflpDlC
# Whether or not to receive ephemeral events via appservice transactions.
# Requires MSC2409 support (i.e. Synapse 1.22+).
ephemeral_events: true
# Should incoming events be handled asynchronously?
# This may be necessary for large public instances with lots of messages going through.
# However, messages will not be guaranteed to be bridged in the same order they were sent in.
async_transactions: false
# Authentication tokens for AS <-> HS communication. Autogenerated; do not modify.
as_token: "This value is generated when generating the registration"
hs_token: "This value is generated when generating the registration"
# Bridge config
bridge:
# Localpart template of MXIDs for Discord users.
# {{.}} is replaced with the internal ID of the Discord user.
username_template: discord_{{.}}
# Displayname template for Discord users. This is also used as the room name in DMs if private_chat_portal_meta is enabled.
# Available variables:
# .ID - Internal user ID
# .Username - Legacy display/username on Discord
# .GlobalName - New displayname on Discord
# .Discriminator - The 4 numbers after the name on Discord
# .Bot - Whether the user is a bot
# .System - Whether the user is an official system user
# .Webhook - Whether the user is a webhook and is not an application
# .Application - Whether the user is an application
displayname_template: '{{or .GlobalName .Username}}{{if .Bot}} (bot){{end}}'
# Displayname template for Discord channels (bridged as rooms, or spaces when type=4).
# Available variables:
# .Name - Channel name, or user displayname (pre-formatted with displayname_template) in DMs.
# .ParentName - Parent channel name (used for categories).
# .GuildName - Guild name.
# .NSFW - Whether the channel is marked as NSFW.
# .Type - Channel type (see values at https://github.com/bwmarrin/discordgo/blob/v0.25.0/structs.go#L251-L267)
channel_name_template: '{{if or (eq .Type 3) (eq .Type 4)}}{{.Name}}{{else}}#{{.Name}}{{end}}'
# Displayname template for Discord guilds (bridged as spaces).
# Available variables:
# .Name - Guild name
guild_name_template: '{{.Name}}'
# Whether to explicitly set the avatar and room name for private chat portal rooms.
# If set to `default`, this will be enabled in encrypted rooms and disabled in unencrypted rooms.
# If set to `always`, all DM rooms will have explicit names and avatars set.
# If set to `never`, DM rooms will never have names and avatars set.
private_chat_portal_meta: default
portal_message_buffer: 128
# Number of private channel portals to create on bridge startup.
# Other portals will be created when receiving messages.
startup_private_channel_create_limit: 5
# Should the bridge send a read receipt from the bridge bot when a message has been sent to Discord?
delivery_receipts: false
# Whether the bridge should send the message status as a custom com.beeper.message_send_status event.
message_status_events: false
# Whether the bridge should send error notices via m.notice events when a message fails to bridge.
message_error_notices: true
# Should the bridge use space-restricted join rules instead of invite-only for guild rooms?
# This can avoid unnecessary invite events in guild rooms when members are synced in.
restricted_rooms: true
# Should the bridge automatically join the user to threads on Discord when the thread is opened on Matrix?
# This only works with clients that support thread read receipts (MSC3771 added in Matrix v1.4).
autojoin_thread_on_open: true
# Should inline fields in Discord embeds be bridged as HTML tables to Matrix?
# Tables aren't supported in all clients, but are the only way to emulate the Discord inline field UI.
embed_fields_as_tables: true
# Should guild channels be muted when the portal is created? This only meant for single-user instances,
# it won't mute it for all users if there are multiple Matrix users in the same Discord guild.
mute_channels_on_create: false
# Should the bridge update the m.direct account data event when double puppeting is enabled.
# Note that updating the m.direct event is not atomic (except with mautrix-asmux)
# and is therefore prone to race conditions.
sync_direct_chat_list: false
# Set this to true to tell the bridge to re-send m.bridge events to all rooms on the next run.
# This field will automatically be changed back to false after it, except if the config file is not writable.
resend_bridge_info: false
# Should incoming custom emoji reactions be bridged as mxc:// URIs?
# If set to false, custom emoji reactions will be bridged as the shortcode instead, and the image won't be available.
custom_emoji_reactions: true
# Should the bridge attempt to completely delete portal rooms when a channel is deleted on Discord?
# If true, the bridge will try to kick Matrix users from the room. Otherwise, the bridge only makes ghosts leave.
delete_portal_on_channel_delete: false
# Should the bridge delete all portal rooms when you leave a guild on Discord?
# This only applies if the guild has no other Matrix users on this bridge instance.
delete_guild_on_leave: true
# Whether or not created rooms should have federation enabled.
# If false, created portal rooms will never be federated.
federate_rooms: true
# Prefix messages from webhooks with the profile info? This can be used along with a custom displayname_template
# to better handle webhooks that change their name all the time (like ones used by bridges).
prefix_webhook_messages: false
# Bridge webhook avatars?
enable_webhook_avatars: true
# Should the bridge upload media to the Discord CDN directly before sending the message when using a user token,
# like the official client does? The other option is sending the media in the message send request as a form part
# (which is always used by bots and webhooks).
use_discord_cdn_upload: true
# Should mxc uris copied from Discord be cached?
# This can be `never` to never cache, `unencrypted` to only cache unencrypted mxc uris, or `always` to cache everything.
# If you have a media repo that generates non-unique mxc uris, you should set this to never.
cache_media: unencrypted
# Settings for converting Discord media to custom mxc:// URIs instead of reuploading.
# More details can be found at https://docs.mau.fi/bridges/go/discord/direct-media.html
direct_media:
# Should custom mxc:// URIs be used instead of reuploading media?
enabled: false
# The server name to use for the custom mxc:// URIs.
# This server name will effectively be a real Matrix server, it just won't implement anything other than media.
# You must either set up .well-known delegation from this domain to the bridge, or proxy the domain directly to the bridge.
server_name: discord-media.example.com
# Optionally a custom .well-known response. This defaults to `server_name:443`
well_known_response:
# The bridge supports MSC3860 media download redirects and will use them if the requester supports it.
# Optionally, you can force redirects and not allow proxying at all by setting this to false.
allow_proxy: true
# Matrix server signing key to make the federation tester pass, same format as synapse's .signing.key file.
# This key is also used to sign the mxc:// URIs to ensure only the bridge can generate them.
server_key: generate
# Settings for converting animated stickers.
animated_sticker:
# Format to which animated stickers should be converted.
# disable - No conversion, send as-is (lottie JSON)
# png - converts to non-animated png (fastest)
# gif - converts to animated gif
# webm - converts to webm video, requires ffmpeg executable with vp9 codec and webm container support
# webp - converts to animated webp, requires ffmpeg executable with webp codec/container support
target: webp
# Arguments for converter. All converters take width and height.
args:
width: 320
height: 320
fps: 25 # only for webm, webp and gif (2, 5, 10, 20 or 25 recommended)
# Servers to always allow double puppeting from
double_puppet_server_map:
example.com: https://example.com
# Allow using double puppeting from any server with a valid client .well-known file.
double_puppet_allow_discovery: false
# Shared secrets for https://github.com/devture/matrix-synapse-shared-secret-auth
#
# If set, double puppeting will be enabled automatically for local users
# instead of users having to find an access token and run `login-matrix`
# manually.
login_shared_secret_map:
example.com: foobar
# The prefix for commands. Only required in non-management rooms.
command_prefix: '!discord'
# Messages sent upon joining a management room.
# Markdown is supported. The defaults are listed below.
management_room_text:
# Sent when joining a room.
welcome: "Hello, I'm a Discord bridge bot."
# Sent when joining a management room and the user is already logged in.
welcome_connected: "Use `help` for help."
# Sent when joining a management room and the user is not logged in.
welcome_unconnected: "Use `help` for help or `login` to log in."
# Optional extra text sent when joining a management room.
additional_help: ""
# Settings for backfilling messages.
backfill:
# Limits for forward backfilling.
forward_limits:
# Initial backfill (when creating portal). 0 means backfill is disabled.
# A special unlimited value is not supported, you must set a limit. Initial backfill will
# fetch all messages first before backfilling anything, so high limits can take a lot of time.
initial:
dm: 0
channel: 0
thread: 0
# Missed message backfill (on startup).
# 0 means backfill is disabled, -1 means fetch all messages since last bridged message.
# When using unlimited backfill (-1), messages are backfilled as they are fetched.
# With limits, all messages up to the limit are fetched first and backfilled afterwards.
missed:
dm: 0
channel: 0
thread: 0
# Maximum members in a guild to enable backfilling. Set to -1 to disable limit.
# This can be used as a rough heuristic to disable backfilling in channels that are too active.
# Currently only applies to missed message backfill.
max_guild_members: -1
# End-to-bridge encryption support options.
#
# See https://docs.mau.fi/bridges/general/end-to-bridge-encryption.html for more info.
encryption:
# Allow encryption, work in group chat rooms with e2ee enabled
allow: false
# Default to encryption, force-enable encryption in all portals the bridge creates
# This will cause the bridge bot to be in private chats for the encryption to work properly.
default: false
# Whether to use MSC2409/MSC3202 instead of /sync long polling for receiving encryption-related data.
appservice: false
# Require encryption, drop any unencrypted messages.
require: false
# Enable key sharing? If enabled, key requests for rooms where users are in will be fulfilled.
# You must use a client that supports requesting keys from other users to use this feature.
allow_key_sharing: false
# Should users mentions be in the event wire content to enable the server to send push notifications?
plaintext_mentions: false
# Options for deleting megolm sessions from the bridge.
delete_keys:
# Beeper-specific: delete outbound sessions when hungryserv confirms
# that the user has uploaded the key to key backup.
delete_outbound_on_ack: false
# Don't store outbound sessions in the inbound table.
dont_store_outbound: false
# Ratchet megolm sessions forward after decrypting messages.
ratchet_on_decrypt: false
# Delete fully used keys (index >= max_messages) after decrypting messages.
delete_fully_used_on_decrypt: false
# Delete previous megolm sessions from same device when receiving a new one.
delete_prev_on_new_session: false
# Delete megolm sessions received from a device when the device is deleted.
delete_on_device_delete: false
# Periodically delete megolm sessions when 2x max_age has passed since receiving the session.
periodically_delete_expired: false
# Delete inbound megolm sessions that don't have the received_at field used for
# automatic ratcheting and expired session deletion. This is meant as a migration
# to delete old keys prior to the bridge update.
delete_outdated_inbound: false
# What level of device verification should be required from users?
#
# Valid levels:
# unverified - Send keys to all device in the room.
# cross-signed-untrusted - Require valid cross-signing, but trust all cross-signing keys.
# cross-signed-tofu - Require valid cross-signing, trust cross-signing keys on first use (and reject changes).
# cross-signed-verified - Require valid cross-signing, plus a valid user signature from the bridge bot.
# Note that creating user signatures from the bridge bot is not currently possible.
# verified - Require manual per-device verification
# (currently only possible by modifying the `trust` column in the `crypto_device` database table).
verification_levels:
# Minimum level for which the bridge should send keys to when bridging messages from WhatsApp to Matrix.
receive: unverified
# Minimum level that the bridge should accept for incoming Matrix messages.
send: unverified
# Minimum level that the bridge should require for accepting key requests.
share: cross-signed-tofu
# Options for Megolm room key rotation. These options allow you to
# configure the m.room.encryption event content. See:
# https://spec.matrix.org/v1.3/client-server-api/#mroomencryption for
# more information about that event.
rotation:
# Enable custom Megolm room key rotation settings. Note that these
# settings will only apply to rooms created after this option is
# set.
enable_custom: false
# The maximum number of milliseconds a session should be used
# before changing it. The Matrix spec recommends 604800000 (a week)
# as the default.
milliseconds: 604800000
# The maximum number of messages that should be sent with a given a
# session before changing it. The Matrix spec recommends 100 as the
# default.
messages: 100
# Disable rotating keys when a user's devices change?
# You should not enable this option unless you understand all the implications.
disable_device_change_key_rotation: false
# Settings for provisioning API
provisioning:
# Prefix for the provisioning API paths.
prefix: /_matrix/provision
# Shared secret for authentication. If set to "generate", a random secret will be generated,
# or if set to "disable", the provisioning API will be disabled.
shared_secret: generate
# Enable debug API at /debug with provisioning authentication.
debug_endpoints: false
# Permissions for using the bridge.
# Permitted values:
# relay - Talk through the relaybot (if enabled), no access otherwise
# user - Access to use the bridge to chat with a Discord account.
# admin - User level and some additional administration tools
# Permitted keys:
# * - All Matrix users
# domain - All users on that homeserver
# mxid - Specific user
permissions:
"*": relay
"example.com": user
"@admin:example.com": admin
# Logging config. See https://github.com/tulir/zeroconfig for details.
logging:
min_level: debug
writers:
- type: stdout
format: pretty-colored
- type: file
format: json
filename: ./logs/mautrix-discord.log
max_size: 100
max_backups: 10
compress: true
# registration.yml contents
existingRegistrationSecret: ""
registration:
rate_limited: false
sender_localpart: discordbridgebot

View File

@@ -1,15 +0,0 @@
apiVersion: v2
name: mautrix-whatsapp
version: 0.0.3
description: Chart for Matrix Whatsapp Bridge
keywords:
- matrix
- mautrix-whatsapp
- bridge
- whatsapp
sources:
- https://github.com/mautrix/whatsapp
maintainers:
- name: alexlebens
icon: https://avatars.githubusercontent.com/u/88519669?s=48&v=4
appVersion: v0.10.7

View File

@@ -1,41 +0,0 @@
{{/*
Helper for secret name
*/}}
{{- define "mautrix-whatsapp.secretName" -}}
{{- if .Values.mautrixWhatsapp.existingSecret }}
{{- printf "%s" .Values.mautrixWhatsapp.existingSecret -}}
{{- else }}
{{- printf "mautrix-whatsapp-config-secret" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{/*
Helper for registration secret name
*/}}
{{- define "mautrix-whatsapp.registrationSecretName" -}}
{{- if .Values.mautrixWhatsapp.existingRegistrationSecret }}
{{- printf "%s" .Values.mautrixWhatsapp.existingRegistrationSecret -}}
{{- else }}
{{- printf "mautrix-whatsapp-registration-secret" }}
{{- end }}
{{- end }}
{{/*
Generate registration.yaml if not from existing secret
*/}}
{{- define "mautrix-whatsapp.registration-yaml" -}}
id: {{ .Values.mautrixWhatsapp.config.appservice.id | quote }}
as_token: {{ .Values.mautrixWhatsapp.config.appservice.as_token | quote }}
hs_token: {{ .Values.mautrixWhatsapp.config.appservice.hs_token | quote }}
namespaces:
users:
- regex: {{ printf "^@whatsappbot:%s$" (replace "." "\\." .Values.mautrixWhatsapp.config.homeserver.domain) }}
exclusive: true
- regex: {{ printf "^@%s:%s$" (replace "{{.}}" ".*" (tpl .Values.mautrixWhatsapp.config.bridge.username_template .)) (replace "." "\\." .Values.mautrixWhatsapp.config.homeserver.domain) }}
exclusive: true
url: {{ .Values.mautrixWhatsapp.config.appservice.address | quote }}
sender_localpart: {{ .Values.mautrixWhatsapp.registration.sender_localpart | quote }}
rate_limited: {{ .Values.mautrixWhatsapp.registration.rate_limited }}
de.sorunome.msc2409.push_ephemeral: true
push_ephemeral: true
{{- end -}}

View File

@@ -1,96 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: mautrix-whatsapp
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: mautrix-whatsapp
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
revisionHistoryLimit: 3
replicas: {{ .Values.deployment.replicas }}
strategy:
type: {{ .Values.deployment.strategy }}
selector:
matchLabels:
app.kubernetes.io/name: mautrix-whatsapp
app.kubernetes.io/instance: {{ .Release.Name }}
template:
metadata:
labels:
app.kubernetes.io/name: mautrix-whatsapp
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
serviceAccountName: mautrix-whatsapp
automountServiceAccountToken: true
containers:
- name: mautrix-whatsapp
image: "{{ .Values.deployment.image.repository }}:{{ .Values.deployment.image.tag }}"
imagePullPolicy: {{ .Values.deployment.image.imagePullPolicy }}
ports:
- name: http
containerPort: {{ .Values.service.port }}
protocol: TCP
env:
{{- range $k,$v := .Values.deployment.env }}
- name: {{ $k }}
value: {{ $v | quote }}
{{- end }}
{{- with .Values.deployment.envFrom }}
envFrom:
{{- toYaml . | nindent 12 }}
{{- end }}
livenessProbe:
httpGet:
path: /_matrix/mau/live
port: http
failureThreshold: {{ .Values.deployment.probes.liveness.failureThreshold }}
periodSeconds: {{ .Values.deployment.probes.liveness.periodSeconds }}
readinessProbe:
httpGet:
path: /_matrix/mau/ready
port: http
failureThreshold: {{ .Values.deployment.probes.readiness.failureThreshold }}
periodSeconds: {{ .Values.deployment.probes.readiness.periodSeconds }}
resources:
{{- toYaml .Values.deployment.resources | nindent 12 }}
volumeMounts:
- name: config
mountPath: /data/config.yaml
subPath: config.yaml
readOnly: true
- name: registration
mountPath: /data/registration.yaml
subPath: registration.yaml
readOnly: true
- name: data
mountPath: /data
volumes:
- name: config
secret:
secretName: {{ template "mautrix-whatsapp.secretName" . }}
- name: registration
secret:
secretName: {{ template "mautrix-whatsapp.registrationSecretName" . }}
- name: data
{{- if .Values.persistence.enabled }}
persistentVolumeClaim:
claimName: {{ .Values.persistence.existingClaim | default "mautrix-whatsapp-data" }}
{{- else }}
emptyDir: {}
{{- end }}
{{- with .Values.deployment.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.deployment.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.deployment.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}

View File

@@ -1,32 +0,0 @@
{{- if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: mautrix-whatsapp
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: mautrix-whatsapp
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
annotations:
{{- toYaml .Values.ingress.annotations | nindent 4 }}
spec:
ingressClassName: {{ .Values.ingress.className }}
tls:
- hosts:
- {{ .Values.ingress.host }}
secretName: {{ .Release.Name }}-secret-tls
rules:
- host: {{ .Values.ingress.host }}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: mautrix-whatsapp
port:
name: http
{{- end }}

View File

@@ -1,26 +0,0 @@
{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) }}
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mautrix-whatsapp-data
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: mautrix-whatsapp
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
accessModes:
- {{ .Values.persistence.accessMode | quote }}
resources:
requests:
storage: {{ .Values.persistence.size | quote }}
{{- if .Values.persistence.storageClass }}
{{- if not .Values.persistence.storageClass }}
storageClassName: ""
{{- else }}
storageClassName: {{ .Values.persistence.storageClass | quote }}
{{- end }}
{{- end }}
{{- end }}

View File

@@ -1,33 +0,0 @@
{{- if not .Values.mautrixWhatsapp.existingSecret }}
apiVersion: v1
kind: Secret
metadata:
name: mautrix-whatsapp-config-secret
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: mautrix-whatsapp-config
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
data:
config.yaml: |
{{ toYaml .Values.mautrixWhatsapp.config | indent 4 }}
{{- end }}
---
{{- if not .Values.mautrixWhatsapp.existingRegistrationSecret }}
apiVersion: v1
kind: Secret
metadata:
name: mautrix-whatsapp-registration-secret
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: mautrix-whatsapp-registration
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
data:
registration.yaml: {{ include "mautrix-whatsapp.registration-yaml" . | b64enc | quote }}
{{- end }}

View File

@@ -1,17 +0,0 @@
{{- if .Values.serviceAccount.create -}}
apiVersion: v1
kind: ServiceAccount
metadata:
name: mautrix-whatsapp
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: mautrix-whatsapp
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
{{- with .Values.serviceAccount.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- end -}}

View File

@@ -1,24 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: mautrix-whatsapp
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: mautrix-whatsapp
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/component: web
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
type: {{ .Values.service.type }}
clusterIP: {{ .Values.service.clusterIP | quote }}
externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }}
publishNotReadyAddresses: {{ .Values.service.publishNotReadyAddresses }}
ports:
- port: {{ .Values.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
app.kubernetes.io/name: mautrix-whatsapp
app.kubernetes.io/instance: {{ .Release.Name }}

View File

@@ -1,532 +0,0 @@
deployment:
replicas: 1
strategy: Recreate
image:
repository: dock.mau.dev/mautrix/whatsapp
tag: v0.10.7
imagePullPolicy: IfNotPresent
env: {}
envFrom: []
resources:
limits:
memory: 128Mi
cpu: 200m
requests:
memory: 64Mi
cpu: 50m
probes:
liveness:
failureThreshold: 5
periodSeconds: 10
readiness:
failureThreshold: 5
periodSeconds: 10
nodeSelector: {}
tolerations: []
affinity: {}
serviceAccount:
create: true
annotations: {}
service:
type: ClusterIP
clusterIP: None
port: 29334
externalTrafficPolicy: ""
publishNotReadyAddresses: true
ingress:
enabled: false
className: ""
annotations: {}
host: ""
persistence:
enabled: false
existingClaim: ""
storageClass: ""
accessMode: ReadWriteOnce
size: 500Mi
# Reference the following for examples
# https://github.com/mautrix/whatsapp/blob/main/example-config.yaml
mautrixWhatsapp:
# config.yml contents
existingSecret: ""
config:
# Homeserver details.
homeserver:
# The address that this appservice can use to connect to the homeserver.
address: https://matrix.example.com
# The domain of the homeserver (also known as server_name, used for MXIDs, etc).
domain: example.com
# What software is the homeserver running?
# Standard Matrix homeservers like Synapse, Dendrite and Conduit should just use "standard" here.
software: standard
# The URL to push real-time bridge status to.
# If set, the bridge will make POST requests to this URL whenever a user's whatsapp connection state changes.
# The bridge will use the appservice as_token to authorize requests.
status_endpoint: null
# Endpoint for reporting per-message status.
message_send_checkpoint_endpoint: null
# Does the homeserver support https://github.com/matrix-org/matrix-spec-proposals/pull/2246?
async_media: false
# Should the bridge use a websocket for connecting to the homeserver?
# The server side is currently not documented anywhere and is only implemented by mautrix-wsproxy,
# mautrix-asmux (deprecated), and hungryserv (proprietary).
websocket: false
# How often should the websocket be pinged? Pinging will be disabled if this is zero.
ping_interval_seconds: 0
# Application service host/registration related details.
# Changing these values requires regeneration of the registration.
appservice:
# The address that the homeserver can use to connect to this appservice.
address: http://localhost:29318
# The hostname and port where this appservice should listen.
hostname: 0.0.0.0
port: 29318
# Database config.
database:
# The database type. "sqlite3-fk-wal" and "postgres" are supported.
type: postgres
# The database URI.
# SQLite: A raw file path is supported, but `file:<path>?_txlock=immediate` is recommended.
# https://github.com/mattn/go-sqlite3#connection-string
# Postgres: Connection string. For example, postgres://user:password@host/database?sslmode=disable
# To connect via Unix socket, use something like postgres:///dbname?host=/var/run/postgresql
uri: postgres://user:password@host/database?sslmode=disable
# Maximum number of connections. Mostly relevant for Postgres.
max_open_conns: 20
max_idle_conns: 2
# Maximum connection idle time and lifetime before they're closed. Disabled if null.
# Parsed with https://pkg.go.dev/time#ParseDuration
max_conn_idle_time: null
max_conn_lifetime: null
# The unique ID of this appservice.
id: whatsapp
# Appservice bot details.
bot:
# Username of the appservice bot.
username: whatsappbot
# Display name and avatar for bot. Set to "remove" to remove display name/avatar, leave empty
# to leave display name/avatar as-is.
displayname: WhatsApp bridge bot
avatar: mxc://maunium.net/NeXNQarUbrlYBiPCpprYsRqr
# Whether or not to receive ephemeral events via appservice transactions.
# Requires MSC2409 support (i.e. Synapse 1.22+).
ephemeral_events: true
# Should incoming events be handled asynchronously?
# This may be necessary for large public instances with lots of messages going through.
# However, messages will not be guaranteed to be bridged in the same order they were sent in.
async_transactions: false
# Authentication tokens for AS <-> HS communication. Autogenerated; do not modify.
as_token: "This value is generated when generating the registration"
hs_token: "This value is generated when generating the registration"
# Segment-compatible analytics endpoint for tracking some events, like provisioning API login and encryption errors.
analytics:
# Hostname of the tracking server. The path is hardcoded to /v1/track
host: api.segment.io
# API key to send with tracking requests. Tracking is disabled if this is null.
token: null
# Optional user ID for tracking events. If null, defaults to using Matrix user ID.
user_id: null
# Prometheus config.
metrics:
# Enable prometheus metrics?
enabled: false
# IP and port where the metrics listener should be. The path is always /metrics
listen: 127.0.0.1:8001
# Config for things that are directly sent to WhatsApp.
whatsapp:
# Device name that's shown in the "WhatsApp Web" section in the mobile app.
os_name: Mautrix-WhatsApp bridge
# Browser name that determines the logo shown in the mobile app.
# Must be "unknown" for a generic icon or a valid browser name if you want a specific icon.
# List of valid browser names: https://github.com/tulir/whatsmeow/blob/efc632c008604016ddde63bfcfca8de4e5304da9/binary/proto/def.proto#L43-L64
browser_name: unknown
# Bridge config
bridge:
# Localpart template of MXIDs for WhatsApp users.
# {{.}} is replaced with the phone number of the WhatsApp user.
username_template: whatsapp_{{.}}
# Displayname template for WhatsApp users.
# {{.PushName}} - nickname set by the WhatsApp user
# {{.BusinessName}} - validated WhatsApp business name
# {{.Phone}} - phone number (international format)
# The following variables are also available, but will cause problems on multi-user instances:
# {{.FullName}} - full name from contact list
# {{.FirstName}} - first name from contact list
displayname_template: "{{or .BusinessName .PushName .JID}} (WA)"
# Should the bridge create a space for each logged-in user and add bridged rooms to it?
# Users who logged in before turning this on should run `!wa sync space` to create and fill the space for the first time.
personal_filtering_spaces: false
# Should the bridge send a read receipt from the bridge bot when a message has been sent to WhatsApp?
delivery_receipts: false
# Whether the bridge should send the message status as a custom com.beeper.message_send_status event.
message_status_events: false
# Whether the bridge should send error notices via m.notice events when a message fails to bridge.
message_error_notices: true
# Should incoming calls send a message to the Matrix room?
call_start_notices: true
# Should another user's cryptographic identity changing send a message to Matrix?
identity_change_notices: false
portal_message_buffer: 128
# Settings for handling history sync payloads.
history_sync:
# Enable backfilling history sync payloads from WhatsApp?
backfill: true
# The maximum number of initial conversations that should be synced.
# Other conversations will be backfilled on demand when receiving a message or when initiating a direct chat.
max_initial_conversations: -1
# Maximum number of messages to backfill in each conversation.
# Set to -1 to disable limit.
message_count: 50
# Should the bridge request a full sync from the phone when logging in?
# This bumps the size of history syncs from 3 months to 1 year.
request_full_sync: false
# Configuration parameters that are sent to the phone along with the request full sync flag.
# By default (when the values are null or 0), the config isn't sent at all.
full_sync_config:
# Number of days of history to request.
# The limit seems to be around 3 years, but using higher values doesn't break.
days_limit: null
# This is presumably the maximum size of the transferred history sync blob, which may affect what the phone includes in the blob.
size_mb_limit: null
# This is presumably the local storage quota, which may affect what the phone includes in the history sync blob.
storage_quota_mb: null
# If this value is greater than 0, then if the conversation's last message was more than
# this number of hours ago, then the conversation will automatically be marked it as read.
# Conversations that have a last message that is less than this number of hours ago will
# have their unread status synced from WhatsApp.
unread_hours_threshold: 0
###############################################################################
# The settings below are only applicable for backfilling using batch sending, #
# which is no longer supported in Synapse. #
###############################################################################
# Settings for media requests. If the media expired, then it will not be on the WA servers.
# Media can always be requested by reacting with the ♻️ (recycle) emoji.
# These settings determine if the media requests should be done automatically during or after backfill.
media_requests:
# Should expired media be automatically requested from the server as part of the backfill process?
auto_request_media: true
# Whether to request the media immediately after the media message is backfilled ("immediate")
# or at a specific time of the day ("local_time").
request_method: immediate
# If request_method is "local_time", what time should the requests be sent (in minutes after midnight)?
request_local_time: 120
# Settings for immediate backfills. These backfills should generally be small and their main purpose is
# to populate each of the initial chats (as configured by max_initial_conversations) with a few messages
# so that you can continue conversations without losing context.
immediate:
# The number of concurrent backfill workers to create for immediate backfills.
# Note that using more than one worker could cause the room list to jump around
# since there are no guarantees about the order in which the backfills will complete.
worker_count: 1
# The maximum number of events to backfill initially.
max_events: 10
# Settings for deferred backfills. The purpose of these backfills are to fill in the rest of
# the chat history that was not covered by the immediate backfills.
# These backfills generally should happen at a slower pace so as not to overload the homeserver.
# Each deferred backfill config should define a "stage" of backfill (i.e. the last week of messages).
# The fields are as follows:
# - start_days_ago: the number of days ago to start backfilling from.
# To indicate the start of time, use -1. For example, for a week ago, use 7.
# - max_batch_events: the number of events to send per batch.
# - batch_delay: the number of seconds to wait before backfilling each batch.
deferred:
# Last Week
- start_days_ago: 7
max_batch_events: 20
batch_delay: 5
# Last Month
- start_days_ago: 30
max_batch_events: 50
batch_delay: 10
# Last 3 months
- start_days_ago: 90
max_batch_events: 100
batch_delay: 10
# The start of time
- start_days_ago: -1
max_batch_events: 500
batch_delay: 10
# Should puppet avatars be fetched from the server even if an avatar is already set?
user_avatar_sync: true
# Should Matrix users leaving groups be bridged to WhatsApp?
bridge_matrix_leave: true
# Should the bridge update the m.direct account data event when double puppeting is enabled.
# Note that updating the m.direct event is not atomic (except with mautrix-asmux)
# and is therefore prone to race conditions.
sync_direct_chat_list: false
# Should the bridge use MSC2867 to bridge manual "mark as unread"s from
# WhatsApp and set the unread status on initial backfill?
# This will only work on clients that support the m.marked_unread or
# com.famedly.marked_unread room account data.
sync_manual_marked_unread: true
# When double puppeting is enabled, users can use `!wa toggle` to change whether
# presence is bridged. This setting sets the default value.
# Existing users won't be affected when these are changed.
default_bridge_presence: true
# Send the presence as "available" to whatsapp when users start typing on a portal.
# This works as a workaround for homeservers that do not support presence, and allows
# users to see when the whatsapp user on the other side is typing during a conversation.
send_presence_on_typing: false
# Should the bridge always send "active" delivery receipts (two gray ticks on WhatsApp)
# even if the user isn't marked as online (e.g. when presence bridging isn't enabled)?
#
# By default, the bridge acts like WhatsApp web, which only sends active delivery
# receipts when it's in the foreground.
force_active_delivery_receipts: false
# Servers to always allow double puppeting from
double_puppet_server_map:
example.com: https://example.com
# Allow using double puppeting from any server with a valid client .well-known file.
double_puppet_allow_discovery: false
# Shared secrets for https://github.com/devture/matrix-synapse-shared-secret-auth
#
# If set, double puppeting will be enabled automatically for local users
# instead of users having to find an access token and run `login-matrix`
# manually.
login_shared_secret_map:
example.com: foobar
# Whether to explicitly set the avatar and room name for private chat portal rooms.
# If set to `default`, this will be enabled in encrypted rooms and disabled in unencrypted rooms.
# If set to `always`, all DM rooms will have explicit names and avatars set.
# If set to `never`, DM rooms will never have names and avatars set.
private_chat_portal_meta: default
# Should group members be synced in parallel? This makes member sync faster
parallel_member_sync: false
# Should Matrix m.notice-type messages be bridged?
bridge_notices: true
# Set this to true to tell the bridge to re-send m.bridge events to all rooms on the next run.
# This field will automatically be changed back to false after it, except if the config file is not writable.
resend_bridge_info: false
# When using double puppeting, should muted chats be muted in Matrix?
mute_bridging: false
# When using double puppeting, should archived chats be moved to a specific tag in Matrix?
# Note that WhatsApp unarchives chats when a message is received, which will also be mirrored to Matrix.
# This can be set to a tag (e.g. m.lowpriority), or null to disable.
archive_tag: null
# Same as above, but for pinned chats. The favorite tag is called m.favourite
pinned_tag: null
# Should mute status and tags only be bridged when the portal room is created?
tag_only_on_create: true
# Should WhatsApp status messages be bridged into a Matrix room?
# Disabling this won't affect already created status broadcast rooms.
enable_status_broadcast: true
# Should sending WhatsApp status messages be allowed?
# This can cause issues if the user has lots of contacts, so it's disabled by default.
disable_status_broadcast_send: true
# Should the status broadcast room be muted and moved into low priority by default?
# This is only applied when creating the room, the user can unmute it later.
mute_status_broadcast: true
# Tag to apply to the status broadcast room.
status_broadcast_tag: m.lowpriority
# Should the bridge use thumbnails from WhatsApp?
# They're disabled by default due to very low resolution.
whatsapp_thumbnail: false
# Allow invite permission for user. User can invite any bots to room with whatsapp
# users (private chat and groups)
allow_user_invite: false
# Whether or not created rooms should have federation enabled.
# If false, created portal rooms will never be federated.
federate_rooms: true
# Should the bridge never send alerts to the bridge management room?
# These are mostly things like the user being logged out.
disable_bridge_alerts: false
# Should the bridge stop if the WhatsApp server says another user connected with the same session?
# This is only safe on single-user bridges.
crash_on_stream_replaced: false
# Should the bridge detect URLs in outgoing messages, ask the homeserver to generate a preview,
# and send it to WhatsApp? URL previews can always be sent using the `com.beeper.linkpreviews`
# key in the event content even if this is disabled.
url_previews: false
# Send captions in the same message as images. This will send data compatible with both MSC2530 and MSC3552.
# This is currently not supported in most clients.
caption_in_message: false
# Send galleries as a single event? This is not an MSC (yet).
beeper_galleries: false
# Should polls be sent using MSC3381 event types?
extev_polls: false
# Should cross-chat replies from WhatsApp be bridged? Most servers and clients don't support this.
cross_room_replies: false
# Disable generating reply fallbacks? Some extremely bad clients still rely on them,
# but they're being phased out and will be completely removed in the future.
disable_reply_fallbacks: false
# Maximum time for handling Matrix events. Duration strings formatted for https://pkg.go.dev/time#ParseDuration
# Null means there's no enforced timeout.
message_handling_timeout:
# Send an error message after this timeout, but keep waiting for the response until the deadline.
# This is counted from the origin_server_ts, so the warning time is consistent regardless of the source of delay.
# If the message is older than this when it reaches the bridge, the message won't be handled at all.
error_after: null
# Drop messages after this timeout. They may still go through if the message got sent to the servers.
# This is counted from the time the bridge starts handling the message.
deadline: 120s
# The prefix for commands. Only required in non-management rooms.
command_prefix: "!wa"
# Messages sent upon joining a management room.
# Markdown is supported. The defaults are listed below.
management_room_text:
# Sent when joining a room.
welcome: "Hello, I'm a WhatsApp bridge bot."
# Sent when joining a management room and the user is already logged in.
welcome_connected: "Use `help` for help."
# Sent when joining a management room and the user is not logged in.
welcome_unconnected: "Use `help` for help or `login` to log in."
# Optional extra text sent when joining a management room.
additional_help: ""
# End-to-bridge encryption support options.
#
# See https://docs.mau.fi/bridges/general/end-to-bridge-encryption.html for more info.
encryption:
# Allow encryption, work in group chat rooms with e2ee enabled
allow: false
# Default to encryption, force-enable encryption in all portals the bridge creates
# This will cause the bridge bot to be in private chats for the encryption to work properly.
default: false
# Whether to use MSC2409/MSC3202 instead of /sync long polling for receiving encryption-related data.
appservice: false
# Require encryption, drop any unencrypted messages.
require: false
# Enable key sharing? If enabled, key requests for rooms where users are in will be fulfilled.
# You must use a client that supports requesting keys from other users to use this feature.
allow_key_sharing: false
# Should users mentions be in the event wire content to enable the server to send push notifications?
plaintext_mentions: false
# Options for deleting megolm sessions from the bridge.
delete_keys:
# Beeper-specific: delete outbound sessions when hungryserv confirms
# that the user has uploaded the key to key backup.
delete_outbound_on_ack: false
# Don't store outbound sessions in the inbound table.
dont_store_outbound: false
# Ratchet megolm sessions forward after decrypting messages.
ratchet_on_decrypt: false
# Delete fully used keys (index >= max_messages) after decrypting messages.
delete_fully_used_on_decrypt: false
# Delete previous megolm sessions from same device when receiving a new one.
delete_prev_on_new_session: false
# Delete megolm sessions received from a device when the device is deleted.
delete_on_device_delete: false
# Periodically delete megolm sessions when 2x max_age has passed since receiving the session.
periodically_delete_expired: false
# Delete inbound megolm sessions that don't have the received_at field used for
# automatic ratcheting and expired session deletion. This is meant as a migration
# to delete old keys prior to the bridge update.
delete_outdated_inbound: false
# What level of device verification should be required from users?
#
# Valid levels:
# unverified - Send keys to all device in the room.
# cross-signed-untrusted - Require valid cross-signing, but trust all cross-signing keys.
# cross-signed-tofu - Require valid cross-signing, trust cross-signing keys on first use (and reject changes).
# cross-signed-verified - Require valid cross-signing, plus a valid user signature from the bridge bot.
# Note that creating user signatures from the bridge bot is not currently possible.
# verified - Require manual per-device verification
# (currently only possible by modifying the `trust` column in the `crypto_device` database table).
verification_levels:
# Minimum level for which the bridge should send keys to when bridging messages from WhatsApp to Matrix.
receive: unverified
# Minimum level that the bridge should accept for incoming Matrix messages.
send: unverified
# Minimum level that the bridge should require for accepting key requests.
share: cross-signed-tofu
# Options for Megolm room key rotation. These options allow you to
# configure the m.room.encryption event content. See:
# https://spec.matrix.org/v1.3/client-server-api/#mroomencryption for
# more information about that event.
rotation:
# Enable custom Megolm room key rotation settings. Note that these
# settings will only apply to rooms created after this option is
# set.
enable_custom: false
# The maximum number of milliseconds a session should be used
# before changing it. The Matrix spec recommends 604800000 (a week)
# as the default.
milliseconds: 604800000
# The maximum number of messages that should be sent with a given a
# session before changing it. The Matrix spec recommends 100 as the
# default.
messages: 100
# Disable rotating keys when a user's devices change?
# You should not enable this option unless you understand all the implications.
disable_device_change_key_rotation: false
# Settings for provisioning API
provisioning:
# Prefix for the provisioning API paths.
prefix: /_matrix/provision
# Shared secret for authentication. If set to "generate", a random secret will be generated,
# or if set to "disable", the provisioning API will be disabled.
shared_secret: generate
# Enable debug API at /debug with provisioning authentication.
debug_endpoints: false
# Permissions for using the bridge.
# Permitted values:
# relay - Talk through the relaybot (if enabled), no access otherwise
# user - Access to use the bridge to chat with a WhatsApp account.
# admin - User level and some additional administration tools
# Permitted keys:
# * - All Matrix users
# domain - All users on that homeserver
# mxid - Specific user
permissions:
"*": relay
"example.com": user
"@admin:example.com": admin
# Settings for relay mode
relay:
# Whether relay mode should be allowed. If allowed, `!wa set-relay` can be used to turn any
# authenticated user into a relaybot for that chat.
enabled: false
# Should only admins be allowed to set themselves as relay users?
admin_only: true
# The formats to use when sending messages to WhatsApp via the relaybot.
message_formats:
m.text: "<b>{{ .Sender.Displayname }}</b>: {{ .Message }}"
m.notice: "<b>{{ .Sender.Displayname }}</b>: {{ .Message }}"
m.emote: "* <b>{{ .Sender.Displayname }}</b> {{ .Message }}"
m.file: "<b>{{ .Sender.Displayname }}</b> sent a file"
m.image: "<b>{{ .Sender.Displayname }}</b> sent an image"
m.audio: "<b>{{ .Sender.Displayname }}</b> sent an audio file"
m.video: "<b>{{ .Sender.Displayname }}</b> sent a video"
m.location: "<b>{{ .Sender.Displayname }}</b> sent a location"
# Logging config. See https://github.com/tulir/zeroconfig for details.
logging:
min_level: debug
writers:
- type: stdout
format: pretty-colored
- type: file
format: json
filename: ./logs/mautrix-whatsapp.log
max_size: 100
max_backups: 10
compress: true
# registration.yml contents
existingRegistrationSecret: ""
registration:
rate_limited: false
sender_localpart: whatsappbridgebot

Some files were not shown because too many files have changed in this diff Show More