mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-03-13 13:32:59 +01:00
Compare commits
373 Commits
CrazyWolf1
...
feat/remov
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6b33afca1e | ||
|
|
12bdbcce5c | ||
|
|
51418f0d99 | ||
|
|
3601388abe | ||
|
|
4189137f55 | ||
|
|
043401876b | ||
|
|
543b93ced0 | ||
|
|
dd3b381813 | ||
|
|
667efeab5e | ||
|
|
4103efd10b | ||
|
|
00be37a151 | ||
|
|
c9f7453222 | ||
|
|
7f95652e80 | ||
|
|
15f6591d4c | ||
|
|
a530da5760 | ||
|
|
cc95ef2987 | ||
|
|
38c9421493 | ||
|
|
5abd9170ba | ||
|
|
375e526108 | ||
|
|
eb9013f1ce | ||
|
|
de9168f6a7 | ||
|
|
24a15d2c12 | ||
|
|
a9ebaad37e | ||
|
|
968e96e2c7 | ||
|
|
02b5c7f7a8 | ||
|
|
f1f77e5283 | ||
|
|
1e726852df | ||
|
|
ba85fad318 | ||
|
|
6ae5eefdf5 | ||
|
|
b6805bb845 | ||
|
|
3117145e6c | ||
|
|
c144915a74 | ||
|
|
ad1e207ee1 | ||
|
|
f9cb07ee4c | ||
|
|
f5ec5b0e47 | ||
|
|
ba8b85972e | ||
|
|
766f678321 | ||
|
|
c69c4afd25 | ||
|
|
516d8d7a0f | ||
|
|
a0c93900e9 | ||
|
|
a11f282a43 | ||
|
|
cac6b4ec59 | ||
|
|
eba96a55d2 | ||
|
|
37f4585110 | ||
|
|
e6931434b0 | ||
|
|
eec763bed0 | ||
|
|
fa62363628 | ||
|
|
0bbb5a1c74 | ||
|
|
064e440d00 | ||
|
|
129b85a8cf | ||
|
|
586154d4e1 | ||
|
|
b819231a01 | ||
|
|
3ec9eba736 | ||
|
|
75d4bc2b61 | ||
|
|
a5ac56be7a | ||
|
|
fe46d8c22d | ||
|
|
93cbd51d5b | ||
|
|
0b99873194 | ||
|
|
8113c7da22 | ||
|
|
85023dab51 | ||
|
|
f8ab3dc4b9 | ||
|
|
fedabe4889 | ||
|
|
eba19d8e42 | ||
|
|
e180a3bc44 | ||
|
|
a1a465708f | ||
|
|
346d6c6a0a | ||
|
|
c76813cbcb | ||
|
|
e7f551dab6 | ||
|
|
d8b2a37228 | ||
|
|
af3950fafc | ||
|
|
b20bf9c658 | ||
|
|
8c5e340ad0 | ||
|
|
f3cd063816 | ||
|
|
5adfa3cb45 | ||
|
|
3398fe9361 | ||
|
|
2afc25d51f | ||
|
|
8c5d5c6679 | ||
|
|
fca66c5b56 | ||
|
|
d38ca1a7fc | ||
|
|
b3bedd720f | ||
|
|
b0858920d5 | ||
|
|
e4e365b701 | ||
|
|
c4315713b5 | ||
|
|
047ea2c66d | ||
|
|
5e6eb400b5 | ||
|
|
db7880cab5 | ||
|
|
3909095a2c | ||
|
|
6685b88695 | ||
|
|
6076a7ecc7 | ||
|
|
cc351a4817 | ||
|
|
9217a0fb79 | ||
|
|
5abaa2e7e3 | ||
|
|
c3b8285584 | ||
|
|
bf2667827b | ||
|
|
3b7283a13f | ||
|
|
5aaca69e91 | ||
|
|
8be52ab1ad | ||
|
|
447fe2c2e3 | ||
|
|
0ecbbdf669 | ||
|
|
efce5888d7 | ||
|
|
ab93083a9d | ||
|
|
f757401d65 | ||
|
|
1e5d52098c | ||
|
|
152b703389 | ||
|
|
b0cf05fa5f | ||
|
|
e07f2ff160 | ||
|
|
2bb60e2cec | ||
|
|
f0d070b857 | ||
|
|
732de1a5bc | ||
|
|
5d7701275b | ||
|
|
8f557e460d | ||
|
|
148f0121df | ||
|
|
8eb2e58891 | ||
|
|
3ac7216e63 | ||
|
|
80f58e1e07 | ||
|
|
5446706286 | ||
|
|
79ed7e4b73 | ||
|
|
94d95ac5d2 | ||
|
|
a39b457888 | ||
|
|
94ff34d0df | ||
|
|
ff4648b7f3 | ||
|
|
acedb5fb55 | ||
|
|
4bd39e7bae | ||
|
|
5c2cf61455 | ||
|
|
10b47eae33 | ||
|
|
c61b0e766a | ||
|
|
9ff1d088c5 | ||
|
|
be803ced6f | ||
|
|
5949e9e32e | ||
|
|
bb3276bbbd | ||
|
|
b7a09989cb | ||
|
|
039d046649 | ||
|
|
58301651e4 | ||
|
|
b848c2d1bf | ||
|
|
9e2bb23d35 | ||
|
|
eb848fd70f | ||
|
|
176fffff0b | ||
|
|
14e13edeef | ||
|
|
4f70196444 | ||
|
|
acc715de82 | ||
|
|
5bfb5f486f | ||
|
|
6fbd785a87 | ||
|
|
75b1c63884 | ||
|
|
ad0808008a | ||
|
|
fcf75b06bf | ||
|
|
b8d47cdce3 | ||
|
|
8301f04b58 | ||
|
|
34942ac799 | ||
|
|
599f11683d | ||
|
|
55c699f841 | ||
|
|
3a7f922d90 | ||
|
|
352716319f | ||
|
|
5162f13372 | ||
|
|
cbe8cc82c6 | ||
|
|
c02010ea58 | ||
|
|
45e39b21ec | ||
|
|
7cbaf9c055 | ||
|
|
555f18d8df | ||
|
|
f915c68a4b | ||
|
|
da9ddcb382 | ||
|
|
55e6283075 | ||
|
|
e56b9dce35 | ||
|
|
363be950f0 | ||
|
|
0f1a06ca32 | ||
|
|
24957ea881 | ||
|
|
0be065bbef | ||
|
|
10118f4350 | ||
|
|
ac435455a0 | ||
|
|
929cd08718 | ||
|
|
299e7bfabe | ||
|
|
3465f053f5 | ||
|
|
18801eb4ff | ||
|
|
87e14ba12f | ||
|
|
438a519c65 | ||
|
|
572ea7c2be | ||
|
|
fc8b5af5fe | ||
|
|
554dfc5b0e | ||
|
|
4855fdb50d | ||
|
|
4dbb536922 | ||
|
|
154f46d6b8 | ||
|
|
bb8ac9696f | ||
|
|
41b5e5d8b9 | ||
|
|
e07b2325c1 | ||
|
|
8c9c85c1c7 | ||
|
|
2d38e509f0 | ||
|
|
4396108113 | ||
|
|
f82c15ca98 | ||
|
|
1a09b112b6 | ||
|
|
c70c488648 | ||
|
|
91db277446 | ||
|
|
35ce20391c | ||
|
|
783ba03e92 | ||
|
|
e344d3661c | ||
|
|
c62418069d | ||
|
|
41611d2682 | ||
|
|
cf8043a22e | ||
|
|
2521412747 | ||
|
|
199483be82 | ||
|
|
821b2b4415 | ||
|
|
866ae47dd4 | ||
|
|
fbc8133a86 | ||
|
|
7044b6e017 | ||
|
|
3ff140101d | ||
|
|
c4b6528bf0 | ||
|
|
7a85e33791 | ||
|
|
bbfffb97a5 | ||
|
|
4306b4018d | ||
|
|
3722533431 | ||
|
|
f773af17b2 | ||
|
|
56b4490554 | ||
|
|
b45842d76a | ||
|
|
ea279ace89 | ||
|
|
034061e744 | ||
|
|
dd07ba4453 | ||
|
|
380aa4bc0f | ||
|
|
aca721e9ee | ||
|
|
42e546904f | ||
|
|
4045824bf1 | ||
|
|
738cbfd1ae | ||
|
|
278c3cc2d8 | ||
|
|
14a7ac2618 | ||
|
|
a7699361c1 | ||
|
|
82a0893036 | ||
|
|
f9b59d7634 | ||
|
|
f279536eb7 | ||
|
|
8f34c7cd2e | ||
|
|
f922f669a8 | ||
|
|
2694d60faf | ||
|
|
a326994459 | ||
|
|
4c8d1ef010 | ||
|
|
86a9a0aac6 | ||
|
|
5059ed2320 | ||
|
|
df65c60fe4 | ||
|
|
cff2c90041 | ||
|
|
88d1494e46 | ||
|
|
8b62b8f3c5 | ||
|
|
cd38bc3a65 | ||
|
|
46d25645c2 | ||
|
|
3701737eff | ||
|
|
b39e296684 | ||
|
|
d8a7620c64 | ||
|
|
7d5900de18 | ||
|
|
e8b3b936df | ||
|
|
5c246310f4 | ||
|
|
bdad2cc941 | ||
|
|
f23c33fee7 | ||
|
|
5b207cf5bd | ||
|
|
f20c9e4ec9 | ||
|
|
1398ff8397 | ||
|
|
ebc3512f50 | ||
|
|
564a8136a5 | ||
|
|
00047c95b8 | ||
|
|
9849ce79a7 | ||
|
|
cea9858193 | ||
|
|
ee8ea672ef | ||
|
|
fc59910bd2 | ||
|
|
20ab7bc005 | ||
|
|
17de8e761b | ||
|
|
ab1e1cc66e | ||
|
|
256143af42 | ||
|
|
5dc244a8c1 | ||
|
|
9f15ca6242 | ||
|
|
750b904abc | ||
|
|
96b5411d1d | ||
|
|
a3404102ce | ||
|
|
374c4492d9 | ||
|
|
3cfe86512d | ||
|
|
47e3e415b9 | ||
|
|
3373533725 | ||
|
|
62c7c329d7 | ||
|
|
da04899558 | ||
|
|
e49f09b5ec | ||
|
|
53efcdc9df | ||
|
|
d9e53d5a16 | ||
|
|
8699013eef | ||
|
|
e3af8ad287 | ||
|
|
f2970522a9 | ||
|
|
e1a45c4831 | ||
|
|
d258ff476f | ||
|
|
a0ea2263a6 | ||
|
|
d29e4cf4a2 | ||
|
|
6095defed4 | ||
|
|
edd88d33d5 | ||
|
|
fd67210906 | ||
|
|
393e9bd868 | ||
|
|
339863366c | ||
|
|
d8db023931 | ||
|
|
71ccc82853 | ||
|
|
4d837d82d8 | ||
|
|
59792ad8b9 | ||
|
|
020796d411 | ||
|
|
cc7461d959 | ||
|
|
0fc12576c0 | ||
|
|
02337ad9be | ||
|
|
90c0ea3b2d | ||
|
|
37c1502f5b | ||
|
|
193c3b305a | ||
|
|
4dfa649a81 | ||
|
|
3233646831 | ||
|
|
b122de1f99 | ||
|
|
c3d34736e8 | ||
|
|
a77c95750c | ||
|
|
e10b7fba82 | ||
|
|
dd37770b86 | ||
|
|
c85809e512 | ||
|
|
edb86a7150 | ||
|
|
d0e107d707 | ||
|
|
187ccc4f1c | ||
|
|
20cecec4ad | ||
|
|
8c28126479 | ||
|
|
85213ea8b0 | ||
|
|
1858aeee03 | ||
|
|
7ce4313ba4 | ||
|
|
fd498b0efb | ||
|
|
cdbcf098d2 | ||
|
|
fddc47064d | ||
|
|
16ae89cd88 | ||
|
|
f2d88b7b4f | ||
|
|
187c96f777 | ||
|
|
f974ac4773 | ||
|
|
869985dc60 | ||
|
|
1e391e22ce | ||
|
|
dae03cf80e | ||
|
|
1edcc106e3 | ||
|
|
34eb094143 | ||
|
|
683c0d4e8b | ||
|
|
9d8c544f83 | ||
|
|
5967d51769 | ||
|
|
c37af920df | ||
|
|
5f08bf2e98 | ||
|
|
a2dc3f44d3 | ||
|
|
9e9dfd6947 | ||
|
|
774bbbc6d5 | ||
|
|
c7a1d4bd13 | ||
|
|
a6d56700d9 | ||
|
|
ed22dc806d | ||
|
|
b129614679 | ||
|
|
154374a2d1 | ||
|
|
5ec5f980dc | ||
|
|
b83c378667 | ||
|
|
981e62d53d | ||
|
|
03028a9a9b | ||
|
|
c080821e31 | ||
|
|
2f546ec277 | ||
|
|
56d8ed38b0 | ||
|
|
c0fde54d73 | ||
|
|
95a7cb1242 | ||
|
|
7d79a15ddf | ||
|
|
86f54e3244 | ||
|
|
06e81e1077 | ||
|
|
6c545e962a | ||
|
|
9c4f82db66 | ||
|
|
1dd067924a | ||
|
|
6565e20dc1 | ||
|
|
0d6f5560ff | ||
|
|
2f7c7c4ea7 | ||
|
|
b7f94befba | ||
|
|
dc3029822b | ||
|
|
3fb677d768 | ||
|
|
e2a83549cb | ||
|
|
3911b09d1d | ||
|
|
c24e9ead1c | ||
|
|
603d5b8f5e | ||
|
|
4fd70137b4 | ||
|
|
7398ffd9f4 | ||
|
|
f1c765c534 | ||
|
|
40aa06940c | ||
|
|
117786376a | ||
|
|
c5a635cdd7 | ||
|
|
165e3f22cd | ||
|
|
2561a50d05 | ||
|
|
6db5479b26 | ||
|
|
e74ddff49a |
250
.github/changelogs/2026/02.md
generated
vendored
250
.github/changelogs/2026/02.md
generated
vendored
@@ -1,3 +1,253 @@
|
|||||||
|
## 2026-02-28
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Update Reactive Resume install script with useful .env information for reverse proxy setup [@Mazianni](https://github.com/Mazianni) ([#12401](https://github.com/community-scripts/ProxmoxVE/pull/12401))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- gramps-web: install addons (FilterRules) for relationship diagram [@MickLesk](https://github.com/MickLesk) ([#12387](https://github.com/community-scripts/ProxmoxVE/pull/12387))
|
||||||
|
- [Fix] Immich: Change `sed` command to fully replace line in postgresql.conf [@vhsdream](https://github.com/vhsdream) ([#12429](https://github.com/community-scripts/ProxmoxVE/pull/12429))
|
||||||
|
- [FIX] Immich: fix Openvino memory leak during OCR; improve HW-accelerated ML performance [@vhsdream](https://github.com/vhsdream) ([#12426](https://github.com/community-scripts/ProxmoxVE/pull/12426))
|
||||||
|
- Fix default tag for ioBroker LXC install [@josefglatz](https://github.com/josefglatz) ([#12423](https://github.com/community-scripts/ProxmoxVE/pull/12423))
|
||||||
|
- Ombi: Add database.json [@hraphael](https://github.com/hraphael) ([#12412](https://github.com/community-scripts/ProxmoxVE/pull/12412))
|
||||||
|
- Dawarich: add missing build deps and handle seed failure [@MickLesk](https://github.com/MickLesk) ([#12410](https://github.com/community-scripts/ProxmoxVE/pull/12410))
|
||||||
|
- pangolin: increase hdd to 10G [@MickLesk](https://github.com/MickLesk) ([#12409](https://github.com/community-scripts/ProxmoxVE/pull/12409))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- BookLore: add additional JVM flags [@vhsdream](https://github.com/vhsdream) ([#12421](https://github.com/community-scripts/ProxmoxVE/pull/12421))
|
||||||
|
|
||||||
|
### 🗑️ Deleted Scripts
|
||||||
|
|
||||||
|
- Delete Palmr [@vhsdream](https://github.com/vhsdream) ([#12399](https://github.com/community-scripts/ProxmoxVE/pull/12399))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- core: read from /dev/tty in all interactive prompts | fix empty or cropped logs due build process [@MickLesk](https://github.com/MickLesk) ([#12406](https://github.com/community-scripts/ProxmoxVE/pull/12406))
|
||||||
|
|
||||||
|
## 2026-02-27
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Strapi ([#12320](https://github.com/community-scripts/ProxmoxVE/pull/12320))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- TrueNAS VM: filter out new nightlies with MASTER [@juronja](https://github.com/juronja) ([#12355](https://github.com/community-scripts/ProxmoxVE/pull/12355))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- core: graceful fallback for apt-get update failures [@MickLesk](https://github.com/MickLesk) ([#12386](https://github.com/community-scripts/ProxmoxVE/pull/12386))
|
||||||
|
- core: Improve error outputs across core functions [@MickLesk](https://github.com/MickLesk) ([#12378](https://github.com/community-scripts/ProxmoxVE/pull/12378))
|
||||||
|
|
||||||
|
## 2026-02-26
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Kima-Hub ([#12319](https://github.com/community-scripts/ProxmoxVE/pull/12319))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- tools.func: update glx alternatives / nvidia alternative if nvidia glx are missing [@MickLesk](https://github.com/MickLesk) ([#12372](https://github.com/community-scripts/ProxmoxVE/pull/12372))
|
||||||
|
- hotfix: overseer version [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12366](https://github.com/community-scripts/ProxmoxVE/pull/12366))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Add ffmpeg for booklore (ffprobe) [@MickLesk](https://github.com/MickLesk) ([#12371](https://github.com/community-scripts/ProxmoxVE/pull/12371))
|
||||||
|
- [QOL] Immich: add warning regarding library compilation time [@vhsdream](https://github.com/vhsdream) ([#12345](https://github.com/community-scripts/ProxmoxVE/pull/12345))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Improves adguardhome-sync addon when running on alpine LXCs [@Darkangeel-hd](https://github.com/Darkangeel-hd) ([#12362](https://github.com/community-scripts/ProxmoxVE/pull/12362))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Add Alpine support and improve Tailscale install [@MickLesk](https://github.com/MickLesk) ([#12370](https://github.com/community-scripts/ProxmoxVE/pull/12370))
|
||||||
|
|
||||||
|
### 📚 Documentation
|
||||||
|
|
||||||
|
- fix wrong link on contributions README.md [@Darkangeel-hd](https://github.com/Darkangeel-hd) ([#12363](https://github.com/community-scripts/ProxmoxVE/pull/12363))
|
||||||
|
|
||||||
|
### 📂 Github
|
||||||
|
|
||||||
|
- github: add workflow to autom. close unauthorized new-script PRs [@MickLesk](https://github.com/MickLesk) ([#12356](https://github.com/community-scripts/ProxmoxVE/pull/12356))
|
||||||
|
|
||||||
|
## 2026-02-25
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Zerobyte ([#12321](https://github.com/community-scripts/ProxmoxVE/pull/12321))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fix: overseer migration [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12340](https://github.com/community-scripts/ProxmoxVE/pull/12340))
|
||||||
|
- add: vikunja: daemon reload [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12323](https://github.com/community-scripts/ProxmoxVE/pull/12323))
|
||||||
|
- opnsense-VM: Use ip link to verify bridge existence [@MickLesk](https://github.com/MickLesk) ([#12329](https://github.com/community-scripts/ProxmoxVE/pull/12329))
|
||||||
|
- wger: Use $http_host for proxy Host header [@MickLesk](https://github.com/MickLesk) ([#12327](https://github.com/community-scripts/ProxmoxVE/pull/12327))
|
||||||
|
- Passbolt: Update Nginx config `client_max_body_size` [@tremor021](https://github.com/tremor021) ([#12313](https://github.com/community-scripts/ProxmoxVE/pull/12313))
|
||||||
|
- Zammad: configure Elasticsearch before zammad start [@MickLesk](https://github.com/MickLesk) ([#12308](https://github.com/community-scripts/ProxmoxVE/pull/12308))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- OpenProject: Various fixes [@tremor021](https://github.com/tremor021) ([#12246](https://github.com/community-scripts/ProxmoxVE/pull/12246))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Fix detection of ssh keys [@1-tempest](https://github.com/1-tempest) ([#12230](https://github.com/community-scripts/ProxmoxVE/pull/12230))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools.func: Improve GitHub/Codeberg API error handling and error output [@MickLesk](https://github.com/MickLesk) ([#12330](https://github.com/community-scripts/ProxmoxVE/pull/12330))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- core: remove duplicate traps, consolidate error handling and harden signal traps [@MickLesk](https://github.com/MickLesk) ([#12316](https://github.com/community-scripts/ProxmoxVE/pull/12316))
|
||||||
|
|
||||||
|
### 📂 Github
|
||||||
|
|
||||||
|
- github: improvements for node drift wf [@MickLesk](https://github.com/MickLesk) ([#12309](https://github.com/community-scripts/ProxmoxVE/pull/12309))
|
||||||
|
|
||||||
|
## 2026-02-24
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- several scripts: add additional github link in source [@MickLesk](https://github.com/MickLesk) ([#12282](https://github.com/community-scripts/ProxmoxVE/pull/12282))
|
||||||
|
- adds further documentation during the installation script. [@d12rio](https://github.com/d12rio) ([#12248](https://github.com/community-scripts/ProxmoxVE/pull/12248))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- [Fix] PatchMon: remove VITE_API_URL from frontend env [@vhsdream](https://github.com/vhsdream) ([#12294](https://github.com/community-scripts/ProxmoxVE/pull/12294))
|
||||||
|
- fix(searxng): remove orphaned fi causing syntax error [@mark-jeffrey](https://github.com/mark-jeffrey) ([#12283](https://github.com/community-scripts/ProxmoxVE/pull/12283))
|
||||||
|
- Refactor n8n [@MickLesk](https://github.com/MickLesk) ([#12264](https://github.com/community-scripts/ProxmoxVE/pull/12264))
|
||||||
|
- Firefly: PHP bump [@tremor021](https://github.com/tremor021) ([#12247](https://github.com/community-scripts/ProxmoxVE/pull/12247))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Databasus: add mariadb path for mysql/mariadb backups | add mongodb database tools [@MickLesk](https://github.com/MickLesk) ([#12259](https://github.com/community-scripts/ProxmoxVE/pull/12259))
|
||||||
|
- make searxng updateable [@shtefko](https://github.com/shtefko) ([#12207](https://github.com/community-scripts/ProxmoxVE/pull/12207))
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- fix: wealthfolio for v3 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11765](https://github.com/community-scripts/ProxmoxVE/pull/11765))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- bump various scripts from Node 22 to 24 [@MickLesk](https://github.com/MickLesk) ([#12265](https://github.com/community-scripts/ProxmoxVE/pull/12265))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- core: fix broken "command not found" after err_trap [@MickLesk](https://github.com/MickLesk) ([#12280](https://github.com/community-scripts/ProxmoxVE/pull/12280))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools.func: add get_latest_gh_tag helper function [@MickLesk](https://github.com/MickLesk) ([#12261](https://github.com/community-scripts/ProxmoxVE/pull/12261))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- Arcane ([#12263](https://github.com/community-scripts/ProxmoxVE/pull/12263))
|
||||||
|
|
||||||
|
### 📂 Github
|
||||||
|
|
||||||
|
- github: add weekly Node.js version drift check workflow [@MickLesk](https://github.com/MickLesk) ([#12267](https://github.com/community-scripts/ProxmoxVE/pull/12267))
|
||||||
|
- add: workflow to close stale PRs [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12243](https://github.com/community-scripts/ProxmoxVE/pull/12243))
|
||||||
|
|
||||||
|
## 2026-02-23
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- SeaweedFS ([#12220](https://github.com/community-scripts/ProxmoxVE/pull/12220))
|
||||||
|
- Sonobarr ([#12221](https://github.com/community-scripts/ProxmoxVE/pull/12221))
|
||||||
|
- SparkyFitness ([#12185](https://github.com/community-scripts/ProxmoxVE/pull/12185))
|
||||||
|
- Frigate v16.4 [@MickLesk](https://github.com/MickLesk) ([#11887](https://github.com/community-scripts/ProxmoxVE/pull/11887))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- memos: unpin version due new release artifacts [@MickLesk](https://github.com/MickLesk) ([#12224](https://github.com/community-scripts/ProxmoxVE/pull/12224))
|
||||||
|
- core: Enhance signal handling, reported "status" and logs [@MickLesk](https://github.com/MickLesk) ([#12216](https://github.com/community-scripts/ProxmoxVE/pull/12216))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- booklore v2: embed frontend, bump Java to 25, remove nginx [@MickLesk](https://github.com/MickLesk) ([#12223](https://github.com/community-scripts/ProxmoxVE/pull/12223))
|
||||||
|
|
||||||
|
### 🗑️ Deleted Scripts
|
||||||
|
|
||||||
|
- Remove: Huntarr (deprecated & Security) [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12226](https://github.com/community-scripts/ProxmoxVE/pull/12226))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- core: Improve error handling and logging for LXC builds [@MickLesk](https://github.com/MickLesk) ([#12208](https://github.com/community-scripts/ProxmoxVE/pull/12208))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- calibre-web: update default credentials [@LaevaertK](https://github.com/LaevaertK) ([#12201](https://github.com/community-scripts/ProxmoxVE/pull/12201))
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- chore: update Frigate documentation and website URLs [@JohnICB](https://github.com/JohnICB) ([#12218](https://github.com/community-scripts/ProxmoxVE/pull/12218))
|
||||||
|
|
||||||
|
## 2026-02-22
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Gramps-Web ([#12157](https://github.com/community-scripts/ProxmoxVE/pull/12157))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fix: Apache Guacamole - bump to Temurin JDK 17 to resolve Debian 13 (Trixie) install failure [@Copilot](https://github.com/Copilot) ([#12161](https://github.com/community-scripts/ProxmoxVE/pull/12161))
|
||||||
|
- Docker-VM: add error handling for virt-customize finalization [@MickLesk](https://github.com/MickLesk) ([#12127](https://github.com/community-scripts/ProxmoxVE/pull/12127))
|
||||||
|
- [Fix] Sure: add Sidekiq service [@vhsdream](https://github.com/vhsdream) ([#12186](https://github.com/community-scripts/ProxmoxVE/pull/12186))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Refactor & Bump to v2: Plex [@MickLesk](https://github.com/MickLesk) ([#12179](https://github.com/community-scripts/ProxmoxVE/pull/12179))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- karakeep: bump to node 24 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12183](https://github.com/community-scripts/ProxmoxVE/pull/12183))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools.func: add GitHub API rate-limit detection and GITHUB_TOKEN support [@MickLesk](https://github.com/MickLesk) ([#12176](https://github.com/community-scripts/ProxmoxVE/pull/12176))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- CR*NMASTER ([#12065](https://github.com/community-scripts/ProxmoxVE/pull/12065))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Update package management commands in clean-lxcs.sh [@heinemannj](https://github.com/heinemannj) ([#12166](https://github.com/community-scripts/ProxmoxVE/pull/12166))
|
||||||
|
|
||||||
|
### ❔ Uncategorized
|
||||||
|
|
||||||
|
- calibre-web: Update logo URL [@MickLesk](https://github.com/MickLesk) ([#12178](https://github.com/community-scripts/ProxmoxVE/pull/12178))
|
||||||
|
|
||||||
## 2026-02-21
|
## 2026-02-21
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|||||||
183
.github/changelogs/2026/03.md
generated
vendored
Normal file
183
.github/changelogs/2026/03.md
generated
vendored
Normal file
@@ -0,0 +1,183 @@
|
|||||||
|
## 2026-03-07
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- ImmichFrame ([#12653](https://github.com/community-scripts/ProxmoxVE/pull/12653))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Grocy: bump PHP version from 8.3 to 8.5 [@MickLesk](https://github.com/MickLesk) ([#12651](https://github.com/community-scripts/ProxmoxVE/pull/12651))
|
||||||
|
- Check for influxdb3 installation in update_script [@odin568](https://github.com/odin568) ([#12648](https://github.com/community-scripts/ProxmoxVE/pull/12648))
|
||||||
|
- Update Rdtclient to dotnet 10.0 [@asylumexp](https://github.com/asylumexp) ([#12638](https://github.com/community-scripts/ProxmoxVE/pull/12638))
|
||||||
|
- fix(immich): fix update script failing to add Debian testing repo when preferences file already exists [@Copilot](https://github.com/Copilot) ([#12631](https://github.com/community-scripts/ProxmoxVE/pull/12631))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools: add interactive GitHub PAT prompt on rate limit / auth failure [@MickLesk](https://github.com/MickLesk) ([#12652](https://github.com/community-scripts/ProxmoxVE/pull/12652))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- Papra: update repository URL to papra-hq/papra [@MickLesk](https://github.com/MickLesk) ([#12650](https://github.com/community-scripts/ProxmoxVE/pull/12650))
|
||||||
|
|
||||||
|
## 2026-03-06
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- RustDesk Server: Fix update script [@tremor021](https://github.com/tremor021) ([#12625](https://github.com/community-scripts/ProxmoxVE/pull/12625))
|
||||||
|
- [Node-RED] Restart service after update [@Aurelien30000](https://github.com/Aurelien30000) ([#12621](https://github.com/community-scripts/ProxmoxVE/pull/12621))
|
||||||
|
- wealthfolio: update cors [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12617](https://github.com/community-scripts/ProxmoxVE/pull/12617))
|
||||||
|
- CryptPad: Better update handling [@tremor021](https://github.com/tremor021) ([#12611](https://github.com/community-scripts/ProxmoxVE/pull/12611))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- RustDesk Server: Switch to updated repository [@tremor021](https://github.com/tremor021) ([#12083](https://github.com/community-scripts/ProxmoxVE/pull/12083))
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- Semaphore: Move from BoltDB to SQLite [@tremor021](https://github.com/tremor021) ([#12624](https://github.com/community-scripts/ProxmoxVE/pull/12624))
|
||||||
|
|
||||||
|
## 2026-03-05
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- ddclient ([#12587](https://github.com/community-scripts/ProxmoxVE/pull/12587))
|
||||||
|
- Netbird ([#12585](https://github.com/community-scripts/ProxmoxVE/pull/12585))
|
||||||
|
- Papra ([#12577](https://github.com/community-scripts/ProxmoxVE/pull/12577))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fluid-calendar: add build-essential to install and update dependencies [@Copilot](https://github.com/Copilot) ([#12602](https://github.com/community-scripts/ProxmoxVE/pull/12602))
|
||||||
|
- Refactor: BentoPDF [@vhsdream](https://github.com/vhsdream) ([#12597](https://github.com/community-scripts/ProxmoxVE/pull/12597))
|
||||||
|
- Tianji: Fix the bug introduced by the refactor [@tremor021](https://github.com/tremor021) ([#12564](https://github.com/community-scripts/ProxmoxVE/pull/12564))
|
||||||
|
- PowerDNS: use 'launch=' instead of 'launch+=' for gsqlite3 backend [@MickLesk](https://github.com/MickLesk) ([#12579](https://github.com/community-scripts/ProxmoxVE/pull/12579))
|
||||||
|
|
||||||
|
### 🗑️ Deleted Scripts
|
||||||
|
|
||||||
|
- Suwayomi-Server: remove due to inactivity and very low usage [@MickLesk](https://github.com/MickLesk) ([#12596](https://github.com/community-scripts/ProxmoxVE/pull/12596))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- core: add var_os / var_version to whitelist for app.vars [@MickLesk](https://github.com/MickLesk) ([#12576](https://github.com/community-scripts/ProxmoxVE/pull/12576))
|
||||||
|
|
||||||
|
## 2026-03-04
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fix: gitea-mirror [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12549](https://github.com/community-scripts/ProxmoxVE/pull/12549))
|
||||||
|
- fix(immich): correct LibRaw clone URL to official upstream [@DenislavDenev](https://github.com/DenislavDenev) ([#12526](https://github.com/community-scripts/ProxmoxVE/pull/12526))
|
||||||
|
- update: stirling-pdf: java 25 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12552](https://github.com/community-scripts/ProxmoxVE/pull/12552))
|
||||||
|
- Docmost: register NoopAuditService globally when EE submodule is missing [@MickLesk](https://github.com/MickLesk) ([#12551](https://github.com/community-scripts/ProxmoxVE/pull/12551))
|
||||||
|
- jellyseer/overseer migration corrupting /usr/bin/update [@MickLesk](https://github.com/MickLesk) ([#12539](https://github.com/community-scripts/ProxmoxVE/pull/12539))
|
||||||
|
- PowerDNS: use gsqlite3 backend instead of BIND [@MickLesk](https://github.com/MickLesk) ([#12538](https://github.com/community-scripts/ProxmoxVE/pull/12538))
|
||||||
|
- addon migrations: /usr/bin/update replacement to prevent syntax error [@MickLesk](https://github.com/MickLesk) ([#12540](https://github.com/community-scripts/ProxmoxVE/pull/12540))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Fluid-Calendar: NodeJS bump [@tremor021](https://github.com/tremor021) ([#12558](https://github.com/community-scripts/ProxmoxVE/pull/12558))
|
||||||
|
- Refactor: LiteLLM [@tremor021](https://github.com/tremor021) ([#12550](https://github.com/community-scripts/ProxmoxVE/pull/12550))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- tools: fall back to distro packages for psql [@MickLesk](https://github.com/MickLesk) ([#12542](https://github.com/community-scripts/ProxmoxVE/pull/12542))
|
||||||
|
- fix: whitelist var_searchdomain and fix the handling of var_ns and va… [@tommoyer](https://github.com/tommoyer) ([#12521](https://github.com/community-scripts/ProxmoxVE/pull/12521))
|
||||||
|
|
||||||
|
## 2026-03-03
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Tinyauth: v5 Support & add Debian Version [@MickLesk](https://github.com/MickLesk) ([#12501](https://github.com/community-scripts/ProxmoxVE/pull/12501))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- cross-seed: install build-essential to resolve missing `make` error [@Copilot](https://github.com/Copilot) ([#12522](https://github.com/community-scripts/ProxmoxVE/pull/12522))
|
||||||
|
- meshcentral: increased disk space to 4GB [@MickLesk](https://github.com/MickLesk) ([#12509](https://github.com/community-scripts/ProxmoxVE/pull/12509))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- opnsense-vm: harden temp dir, bridge detection and network selection [@MickLesk](https://github.com/MickLesk) ([#12513](https://github.com/community-scripts/ProxmoxVE/pull/12513))
|
||||||
|
|
||||||
|
### 🗑️ Deleted Scripts
|
||||||
|
|
||||||
|
- Remove Unifi Network Server scripts (dead APT repo) [@Copilot](https://github.com/Copilot) ([#12500](https://github.com/community-scripts/ProxmoxVE/pull/12500))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- core: recovery - add ENOSPC disk-full detection with auto-retry using * 2 hdd [@MickLesk](https://github.com/MickLesk) ([#12511](https://github.com/community-scripts/ProxmoxVE/pull/12511))
|
||||||
|
|
||||||
|
### 📚 Documentation
|
||||||
|
|
||||||
|
- Fix config_path casing in reactive-resume.json [@ScubyG](https://github.com/ScubyG) ([#12525](https://github.com/community-scripts/ProxmoxVE/pull/12525))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Revert #11534 PR that messed up search [@BramSuurdje](https://github.com/BramSuurdje) ([#12492](https://github.com/community-scripts/ProxmoxVE/pull/12492))
|
||||||
|
|
||||||
|
## 2026-03-02
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- PowerDNS ([#12481](https://github.com/community-scripts/ProxmoxVE/pull/12481))
|
||||||
|
- Profilarr ([#12441](https://github.com/community-scripts/ProxmoxVE/pull/12441))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Tracearr: prepare for imminent v1.4.19 release [@durzo](https://github.com/durzo) ([#12413](https://github.com/community-scripts/ProxmoxVE/pull/12413))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Frigate: Bump to v0.17 [@MickLesk](https://github.com/MickLesk) ([#12474](https://github.com/community-scripts/ProxmoxVE/pull/12474))
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- Migrate: DokPloy, Komodo, Coolify, Dockge, Runtipi to Addons [@MickLesk](https://github.com/MickLesk) ([#12275](https://github.com/community-scripts/ProxmoxVE/pull/12275))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- ref: replace generic exit 1 with specific exit codes in ct & install [@MickLesk](https://github.com/MickLesk) ([#12475](https://github.com/community-scripts/ProxmoxVE/pull/12475))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools.func: Improve stability with retry logic, caching, and debug mode [@MickLesk](https://github.com/MickLesk) ([#10351](https://github.com/community-scripts/ProxmoxVE/pull/10351))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- core: standardize exit codes and add mappings [@MickLesk](https://github.com/MickLesk) ([#12467](https://github.com/community-scripts/ProxmoxVE/pull/12467))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- frontend: improve detail view badges, addon texts, and HTML title [@MickLesk](https://github.com/MickLesk) ([#12461](https://github.com/community-scripts/ProxmoxVE/pull/12461))
|
||||||
|
|
||||||
|
## 2026-03-01
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Sparkyfitness: use pnpm [@tomfrenzel](https://github.com/tomfrenzel) ([#12445](https://github.com/community-scripts/ProxmoxVE/pull/12445))
|
||||||
|
- OpenArchiver: Fix installation [@tremor021](https://github.com/tremor021) ([#12447](https://github.com/community-scripts/ProxmoxVE/pull/12447))
|
||||||
2
.github/workflows/autolabeler.yml
generated
vendored
2
.github/workflows/autolabeler.yml
generated
vendored
@@ -93,7 +93,7 @@ jobs:
|
|||||||
const websiteRegex = new RegExp(`- \\[(x|X)\\]\\s*${escapedWebsite}`, "i");
|
const websiteRegex = new RegExp(`- \\[(x|X)\\]\\s*${escapedWebsite}`, "i");
|
||||||
|
|
||||||
if (websiteRegex.test(prBody)) {
|
if (websiteRegex.test(prBody)) {
|
||||||
const hasJson = prFiles.some((f) => f.filename.startsWith("frontend/public/json/"));
|
const hasJson = prFiles.some((f) => f.filename.startsWith("json/"));
|
||||||
const hasUpdateScript = labelsToAdd.has("update script");
|
const hasUpdateScript = labelsToAdd.has("update script");
|
||||||
const hasContentLabel = ["bugfix", "feature", "refactor"].some((l) => labelsToAdd.has(l));
|
const hasContentLabel = ["bugfix", "feature", "refactor"].some((l) => labelsToAdd.has(l));
|
||||||
|
|
||||||
|
|||||||
5
.github/workflows/check-node-versions.yml
generated
vendored
5
.github/workflows/check-node-versions.yml
generated
vendored
@@ -214,11 +214,12 @@ jobs:
|
|||||||
total=$((total + 1))
|
total=$((total + 1))
|
||||||
slug=$(basename "$script" | sed 's/-install\.sh$//')
|
slug=$(basename "$script" | sed 's/-install\.sh$//')
|
||||||
|
|
||||||
# Extract Source URL (GitHub only)
|
# Extract Source URL (GitHub only) from the "# Source:" line
|
||||||
# Supports both:
|
# Supports both:
|
||||||
# # Source: https://github.com/owner/repo
|
# # Source: https://github.com/owner/repo
|
||||||
# # Source: https://example.com | Github: https://github.com/owner/repo
|
# # Source: https://example.com | Github: https://github.com/owner/repo
|
||||||
source_url=$(head -20 "$script" | grep -oP 'https://github\.com/[^\s|]+' | head -1 || echo "")
|
# NOTE: Must filter for "# Source:" line first to avoid matching the License URL
|
||||||
|
source_url=$(head -20 "$script" | grep -i '# Source:' | grep -oP 'https://github\.com/[^\s|]+' | head -1 || echo "")
|
||||||
if [[ -z "$source_url" ]]; then
|
if [[ -z "$source_url" ]]; then
|
||||||
report_lines+=("| \`$slug\` | — | — | — | — | ⏭️ No GitHub source |")
|
report_lines+=("| \`$slug\` | — | — | — | — | ⏭️ No GitHub source |")
|
||||||
continue
|
continue
|
||||||
|
|||||||
119
.github/workflows/close-new-script-prs.yml
generated
vendored
Normal file
119
.github/workflows/close-new-script-prs.yml
generated
vendored
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
name: Close Unauthorized New Script PRs
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request_target:
|
||||||
|
branches: ["main"]
|
||||||
|
types: [opened, labeled]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check-new-script:
|
||||||
|
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||||
|
runs-on: self-hosted
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
contents: read
|
||||||
|
steps:
|
||||||
|
- name: Close PR if unauthorized new script submission
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const pr = context.payload.pull_request;
|
||||||
|
const prNumber = pr.number;
|
||||||
|
const author = pr.user.login;
|
||||||
|
const authorType = pr.user.type; // "User" or "Bot"
|
||||||
|
const owner = context.repo.owner;
|
||||||
|
const repo = context.repo.repo;
|
||||||
|
|
||||||
|
// --- Only act on PRs with the "new script" label ---
|
||||||
|
const labels = pr.labels.map(l => l.name);
|
||||||
|
if (!labels.includes("new script")) {
|
||||||
|
core.info(`PR #${prNumber} does not have "new script" label — skipping.`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Allow our bots ---
|
||||||
|
const allowedBots = [
|
||||||
|
"push-app-to-main[bot]",
|
||||||
|
"push-app-to-main",
|
||||||
|
];
|
||||||
|
|
||||||
|
if (allowedBots.includes(author)) {
|
||||||
|
core.info(`PR #${prNumber} by allowed bot "${author}" — skipping.`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Check if author is a member of the contributor team ---
|
||||||
|
const teamSlug = "contributor";
|
||||||
|
let isMember = false;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const { status } = await github.rest.teams.getMembershipForUserInOrg({
|
||||||
|
org: owner,
|
||||||
|
team_slug: teamSlug,
|
||||||
|
username: author,
|
||||||
|
});
|
||||||
|
// status 200 means the user is a member (active or pending)
|
||||||
|
isMember = true;
|
||||||
|
} catch (error) {
|
||||||
|
if (error.status === 404) {
|
||||||
|
isMember = false;
|
||||||
|
} else {
|
||||||
|
core.warning(`Could not check team membership for ${author}: ${error.message}`);
|
||||||
|
// Fallback: check org membership
|
||||||
|
try {
|
||||||
|
await github.rest.orgs.checkMembershipForUser({
|
||||||
|
org: owner,
|
||||||
|
username: author,
|
||||||
|
});
|
||||||
|
isMember = true;
|
||||||
|
} catch {
|
||||||
|
isMember = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isMember) {
|
||||||
|
core.info(`PR #${prNumber} by contributor "${author}" — skipping.`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Unauthorized: close the PR with a comment ---
|
||||||
|
core.info(`Closing PR #${prNumber} by "${author}" — not a contributor or allowed bot.`);
|
||||||
|
|
||||||
|
const comment = [
|
||||||
|
`👋 Hi @${author},`,
|
||||||
|
``,
|
||||||
|
`Thank you for your interest in contributing a new script!`,
|
||||||
|
``,
|
||||||
|
`However, **new scripts must first be submitted to our development repository** for testing and review before they can be merged here.`,
|
||||||
|
``,
|
||||||
|
`> 🛑 New scripts must be submitted to [**ProxmoxVED**](https://github.com/community-scripts/ProxmoxVED) for testing.`,
|
||||||
|
`> PRs without prior testing will be closed.`,
|
||||||
|
``,
|
||||||
|
`Please open your PR at **https://github.com/community-scripts/ProxmoxVED** instead.`,
|
||||||
|
`Once your script has been tested and approved there, it will be pushed to this repository automatically.`,
|
||||||
|
``,
|
||||||
|
`This PR will now be closed. Thank you for understanding! 🙏`,
|
||||||
|
].join("\n");
|
||||||
|
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
issue_number: prNumber,
|
||||||
|
body: comment,
|
||||||
|
});
|
||||||
|
|
||||||
|
await github.rest.pulls.update({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
pull_number: prNumber,
|
||||||
|
state: "closed",
|
||||||
|
});
|
||||||
|
|
||||||
|
// Add a label to indicate why it was closed
|
||||||
|
await github.rest.issues.addLabels({
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
issue_number: prNumber,
|
||||||
|
labels: ["not a script issue"],
|
||||||
|
});
|
||||||
142
.github/workflows/close_issue_in_dev.yaml
generated
vendored
142
.github/workflows/close_issue_in_dev.yaml
generated
vendored
@@ -6,14 +6,14 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
close_issue:
|
close_issue:
|
||||||
if: github.event.pull_request.merged == true && github.repository == 'community-scripts/ProxmoxVE'
|
if: github.event.pull_request.merged == true && github.repository == 'community-scripts/ProxmoxVE'
|
||||||
runs-on: ubuntu-latest
|
runs-on: self-hosted
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout target repo (main)
|
- name: Checkout target repo (merge commit)
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
repository: community-scripts/ProxmoxVE
|
repository: community-scripts/ProxmoxVE
|
||||||
ref: main
|
ref: ${{ github.event.pull_request.merge_commit_sha }}
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Extract and Process PR Title
|
- name: Extract and Process PR Title
|
||||||
@@ -23,6 +23,39 @@ jobs:
|
|||||||
echo "Processed Title: $title"
|
echo "Processed Title: $title"
|
||||||
echo "title=$title" >> $GITHUB_ENV
|
echo "title=$title" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Get slugs from merged PR
|
||||||
|
id: get_slugs
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
pr_files=$(gh pr view ${{ github.event.pull_request.number }} --repo community-scripts/ProxmoxVE --json files -q '.files[].path' 2>/dev/null || true)
|
||||||
|
slugs=""
|
||||||
|
for path in $pr_files; do
|
||||||
|
[[ -f "$path" ]] || continue
|
||||||
|
if [[ "$path" == frontend/public/json/*.json ]]; then
|
||||||
|
s=$(jq -r '.slug // empty' "$path" 2>/dev/null)
|
||||||
|
[[ -n "$s" ]] && slugs="$slugs $s"
|
||||||
|
elif [[ "$path" == ct/*.sh ]] || [[ "$path" == install/*.sh ]] || [[ "$path" == tools/*.sh ]] || [[ "$path" == turnkey/*.sh ]] || [[ "$path" == vm/*.sh ]]; then
|
||||||
|
base=$(basename "$path" .sh)
|
||||||
|
if [[ "$path" == install/* && "$base" == *-install ]]; then
|
||||||
|
s="${base%-install}"
|
||||||
|
else
|
||||||
|
s="$base"
|
||||||
|
fi
|
||||||
|
[[ -n "$s" ]] && slugs="$slugs $s"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
slugs=$(echo $slugs | xargs -n1 | sort -u | tr '\n' ' ')
|
||||||
|
if [[ -z "$slugs" && -n "$title" ]]; then
|
||||||
|
slugs="$title"
|
||||||
|
fi
|
||||||
|
if [[ -z "$slugs" ]]; then
|
||||||
|
echo "count=0" >> "$GITHUB_OUTPUT"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
echo "$slugs" > pocketbase_slugs.txt
|
||||||
|
echo "count=$(echo $slugs | wc -w)" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
- name: Search for Issues with Similar Titles
|
- name: Search for Issues with Similar Titles
|
||||||
id: find_issue
|
id: find_issue
|
||||||
env:
|
env:
|
||||||
@@ -63,3 +96,104 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
gh issue comment $issue_number --repo community-scripts/ProxmoxVED --body "Merged with #${{ github.event.pull_request.number }} in ProxmoxVE"
|
gh issue comment $issue_number --repo community-scripts/ProxmoxVED --body "Merged with #${{ github.event.pull_request.number }} in ProxmoxVE"
|
||||||
gh issue close $issue_number --repo community-scripts/ProxmoxVED
|
gh issue close $issue_number --repo community-scripts/ProxmoxVED
|
||||||
|
|
||||||
|
- name: Set is_dev to false in PocketBase
|
||||||
|
if: steps.get_slugs.outputs.count != '0'
|
||||||
|
env:
|
||||||
|
POCKETBASE_URL: ${{ secrets.POCKETBASE_URL }}
|
||||||
|
POCKETBASE_COLLECTION: ${{ secrets.POCKETBASE_COLLECTION }}
|
||||||
|
POCKETBASE_ADMIN_EMAIL: ${{ secrets.POCKETBASE_ADMIN_EMAIL }}
|
||||||
|
POCKETBASE_ADMIN_PASSWORD: ${{ secrets.POCKETBASE_ADMIN_PASSWORD }}
|
||||||
|
PR_URL: ${{ github.server_url }}/${{ github.repository }}/pull/${{ github.event.pull_request.number }}
|
||||||
|
run: |
|
||||||
|
node << 'ENDSCRIPT'
|
||||||
|
(async function() {
|
||||||
|
const fs = require('fs');
|
||||||
|
const https = require('https');
|
||||||
|
const http = require('http');
|
||||||
|
const url = require('url');
|
||||||
|
|
||||||
|
function request(fullUrl, opts) {
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
const u = url.parse(fullUrl);
|
||||||
|
const isHttps = u.protocol === 'https:';
|
||||||
|
const body = opts.body;
|
||||||
|
const options = {
|
||||||
|
hostname: u.hostname,
|
||||||
|
port: u.port || (isHttps ? 443 : 80),
|
||||||
|
path: u.path,
|
||||||
|
method: opts.method || 'GET',
|
||||||
|
headers: opts.headers || {}
|
||||||
|
};
|
||||||
|
if (body) options.headers['Content-Length'] = Buffer.byteLength(body);
|
||||||
|
const lib = isHttps ? https : http;
|
||||||
|
const req = lib.request(options, function(res) {
|
||||||
|
let data = '';
|
||||||
|
res.on('data', function(chunk) { data += chunk; });
|
||||||
|
res.on('end', function() {
|
||||||
|
resolve({ ok: res.statusCode >= 200 && res.statusCode < 300, statusCode: res.statusCode, body: data });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
req.on('error', reject);
|
||||||
|
if (body) req.write(body);
|
||||||
|
req.end();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const raw = process.env.POCKETBASE_URL.replace(/\/$/, '');
|
||||||
|
const apiBase = /\/api$/i.test(raw) ? raw : raw + '/api';
|
||||||
|
const coll = process.env.POCKETBASE_COLLECTION;
|
||||||
|
const slugsText = fs.readFileSync('pocketbase_slugs.txt', 'utf8').trim();
|
||||||
|
const slugs = slugsText ? slugsText.split(/\s+/).filter(Boolean) : [];
|
||||||
|
if (slugs.length === 0) {
|
||||||
|
console.log('No slugs to update.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const authUrl = apiBase + '/collections/users/auth-with-password';
|
||||||
|
const authBody = JSON.stringify({
|
||||||
|
identity: process.env.POCKETBASE_ADMIN_EMAIL,
|
||||||
|
password: process.env.POCKETBASE_ADMIN_PASSWORD
|
||||||
|
});
|
||||||
|
const authRes = await request(authUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
body: authBody
|
||||||
|
});
|
||||||
|
if (!authRes.ok) {
|
||||||
|
throw new Error('Auth failed: ' + authRes.body);
|
||||||
|
}
|
||||||
|
const token = JSON.parse(authRes.body).token;
|
||||||
|
const recordsUrl = apiBase + '/collections/' + encodeURIComponent(coll) + '/records';
|
||||||
|
const prUrl = process.env.PR_URL || '';
|
||||||
|
|
||||||
|
for (const slug of slugs) {
|
||||||
|
const filter = "(slug='" + slug.replace(/'/g, "''") + "')";
|
||||||
|
const listRes = await request(recordsUrl + '?filter=' + encodeURIComponent(filter) + '&perPage=1', {
|
||||||
|
headers: { 'Authorization': token }
|
||||||
|
});
|
||||||
|
const list = JSON.parse(listRes.body);
|
||||||
|
const record = list.items && list.items[0];
|
||||||
|
if (!record) {
|
||||||
|
console.log('Slug not in DB, skipping: ' + slug);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const patchRes = await request(recordsUrl + '/' + record.id, {
|
||||||
|
method: 'PATCH',
|
||||||
|
headers: { 'Authorization': token, 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify({
|
||||||
|
name: record.name || record.slug,
|
||||||
|
last_update_commit: prUrl,
|
||||||
|
is_dev: false
|
||||||
|
})
|
||||||
|
});
|
||||||
|
if (!patchRes.ok) {
|
||||||
|
console.warn('PATCH failed for slug ' + slug + ': ' + patchRes.body);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
console.log('Set is_dev=false for slug: ' + slug);
|
||||||
|
}
|
||||||
|
console.log('Done.');
|
||||||
|
})().catch(e => { console.error(e); process.exit(1); });
|
||||||
|
ENDSCRIPT
|
||||||
|
shell: bash
|
||||||
|
|||||||
150
.github/workflows/delete-pocketbase-entry-on-removal.yml
generated
vendored
Normal file
150
.github/workflows/delete-pocketbase-entry-on-removal.yml
generated
vendored
Normal file
@@ -0,0 +1,150 @@
|
|||||||
|
name: Delete PocketBase entry on script/JSON removal
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths:
|
||||||
|
- "json/**"
|
||||||
|
- "vm/**"
|
||||||
|
- "tools/**"
|
||||||
|
- "turnkey/**"
|
||||||
|
- "ct/**"
|
||||||
|
- "install/**"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
delete-pocketbase-entry:
|
||||||
|
runs-on: self-hosted
|
||||||
|
steps:
|
||||||
|
- name: Checkout Repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Get slugs from deleted JSON and script files
|
||||||
|
id: slugs
|
||||||
|
run: |
|
||||||
|
BEFORE="${{ github.event.before }}"
|
||||||
|
AFTER="${{ github.event.after }}"
|
||||||
|
slugs=""
|
||||||
|
|
||||||
|
# Deleted JSON files: get slug from previous commit
|
||||||
|
deleted_json=$(git diff --name-only --diff-filter=D "$BEFORE" "$AFTER" -- json/ | grep '\.json$' || true)
|
||||||
|
for f in $deleted_json; do
|
||||||
|
[[ -z "$f" ]] && continue
|
||||||
|
s=$(git show "$BEFORE:$f" 2>/dev/null | jq -r '.slug // empty' 2>/dev/null || true)
|
||||||
|
[[ -n "$s" ]] && slugs="$slugs $s"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Deleted script files: derive slug from path
|
||||||
|
deleted_sh=$(git diff --name-only --diff-filter=D "$BEFORE" "$AFTER" -- ct/ install/ tools/ turnkey/ vm/ | grep '\.sh$' || true)
|
||||||
|
for f in $deleted_sh; do
|
||||||
|
[[ -z "$f" ]] && continue
|
||||||
|
base="${f##*/}"
|
||||||
|
base="${base%.sh}"
|
||||||
|
if [[ "$f" == install/* && "$base" == *-install ]]; then
|
||||||
|
s="${base%-install}"
|
||||||
|
else
|
||||||
|
s="$base"
|
||||||
|
fi
|
||||||
|
[[ -n "$s" ]] && slugs="$slugs $s"
|
||||||
|
done
|
||||||
|
|
||||||
|
slugs=$(echo $slugs | xargs -n1 | sort -u | tr '\n' ' ')
|
||||||
|
if [[ -z "$slugs" ]]; then
|
||||||
|
echo "No deleted JSON or script files to remove from PocketBase."
|
||||||
|
echo "count=0" >> "$GITHUB_OUTPUT"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
echo "$slugs" > slugs_to_delete.txt
|
||||||
|
echo "count=$(echo $slugs | wc -w)" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "Slugs to delete: $slugs"
|
||||||
|
|
||||||
|
- name: Delete from PocketBase
|
||||||
|
if: steps.slugs.outputs.count != '0'
|
||||||
|
env:
|
||||||
|
POCKETBASE_URL: ${{ secrets.POCKETBASE_URL }}
|
||||||
|
POCKETBASE_COLLECTION: ${{ secrets.POCKETBASE_COLLECTION }}
|
||||||
|
POCKETBASE_ADMIN_EMAIL: ${{ secrets.POCKETBASE_ADMIN_EMAIL }}
|
||||||
|
POCKETBASE_ADMIN_PASSWORD: ${{ secrets.POCKETBASE_ADMIN_PASSWORD }}
|
||||||
|
run: |
|
||||||
|
node << 'ENDSCRIPT'
|
||||||
|
(async function() {
|
||||||
|
const fs = require('fs');
|
||||||
|
const https = require('https');
|
||||||
|
const http = require('http');
|
||||||
|
const url = require('url');
|
||||||
|
|
||||||
|
function request(fullUrl, opts) {
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
const u = url.parse(fullUrl);
|
||||||
|
const isHttps = u.protocol === 'https:';
|
||||||
|
const body = opts.body;
|
||||||
|
const options = {
|
||||||
|
hostname: u.hostname,
|
||||||
|
port: u.port || (isHttps ? 443 : 80),
|
||||||
|
path: u.path,
|
||||||
|
method: opts.method || 'GET',
|
||||||
|
headers: opts.headers || {}
|
||||||
|
};
|
||||||
|
if (body) options.headers['Content-Length'] = Buffer.byteLength(body);
|
||||||
|
const lib = isHttps ? https : http;
|
||||||
|
const req = lib.request(options, function(res) {
|
||||||
|
let data = '';
|
||||||
|
res.on('data', function(chunk) { data += chunk; });
|
||||||
|
res.on('end', function() {
|
||||||
|
resolve({ ok: res.statusCode >= 200 && res.statusCode < 300, statusCode: res.statusCode, body: data });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
req.on('error', reject);
|
||||||
|
if (body) req.write(body);
|
||||||
|
req.end();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const raw = process.env.POCKETBASE_URL.replace(/\/$/, '');
|
||||||
|
const apiBase = /\/api$/i.test(raw) ? raw : raw + '/api';
|
||||||
|
const coll = process.env.POCKETBASE_COLLECTION;
|
||||||
|
const slugs = fs.readFileSync('slugs_to_delete.txt', 'utf8').trim().split(/\s+/).filter(Boolean);
|
||||||
|
|
||||||
|
const authUrl = apiBase + '/collections/users/auth-with-password';
|
||||||
|
const authBody = JSON.stringify({
|
||||||
|
identity: process.env.POCKETBASE_ADMIN_EMAIL,
|
||||||
|
password: process.env.POCKETBASE_ADMIN_PASSWORD
|
||||||
|
});
|
||||||
|
const authRes = await request(authUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
body: authBody
|
||||||
|
});
|
||||||
|
if (!authRes.ok) {
|
||||||
|
throw new Error('Auth failed. Response: ' + authRes.body);
|
||||||
|
}
|
||||||
|
const token = JSON.parse(authRes.body).token;
|
||||||
|
const recordsUrl = apiBase + '/collections/' + encodeURIComponent(coll) + '/records';
|
||||||
|
|
||||||
|
for (const slug of slugs) {
|
||||||
|
const filter = "(slug='" + slug + "')";
|
||||||
|
const listRes = await request(recordsUrl + '?filter=' + encodeURIComponent(filter) + '&perPage=1', {
|
||||||
|
headers: { 'Authorization': token }
|
||||||
|
});
|
||||||
|
const list = JSON.parse(listRes.body);
|
||||||
|
const existingId = list.items && list.items[0] && list.items[0].id;
|
||||||
|
if (!existingId) {
|
||||||
|
console.log('No PocketBase record for slug "' + slug + '", skipping.');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const delRes = await request(recordsUrl + '/' + existingId, {
|
||||||
|
method: 'DELETE',
|
||||||
|
headers: { 'Authorization': token }
|
||||||
|
});
|
||||||
|
if (delRes.ok) {
|
||||||
|
console.log('Deleted PocketBase record for slug "' + slug + '" (id=' + existingId + ').');
|
||||||
|
} else {
|
||||||
|
console.warn('DELETE failed for slug "' + slug + '": ' + delRes.statusCode + ' ' + delRes.body);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log('Done.');
|
||||||
|
})().catch(e => { console.error(e); process.exit(1); });
|
||||||
|
ENDSCRIPT
|
||||||
|
shell: bash
|
||||||
147
.github/workflows/frontend-cicd.yml
generated
vendored
147
.github/workflows/frontend-cicd.yml
generated
vendored
@@ -1,147 +0,0 @@
|
|||||||
# Based on https://github.com/actions/starter-workflows/blob/main/pages/nextjs.yml
|
|
||||||
|
|
||||||
name: Frontend CI/CD
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: ["main"]
|
|
||||||
paths:
|
|
||||||
- frontend/**
|
|
||||||
|
|
||||||
pull_request:
|
|
||||||
branches: ["main"]
|
|
||||||
types: [opened, synchronize, reopened, edited]
|
|
||||||
paths:
|
|
||||||
- frontend/**
|
|
||||||
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: pages-${{ github.ref }}
|
|
||||||
cancel-in-progress: false
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
test-json-files:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
working-directory: frontend
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Setup Python
|
|
||||||
uses: actions/setup-python@v4
|
|
||||||
with:
|
|
||||||
python-version: "3.x"
|
|
||||||
|
|
||||||
- name: Test JSON files
|
|
||||||
run: |
|
|
||||||
python3 << 'EOF'
|
|
||||||
import json
|
|
||||||
import glob
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
|
|
||||||
def test_json_files():
|
|
||||||
# Change to the correct directory
|
|
||||||
json_dir = "public/json"
|
|
||||||
if not os.path.exists(json_dir):
|
|
||||||
print(f"❌ Directory not found: {json_dir}")
|
|
||||||
return False
|
|
||||||
|
|
||||||
# Find all JSON files
|
|
||||||
pattern = os.path.join(json_dir, "*.json")
|
|
||||||
json_files = glob.glob(pattern)
|
|
||||||
|
|
||||||
if not json_files:
|
|
||||||
print(f"⚠️ No JSON files found in {json_dir}")
|
|
||||||
return True
|
|
||||||
|
|
||||||
print(f"Testing {len(json_files)} JSON files for valid syntax...")
|
|
||||||
|
|
||||||
invalid_files = []
|
|
||||||
|
|
||||||
for file_path in json_files:
|
|
||||||
try:
|
|
||||||
with open(file_path, 'r', encoding='utf-8') as f:
|
|
||||||
json.load(f)
|
|
||||||
print(f"✅ Valid JSON: {file_path}")
|
|
||||||
except json.JSONDecodeError as e:
|
|
||||||
print(f"❌ Invalid JSON syntax in: {file_path}")
|
|
||||||
print(f" Error: {e}")
|
|
||||||
invalid_files.append(file_path)
|
|
||||||
except Exception as e:
|
|
||||||
print(f"⚠️ Error reading: {file_path}")
|
|
||||||
print(f" Error: {e}")
|
|
||||||
invalid_files.append(file_path)
|
|
||||||
|
|
||||||
print("\n=== JSON Validation Summary ===")
|
|
||||||
print(f"Total files tested: {len(json_files)}")
|
|
||||||
print(f"Valid files: {len(json_files) - len(invalid_files)}")
|
|
||||||
print(f"Invalid files: {len(invalid_files)}")
|
|
||||||
|
|
||||||
if invalid_files:
|
|
||||||
print("\n❌ Found invalid JSON file(s):")
|
|
||||||
for file_path in invalid_files:
|
|
||||||
print(f" - {file_path}")
|
|
||||||
return False
|
|
||||||
else:
|
|
||||||
print("\n✅ All JSON files have valid syntax!")
|
|
||||||
return True
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
success = test_json_files()
|
|
||||||
sys.exit(0 if success else 1)
|
|
||||||
EOF
|
|
||||||
|
|
||||||
build:
|
|
||||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
|
||||||
needs: test-json-files
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
working-directory: frontend
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Setup Bun
|
|
||||||
uses: oven-sh/setup-bun@v2
|
|
||||||
with:
|
|
||||||
bun-version: latest
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: bun install --frozen-lockfile
|
|
||||||
|
|
||||||
- name: Configure Next.js for pages
|
|
||||||
uses: actions/configure-pages@v5
|
|
||||||
with:
|
|
||||||
static_site_generator: next
|
|
||||||
|
|
||||||
- name: Build with Next.js
|
|
||||||
run: bun run build
|
|
||||||
|
|
||||||
- name: Upload artifact
|
|
||||||
if: github.ref == 'refs/heads/main'
|
|
||||||
uses: actions/upload-pages-artifact@v3
|
|
||||||
with:
|
|
||||||
path: frontend/out
|
|
||||||
|
|
||||||
deploy:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: build
|
|
||||||
if: github.ref == 'refs/heads/main' && github.repository == 'community-scripts/ProxmoxVE'
|
|
||||||
permissions:
|
|
||||||
pages: write
|
|
||||||
id-token: write
|
|
||||||
environment:
|
|
||||||
name: github-pages
|
|
||||||
url: ${{ steps.deployment.outputs.page_url }}
|
|
||||||
steps:
|
|
||||||
- name: Deploy to GitHub Pages
|
|
||||||
id: deployment
|
|
||||||
uses: actions/deploy-pages@v4
|
|
||||||
255
.github/workflows/push-json-to-pocketbase.yml
generated
vendored
Normal file
255
.github/workflows/push-json-to-pocketbase.yml
generated
vendored
Normal file
@@ -0,0 +1,255 @@
|
|||||||
|
name: Push JSON changes to PocketBase
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths:
|
||||||
|
- "json/**"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
push-json:
|
||||||
|
runs-on: self-hosted
|
||||||
|
steps:
|
||||||
|
- name: Checkout Repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Get changed JSON files with slug
|
||||||
|
id: changed
|
||||||
|
run: |
|
||||||
|
changed=$(git diff --name-only "${{ github.event.before }}" "${{ github.event.after }}" -- json/ | grep '\.json$' || true)
|
||||||
|
with_slug=""
|
||||||
|
for f in $changed; do
|
||||||
|
[[ -f "$f" ]] || continue
|
||||||
|
jq -e '.slug' "$f" >/dev/null 2>&1 && with_slug="$with_slug $f"
|
||||||
|
done
|
||||||
|
with_slug=$(echo $with_slug | xargs -n1)
|
||||||
|
if [[ -z "$with_slug" ]]; then
|
||||||
|
echo "No app JSON files changed (or no files with slug)."
|
||||||
|
echo "count=0" >> "$GITHUB_OUTPUT"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
echo "$with_slug" > changed_app_jsons.txt
|
||||||
|
echo "count=$(echo "$with_slug" | wc -w)" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
- name: Push to PocketBase
|
||||||
|
if: steps.changed.outputs.count != '0'
|
||||||
|
env:
|
||||||
|
POCKETBASE_URL: ${{ secrets.POCKETBASE_URL }}
|
||||||
|
POCKETBASE_COLLECTION: ${{ secrets.POCKETBASE_COLLECTION }}
|
||||||
|
POCKETBASE_ADMIN_EMAIL: ${{ secrets.POCKETBASE_ADMIN_EMAIL }}
|
||||||
|
POCKETBASE_ADMIN_PASSWORD: ${{ secrets.POCKETBASE_ADMIN_PASSWORD }}
|
||||||
|
run: |
|
||||||
|
node << 'ENDSCRIPT'
|
||||||
|
(async function() {
|
||||||
|
const fs = require('fs');
|
||||||
|
const https = require('https');
|
||||||
|
const http = require('http');
|
||||||
|
const url = require('url');
|
||||||
|
function request(fullUrl, opts) {
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
const u = url.parse(fullUrl);
|
||||||
|
const isHttps = u.protocol === 'https:';
|
||||||
|
const body = opts.body;
|
||||||
|
const options = {
|
||||||
|
hostname: u.hostname,
|
||||||
|
port: u.port || (isHttps ? 443 : 80),
|
||||||
|
path: u.path,
|
||||||
|
method: opts.method || 'GET',
|
||||||
|
headers: opts.headers || {}
|
||||||
|
};
|
||||||
|
if (body) options.headers['Content-Length'] = Buffer.byteLength(body);
|
||||||
|
const lib = isHttps ? https : http;
|
||||||
|
const req = lib.request(options, function(res) {
|
||||||
|
let data = '';
|
||||||
|
res.on('data', function(chunk) { data += chunk; });
|
||||||
|
res.on('end', function() {
|
||||||
|
resolve({ ok: res.statusCode >= 200 && res.statusCode < 300, statusCode: res.statusCode, body: data });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
req.on('error', reject);
|
||||||
|
if (body) req.write(body);
|
||||||
|
req.end();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const raw = process.env.POCKETBASE_URL.replace(/\/$/, '');
|
||||||
|
const apiBase = /\/api$/i.test(raw) ? raw : raw + '/api';
|
||||||
|
const coll = process.env.POCKETBASE_COLLECTION;
|
||||||
|
const files = fs.readFileSync('changed_app_jsons.txt', 'utf8').trim().split(/\s+/).filter(Boolean);
|
||||||
|
const authUrl = apiBase + '/collections/users/auth-with-password';
|
||||||
|
console.log('Auth URL: ' + authUrl);
|
||||||
|
const authBody = JSON.stringify({
|
||||||
|
identity: process.env.POCKETBASE_ADMIN_EMAIL,
|
||||||
|
password: process.env.POCKETBASE_ADMIN_PASSWORD
|
||||||
|
});
|
||||||
|
const authRes = await request(authUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
body: authBody
|
||||||
|
});
|
||||||
|
if (!authRes.ok) {
|
||||||
|
throw new Error('Auth failed. Tried: ' + authUrl + ' - Verify POST to that URL with body {"identity":"...","password":"..."} works. Response: ' + authRes.body);
|
||||||
|
}
|
||||||
|
const token = JSON.parse(authRes.body).token;
|
||||||
|
const recordsUrl = apiBase + '/collections/' + encodeURIComponent(coll) + '/records';
|
||||||
|
let categoryIdToName = {};
|
||||||
|
try {
|
||||||
|
const metadata = JSON.parse(fs.readFileSync('json/metadata.json', 'utf8'));
|
||||||
|
(metadata.categories || []).forEach(function(cat) { categoryIdToName[cat.id] = cat.name; });
|
||||||
|
} catch (e) { console.warn('Could not load metadata.json:', e.message); }
|
||||||
|
let typeValueToId = {};
|
||||||
|
let categoryNameToPbId = {};
|
||||||
|
try {
|
||||||
|
const typesRes = await request(apiBase + '/collections/z_ref_script_types/records?perPage=500', { headers: { 'Authorization': token } });
|
||||||
|
if (typesRes.ok) {
|
||||||
|
const typesData = JSON.parse(typesRes.body);
|
||||||
|
(typesData.items || []).forEach(function(item) {
|
||||||
|
if (item.type != null) typeValueToId[item.type] = item.id;
|
||||||
|
if (item.name != null) typeValueToId[item.name] = item.id;
|
||||||
|
if (item.value != null) typeValueToId[item.value] = item.id;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (e) { console.warn('Could not fetch z_ref_script_types:', e.message); }
|
||||||
|
try {
|
||||||
|
const catRes = await request(apiBase + '/collections/script_categories/records?perPage=500', { headers: { 'Authorization': token } });
|
||||||
|
if (catRes.ok) {
|
||||||
|
const catData = JSON.parse(catRes.body);
|
||||||
|
(catData.items || []).forEach(function(item) { if (item.name) categoryNameToPbId[item.name] = item.id; });
|
||||||
|
}
|
||||||
|
} catch (e) { console.warn('Could not fetch script_categories:', e.message); }
|
||||||
|
var noteTypeToId = {};
|
||||||
|
var installMethodTypeToId = {};
|
||||||
|
var osToId = {};
|
||||||
|
var osVersionToId = {};
|
||||||
|
try {
|
||||||
|
const res = await request(apiBase + '/collections/z_ref_note_types/records?perPage=500', { headers: { 'Authorization': token } });
|
||||||
|
if (res.ok) JSON.parse(res.body).items?.forEach(function(item) { if (item.type != null) noteTypeToId[item.type] = item.id; });
|
||||||
|
} catch (e) { console.warn('z_ref_note_types:', e.message); }
|
||||||
|
try {
|
||||||
|
const res = await request(apiBase + '/collections/z_ref_install_method_types/records?perPage=500', { headers: { 'Authorization': token } });
|
||||||
|
if (res.ok) JSON.parse(res.body).items?.forEach(function(item) { if (item.type != null) installMethodTypeToId[item.type] = item.id; });
|
||||||
|
} catch (e) { console.warn('z_ref_install_method_types:', e.message); }
|
||||||
|
try {
|
||||||
|
const res = await request(apiBase + '/collections/z_ref_os/records?perPage=500', { headers: { 'Authorization': token } });
|
||||||
|
if (res.ok) JSON.parse(res.body).items?.forEach(function(item) { if (item.os != null) osToId[item.os] = item.id; });
|
||||||
|
} catch (e) { console.warn('z_ref_os:', e.message); }
|
||||||
|
try {
|
||||||
|
const res = await request(apiBase + '/collections/z_ref_os_version/records?perPage=500&expand=os', { headers: { 'Authorization': token } });
|
||||||
|
if (res.ok) {
|
||||||
|
(JSON.parse(res.body).items || []).forEach(function(item) {
|
||||||
|
var osName = item.expand && item.expand.os && item.expand.os.os != null ? item.expand.os.os : null;
|
||||||
|
if (osName != null && item.version != null) osVersionToId[osName + '|' + item.version] = item.id;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (e) { console.warn('z_ref_os_version:', e.message); }
|
||||||
|
var notesCollUrl = apiBase + '/collections/script_notes/records';
|
||||||
|
var installMethodsCollUrl = apiBase + '/collections/script_install_methods/records';
|
||||||
|
for (const file of files) {
|
||||||
|
if (!fs.existsSync(file)) continue;
|
||||||
|
const data = JSON.parse(fs.readFileSync(file, 'utf8'));
|
||||||
|
if (!data.slug) { console.log('Skipping', file, '(no slug)'); continue; }
|
||||||
|
var payload = {
|
||||||
|
name: data.name,
|
||||||
|
slug: data.slug,
|
||||||
|
script_created: data.date_created || data.script_created,
|
||||||
|
script_updated: data.date_created || data.script_updated,
|
||||||
|
updateable: data.updateable,
|
||||||
|
privileged: data.privileged,
|
||||||
|
port: data.interface_port != null ? data.interface_port : data.port,
|
||||||
|
documentation: data.documentation,
|
||||||
|
website: data.website,
|
||||||
|
logo: data.logo,
|
||||||
|
description: data.description,
|
||||||
|
config_path: data.config_path,
|
||||||
|
default_user: (data.default_credentials && data.default_credentials.username) || data.default_user,
|
||||||
|
default_passwd: (data.default_credentials && data.default_credentials.password) || data.default_passwd,
|
||||||
|
is_dev: false
|
||||||
|
};
|
||||||
|
var resolvedType = typeValueToId[data.type];
|
||||||
|
if (resolvedType == null && data.type === 'ct') resolvedType = typeValueToId['lxc'];
|
||||||
|
if (resolvedType) payload.type = resolvedType;
|
||||||
|
var resolvedCats = (data.categories || []).map(function(n) { return categoryNameToPbId[categoryIdToName[n]]; }).filter(Boolean);
|
||||||
|
if (resolvedCats.length) payload.categories = resolvedCats;
|
||||||
|
if (data.version !== undefined) payload.version = data.version;
|
||||||
|
if (data.changelog !== undefined) payload.changelog = data.changelog;
|
||||||
|
if (data.screenshots !== undefined) payload.screenshots = data.screenshots;
|
||||||
|
const filter = "(slug='" + data.slug + "')";
|
||||||
|
const listRes = await request(recordsUrl + '?filter=' + encodeURIComponent(filter) + '&perPage=1', {
|
||||||
|
headers: { 'Authorization': token }
|
||||||
|
});
|
||||||
|
const list = JSON.parse(listRes.body);
|
||||||
|
const existingId = list.items && list.items[0] && list.items[0].id;
|
||||||
|
async function resolveNotesAndInstallMethods(scriptId) {
|
||||||
|
var noteIds = [];
|
||||||
|
for (var i = 0; i < (data.notes || []).length; i++) {
|
||||||
|
var note = data.notes[i];
|
||||||
|
var typeId = noteTypeToId[note.type];
|
||||||
|
if (typeId == null) continue;
|
||||||
|
var postRes = await request(notesCollUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Authorization': token, 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify({ text: note.text || '', type: typeId })
|
||||||
|
});
|
||||||
|
if (postRes.ok) noteIds.push(JSON.parse(postRes.body).id);
|
||||||
|
}
|
||||||
|
var installMethodIds = [];
|
||||||
|
for (var j = 0; j < (data.install_methods || []).length; j++) {
|
||||||
|
var im = data.install_methods[j];
|
||||||
|
var typeId = installMethodTypeToId[im.type];
|
||||||
|
var res = im.resources || {};
|
||||||
|
var osId = osToId[res.os];
|
||||||
|
var osVersionKey = (res.os != null && res.version != null) ? res.os + '|' + res.version : null;
|
||||||
|
var osVersionId = osVersionKey ? osVersionToId[osVersionKey] : null;
|
||||||
|
var imBody = {
|
||||||
|
script: scriptId,
|
||||||
|
resources_cpu: res.cpu != null ? res.cpu : 0,
|
||||||
|
resources_ram: res.ram != null ? res.ram : 0,
|
||||||
|
resources_hdd: res.hdd != null ? res.hdd : 0
|
||||||
|
};
|
||||||
|
if (typeId) imBody.type = typeId;
|
||||||
|
if (osId) imBody.os = osId;
|
||||||
|
if (osVersionId) imBody.os_version = osVersionId;
|
||||||
|
var imPostRes = await request(installMethodsCollUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Authorization': token, 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify(imBody)
|
||||||
|
});
|
||||||
|
if (imPostRes.ok) installMethodIds.push(JSON.parse(imPostRes.body).id);
|
||||||
|
}
|
||||||
|
return { noteIds: noteIds, installMethodIds: installMethodIds };
|
||||||
|
}
|
||||||
|
if (existingId) {
|
||||||
|
var resolved = await resolveNotesAndInstallMethods(existingId);
|
||||||
|
payload.notes = resolved.noteIds;
|
||||||
|
payload.install_methods = resolved.installMethodIds;
|
||||||
|
console.log('Updating', file, '(slug=' + data.slug + ')');
|
||||||
|
const r = await request(recordsUrl + '/' + existingId, {
|
||||||
|
method: 'PATCH',
|
||||||
|
headers: { 'Authorization': token, 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify(payload)
|
||||||
|
});
|
||||||
|
if (!r.ok) throw new Error('PATCH failed: ' + r.body);
|
||||||
|
} else {
|
||||||
|
console.log('Creating', file, '(slug=' + data.slug + ')');
|
||||||
|
const r = await request(recordsUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Authorization': token, 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify(payload)
|
||||||
|
});
|
||||||
|
if (!r.ok) throw new Error('POST failed: ' + r.body);
|
||||||
|
var scriptId = JSON.parse(r.body).id;
|
||||||
|
var resolved = await resolveNotesAndInstallMethods(scriptId);
|
||||||
|
var patchRes = await request(recordsUrl + '/' + scriptId, {
|
||||||
|
method: 'PATCH',
|
||||||
|
headers: { 'Authorization': token, 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify({ install_methods: resolved.installMethodIds, notes: resolved.noteIds })
|
||||||
|
});
|
||||||
|
if (!patchRes.ok) throw new Error('PATCH relations failed: ' + patchRes.body);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log('Done.');
|
||||||
|
})().catch(e => { console.error(e); process.exit(1); });
|
||||||
|
ENDSCRIPT
|
||||||
|
shell: bash
|
||||||
41
.github/workflows/trigger_github_pages_redirect.yml
generated
vendored
Normal file
41
.github/workflows/trigger_github_pages_redirect.yml
generated
vendored
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
name: Pages Redirect
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
pages: write
|
||||||
|
id-token: write
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Create redirect page
|
||||||
|
run: |
|
||||||
|
mkdir site
|
||||||
|
cat <<EOF > site/index.html
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="refresh" content="0; url=https://community-scripts.org/">
|
||||||
|
<link rel="canonical" href="https://community-scripts.org/">
|
||||||
|
<title>Redirecting...</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
Redirecting...
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
EOF
|
||||||
|
|
||||||
|
- uses: actions/upload-pages-artifact@v3
|
||||||
|
with:
|
||||||
|
path: site
|
||||||
|
|
||||||
|
- name: Deploy
|
||||||
|
uses: actions/deploy-pages@v4
|
||||||
4
.github/workflows/update-json-date.yml
generated
vendored
4
.github/workflows/update-json-date.yml
generated
vendored
@@ -5,7 +5,7 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
paths:
|
paths:
|
||||||
- "frontend/public/json/**.json"
|
- "json/**.json"
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
@@ -57,7 +57,7 @@ jobs:
|
|||||||
- name: Get Newly Added JSON Files
|
- name: Get Newly Added JSON Files
|
||||||
id: new_json_files
|
id: new_json_files
|
||||||
run: |
|
run: |
|
||||||
git diff --name-only --diff-filter=A ${{ env.prev_commit }} HEAD | grep '^frontend/public/json/.*\.json$' > new_files.txt || true
|
git diff --name-only --diff-filter=A ${{ env.prev_commit }} HEAD | grep '^json/.*\.json$' > new_files.txt || true
|
||||||
echo "New files detected:"
|
echo "New files detected:"
|
||||||
cat new_files.txt || echo "No new files."
|
cat new_files.txt || echo "No new files."
|
||||||
|
|
||||||
|
|||||||
167
.github/workflows/update-script-timestamp-on-sh-change.yml
generated
vendored
Normal file
167
.github/workflows/update-script-timestamp-on-sh-change.yml
generated
vendored
Normal file
@@ -0,0 +1,167 @@
|
|||||||
|
name: Update script timestamp on .sh changes
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths:
|
||||||
|
- "ct/**/*.sh"
|
||||||
|
- "install/**/*.sh"
|
||||||
|
- "tools/**/*.sh"
|
||||||
|
- "turnkey/**/*.sh"
|
||||||
|
- "vm/**/*.sh"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update-script-timestamp:
|
||||||
|
runs-on: self-hosted
|
||||||
|
steps:
|
||||||
|
- name: Checkout Repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Get changed .sh files and derive slugs
|
||||||
|
id: slugs
|
||||||
|
run: |
|
||||||
|
changed=$(git diff --name-only "${{ github.event.before }}" "${{ github.event.after }}" -- ct/ install/ tools/ turnkey/ vm/ | grep '\.sh$' || true)
|
||||||
|
if [[ -z "$changed" ]]; then
|
||||||
|
echo "No .sh files changed in ct/, install/, tools/, turnkey/, or vm/."
|
||||||
|
echo "count=0" >> "$GITHUB_OUTPUT"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
declare -A seen
|
||||||
|
slugs=""
|
||||||
|
for f in $changed; do
|
||||||
|
[[ -f "$f" ]] || continue
|
||||||
|
base="${f##*/}"
|
||||||
|
base="${base%.sh}"
|
||||||
|
if [[ "$f" == install/* && "$base" == *-install ]]; then
|
||||||
|
slug="${base%-install}"
|
||||||
|
else
|
||||||
|
slug="$base"
|
||||||
|
fi
|
||||||
|
if [[ -z "${seen[$slug]:-}" ]]; then
|
||||||
|
seen[$slug]=1
|
||||||
|
slugs="$slugs $slug"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
slugs=$(echo $slugs | xargs -n1 | sort -u)
|
||||||
|
if [[ -z "$slugs" ]]; then
|
||||||
|
echo "No slugs to update."
|
||||||
|
echo "count=0" >> "$GITHUB_OUTPUT"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
echo "$slugs" > changed_slugs.txt
|
||||||
|
echo "count=$(echo "$slugs" | wc -w)" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
- name: Parse PR number from merge commit
|
||||||
|
id: pr
|
||||||
|
run: |
|
||||||
|
re='#([0-9]+)'
|
||||||
|
if [[ "$COMMIT_MSG" =~ $re ]]; then
|
||||||
|
echo "number=${BASH_REMATCH[1]}" >> "$GITHUB_OUTPUT"
|
||||||
|
else
|
||||||
|
echo "number=" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
env:
|
||||||
|
COMMIT_MSG: ${{ github.event.head_commit.message }}
|
||||||
|
|
||||||
|
- name: Update script timestamps in PocketBase
|
||||||
|
if: steps.slugs.outputs.count != '0'
|
||||||
|
env:
|
||||||
|
POCKETBASE_URL: ${{ secrets.POCKETBASE_URL }}
|
||||||
|
POCKETBASE_COLLECTION: ${{ secrets.POCKETBASE_COLLECTION }}
|
||||||
|
POCKETBASE_ADMIN_EMAIL: ${{ secrets.POCKETBASE_ADMIN_EMAIL }}
|
||||||
|
POCKETBASE_ADMIN_PASSWORD: ${{ secrets.POCKETBASE_ADMIN_PASSWORD }}
|
||||||
|
COMMIT_URL: ${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }}
|
||||||
|
PR_URL: ${{ steps.pr.outputs.number != '' && format('{0}/{1}/pull/{2}', github.server_url, github.repository, steps.pr.outputs.number) || '' }}
|
||||||
|
run: |
|
||||||
|
node << 'ENDSCRIPT'
|
||||||
|
(async function() {
|
||||||
|
const fs = require('fs');
|
||||||
|
const https = require('https');
|
||||||
|
const http = require('http');
|
||||||
|
const url = require('url');
|
||||||
|
|
||||||
|
function request(fullUrl, opts) {
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
const u = url.parse(fullUrl);
|
||||||
|
const isHttps = u.protocol === 'https:';
|
||||||
|
const body = opts.body;
|
||||||
|
const options = {
|
||||||
|
hostname: u.hostname,
|
||||||
|
port: u.port || (isHttps ? 443 : 80),
|
||||||
|
path: u.path,
|
||||||
|
method: opts.method || 'GET',
|
||||||
|
headers: opts.headers || {}
|
||||||
|
};
|
||||||
|
if (body) options.headers['Content-Length'] = Buffer.byteLength(body);
|
||||||
|
const lib = isHttps ? https : http;
|
||||||
|
const req = lib.request(options, function(res) {
|
||||||
|
let data = '';
|
||||||
|
res.on('data', function(chunk) { data += chunk; });
|
||||||
|
res.on('end', function() {
|
||||||
|
resolve({ ok: res.statusCode >= 200 && res.statusCode < 300, statusCode: res.statusCode, body: data });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
req.on('error', reject);
|
||||||
|
if (body) req.write(body);
|
||||||
|
req.end();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const raw = process.env.POCKETBASE_URL.replace(/\/$/, '');
|
||||||
|
const apiBase = /\/api$/i.test(raw) ? raw : raw + '/api';
|
||||||
|
const coll = process.env.POCKETBASE_COLLECTION;
|
||||||
|
const slugsText = fs.readFileSync('changed_slugs.txt', 'utf8').trim();
|
||||||
|
const slugs = slugsText ? slugsText.split(/\s+/).filter(Boolean) : [];
|
||||||
|
if (slugs.length === 0) {
|
||||||
|
console.log('No slugs to update.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const authUrl = apiBase + '/collections/users/auth-with-password';
|
||||||
|
const authBody = JSON.stringify({
|
||||||
|
identity: process.env.POCKETBASE_ADMIN_EMAIL,
|
||||||
|
password: process.env.POCKETBASE_ADMIN_PASSWORD
|
||||||
|
});
|
||||||
|
const authRes = await request(authUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
body: authBody
|
||||||
|
});
|
||||||
|
if (!authRes.ok) {
|
||||||
|
throw new Error('Auth failed: ' + authRes.body);
|
||||||
|
}
|
||||||
|
const token = JSON.parse(authRes.body).token;
|
||||||
|
const recordsUrl = apiBase + '/collections/' + encodeURIComponent(coll) + '/records';
|
||||||
|
|
||||||
|
for (const slug of slugs) {
|
||||||
|
const filter = "(slug='" + slug.replace(/'/g, "''") + "')";
|
||||||
|
const listRes = await request(recordsUrl + '?filter=' + encodeURIComponent(filter) + '&perPage=1', {
|
||||||
|
headers: { 'Authorization': token }
|
||||||
|
});
|
||||||
|
const list = JSON.parse(listRes.body);
|
||||||
|
const record = list.items && list.items[0];
|
||||||
|
if (!record) {
|
||||||
|
console.log('Slug not in DB, skipping: ' + slug);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const patchRes = await request(recordsUrl + '/' + record.id, {
|
||||||
|
method: 'PATCH',
|
||||||
|
headers: { 'Authorization': token, 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify({
|
||||||
|
name: record.name || record.slug,
|
||||||
|
last_update_commit: process.env.PR_URL || process.env.COMMIT_URL || ''
|
||||||
|
})
|
||||||
|
});
|
||||||
|
if (!patchRes.ok) {
|
||||||
|
console.warn('PATCH failed for slug ' + slug + ': ' + patchRes.body);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
console.log('Updated timestamp for slug: ' + slug);
|
||||||
|
}
|
||||||
|
console.log('Done.');
|
||||||
|
})().catch(e => { console.error(e); process.exit(1); });
|
||||||
|
ENDSCRIPT
|
||||||
|
shell: bash
|
||||||
4
.github/workflows/update-versions-github.yml
generated
vendored
4
.github/workflows/update-versions-github.yml
generated
vendored
@@ -11,7 +11,7 @@ permissions:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
|
||||||
env:
|
env:
|
||||||
VERSIONS_FILE: frontend/public/json/github-versions.json
|
VERSIONS_FILE: json/github-versions.json
|
||||||
BRANCH_NAME: automated/update-github-versions
|
BRANCH_NAME: automated/update-github-versions
|
||||||
AUTOMATED_PR_LABEL: "automated pr"
|
AUTOMATED_PR_LABEL: "automated pr"
|
||||||
|
|
||||||
@@ -74,7 +74,7 @@ jobs:
|
|||||||
echo ""
|
echo ""
|
||||||
echo "=== Scanning JSON files for slugs ==="
|
echo "=== Scanning JSON files for slugs ==="
|
||||||
|
|
||||||
for json_file in frontend/public/json/*.json; do
|
for json_file in json/*.json; do
|
||||||
[[ ! -f "$json_file" ]] && continue
|
[[ ! -f "$json_file" ]] && continue
|
||||||
|
|
||||||
# Skip non-app JSON files
|
# Skip non-app JSON files
|
||||||
|
|||||||
7
.gitignore
vendored
7
.gitignore
vendored
@@ -24,13 +24,6 @@ venv/
|
|||||||
env/
|
env/
|
||||||
*.env
|
*.env
|
||||||
|
|
||||||
# Node.js dependencies (frontend folder was excluded, but keeping this rule for reference)
|
|
||||||
frontend/node_modules/
|
|
||||||
frontend/.svelte-kit/
|
|
||||||
frontend/.turbo/
|
|
||||||
frontend/.vite/
|
|
||||||
frontend/build/
|
|
||||||
|
|
||||||
# API and Backend specific exclusions
|
# API and Backend specific exclusions
|
||||||
api/.env
|
api/.env
|
||||||
api/__pycache__/
|
api/__pycache__/
|
||||||
|
|||||||
840
CHANGELOG.md
840
CHANGELOG.md
@@ -21,6 +21,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><h2>📜 History</h2></summary>
|
<summary><h2>📜 History</h2></summary>
|
||||||
|
|
||||||
@@ -30,7 +36,14 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><h4>February (21 entries)</h4></summary>
|
<summary><h4>March (7 entries)</h4></summary>
|
||||||
|
|
||||||
|
[View March 2026 Changelog](.github/changelogs/2026/03.md)
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><h4>February (28 entries)</h4></summary>
|
||||||
|
|
||||||
[View February 2026 Changelog](.github/changelogs/2026/02.md)
|
[View February 2026 Changelog](.github/changelogs/2026/02.md)
|
||||||
|
|
||||||
@@ -407,6 +420,378 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
## 2026-03-12
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- SparkyFitness: install pnpm dependencies from workspace root [@MickLesk](https://github.com/MickLesk) ([#12792](https://github.com/community-scripts/ProxmoxVE/pull/12792))
|
||||||
|
- n8n: add build-essential to update dependencies [@MickLesk](https://github.com/MickLesk) ([#12795](https://github.com/community-scripts/ProxmoxVE/pull/12795))
|
||||||
|
- Frigate openvino labelmap patch [@semtex1987](https://github.com/semtex1987) ([#12751](https://github.com/community-scripts/ProxmoxVE/pull/12751))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- tools.func: correct PATH escaping in ROCm profile script [@MickLesk](https://github.com/MickLesk) ([#12793](https://github.com/community-scripts/ProxmoxVE/pull/12793))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- core: add mode=generated for unattended frontend installs [@MickLesk](https://github.com/MickLesk) ([#12807](https://github.com/community-scripts/ProxmoxVE/pull/12807))
|
||||||
|
- core: validate storage availability when loading defaults [@MickLesk](https://github.com/MickLesk) ([#12794](https://github.com/community-scripts/ProxmoxVE/pull/12794))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- tools.func: support older NVIDIA driver versions with 2 segments (xxx.xxx) [@MickLesk](https://github.com/MickLesk) ([#12796](https://github.com/community-scripts/ProxmoxVE/pull/12796))
|
||||||
|
|
||||||
|
## 2026-03-11
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fix: Init telemetry in addon scripts [@MickLesk](https://github.com/MickLesk) ([#12777](https://github.com/community-scripts/ProxmoxVE/pull/12777))
|
||||||
|
- Tracearr: Increase default disk variable from 5 to 10 [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12762](https://github.com/community-scripts/ProxmoxVE/pull/12762))
|
||||||
|
- Fix Wireguard Dashboard update [@odin568](https://github.com/odin568) ([#12767](https://github.com/community-scripts/ProxmoxVE/pull/12767))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Coder-Code-Server: Check if config file exists [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12758](https://github.com/community-scripts/ProxmoxVE/pull/12758))
|
||||||
|
|
||||||
|
## 2026-03-10
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- [Fix] Immich: Pin libvips to 8.17.3 [@vhsdream](https://github.com/vhsdream) ([#12744](https://github.com/community-scripts/ProxmoxVE/pull/12744))
|
||||||
|
|
||||||
|
## 2026-03-09
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Pin Opencloud to 5.2.0 [@vhsdream](https://github.com/vhsdream) ([#12721](https://github.com/community-scripts/ProxmoxVE/pull/12721))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- [Hotfix] qBittorrent: Disable UPnP port forwarding by default [@vhsdream](https://github.com/vhsdream) ([#12728](https://github.com/community-scripts/ProxmoxVE/pull/12728))
|
||||||
|
- [Quickfix] Opencloud: ensure correct case for binary [@vhsdream](https://github.com/vhsdream) ([#12729](https://github.com/community-scripts/ProxmoxVE/pull/12729))
|
||||||
|
- Omada: Bump libssl [@MickLesk](https://github.com/MickLesk) ([#12724](https://github.com/community-scripts/ProxmoxVE/pull/12724))
|
||||||
|
- openwebui: Ensure required dependencies [@MickLesk](https://github.com/MickLesk) ([#12717](https://github.com/community-scripts/ProxmoxVE/pull/12717))
|
||||||
|
- Frigate: try an OpenVino model build fallback [@MickLesk](https://github.com/MickLesk) ([#12704](https://github.com/community-scripts/ProxmoxVE/pull/12704))
|
||||||
|
- Change cronjob setup to use www-data user [@opastorello](https://github.com/opastorello) ([#12695](https://github.com/community-scripts/ProxmoxVE/pull/12695))
|
||||||
|
- RustDesk Server: Fix check_for_gh_release function call [@tremor021](https://github.com/tremor021) ([#12694](https://github.com/community-scripts/ProxmoxVE/pull/12694))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- feat: improve zigbee2mqtt backup handler [@MickLesk](https://github.com/MickLesk) ([#12714](https://github.com/community-scripts/ProxmoxVE/pull/12714))
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- Reactive Resume: rewrite for v5 using original repo amruthpilla/reactive-resume [@MickLesk](https://github.com/MickLesk) ([#12705](https://github.com/community-scripts/ProxmoxVE/pull/12705))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools: add Alpine (apk) support to ensure_dependencies and is_package_installed [@MickLesk](https://github.com/MickLesk) ([#12703](https://github.com/community-scripts/ProxmoxVE/pull/12703))
|
||||||
|
- tools.func: extend hwaccel with ROCm [@MickLesk](https://github.com/MickLesk) ([#12707](https://github.com/community-scripts/ProxmoxVE/pull/12707))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- feat: add CopycatWarningToast component for user warnings [@BramSuurdje](https://github.com/BramSuurdje) ([#12733](https://github.com/community-scripts/ProxmoxVE/pull/12733))
|
||||||
|
|
||||||
|
## 2026-03-08
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- [Fix] Immich: chown install dir before machine-learning update [@vhsdream](https://github.com/vhsdream) ([#12684](https://github.com/community-scripts/ProxmoxVE/pull/12684))
|
||||||
|
- [Fix] Scanopy: Build generate-fixtures [@vhsdream](https://github.com/vhsdream) ([#12686](https://github.com/community-scripts/ProxmoxVE/pull/12686))
|
||||||
|
- fix: rustdeskserver: use correct repo string [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12682](https://github.com/community-scripts/ProxmoxVE/pull/12682))
|
||||||
|
- NZBGet: Fixes for RAR5 handling [@tremor021](https://github.com/tremor021) ([#12675](https://github.com/community-scripts/ProxmoxVE/pull/12675))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- LXC-Execute: Fix slug [@tremor021](https://github.com/tremor021) ([#12681](https://github.com/community-scripts/ProxmoxVE/pull/12681))
|
||||||
|
|
||||||
|
## 2026-03-07
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- ImmichFrame ([#12653](https://github.com/community-scripts/ProxmoxVE/pull/12653))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Grocy: bump PHP version from 8.3 to 8.5 [@MickLesk](https://github.com/MickLesk) ([#12651](https://github.com/community-scripts/ProxmoxVE/pull/12651))
|
||||||
|
- Check for influxdb3 installation in update_script [@odin568](https://github.com/odin568) ([#12648](https://github.com/community-scripts/ProxmoxVE/pull/12648))
|
||||||
|
- Update Rdtclient to dotnet 10.0 [@asylumexp](https://github.com/asylumexp) ([#12638](https://github.com/community-scripts/ProxmoxVE/pull/12638))
|
||||||
|
- fix(immich): fix update script failing to add Debian testing repo when preferences file already exists [@Copilot](https://github.com/Copilot) ([#12631](https://github.com/community-scripts/ProxmoxVE/pull/12631))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools: add interactive GitHub PAT prompt on rate limit / auth failure [@MickLesk](https://github.com/MickLesk) ([#12652](https://github.com/community-scripts/ProxmoxVE/pull/12652))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- Papra: update repository URL to papra-hq/papra [@MickLesk](https://github.com/MickLesk) ([#12650](https://github.com/community-scripts/ProxmoxVE/pull/12650))
|
||||||
|
|
||||||
|
## 2026-03-06
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- RustDesk Server: Fix update script [@tremor021](https://github.com/tremor021) ([#12625](https://github.com/community-scripts/ProxmoxVE/pull/12625))
|
||||||
|
- [Node-RED] Restart service after update [@Aurelien30000](https://github.com/Aurelien30000) ([#12621](https://github.com/community-scripts/ProxmoxVE/pull/12621))
|
||||||
|
- wealthfolio: update cors [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12617](https://github.com/community-scripts/ProxmoxVE/pull/12617))
|
||||||
|
- CryptPad: Better update handling [@tremor021](https://github.com/tremor021) ([#12611](https://github.com/community-scripts/ProxmoxVE/pull/12611))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- RustDesk Server: Switch to updated repository [@tremor021](https://github.com/tremor021) ([#12083](https://github.com/community-scripts/ProxmoxVE/pull/12083))
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- Semaphore: Move from BoltDB to SQLite [@tremor021](https://github.com/tremor021) ([#12624](https://github.com/community-scripts/ProxmoxVE/pull/12624))
|
||||||
|
|
||||||
|
## 2026-03-05
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- ddclient ([#12587](https://github.com/community-scripts/ProxmoxVE/pull/12587))
|
||||||
|
- Netbird ([#12585](https://github.com/community-scripts/ProxmoxVE/pull/12585))
|
||||||
|
- Papra ([#12577](https://github.com/community-scripts/ProxmoxVE/pull/12577))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fluid-calendar: add build-essential to install and update dependencies [@Copilot](https://github.com/Copilot) ([#12602](https://github.com/community-scripts/ProxmoxVE/pull/12602))
|
||||||
|
- Refactor: BentoPDF [@vhsdream](https://github.com/vhsdream) ([#12597](https://github.com/community-scripts/ProxmoxVE/pull/12597))
|
||||||
|
- Tianji: Fix the bug introduced by the refactor [@tremor021](https://github.com/tremor021) ([#12564](https://github.com/community-scripts/ProxmoxVE/pull/12564))
|
||||||
|
- PowerDNS: use 'launch=' instead of 'launch+=' for gsqlite3 backend [@MickLesk](https://github.com/MickLesk) ([#12579](https://github.com/community-scripts/ProxmoxVE/pull/12579))
|
||||||
|
|
||||||
|
### 🗑️ Deleted Scripts
|
||||||
|
|
||||||
|
- Suwayomi-Server: remove due to inactivity and very low usage [@MickLesk](https://github.com/MickLesk) ([#12596](https://github.com/community-scripts/ProxmoxVE/pull/12596))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- core: add var_os / var_version to whitelist for app.vars [@MickLesk](https://github.com/MickLesk) ([#12576](https://github.com/community-scripts/ProxmoxVE/pull/12576))
|
||||||
|
|
||||||
|
## 2026-03-04
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fix: gitea-mirror [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12549](https://github.com/community-scripts/ProxmoxVE/pull/12549))
|
||||||
|
- fix(immich): correct LibRaw clone URL to official upstream [@DenislavDenev](https://github.com/DenislavDenev) ([#12526](https://github.com/community-scripts/ProxmoxVE/pull/12526))
|
||||||
|
- update: stirling-pdf: java 25 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12552](https://github.com/community-scripts/ProxmoxVE/pull/12552))
|
||||||
|
- Docmost: register NoopAuditService globally when EE submodule is missing [@MickLesk](https://github.com/MickLesk) ([#12551](https://github.com/community-scripts/ProxmoxVE/pull/12551))
|
||||||
|
- jellyseer/overseer migration corrupting /usr/bin/update [@MickLesk](https://github.com/MickLesk) ([#12539](https://github.com/community-scripts/ProxmoxVE/pull/12539))
|
||||||
|
- PowerDNS: use gsqlite3 backend instead of BIND [@MickLesk](https://github.com/MickLesk) ([#12538](https://github.com/community-scripts/ProxmoxVE/pull/12538))
|
||||||
|
- addon migrations: /usr/bin/update replacement to prevent syntax error [@MickLesk](https://github.com/MickLesk) ([#12540](https://github.com/community-scripts/ProxmoxVE/pull/12540))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Fluid-Calendar: NodeJS bump [@tremor021](https://github.com/tremor021) ([#12558](https://github.com/community-scripts/ProxmoxVE/pull/12558))
|
||||||
|
- Refactor: LiteLLM [@tremor021](https://github.com/tremor021) ([#12550](https://github.com/community-scripts/ProxmoxVE/pull/12550))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- tools: fall back to distro packages for psql [@MickLesk](https://github.com/MickLesk) ([#12542](https://github.com/community-scripts/ProxmoxVE/pull/12542))
|
||||||
|
- fix: whitelist var_searchdomain and fix the handling of var_ns and va… [@tommoyer](https://github.com/tommoyer) ([#12521](https://github.com/community-scripts/ProxmoxVE/pull/12521))
|
||||||
|
|
||||||
|
## 2026-03-03
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Tinyauth: v5 Support & add Debian Version [@MickLesk](https://github.com/MickLesk) ([#12501](https://github.com/community-scripts/ProxmoxVE/pull/12501))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- cross-seed: install build-essential to resolve missing `make` error [@Copilot](https://github.com/Copilot) ([#12522](https://github.com/community-scripts/ProxmoxVE/pull/12522))
|
||||||
|
- meshcentral: increased disk space to 4GB [@MickLesk](https://github.com/MickLesk) ([#12509](https://github.com/community-scripts/ProxmoxVE/pull/12509))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- opnsense-vm: harden temp dir, bridge detection and network selection [@MickLesk](https://github.com/MickLesk) ([#12513](https://github.com/community-scripts/ProxmoxVE/pull/12513))
|
||||||
|
|
||||||
|
### 🗑️ Deleted Scripts
|
||||||
|
|
||||||
|
- Remove Unifi Network Server scripts (dead APT repo) [@Copilot](https://github.com/Copilot) ([#12500](https://github.com/community-scripts/ProxmoxVE/pull/12500))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- core: recovery - add ENOSPC disk-full detection with auto-retry using * 2 hdd [@MickLesk](https://github.com/MickLesk) ([#12511](https://github.com/community-scripts/ProxmoxVE/pull/12511))
|
||||||
|
|
||||||
|
### 📚 Documentation
|
||||||
|
|
||||||
|
- Fix config_path casing in reactive-resume.json [@ScubyG](https://github.com/ScubyG) ([#12525](https://github.com/community-scripts/ProxmoxVE/pull/12525))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Revert #11534 PR that messed up search [@BramSuurdje](https://github.com/BramSuurdje) ([#12492](https://github.com/community-scripts/ProxmoxVE/pull/12492))
|
||||||
|
|
||||||
|
## 2026-03-02
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- PowerDNS ([#12481](https://github.com/community-scripts/ProxmoxVE/pull/12481))
|
||||||
|
- Profilarr ([#12441](https://github.com/community-scripts/ProxmoxVE/pull/12441))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Tracearr: prepare for imminent v1.4.19 release [@durzo](https://github.com/durzo) ([#12413](https://github.com/community-scripts/ProxmoxVE/pull/12413))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Frigate: Bump to v0.17 [@MickLesk](https://github.com/MickLesk) ([#12474](https://github.com/community-scripts/ProxmoxVE/pull/12474))
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- Migrate: DokPloy, Komodo, Coolify, Dockge, Runtipi to Addons [@MickLesk](https://github.com/MickLesk) ([#12275](https://github.com/community-scripts/ProxmoxVE/pull/12275))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- ref: replace generic exit 1 with specific exit codes in ct & install [@MickLesk](https://github.com/MickLesk) ([#12475](https://github.com/community-scripts/ProxmoxVE/pull/12475))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools.func: Improve stability with retry logic, caching, and debug mode [@MickLesk](https://github.com/MickLesk) ([#10351](https://github.com/community-scripts/ProxmoxVE/pull/10351))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- core: standardize exit codes and add mappings [@MickLesk](https://github.com/MickLesk) ([#12467](https://github.com/community-scripts/ProxmoxVE/pull/12467))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- frontend: improve detail view badges, addon texts, and HTML title [@MickLesk](https://github.com/MickLesk) ([#12461](https://github.com/community-scripts/ProxmoxVE/pull/12461))
|
||||||
|
|
||||||
|
## 2026-03-01
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Sparkyfitness: use pnpm [@tomfrenzel](https://github.com/tomfrenzel) ([#12445](https://github.com/community-scripts/ProxmoxVE/pull/12445))
|
||||||
|
- OpenArchiver: Fix installation [@tremor021](https://github.com/tremor021) ([#12447](https://github.com/community-scripts/ProxmoxVE/pull/12447))
|
||||||
|
|
||||||
|
## 2026-02-28
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Update Reactive Resume install script with useful .env information for reverse proxy setup [@Mazianni](https://github.com/Mazianni) ([#12401](https://github.com/community-scripts/ProxmoxVE/pull/12401))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- gramps-web: install addons (FilterRules) for relationship diagram [@MickLesk](https://github.com/MickLesk) ([#12387](https://github.com/community-scripts/ProxmoxVE/pull/12387))
|
||||||
|
- [Fix] Immich: Change `sed` command to fully replace line in postgresql.conf [@vhsdream](https://github.com/vhsdream) ([#12429](https://github.com/community-scripts/ProxmoxVE/pull/12429))
|
||||||
|
- [FIX] Immich: fix Openvino memory leak during OCR; improve HW-accelerated ML performance [@vhsdream](https://github.com/vhsdream) ([#12426](https://github.com/community-scripts/ProxmoxVE/pull/12426))
|
||||||
|
- Fix default tag for ioBroker LXC install [@josefglatz](https://github.com/josefglatz) ([#12423](https://github.com/community-scripts/ProxmoxVE/pull/12423))
|
||||||
|
- Ombi: Add database.json [@hraphael](https://github.com/hraphael) ([#12412](https://github.com/community-scripts/ProxmoxVE/pull/12412))
|
||||||
|
- Dawarich: add missing build deps and handle seed failure [@MickLesk](https://github.com/MickLesk) ([#12410](https://github.com/community-scripts/ProxmoxVE/pull/12410))
|
||||||
|
- pangolin: increase hdd to 10G [@MickLesk](https://github.com/MickLesk) ([#12409](https://github.com/community-scripts/ProxmoxVE/pull/12409))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- BookLore: add additional JVM flags [@vhsdream](https://github.com/vhsdream) ([#12421](https://github.com/community-scripts/ProxmoxVE/pull/12421))
|
||||||
|
|
||||||
|
### 🗑️ Deleted Scripts
|
||||||
|
|
||||||
|
- Delete Palmr [@vhsdream](https://github.com/vhsdream) ([#12399](https://github.com/community-scripts/ProxmoxVE/pull/12399))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- core: read from /dev/tty in all interactive prompts | fix empty or cropped logs due build process [@MickLesk](https://github.com/MickLesk) ([#12406](https://github.com/community-scripts/ProxmoxVE/pull/12406))
|
||||||
|
|
||||||
|
## 2026-02-27
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Strapi ([#12320](https://github.com/community-scripts/ProxmoxVE/pull/12320))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- TrueNAS VM: filter out new nightlies with MASTER [@juronja](https://github.com/juronja) ([#12355](https://github.com/community-scripts/ProxmoxVE/pull/12355))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- core: graceful fallback for apt-get update failures [@MickLesk](https://github.com/MickLesk) ([#12386](https://github.com/community-scripts/ProxmoxVE/pull/12386))
|
||||||
|
- core: Improve error outputs across core functions [@MickLesk](https://github.com/MickLesk) ([#12378](https://github.com/community-scripts/ProxmoxVE/pull/12378))
|
||||||
|
|
||||||
|
## 2026-02-26
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Kima-Hub ([#12319](https://github.com/community-scripts/ProxmoxVE/pull/12319))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- tools.func: update glx alternatives / nvidia alternative if nvidia glx are missing [@MickLesk](https://github.com/MickLesk) ([#12372](https://github.com/community-scripts/ProxmoxVE/pull/12372))
|
||||||
|
- hotfix: overseer version [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12366](https://github.com/community-scripts/ProxmoxVE/pull/12366))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Add ffmpeg for booklore (ffprobe) [@MickLesk](https://github.com/MickLesk) ([#12371](https://github.com/community-scripts/ProxmoxVE/pull/12371))
|
||||||
|
- [QOL] Immich: add warning regarding library compilation time [@vhsdream](https://github.com/vhsdream) ([#12345](https://github.com/community-scripts/ProxmoxVE/pull/12345))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Improves adguardhome-sync addon when running on alpine LXCs [@Darkangeel-hd](https://github.com/Darkangeel-hd) ([#12362](https://github.com/community-scripts/ProxmoxVE/pull/12362))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Add Alpine support and improve Tailscale install [@MickLesk](https://github.com/MickLesk) ([#12370](https://github.com/community-scripts/ProxmoxVE/pull/12370))
|
||||||
|
|
||||||
|
### 📚 Documentation
|
||||||
|
|
||||||
|
- fix wrong link on contributions README.md [@Darkangeel-hd](https://github.com/Darkangeel-hd) ([#12363](https://github.com/community-scripts/ProxmoxVE/pull/12363))
|
||||||
|
|
||||||
|
### 📂 Github
|
||||||
|
|
||||||
|
- github: add workflow to autom. close unauthorized new-script PRs [@MickLesk](https://github.com/MickLesk) ([#12356](https://github.com/community-scripts/ProxmoxVE/pull/12356))
|
||||||
|
|
||||||
## 2026-02-25
|
## 2026-02-25
|
||||||
|
|
||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
@@ -417,6 +802,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fix: overseer migration [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12340](https://github.com/community-scripts/ProxmoxVE/pull/12340))
|
||||||
- add: vikunja: daemon reload [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12323](https://github.com/community-scripts/ProxmoxVE/pull/12323))
|
- add: vikunja: daemon reload [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12323](https://github.com/community-scripts/ProxmoxVE/pull/12323))
|
||||||
- opnsense-VM: Use ip link to verify bridge existence [@MickLesk](https://github.com/MickLesk) ([#12329](https://github.com/community-scripts/ProxmoxVE/pull/12329))
|
- opnsense-VM: Use ip link to verify bridge existence [@MickLesk](https://github.com/MickLesk) ([#12329](https://github.com/community-scripts/ProxmoxVE/pull/12329))
|
||||||
- wger: Use $http_host for proxy Host header [@MickLesk](https://github.com/MickLesk) ([#12327](https://github.com/community-scripts/ProxmoxVE/pull/12327))
|
- wger: Use $http_host for proxy Host header [@MickLesk](https://github.com/MickLesk) ([#12327](https://github.com/community-scripts/ProxmoxVE/pull/12327))
|
||||||
@@ -1045,454 +1431,4 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
### ❔ Uncategorized
|
### ❔ Uncategorized
|
||||||
|
|
||||||
- Opencloud: fix JSON [@vhsdream](https://github.com/vhsdream) ([#11617](https://github.com/community-scripts/ProxmoxVE/pull/11617))
|
- Opencloud: fix JSON [@vhsdream](https://github.com/vhsdream) ([#11617](https://github.com/community-scripts/ProxmoxVE/pull/11617))
|
||||||
|
|
||||||
## 2026-02-05
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- OpenCloud ([#11538](https://github.com/community-scripts/ProxmoxVE/pull/11538))
|
|
||||||
- Nginx-UI ([#11573](https://github.com/community-scripts/ProxmoxVE/pull/11573))
|
|
||||||
- New: SQL-Server 2025 | Refactor SQL-Server 2022 [@MickLesk](https://github.com/MickLesk) ([#11546](https://github.com/community-scripts/ProxmoxVE/pull/11546))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- OpenCloud: pin version to 5.0.2; Collabora CSP fix [@vhsdream](https://github.com/vhsdream) ([#11585](https://github.com/community-scripts/ProxmoxVE/pull/11585))
|
|
||||||
- Wanderer: Fix repo [@tremor021](https://github.com/tremor021) ([#11567](https://github.com/community-scripts/ProxmoxVE/pull/11567))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Refactor: Docker-VM (Multi-OS / Cloud-Init / Stabilization) [@MickLesk](https://github.com/MickLesk) ([#9047](https://github.com/community-scripts/ProxmoxVE/pull/9047))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- cloud-init: add interactive SSH key discovery and selection [@MickLesk](https://github.com/MickLesk) ([#11547](https://github.com/community-scripts/ProxmoxVE/pull/11547))
|
|
||||||
|
|
||||||
### 📚 Documentation
|
|
||||||
|
|
||||||
- github: extend docs / contribution / templates [@MickLesk](https://github.com/MickLesk) ([#10921](https://github.com/community-scripts/ProxmoxVE/pull/10921))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- fix(frontend): theme respective syntax highlighting [@ls-root](https://github.com/ls-root) ([#11565](https://github.com/community-scripts/ProxmoxVE/pull/11565))
|
|
||||||
|
|
||||||
## 2026-02-04
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Wishlist ([#11527](https://github.com/community-scripts/ProxmoxVE/pull/11527))
|
|
||||||
- WriteFreely ([#11524](https://github.com/community-scripts/ProxmoxVE/pull/11524))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- Add log directory and permissions for koillection [@shineangelic](https://github.com/shineangelic) ([#11553](https://github.com/community-scripts/ProxmoxVE/pull/11553))
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- [FIX] Scanopy: ensure Scanopy Daemon update [@vhsdream](https://github.com/vhsdream) ([#11541](https://github.com/community-scripts/ProxmoxVE/pull/11541))
|
|
||||||
- Immich: pin version to 2.5.3 [@vhsdream](https://github.com/vhsdream) ([#11515](https://github.com/community-scripts/ProxmoxVE/pull/11515))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- core: create vm-core.func from dev [@MickLesk](https://github.com/MickLesk) ([#11528](https://github.com/community-scripts/ProxmoxVE/pull/11528))
|
|
||||||
|
|
||||||
### 🧰 Tools
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- [ADDON] Immich Public Proxy addon [@vhsdream](https://github.com/vhsdream) ([#11518](https://github.com/community-scripts/ProxmoxVE/pull/11518))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- fix(frontend): implement weighted search scoring for command menu [@ls-root](https://github.com/ls-root) ([#11534](https://github.com/community-scripts/ProxmoxVE/pull/11534))
|
|
||||||
|
|
||||||
### ❔ Uncategorized
|
|
||||||
|
|
||||||
- [FIX] Immich Public Proxy docs link [@vhsdream](https://github.com/vhsdream) ([#11543](https://github.com/community-scripts/ProxmoxVE/pull/11543))
|
|
||||||
|
|
||||||
## 2026-02-03
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Wealthfolio ([#11511](https://github.com/community-scripts/ProxmoxVE/pull/11511))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- [FIX] Shelfmark: unpin Chromium version [@vhsdream](https://github.com/vhsdream) ([#11505](https://github.com/community-scripts/ProxmoxVE/pull/11505))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- [FEAT] Scanopy: automatically update integrated daemon [@vhsdream](https://github.com/vhsdream) ([#11506](https://github.com/community-scripts/ProxmoxVE/pull/11506))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- [FIX] tools.func: trim spaces in app_lc when checking for gh release [@vhsdream](https://github.com/vhsdream) ([#11512](https://github.com/community-scripts/ProxmoxVE/pull/11512))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- fix(frontend): decouple table pagination from summary fetching [@ls-root](https://github.com/ls-root) ([#11495](https://github.com/community-scripts/ProxmoxVE/pull/11495))
|
|
||||||
|
|
||||||
## 2026-02-02
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- rustypaste | Alpine-rustypaste ([#11457](https://github.com/community-scripts/ProxmoxVE/pull/11457))
|
|
||||||
- KitchenOwl ([#11453](https://github.com/community-scripts/ProxmoxVE/pull/11453))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Grist: Update dependencies [@tremor021](https://github.com/tremor021) ([#11489](https://github.com/community-scripts/ProxmoxVE/pull/11489))
|
|
||||||
- Allow "downgrade" of libigdgmm12 [@vhsdream](https://github.com/vhsdream) ([#11478](https://github.com/community-scripts/ProxmoxVE/pull/11478))
|
|
||||||
- Disable NPM install and update due to OpenResty SHA-1 signature issues [@MickLesk](https://github.com/MickLesk) ([#11471](https://github.com/community-scripts/ProxmoxVE/pull/11471))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Refactor: Forgejo & readeck - migrate to codeberg functions [@MickLesk](https://github.com/MickLesk) ([#11460](https://github.com/community-scripts/ProxmoxVE/pull/11460))
|
|
||||||
|
|
||||||
- #### 💥 Breaking Changes
|
|
||||||
|
|
||||||
- [FIX] Scanopy: remove daemon build [@vhsdream](https://github.com/vhsdream) ([#11444](https://github.com/community-scripts/ProxmoxVE/pull/11444))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Refactor: Vaultwarden [@MickLesk](https://github.com/MickLesk) ([#11445](https://github.com/community-scripts/ProxmoxVE/pull/11445))
|
|
||||||
- various scripts: use ensure_dependencies instead of apt [@MickLesk](https://github.com/MickLesk) ([#11463](https://github.com/community-scripts/ProxmoxVE/pull/11463))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- cleanup(frontend): remove unused /category-view route [@ls-root](https://github.com/ls-root) ([#11461](https://github.com/community-scripts/ProxmoxVE/pull/11461))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- feat(frontend): preview tab [@ls-root](https://github.com/ls-root) ([#11475](https://github.com/community-scripts/ProxmoxVE/pull/11475))
|
|
||||||
|
|
||||||
## 2026-02-01
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- fix headers [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11422](https://github.com/community-scripts/ProxmoxVE/pull/11422))
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- 2fauth: export PHP_VERSION for nginx config [@MickLesk](https://github.com/MickLesk) ([#11441](https://github.com/community-scripts/ProxmoxVE/pull/11441))
|
|
||||||
- Prometheus Paperless NGX Exporter: Set correct binary path in systemd unit file [@andygrunwald](https://github.com/andygrunwald) ([#11438](https://github.com/community-scripts/ProxmoxVE/pull/11438))
|
|
||||||
- tracearr: install/update new prestart script from upstream [@durzo](https://github.com/durzo) ([#11433](https://github.com/community-scripts/ProxmoxVE/pull/11433))
|
|
||||||
- n8n: Fix dependencies [@tremor021](https://github.com/tremor021) ([#11429](https://github.com/community-scripts/ProxmoxVE/pull/11429))
|
|
||||||
- [Hotfix] Bunkerweb update [@vhsdream](https://github.com/vhsdream) ([#11402](https://github.com/community-scripts/ProxmoxVE/pull/11402))
|
|
||||||
- [Hotfix] Immich: revert healthcheck feature [@vhsdream](https://github.com/vhsdream) ([#11427](https://github.com/community-scripts/ProxmoxVE/pull/11427))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- tools.func: add codeberg functions & autocaliweb: migrate from GitHub to Codeberg [@MickLesk](https://github.com/MickLesk) ([#11440](https://github.com/community-scripts/ProxmoxVE/pull/11440))
|
|
||||||
- Immich Refactor #2 [@vhsdream](https://github.com/vhsdream) ([#11375](https://github.com/community-scripts/ProxmoxVE/pull/11375))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- WordPress: Refactor [@tremor021](https://github.com/tremor021) ([#11408](https://github.com/community-scripts/ProxmoxVE/pull/11408))
|
|
||||||
- Refactor: Whisparr [@tremor021](https://github.com/tremor021) ([#11411](https://github.com/community-scripts/ProxmoxVE/pull/11411))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- [tools]: Update `fetch_and_deply_from_url()` [@tremor021](https://github.com/tremor021) ([#11410](https://github.com/community-scripts/ProxmoxVE/pull/11410))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- feat(frontend): implement UX refinements and syntax highlighting [@ls-root](https://github.com/ls-root) ([#11423](https://github.com/community-scripts/ProxmoxVE/pull/11423))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- feat(frontend): add contribution CTA to empty search state [@ls-root](https://github.com/ls-root) ([#11412](https://github.com/community-scripts/ProxmoxVE/pull/11412))
|
|
||||||
|
|
||||||
## 2026-01-31
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- shelfmark ([#11371](https://github.com/community-scripts/ProxmoxVE/pull/11371))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- fix: yubal: add git [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11394](https://github.com/community-scripts/ProxmoxVE/pull/11394))
|
|
||||||
|
|
||||||
## 2026-01-30
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- languagetool ([#11370](https://github.com/community-scripts/ProxmoxVE/pull/11370))
|
|
||||||
- Ampache ([#11369](https://github.com/community-scripts/ProxmoxVE/pull/11369))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Refactor: remove redundant PHP_MODULE entries in several scripts [@MickLesk](https://github.com/MickLesk) ([#11362](https://github.com/community-scripts/ProxmoxVE/pull/11362))
|
|
||||||
- Refactor: Koillection [@MickLesk](https://github.com/MickLesk) ([#11361](https://github.com/community-scripts/ProxmoxVE/pull/11361))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- core: meilisearch - add data migration for version upgrades [@MickLesk](https://github.com/MickLesk) ([#11356](https://github.com/community-scripts/ProxmoxVE/pull/11356))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- [tools] Add `fetch_and_deploy_from_url()` [@tremor021](https://github.com/tremor021) ([#11376](https://github.com/community-scripts/ProxmoxVE/pull/11376))
|
|
||||||
- core: php - improve module handling and prevent installation failures [@MickLesk](https://github.com/MickLesk) ([#11358](https://github.com/community-scripts/ProxmoxVE/pull/11358))
|
|
||||||
|
|
||||||
## 2026-01-29
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Alpine-Valkey [@MickLesk](https://github.com/MickLesk) ([#11320](https://github.com/community-scripts/ProxmoxVE/pull/11320))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Immich: Pin version to 2.5.2 [@vhsdream](https://github.com/vhsdream) ([#11335](https://github.com/community-scripts/ProxmoxVE/pull/11335))
|
|
||||||
- Kollection: Update to php 8.5 [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#11315](https://github.com/community-scripts/ProxmoxVE/pull/11315))
|
|
||||||
- Notifiarr: change installation check from apt to systemd service [@MickLesk](https://github.com/MickLesk) ([#11319](https://github.com/community-scripts/ProxmoxVE/pull/11319))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- [FEAT] Immich: Enable Maintenance Mode before update [@vhsdream](https://github.com/vhsdream) ([#11342](https://github.com/community-scripts/ProxmoxVE/pull/11342))
|
|
||||||
- jellyfin: add logrotate instead of reducing log level [@MickLesk](https://github.com/MickLesk) ([#11326](https://github.com/community-scripts/ProxmoxVE/pull/11326))
|
|
||||||
- core: Add config file handling options | Fix Vikunja update with interactive overwrite [@MickLesk](https://github.com/MickLesk) ([#11317](https://github.com/community-scripts/ProxmoxVE/pull/11317))
|
|
||||||
- Immich: v2.5.0 [@vhsdream](https://github.com/vhsdream) ([#11240](https://github.com/community-scripts/ProxmoxVE/pull/11240))
|
|
||||||
|
|
||||||
- #### 💥 Breaking Changes
|
|
||||||
|
|
||||||
- fix: vikunja v1 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11308](https://github.com/community-scripts/ProxmoxVE/pull/11308))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Refactor: Byparr [@vhsdream](https://github.com/vhsdream) ([#11338](https://github.com/community-scripts/ProxmoxVE/pull/11338))
|
|
||||||
- cloudflare: Remove deprecated DNS-over-HTTPS proxy option [@MickLesk](https://github.com/MickLesk) ([#11068](https://github.com/community-scripts/ProxmoxVE/pull/11068))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- build.func: Replace storage variable with searchdomain variable [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#11322](https://github.com/community-scripts/ProxmoxVE/pull/11322))
|
|
||||||
|
|
||||||
### 📂 Github
|
|
||||||
|
|
||||||
- Add workflow to lock closed issues [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#11316](https://github.com/community-scripts/ProxmoxVE/pull/11316))
|
|
||||||
|
|
||||||
## 2026-01-28
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- nodecast-tv ([#11287](https://github.com/community-scripts/ProxmoxVE/pull/11287))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Ubuntu 25.04 VM - Change default start from yes to no [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#11292](https://github.com/community-scripts/ProxmoxVE/pull/11292))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- various scripts: use setup_meilisearch function [@MickLesk](https://github.com/MickLesk) ([#11259](https://github.com/community-scripts/ProxmoxVE/pull/11259))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Refactor: NPMPlus / Default Login [@MickLesk](https://github.com/MickLesk) ([#11262](https://github.com/community-scripts/ProxmoxVE/pull/11262))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- core: sed patch for ram [@lavacano](https://github.com/lavacano) ([#11285](https://github.com/community-scripts/ProxmoxVE/pull/11285))
|
|
||||||
- Fix installer loop caused by invalid whiptail menu separator [@Mesteriis](https://github.com/Mesteriis) ([#11237](https://github.com/community-scripts/ProxmoxVE/pull/11237))
|
|
||||||
- core: fix Debian 13 LXC template root ownership bug [@MickLesk](https://github.com/MickLesk) ([#11277](https://github.com/community-scripts/ProxmoxVE/pull/11277))
|
|
||||||
- tools.func: prevent systemd-tmpfiles failure in unprivileged LXC during deb install [@MickLesk](https://github.com/MickLesk) ([#11271](https://github.com/community-scripts/ProxmoxVE/pull/11271))
|
|
||||||
- tools.func: fix php "wait_for" hint [@MickLesk](https://github.com/MickLesk) ([#11254](https://github.com/community-scripts/ProxmoxVE/pull/11254))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- core: update dynamic values in LXC profile on update_motd_ip [@MickLesk](https://github.com/MickLesk) ([#11268](https://github.com/community-scripts/ProxmoxVE/pull/11268))
|
|
||||||
- tools.func: add new function - setup_meilisearch [@MickLesk](https://github.com/MickLesk) ([#11258](https://github.com/community-scripts/ProxmoxVE/pull/11258))
|
|
||||||
|
|
||||||
### 📂 Github
|
|
||||||
|
|
||||||
- github: add GitHub-based versions.json updater [@MickLesk](https://github.com/MickLesk) ([#10021](https://github.com/community-scripts/ProxmoxVE/pull/10021))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Frontend: use github-versions.json for version display [@MickLesk](https://github.com/MickLesk) ([#11281](https://github.com/community-scripts/ProxmoxVE/pull/11281))
|
|
||||||
|
|
||||||
- #### 📝 Script Information
|
|
||||||
|
|
||||||
- fix: homarr: conf location [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11253](https://github.com/community-scripts/ProxmoxVE/pull/11253))
|
|
||||||
|
|
||||||
## 2026-01-27
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Immich: update libraw [@vhsdream](https://github.com/vhsdream) ([#11233](https://github.com/community-scripts/ProxmoxVE/pull/11233))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- grist: enable optional enterprise features toggle [@MickLesk](https://github.com/MickLesk) ([#11239](https://github.com/community-scripts/ProxmoxVE/pull/11239))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Termix: use nginx.conf from upstream repo [@MickLesk](https://github.com/MickLesk) ([#11228](https://github.com/community-scripts/ProxmoxVE/pull/11228))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- feat: add NVIDIA driver install prompt for GPU-enabled containers [@devdecrux](https://github.com/devdecrux) ([#11184](https://github.com/community-scripts/ProxmoxVE/pull/11184))
|
|
||||||
|
|
||||||
### 📚 Documentation
|
|
||||||
|
|
||||||
- doc setup_deb822_repo arg order [@chrnie](https://github.com/chrnie) ([#11215](https://github.com/community-scripts/ProxmoxVE/pull/11215))
|
|
||||||
- changelog: archive old entries to year/month files [@MickLesk](https://github.com/MickLesk) ([#11225](https://github.com/community-scripts/ProxmoxVE/pull/11225))
|
|
||||||
|
|
||||||
## 2026-01-26
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Ghost: Fix missing dependency [@tremor021](https://github.com/tremor021) ([#11196](https://github.com/community-scripts/ProxmoxVE/pull/11196))
|
|
||||||
- tracearr: fix install check and update node to version 24 [@durzo](https://github.com/durzo) ([#11188](https://github.com/community-scripts/ProxmoxVE/pull/11188))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- jotty: full refactor / prebuild package [@MickLesk](https://github.com/MickLesk) ([#11059](https://github.com/community-scripts/ProxmoxVE/pull/11059))
|
|
||||||
|
|
||||||
- #### 💥 Breaking Changes
|
|
||||||
|
|
||||||
- Termix: Fixing Nginx configuration for 1.11.0 installs (read description for fix!) [@8b1th3r0](https://github.com/8b1th3r0) ([#11207](https://github.com/community-scripts/ProxmoxVE/pull/11207))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- core: refine cleanup_lxc to safely clear caches [@MickLesk](https://github.com/MickLesk) ([#11197](https://github.com/community-scripts/ProxmoxVE/pull/11197))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- core: add nesting warning for systemd-based distributions [@MickLesk](https://github.com/MickLesk) ([#11208](https://github.com/community-scripts/ProxmoxVE/pull/11208))
|
|
||||||
|
|
||||||
### 🧰 Tools
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- jellystat: correct WorkingDirectory to /backend [@MickLesk](https://github.com/MickLesk) ([#11201](https://github.com/community-scripts/ProxmoxVE/pull/11201))
|
|
||||||
|
|
||||||
## 2026-01-25
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- [FIX] Tautulli: ensure virtualenv is recreated during update; backup tautulli.db [@vhsdream](https://github.com/vhsdream) ([#11182](https://github.com/community-scripts/ProxmoxVE/pull/11182))
|
|
||||||
- [Fix] Pangolin: ensure additional JSON files are in place [@vhsdream](https://github.com/vhsdream) ([#11183](https://github.com/community-scripts/ProxmoxVE/pull/11183))
|
|
||||||
- Manyfold: fix permissions error [@vhsdream](https://github.com/vhsdream) ([#11165](https://github.com/community-scripts/ProxmoxVE/pull/11165))
|
|
||||||
- Termix: recreate nginx dirs and backup uploads on update [@MickLesk](https://github.com/MickLesk) ([#11169](https://github.com/community-scripts/ProxmoxVE/pull/11169))
|
|
||||||
- Deluge: correct service paths to /usr/local/bin [@MickLesk](https://github.com/MickLesk) ([#11170](https://github.com/community-scripts/ProxmoxVE/pull/11170))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Karakeep: Add the FFmpeg option to the installation script [@vonhyou](https://github.com/vonhyou) ([#11157](https://github.com/community-scripts/ProxmoxVE/pull/11157))
|
|
||||||
- apt-cacher-ng: add avahi-daemon for mDNS service discovery [@MickLesk](https://github.com/MickLesk) ([#11140](https://github.com/community-scripts/ProxmoxVE/pull/11140))
|
|
||||||
|
|
||||||
## 2026-01-24
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Manyfold ([#11143](https://github.com/community-scripts/ProxmoxVE/pull/11143))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- elementsynapse: correct parameter order in fetch_and_deploy_gh_release [@MickLesk](https://github.com/MickLesk) ([#11145](https://github.com/community-scripts/ProxmoxVE/pull/11145))
|
|
||||||
- leantime: fix backup file naming [@MickLesk](https://github.com/MickLesk) ([#11137](https://github.com/community-scripts/ProxmoxVE/pull/11137))
|
|
||||||
- [Hotfix] Element Synapse [@vhsdream](https://github.com/vhsdream) ([#11135](https://github.com/community-scripts/ProxmoxVE/pull/11135))
|
|
||||||
- authelia: use POSIX-safe arithmetic to avoid exit code 1 with set -e in subshells [@MickLesk](https://github.com/MickLesk) ([#11125](https://github.com/community-scripts/ProxmoxVE/pull/11125))
|
|
||||||
- Bitmagnet: PostgreSQL and environment variable fixes [@tremor021](https://github.com/tremor021) ([#11119](https://github.com/community-scripts/ProxmoxVE/pull/11119))
|
|
||||||
- Spoolman: move to uv [@vhsdream](https://github.com/vhsdream) ([#11121](https://github.com/community-scripts/ProxmoxVE/pull/11121))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- bump crafty-controller to debian 13 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11094](https://github.com/community-scripts/ProxmoxVE/pull/11094))
|
|
||||||
- Netbox: Refactor [@vhsdream](https://github.com/vhsdream) ([#11126](https://github.com/community-scripts/ProxmoxVE/pull/11126))
|
|
||||||
- Flatnotes: Standard enforcing [@tremor021](https://github.com/tremor021) ([#11109](https://github.com/community-scripts/ProxmoxVE/pull/11109))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- nvidia: use versioned nvidia-utils package for Ubuntu fallback [@MickLesk](https://github.com/MickLesk) ([#11139](https://github.com/community-scripts/ProxmoxVE/pull/11139))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- #### 📝 Script Information
|
|
||||||
|
|
||||||
- Byparr: Add config file path to website [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11120](https://github.com/community-scripts/ProxmoxVE/pull/11120))
|
|
||||||
|
|
||||||
## 2026-01-23
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Tracearr ([#11079](https://github.com/community-scripts/ProxmoxVE/pull/11079))
|
|
||||||
- Dawarich ([#11075](https://github.com/community-scripts/ProxmoxVE/pull/11075))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- fix: homarr: more ram [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11102](https://github.com/community-scripts/ProxmoxVE/pull/11102))
|
|
||||||
- plant-it: re-add JWT_SECRET [@MickLesk](https://github.com/MickLesk) ([#11098](https://github.com/community-scripts/ProxmoxVE/pull/11098))
|
|
||||||
- Tautulli: fix config backup and restore logic [@MickLesk](https://github.com/MickLesk) ([#11099](https://github.com/community-scripts/ProxmoxVE/pull/11099))
|
|
||||||
- Scanopy: remove integrated daemon script [@vhsdream](https://github.com/vhsdream) ([#11100](https://github.com/community-scripts/ProxmoxVE/pull/11100))
|
|
||||||
- fix: reitti start nginx [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11095](https://github.com/community-scripts/ProxmoxVE/pull/11095))
|
|
||||||
- add: uptime-kuma: chromium [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11081](https://github.com/community-scripts/ProxmoxVE/pull/11081))
|
|
||||||
- fix(install): Add typing_extensions to SearXNG Python dependencies [@ZarenOFF](https://github.com/ZarenOFF) ([#11074](https://github.com/community-scripts/ProxmoxVE/pull/11074))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Bump various scripts to Debian 13 (Trixie) [@MickLesk](https://github.com/MickLesk) ([#11093](https://github.com/community-scripts/ProxmoxVE/pull/11093))
|
|
||||||
- several scripts: bump default Alpine version to 3.23 [@MickLesk](https://github.com/MickLesk) ([#11082](https://github.com/community-scripts/ProxmoxVE/pull/11082))
|
|
||||||
- PDM: avoid installing useless package [@LongQT-sea](https://github.com/LongQT-sea) ([#10833](https://github.com/community-scripts/ProxmoxVE/pull/10833))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- FHEM: Bump to Debian 13 [@tremor021](https://github.com/tremor021) ([#11061](https://github.com/community-scripts/ProxmoxVE/pull/11061))
|
|
||||||
- Duplicati: Bump to Debian 13 [@tremor021](https://github.com/tremor021) ([#11060](https://github.com/community-scripts/ProxmoxVE/pull/11060))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- core: add IPv6 fallback support to get_current_ip functions | add check for SSH_KEYS_FILE in user_defaults [@MickLesk](https://github.com/MickLesk) ([#11067](https://github.com/community-scripts/ProxmoxVE/pull/11067))
|
|
||||||
@@ -19,44 +19,48 @@ variables
|
|||||||
color
|
color
|
||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
|
ADDON_SCRIPT="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/komodo.sh"
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
[[ -d /opt/komodo ]] || {
|
if [[ ! -d /opt/komodo ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
}
|
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
|
||||||
COMPOSE_FILE=$(find /opt/komodo -maxdepth 1 -type f -name '*.compose.yaml' ! -name 'compose.env' | head -n1)
|
|
||||||
if [[ -z "$COMPOSE_FILE" ]]; then
|
|
||||||
msg_error "No valid compose file found in /opt/komodo!"
|
|
||||||
exit
|
|
||||||
fi
|
fi
|
||||||
COMPOSE_BASENAME=$(basename "$COMPOSE_FILE")
|
|
||||||
|
|
||||||
if [[ "$COMPOSE_BASENAME" == "sqlite.compose.yaml" || "$COMPOSE_BASENAME" == "postgres.compose.yaml" ]]; then
|
msg_warn "⚠️ ${APP} has been migrated to an addon script."
|
||||||
msg_error "❌ Detected outdated Komodo setup using SQLite or PostgreSQL (FerretDB v1)."
|
echo ""
|
||||||
echo -e "${YW}This configuration is no longer supported since Komodo v1.18.0.${CL}"
|
msg_info "This is a one-time migration. After this, you can update ${APP} anytime with:"
|
||||||
echo -e "${YW}Please follow the migration guide:${CL}"
|
echo -e "${TAB}${TAB}${GN}update_komodo${CL} or ${GN}bash <(curl -fsSL ${ADDON_SCRIPT})${CL}"
|
||||||
echo -e "${BGN}https://github.com/community-scripts/ProxmoxVE/discussions/5689${CL}\n"
|
echo ""
|
||||||
|
read -r -p "${TAB}Migrate update function now? [y/N]: " CONFIRM
|
||||||
|
if [[ ! "${CONFIRM,,}" =~ ^(y|yes)$ ]]; then
|
||||||
|
msg_warn "Migration skipped. The old update will continue to work for now."
|
||||||
|
msg_info "Updating ${APP} (legacy)"
|
||||||
|
COMPOSE_FILE=$(find /opt/komodo -maxdepth 1 -type f -name '*.compose.yaml' ! -name 'compose.env' | head -n1)
|
||||||
|
if [[ -z "$COMPOSE_FILE" ]]; then
|
||||||
|
msg_error "No valid compose file found in /opt/komodo!"
|
||||||
|
exit 252
|
||||||
|
fi
|
||||||
|
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env pull
|
||||||
|
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d
|
||||||
|
msg_ok "Updated ${APP}"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
BACKUP_FILE="/opt/komodo/${COMPOSE_BASENAME}.bak_$(date +%Y%m%d_%H%M%S)"
|
msg_info "Migrating update function"
|
||||||
cp "$COMPOSE_FILE" "$BACKUP_FILE" || {
|
TMP_UPDATE=$(mktemp)
|
||||||
msg_error "Failed to create backup of ${COMPOSE_BASENAME}!"
|
cat <<'MIGRATION_EOF' >"$TMP_UPDATE"
|
||||||
exit
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/komodo.sh)"
|
||||||
}
|
MIGRATION_EOF
|
||||||
GITHUB_URL="https://raw.githubusercontent.com/moghtech/komodo/main/compose/${COMPOSE_BASENAME}"
|
mv "$TMP_UPDATE" /usr/bin/update
|
||||||
if ! curl -fsSL "$GITHUB_URL" -o "$COMPOSE_FILE"; then
|
chmod +x /usr/bin/update
|
||||||
msg_error "Failed to download ${COMPOSE_BASENAME} from GitHub!"
|
|
||||||
mv "$BACKUP_FILE" "$COMPOSE_FILE"
|
ln -sf /usr/bin/update /usr/bin/update_komodo 2>/dev/null || true
|
||||||
exit
|
msg_ok "Migration complete"
|
||||||
fi
|
|
||||||
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env pull
|
msg_info "Running addon update"
|
||||||
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d
|
type=update bash <(curl -fsSL "${ADDON_SCRIPT}")
|
||||||
msg_ok "Updated Alpine-Komodo"
|
exit
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
exit 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@@ -31,6 +31,10 @@ function update_script() {
|
|||||||
msg_info "Updating Node-RED"
|
msg_info "Updating Node-RED"
|
||||||
$STD npm install -g --unsafe-perm node-red
|
$STD npm install -g --unsafe-perm node-red
|
||||||
msg_ok "Updated Node-RED"
|
msg_ok "Updated Node-RED"
|
||||||
|
|
||||||
|
msg_info "Restarting Node-RED"
|
||||||
|
$STD rc-service nodered restart
|
||||||
|
msg_ok "Restarted Node-RED"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,21 +27,21 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
if [ "${RELEASE}" != "$(cat ~/.rustdesk-server 2>/dev/null)" ] || [ ! -f ~/.rustdesk-server ]; then
|
if [ "${RELEASE}" != "$(cat ~/.rustdesk-server 2>/dev/null)" ] || [ ! -f ~/.rustdesk-server ]; then
|
||||||
msg_info "Updating RustDesk Server to v${RELEASE}"
|
msg_info "Updating RustDesk Server to v${RELEASE}"
|
||||||
$STD apk -U upgrade
|
$STD apk -U upgrade
|
||||||
$STD service rustdesk-server-hbbs stop
|
$STD service rustdesk-server-hbbs stop
|
||||||
$STD service rustdesk-server-hbbr stop
|
$STD service rustdesk-server-hbbr stop
|
||||||
temp_file1=$(mktemp)
|
temp_file1=$(mktemp)
|
||||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-amd64.zip" -o "$temp_file1"
|
curl -fsSL "https://github.com/lejianwen/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-linux-amd64.zip" -o "$temp_file1"
|
||||||
$STD unzip "$temp_file1"
|
$STD unzip "$temp_file1"
|
||||||
cp -r amd64/* /opt/rustdesk-server/
|
cp -r amd64/* /opt/rustdesk-server/
|
||||||
echo "${RELEASE}" >~/.rustdesk-server
|
echo "${RELEASE}" >~/.rustdesk-server
|
||||||
$STD service rustdesk-server-hbbs start
|
$STD service rustdesk-server-hbbs start
|
||||||
$STD service rustdesk-server-hbbr start
|
$STD service rustdesk-server-hbbr start
|
||||||
rm -rf amd64
|
rm -rf amd64
|
||||||
rm -f $temp_file1
|
rm -f "$temp_file1"
|
||||||
msg_ok "Updated RustDesk Server"
|
msg_ok "Updated RustDesk Server"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
@@ -56,7 +56,7 @@ function update_script() {
|
|||||||
echo "${APIRELEASE}" >~/.rustdesk-api
|
echo "${APIRELEASE}" >~/.rustdesk-api
|
||||||
$STD service rustdesk-api start
|
$STD service rustdesk-api start
|
||||||
rm -rf release
|
rm -rf release
|
||||||
rm -f $temp_file2
|
rm -f "$temp_file2"
|
||||||
msg_ok "Updated RustDesk API"
|
msg_ok "Updated RustDesk API"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. RustDesk API is already at v${APIRELEASE}"
|
msg_ok "No update required. RustDesk API is already at v${APIRELEASE}"
|
||||||
|
|||||||
@@ -35,6 +35,20 @@ function update_script() {
|
|||||||
$STD service tinyauth stop
|
$STD service tinyauth stop
|
||||||
msg_ok "Service Stopped"
|
msg_ok "Service Stopped"
|
||||||
|
|
||||||
|
if [[ -f /opt/tinyauth/.env ]] && ! grep -q "^TINYAUTH_" /opt/tinyauth/.env; then
|
||||||
|
msg_info "Migrating .env to v5 format"
|
||||||
|
sed -i \
|
||||||
|
-e 's/^DATABASE_PATH=/TINYAUTH_DATABASE_PATH=/' \
|
||||||
|
-e 's/^USERS=/TINYAUTH_AUTH_USERS=/' \
|
||||||
|
-e "s/^USERS='/TINYAUTH_AUTH_USERS='/" \
|
||||||
|
-e 's/^APP_URL=/TINYAUTH_APPURL=/' \
|
||||||
|
-e 's/^SECRET=/TINYAUTH_AUTH_SECRET=/' \
|
||||||
|
-e 's/^PORT=/TINYAUTH_SERVER_PORT=/' \
|
||||||
|
-e 's/^ADDRESS=/TINYAUTH_SERVER_ADDRESS=/' \
|
||||||
|
/opt/tinyauth/.env
|
||||||
|
msg_ok "Migrated .env to v5 format"
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Updating Tinyauth"
|
msg_info "Updating Tinyauth"
|
||||||
rm -f /opt/tinyauth/tinyauth
|
rm -f /opt/tinyauth/tinyauth
|
||||||
curl -fsSL "https://github.com/steveiliop56/tinyauth/releases/download/v${RELEASE}/tinyauth-amd64" -o /opt/tinyauth/tinyauth
|
curl -fsSL "https://github.com/steveiliop56/tinyauth/releases/download/v${RELEASE}/tinyauth-amd64" -o /opt/tinyauth/tinyauth
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
|||||||
|
|
||||||
APP="BentoPDF"
|
APP="BentoPDF"
|
||||||
var_tags="${var_tags:-pdf-editor}"
|
var_tags="${var_tags:-pdf-editor}"
|
||||||
var_cpu="${var_cpu:-1}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-4096}"
|
var_ram="${var_ram:-4096}"
|
||||||
var_disk="${var_disk:-4}"
|
var_disk="${var_disk:-4}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
@@ -35,16 +35,32 @@ function update_script() {
|
|||||||
systemctl stop bentopdf
|
systemctl stop bentopdf
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
[[ -f /opt/bentopdf/.env.production ]] && cp /opt/bentopdf/.env.production /opt/production.env
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bentopdf" "alam00000/bentopdf" "tarball" "latest" "/opt/bentopdf"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bentopdf" "alam00000/bentopdf" "tarball" "latest" "/opt/bentopdf"
|
||||||
|
|
||||||
msg_info "Updating BentoPDF"
|
msg_info "Updating BentoPDF"
|
||||||
cd /opt/bentopdf
|
cd /opt/bentopdf
|
||||||
$STD npm ci --no-audit --no-fund
|
$STD npm ci --no-audit --no-fund
|
||||||
|
$STD npm install http-server -g
|
||||||
|
if [[ -f /opt/production.env ]]; then
|
||||||
|
mv /opt/production.env ./.env.production
|
||||||
|
else
|
||||||
|
cp ./.env.example ./.env.production
|
||||||
|
fi
|
||||||
|
export NODE_OPTIONS="--max-old-space-size=3072"
|
||||||
export SIMPLE_MODE=true
|
export SIMPLE_MODE=true
|
||||||
$STD npm run build -- --mode production
|
export VITE_USE_CDN=true
|
||||||
|
$STD npm run build:all
|
||||||
msg_ok "Updated BentoPDF"
|
msg_ok "Updated BentoPDF"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
|
if grep -q '8080' /etc/systemd/system/bentopdf.service; then
|
||||||
|
sed -i -e 's|/bentopdf|/bentopdf/dist|' \
|
||||||
|
-e 's|npx.*|npx http-server -g -b -d false -r --no-dotfiles|' \
|
||||||
|
/etc/systemd/system/bentopdf.service
|
||||||
|
systemctl daemon-reload
|
||||||
|
fi
|
||||||
systemctl start bentopdf
|
systemctl start bentopdf
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ function update_script() {
|
|||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
setup_mariadb
|
setup_mariadb
|
||||||
setup_yq
|
setup_yq
|
||||||
|
ensure_dependencies ffmpeg
|
||||||
|
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop booklore
|
systemctl stop booklore
|
||||||
@@ -90,7 +91,7 @@ function update_script() {
|
|||||||
echo "SERVER_PORT=6060" >>/opt/booklore_storage/.env
|
echo "SERVER_PORT=6060" >>/opt/booklore_storage/.env
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sed -i 's|ExecStart=/usr/bin/java -jar|ExecStart=/usr/bin/java -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompactObjectHeaders -jar|' /etc/systemd/system/booklore.service
|
sed -i 's|ExecStart=.*|ExecStart=/usr/bin/java -XX:+UseG1GC -XX:+UseStringDeduplication -XX:+UseCompactObjectHeaders -XX:MaxRAMPercentage=75.0 -XX:+ExitOnOutOfMemoryError -jar /opt/booklore/dist/app.jar|' /etc/systemd/system/booklore.service
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ variables
|
|||||||
color
|
color
|
||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
|
ADDON_SCRIPT="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/coolify.sh"
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
@@ -29,10 +31,33 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating Coolify"
|
msg_warn "⚠️ ${APP} has been migrated to an addon script."
|
||||||
$STD bash <(curl -fsSL https://cdn.coollabs.io/coolify/install.sh)
|
echo ""
|
||||||
msg_ok "Updated Coolify"
|
msg_info "This is a one-time migration. After this, you can update ${APP} anytime with:"
|
||||||
msg_ok "Updated successfully!"
|
echo -e "${TAB}${TAB}${GN}update_coolify${CL} or ${GN}bash <(curl -fsSL ${ADDON_SCRIPT})${CL}"
|
||||||
|
echo ""
|
||||||
|
read -r -p "${TAB}Migrate update function now? [y/N]: " CONFIRM
|
||||||
|
if [[ ! "${CONFIRM,,}" =~ ^(y|yes)$ ]]; then
|
||||||
|
msg_warn "Migration skipped. The old update will continue to work for now."
|
||||||
|
msg_info "Updating ${APP} (legacy)"
|
||||||
|
$STD bash <(curl -fsSL https://cdn.coollabs.io/coolify/install.sh)
|
||||||
|
msg_ok "Updated ${APP}"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Migrating update function"
|
||||||
|
TMP_UPDATE=$(mktemp)
|
||||||
|
cat <<'MIGRATION_EOF' >"$TMP_UPDATE"
|
||||||
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/coolify.sh)"
|
||||||
|
MIGRATION_EOF
|
||||||
|
mv "$TMP_UPDATE" /usr/bin/update
|
||||||
|
chmod +x /usr/bin/update
|
||||||
|
|
||||||
|
ln -sf /usr/bin/update /usr/bin/update_coolify 2>/dev/null || true
|
||||||
|
msg_ok "Migration complete"
|
||||||
|
|
||||||
|
msg_info "Running addon update"
|
||||||
|
type=update bash <(curl -fsSL "${ADDON_SCRIPT}")
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ function update_script() {
|
|||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
NODE_VERSION="24" setup_nodejs
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
ensure_dependencies build-essential
|
||||||
|
|
||||||
if command -v cross-seed &>/dev/null; then
|
if command -v cross-seed &>/dev/null; then
|
||||||
current_version=$(cross-seed --version)
|
current_version=$(cross-seed --version)
|
||||||
|
|||||||
@@ -33,17 +33,23 @@ function update_script() {
|
|||||||
systemctl stop cryptpad
|
systemctl stop cryptpad
|
||||||
msg_info "Stopped Service"
|
msg_info "Stopped Service"
|
||||||
|
|
||||||
msg_info "Backing up configuration"
|
msg_info "Creating backup"
|
||||||
[ -f /opt/cryptpad/config/config.js ] && mv /opt/cryptpad/config/config.js /opt/
|
[ -f /opt/cryptpad/config/config.js ] && mv /opt/cryptpad/config/config.js /opt/
|
||||||
msg_ok "Backed up configuration"
|
for dir in blob block customize data datastore www/common/onlyoffice/dist onlyoffice-conf; do
|
||||||
|
[ -d "/opt/cryptpad/${dir}" ] && mv "/opt/cryptpad/${dir}" "/tmp/cryptpad_${dir//\//_}"
|
||||||
|
done
|
||||||
|
msg_ok "Created backup"
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cryptpad" "cryptpad/cryptpad" "tarball"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cryptpad" "cryptpad/cryptpad" "tarball"
|
||||||
|
|
||||||
msg_info "Restoring configuration"
|
msg_info "Restoring backup"
|
||||||
mv /opt/config.js /opt/cryptpad/config/
|
mv /opt/config.js /opt/cryptpad/config/
|
||||||
msg_ok "Configuration restored"
|
for dir in blob block customize data datastore www/common/onlyoffice/dist onlyoffice-conf; do
|
||||||
|
[ -d "/tmp/cryptpad_${dir//\//_}" ] && mv "/tmp/cryptpad_${dir//\//_}" "/opt/cryptpad/${dir}"
|
||||||
|
done
|
||||||
|
msg_ok "Restored backup"
|
||||||
|
|
||||||
msg_info "Updating CryptaPad"
|
msg_info "Updating CryptPad"
|
||||||
cd /opt/cryptpad
|
cd /opt/cryptpad
|
||||||
$STD npm ci
|
$STD npm ci
|
||||||
$STD npm run install:components
|
$STD npm run install:components
|
||||||
|
|||||||
@@ -29,6 +29,8 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
ensure_dependencies libgeos++-dev libxml2-dev libxslt-dev libjemalloc-dev
|
||||||
|
|
||||||
if check_for_gh_release "dawarich" "Freika/dawarich"; then
|
if check_for_gh_release "dawarich" "Freika/dawarich"; then
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop dawarich-web dawarich-worker
|
systemctl stop dawarich-web dawarich-worker
|
||||||
|
|||||||
@@ -1,17 +1,18 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2026 tteck
|
|
||||||
# Author: tteck (tteckster)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://ui.com/download/unifi
|
|
||||||
|
|
||||||
APP="Unifi"
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
var_tags="${var_tags:-network;unifi}"
|
# Author: mitchscobell
|
||||||
var_cpu="${var_cpu:-2}"
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
var_ram="${var_ram:-2048}"
|
# Source: https://ddclient.net/
|
||||||
var_disk="${var_disk:-8}"
|
|
||||||
|
APP="ddclient"
|
||||||
|
var_tags="${var_tags:-network}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-512}"
|
||||||
|
var_disk="${var_disk:-2}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
@@ -23,16 +24,16 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -d /usr/lib/unifi ]]; then
|
if [[ ! -f /etc/ddclient.conf ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
JAVA_VERSION="21" setup_java
|
msg_info "Updating ddclient"
|
||||||
|
$STD apt update
|
||||||
msg_info "Updating ${APP}"
|
$STD apt install --only-upgrade -y ddclient
|
||||||
$STD apt update --allow-releaseinfo-change
|
$STD systemctl restart ddclient
|
||||||
ensure_dependencies unifi
|
msg_ok "Updated ddclient"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
@@ -43,5 +44,3 @@ description
|
|||||||
|
|
||||||
msg_ok "Completed successfully!\n"
|
msg_ok "Completed successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:8443${CL}"
|
|
||||||
43
ct/dockge.sh
43
ct/dockge.sh
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2026 tteck
|
# Copyright (c) 2021-2026 tteck
|
||||||
# Author: tteck (tteckster)
|
# Author: tteck (tteckster) | Migration: MickLesk (CanbiZ)
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://dockge.kuma.pet/
|
# Source: https://dockge.kuma.pet/
|
||||||
|
|
||||||
@@ -19,26 +19,47 @@ variables
|
|||||||
color
|
color
|
||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
|
ADDON_SCRIPT="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/dockge.sh"
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -d /opt/dockge ]]; then
|
if [[ ! -d /opt/dockge ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating base system"
|
msg_warn "⚠️ ${APP} has been migrated to an addon script."
|
||||||
$STD apt update
|
echo ""
|
||||||
$STD apt upgrade -y
|
msg_info "This is a one-time migration. After this, you can update ${APP} anytime with:"
|
||||||
msg_ok "Base system updated"
|
echo -e "${TAB}${TAB}${GN}update_dockge${CL} or ${GN}bash <(curl -fsSL ${ADDON_SCRIPT})${CL}"
|
||||||
|
echo ""
|
||||||
|
read -r -p "${TAB}Migrate update function now? [y/N]: " CONFIRM
|
||||||
|
if [[ ! "${CONFIRM,,}" =~ ^(y|yes)$ ]]; then
|
||||||
|
msg_warn "Migration skipped. The old update will continue to work for now."
|
||||||
|
msg_info "Updating ${APP} (legacy)"
|
||||||
|
cd /opt/dockge
|
||||||
|
$STD docker compose pull
|
||||||
|
$STD docker compose up -d
|
||||||
|
msg_ok "Updated ${APP}"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Updating Dockge"
|
msg_info "Migrating update function"
|
||||||
cd /opt/dockge
|
TMP_UPDATE=$(mktemp)
|
||||||
$STD docker compose pull
|
cat <<'MIGRATION_EOF' >"$TMP_UPDATE"
|
||||||
$STD docker compose up -d
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/dockge.sh)"
|
||||||
msg_ok "Updated Dockge"
|
MIGRATION_EOF
|
||||||
msg_ok "Updated successfully!"
|
mv "$TMP_UPDATE" /usr/bin/update
|
||||||
|
chmod +x /usr/bin/update
|
||||||
|
|
||||||
|
ln -sf /usr/bin/update /usr/bin/update_dockge 2>/dev/null || true
|
||||||
|
msg_ok "Migration complete"
|
||||||
|
|
||||||
|
msg_info "Running addon update"
|
||||||
|
type=update bash <(curl -fsSL "${ADDON_SCRIPT}")
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -48,6 +48,17 @@ function update_script() {
|
|||||||
cd /opt/docmost
|
cd /opt/docmost
|
||||||
mv /opt/.env /opt/docmost/.env
|
mv /opt/.env /opt/docmost/.env
|
||||||
mv /opt/data /opt/docmost/data
|
mv /opt/data /opt/docmost/data
|
||||||
|
|
||||||
|
# Fix: Docmost EE (audit logs etc.) lives in a git submodule that is NOT
|
||||||
|
# included in GitHub tarballs. The community NoopAuditService exists but
|
||||||
|
# is only exported by CoreModule – child modules such as UserModule cannot
|
||||||
|
# resolve it. Making CoreModule @Global() exposes the token app-wide.
|
||||||
|
if [[ ! -f /opt/docmost/apps/server/src/ee/ee.module.ts ]] \
|
||||||
|
&& ! grep -q '@Global()' /opt/docmost/apps/server/src/core/core.module.ts 2>/dev/null; then
|
||||||
|
sed -i '/^ Module,$/a\ Global,' /opt/docmost/apps/server/src/core/core.module.ts
|
||||||
|
sed -i '/^@Module({$/i @Global()' /opt/docmost/apps/server/src/core/core.module.ts
|
||||||
|
fi
|
||||||
|
|
||||||
$STD pnpm install --force
|
$STD pnpm install --force
|
||||||
$STD pnpm build
|
$STD pnpm build
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ variables
|
|||||||
color
|
color
|
||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
|
ADDON_SCRIPT="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/dokploy.sh"
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
@@ -29,10 +31,33 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating Dokploy"
|
msg_warn "⚠️ ${APP} has been migrated to an addon script."
|
||||||
curl -sSL https://dokploy.com/install.sh | $STD bash -s update
|
echo ""
|
||||||
msg_ok "Updated Dokploy"
|
msg_info "This is a one-time migration. After this, you can update ${APP} anytime with:"
|
||||||
msg_ok "Updated successfully!"
|
echo -e "${TAB}${TAB}${GN}update_dokploy${CL} or ${GN}bash <(curl -fsSL ${ADDON_SCRIPT})${CL}"
|
||||||
|
echo ""
|
||||||
|
read -r -p "${TAB}Migrate update function now? [y/N]: " CONFIRM
|
||||||
|
if [[ ! "${CONFIRM,,}" =~ ^(y|yes)$ ]]; then
|
||||||
|
msg_warn "Migration skipped. The old update will continue to work for now."
|
||||||
|
msg_info "Updating ${APP} (legacy)"
|
||||||
|
curl -sSL https://dokploy.com/install.sh | $STD bash -s update
|
||||||
|
msg_ok "Updated ${APP}"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Migrating update function"
|
||||||
|
TMP_UPDATE=$(mktemp)
|
||||||
|
cat <<'MIGRATION_EOF' >"$TMP_UPDATE"
|
||||||
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/dokploy.sh)"
|
||||||
|
MIGRATION_EOF
|
||||||
|
mv "$TMP_UPDATE" /usr/bin/update
|
||||||
|
chmod +x /usr/bin/update
|
||||||
|
|
||||||
|
ln -sf /usr/bin/update /usr/bin/update_dokploy 2>/dev/null || true
|
||||||
|
msg_ok "Migration complete"
|
||||||
|
|
||||||
|
msg_info "Running addon update"
|
||||||
|
type=update bash <(curl -fsSL "${ADDON_SCRIPT}")
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ function update_script() {
|
|||||||
|
|
||||||
if [[ ! -d /opt/endurain ]]; then
|
if [[ ! -d /opt/endurain ]]; then
|
||||||
msg_error "No ${APP} installation found!"
|
msg_error "No ${APP} installation found!"
|
||||||
exit 1
|
exit 233
|
||||||
fi
|
fi
|
||||||
if check_for_gh_release "endurain" "endurain-project/endurain"; then
|
if check_for_gh_release "endurain" "endurain-project/endurain"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ function update_script() {
|
|||||||
check_container_resources
|
check_container_resources
|
||||||
if ! command -v evcc >/dev/null 2>&1; then
|
if ! command -v evcc >/dev/null 2>&1; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit 1
|
exit 233
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -f /etc/apt/sources.list.d/evcc-stable.list ]]; then
|
if [[ -f /etc/apt/sources.list.d/evcc-stable.list ]]; then
|
||||||
|
|||||||
@@ -28,6 +28,10 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
ensure_dependencies build-essential
|
||||||
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
|
||||||
if check_for_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar"; then
|
if check_for_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop fluid-calendar
|
systemctl stop fluid-calendar
|
||||||
@@ -45,7 +49,7 @@ function update_script() {
|
|||||||
$STD npx prisma migrate deploy
|
$STD npx prisma migrate deploy
|
||||||
$STD npm run build:os
|
$STD npm run build:os
|
||||||
msg_ok "Updated Fluid Calendar"
|
msg_ok "Updated Fluid Calendar"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start fluid-calendar
|
systemctl start fluid-calendar
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|||||||
@@ -87,6 +87,8 @@ EOF
|
|||||||
msg_ok "Old Enviroment fixed"
|
msg_ok "Old Enviroment fixed"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
ensure_dependencies git
|
||||||
|
|
||||||
if check_for_gh_release "gitea-mirror" "RayLabsHQ/gitea-mirror"; then
|
if check_for_gh_release "gitea-mirror" "RayLabsHQ/gitea-mirror"; then
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop gitea-mirror
|
systemctl stop gitea-mirror
|
||||||
@@ -94,7 +96,7 @@ EOF
|
|||||||
|
|
||||||
msg_info "Backup Data"
|
msg_info "Backup Data"
|
||||||
mkdir -p /opt/gitea-mirror-backup/data
|
mkdir -p /opt/gitea-mirror-backup/data
|
||||||
cp /opt/gitea-mirror/data/* /opt/gitea-mirror-backup/data/
|
cp -r /opt/gitea-mirror/data/* /opt/gitea-mirror-backup/data/
|
||||||
msg_ok "Backup Data"
|
msg_ok "Backup Data"
|
||||||
|
|
||||||
msg_info "Installing Bun"
|
msg_info "Installing Bun"
|
||||||
@@ -111,12 +113,11 @@ EOF
|
|||||||
$STD bun run setup
|
$STD bun run setup
|
||||||
$STD bun run build
|
$STD bun run build
|
||||||
APP_VERSION=$(grep -o '"version": *"[^"]*"' package.json | cut -d'"' -f4)
|
APP_VERSION=$(grep -o '"version": *"[^"]*"' package.json | cut -d'"' -f4)
|
||||||
|
sed -i.bak "s|^npm_package_version=.*|npm_package_version=${APP_VERSION}|" /opt/gitea-mirror.env
|
||||||
sudo sed -i.bak "s|^npm_package_version=.*|npm_package_version=${APP_VERSION}|" /opt/gitea-mirror.env
|
|
||||||
msg_ok "Updated and rebuilt ${APP}"
|
msg_ok "Updated and rebuilt ${APP}"
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
msg_info "Restoring Data"
|
||||||
cp /opt/gitea-mirror-backup/data/* /opt/gitea-mirror/data
|
cp -r /opt/gitea-mirror-backup/data/* /opt/gitea-mirror/data
|
||||||
msg_ok "Restored Data"
|
msg_ok "Restored Data"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ function update_script() {
|
|||||||
|
|
||||||
if ! dpkg -s grafana >/dev/null 2>&1; then
|
if ! dpkg -s grafana >/dev/null 2>&1; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit 1
|
exit 233
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -f /etc/apt/sources.list.d/grafana.list ]] || [[ ! -f /etc/apt/sources.list.d/grafana.sources ]]; then
|
if [[ -f /etc/apt/sources.list.d/grafana.list ]] || [[ ! -f /etc/apt/sources.list.d/grafana.sources ]]; then
|
||||||
|
|||||||
@@ -51,11 +51,23 @@ function update_script() {
|
|||||||
cd /opt/gramps-web-api
|
cd /opt/gramps-web-api
|
||||||
GRAMPS_API_CONFIG=/opt/gramps-web/config/config.cfg \
|
GRAMPS_API_CONFIG=/opt/gramps-web/config/config.cfg \
|
||||||
ALEMBIC_CONFIG=/opt/gramps-web-api/alembic.ini \
|
ALEMBIC_CONFIG=/opt/gramps-web-api/alembic.ini \
|
||||||
GRAMPSHOME=/opt/gramps-web/data/gramps \
|
GRAMPSHOME=/opt/gramps-web/data \
|
||||||
GRAMPS_DATABASE_PATH=/opt/gramps-web/data/gramps/grampsdb \
|
GRAMPS_DATABASE_PATH=/opt/gramps-web/data/gramps/grampsdb \
|
||||||
$STD /opt/gramps-web/venv/bin/python3 -m gramps_webapi user migrate
|
$STD /opt/gramps-web/venv/bin/python3 -m gramps_webapi user migrate
|
||||||
msg_ok "Applied Database Migration"
|
msg_ok "Applied Database Migration"
|
||||||
|
|
||||||
|
msg_info "Updating Gramps Addons"
|
||||||
|
GRAMPS_VERSION=$(/opt/gramps-web/venv/bin/python3 -c "import gramps.version; print('%s%s' % (gramps.version.VERSION_TUPLE[0], gramps.version.VERSION_TUPLE[1]))" 2>/dev/null || echo "60")
|
||||||
|
GRAMPS_PLUGINS_DIR="/opt/gramps-web/data/gramps/gramps${GRAMPS_VERSION}/plugins"
|
||||||
|
mkdir -p "$GRAMPS_PLUGINS_DIR"
|
||||||
|
$STD wget -q https://github.com/gramps-project/addons/archive/refs/heads/master.zip -O /tmp/gramps-addons.zip
|
||||||
|
for addon in FilterRules JSON; do
|
||||||
|
unzip -p /tmp/gramps-addons.zip "addons-master/gramps${GRAMPS_VERSION}/download/${addon}.addon.tgz" |
|
||||||
|
tar -xz -C "$GRAMPS_PLUGINS_DIR"
|
||||||
|
done
|
||||||
|
rm -f /tmp/gramps-addons.zip
|
||||||
|
msg_ok "Updated Gramps Addons"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start gramps-web
|
systemctl start gramps-web
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|||||||
@@ -28,8 +28,8 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
php_ver=$(php -v | head -n 1 | awk '{print $2}')
|
php_ver=$(php -v | head -n 1 | awk '{print $2}')
|
||||||
if [[ ! $php_ver == "8.3"* ]]; then
|
if [[ ! $php_ver == "8.5"* ]]; then
|
||||||
PHP_VERSION="8.3" PHP_APACHE="YES" setup_php
|
PHP_VERSION="8.5" PHP_APACHE="YES" setup_php
|
||||||
fi
|
fi
|
||||||
if check_for_gh_release "grocy" "grocy/grocy"; then
|
if check_for_gh_release "grocy" "grocy/grocy"; then
|
||||||
msg_info "Updating grocy"
|
msg_info "Updating grocy"
|
||||||
|
|||||||
6
ct/headers/ddclient
Normal file
6
ct/headers/ddclient
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__ __ ___ __
|
||||||
|
____/ /___/ /____/ (_)__ ____ / /_
|
||||||
|
/ __ / __ / ___/ / / _ \/ __ \/ __/
|
||||||
|
/ /_/ / /_/ / /__/ / / __/ / / / /_
|
||||||
|
\__,_/\__,_/\___/_/_/\___/_/ /_/\__/
|
||||||
|
|
||||||
6
ct/headers/immichframe
Normal file
6
ct/headers/immichframe
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
____ _ __ ______
|
||||||
|
/ _/___ ___ ____ ___ (_)____/ /_ / ____/________ _____ ___ ___
|
||||||
|
/ // __ `__ \/ __ `__ \/ / ___/ __ \/ /_ / ___/ __ `/ __ `__ \/ _ \
|
||||||
|
_/ // / / / / / / / / / / / /__/ / / / __/ / / / /_/ / / / / / / __/
|
||||||
|
/___/_/ /_/ /_/_/ /_/ /_/_/\___/_/ /_/_/ /_/ \__,_/_/ /_/ /_/\___/
|
||||||
|
|
||||||
6
ct/headers/kima-hub
Normal file
6
ct/headers/kima-hub
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__ __ _ __ __ __
|
||||||
|
/ //_/(_)___ ___ ____ _ / / / /_ __/ /_
|
||||||
|
/ ,< / / __ `__ \/ __ `/_____/ /_/ / / / / __ \
|
||||||
|
/ /| |/ / / / / / / /_/ /_____/ __ / /_/ / /_/ /
|
||||||
|
/_/ |_/_/_/ /_/ /_/\__,_/ /_/ /_/\__,_/_.___/
|
||||||
|
|
||||||
6
ct/headers/netbird
Normal file
6
ct/headers/netbird
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
_ __ __ ____ _ __
|
||||||
|
/ | / /__ / /_/ __ )(_)________/ /
|
||||||
|
/ |/ / _ \/ __/ __ / / ___/ __ /
|
||||||
|
/ /| / __/ /_/ /_/ / / / / /_/ /
|
||||||
|
/_/ |_/\___/\__/_____/_/_/ \__,_/
|
||||||
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
____ __
|
|
||||||
/ __ \____ _/ /___ ___ _____
|
|
||||||
/ /_/ / __ `/ / __ `__ \/ ___/
|
|
||||||
/ ____/ /_/ / / / / / / / /
|
|
||||||
/_/ \__,_/_/_/ /_/ /_/_/
|
|
||||||
|
|
||||||
6
ct/headers/papra
Normal file
6
ct/headers/papra
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
____
|
||||||
|
/ __ \____ _____ _________ _
|
||||||
|
/ /_/ / __ `/ __ \/ ___/ __ `/
|
||||||
|
/ ____/ /_/ / /_/ / / / /_/ /
|
||||||
|
/_/ \__,_/ .___/_/ \__,_/
|
||||||
|
/_/
|
||||||
6
ct/headers/powerdns
Normal file
6
ct/headers/powerdns
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
____ ____ _ _______
|
||||||
|
/ __ \____ _ _____ _____/ __ \/ | / / ___/
|
||||||
|
/ /_/ / __ \ | /| / / _ \/ ___/ / / / |/ /\__ \
|
||||||
|
/ ____/ /_/ / |/ |/ / __/ / / /_/ / /| /___/ /
|
||||||
|
/_/ \____/|__/|__/\___/_/ /_____/_/ |_//____/
|
||||||
|
|
||||||
6
ct/headers/profilarr
Normal file
6
ct/headers/profilarr
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
____ _____ __
|
||||||
|
/ __ \_________ / __(_) /___ ___________
|
||||||
|
/ /_/ / ___/ __ \/ /_/ / / __ `/ ___/ ___/
|
||||||
|
/ ____/ / / /_/ / __/ / / /_/ / / / /
|
||||||
|
/_/ /_/ \____/_/ /_/_/\__,_/_/ /_/
|
||||||
|
|
||||||
6
ct/headers/strapi
Normal file
6
ct/headers/strapi
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
_____ __ _
|
||||||
|
/ ___// /__________ _____ (_)
|
||||||
|
\__ \/ __/ ___/ __ `/ __ \/ /
|
||||||
|
___/ / /_/ / / /_/ / /_/ / /
|
||||||
|
/____/\__/_/ \__,_/ .___/_/
|
||||||
|
/_/
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
_____ _ _____
|
|
||||||
/ ___/__ ___ ______ ___ ______ ____ ___ (_) ___/___ ______ _____ _____
|
|
||||||
\__ \/ / / / | /| / / __ `/ / / / __ \/ __ `__ \/ /\__ \/ _ \/ ___/ | / / _ \/ ___/
|
|
||||||
___/ / /_/ /| |/ |/ / /_/ / /_/ / /_/ / / / / / / /___/ / __/ / | |/ / __/ /
|
|
||||||
/____/\__,_/ |__/|__/\__,_/\__, /\____/_/ /_/ /_/_//____/\___/_/ |___/\___/_/
|
|
||||||
/____/
|
|
||||||
6
ct/headers/tinyauth
Normal file
6
ct/headers/tinyauth
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
_______ __ __
|
||||||
|
/_ __(_)___ __ ______ ___ __/ /_/ /_
|
||||||
|
/ / / / __ \/ / / / __ `/ / / / __/ __ \
|
||||||
|
/ / / / / / / /_/ / /_/ / /_/ / /_/ / / /
|
||||||
|
/_/ /_/_/ /_/\__, /\__,_/\__,_/\__/_/ /_/
|
||||||
|
/____/
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
__ __ _ _____
|
|
||||||
/ / / /___ (_) __(_)
|
|
||||||
/ / / / __ \/ / /_/ /
|
|
||||||
/ /_/ / / / / / __/ /
|
|
||||||
\____/_/ /_/_/_/ /_/
|
|
||||||
|
|
||||||
27
ct/immich.sh
27
ct/immich.sh
@@ -36,9 +36,13 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! -f /etc/apt/preferences.d/preferences ]]; then
|
if ! grep -qE '(^|[[:space:]])testing([[:space:]]|$)' /etc/apt/sources.list.d/debian.sources 2>/dev/null; then
|
||||||
msg_info "Adding Debian Testing repo"
|
msg_info "Adding Debian Testing repo"
|
||||||
sed -i 's/ trixie-updates/ trixie-updates testing/g' /etc/apt/sources.list.d/debian.sources
|
if grep -q "trixie-updates" /etc/apt/sources.list.d/debian.sources 2>/dev/null; then
|
||||||
|
sed -i 's/ trixie-updates/ trixie-updates testing/g' /etc/apt/sources.list.d/debian.sources
|
||||||
|
else
|
||||||
|
sed -i '/^[[:space:]]*Suites:.*trixie/ s/$/ testing/' /etc/apt/sources.list.d/debian.sources
|
||||||
|
fi
|
||||||
cat <<EOF >/etc/apt/preferences.d/preferences
|
cat <<EOF >/etc/apt/preferences.d/preferences
|
||||||
Package: *
|
Package: *
|
||||||
Pin: release a=unstable
|
Pin: release a=unstable
|
||||||
@@ -72,9 +76,9 @@ EOF
|
|||||||
SOURCE_DIR=${STAGING_DIR}/image-source
|
SOURCE_DIR=${STAGING_DIR}/image-source
|
||||||
cd /tmp
|
cd /tmp
|
||||||
if [[ -f ~/.intel_version ]]; then
|
if [[ -f ~/.intel_version ]]; then
|
||||||
curl -fsSLO https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/Dockerfile
|
curl -fsSLO https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/machine-learning/Dockerfile
|
||||||
readarray -t INTEL_URLS < <(
|
readarray -t INTEL_URLS < <(
|
||||||
sed -n "/intel-[igc|opencl]/p" ./Dockerfile | awk '{print $2}'
|
sed -n "/intel-[igc|opencl]/p" ./Dockerfile | awk '{print $3}'
|
||||||
sed -n "/libigdgmm12/p" ./Dockerfile | awk '{print $3}'
|
sed -n "/libigdgmm12/p" ./Dockerfile | awk '{print $3}'
|
||||||
)
|
)
|
||||||
INTEL_RELEASE="$(grep "intel-opencl-icd_" ./Dockerfile | awk -F '_' '{print $2}')"
|
INTEL_RELEASE="$(grep "intel-opencl-icd_" ./Dockerfile | awk -F '_' '{print $2}')"
|
||||||
@@ -97,7 +101,7 @@ EOF
|
|||||||
if [[ -f ~/.immich_library_revisions ]]; then
|
if [[ -f ~/.immich_library_revisions ]]; then
|
||||||
libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips")
|
libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips")
|
||||||
cd "$BASE_DIR"
|
cd "$BASE_DIR"
|
||||||
msg_info "Checking for updates to custom image-processing libraries"
|
msg_warn "Checking for updates to custom image-processing libraries (recompile time: 2-15min per library)"
|
||||||
$STD git pull
|
$STD git pull
|
||||||
for library in "${libraries[@]}"; do
|
for library in "${libraries[@]}"; do
|
||||||
compile_"$library"
|
compile_"$library"
|
||||||
@@ -209,14 +213,15 @@ EOF
|
|||||||
msg_ok "Updated Immich server, web, cli and plugins"
|
msg_ok "Updated Immich server, web, cli and plugins"
|
||||||
|
|
||||||
cd "$SRC_DIR"/machine-learning
|
cd "$SRC_DIR"/machine-learning
|
||||||
mkdir -p "$ML_DIR" && chown -R immich:immich "$ML_DIR"
|
mkdir -p "$ML_DIR"
|
||||||
|
chown -R immich:immich "$INSTALL_DIR"
|
||||||
chown immich:immich ./uv.lock
|
chown immich:immich ./uv.lock
|
||||||
export VIRTUAL_ENV="${ML_DIR}"/ml-venv
|
export VIRTUAL_ENV="${ML_DIR}"/ml-venv
|
||||||
if [[ -f ~/.openvino ]]; then
|
if [[ -f ~/.openvino ]]; then
|
||||||
msg_info "Updating HW-accelerated machine-learning"
|
msg_info "Updating HW-accelerated machine-learning"
|
||||||
$STD uv add --no-sync --optional openvino onnxruntime-openvino==1.20.0 --active -n -p python3.12 --managed-python
|
$STD uv add --no-sync --optional openvino onnxruntime-openvino==1.24.1 --active -n -p python3.13 --managed-python
|
||||||
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra openvino --no-dev --active --link-mode copy -n -p python3.12 --managed-python
|
$STD sudo --preserve-env=VIRTUAL_ENV -nu immich uv sync --extra openvino --no-dev --active --link-mode copy -n -p python3.13 --managed-python
|
||||||
patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.12/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-312-x86_64-linux-gnu.so"
|
patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.13/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-313-x86_64-linux-gnu.so"
|
||||||
msg_ok "Updated HW-accelerated machine-learning"
|
msg_ok "Updated HW-accelerated machine-learning"
|
||||||
else
|
else
|
||||||
msg_info "Updating machine-learning"
|
msg_info "Updating machine-learning"
|
||||||
@@ -337,7 +342,7 @@ function compile_libraw() {
|
|||||||
if [[ "$LIBRAW_REVISION" != "$(grep 'libraw' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
if [[ "$LIBRAW_REVISION" != "$(grep 'libraw' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
||||||
msg_info "Recompiling libraw"
|
msg_info "Recompiling libraw"
|
||||||
[[ -d "$SOURCE" ]] && rm -rf "$SOURCE"
|
[[ -d "$SOURCE" ]] && rm -rf "$SOURCE"
|
||||||
$STD git clone https://github.com/libraw/libraw.git "$SOURCE"
|
$STD git clone https://github.com/LibRaw/LibRaw.git "$SOURCE"
|
||||||
cd "$SOURCE"
|
cd "$SOURCE"
|
||||||
$STD git reset --hard "$LIBRAW_REVISION"
|
$STD git reset --hard "$LIBRAW_REVISION"
|
||||||
$STD autoreconf --install
|
$STD autoreconf --install
|
||||||
@@ -375,7 +380,7 @@ function compile_imagemagick() {
|
|||||||
|
|
||||||
function compile_libvips() {
|
function compile_libvips() {
|
||||||
SOURCE=$SOURCE_DIR/libvips
|
SOURCE=$SOURCE_DIR/libvips
|
||||||
: "${LIBVIPS_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libvips.json)}"
|
LIBVIPS_REVISION="0c9151a4f416d2f8ae20a755db218f6637050eec"
|
||||||
if [[ "$LIBVIPS_REVISION" != "$(grep 'libvips' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
if [[ "$LIBVIPS_REVISION" != "$(grep 'libvips' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
|
||||||
msg_info "Recompiling libvips"
|
msg_info "Recompiling libvips"
|
||||||
[[ -d "$SOURCE" ]] && rm -rf "$SOURCE"
|
[[ -d "$SOURCE" ]] && rm -rf "$SOURCE"
|
||||||
|
|||||||
81
ct/immichframe.sh
Normal file
81
ct/immichframe.sh
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: Thiago Canozzo Lahr (tclahr)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/immichFrame/ImmichFrame
|
||||||
|
|
||||||
|
APP="ImmichFrame"
|
||||||
|
var_tags="${var_tags:-photos;slideshow}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-1024}"
|
||||||
|
var_disk="${var_disk:-8}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -d /opt/immichframe ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "immichframe" "immichFrame/ImmichFrame"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop immichframe
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Backing up Configuration"
|
||||||
|
cp -r /opt/immichframe/Config /tmp/immichframe_config.bak
|
||||||
|
msg_ok "Backed up Configuration"
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "immichframe" "immichFrame/ImmichFrame" "tarball" "latest" "/tmp/immichframe"
|
||||||
|
|
||||||
|
msg_info "Setting up ImmichFrame"
|
||||||
|
cd /tmp/immichframe
|
||||||
|
$STD dotnet publish ImmichFrame.WebApi/ImmichFrame.WebApi.csproj \
|
||||||
|
--configuration Release \
|
||||||
|
--runtime linux-x64 \
|
||||||
|
--self-contained false \
|
||||||
|
--output /opt/immichframe
|
||||||
|
|
||||||
|
cd /tmp/immichframe/immichFrame.Web
|
||||||
|
$STD npm ci --silent
|
||||||
|
$STD npm run build
|
||||||
|
rm -rf /opt/immichframe/wwwroot/*
|
||||||
|
cp -r build/* /opt/immichframe/wwwroot
|
||||||
|
rm -rf /tmp/immichframe
|
||||||
|
msg_ok "Setup ImmichFrame"
|
||||||
|
|
||||||
|
msg_info "Restoring Configuration"
|
||||||
|
cp -r /tmp/immichframe_config.bak/* /opt/immichframe/Config/
|
||||||
|
rm -rf /tmp/immichframe_config.bak
|
||||||
|
chown -R immichframe:immichframe /opt/immichframe
|
||||||
|
msg_ok "Restored Configuration"
|
||||||
|
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start immichframe
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||||
@@ -23,7 +23,7 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -f /usr/bin/influxd ]]; then
|
if [[ ! -f /usr/bin/influxd && ! -f /usr/bin/influxdb3 ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
|||||||
# Source: https://www.iobroker.net/#en/intro | Github: https://github.com/ioBroker/ioBroker.js-controller
|
# Source: https://www.iobroker.net/#en/intro | Github: https://github.com/ioBroker/ioBroker.js-controller
|
||||||
|
|
||||||
APP="ioBroker"
|
APP="ioBroker"
|
||||||
var_tags="${var_tags:-automtation}"
|
var_tags="${var_tags:-automation}"
|
||||||
var_cpu="${var_cpu:-2}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-2048}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-8}"
|
var_disk="${var_disk:-8}"
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ function update_script() {
|
|||||||
|
|
||||||
if [[ ! -f /etc/itsm-ng/config_db.php ]]; then
|
if [[ ! -f /etc/itsm-ng/config_db.php ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit 1
|
exit 233
|
||||||
fi
|
fi
|
||||||
setup_mariadb
|
setup_mariadb
|
||||||
|
|
||||||
|
|||||||
@@ -45,14 +45,15 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Switching update script to Seerr"
|
msg_info "Switching update script to Seerr"
|
||||||
cat <<'EOF' >/usr/bin/update
|
TMP_UPDATE=$(mktemp)
|
||||||
#!/usr/bin/env bash
|
cat <<'EOF' >"$TMP_UPDATE"
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/seerr.sh)"
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/seerr.sh)"
|
||||||
EOF
|
EOF
|
||||||
|
mv "$TMP_UPDATE" /usr/bin/update
|
||||||
chmod +x /usr/bin/update
|
chmod +x /usr/bin/update
|
||||||
msg_ok "Switched update script to Seerr"
|
msg_ok "Switched update script to Seerr"
|
||||||
msg_warn "Please type 'update' again to complete the migration"
|
msg_warn "Please type 'update' again to complete the migration"
|
||||||
exit
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating Jellyseerr"
|
msg_info "Updating Jellyseerr"
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ function update_script() {
|
|||||||
|
|
||||||
if [[ -z "$KASM_URL" ]] || [[ -z "$KASM_VERSION" ]]; then
|
if [[ -z "$KASM_URL" ]] || [[ -z "$KASM_VERSION" ]]; then
|
||||||
msg_error "Unable to detect latest Kasm release URL."
|
msg_error "Unable to detect latest Kasm release URL."
|
||||||
exit 1
|
exit 250
|
||||||
fi
|
fi
|
||||||
msg_info "Checked for new version"
|
msg_info "Checked for new version"
|
||||||
|
|
||||||
|
|||||||
79
ct/kima-hub.sh
Normal file
79
ct/kima-hub.sh
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/Chevron7Locked/kima-hub
|
||||||
|
|
||||||
|
APP="Kima-Hub"
|
||||||
|
var_tags="${var_tags:-music;streaming;media}"
|
||||||
|
var_cpu="${var_cpu:-4}"
|
||||||
|
var_ram="${var_ram:-8192}"
|
||||||
|
var_disk="${var_disk:-20}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -d /opt/kima-hub ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "kima-hub" "Chevron7Locked/kima-hub"; then
|
||||||
|
msg_info "Stopping Services"
|
||||||
|
systemctl stop kima-frontend kima-backend kima-analyzer kima-analyzer-clap
|
||||||
|
msg_ok "Stopped Services"
|
||||||
|
|
||||||
|
msg_info "Backing up Data"
|
||||||
|
cp /opt/kima-hub/backend/.env /opt/kima-hub-backend-env.bak
|
||||||
|
cp /opt/kima-hub/frontend/.env /opt/kima-hub-frontend-env.bak
|
||||||
|
msg_ok "Backed up Data"
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "kima-hub" "Chevron7Locked/kima-hub" "tarball"
|
||||||
|
|
||||||
|
msg_info "Restoring Data"
|
||||||
|
cp /opt/kima-hub-backend-env.bak /opt/kima-hub/backend/.env
|
||||||
|
cp /opt/kima-hub-frontend-env.bak /opt/kima-hub/frontend/.env
|
||||||
|
rm -f /opt/kima-hub-backend-env.bak /opt/kima-hub-frontend-env.bak
|
||||||
|
msg_ok "Restored Data"
|
||||||
|
|
||||||
|
msg_info "Rebuilding Backend"
|
||||||
|
cd /opt/kima-hub/backend
|
||||||
|
$STD npm install
|
||||||
|
$STD npm run build
|
||||||
|
$STD npx prisma generate
|
||||||
|
$STD npx prisma migrate deploy
|
||||||
|
msg_ok "Rebuilt Backend"
|
||||||
|
|
||||||
|
msg_info "Rebuilding Frontend"
|
||||||
|
cd /opt/kima-hub/frontend
|
||||||
|
$STD npm install
|
||||||
|
$STD npm run build
|
||||||
|
msg_ok "Rebuilt Frontend"
|
||||||
|
|
||||||
|
msg_info "Starting Services"
|
||||||
|
systemctl start kima-backend kima-frontend kima-analyzer kima-analyzer-clap
|
||||||
|
msg_ok "Started Services"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3030${CL}"
|
||||||
72
ct/komodo.sh
72
ct/komodo.sh
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
# Author: MickLesk
|
# Author: MickLesk (CanbiZ)
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://komo.do/
|
# Source: https://komo.do/
|
||||||
|
|
||||||
@@ -19,49 +19,51 @@ variables
|
|||||||
color
|
color
|
||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
|
ADDON_SCRIPT="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/komodo.sh"
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
[[ -d /opt/komodo ]] || {
|
if [[ ! -d /opt/komodo ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit 1
|
exit
|
||||||
}
|
|
||||||
|
|
||||||
msg_info "Updating Komodo"
|
|
||||||
COMPOSE_FILE=$(find /opt/komodo -maxdepth 1 -type f -name '*.compose.yaml' ! -name 'compose.env' | head -n1)
|
|
||||||
if [[ -z "$COMPOSE_FILE" ]]; then
|
|
||||||
msg_error "No valid compose file found in /opt/komodo!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
COMPOSE_BASENAME=$(basename "$COMPOSE_FILE")
|
|
||||||
|
|
||||||
if [[ "$COMPOSE_BASENAME" == "sqlite.compose.yaml" || "$COMPOSE_BASENAME" == "postgres.compose.yaml" ]]; then
|
|
||||||
msg_error "❌ Detected outdated Komodo setup using SQLite or PostgreSQL (FerretDB v1)."
|
|
||||||
echo -e "${YW}This configuration is no longer supported since Komodo v1.18.0.${CL}"
|
|
||||||
echo -e "${YW}Please follow the migration guide:${CL}"
|
|
||||||
echo -e "${BGN}https://github.com/community-scripts/ProxmoxVE/discussions/5689${CL}\n"
|
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
BACKUP_FILE="/opt/komodo/${COMPOSE_BASENAME}.bak_$(date +%Y%m%d_%H%M%S)"
|
msg_warn "⚠️ ${APP} has been migrated to an addon script."
|
||||||
cp "$COMPOSE_FILE" "$BACKUP_FILE" || {
|
echo ""
|
||||||
msg_error "Failed to create backup of ${COMPOSE_BASENAME}!"
|
msg_info "This is a one-time migration. After this, you can update ${APP} anytime with:"
|
||||||
exit 1
|
echo -e "${TAB}${TAB}${GN}update_komodo${CL} or ${GN}bash <(curl -fsSL ${ADDON_SCRIPT})${CL}"
|
||||||
}
|
echo ""
|
||||||
GITHUB_URL="https://raw.githubusercontent.com/moghtech/komodo/main/compose/${COMPOSE_BASENAME}"
|
read -r -p "${TAB}Migrate update function now? [y/N]: " CONFIRM
|
||||||
if ! curl -fsSL "$GITHUB_URL" -o "$COMPOSE_FILE"; then
|
if [[ ! "${CONFIRM,,}" =~ ^(y|yes)$ ]]; then
|
||||||
msg_error "Failed to download ${COMPOSE_BASENAME} from GitHub!"
|
msg_warn "Migration skipped. The old update will continue to work for now."
|
||||||
mv "$BACKUP_FILE" "$COMPOSE_FILE"
|
msg_info "Updating ${APP} (legacy)"
|
||||||
exit 1
|
COMPOSE_FILE=$(find /opt/komodo -maxdepth 1 -type f -name '*.compose.yaml' ! -name 'compose.env' | head -n1)
|
||||||
|
if [[ -z "$COMPOSE_FILE" ]]; then
|
||||||
|
msg_error "No valid compose file found in /opt/komodo!"
|
||||||
|
exit 252
|
||||||
|
fi
|
||||||
|
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env pull
|
||||||
|
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d
|
||||||
|
msg_ok "Updated ${APP}"
|
||||||
|
exit
|
||||||
fi
|
fi
|
||||||
if ! grep -qxF 'COMPOSE_KOMODO_BACKUPS_PATH=/etc/komodo/backups' /opt/komodo/compose.env; then
|
|
||||||
sed -i '/^COMPOSE_KOMODO_IMAGE_TAG=latest$/a COMPOSE_KOMODO_BACKUPS_PATH=/etc/komodo/backups' /opt/komodo/compose.env
|
msg_info "Migrating update function"
|
||||||
fi
|
TMP_UPDATE=$(mktemp)
|
||||||
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env pull
|
cat <<'MIGRATION_EOF' >"$TMP_UPDATE"
|
||||||
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/komodo.sh)"
|
||||||
msg_ok "Updated Komodo"
|
MIGRATION_EOF
|
||||||
|
mv "$TMP_UPDATE" /usr/bin/update
|
||||||
|
chmod +x /usr/bin/update
|
||||||
|
|
||||||
|
ln -sf /usr/bin/update /usr/bin/update_komodo 2>/dev/null || true
|
||||||
|
msg_ok "Migration complete"
|
||||||
|
|
||||||
|
msg_info "Running addon update"
|
||||||
|
type=update bash <(curl -fsSL "${ADDON_SCRIPT}")
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ function update_script() {
|
|||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
VENV_PATH="/opt/litellm/.venv"
|
VENV_PATH="/opt/litellm/.venv"
|
||||||
PYTHON_VERSION="3.13" setup_uv
|
PYTHON_VERSION="3.13" USE_UVX="YES" setup_uv
|
||||||
|
|
||||||
msg_info "Updating LiteLLM"
|
msg_info "Updating LiteLLM"
|
||||||
$STD "$VENV_PATH/bin/python" -m pip install --upgrade litellm[proxy] prisma
|
$STD "$VENV_PATH/bin/python" -m pip install --upgrade litellm[proxy] prisma
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ function update_script() {
|
|||||||
|
|
||||||
if ! dpkg -s loki >/dev/null 2>&1; then
|
if ! dpkg -s loki >/dev/null 2>&1; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit 1
|
exit 233
|
||||||
fi
|
fi
|
||||||
|
|
||||||
CHOICE=$(msg_menu "Loki Update Options" \
|
CHOICE=$(msg_menu "Loki Update Options" \
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ APP="MeshCentral"
|
|||||||
var_tags="${var_tags:-remote-management}"
|
var_tags="${var_tags:-remote-management}"
|
||||||
var_cpu="${var_cpu:-1}"
|
var_cpu="${var_cpu:-1}"
|
||||||
var_ram="${var_ram:-512}"
|
var_ram="${var_ram:-512}"
|
||||||
var_disk="${var_disk:-2}"
|
var_disk="${var_disk:-4}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ensure_dependencies graphicsmagick
|
ensure_dependencies build-essential python3-setuptools graphicsmagick
|
||||||
NODE_VERSION="24" setup_nodejs
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
|
||||||
msg_info "Updating n8n"
|
msg_info "Updating n8n"
|
||||||
|
|||||||
47
ct/netbird.sh
Normal file
47
ct/netbird.sh
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: TechHutTV
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://netbird.io/
|
||||||
|
|
||||||
|
APP="NetBird"
|
||||||
|
var_tags="${var_tags:-network;vpn}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-512}"
|
||||||
|
var_disk="${var_disk:-4}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
var_tun="${var_tun:-yes}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -f /etc/netbird/config.json ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Updating Netbird"
|
||||||
|
$STD apt update
|
||||||
|
$STD apt upgrade -y
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access NetBird by entering the container and running:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}netbird up${CL}"
|
||||||
10
ct/nzbget.sh
10
ct/nzbget.sh
@@ -27,6 +27,16 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ! command -v unrar &>/dev/null; then
|
||||||
|
setup_nonfree
|
||||||
|
$STD apt install -y unrar
|
||||||
|
|
||||||
|
if grep -q "UnrarCmd=unrar-free" /var/lib/nzbget/nzbget.conf; then
|
||||||
|
sed -i "s|UnrarCmd=unrar-free|UnrarCmd=unrar|g" /var/lib/nzbget/nzbget.conf
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Updating NZBGet"
|
msg_info "Updating NZBGet"
|
||||||
$STD apt update
|
$STD apt update
|
||||||
$STD apt upgrade -y
|
$STD apt upgrade -y
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ function update_script() {
|
|||||||
[[ -f /opt/ombi/Ombi.db ]] && mv /opt/ombi/Ombi.db /opt
|
[[ -f /opt/ombi/Ombi.db ]] && mv /opt/ombi/Ombi.db /opt
|
||||||
[[ -f /opt/ombi/OmbiExternal.db ]] && mv /opt/ombi/OmbiExternal.db /opt
|
[[ -f /opt/ombi/OmbiExternal.db ]] && mv /opt/ombi/OmbiExternal.db /opt
|
||||||
[[ -f /opt/ombi/OmbiSettings.db ]] && mv /opt/ombi/OmbiSettings.db /opt
|
[[ -f /opt/ombi/OmbiSettings.db ]] && mv /opt/ombi/OmbiSettings.db /opt
|
||||||
|
[[ -f /opt/ombi/database.json ]] && mv /opt/ombi/database.json /opt
|
||||||
msg_ok "Backup created"
|
msg_ok "Backup created"
|
||||||
|
|
||||||
rm -rf /opt/ombi
|
rm -rf /opt/ombi
|
||||||
@@ -43,6 +44,7 @@ function update_script() {
|
|||||||
[[ -f /opt/Ombi.db ]] && mv /opt/Ombi.db /opt/ombi
|
[[ -f /opt/Ombi.db ]] && mv /opt/Ombi.db /opt/ombi
|
||||||
[[ -f /opt/OmbiExternal.db ]] && mv /opt/OmbiExternal.db /opt/ombi
|
[[ -f /opt/OmbiExternal.db ]] && mv /opt/OmbiExternal.db /opt/ombi
|
||||||
[[ -f /opt/OmbiSettings.db ]] && mv /opt/OmbiSettings.db /opt/ombi
|
[[ -f /opt/OmbiSettings.db ]] && mv /opt/OmbiSettings.db /opt/ombi
|
||||||
|
[[ -f /opt/database.json ]] && mv /opt/database.json /opt/ombi
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start ombi
|
systemctl start ombi
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE="v5.1.0"
|
RELEASE="v5.2.0"
|
||||||
if check_for_gh_release "OpenCloud" "opencloud-eu/opencloud" "${RELEASE}"; then
|
if check_for_gh_release "OpenCloud" "opencloud-eu/opencloud" "${RELEASE}"; then
|
||||||
msg_info "Stopping services"
|
msg_info "Stopping services"
|
||||||
systemctl stop opencloud opencloud-wopi
|
systemctl stop opencloud opencloud-wopi
|
||||||
@@ -41,7 +41,9 @@ function update_script() {
|
|||||||
ensure_dependencies "inotify-tools"
|
ensure_dependencies "inotify-tools"
|
||||||
msg_ok "Updated packages"
|
msg_ok "Updated packages"
|
||||||
|
|
||||||
|
rm -f /usr/bin/{OpenCloud,opencloud}
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "OpenCloud" "opencloud-eu/opencloud" "singlefile" "${RELEASE}" "/usr/bin" "opencloud-*-linux-amd64"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "OpenCloud" "opencloud-eu/opencloud" "singlefile" "${RELEASE}" "/usr/bin" "opencloud-*-linux-amd64"
|
||||||
|
mv /usr/bin/OpenCloud /usr/bin/opencloud
|
||||||
|
|
||||||
if ! grep -q 'POSIX_WATCH' /etc/opencloud/opencloud.env; then
|
if ! grep -q 'POSIX_WATCH' /etc/opencloud/opencloud.env; then
|
||||||
sed -i '/^## External/i ## Uncomment below to enable PosixFS Collaborative Mode\
|
sed -i '/^## External/i ## Uncomment below to enable PosixFS Collaborative Mode\
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ function update_script() {
|
|||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
|
ensure_dependencies zstd build-essential libmariadb-dev
|
||||||
|
|
||||||
if [[ -d /opt/open-webui ]]; then
|
if [[ -d /opt/open-webui ]]; then
|
||||||
msg_warn "Legacy installation detected — migrating to uv based install..."
|
msg_warn "Legacy installation detected — migrating to uv based install..."
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
@@ -92,7 +94,6 @@ EOF
|
|||||||
OLLAMA_VERSION=$(ollama -v | awk '{print $NF}')
|
OLLAMA_VERSION=$(ollama -v | awk '{print $NF}')
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
|
RELEASE=$(curl -s https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
|
||||||
if [ "$OLLAMA_VERSION" != "$RELEASE" ]; then
|
if [ "$OLLAMA_VERSION" != "$RELEASE" ]; then
|
||||||
ensure_dependencies zstd
|
|
||||||
msg_info "Ollama update available: v$OLLAMA_VERSION -> v$RELEASE"
|
msg_info "Ollama update available: v$OLLAMA_VERSION -> v$RELEASE"
|
||||||
msg_info "Downloading Ollama v$RELEASE \n"
|
msg_info "Downloading Ollama v$RELEASE \n"
|
||||||
curl -fS#LO https://github.com/ollama/ollama/releases/download/v${RELEASE}/ollama-linux-amd64.tar.zst
|
curl -fS#LO https://github.com/ollama/ollama/releases/download/v${RELEASE}/ollama-linux-amd64.tar.zst
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -f "$HOME/.overseerr" ]] && [[ "$(cat "$HOME/.overseerr")" == "1.34.0" ]]; then
|
if [[ -f "$HOME/.overseerr" ]] && [[ "$(printf '%s\n' "1.35.0" "$(cat "$HOME/.overseerr")" | sort -V | head -n1)" == "1.35.0" ]]; then
|
||||||
echo
|
echo
|
||||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
echo "Overseerr v1.34.0 detected."
|
echo "Overseerr v1.34.0 detected."
|
||||||
@@ -44,10 +44,11 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Switching update script to Seerr"
|
msg_info "Switching update script to Seerr"
|
||||||
cat <<'EOF' >/usr/bin/update
|
TMP_UPDATE=$(mktemp)
|
||||||
#!/usr/bin/env bash
|
cat <<'EOF' >"$TMP_UPDATE"
|
||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/seerr.sh)"
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/seerr.sh)"
|
||||||
EOF
|
EOF
|
||||||
|
mv "$TMP_UPDATE" /usr/bin/update
|
||||||
chmod +x /usr/bin/update
|
chmod +x /usr/bin/update
|
||||||
msg_ok "Switched update script to Seerr"
|
msg_ok "Switched update script to Seerr"
|
||||||
msg_warn "Please type 'update' again to complete the migration"
|
msg_warn "Please type 'update' again to complete the migration"
|
||||||
|
|||||||
75
ct/palmr.sh
75
ct/palmr.sh
@@ -1,75 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: vhsdream
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/kyantech/Palmr
|
|
||||||
|
|
||||||
APP="Palmr"
|
|
||||||
var_tags="${var_tags:-files}"
|
|
||||||
var_cpu="${var_cpu:-4}"
|
|
||||||
var_ram="${var_ram:-6144}"
|
|
||||||
var_disk="${var_disk:-6}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -d /opt/palmr_data ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
if check_for_gh_release "palmr" "kyantech/Palmr"; then
|
|
||||||
msg_info "Stopping Services"
|
|
||||||
systemctl stop palmr-frontend palmr-backend
|
|
||||||
msg_ok "Stopped Services"
|
|
||||||
|
|
||||||
cp /opt/palmr/apps/server/.env /opt/palmr.env
|
|
||||||
rm -rf /opt/palmr
|
|
||||||
fetch_and_deploy_gh_release "Palmr" "kyantech/Palmr" "tarball" "latest" "/opt/palmr"
|
|
||||||
|
|
||||||
PNPM="$(jq -r '.packageManager' /opt/palmr/package.json)"
|
|
||||||
NODE_VERSION="24" NODE_MODULE="$PNPM" setup_nodejs
|
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
|
||||||
cd /opt/palmr/apps/server
|
|
||||||
mv /opt/palmr.env /opt/palmr/apps/server/.env
|
|
||||||
$STD pnpm install
|
|
||||||
$STD npx prisma generate
|
|
||||||
$STD npx prisma migrate deploy
|
|
||||||
$STD npx prisma db push
|
|
||||||
$STD pnpm build
|
|
||||||
|
|
||||||
cd /opt/palmr/apps/web
|
|
||||||
export NODE_ENV=production
|
|
||||||
export NEXT_TELEMETRY_DISABLED=1
|
|
||||||
mv ./.env.example ./.env
|
|
||||||
$STD pnpm install
|
|
||||||
$STD pnpm build
|
|
||||||
chown -R palmr:palmr /opt/palmr_data /opt/palmr
|
|
||||||
msg_ok "Updated ${APP}"
|
|
||||||
|
|
||||||
msg_info "Starting Services"
|
|
||||||
systemctl start palmr-backend palmr-frontend
|
|
||||||
msg_ok "Started Services"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
|
||||||
@@ -9,7 +9,7 @@ APP="Pangolin"
|
|||||||
var_tags="${var_tags:-proxy}"
|
var_tags="${var_tags:-proxy}"
|
||||||
var_cpu="${var_cpu:-2}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-4096}"
|
var_ram="${var_ram:-4096}"
|
||||||
var_disk="${var_disk:-5}"
|
var_disk="${var_disk:-10}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
@@ -29,6 +29,8 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
ensure_dependencies build-essential python3
|
||||||
|
|
||||||
NODE_VERSION="24" setup_nodejs
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
|
||||||
if check_for_gh_release "pangolin" "fosrl/pangolin"; then
|
if check_for_gh_release "pangolin" "fosrl/pangolin"; then
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ function update_script() {
|
|||||||
echo -e "${TAB}${GATEWAY}${BGN}https://github.com/community-scripts/ProxmoxVE/discussions/9223${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}https://github.com/community-scripts/ProxmoxVE/discussions/9223${CL}"
|
||||||
echo -e ""
|
echo -e ""
|
||||||
msg_custom "⚠️" "Update aborted. Please migrate your data first."
|
msg_custom "⚠️" "Update aborted. Please migrate your data first."
|
||||||
exit 1
|
exit 253
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
68
ct/papra.sh
Normal file
68
ct/papra.sh
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/papra-hq/papra
|
||||||
|
|
||||||
|
APP="Papra"
|
||||||
|
var_tags="${var_tags:-document-management}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-10}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -d /opt/papra ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "papra" "papra-hq/papra"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop papra
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Backing up Configuration"
|
||||||
|
cp /opt/papra/apps/papra-server/.env /opt/papra_env.bak
|
||||||
|
msg_ok "Backed up Configuration"
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "papra" "papra-hq/papra" "tarball"
|
||||||
|
|
||||||
|
msg_info "Building Application"
|
||||||
|
cd /opt/papra
|
||||||
|
cp /opt/papra_env.bak /opt/papra/apps/papra-server/.env
|
||||||
|
$STD pnpm install --frozen-lockfile
|
||||||
|
$STD pnpm --filter "@papra/app-client..." run build
|
||||||
|
$STD pnpm --filter "@papra/app-server..." run build
|
||||||
|
ln -sf /opt/papra/apps/papra-client/dist /opt/papra/apps/papra-server/public
|
||||||
|
rm -f /opt/papra_env.bak
|
||||||
|
msg_ok "Built Application"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start papra
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:1221${CL}"
|
||||||
71
ct/powerdns.sh
Normal file
71
ct/powerdns.sh
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: Slaviša Arežina (tremor021)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.powerdns.com/
|
||||||
|
|
||||||
|
APP="PowerDNS"
|
||||||
|
var_tags="${var_tags:-dns}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-1024}"
|
||||||
|
var_disk="${var_disk:-4}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -d /opt/poweradmin ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Updating PowerDNS"
|
||||||
|
$STD apt update
|
||||||
|
$STD apt install -y --only-upgrade pdns-server pdns-backend-sqlite3
|
||||||
|
msg_ok "Updated PowerDNS"
|
||||||
|
|
||||||
|
if check_for_gh_release "poweradmin" "poweradmin/poweradmin"; then
|
||||||
|
msg_info "Backing up Configuration"
|
||||||
|
cp /opt/poweradmin/config/settings.php /opt/poweradmin_settings.php.bak
|
||||||
|
cp /opt/poweradmin/powerdns.db /opt/poweradmin_powerdns.db.bak
|
||||||
|
msg_ok "Backed up Configuration"
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "poweradmin" "poweradmin/poweradmin" "tarball"
|
||||||
|
|
||||||
|
msg_info "Updating Poweradmin"
|
||||||
|
cp /opt/poweradmin_settings.php.bak /opt/poweradmin/config/settings.php
|
||||||
|
cp /opt/poweradmin_powerdns.db.bak /opt/poweradmin/powerdns.db
|
||||||
|
rm -rf /opt/poweradmin/install
|
||||||
|
rm -f /opt/poweradmin_settings.php.bak /opt/poweradmin_powerdns.db.bak
|
||||||
|
chown -R www-data:pdns /opt/poweradmin
|
||||||
|
chmod 775 /opt/poweradmin
|
||||||
|
chown pdns:pdns /opt/poweradmin/powerdns.db
|
||||||
|
chmod 664 /opt/poweradmin/powerdns.db
|
||||||
|
msg_ok "Updated Poweradmin"
|
||||||
|
|
||||||
|
msg_info "Restarting Services"
|
||||||
|
systemctl restart pdns apache2
|
||||||
|
msg_ok "Restarted Services"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
||||||
85
ct/profilarr.sh
Normal file
85
ct/profilarr.sh
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: michelroegl-brunner
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/Dictionarry-Hub/profilarr
|
||||||
|
|
||||||
|
APP="Profilarr"
|
||||||
|
var_tags="${var_tags:-arr;radarr;sonarr;config}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-8}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -d /opt/profilarr ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "profilarr" "Dictionarry-Hub/profilarr"; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop profilarr
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Backing up Data"
|
||||||
|
if [[ -d /config ]]; then
|
||||||
|
cp -r /config /opt/profilarr_config_backup
|
||||||
|
fi
|
||||||
|
msg_ok "Backed up Data"
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "profilarr" "Dictionarry-Hub/profilarr" "tarball"
|
||||||
|
|
||||||
|
msg_info "Installing Python Dependencies"
|
||||||
|
cd /opt/profilarr/backend
|
||||||
|
$STD uv venv /opt/profilarr/backend/.venv
|
||||||
|
sed 's/==/>=/g' requirements.txt >requirements-relaxed.txt
|
||||||
|
$STD uv pip install --python /opt/profilarr/backend/.venv/bin/python -r requirements-relaxed.txt
|
||||||
|
rm -f requirements-relaxed.txt
|
||||||
|
msg_ok "Installed Python Dependencies"
|
||||||
|
|
||||||
|
msg_info "Building Frontend"
|
||||||
|
if [[ -d /opt/profilarr/frontend ]]; then
|
||||||
|
cd /opt/profilarr/frontend
|
||||||
|
$STD npm install
|
||||||
|
$STD npm run build
|
||||||
|
cp -r dist /opt/profilarr/backend/app/static
|
||||||
|
fi
|
||||||
|
msg_ok "Built Frontend"
|
||||||
|
|
||||||
|
msg_info "Restoring Data"
|
||||||
|
if [[ -d /opt/profilarr_config_backup ]]; then
|
||||||
|
mkdir -p /config
|
||||||
|
cp -r /opt/profilarr_config_backup/. /config/
|
||||||
|
rm -rf /opt/profilarr_config_backup
|
||||||
|
fi
|
||||||
|
msg_ok "Restored Data"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start profilarr
|
||||||
|
msg_ok "Started Service"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6868${CL}"
|
||||||
@@ -39,9 +39,9 @@ function update_script() {
|
|||||||
|
|
||||||
fetch_and_deploy_gh_release "rdt-client" "rogerfar/rdt-client" "prebuild" "latest" "/opt/rdtc" "RealDebridClient.zip"
|
fetch_and_deploy_gh_release "rdt-client" "rogerfar/rdt-client" "prebuild" "latest" "/opt/rdtc" "RealDebridClient.zip"
|
||||||
cp -R /opt/rdtc-backup/appsettings.json /opt/rdtc/
|
cp -R /opt/rdtc-backup/appsettings.json /opt/rdtc/
|
||||||
if dpkg-query -W dotnet-sdk-8.0 >/dev/null 2>&1; then
|
if dpkg-query -W aspnetcore-runtime-9.0 >/dev/null 2>&1; then
|
||||||
$STD apt remove --purge -y dotnet-sdk-8.0
|
$STD apt remove --purge -y aspnetcore-runtime-9.0
|
||||||
ensure_dependencies aspnetcore-runtime-9.0
|
ensure_dependencies aspnetcore-runtime-10.0
|
||||||
fi
|
fi
|
||||||
rm -rf /opt/rdtc-backup
|
rm -rf /opt/rdtc-backup
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
# Author: vhsdream
|
# Author: vhsdream | MickLesk (CanbiZ)
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://rxresume.org | Github: https://github.com/lazy-media/Reactive-Resume
|
# Source: https://rxresume.org | Github: https://github.com/amruthpillai/reactive-resume
|
||||||
|
|
||||||
APP="Reactive-Resume"
|
APP="Reactive-Resume"
|
||||||
var_tags="${var_tags:-documents}"
|
var_tags="${var_tags:-documents}"
|
||||||
@@ -24,62 +24,29 @@ function update_script() {
|
|||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -f /etc/systemd/system/Reactive-Resume.service ]]; then
|
if [[ ! -f /etc/systemd/system/reactive-resume.service ]]; then
|
||||||
msg_error "No $APP Installation Found!"
|
msg_error "No $APP Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if check_for_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume"; then
|
if check_for_gh_release "reactive-resume" "amruthpillai/reactive-resume"; then
|
||||||
msg_info "Stopping services"
|
msg_info "Stopping services"
|
||||||
systemctl stop Reactive-Resume
|
systemctl stop reactive-resume
|
||||||
msg_ok "Stopped services"
|
msg_ok "Stopped services"
|
||||||
|
|
||||||
cp /opt/Reactive-Resume/.env /opt/rxresume.env
|
cp /opt/reactive-resume/.env /opt/reactive-resume.env.bak
|
||||||
fetch_and_deploy_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume" "tarball" "latest" "/opt/Reactive-Resume"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "reactive-resume" "amruthpillai/reactive-resume" "tarball" "latest" "/opt/reactive-resume"
|
||||||
|
|
||||||
msg_info "Updating Reactive-Resume"
|
msg_info "Updating Reactive Resume (Patience)"
|
||||||
cd /opt/Reactive-Resume
|
cd /opt/reactive-resume
|
||||||
export PUPPETEER_SKIP_DOWNLOAD="true"
|
|
||||||
export NEXT_TELEMETRY_DISABLED=1
|
|
||||||
export CI="true"
|
export CI="true"
|
||||||
export NODE_ENV="production"
|
export NODE_ENV="production"
|
||||||
$STD pnpm install --frozen-lockfile
|
$STD pnpm install --frozen-lockfile
|
||||||
$STD pnpm run build
|
$STD pnpm run build
|
||||||
$STD pnpm run prisma:generate
|
mv /opt/reactive-resume.env.bak /opt/reactive-resume/.env
|
||||||
mv /opt/rxresume.env /opt/Reactive-Resume/.env
|
msg_ok "Updated Reactive Resume"
|
||||||
msg_ok "Updated Reactive-Resume"
|
|
||||||
|
|
||||||
msg_info "Updating Minio"
|
|
||||||
systemctl stop minio
|
|
||||||
cd /tmp
|
|
||||||
curl -fsSL https://dl.min.io/server/minio/release/linux-amd64/minio.deb -o minio.deb
|
|
||||||
$STD dpkg -i minio.deb
|
|
||||||
rm -f /tmp/minio.deb
|
|
||||||
msg_ok "Updated Minio"
|
|
||||||
|
|
||||||
msg_info "Updating Browserless (Patience)"
|
|
||||||
systemctl stop browserless
|
|
||||||
cp /opt/browserless/.env /opt/browserless.env
|
|
||||||
rm -rf /opt/browserless
|
|
||||||
brwsr_tmp=$(mktemp)
|
|
||||||
TAG=$(curl -fsSL https://api.github.com/repos/browserless/browserless/tags?per_page=1 | grep "name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
curl -fsSL https://github.com/browserless/browserless/archive/refs/tags/v"$TAG".zip -o "$brwsr_tmp"
|
|
||||||
$STD unzip "$brwsr_tmp"
|
|
||||||
mv browserless-"$TAG"/ /opt/browserless
|
|
||||||
cd /opt/browserless
|
|
||||||
$STD npm install typescript
|
|
||||||
$STD npm install esbuild
|
|
||||||
$STD npm install
|
|
||||||
rm -rf src/routes/{chrome,edge,firefox,webkit}
|
|
||||||
$STD node_modules/playwright-core/cli.js install --with-deps chromium
|
|
||||||
$STD npm run build
|
|
||||||
$STD npm run build:function
|
|
||||||
$STD npm prune production
|
|
||||||
mv /opt/browserless.env /opt/browserless/.env
|
|
||||||
rm -f "$brwsr_tmp"
|
|
||||||
msg_ok "Updated Browserless"
|
|
||||||
|
|
||||||
msg_info "Restarting services"
|
msg_info "Restarting services"
|
||||||
systemctl start minio Reactive-Resume browserless
|
systemctl start chromium-printer reactive-resume
|
||||||
msg_ok "Restarted services"
|
msg_ok "Restarted services"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2026 tteck
|
# Copyright (c) 2021-2026 tteck
|
||||||
# Author: tteck (tteckster)
|
# Author: tteck (tteckster) | Migration: MickLesk (CanbiZ)
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://runtipi.io/
|
# Source: https://runtipi.io/
|
||||||
|
|
||||||
@@ -19,16 +19,45 @@ variables
|
|||||||
color
|
color
|
||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
|
ADDON_SCRIPT="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/runtipi.sh"
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -d /opt/runtipi ]]; then
|
if [[ ! -d /opt/runtipi ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
cd /opt/runtipi && ./runtipi-cli update latest
|
|
||||||
msg_ok "Updated successfully!"
|
msg_warn "⚠️ ${APP} has been migrated to an addon script."
|
||||||
|
echo ""
|
||||||
|
msg_info "This is a one-time migration. After this, you can update ${APP} anytime with:"
|
||||||
|
echo -e "${TAB}${TAB}${GN}update_runtipi${CL} or ${GN}bash <(curl -fsSL ${ADDON_SCRIPT})${CL}"
|
||||||
|
echo ""
|
||||||
|
read -r -p "${TAB}Migrate update function now? [y/N]: " CONFIRM
|
||||||
|
if [[ ! "${CONFIRM,,}" =~ ^(y|yes)$ ]]; then
|
||||||
|
msg_warn "Migration skipped. The old update will continue to work for now."
|
||||||
|
msg_info "Updating ${APP} (legacy)"
|
||||||
|
cd /opt/runtipi && ./runtipi-cli update latest
|
||||||
|
msg_ok "Updated ${APP}"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Migrating update function"
|
||||||
|
TMP_UPDATE=$(mktemp)
|
||||||
|
cat <<'MIGRATION_EOF' >"$TMP_UPDATE"
|
||||||
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/runtipi.sh)"
|
||||||
|
MIGRATION_EOF
|
||||||
|
mv "$TMP_UPDATE" /usr/bin/update
|
||||||
|
chmod +x /usr/bin/update
|
||||||
|
|
||||||
|
ln -sf /usr/bin/update /usr/bin/update_runtipi 2>/dev/null || true
|
||||||
|
msg_ok "Migration complete"
|
||||||
|
|
||||||
|
msg_info "Running addon update"
|
||||||
|
type=update bash <(curl -fsSL "${ADDON_SCRIPT}")
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,9 +29,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
if check_for_gh_release "rustdesk-hbbs" "lejianwen/rustdesk-server"; then
|
||||||
APIRELEASE=$(curl -fsSL https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
if [[ "${RELEASE}" != "$(cat ~/.rustdesk-hbbr)" ]] || [[ "${APIRELEASE}" != "$(cat ~/.rustdesk-api)" ]] || [[ ! -f ~/.rustdesk-hbbr ]] || [[ ! -f ~/.rustdesk-api ]]; then
|
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop rustdesk-hbbr
|
systemctl stop rustdesk-hbbr
|
||||||
systemctl stop rustdesk-hbbs
|
systemctl stop rustdesk-hbbs
|
||||||
@@ -40,13 +38,13 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
msg_info "Stopped Service"
|
msg_info "Stopped Service"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "rustdesk-hbbr" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*amd64.deb"
|
fetch_and_deploy_gh_release "rustdesk-hbbr" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*amd64.deb"
|
||||||
fetch_and_deploy_gh_release "rustdesk-hbbs" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*amd64.deb"
|
fetch_and_deploy_gh_release "rustdesk-hbbs" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*amd64.deb"
|
||||||
fetch_and_deploy_gh_release "rustdesk-utils" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*amd64.deb"
|
fetch_and_deploy_gh_release "rustdesk-utils" "lejianwen/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*amd64.deb"
|
||||||
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*amd64.deb"
|
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*amd64.deb"
|
||||||
|
|
||||||
msg_info "Starting services"
|
msg_info "Starting services"
|
||||||
systemctl start -q rustdesk-* --all
|
systemctl start -q rustdesk-*
|
||||||
msg_ok "Services started"
|
msg_ok "Services started"
|
||||||
|
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
|
|||||||
@@ -53,6 +53,13 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
sed -i 's|_TARGET=.*$|_URL=http://127.0.0.1:60072|' /opt/scanopy/.env
|
sed -i 's|_TARGET=.*$|_URL=http://127.0.0.1:60072|' /opt/scanopy/.env
|
||||||
|
|
||||||
|
msg_info "Building Scanopy Server (patience)"
|
||||||
|
cd /opt/scanopy/backend
|
||||||
|
$STD cargo build --release --bin server --bin generate-fixtures
|
||||||
|
$STD ./target/release/generate-fixtures --output-dir /opt/scanopy/ui/src/lib/data
|
||||||
|
mv ./target/release/server /usr/bin/scanopy-server
|
||||||
|
msg_ok "Built Scanopy Server"
|
||||||
|
|
||||||
msg_info "Creating frontend UI"
|
msg_info "Creating frontend UI"
|
||||||
export PUBLIC_SERVER_HOSTNAME=default
|
export PUBLIC_SERVER_HOSTNAME=default
|
||||||
export PUBLIC_SERVER_PORT=""
|
export PUBLIC_SERVER_PORT=""
|
||||||
@@ -61,12 +68,6 @@ function update_script() {
|
|||||||
$STD npm run build
|
$STD npm run build
|
||||||
msg_ok "Created frontend UI"
|
msg_ok "Created frontend UI"
|
||||||
|
|
||||||
msg_info "Building Scanopy Server (patience)"
|
|
||||||
cd /opt/scanopy/backend
|
|
||||||
$STD cargo build --release --bin server
|
|
||||||
mv ./target/release/server /usr/bin/scanopy-server
|
|
||||||
msg_ok "Built Scanopy Server"
|
|
||||||
|
|
||||||
if [[ -f /etc/systemd/system/scanopy-daemon.service ]]; then
|
if [[ -f /etc/systemd/system/scanopy-daemon.service ]]; then
|
||||||
fetch_and_deploy_gh_release "Scanopy Daemon" "scanopy/scanopy" "singlefile" "latest" "/usr/local/bin" "scanopy-daemon-linux-amd64"
|
fetch_and_deploy_gh_release "Scanopy Daemon" "scanopy/scanopy" "singlefile" "latest" "/usr/local/bin" "scanopy-daemon-linux-amd64"
|
||||||
mv "/usr/local/bin/Scanopy Daemon" /usr/local/bin/scanopy-daemon
|
mv "/usr/local/bin/Scanopy Daemon" /usr/local/bin/scanopy-daemon
|
||||||
|
|||||||
@@ -28,6 +28,34 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ -f /opt/semaphore/semaphore_db.bolt ]]; then
|
||||||
|
msg_warn "WARNING: Due to bugs with BoltDB database, update script will move your application"
|
||||||
|
msg_warn "to use SQLite database instead. Unfortunately, this will reset your application and make it a fresh"
|
||||||
|
msg_warn "installation. All your data will be lost!"
|
||||||
|
echo ""
|
||||||
|
read -r -p "${TAB3}Do you want to continue? (y/N): " CONFIRM
|
||||||
|
if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
msg_info "Moving from BoltDB to SQLite"
|
||||||
|
systemctl stop semaphore
|
||||||
|
rm -rf /opt/semaphore/semaphore_db.bolt
|
||||||
|
sed -i \
|
||||||
|
-e 's|"bolt": {|"sqlite": {|' \
|
||||||
|
-e 's|/semaphore_db.bolt"|/database.sqlite"|' \
|
||||||
|
-e '/semaphore_db.bolt/d' \
|
||||||
|
-e '/"dialect"/d' \
|
||||||
|
-e '/^ },$/a\ "dialect": "sqlite",' \
|
||||||
|
/opt/semaphore/config.json
|
||||||
|
SEM_PW=$(cat ~/semaphore.creds)
|
||||||
|
systemctl start semaphore
|
||||||
|
$STD semaphore user add --admin --login admin --email admin@helper-scripts.com --name Administrator --password "${SEM_PW}" --config /opt/semaphore/config.json
|
||||||
|
|
||||||
|
msg_ok "Moved from BoltDB to SQLite"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "semaphore" "semaphoreui/semaphore"; then
|
if check_for_gh_release "semaphore" "semaphoreui/semaphore"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop semaphore
|
systemctl stop semaphore
|
||||||
|
|||||||
@@ -29,8 +29,6 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
NODE_VERSION="25" setup_nodejs
|
|
||||||
|
|
||||||
if check_for_gh_release "sparkyfitness" "CodeWithCJ/SparkyFitness"; then
|
if check_for_gh_release "sparkyfitness" "CodeWithCJ/SparkyFitness"; then
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop sparkyfitness-server nginx
|
systemctl stop sparkyfitness-server nginx
|
||||||
@@ -48,15 +46,19 @@ function update_script() {
|
|||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "sparkyfitness" "CodeWithCJ/SparkyFitness" "tarball"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "sparkyfitness" "CodeWithCJ/SparkyFitness" "tarball"
|
||||||
|
|
||||||
|
PNPM_VERSION="$(jq -r '.packageManager | split("@")[1]' /opt/sparkyfitness/package.json)"
|
||||||
|
NODE_VERSION="25" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs
|
||||||
|
|
||||||
msg_info "Updating Sparky Fitness Backend"
|
msg_info "Updating Sparky Fitness Backend"
|
||||||
cd /opt/sparkyfitness/SparkyFitnessServer
|
cd /opt/sparkyfitness/SparkyFitnessServer
|
||||||
$STD npm install
|
$STD npm install
|
||||||
msg_ok "Updated Sparky Fitness Backend"
|
msg_ok "Updated Sparky Fitness Backend"
|
||||||
|
|
||||||
msg_info "Updating Sparky Fitness Frontend (Patience)"
|
msg_info "Updating Sparky Fitness Frontend (Patience)"
|
||||||
|
cd /opt/sparkyfitness
|
||||||
|
$STD pnpm install
|
||||||
cd /opt/sparkyfitness/SparkyFitnessFrontend
|
cd /opt/sparkyfitness/SparkyFitnessFrontend
|
||||||
$STD npm install
|
$STD pnpm run build
|
||||||
$STD npm run build
|
|
||||||
cp -a /opt/sparkyfitness/SparkyFitnessFrontend/dist/. /var/www/sparkyfitness/
|
cp -a /opt/sparkyfitness/SparkyFitnessFrontend/dist/. /var/www/sparkyfitness/
|
||||||
msg_ok "Updated Sparky Fitness Frontend"
|
msg_ok "Updated Sparky Fitness Frontend"
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
PYTHON_VERSION="3.12" setup_uv
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
JAVA_VERSION="21" setup_java
|
JAVA_VERSION="25" setup_java
|
||||||
|
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop stirlingpdf libreoffice-listener unoserver
|
systemctl stop stirlingpdf libreoffice-listener unoserver
|
||||||
|
|||||||
61
ct/strapi.sh
Executable file
61
ct/strapi.sh
Executable file
@@ -0,0 +1,61 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: pespinel
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://strapi.io/
|
||||||
|
|
||||||
|
APP="Strapi"
|
||||||
|
var_tags="${var_tags:-cms}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-4096}"
|
||||||
|
var_disk="${var_disk:-8}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -f /etc/systemd/system/strapi.service ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
NODE_VERSION="24" setup_nodejs
|
||||||
|
|
||||||
|
msg_info "Stopping Strapi"
|
||||||
|
systemctl stop strapi
|
||||||
|
msg_ok "Stopped Strapi"
|
||||||
|
|
||||||
|
msg_info "Updating Strapi"
|
||||||
|
cd /opt/strapi
|
||||||
|
$STD npx @strapi/upgrade minor --yes
|
||||||
|
msg_ok "Updated Strapi"
|
||||||
|
|
||||||
|
msg_info "Building Strapi"
|
||||||
|
export NODE_OPTIONS="--max-old-space-size=3072"
|
||||||
|
$STD npm run build
|
||||||
|
msg_ok "Built Strapi"
|
||||||
|
|
||||||
|
msg_info "Starting Strapi"
|
||||||
|
systemctl start strapi
|
||||||
|
msg_ok "Started Strapi"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:1337${CL}"
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
# Author: Slaviša Arežina (tremor021)
|
# Author: MickLesk (CanbiZ)
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://github.com/Suwayomi/Suwayomi-Server
|
# Source: https://github.com/steveiliop56/tinyauth
|
||||||
|
|
||||||
APP="SuwayomiServer"
|
APP="Tinyauth"
|
||||||
var_tags="${var_tags:-media;manga}"
|
var_tags="${var_tags:-auth}"
|
||||||
var_cpu="${var_cpu:-1}"
|
var_cpu="${var_cpu:-1}"
|
||||||
var_ram="${var_ram:-1024}"
|
var_ram="${var_ram:-512}"
|
||||||
var_disk="${var_disk:-4}"
|
var_disk="${var_disk:-4}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
@@ -23,23 +23,20 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
if [[ ! -d /opt/tinyauth ]]; then
|
||||||
if [[ ! -f /usr/bin/suwayomi-server ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "suwayomi-server" "Suwayomi/Suwayomi-Server"; then
|
if check_for_gh_release "tinyauth" "steveiliop56/tinyauth"; then
|
||||||
JAVA_VERSION=21 setup_java
|
|
||||||
|
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop suwayomi-server
|
systemctl stop tinyauth
|
||||||
msg_info "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "suwayomi-server" "Suwayomi/Suwayomi-Server" "binary"
|
fetch_and_deploy_gh_release "tinyauth" "steveiliop56/tinyauth" "singlefile" "latest" "/opt/tinyauth" "tinyauth-amd64"
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start suwayomi-server
|
systemctl start tinyauth
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Updated successfully!"
|
||||||
fi
|
fi
|
||||||
@@ -53,4 +50,4 @@ description
|
|||||||
msg_ok "Completed successfully!\n"
|
msg_ok "Completed successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4567${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||||
@@ -9,7 +9,7 @@ APP="Tracearr"
|
|||||||
var_tags="${var_tags:-media}"
|
var_tags="${var_tags:-media}"
|
||||||
var_cpu="${var_cpu:-2}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-2048}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-5}"
|
var_disk="${var_disk:-10}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
@@ -75,10 +75,31 @@ if [ -f \$pg_config_file ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
systemctl restart postgresql
|
systemctl restart postgresql
|
||||||
|
sudo -u postgres psql -c "ALTER USER tracearr WITH SUPERUSER;"
|
||||||
EOF
|
EOF
|
||||||
chmod +x /data/tracearr/prestart.sh
|
chmod +x /data/tracearr/prestart.sh
|
||||||
msg_ok "Updated prestart script"
|
msg_ok "Updated prestart script"
|
||||||
|
|
||||||
|
# check if tailscale is installed
|
||||||
|
if command -v tailscale >/dev/null 2>&1; then
|
||||||
|
# Tracearr runs tailscaled in user mode, disable the service.
|
||||||
|
$STD systemctl disable --now tailscaled
|
||||||
|
$STD systemctl stop tailscaled
|
||||||
|
msg_ok "Tailscale already installed"
|
||||||
|
else
|
||||||
|
msg_info "Installing tailscale"
|
||||||
|
setup_deb822_repo \
|
||||||
|
"tailscale" \
|
||||||
|
"https://pkgs.tailscale.com/stable/$(get_os_info id)/$(get_os_info codename).noarmor.gpg" \
|
||||||
|
"https://pkgs.tailscale.com/stable/$(get_os_info id)/" \
|
||||||
|
"$(get_os_info codename)"
|
||||||
|
$STD apt install -y tailscale
|
||||||
|
# Tracearr runs tailscaled in user mode, disable the service.
|
||||||
|
$STD systemctl disable --now tailscaled
|
||||||
|
$STD systemctl stop tailscaled
|
||||||
|
msg_ok "Installed tailscale"
|
||||||
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "tracearr" "connorgallopo/Tracearr"; then
|
if check_for_gh_release "tracearr" "connorgallopo/Tracearr"; then
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop tracearr postgresql redis
|
systemctl stop tracearr postgresql redis
|
||||||
@@ -122,6 +143,8 @@ EOF
|
|||||||
sed -i "s/^APP_VERSION=.*/APP_VERSION=$(cat /root/.tracearr)/" /data/tracearr/.env
|
sed -i "s/^APP_VERSION=.*/APP_VERSION=$(cat /root/.tracearr)/" /data/tracearr/.env
|
||||||
chmod 600 /data/tracearr/.env
|
chmod 600 /data/tracearr/.env
|
||||||
chown -R tracearr:tracearr /data/tracearr
|
chown -R tracearr:tracearr /data/tracearr
|
||||||
|
mkdir -p /data/backup
|
||||||
|
chown -R tracearr:tracearr /data/backup
|
||||||
msg_ok "Configured Tracearr"
|
msg_ok "Configured Tracearr"
|
||||||
|
|
||||||
msg_info "Starting services"
|
msg_info "Starting services"
|
||||||
|
|||||||
@@ -34,14 +34,14 @@ function update_script() {
|
|||||||
msg_warn "This requires MANUAL config changes in /etc/vikunja/config.yml."
|
msg_warn "This requires MANUAL config changes in /etc/vikunja/config.yml."
|
||||||
msg_warn "See: https://vikunja.io/changelog/whats-new-in-vikunja-1.0.0/#config-changes"
|
msg_warn "See: https://vikunja.io/changelog/whats-new-in-vikunja-1.0.0/#config-changes"
|
||||||
|
|
||||||
read -rp "Continue with update? (y to proceed): " -t 30 CONFIRM1 || exit 1
|
read -rp "Continue with update? (y to proceed): " -t 30 CONFIRM1 || exit 254
|
||||||
[[ "$CONFIRM1" =~ ^[yY]$ ]] || exit 0
|
[[ "$CONFIRM1" =~ ^[yY]$ ]] || exit 0
|
||||||
|
|
||||||
echo
|
echo
|
||||||
msg_warn "Vikunja may not start after the update until you manually adjust the config."
|
msg_warn "Vikunja may not start after the update until you manually adjust the config."
|
||||||
msg_warn "Details: https://vikunja.io/changelog/whats-new-in-vikunja-1.0.0/#config-changes"
|
msg_warn "Details: https://vikunja.io/changelog/whats-new-in-vikunja-1.0.0/#config-changes"
|
||||||
|
|
||||||
read -rp "Acknowledge and continue? (y): " -t 30 CONFIRM2 || exit 1
|
read -rp "Acknowledge and continue? (y): " -t 30 CONFIRM2 || exit 254
|
||||||
[[ "$CONFIRM2" =~ ^[yY]$ ]] || exit 0
|
[[ "$CONFIRM2" =~ ^[yY]$ ]] || exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,10 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if grep -q '^WF_CORS_ALLOW_ORIGINS=\*$' /opt/wealthfolio/.env; then
|
||||||
|
sed -i "s|^WF_CORS_ALLOW_ORIGINS=\*$|WF_CORS_ALLOW_ORIGINS=http://${LOCAL_IP}:8080|" /opt/wealthfolio/.env
|
||||||
|
fi
|
||||||
|
|
||||||
if check_for_gh_release "wealthfolio" "afadil/wealthfolio"; then
|
if check_for_gh_release "wealthfolio" "afadil/wealthfolio"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop wealthfolio
|
systemctl stop wealthfolio
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ function update_script() {
|
|||||||
if [[ -d /etc/wgdashboard ]]; then
|
if [[ -d /etc/wgdashboard ]]; then
|
||||||
sleep 2
|
sleep 2
|
||||||
cd /etc/wgdashboard/src
|
cd /etc/wgdashboard/src
|
||||||
$STD ./wgd.sh update
|
$STD ./wgd.sh update -y
|
||||||
$STD ./wgd.sh start
|
$STD ./wgd.sh start
|
||||||
fi
|
fi
|
||||||
msg_ok "Updated LXC"
|
msg_ok "Updated LXC"
|
||||||
|
|||||||
@@ -35,13 +35,16 @@ function update_script() {
|
|||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Creating Backup"
|
msg_info "Creating Backup"
|
||||||
rm -rf /opt/${APP}_backup*.tar.gz
|
ensure_dependencies zstd
|
||||||
mkdir -p /opt/z2m_backup
|
mkdir -p /opt/{backups,z2m_backup}
|
||||||
$STD tar -czf /opt/z2m_backup/${APP}_backup_$(date +%Y%m%d%H%M%S).tar.gz -C /opt zigbee2mqtt
|
BACKUP_VERSION="$(<"$HOME/.zigbee2mqtt")"
|
||||||
mv /opt/zigbee2mqtt/data /opt/z2m_backup
|
BACKUP_FILE="/opt/backups/${APP}_backup_${BACKUP_VERSION}.tar.zst"
|
||||||
msg_ok "Backup Created"
|
$STD tar -cf - -C /opt zigbee2mqtt | zstd -q -o "$BACKUP_FILE"
|
||||||
|
ls -t /opt/backups/${APP}_backup_*.tar.zst 2>/dev/null | tail -n +6 | xargs -r rm -f
|
||||||
|
mv /opt/zigbee2mqtt/data /opt/z2m_backup/data
|
||||||
|
msg_ok "Backup Created (${BACKUP_VERSION})"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "Zigbee2MQTT" "Koenkk/zigbee2mqtt" "tarball" "latest" "/opt/zigbee2mqtt"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Zigbee2MQTT" "Koenkk/zigbee2mqtt" "tarball" "latest" "/opt/zigbee2mqtt"
|
||||||
|
|
||||||
msg_info "Updating Zigbee2MQTT"
|
msg_info "Updating Zigbee2MQTT"
|
||||||
rm -rf /opt/zigbee2mqtt/data
|
rm -rf /opt/zigbee2mqtt/data
|
||||||
|
|||||||
@@ -175,7 +175,7 @@ All scripts and configurations must follow our coding standards to ensure consis
|
|||||||
### Available Guides
|
### Available Guides
|
||||||
|
|
||||||
- **[CONTRIBUTING.md](CONTRIBUTING.md)** - Essential coding standards and best practices
|
- **[CONTRIBUTING.md](CONTRIBUTING.md)** - Essential coding standards and best practices
|
||||||
- **[CODE_AUDIT.md](CODE_AUDIT.md)** - Code review checklist and audit procedures
|
- **[CODE-AUDIT.md](CODE-AUDIT.md)** - Code review checklist and audit procedures
|
||||||
- **[GUIDE.md](GUIDE.md)** - Comprehensive contribution guide
|
- **[GUIDE.md](GUIDE.md)** - Comprehensive contribution guide
|
||||||
- **[HELPER_FUNCTIONS.md](HELPER_FUNCTIONS.md)** - Reference for all tools.func helper functions
|
- **[HELPER_FUNCTIONS.md](HELPER_FUNCTIONS.md)** - Reference for all tools.func helper functions
|
||||||
- **Container Scripts** - `/ct/` templates and guidelines
|
- **Container Scripts** - `/ct/` templates and guidelines
|
||||||
|
|||||||
39
frontend/.gitignore
vendored
39
frontend/.gitignore
vendored
@@ -1,39 +0,0 @@
|
|||||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
|
||||||
|
|
||||||
# dependencies
|
|
||||||
/node_modules
|
|
||||||
/.pnp
|
|
||||||
.pnp.js
|
|
||||||
.yarn/install-state.gz
|
|
||||||
|
|
||||||
# wrangler
|
|
||||||
.worker-next
|
|
||||||
.wrangler
|
|
||||||
|
|
||||||
# testing
|
|
||||||
/coverage
|
|
||||||
|
|
||||||
# next.js
|
|
||||||
/.next/
|
|
||||||
out
|
|
||||||
# production
|
|
||||||
/build
|
|
||||||
|
|
||||||
# misc
|
|
||||||
.DS_Store
|
|
||||||
*.pem
|
|
||||||
|
|
||||||
# debug
|
|
||||||
npm-debug.log*
|
|
||||||
yarn-debug.log*
|
|
||||||
yarn-error.log*
|
|
||||||
|
|
||||||
# # local env files
|
|
||||||
# .env*.local
|
|
||||||
# .env
|
|
||||||
# vercel
|
|
||||||
.vercel
|
|
||||||
|
|
||||||
# typescript
|
|
||||||
*.tsbuildinfo
|
|
||||||
next-env.d.ts
|
|
||||||
51
frontend/.vscode/settings.json
generated
vendored
51
frontend/.vscode/settings.json
generated
vendored
@@ -1,51 +0,0 @@
|
|||||||
{
|
|
||||||
// Disable the default formatter, use eslint instead
|
|
||||||
"prettier.enable": false,
|
|
||||||
"editor.formatOnSave": false,
|
|
||||||
|
|
||||||
// Auto fix
|
|
||||||
"editor.codeActionsOnSave": {
|
|
||||||
"source.fixAll.eslint": "explicit",
|
|
||||||
"source.organizeImports": "never"
|
|
||||||
},
|
|
||||||
|
|
||||||
// Silent the stylistic rules in you IDE, but still auto fix them
|
|
||||||
"eslint.rules.customizations": [
|
|
||||||
{ "rule": "style/*", "severity": "off", "fixable": true },
|
|
||||||
{ "rule": "format/*", "severity": "off", "fixable": true },
|
|
||||||
{ "rule": "*-indent", "severity": "off", "fixable": true },
|
|
||||||
{ "rule": "*-spacing", "severity": "off", "fixable": true },
|
|
||||||
{ "rule": "*-spaces", "severity": "off", "fixable": true },
|
|
||||||
{ "rule": "*-order", "severity": "off", "fixable": true },
|
|
||||||
{ "rule": "*-dangle", "severity": "off", "fixable": true },
|
|
||||||
{ "rule": "*-newline", "severity": "off", "fixable": true },
|
|
||||||
{ "rule": "*quotes", "severity": "off", "fixable": true },
|
|
||||||
{ "rule": "*semi", "severity": "off", "fixable": true }
|
|
||||||
],
|
|
||||||
|
|
||||||
// Enable eslint for all supported languages
|
|
||||||
"eslint.validate": [
|
|
||||||
"javascript",
|
|
||||||
"javascriptreact",
|
|
||||||
"typescript",
|
|
||||||
"typescriptreact",
|
|
||||||
"vue",
|
|
||||||
"html",
|
|
||||||
"markdown",
|
|
||||||
"json",
|
|
||||||
"json5",
|
|
||||||
"jsonc",
|
|
||||||
"yaml",
|
|
||||||
"toml",
|
|
||||||
"xml",
|
|
||||||
"gql",
|
|
||||||
"graphql",
|
|
||||||
"astro",
|
|
||||||
"svelte",
|
|
||||||
"css",
|
|
||||||
"less",
|
|
||||||
"scss",
|
|
||||||
"pcss",
|
|
||||||
"postcss"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2024-Present Bram Suurd
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
@@ -1,281 +0,0 @@
|
|||||||
# Proxmox VE Helper-Scripts Frontend
|
|
||||||
|
|
||||||
> 🚀 **Modern frontend for the Community-Scripts Proxmox VE Helper-Scripts repository**
|
|
||||||
|
|
||||||
A comprehensive, user-friendly interface built with Next.js that provides access to 300+ automation scripts for Proxmox Virtual Environment management. This frontend serves as the official website for the Community-Scripts organization's Proxmox VE Helper-Scripts repository.
|
|
||||||
|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||
|
|
||||||
## 🌟 Features
|
|
||||||
|
|
||||||
### Core Functionality
|
|
||||||
|
|
||||||
- **📜 Script Management**: Browse, search, and filter 300+ Proxmox VE scripts
|
|
||||||
- **📱 Responsive Design**: Mobile-first approach with modern UI/UX
|
|
||||||
- **🔍 Advanced Search**: Fuzzy search with category filtering
|
|
||||||
- **📊 Analytics Integration**: Built-in analytics for usage tracking
|
|
||||||
- **🌙 Dark/Light Mode**: Theme switching with system preference detection
|
|
||||||
- **⚡ Performance Optimized**: Static site generation for lightning-fast loading
|
|
||||||
|
|
||||||
### Technical Features
|
|
||||||
|
|
||||||
- **🎨 Modern UI Components**: Built with Radix UI and shadcn/ui
|
|
||||||
- **📈 Data Visualization**: Charts and metrics using Chart.js
|
|
||||||
- **🔄 State Management**: React Query for efficient data fetching
|
|
||||||
- **📝 Type Safety**: Full TypeScript implementation
|
|
||||||
- **🚀 Static Export**: Optimized for GitHub Pages deployment
|
|
||||||
|
|
||||||
## 🛠️ Tech Stack
|
|
||||||
|
|
||||||
### Frontend Framework
|
|
||||||
|
|
||||||
- **[Next.js 15.2.4](https://nextjs.org/)** - React framework with App Router
|
|
||||||
- **[React 19.0.0](https://react.dev/)** - Latest React with concurrent features
|
|
||||||
- **[TypeScript 5.8.2](https://www.typescriptlang.org/)** - Type-safe JavaScript
|
|
||||||
|
|
||||||
### Styling & UI
|
|
||||||
|
|
||||||
- **[Tailwind CSS 3.4.17](https://tailwindcss.com/)** - Utility-first CSS framework
|
|
||||||
- **[Radix UI](https://www.radix-ui.com/)** - Unstyled, accessible UI components
|
|
||||||
- **[shadcn/ui](https://ui.shadcn.com/)** - Re-usable components built on Radix UI
|
|
||||||
- **[Framer Motion](https://www.framer.com/motion/)** - Animation library
|
|
||||||
- **[Lucide React](https://lucide.dev/)** - Icon library
|
|
||||||
|
|
||||||
### Data & State Management
|
|
||||||
|
|
||||||
- **[TanStack Query 5.71.1](https://tanstack.com/query)** - Powerful data synchronization
|
|
||||||
- **[Zod 3.24.2](https://zod.dev/)** - TypeScript-first schema validation
|
|
||||||
- **[nuqs 2.4.1](https://nuqs.47ng.com/)** - Type-safe search params state manager
|
|
||||||
|
|
||||||
### Development Tools
|
|
||||||
|
|
||||||
- **[Vitest 3.1.1](https://vitest.dev/)** - Fast unit testing framework
|
|
||||||
- **[React Testing Library](https://testing-library.com/react)** - Simple testing utilities
|
|
||||||
- **[ESLint](https://eslint.org/)** - Code linting and formatting
|
|
||||||
- **[Prettier](https://prettier.io/)** - Code formatting
|
|
||||||
|
|
||||||
### Additional Libraries
|
|
||||||
|
|
||||||
- **[Chart.js](https://www.chartjs.org/)** - Data visualization
|
|
||||||
- **[Fuse.js](https://fusejs.io/)** - Fuzzy search
|
|
||||||
- **[date-fns](https://date-fns.org/)** - Date utility library
|
|
||||||
- **[Next Themes](https://github.com/pacocoursey/next-themes)** - Theme management
|
|
||||||
|
|
||||||
## 🚀 Getting Started
|
|
||||||
|
|
||||||
### Prerequisites
|
|
||||||
|
|
||||||
- **Node.js 18+** (recommend using the latest LTS version)
|
|
||||||
- **npm**, **yarn**, **pnpm**, or **bun** package manager
|
|
||||||
- **Git** for version control
|
|
||||||
|
|
||||||
### Installation
|
|
||||||
|
|
||||||
1. **Clone the repository**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git clone https://github.com/community-scripts/ProxmoxVE.git
|
|
||||||
cd ProxmoxVE/frontend
|
|
||||||
```
|
|
||||||
|
|
||||||
2. **Install dependencies**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Using npm
|
|
||||||
npm install
|
|
||||||
|
|
||||||
# Using yarn
|
|
||||||
yarn install
|
|
||||||
|
|
||||||
# Using pnpm
|
|
||||||
pnpm install
|
|
||||||
|
|
||||||
# Using bun
|
|
||||||
bun install
|
|
||||||
```
|
|
||||||
|
|
||||||
3. **Start the development server**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run dev
|
|
||||||
# or
|
|
||||||
yarn dev
|
|
||||||
# or
|
|
||||||
pnpm dev
|
|
||||||
# or
|
|
||||||
bun dev
|
|
||||||
```
|
|
||||||
|
|
||||||
4. **Open your browser**
|
|
||||||
|
|
||||||
Navigate to [http://localhost:3000](http://localhost:3000) to see the application running.
|
|
||||||
|
|
||||||
### Environment Configuration
|
|
||||||
|
|
||||||
The application uses the following environment variables:
|
|
||||||
|
|
||||||
- `BASE_PATH`: Set to "ProxmoxVE" for GitHub Pages deployment
|
|
||||||
- Analytics configuration is handled in `src/config/siteConfig.tsx`
|
|
||||||
|
|
||||||
## 🧪 Development
|
|
||||||
|
|
||||||
### Available Scripts
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Development
|
|
||||||
npm run dev # Start development server with Turbopack
|
|
||||||
npm run build # Build for production
|
|
||||||
npm run start # Start production server (after build)
|
|
||||||
|
|
||||||
# Code Quality
|
|
||||||
npm run lint # Run ESLint
|
|
||||||
npm run typecheck # Run TypeScript type checking
|
|
||||||
npm run format:write # Format code with Prettier
|
|
||||||
npm run format:check # Check code formatting
|
|
||||||
|
|
||||||
# Deployment
|
|
||||||
npm run deploy # Build and deploy to GitHub Pages
|
|
||||||
```
|
|
||||||
|
|
||||||
### Development Workflow
|
|
||||||
|
|
||||||
1. **Feature Development**
|
|
||||||
|
|
||||||
- Create a new branch for your feature
|
|
||||||
- Follow the established TypeScript and React patterns
|
|
||||||
- Use the existing component library (shadcn/ui)
|
|
||||||
- Ensure responsive design principles
|
|
||||||
|
|
||||||
2. **Code Standards**
|
|
||||||
|
|
||||||
- Follow TypeScript strict mode
|
|
||||||
- Use functional components with hooks
|
|
||||||
- Implement proper error boundaries
|
|
||||||
- Write descriptive variable and function names
|
|
||||||
- Use early returns for better readability
|
|
||||||
|
|
||||||
3. **Styling Guidelines**
|
|
||||||
|
|
||||||
- Use Tailwind CSS utility classes
|
|
||||||
- Follow mobile-first responsive design
|
|
||||||
- Implement dark/light mode considerations
|
|
||||||
- Use CSS variables from the design system
|
|
||||||
|
|
||||||
4. **Testing**
|
|
||||||
- Write unit tests for utility functions
|
|
||||||
- Test React components with React Testing Library
|
|
||||||
- Ensure accessibility standards are met
|
|
||||||
- Run tests before committing
|
|
||||||
|
|
||||||
### Component Development
|
|
||||||
|
|
||||||
The project uses a component-driven development approach:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// Example component structure
|
|
||||||
import { cn } from "@/lib/utils";
|
|
||||||
import { Button } from "@/components/ui/button";
|
|
||||||
|
|
||||||
interface ComponentProps {
|
|
||||||
title: string;
|
|
||||||
className?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const Component = ({ title, className }: ComponentProps) => {
|
|
||||||
return (
|
|
||||||
<div className={cn("default-classes", className)}>
|
|
||||||
<Button>{title}</Button>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
### Configuration for Static Export
|
|
||||||
|
|
||||||
The application is configured for static export in `next.config.mjs`:
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
const nextConfig = {
|
|
||||||
output: "export",
|
|
||||||
basePath: `/ProxmoxVE`,
|
|
||||||
images: {
|
|
||||||
unoptimized: true // Required for static export
|
|
||||||
}
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🤝 Contributing
|
|
||||||
|
|
||||||
We welcome contributions from the community! Here's how you can help:
|
|
||||||
|
|
||||||
### Getting Started
|
|
||||||
|
|
||||||
1. **Fork the repository** on GitHub
|
|
||||||
2. **Clone your fork** locally
|
|
||||||
3. **Create a new branch** for your feature or bugfix
|
|
||||||
4. **Make your changes** following our coding standards
|
|
||||||
5. **Submit a pull request** with a clear description
|
|
||||||
|
|
||||||
### Contribution Guidelines
|
|
||||||
|
|
||||||
#### Code Style
|
|
||||||
|
|
||||||
- Follow the existing TypeScript and React patterns
|
|
||||||
- Use descriptive variable and function names
|
|
||||||
- Implement proper error handling
|
|
||||||
- Write self-documenting code with appropriate comments
|
|
||||||
|
|
||||||
#### Component Guidelines
|
|
||||||
|
|
||||||
- Use functional components with hooks
|
|
||||||
- Implement proper TypeScript types
|
|
||||||
- Follow accessibility best practices
|
|
||||||
- Ensure responsive design
|
|
||||||
- Use the existing design system components
|
|
||||||
|
|
||||||
#### Pull Request Process
|
|
||||||
|
|
||||||
1. Update documentation if needed
|
|
||||||
2. Update the README if you've added new features
|
|
||||||
3. Request review from maintainers
|
|
||||||
|
|
||||||
### Areas for Contribution
|
|
||||||
|
|
||||||
- **🐛 Bug fixes**: Report and fix issues
|
|
||||||
- **✨ New features**: Enhance functionality
|
|
||||||
- **📚 Documentation**: Improve guides and examples
|
|
||||||
- **🎨 UI/UX**: Improve design and user experience
|
|
||||||
- **♿ Accessibility**: Enhance accessibility features
|
|
||||||
- **🚀 Performance**: Optimize loading and runtime performance
|
|
||||||
|
|
||||||
## 📄 License
|
|
||||||
|
|
||||||
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
||||||
|
|
||||||
## 🙏 Acknowledgments
|
|
||||||
|
|
||||||
- **[tteck](https://github.com/tteck)** - Original creator of the Proxmox VE Helper-Scripts
|
|
||||||
- **[Community-Scripts Organization](https://github.com/community-scripts)** - Maintaining and expanding the project
|
|
||||||
- **[Proxmox Community](https://forum.proxmox.com/)** - For continuous feedback and support
|
|
||||||
- **All Contributors** - Thank you for your valuable contributions!
|
|
||||||
|
|
||||||
## 📚 Additional Resources
|
|
||||||
|
|
||||||
- **[Proxmox VE Documentation](https://pve.proxmox.com/pve-docs/)**
|
|
||||||
- **[Community Scripts Repository](https://github.com/community-scripts/ProxmoxVE)**
|
|
||||||
- **[Discord Community](https://discord.gg/3AnUqsXnmK)**
|
|
||||||
- **[GitHub Discussions](https://github.com/community-scripts/ProxmoxVE/discussions)**
|
|
||||||
|
|
||||||
## 🔗 Links
|
|
||||||
|
|
||||||
- **🌐 Live Website**: [https://community-scripts.github.io/ProxmoxVE/](https://community-scripts.github.io/ProxmoxVE/)
|
|
||||||
- **💬 Discord Server**: [https://discord.gg/3AnUqsXnmK](https://discord.gg/3AnUqsXnmK)
|
|
||||||
- **📝 Change Log**: [https://github.com/community-scripts/ProxmoxVE/blob/main/CHANGELOG.md](https://github.com/community-scripts/ProxmoxVE/blob/main/CHANGELOG.md)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Made with ❤️ by the Community-Scripts team and contributors**
|
|
||||||
2031
frontend/bun.lock
generated
2031
frontend/bun.lock
generated
File diff suppressed because it is too large
Load Diff
20
frontend/components.json
generated
20
frontend/components.json
generated
@@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "https://ui.shadcn.com/schema.json",
|
|
||||||
"style": "default",
|
|
||||||
"rsc": true,
|
|
||||||
"tsx": true,
|
|
||||||
"tailwind": {
|
|
||||||
"config": "tailwind.config.ts",
|
|
||||||
"css": "@/styles/globals.css",
|
|
||||||
"baseColor": "slate",
|
|
||||||
"cssVariables": true,
|
|
||||||
"prefix": ""
|
|
||||||
},
|
|
||||||
"aliases": {
|
|
||||||
"components": "@/components",
|
|
||||||
"utils": "@/lib/utils"
|
|
||||||
},
|
|
||||||
"registries": {
|
|
||||||
"@animate-ui": "https://animate-ui.com/r/{name}.json"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
import antfu from "@antfu/eslint-config";
|
|
||||||
|
|
||||||
export default antfu(
|
|
||||||
{
|
|
||||||
type: "app",
|
|
||||||
typescript: true,
|
|
||||||
formatters: true,
|
|
||||||
next: true,
|
|
||||||
stylistic: {
|
|
||||||
indent: 2,
|
|
||||||
semi: true,
|
|
||||||
quotes: "double",
|
|
||||||
},
|
|
||||||
ignores: ["src/components/ui/**", "README.md", "public/json/**"],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
rules: {
|
|
||||||
"ts/no-redeclare": "off",
|
|
||||||
"ts/consistent-type-definitions": ["error", "type"],
|
|
||||||
"no-console": ["warn"],
|
|
||||||
"antfu/no-top-level-await": ["off"],
|
|
||||||
"node/prefer-global/process": ["off"],
|
|
||||||
"node/no-process-env": ["error"],
|
|
||||||
"perfectionist/sort-imports": [
|
|
||||||
"error",
|
|
||||||
{
|
|
||||||
type: "line-length",
|
|
||||||
order: "desc",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
|
|
||||||
"unicorn/filename-case": [
|
|
||||||
"error",
|
|
||||||
{
|
|
||||||
case: "kebabCase",
|
|
||||||
ignore: ["README.md"],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
);
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
/** @type {import('next').NextConfig} */
|
|
||||||
const nextConfig = {
|
|
||||||
webpack: (config) => {
|
|
||||||
config.resolve.alias.canvas = false;
|
|
||||||
|
|
||||||
return config;
|
|
||||||
},
|
|
||||||
images: {
|
|
||||||
remotePatterns: [
|
|
||||||
{
|
|
||||||
protocol: "https",
|
|
||||||
hostname: "**",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
|
|
||||||
env: {
|
|
||||||
BASE_PATH: "ProxmoxVE",
|
|
||||||
},
|
|
||||||
|
|
||||||
eslint: {
|
|
||||||
ignoreDuringBuilds: true,
|
|
||||||
},
|
|
||||||
|
|
||||||
output: "export",
|
|
||||||
basePath: `/ProxmoxVE`,
|
|
||||||
};
|
|
||||||
|
|
||||||
export default nextConfig;
|
|
||||||
87
frontend/package.json
generated
87
frontend/package.json
generated
@@ -1,87 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "proxmox-helper-scripts-website",
|
|
||||||
"type": "module",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"private": true,
|
|
||||||
"author": {
|
|
||||||
"name": "Bram Suurd",
|
|
||||||
"url": "https://github.com/community-scripts"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
|
||||||
"scripts": {
|
|
||||||
"dev": "next dev --turbopack",
|
|
||||||
"build": "next build",
|
|
||||||
"start": "next start",
|
|
||||||
"lint": "eslint . --fix",
|
|
||||||
"typecheck": "tsc --noEmit"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@radix-ui/react-accordion": "^1.2.12",
|
|
||||||
"@radix-ui/react-dialog": "^1.1.15",
|
|
||||||
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
||||||
"@radix-ui/react-icons": "^1.3.2",
|
|
||||||
"@radix-ui/react-label": "^2.1.8",
|
|
||||||
"@radix-ui/react-navigation-menu": "^1.2.14",
|
|
||||||
"@radix-ui/react-popover": "^1.1.15",
|
|
||||||
"@radix-ui/react-scroll-area": "^1.2.10",
|
|
||||||
"@radix-ui/react-select": "^2.2.6",
|
|
||||||
"@radix-ui/react-separator": "^1.1.8",
|
|
||||||
"@radix-ui/react-slot": "^1.2.4",
|
|
||||||
"@radix-ui/react-switch": "^1.2.6",
|
|
||||||
"@radix-ui/react-tabs": "^1.1.13",
|
|
||||||
"@radix-ui/react-tooltip": "^1.2.8",
|
|
||||||
"@tanstack/react-query": "^5.90.12",
|
|
||||||
"@types/react-syntax-highlighter": "^15.5.13",
|
|
||||||
"chart.js": "^4.5.1",
|
|
||||||
"chartjs-plugin-datalabels": "^2.2.0",
|
|
||||||
"class-variance-authority": "^0.7.1",
|
|
||||||
"clsx": "^2.1.1",
|
|
||||||
"cmdk": "^1.1.1",
|
|
||||||
"date-fns": "^4.1.0",
|
|
||||||
"framer-motion": "^12.23.26",
|
|
||||||
"fuse.js": "^7.1.0",
|
|
||||||
"lucide-react": "^0.561.0",
|
|
||||||
"mini-svg-data-uri": "^1.4.4",
|
|
||||||
"motion": "^12.23.26",
|
|
||||||
"next": "15.5.8",
|
|
||||||
"next-themes": "^0.4.6",
|
|
||||||
"nuqs": "^2.8.5",
|
|
||||||
"react": "19.2.3",
|
|
||||||
"react-chartjs-2": "^5.3.1",
|
|
||||||
"react-code-blocks": "^0.1.6",
|
|
||||||
"react-datepicker": "^9.0.0",
|
|
||||||
"react-day-picker": "^9.12.0",
|
|
||||||
"react-dom": "19.2.3",
|
|
||||||
"react-icons": "^5.5.0",
|
|
||||||
"react-syntax-highlighter": "^16.1.0",
|
|
||||||
"react-use-measure": "^2.1.7",
|
|
||||||
"recharts": "3.6.0",
|
|
||||||
"sharp": "^0.34.5",
|
|
||||||
"sonner": "^2.0.7",
|
|
||||||
"tailwind-merge": "^3.4.0",
|
|
||||||
"zod": "^4.2.1"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@antfu/eslint-config": "^6.7.1",
|
|
||||||
"@eslint-react/eslint-plugin": "^2.3.13",
|
|
||||||
"@next/eslint-plugin-next": "^15.5.8",
|
|
||||||
"@tanstack/eslint-plugin-query": "^5.91.2",
|
|
||||||
"@types/node": "^25.0.2",
|
|
||||||
"@types/react": "npm:types-react@19.0.0-rc.1",
|
|
||||||
"@types/react-dom": "npm:types-react-dom@19.0.0-rc.1",
|
|
||||||
"@typescript-eslint/eslint-plugin": "^8.50.0",
|
|
||||||
"@typescript-eslint/parser": "^8.50.0",
|
|
||||||
"@vitejs/plugin-react": "^5.1.2",
|
|
||||||
"eslint": "^9.39.2",
|
|
||||||
"eslint-config-next": "15.5.8",
|
|
||||||
"eslint-plugin-format": "^1.1.0",
|
|
||||||
"eslint-plugin-react-hooks": "^7.0.1",
|
|
||||||
"eslint-plugin-react-refresh": "^0.4.25",
|
|
||||||
"jsdom": "^27.3.0",
|
|
||||||
"postcss": "^8.5.6",
|
|
||||||
"tailwindcss": "^3.4.17",
|
|
||||||
"tailwindcss-animate": "^1.0.7",
|
|
||||||
"tailwindcss-animated": "^1.1.2",
|
|
||||||
"typescript": "^5.9.3"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
/** @type {import('postcss-load-config').Config} */
|
|
||||||
const config = {
|
|
||||||
plugins: {
|
|
||||||
tailwindcss: {},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
export default config;
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 120 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user