Compare commits

..

206 Commits

Author SHA1 Message Date
9ad4dcf8d0 Update CHANGELOG.md (#3023)
Some checks are pending
Auto Update .app-files / update-app-files (push) Waiting to run
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Frontend CI/CD / build (push) Waiting to run
Frontend CI/CD / deploy (push) Blocked by required conditions
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-12 17:13:40 +01:00
91bfe2442c Update date in json (#3022)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-03-12 15:41:11 +01:00
f4afe5be9e Update .app files (#3024)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-03-12 15:40:46 +01:00
fe956f650d New Script: Fluid Calendar (#2869)
* New Script: Fluid Calendar

* Small changes requested

* Fluidcal: Adjust resource levels

* Fluidcal: remove info from json
2025-03-12 15:19:07 +01:00
3dd67e46c2 Update CHANGELOG.md (#3018)
Some checks are pending
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Frontend CI/CD / build (push) Waiting to run
Frontend CI/CD / deploy (push) Blocked by required conditions
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-12 07:11:51 +01:00
6de4a8107c Feature: Filebrowser: support now alpine (#2997)
* Feature: Filebrowser LXC: support now alpine

* add alpine bash path to website
2025-03-12 06:56:12 +01:00
f6a6ca5e26 Update CHANGELOG.md (#3015)
Some checks are pending
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-11 21:23:29 +01:00
7f796478f3 Update CHANGELOG.md (#3014)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-11 21:21:32 +01:00
d72d742fbb Update CHANGELOG.md (#3013)
Some checks are pending
Auto Update .app-files / update-app-files (push) Waiting to run
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Frontend CI/CD / build (push) Waiting to run
Frontend CI/CD / deploy (push) Blocked by required conditions
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-11 17:43:26 +01:00
d5f5f1e5de Headscale: Re-enable Service after Update (#3012) 2025-03-11 17:34:23 +01:00
31d80c3461 Update CHANGELOG.md (#3010)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-11 15:42:18 +01:00
68936f0edd SnipeIT: Harmonize Composer to Dockerfile (#3009) 2025-03-11 15:32:55 +01:00
5ce76f0a3a Cleanup Old Files (#3004) 2025-03-11 12:27:05 +01:00
48c20bbd6d Update CHANGELOG.md (#2999) 2025-03-11 12:26:00 +01:00
05266b2849 Update .app files (#3003)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-03-11 12:11:49 +01:00
293a220719 Plant-it (#3000)
* Plant-it

* update source

* fix header

* Update json/plant-it.json

Co-authored-by: Bas van den Berg <74251551+bvdberg01@users.noreply.github.com>

* Update plant-it.sh

---------

Co-authored-by: Bas van den Berg <74251551+bvdberg01@users.noreply.github.com>
2025-03-11 12:01:10 +01:00
a0f7643838 Fix Website - Show correct wget path for alpine (#2998) 2025-03-11 11:08:24 +01:00
96c943a7de Update CHANGELOG.md (#2995)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-11 10:45:26 +01:00
57350a8324 fix updateable (#2991)
Some checks are pending
Auto Update .app-files / update-app-files (push) Waiting to run
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Frontend CI/CD / build (push) Waiting to run
Frontend CI/CD / deploy (push) Blocked by required conditions
2025-03-11 08:35:45 +01:00
9953d8d662 fix update function (#2996) 2025-03-11 08:35:16 +01:00
35efc4ed8a Update CHANGELOG.md (#2993) 2025-03-11 08:21:39 +01:00
de001f5022 Update .app files (#2994) 2025-03-11 08:21:26 +01:00
c737473f8b Update date in json (#2992) 2025-03-11 08:21:22 +01:00
a9db3283dd Seafile (#2987) 2025-03-11 08:19:28 +01:00
77fbf68a43 Update CHANGELOG.md (#2989)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-11 08:01:19 +01:00
04a473b4a8 Additions and amends to the CONTIRBUTOR docs (#2983)
* Fixes to the contributor docs

* added info about our dev repo

* some more clarifications
2025-03-11 07:04:09 +01:00
49d7d4a106 Remove NVM dependency and fix GOlang dependency crawling (#2979)
Some checks are pending
Auto Update .app-files / update-app-files (push) Waiting to run
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Frontend CI/CD / build (push) Waiting to run
Frontend CI/CD / deploy (push) Blocked by required conditions
2025-03-10 20:48:06 +01:00
4b638e93be Update CHANGELOG.md (#2980)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-10 19:48:27 +01:00
e508fb101f Add warnings about externaly sourced scripts (#2975) 2025-03-10 19:42:21 +01:00
2c73cd7cf7 typo preventing script to install (#2977) 2025-03-10 18:50:06 +01:00
da94a2c6bc Update CHANGELOG.md (#2974) 2025-03-10 17:43:15 +01:00
1de7e428cd Rework SnipeIT: Tarball & Tempfile (#2963)
Some checks are pending
Auto Update .app-files / update-app-files (push) Waiting to run
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Frontend CI/CD / build (push) Waiting to run
Frontend CI/CD / deploy (push) Blocked by required conditions
* SnipeIT: Change Release to tarball

* Update snipeit.sh

* Update snipeit-install.sh

* Update snipeit.sh
2025-03-10 17:18:45 +01:00
60994b6851 Update .app files (#2970)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-03-10 13:18:19 +01:00
30e14a157f Update autolabeler.yml (#2971) 2025-03-10 13:16:45 +01:00
ff30e03e88 Update CHANGELOG.md (#2969)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-10 13:10:30 +01:00
88c952c1b4 Paperless-GPT (#2965)
* New Script: Paperless-GPT

* escape .env to copy on website
2025-03-10 13:09:12 +01:00
8441e65000 Update autolabeler.yml (#2968) 2025-03-10 13:07:02 +01:00
d4ac4809c0 Update CHANGELOG.md (#2967)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-10 13:06:55 +01:00
824e091a67 Hoarder: v0.23.0 dependency update (#2958)
* Add new deps for v0.23

* Temporary git clone of Hoarder for testing

* Temporary change of func paths for testing

* Revert "Temporary change of func paths for testing"

This reverts commit bf44096575.

* Revert "Temporary git clone of Hoarder for testing"

This reverts commit d7f05515bd.

* Small fix to hoarder update

* add check for release version
2025-03-10 12:48:23 +01:00
cc0ce1a756 Update CHANGELOG.md (#2966)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-10 11:43:30 +01:00
e5b39e6671 Update pihole.sh (#2964) 2025-03-10 11:02:04 +01:00
6ad1ea004f Open WebUI: reset code base before pulling update (#2948)
Some checks are pending
Auto Update .app-files / update-app-files (push) Waiting to run
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Frontend CI/CD / build (push) Waiting to run
Frontend CI/CD / deploy (push) Blocked by required conditions
* fix: hard reset codebase before pulling

* backup data folder just in case

* bad path fix

* another safety layer

* final touches

* i'm dumb
2025-03-09 15:20:16 +01:00
a640814ae0 Update CHANGELOG.md (#2954)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-09 13:25:08 +01:00
89962b01fa Improve Release-Action (awk function) (#2934) 2025-03-09 12:48:19 +01:00
b0a06bdc5f Fix Pi-hole interface port in documentation (#2953) 2025-03-09 12:20:23 +01:00
54fc60b60e Update CHANGELOG.md (#2952)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-09 09:16:09 +01:00
830634517b Fix copy db.sqlite when not exists (#2950) 2025-03-09 09:02:25 +01:00
f99fd28fe6 Update CHANGELOG.md (#2944)
Some checks are pending
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Frontend CI/CD / build (push) Waiting to run
Frontend CI/CD / deploy (push) Blocked by required conditions
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-08 16:20:25 +01:00
70f96e3bfd Fix: Update slug to lowercase in pf2etools.json (#2942) 2025-03-08 16:06:14 +01:00
a56bbba2bd Update actual Budget due Breaking certs
Some checks failed
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Frontend CI/CD / build (push) Waiting to run
Frontend CI/CD / deploy (push) Blocked by required conditions
Auto Update .app-files / update-app-files (push) Has been cancelled
Direct Push, contributor unreachable, Breaking Updates and Script
2025-03-07 22:56:27 +01:00
9f0945394f Quickfix: Backup cert for ssl
Quickfix due Breaking Update
2025-03-07 22:54:52 +01:00
c9dec5e3cd Update CHANGELOG.md (#2932) 2025-03-07 21:33:08 +01:00
6e8dd730ad Improve Nextcloud(pi) docu and Name to NextcloudPi (#2930) 2025-03-07 21:23:30 +01:00
0fdab8c0b4 Update CHANGELOG.md (#2931)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-07 21:20:03 +01:00
24af87ae08 Improve Trilium Description and Name to TriliumNext (#2929) 2025-03-07 21:14:56 +01:00
175150d928 Update CHANGELOG.md (#2928)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-07 21:04:39 +01:00
50963e0fa1 ActualBudget: Update Script with new Repo (#2907)
* ActualBudget: Update Script with new Repo

* syntax + formatting

* Update actualbudget.sh

* Update ct/actualbudget.sh

Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com>

---------

Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com>
2025-03-07 21:03:27 +01:00
e0f65118a4 Update CHANGELOG.md (#2927)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-07 21:00:59 +01:00
c48111496c Beszel: restarting service after update (#2915)
* restarting beszel.service after update

Added systemctl command to start beszel.service. This ensures the new version is applied immediately; otherwise, the old version remains in operation until the next restart

* Add status messages for stopping and starting

Added informational message when stopping the $APP service and a success message when the service starts successfully.

* chnage beszel.service

* Update msg infos

* Update beszel.sh

* Update beszel.sh

---------

Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-03-07 20:59:52 +01:00
2630c46c24 Update .app files (#2926)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-03-07 20:49:48 +01:00
4a41b24386 Update CHANGELOG.md (#2925)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-07 20:48:52 +01:00
f3d59531c1 JupyterNotebook: Fix APP Variable (#2924) 2025-03-07 20:47:52 +01:00
4a67ba0a88 Update CHANGELOG.md (#2923)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-07 20:36:35 +01:00
d19d535873 fix jupyternotebook slug (#2922) 2025-03-07 20:35:26 +01:00
2fd035582a npx update-browserlist need to go after pnpm install (#2914)
Some checks are pending
Auto Update .app-files / update-app-files (push) Waiting to run
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Frontend CI/CD / build (push) Waiting to run
Frontend CI/CD / deploy (push) Blocked by required conditions
2025-03-07 14:43:07 +01:00
c057e14daf Update CHANGELOG.md (#2909)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-07 09:47:59 +01:00
06771873f3 Update CHANGELOG.md (#2908) 2025-03-07 09:22:54 +01:00
ee008c7db4 Fix Prowlarr icon (#2906) 2025-03-07 09:19:06 +01:00
b4874d9705 Update Prometheus Alertmanager Icon (#2905) 2025-03-07 09:18:21 +01:00
06fc4209a7 Update Apache Tika icon to SVG (#2904) 2025-03-07 09:17:54 +01:00
9d46a6d133 Update wastebin.sh (#2896)
Some checks are pending
Auto Update .app-files / update-app-files (push) Waiting to run
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Frontend CI/CD / build (push) Waiting to run
Frontend CI/CD / deploy (push) Blocked by required conditions
2025-03-06 22:04:57 +01:00
bbbbd3cb5f Update CHANGELOG.md (#2893) 2025-03-06 21:14:04 +01:00
5db4a93697 Update .app files (#2892) 2025-03-06 21:13:44 +01:00
dc7529dc8e Update date in json (#2891) 2025-03-06 21:13:19 +01:00
301ea36264 InvenTree (#2890) 2025-03-06 21:12:30 +01:00
fc26badfdb Update CHANGELOG.md (#2887) 2025-03-06 17:19:15 +01:00
0ded79b785 Wastebin: Update Script for Version 3.0.0 (#2885)
* Wastebin: Update Script for Version 3.0.0

* Update wastebin-install.sh
2025-03-06 17:01:18 +01:00
83a79dcb6d Update wastebin-install.sh
Some checks are pending
Auto Update .app-files / update-app-files (push) Waiting to run
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
2025-03-06 15:33:55 +01:00
c98e92b034 Update CHANGELOG.md (#2877)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-06 10:48:05 +01:00
c8dd6b1af1 Homarr: Optional Reboot after update (#2876)
* Update homarr.sh

* Update homarr.sh
2025-03-06 10:26:05 +01:00
7ee0c9cc78 Fix Tag "community-scripts" for ArchLinux / OPNSense (#2875) 2025-03-06 08:55:00 +01:00
648e452f8b Update CHANGELOG.md (#2865)
Some checks are pending
Auto Update .app-files / update-app-files (push) Waiting to run
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
2025-03-05 20:07:17 +01:00
8e3177135f Kimai: Better Handling of Updates (backup var / env / yaml) (#2862)
* Kimai: Better Handling of Updates (backup var / env / yaml)

* formatting
2025-03-05 18:41:34 +01:00
7352cbc220 fix: updated the composer call (#2864) 2025-03-05 18:35:18 +01:00
3dd87d8989 Update CHANGELOG.md (#2859)
Some checks are pending
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
2025-03-05 12:59:58 +01:00
4a3192b704 Fix NextcloudPi-Installation (#2853) 2025-03-05 12:17:31 +01:00
7cbb8947ff Update CHANGELOG.md (#2847)
Some checks failed
Auto Update .app-files / update-app-files (push) Waiting to run
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-04 22:15:16 +01:00
482ad0444c Feature: Update Icons (selfhst repo) (#2834)
* chore(icons):  Replace Actual icon png with svg

Replaced the PNG icon of Actual with a SVG from selfhst/icons

* chore(icons):  Replace Proxmox VE icon PNG with SVG

Repalce all PNG icons for Proxmox VE with SVG from selfhst/icons

* chore(icons):  Replace AdGuard PNG icon with SVG

Replace the PNG icon of AdGuard Home with SVG from selfhst/icons

* chore(icons): update multiple icons to SVG

Replaced rasterized images with vectorized SVG for better efficiency, sharpness, performance and lower size

* chore(icons): update logo URLs for multiple services to use selfhst/icons repository

Updated logo URLs in JSON configuration files for the following services:
- WatchYourLAN
- Authelia
- Zoraxy
- Authentik
- Pi-hole
- Radicale
- Pocket ID
- Keycloak
- Grafana
- MongoDB
- MySQL
- phpIPAM
- Duplicati
- UrBackup
- Technitium DNS
- Seelf
- Checkmk
- Glance
- ZeroTier
- BunkerWeb

* chore(icons): update logo URLs for multiple services to use selfhst/icons repository

Updated logo URLs in JSON configuration files for the following services:
- Uptime Kuma
- Umami
- Apache Tomcat

* chore(icons): update application logos to use selfhst/icons repository

* chore(icons): update application logos to use selfhst/icons repository
2025-03-04 22:13:56 +01:00
a3da545905 Update CHANGELOG.md (#2846)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-04 21:45:19 +01:00
043baf299a fix: update function now backs up index and config (#2845) 2025-03-04 21:44:20 +01:00
cf2f7a9af5 Update CHANGELOG.md (#2844)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-04 17:55:26 +01:00
204219a477 Add source to install scripts and make license one line (#2842) 2025-03-04 17:54:20 +01:00
f7101c6aec Update CHANGELOG.md (#2841) 2025-03-04 17:44:41 +01:00
d8f104e765 Changedetection: Increase RAM & Disk-Space (#2838)
* Changedetection: Increase HDD & Disk-Space

* Update changedetection.json
2025-03-04 17:17:09 +01:00
52e8568bdb Update CHANGELOG.md (#2830)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-04 14:48:57 +01:00
ab94ff3cdc Update .app files (#2832)
Some checks are pending
Auto Update .app-files / update-app-files (push) Waiting to run
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Frontend CI/CD / build (push) Waiting to run
Frontend CI/CD / deploy (push) Blocked by required conditions
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-03-04 14:40:26 +01:00
4bee83a981 Update date in json (#2831)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-03-04 14:40:02 +01:00
4359f23e63 Add reveal.js script (#2806) 2025-03-04 14:29:55 +01:00
b7968becc3 [gh] better handling of create changelog (#2818) 2025-03-04 14:29:45 +01:00
cc9075a14b Update CHANGELOG.md (#2828) 2025-03-04 14:04:46 +01:00
bc06ad4226 Update .app files (#2829) 2025-03-04 14:04:16 +01:00
183c829917 Update date in json (#2827) 2025-03-04 14:04:03 +01:00
266eee3029 Apache Tomcat (#2797) 2025-03-04 14:02:48 +01:00
80631f5152 Update CHANGELOG.md (#2825)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-04 13:17:40 +01:00
3b965e7431 Website: Add Mikrotik to Network too, OPNSense & OpenWRT to OS (#2823)
* Website: OPNSense & OpenWRT to OS | Mikrotik to Network

* Mikrotik added to Network

* add OpenWRT to OS too
2025-03-04 13:03:31 +01:00
a6c99568aa Json file update (#2824)
* Update json Debian to debian

* Update pterodactyl-wings.json

Fix slug
2025-03-04 13:03:22 +01:00
c5639ca45b Update CHANGELOG.md (#2820)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-04 11:56:04 +01:00
46605615c0 Update .app files (#2821)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-03-04 11:54:01 +01:00
1950fba34b Update date in json (#2822)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-03-04 11:53:36 +01:00
02e694afc5 Update date in json (#2819)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-03-04 11:53:20 +01:00
18534b73be Pterodactyl Wings (#2800)
* New Script: Pterodactyl Wings

* Add sources and replace tag

* Update pterodactyl-wings.sh

* Update pterodactyl-wings-install.sh
2025-03-04 11:52:23 +01:00
430e2c27f2 Pterodactyl Panel (#2801)
* New Script: Pterodactyl Panel

* Add sources and replace tag

* Update pterodactyl-panel-install.sh

* Update pterodactyl-panel-install.sh

* Update pterodactyl-panel-install.sh
2025-03-04 11:52:03 +01:00
e623eb4197 Update CHANGELOG.md (#2814)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-04 11:46:08 +01:00
5f805ba414 Linkwarden: Optimze RUST Installation (#2817) 2025-03-04 11:45:01 +01:00
ba00f1d302 Nginx: Fix $STD for tar (#2813) 2025-03-04 11:42:07 +01:00
367dc0d78f Update linkwarden-install.sh 2025-03-04 11:08:49 +01:00
48a824de07 Update linkwarden-install.sh 2025-03-04 10:49:58 +01:00
6c5200d0a1 fix(prometheus-paperless-ngx-exporter): Fix wrong Interface Port (#2812)
#2808
2025-03-04 09:55:42 +01:00
712ff6f5cc Update CHANGELOG.md (#2804)
Some checks are pending
Auto Update .app-files / update-app-files (push) Waiting to run
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Frontend CI/CD / deploy (push) Blocked by required conditions
Frontend CI/CD / build (push) Waiting to run
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-03 21:56:28 +01:00
f80bc3c09a Zigbee2Mqtt Use fixed pnpm Version 10.4.1 (#2805) 2025-03-03 20:07:33 +01:00
7c5efad1ca Update zigbee2mqtt.json - make sure link is clickable (#2802) 2025-03-03 18:22:51 +01:00
d0edd224ca Update CHANGELOG.md (#2793)
Some checks are pending
Auto Update .app-files / update-app-files (push) Waiting to run
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Frontend CI/CD / build (push) Waiting to run
Frontend CI/CD / deploy (push) Blocked by required conditions
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-03 11:58:33 +01:00
6c5ef63375 Update .app files (#2794)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-03-03 11:45:43 +01:00
402420e159 Update date in json (#2792)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-03-03 11:45:27 +01:00
af302d62f3 Add Habitica script (#2779) 2025-03-03 11:44:16 +01:00
bedb908682 Update CHANGELOG.md (#2791)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-03 11:25:03 +01:00
9bf30de4cb Feature Template Path for Mountings (#2785) 2025-03-03 10:55:12 +01:00
9302e2e27d Update Buttons.tsx 2025-03-03 10:43:09 +01:00
6ab8815b3b Feature: MinIO use now static port 9001 (#2786)
* Feature: MinIO use now static port 9001

* Update minio.json
2025-03-03 09:58:06 +01:00
4baae014ab Update Buttons.tsx 2025-03-03 09:55:30 +01:00
d000c35ff5 Update Buttons.tsx 2025-03-03 09:54:01 +01:00
9570c9199a Feature: Website - show default OS (#2790)
* Feature: Website - show default OS

* add os fallback

* Update ScriptItem.tsx

* Update Buttons.tsx

* Update Buttons.tsx

* fix duplicate type check

* fix import deps

* add refreshccw
2025-03-03 09:50:21 +01:00
705ad208d7 Update CHANGELOG.md (#2788)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-03 08:23:10 +01:00
6e3367c4e7 Linkwarden: Fix & Update Monolith-Installation (#2787)
* Linkwarden: Fix & Update Monolith-Installation

* Update linkwarden.sh

* remove monolith note
2025-03-03 08:19:07 +01:00
71d8da316a Update CHANGELOG.md (#2776)
Some checks are pending
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
2025-03-02 12:26:52 +01:00
ba990514c4 Fix gpg Repo for nzbget (#2774)
* Update nzbget-install.sh

Added [arch=all] to the nzbget repo line to fix apt update errors.

* Update install/nzbget-install.sh

Co-authored-by: bvdberg01 <74251551+bvdberg01@users.noreply.github.com>

---------

Co-authored-by: bvdberg01 <74251551+bvdberg01@users.noreply.github.com>
2025-03-02 11:33:57 +01:00
0ae7f3b445 Update CHANGELOG.md (#2769)
Some checks failed
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Auto Update .app-files / update-app-files (push) Has been cancelled
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-01 20:59:32 +01:00
307b49fee6 ActualBudget: New Installation Script with new Repo (#2770) 2025-03-01 20:54:30 +01:00
6a940716f0 Breaking: Remove Update Function for Actual Budget until it fixed (#2768) 2025-03-01 20:39:06 +01:00
53b30e5f15 Update github-release.yml 2025-03-01 20:20:41 +01:00
134741f681 Update CHANGELOG.md (#2761)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-01 15:20:10 +01:00
9ef77cfd3f Update firefly-install.sh (#2759) 2025-03-01 13:53:49 +01:00
01e8f413ea fix Release wf 2025-03-01 13:28:57 +01:00
6aa2057202 fix 2025-03-01 13:23:44 +01:00
4583158cf5 Update CHANGELOG.md (#2753)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-01 13:21:02 +01:00
48b14f7347 fix release 2025-03-01 13:20:05 +01:00
623e1896aa Remove Note on Changelog (#2758) 2025-03-01 13:19:03 +01:00
e29652c8dd add: double restart to fix homarr migration (#2757) 2025-03-01 13:18:49 +01:00
6d0fe3e2ee fix date 2025-03-01 13:16:58 +01:00
f25f13e789 fix Release 2025-03-01 13:14:42 +01:00
4101618556 Update Release
Some checks are pending
Auto Update .app-files / update-app-files (push) Waiting to run
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
2025-03-01 13:10:23 +01:00
5f30084c6f Vikunja: Fixed update process (#2756) 2025-03-01 12:54:55 +01:00
4c266aeb42 Update github-release.yml 2025-03-01 10:36:34 +01:00
00794c41e6 Update github-release.yml 2025-03-01 10:34:55 +01:00
f1cdfecaaf Update github-release.yml 2025-03-01 10:32:33 +01:00
c738615bf2 Update github-release.yml 2025-03-01 10:30:57 +01:00
8af885a0f3 Update github-release.yml 2025-03-01 10:29:07 +01:00
62cdb5c0c2 add manuall execution of release wf 2025-03-01 10:27:57 +01:00
843c4f8c1e [gh]: Fix Release Creation if Changelog.md to long (#2752) 2025-03-01 10:26:12 +01:00
d82c9a24a7 Update CHANGELOG.md (#2745)
Some checks failed
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Build and Publish Docker Image / build (push) Has been cancelled
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-28 15:17:48 +01:00
b24860c97b Update all Action to new selfhosted Runner Cluster (#2739)
* Update Runner

* Update Workflows
2025-02-28 15:15:29 +01:00
e8e298581c Update CHANGELOG.md (#2743)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-28 15:00:02 +01:00
05769fdff1 Update Script Test Workflow (#2741)
* Update Workflow

* Update
2025-02-28 14:56:58 +01:00
5c5c628954 Update CHANGELOG.md (#2740)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-28 14:03:38 +01:00
10f4172349 Shell Format Workflow (#2400) 2025-02-28 13:59:54 +01:00
d781c75dfe Update website with accurate info (#2730)
Some checks failed
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Frontend CI/CD / build (push) Has been cancelled
Frontend CI/CD / deploy (push) Has been cancelled
2025-02-27 23:07:10 +01:00
0c0d1de317 Update CHANGELOG.md (#2729)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 22:28:41 +01:00
ab370762a4 Removed sed, app supports Node v22 now (#2728) 2025-02-27 22:28:11 +01:00
51bb4566e7 EOF not detected (#2726)
* Update web-check-install.sh

* Update web-check-install.sh

* Update web-check-install.sh

* Update web-check-install.sh

* Update web-check-install.sh

* Update web-check-install.sh
2025-02-27 22:27:46 +01:00
0e00057477 Update CHANGELOG.md (#2723)
Some checks failed
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Frontend CI/CD / build (push) Waiting to run
Frontend CI/CD / deploy (push) Blocked by required conditions
Auto Update .app-files / update-app-files (push) Has been cancelled
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 19:06:45 +01:00
ccd70a835f Update .app files (#2725)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-27 19:06:08 +01:00
5bfde87159 Update date in json (#2724)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-27 19:05:46 +01:00
949dcd0b23 web-check (#2662)
* add: web-check-install.sh

* add: web-check.sh

* Create web-check.json

* Update web-check-install.sh

* Update web-check-install.sh

* Update web-check-install.sh

* Update web-check.sh

* Update web-check.json

* Update web-check.sh

* Update web-check-install.sh

* Update web-check.json
2025-02-27 19:05:06 +01:00
4cad868175 feat: use HTML button element for copying to clipboard (#2720)
It's much more semantic to use the `<button />` HTML component rather
than trying to build the same functionality out of a `<div />` so that's
what is updated here.

This also updates some of the classes that were on the button as they're
no longer required and removes some commented out code that doesn't need
to be left around.

There was also a `<span />` with the contents "Copy" that I couldn't
work out when it was meant to be displayed, so I swapped that over to an
HTML tooltip on the `<button />`.
2025-02-27 19:04:03 +01:00
35f74cb3b6 Update CHANGELOG.md (#2719)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 17:18:26 +01:00
51a3361686 Update unbound-install.sh 2025-02-27 16:41:34 +01:00
0ac0cc263e Keycloak: Update installation script (#2714)
* Update installation script

* fixed tar command

* fix tar again

* fixes

* Update keycloak-install.sh
2025-02-27 16:40:07 +01:00
c730b5c009 Update CHANGELOG.md (#2718)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 16:34:53 +01:00
8c1cc56321 Revert "Update Runner (#2711)" (#2717)
This reverts commit 3bf4155fec.
2025-02-27 16:03:29 +01:00
c01abd559b Add basic pagination (#2715) 2025-02-27 15:56:56 +01:00
a5039cff58 Improve Workflow (#2712) 2025-02-27 14:53:23 +01:00
3bf4155fec Update Runner (#2711) 2025-02-27 14:53:10 +01:00
fb515bc057 Update CHANGELOG.md (#2708)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 13:16:57 +01:00
bd0c906c44 Zitadel-install.sh: Remove one version file and update to our standard (#2710) 2025-02-27 13:14:26 +01:00
0871b9c84c Change key to hex32 (#2709) 2025-02-27 13:13:56 +01:00
0d4b4a1837 Typo in update scripts (#2707)
* Fix typo

* Change no update function msg
2025-02-27 13:13:31 +01:00
474954afb6 Fix Node 22 compatibility (thanks t2lc) (#2705)
Some checks are pending
Auto Update .app-files / update-app-files (push) Waiting to run
Shellcheck / Shellcheck (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Frontend CI/CD / build (push) Waiting to run
Frontend CI/CD / deploy (push) Blocked by required conditions
2025-02-27 12:07:18 +01:00
5041708810 Update CHANGELOG.md (#2698)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 09:36:06 +01:00
c630378701 Update CHANGELOG.md (#2697)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 09:29:35 +01:00
be5e6cc870 Add HTTPS instructions to the website (#2695) 2025-02-27 09:28:11 +01:00
87afc99489 Update CHANGELOG.md (#2696)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 09:19:50 +01:00
ff49b8fea8 Update CHANGELOG.md (#2692)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 09:18:53 +01:00
bb0bc65e27 Update .app files (#2694)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-27 09:17:48 +01:00
6a60704d8e Update date in json (#2693)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-27 09:17:34 +01:00
cd40beb1eb New Script: ByteStash (#2680)
* Add ByteStash script

* Update bytestash-install.sh
2025-02-27 09:11:22 +01:00
e1df6b0a6f Update CHANGELOG.md (#2691)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 09:10:18 +01:00
b582b9f04d [gh] New Workflow to close Script Request Discussions on PR merge (#2688)
* New Workflow

* New Workflow
2025-02-27 09:08:25 +01:00
407801d9ff Update install.func (#2690) 2025-02-27 09:07:24 +01:00
6bcbc0ae91 Update pihole-install.sh 2025-02-27 08:41:07 +01:00
62bd7d5eef Update CHANGELOG.md (#2684)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-27 07:29:06 +01:00
663962e873 Update date in json (#2687)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-27 07:26:40 +01:00
3e7458dfaa Update .app files (#2686)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-27 07:26:08 +01:00
db5cc430c7 Update date in json (#2685)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-27 07:25:30 +01:00
5b91a776f1 New script: Pelican Panel (#2678) 2025-02-27 07:24:11 +01:00
0aa13fbea7 New Script: Pelican Wings (#2677)
* New Script: Pelican Wings

* Remove $STD for stopping/starting service
2025-02-27 07:23:00 +01:00
2d20686131 SFTPGo Remove unneeded RELEASE variable (#2683) 2025-02-27 07:12:22 +01:00
529 changed files with 5437 additions and 3276 deletions

View File

@ -40,7 +40,7 @@ Before contributing, please ensure that you have the following setup:
- [Shell Format](https://marketplace.visualstudio.com/items?itemName=foxundermoon.shell-format) - [Shell Format](https://marketplace.visualstudio.com/items?itemName=foxundermoon.shell-format)
### Important Notes ### Important Notes
- Use [AppName.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.sh) and [AppName-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.sh) as templates when creating new scripts. - Use [AppName.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/ct/AppName.sh) and [AppName-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/install/AppName-install.sh) as templates when creating new scripts. Final version of the script (the one you will push for review), must have all comments removed, except the ones in the file header.
--- ---
@ -66,6 +66,12 @@ Start with the [template script](https://github.com/community-scripts/ProxmoxVE/
## 🤝 Contribution Process ## 🤝 Contribution Process
All PR's related to new scripts should be made against our Dev repository first, where we can test the scripts before they are pushed and merged in the official repository.
**Our Dev repo is `http://www.github.com/community-scripts/ProxmoxVED`**
You will need to adjust paths mentioned further down this document to match the repo you're pushing the scripts to.
### 1. Fork the repository ### 1. Fork the repository
Fork to your GitHub account Fork to your GitHub account
@ -80,7 +86,24 @@ git switch -c your-feature-branch
``` ```
### 4. Change paths in build.func install.func and AppName.sh ### 4. Change paths in build.func install.func and AppName.sh
To be able to develop from your own branch you need to change `https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main` to `https://raw.githubusercontent.com/[USER]/[REPOSITORY]/refs/heads/[BRANCH]`. You need to make this change atleast in misc/build.func misc/install.func and in your ct/AppName.sh. This change is only for testing. Before opening a Pull Request you should change this line change all this back to point to `https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main`. To be able to develop from your own branch you need to change:\
`https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main`\
to\
`https://raw.githubusercontent.com/[USER]/[REPOSITORY]/refs/heads/[BRANCH]`\
in following files:
`misc/build.func`\
`misc/install.func`\
`ct/AppName.sh`
Example: `https://raw.githubusercontent.com/tremor021/PromoxVE/refs/heads/testbranch`
Also you need to change:\
`https://github.com/community-scripts/ProxmoxVE/raw/main`\
to\
`https://github.com/[USER]/[REPOSITORY]/raw/[BRANCH]`\
in `misc/install.func` in order for `update` shell command to work.\
These changes are only while writing and testing your scripts. Before opening a Pull Request, you should change all above mentioned paths in `misc/build.func`, `misc/install.func` and `ct/AppName.sh` to point to the original paths.
### 4. Commit changes (without build.func and install.func!) ### 4. Commit changes (without build.func and install.func!)
```bash ```bash
@ -93,7 +116,7 @@ git push origin your-feature-branch
``` ```
### 6. Create a Pull Request ### 6. Create a Pull Request
Open a Pull Request from your feature branch to the main repository branch. You must only include your **$AppName.sh**, **$AppName-install.sh** and **$AppName.json** files in the pull request. Open a Pull Request from your feature branch to the main branch on the Dev repository. You must only include your **$AppName.sh**, **$AppName-install.sh** and **$AppName.json** files in the pull request.
--- ---

View File

@ -75,6 +75,7 @@ Example:
> >
> - Add your username and source URL > - Add your username and source URL
> - For existing scripts, add "| Co-Author [YourUserName]" after the current author > - For existing scripts, add "| Co-Author [YourUserName]" after the current author
> - Source is a URL of github repo containting source files of the application you're installing (not URL of your homepage or a blog)
--- ---
@ -95,7 +96,7 @@ Example:
>| Variable | Description | Notes | >| Variable | Description | Notes |
>|----------|-------------|-------| >|----------|-------------|-------|
>| `APP` | Application name | Must match ct\AppName.sh | >| `APP` | Application name | Must match ct\AppName.sh |
>| `var_tags` | Proxmox display tags without Spaces, only ; | Limit the number | >| `var_tags` | Proxmox display tags without Spaces, only ; | Limit the number to 2 |
>| `var_cpu` | CPU cores | Number of cores | >| `var_cpu` | CPU cores | Number of cores |
>| `var_ram` | RAM | In MB | >| `var_ram` | RAM | In MB |
>| `var_disk` | Disk capacity | In GB | >| `var_disk` | Disk capacity | In GB |
@ -247,7 +248,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no automatic update function for ${APP}." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }
``` ```

View File

@ -67,6 +67,7 @@ Example:
> >
> - Add your username > - Add your username
> - When updating/reworking scripts, add "| Co-Author [YourUserName]" > - When updating/reworking scripts, add "| Co-Author [YourUserName]"
> - Source is a URL of github repo containting source files of the application you're installing (not URL of your homepage or a blog)
### 1.3 **Variables and function import** ### 1.3 **Variables and function import**
@ -177,6 +178,7 @@ echo "${RELEASE}" >"/opt/AppName_version.txt"
- Use standard functions like `msg_info`, `msg_ok` or `msg_error` to print status messages. - Use standard functions like `msg_info`, `msg_ok` or `msg_error` to print status messages.
- Each `msg_info` must be followed with a `msg_ok` before any other output is made. - Each `msg_info` must be followed with a `msg_ok` before any other output is made.
- Display meaningful progress messages at key stages. - Display meaningful progress messages at key stages.
- Taking user input with `read -p` must be outside of `msg_info`...`msg_ok` code block
Example: Example:
@ -184,6 +186,8 @@ Example:
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt-get install -y ... $STD apt-get install -y ...
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
read -p "Do you wish to enable HTTPS mode? (y/N): " httpschoice
``` ```
### 6.2 **Verbosity** ### 6.2 **Verbosity**

View File

@ -0,0 +1,68 @@
FROM mcr.microsoft.com/dotnet/runtime-deps:8.0-jammy as build
ARG TARGETOS
ARG TARGETARCH
ARG DOCKER_VERSION=27.5.1
ARG BUILDX_VERSION=0.20.1
ARG RUNNER_ARCH="x64"
RUN apt update -y && apt install sudo curl unzip -y
WORKDIR /actions-runner
RUN RUNNER_VERSION=$(curl -s https://api.github.com/repos/actions/runner/releases/latest | grep "tag_name" | head -n 1 | awk '{print substr($2, 3, length($2)-4)}') \
&& curl -f -L -o runner.tar.gz https://github.com/actions/runner/releases/download/v${RUNNER_VERSION}/actions-runner-linux-${RUNNER_ARCH}-${RUNNER_VERSION}.tar.gz \
&& tar xzf ./runner.tar.gz \
&& rm runner.tar.gz
RUN RUNNER_CONTAINER_HOOKS_VERSION=$(curl -s https://api.github.com/repos/actions/runner-container-hooks/releases/latest | grep "tag_name" | head -n 1 | awk '{print substr($2, 3, length($2)-4)}') \
&& curl -f -L -o runner-container-hooks.zip https://github.com/actions/runner-container-hooks/releases/download/v${RUNNER_CONTAINER_HOOKS_VERSION}/actions-runner-hooks-k8s-${RUNNER_CONTAINER_HOOKS_VERSION}.zip \
&& unzip ./runner-container-hooks.zip -d ./k8s \
&& rm runner-container-hooks.zip
RUN export RUNNER_ARCH=${TARGETARCH} \
&& if [ "$RUNNER_ARCH" = "amd64" ]; then export DOCKER_ARCH=x86_64 ; fi \
&& if [ "$RUNNER_ARCH" = "arm64" ]; then export DOCKER_ARCH=aarch64 ; fi \
&& curl -fLo docker.tgz https://download.docker.com/${TARGETOS}/static/stable/${DOCKER_ARCH}/docker-${DOCKER_VERSION}.tgz \
&& tar zxvf docker.tgz \
&& rm -rf docker.tgz \
&& mkdir -p /usr/local/lib/docker/cli-plugins \
&& curl -fLo /usr/local/lib/docker/cli-plugins/docker-buildx \
"https://github.com/docker/buildx/releases/download/v${BUILDX_VERSION}/buildx-v${BUILDX_VERSION}.linux-${TARGETARCH}" \
&& chmod +x /usr/local/lib/docker/cli-plugins/docker-buildx
FROM mcr.microsoft.com/dotnet/runtime-deps:8.0-jammy
ENV DEBIAN_FRONTEND=noninteractive
ENV RUNNER_MANUALLY_TRAP_SIG=1
ENV ACTIONS_RUNNER_PRINT_LOG_TO_STDOUT=1
ENV ImageOS=ubuntu22
RUN apt update -y \
&& apt install -y --no-install-recommends sudo lsb-release gpg-agent software-properties-common curl jq unzip \
&& rm -rf /var/lib/apt/lists/*
RUN add-apt-repository ppa:git-core/ppa \
&& apt update -y \
&& apt install -y git \
&& rm -rf /var/lib/apt/lists/*
RUN adduser --disabled-password --gecos "" --uid 1001 runner \
&& groupadd docker --gid 123 \
&& usermod -aG sudo runner \
&& usermod -aG docker runner \
&& echo "%sudo ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers \
&& echo "Defaults env_keep += \"DEBIAN_FRONTEND\"" >> /etc/sudoers
# Install own dependencies in final image
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
&& apt-get install -y nodejs \
&& apt-get install -y gh jq git
WORKDIR /home/runner
COPY --chown=runner:docker --from=build /actions-runner .
COPY --from=build /usr/local/lib/docker/cli-plugins/docker-buildx /usr/local/lib/docker/cli-plugins/docker-buildx
RUN install -o root -g root -m 755 docker/* /usr/bin/ && rm -rf docker
USER runner

View File

@ -10,7 +10,7 @@ on:
jobs: jobs:
update-app-files: update-app-files:
runs-on: ubuntu-latest runs-on: runner-cluster-htl-set
permissions: permissions:
contents: write contents: write

View File

@ -7,7 +7,7 @@ on:
jobs: jobs:
autolabeler: autolabeler:
runs-on: ubuntu-latest runs-on: runner-cluster-htl-set
permissions: permissions:
pull-requests: write pull-requests: write
env: env:
@ -16,7 +16,7 @@ jobs:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Install minimatch - name: Install dependencies
run: npm install minimatch run: npm install minimatch
- name: Label PR based on file changes and PR template - name: Label PR based on file changes and PR template
@ -61,6 +61,8 @@ jobs:
labelsToAdd.add(label); labelsToAdd.add(label);
} }
} }
//if two labels or more are added, return
if (labelsToAdd.size < 2) {
const templateLabelMappings = { const templateLabelMappings = {
"🐞 **Bug fix**": "bugfix", "🐞 **Bug fix**": "bugfix",
"✨ **New feature**": "feature", "✨ **New feature**": "feature",
@ -76,6 +78,9 @@ jobs:
labelsToAdd.add(label); labelsToAdd.add(label);
} }
} }
}
console.log(`Labels to add: ${Array.from(labelsToAdd).join(", ")}`); console.log(`Labels to add: ${Array.from(labelsToAdd).join(", ")}`);

View File

@ -7,7 +7,7 @@ on:
jobs: jobs:
update-changelog-pull-request: update-changelog-pull-request:
runs-on: ubuntu-latest runs-on: runner-cluster-htl-set
env: env:
CONFIG_PATH: .github/changelog-pr-config.json CONFIG_PATH: .github/changelog-pr-config.json
BRANCH_NAME: github-action-update-changelog BRANCH_NAME: github-action-update-changelog

122
.github/workflows/close-discussion.yml vendored Normal file
View File

@ -0,0 +1,122 @@
name: Close Discussion on PR Merge
on:
pull_request:
types: [closed]
jobs:
close-discussion:
runs-on: runner-cluster-htl-set
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Set Up Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Install Dependencies
run: npm install zx @octokit/graphql
- name: Close Discussion
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_BODY: ${{ github.event.pull_request.body }}
PR_NUMBER: ${{ github.event.pull_request.number }}
REPO_OWNER: ${{ github.repository_owner }}
REPO_NAME: ${{ github.event.repository.name }}
run: |
npx zx << 'EOF'
import { graphql } from "@octokit/graphql";
(async function() {
try {
const token = process.env.GITHUB_TOKEN;
const prBody = process.env.PR_BODY;
const prNumber = process.env.PR_NUMBER;
const owner = process.env.REPO_OWNER;
const repo = process.env.REPO_NAME;
if (!token || !prBody || !prNumber || !owner || !repo) {
console.log("Missing required environment variables.");
process.exit(1);
}
const match = prBody.match(/#(\d+)/);
if (!match) {
console.log("No discussion ID found in PR body.");
return;
}
const discussionNumber = match[1];
console.log(`Extracted Discussion Number: ${discussionNumber}`);
console.log(`PR Number: ${prNumber}`);
console.log(`Repository: ${owner}/${repo}`);
const graphqlWithAuth = graphql.defaults({
headers: { authorization: `Bearer ${token}` },
});
const discussionQuery = `
query($owner: String!, $repo: String!, $number: Int!) {
repository(owner: $owner, name: $repo) {
discussion(number: $number) {
id
}
}
}
`;
const discussionResponse = await graphqlWithAuth(discussionQuery, {
owner,
repo,
number: parseInt(discussionNumber, 10),
});
const discussionQLId = discussionResponse.repository.discussion.id;
if (!discussionQLId) {
console.log("Failed to fetch discussion GraphQL ID.");
return;
}
console.log(`GraphQL Discussion ID: ${discussionQLId}`);
const commentMutation = `
mutation($discussionId: ID!, $body: String!) {
addDiscussionComment(input: { discussionId: $discussionId, body: $body }) {
comment { id body }
}
}
`;
const commentResponse = await graphqlWithAuth(commentMutation, {
discussionId: discussionQLId,
body: `Merged with PR #${prNumber}`,
});
const commentId = commentResponse.addDiscussionComment.comment.id;
if (!commentId) {
console.log("Failed to post the comment.");
return;
}
console.log(`Comment Posted Successfully! Comment ID: ${commentId}`);
const markAnswerMutation = `
mutation($id: ID!) {
markDiscussionCommentAsAnswer(input: { id: $id }) {
discussion { id title }
}
}
`;
await graphqlWithAuth(markAnswerMutation, { id: commentId });
console.log("Comment marked as answer successfully!");
} catch (error) {
console.error("Error:", error);
return;
}
})();
EOF

View File

@ -0,0 +1,37 @@
name: Build and Publish Docker Image
on:
push:
branches:
- main
paths:
- '.github/runner/docker/**'
schedule:
- cron: '0 0 * * *'
jobs:
build:
runs-on: ubuntu-latest #To ensure it always builds we use the github runner with all the right tooling
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Log in to GHCR
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build Docker image
run: |
repo_name=${{ github.repository }} # Get repository name
repo_name_lower=$(echo $repo_name | tr '[:upper:]' '[:lower:]') # Convert to lowercase
docker build -t ghcr.io/$repo_name_lower/gh-runner-self:latest -f .github/runner/docker/gh-runner-self.dockerfile .
- name: Push Docker image to GHCR
run: |
repo_name=${{ github.repository }} # Get repository name
repo_name_lower=$(echo $repo_name | tr '[:upper:]' '[:lower:]') # Convert to lowercase
docker push ghcr.io/$repo_name_lower/gh-runner-self:latest

View File

@ -9,7 +9,7 @@ on:
jobs: jobs:
delete_branch: delete_branch:
runs-on: ubuntu-latest runs-on: runner-cluster-htl-set
steps: steps:
- name: Checkout the code - name: Checkout the code
uses: actions/checkout@v3 uses: actions/checkout@v3

View File

@ -27,7 +27,7 @@ concurrency:
jobs: jobs:
build: build:
runs-on: ubuntu-latest runs-on: runner-cluster-htl-set
defaults: defaults:
run: run:
working-directory: frontend # Set default working directory for all run steps working-directory: frontend # Set default working directory for all run steps

View File

@ -1,25 +1,46 @@
name: Create new release name: Create Daily Release
on: on:
schedule: schedule:
# Runs "At 00:01 every night" (UTC) - cron: '1 0 * * *' # Runs daily at 00:01 UTC
- cron: '1 0 * * *' workflow_dispatch:
jobs: jobs:
create-new-release: create-daily-release:
runs-on: ubuntu-latest runs-on: runner-cluster-htl-set
permissions: permissions:
contents: write contents: write
steps: steps:
- name: Checkout code - name: Checkout repository
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Parse CHANGELOG.md for yesterday's entries and create a new release
- name: Clean CHANGELOG (remove HTML header)
run: sed -n '/^## /,$p' CHANGELOG.md > changelog_cleaned.md
- name: Extract relevant changelog section
run: |
YESTERDAY=$(date -u --date="yesterday" +%Y-%m-%d)
echo "Checking for changes on: $YESTERDAY"
# Extract the section from "## $YESTERDAY" until the next "## YYYY-MM-DD"
sed -n "/^## $YESTERDAY/,/^## [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}/p" changelog_cleaned.md | head -n -1 > changelog_tmp_full.md
# Truncate the extracted section to 5000 characters
head -c 5000 changelog_tmp_full.md > changelog_tmp.md
echo "=== Extracted Changelog ==="
cat changelog_tmp.md
echo "==========================="
# Abort if no content was found
if [ ! -s changelog_tmp.md ]; then
echo "No changes found for $YESTERDAY, skipping release."
exit 0
fi
- name: Create GitHub release
env: env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: | run: |
YESTERDAY=$(date -u --date="yesterday" +%Y-%m-%d) YESTERDAY=$(date -u --date="yesterday" +%Y-%m-%d)
YESTERDAY_CHANGELOG_NOTES=$(awk '/^## '"$YESTERDAY"'/ {f=1; next} f && /^## [0-9]{4}-[0-9]{2}-[0-9]{2}/ {f=0} f && !/^## / {print}' CHANGELOG.md) gh release create "$YESTERDAY" -t "$YESTERDAY" -F changelog_tmp.md
if [ -n "$YESTERDAY_CHANGELOG_NOTES" ]; then
gh release create "$YESTERDAY" -t "$YESTERDAY" -n "$YESTERDAY_CHANGELOG_NOTES" --latest
fi

View File

@ -67,13 +67,21 @@ jobs:
for FILE in ${{ env.ALL_FILES }}; do for FILE in ${{ env.ALL_FILES }}; do
STRIPPED_NAME=$(basename "$FILE" | sed 's/-install//' | sed 's/\.sh$//') STRIPPED_NAME=$(basename "$FILE" | sed 's/-install//' | sed 's/\.sh$//')
echo "Running Test for: $STRIPPED_NAME" echo "Running Test for: $STRIPPED_NAME"
if grep -E -q 'read\s+-r\s+-p\s+".*"\s+\w+' "$FILE"; then
echo "The script contains an interactive prompt. Skipping execution."
continue
fi
if [[ $FILE =~ ^install/.*-install\.sh$ ]]; then if [[ $FILE =~ ^install/.*-install\.sh$ ]]; then
CT_SCRIPT="ct/$STRIPPED_NAME.sh" CT_SCRIPT="ct/$STRIPPED_NAME.sh"
echo $CT_SCRIPT
if [[ ! -f $CT_SCRIPT ]]; then if [[ ! -f $CT_SCRIPT ]]; then
echo "No CT script found for $STRIPPED_NAME" echo "No CT script found for $STRIPPED_NAME"
ERROR_MSG="No CT script found for $FILE" ERROR_MSG="No CT script found for $FILE"
RUN=false echo "$ERROR_MSG" > result_$STRIPPED_NAME.log
continue
fi
if grep -E -q 'read\s+-r\s+-p\s+".*"\s+\w+' "install/$STRIPPED_NAME-install.sh"; then
echo "The script contains an interactive prompt. Skipping execution."
continue
fi fi
echo "Found CT script for $STRIPPED_NAME" echo "Found CT script for $STRIPPED_NAME"
chmod +x "$CT_SCRIPT" chmod +x "$CT_SCRIPT"
@ -83,19 +91,36 @@ jobs:
if [[ ! -f $INSTALL_SCRIPT ]]; then if [[ ! -f $INSTALL_SCRIPT ]]; then
echo "No install script found for $STRIPPED_NAME" echo "No install script found for $STRIPPED_NAME"
ERROR_MSG="No install script found for $FILE" ERROR_MSG="No install script found for $FILE"
RUN=false echo "$ERROR_MSG" > result_$STRIPPED_NAME.log
continue
fi fi
echo "Found install script for $STRIPPED_NAME" echo "Found install script for $STRIPPED_NAME"
chmod +x "$INSTALL_SCRIPT" chmod +x "$INSTALL_SCRIPT"
RUNNING_FILE=$FILE RUNNING_FILE=$FILE
if grep -E -q 'read\s+-r\s+-p\s+".*"\s+\w+' "ct/$STRIPPED_NAME.sh"; then
echo "The script contains an interactive prompt. Skipping execution."
continue
fi fi
if [[ $RUN != "false" ]]; then fi
git remote add community-scripts https://github.com/community-scripts/ProxmoxVE.git
git fetch community-scripts
rm -f .github/workflows/scripts/app-test/pr-build.func || true
rm -f .github/workflows/scripts/app-test/pr-install.func || true
rm -f .github/workflows/scripts/app-test/pr-alpine-install.func || true
rm -f .github/workflows/scripts/app-test/pr-create-lxc.sh || true
git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-build.func
git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-install.func
git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-alpine-install.func
git checkout community-scripts/main -- .github/workflows/scripts/app-test/pr-create-lxc.sh
chmod +x $RUNNING_FILE chmod +x $RUNNING_FILE
sed -i 's|source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)|source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/.github/workflows/scripts/app-test/pr-build.func)|g' "$RUNNING_FILE" chmod +x .github/workflows/scripts/app-test/pr-create-lxc.sh
chmod +x .github/workflows/scripts/app-test/pr-install.func
chmod +x .github/workflows/scripts/app-test/pr-alpine-install.func
chmod +x .github/workflows/scripts/app-test/pr-build.func
sed -i 's|source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)|source .github/workflows/scripts/app-test/pr-build.func|g' "$RUNNING_FILE"
echo "Executing $RUNNING_FILE" echo "Executing $RUNNING_FILE"
ERROR_MSG=$(./$RUNNING_FILE 2>&1 > /dev/null) ERROR_MSG=$(./$RUNNING_FILE 2>&1 > /dev/null)
echo "Finished running $FILE" echo "Finished running $FILE"
fi
if [ -n "$ERROR_MSG" ]; then if [ -n "$ERROR_MSG" ]; then
echo "ERROR in $STRIPPED_NAME: $ERROR_MSG" echo "ERROR in $STRIPPED_NAME: $ERROR_MSG"
echo "$ERROR_MSG" > result_$STRIPPED_NAME.log echo "$ERROR_MSG" > result_$STRIPPED_NAME.log
@ -115,11 +140,14 @@ jobs:
fi fi
done done
- name: Post error comments - name: Post error comments
run: | run: |
ERROR="false" ERROR="false"
SEARCH_LINE=".github/workflows/scripts/app-test/pr-build.func: line 255" SEARCH_LINE=".github/workflows/scripts/app-test/pr-build.func: line 255:"
# Get all existing comments on the PR
EXISTING_COMMENTS=$(gh pr view ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --json comments --jq '.comments[].body')
for FILE in ${{ env.ALL_FILES }}; do for FILE in ${{ env.ALL_FILES }}; do
STRIPPED_NAME=$(basename "$FILE" | sed 's/-install//' | sed 's/\.sh$//') STRIPPED_NAME=$(basename "$FILE" | sed 's/-install//' | sed 's/\.sh$//')
if [[ ! -f result_$STRIPPED_NAME.log ]]; then if [[ ! -f result_$STRIPPED_NAME.log ]]; then
@ -129,20 +157,21 @@ jobs:
if [ -n "$ERROR_MSG" ]; then if [ -n "$ERROR_MSG" ]; then
CLEANED_ERROR_MSG=$(echo "$ERROR_MSG" | sed "s|$SEARCH_LINE.*||") CLEANED_ERROR_MSG=$(echo "$ERROR_MSG" | sed "s|$SEARCH_LINE.*||")
COMMENT_BODY=":warning: The script _**$FILE**_ failed with the following message: <br> <div><strong>${CLEANED_ERROR_MSG}</strong></div>"
# Check if the comment already exists
if echo "$EXISTING_COMMENTS" | grep -qF "$COMMENT_BODY"; then
echo "Skipping duplicate comment for $FILE"
else
echo "Posting error message for $FILE" echo "Posting error message for $FILE"
echo ${CLEANED_ERROR_MSG}
gh pr comment ${{ github.event.pull_request.number }} \ gh pr comment ${{ github.event.pull_request.number }} \
--repo ${{ github.repository }} \ --repo ${{ github.repository }} \
--body ":warning: The script _**$FILE**_ failed with the following message: <br> <div><strong>${CLEANED_ERROR_MSG}</strong></div>" --body "$COMMENT_BODY"
ERROR="true" ERROR="true"
fi fi
fi
done done
echo "ERROR=$ERROR" >> $GITHUB_ENV echo "ERROR=$ERROR" >> $GITHUB_ENV
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Fail if error
if: ${{ env.ERROR == 'true' }}
run: exit 1

243
.github/workflows/script_format.yml vendored Normal file
View File

@ -0,0 +1,243 @@
name: Script Format Check
permissions:
pull-requests: write
on:
pull_request_target:
branches:
- main
paths:
- 'install/*.sh'
- 'ct/*.sh'
jobs:
run-install-script:
runs-on: pvenode
steps:
- name: Checkout PR branch (supports forks)
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
fetch-depth: 0
- name: Add Git safe directory
run: |
git config --global --add safe.directory /__w/ProxmoxVE/ProxmoxVE
- name: Set up GH_TOKEN
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
echo "GH_TOKEN=${GH_TOKEN}" >> $GITHUB_ENV
- name: Get Changed Files
run: |
CHANGED_FILES=$(gh pr diff ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --name-only)
CHANGED_FILES=$(echo "$CHANGED_FILES" | tr '\n' ' ')
echo "Changed files: $CHANGED_FILES"
echo "SCRIPT=$CHANGED_FILES" >> $GITHUB_ENV
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Check scripts
id: run-install
continue-on-error: true
run: |
for FILE in ${{ env.SCRIPT }}; do
STRIPPED_NAME=$(basename "$FILE" | sed 's/-install//' | sed 's/\.sh$//')
echo "Running Test for: $STRIPPED_NAME"
FILE_STRIPPED="${FILE##*/}"
LOG_FILE="result_$FILE_STRIPPED.log"
if [[ $FILE =~ ^ct/.*\.sh$ ]]; then
FIRST_LINE=$(sed -n '1p' "$FILE")
[[ "$FIRST_LINE" != "#!/usr/bin/env bash" ]] && echo "Line 1 was $FIRST_LINE | Should be: #!/usr/bin/env bash" >> "$LOG_FILE"
SECOND_LINE=$(sed -n '2p' "$FILE")
[[ "$SECOND_LINE" != "source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)" ]] &&
echo "Line 2 was $SECOND_LINE | Should be: source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)" >> "$LOG_FILE"
THIRD_LINE=$(sed -n '3p' "$FILE")
if ! [[ "$THIRD_LINE" =~ ^#\ Copyright\ \(c\)\ [0-9]{4}-[0-9]{4}\ community-scripts\ ORG$ || "$THIRD_LINE" =~ ^Copyright\ \(c\)\ [0-9]{4}-[0-9]{4}\ tteck$ ]]; then
echo "Line 3 was $THIRD_LINE | Should be: # Copyright (c) 2021-2025 community-scripts ORG" >> "$LOG_FILE"
fi
EXPECTED_AUTHOR="# Author:"
EXPECTED_LICENSE="# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE"
EXPECTED_SOURCE="# Source:"
EXPECTED_EMPTY=""
for i in {4..7}; do
LINE=$(sed -n "${i}p" "$FILE")
case $i in
4)
[[ $LINE == $EXPECTED_AUTHOR* ]] || printf "Line %d was: '%s' | Should start with: '%s'\n" "$i" "$LINE" "$EXPECTED_AUTHOR" >> $LOG_FILE
;;
5)
[[ "$LINE" == "$EXPECTED_LICENSE" ]] || printf "Line %d was: '%s' | Should be: '%s'\n" "$i" "$LINE" "$EXPECTED_LICENSE" >> $LOG_FILE
;;
6)
[[ $LINE == $EXPECTED_SOURCE* ]] || printf "Line %d was: '%s' | Should start with: '%s'\n" "$i" "$LINE" "$EXPECTED_SOURCE" >> $LOG_FILE
;;
7)
[[ -z $LINE ]] || printf "Line %d was: '%s' | Should be empty\n" "$i" "$LINE" >> $LOG_FILE
;;
esac
done
EXPECTED_PREFIXES=(
"APP="
"var_tags="
"var_cpu=" # Must be a number
"var_ram=" # Must be a number
"var_disk=" # Must be a number
"var_os=" # Must be debian, alpine, or ubuntu
"var_version="
"var_unprivileged=" # Must be 0 or 1
)
for i in {8..15}; do
LINE=$(sed -n "${i}p" "$FILE")
INDEX=$((i - 8))
case $INDEX in
2|3|4) # var_cpu, var_ram, var_disk (must be numbers)
if [[ "$LINE" =~ ^${EXPECTED_PREFIXES[$INDEX]}([0-9]+)$ ]]; then
continue # Valid
else
echo "Line $i was '$LINE' | Should be: '${EXPECTED_PREFIXES[$INDEX]}<NUMBER>'" >> "$LOG_FILE"
fi
;;
5) # var_os (must be debian, alpine, or ubuntu)
if [[ "$LINE" =~ ^var_os=(debian|alpine|ubuntu)$ ]]; then
continue # Valid
else
echo "Line $i was '$LINE' | Should be: 'var_os=[debian|alpine|ubuntu]'" >> "$LOG_FILE"
fi
;;
7) # var_unprivileged (must be 0 or 1)
if [[ "$LINE" =~ ^var_unprivileged=[01]$ ]]; then
continue # Valid
else
echo "Line $i was '$LINE' | Should be: 'var_unprivileged=[0|1]'" >> "$LOG_FILE"
fi
;;
*) # Other lines (must start with expected prefix)
if [[ "$LINE" == ${EXPECTED_PREFIXES[$INDEX]}* ]]; then
continue # Valid
else
echo "Line $i was '$LINE' | Should start with '${EXPECTED_PREFIXES[$INDEX]}'" >> "$LOG_FILE"
fi
;;
esac
done
for i in {16..20}; do
LINE=$(sed -n "${i}p" "$FILE")
EXPECTED=(
"header_info \"$APP\""
"variables"
"color"
"catch_errors"
"function update_script() {"
)
[[ "$LINE" != "${EXPECTED[$((i-16))]}" ]] && echo "Line $i was $LINE | Should be: ${EXPECTED[$((i-16))]}" >> "$LOG_FILE"
done
cat "$LOG_FILE"
elif [[ $FILE =~ ^install/.*-install\.sh$ ]]; then
FIRST_LINE=$(sed -n '1p' "$FILE")
[[ "$FIRST_LINE" != "#!/usr/bin/env bash" ]] && echo "Line 1 was $FIRST_LINE | Should be: #!/usr/bin/env bash" >> "$LOG_FILE"
SECOND_LINE=$(sed -n '2p' "$FILE")
[[ -n "$SECOND_LINE" ]] && echo "Line 2 should be empty" >> "$LOG_FILE"
THIRD_LINE=$(sed -n '3p' "$FILE")
if ! [[ "$THIRD_LINE" =~ ^#\ Copyright\ \(c\)\ [0-9]{4}-[0-9]{4}\ community-scripts\ ORG$ || "$THIRD_LINE" =~ ^Copyright\ \(c\)\ [0-9]{4}-[0-9]{4}\ tteck$ ]]; then
echo "Line 3 was $THIRD_LINE | Should be: # Copyright (c) 2021-2025 community-scripts ORG" >> "$LOG_FILE"
fi
EXPECTED_AUTHOR="# Author:"
EXPECTED_LICENSE="# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE"
EXPECTED_SOURCE="# Source:"
EXPECTED_EMPTY=""
for i in {4..7}; do
LINE=$(sed -n "${i}p" "$FILE")
case $i in
4)
[[ $LINE == $EXPECTED_AUTHOR* ]] || printf "Line %d was: '%s' | Should start with: '%s'\n" "$i" "$LINE" "$EXPECTED_AUTHOR" >> $LOG_FILE
;;
5)
[[ "$LINE" == "$EXPECTED_LICENSE" ]] || printf "Line %d was: '%s' | Should be: '%s'\n" "$i" "$LINE" "$EXPECTED_LICENSE" >> $LOG_FILE
;;
6)
[[ $LINE == $EXPECTED_SOURCE* ]] || printf "Line %d was: '%s' | Should start with: '%s'\n" "$i" "$LINE" "$EXPECTED_SOURCE" >> $LOG_FILE
;;
7)
[[ -z $LINE ]] || printf "Line %d was: '%s' | Should be empty\n" "$i" "$LINE" >> $LOG_FILE
;;
esac
done
[[ "$(sed -n '8p' "$FILE")" != 'source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"' ]] && echo 'Line 8 should be: source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"' >> "$LOG_FILE"
for i in {9..14}; do
LINE=$(sed -n "${i}p" "$FILE")
EXPECTED=(
"color"
"verb_ip6"
"catch_errors"
"setting_up_container"
"network_check"
"update_os"
)
[[ "$LINE" != "${EXPECTED[$((i-9))]}" ]] && echo "Line $i was $LINE | Should be: ${EXPECTED[$((i-9))]}" >> "$LOG_FILE"
done
[[ -n "$(sed -n '15p' "$FILE")" ]] && echo "Line 15 should be empty" >> "$LOG_FILE"
[[ "$(sed -n '16p' "$FILE")" != 'msg_info "Installing Dependencies"' ]] && echo 'Line 16 should be: msg_info "Installing Dependencies"' >> "$LOG_FILE"
LAST_3_LINES=$(tail -n 3 "$FILE")
[[ "$LAST_3_LINES" != *"$STD apt-get -y autoremove"* ]] && echo 'Third to last line should be: $STD apt-get -y autoremove' >> "$LOG_FILE"
[[ "$LAST_3_LINES" != *"$STD apt-get -y autoclean"* ]] && echo 'Second to last line should be: $STD apt-get -y clean' >> "$LOG_FILE"
[[ "$LAST_3_LINES" != *'msg_ok "Cleaned"'* ]] && echo 'Last line should be: msg_ok "Cleaned"' >> "$LOG_FILE"
cat "$LOG_FILE"
fi
done
- name: Post error comments
run: |
ERROR="false"
for FILE in ${{ env.SCRIPT }}; do
FILE_STRIPPED="${FILE##*/}"
LOG_FILE="result_$FILE_STRIPPED.log"
echo $LOG_FILE
if [[ ! -f $LOG_FILE ]]; then
continue
fi
ERROR_MSG=$(cat $LOG_FILE)
if [ -n "$ERROR_MSG" ]; then
echo "Posting error message for $FILE"
echo ${ERROR_MSG}
gh pr comment ${{ github.event.pull_request.number }} \
--repo ${{ github.repository }} \
--body ":warning: The script _**$FILE**_ has the following formatting errors: <br> <div><strong>${ERROR_MSG}</strong></div>"
ERROR="true"
fi
done
echo "ERROR=$ERROR" >> $GITHUB_ENV
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Fail if error
if: ${{ env.ERROR == 'true' }}
run: exit 1

View File

@ -10,7 +10,7 @@ on:
jobs: jobs:
update-app-files: update-app-files:
runs-on: ubuntu-latest runs-on: runner-cluster-htl-set
permissions: permissions:
contents: write contents: write

View File

@ -10,7 +10,7 @@ on:
jobs: jobs:
check-files: check-files:
name: Check changed files name: Check changed files
runs-on: ubuntu-latest runs-on: runner-cluster-htl-set
permissions: permissions:
pull-requests: write pull-requests: write

View File

@ -13,9 +13,311 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
> [!NOTE] > [!NOTE]
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment. All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
> [!IMPORTANT]
Do not break established syntax in this file, as it is automatically updated by a Github Workflow
## 2025-03-12
### 🆕 New Scripts
- Fluid Calendar [@vhsdream](https://github.com/vhsdream) ([#2869](https://github.com/community-scripts/ProxmoxVE/pull/2869))
### 🚀 Updated Scripts
- #### ✨ New Features
- Feature: Filebrowser: support now alpine [@MickLesk](https://github.com/MickLesk) ([#2997](https://github.com/community-scripts/ProxmoxVE/pull/2997))
## 2025-03-11
### 🆕 New Scripts
- Plant-it [@MickLesk](https://github.com/MickLesk) ([#3000](https://github.com/community-scripts/ProxmoxVE/pull/3000))
- Seafile [@dave-yap](https://github.com/dave-yap) ([#2987](https://github.com/community-scripts/ProxmoxVE/pull/2987))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Headscale: Re-enable Service after Update [@Cerothen](https://github.com/Cerothen) ([#3012](https://github.com/community-scripts/ProxmoxVE/pull/3012))
- SnipeIT: Harmonize composer install to Project-Dockerfile [@MickLesk](https://github.com/MickLesk) ([#3009](https://github.com/community-scripts/ProxmoxVE/pull/3009))
- Teddycloud: fix update function [@tremor021](https://github.com/tremor021) ([#2996](https://github.com/community-scripts/ProxmoxVE/pull/2996))
### 🧰 Maintenance
- #### 📂 Github
- Cleanup Old Project Files (figlet, app-header, images) [@MickLesk](https://github.com/MickLesk) ([#3004](https://github.com/community-scripts/ProxmoxVE/pull/3004))
- Additions and amends to the CONTIRBUTOR docs [@tremor021](https://github.com/tremor021) ([#2983](https://github.com/community-scripts/ProxmoxVE/pull/2983))
### 🌐 Website
- #### 📝 Script Information
- Jellyseer not labeled as updateable even though update function exists [@tremor021](https://github.com/tremor021) ([#2991](https://github.com/community-scripts/ProxmoxVE/pull/2991))
- Fix Website - Show correct wget path for alpine [@MickLesk](https://github.com/MickLesk) ([#2998](https://github.com/community-scripts/ProxmoxVE/pull/2998))
## 2025-03-10
### 🆕 New Scripts
- Paperless-GPT [@MickLesk](https://github.com/MickLesk) ([#2965](https://github.com/community-scripts/ProxmoxVE/pull/2965))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Rework SnipeIT: Tarball & Tempfile [@MickLesk](https://github.com/MickLesk) ([#2963](https://github.com/community-scripts/ProxmoxVE/pull/2963))
- pihole: fix path when accessing pihole using `pct enter` [@CrazyWolf13](https://github.com/CrazyWolf13) ([#2964](https://github.com/community-scripts/ProxmoxVE/pull/2964))
- Hoarder: v0.23.0 dependency update [@vhsdream](https://github.com/vhsdream) ([#2958](https://github.com/community-scripts/ProxmoxVE/pull/2958))
### 🧰 Maintenance
- #### 📂 Github
- Update autolabeler.yml: Set Labels correctly [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2968](https://github.com/community-scripts/ProxmoxVE/pull/2968))
### 🌐 Website
- Add warnings about externaly sourced scripts [@tremor021](https://github.com/tremor021) ([#2975](https://github.com/community-scripts/ProxmoxVE/pull/2975))
## 2025-03-09
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Fix wikijs update issue while backing up data [@AdelRefaat](https://github.com/AdelRefaat) ([#2950](https://github.com/community-scripts/ProxmoxVE/pull/2950))
### 🧰 Maintenance
- #### 🐞 Bug Fixes
- Improve Release-Action (awk function) [@MickLesk](https://github.com/MickLesk) ([#2934](https://github.com/community-scripts/ProxmoxVE/pull/2934))
### 🌐 Website
- #### 🐞 Bug Fixes
- Pi-hole interface port in documentation [@la7eralus](https://github.com/la7eralus) ([#2953](https://github.com/community-scripts/ProxmoxVE/pull/2953))
## 2025-03-08
### 🌐 Website
- #### 🐞 Bug Fixes
- Update slug to lowercase in pf2etools.json [@PhoenixEmik](https://github.com/PhoenixEmik) ([#2942](https://github.com/community-scripts/ProxmoxVE/pull/2942))
## 2025-03-07
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- JupyterNotebook: Fix APP Variable [@MickLesk](https://github.com/MickLesk) ([#2924](https://github.com/community-scripts/ProxmoxVE/pull/2924))
- #### ✨ New Features
- Beszel: restarting service after update [@C0pywriting](https://github.com/C0pywriting) ([#2915](https://github.com/community-scripts/ProxmoxVE/pull/2915))
- #### 💥 Breaking Changes
- ActualBudget: Update Script with new Repo [@MickLesk](https://github.com/MickLesk) ([#2907](https://github.com/community-scripts/ProxmoxVE/pull/2907))
### 🌐 Website
- #### 📝 Script Information
- Improve Nextcloud(pi) docu and Name to NextcloudPi [@MickLesk](https://github.com/MickLesk) ([#2930](https://github.com/community-scripts/ProxmoxVE/pull/2930))
- fix jupyternotebook slug [@MickLesk](https://github.com/MickLesk) ([#2922](https://github.com/community-scripts/ProxmoxVE/pull/2922))
- Improve Trilium Description and Name to TriliumNext [@MickLesk](https://github.com/MickLesk) ([#2929](https://github.com/community-scripts/ProxmoxVE/pull/2929))
- Prowlarr icon [@bannert1337](https://github.com/bannert1337) ([#2906](https://github.com/community-scripts/ProxmoxVE/pull/2906))
- Update Apache Tika icon to SVG [@bannert1337](https://github.com/bannert1337) ([#2904](https://github.com/community-scripts/ProxmoxVE/pull/2904))
- Update Prometheus Alertmanager Icon [@bannert1337](https://github.com/bannert1337) ([#2905](https://github.com/community-scripts/ProxmoxVE/pull/2905))
## 2025-03-06
### 🆕 New Scripts
- InvenTree [@tremor021](https://github.com/tremor021) ([#2890](https://github.com/community-scripts/ProxmoxVE/pull/2890))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Homarr: Optional Reboot after update [@CrazyWolf13](https://github.com/CrazyWolf13) ([#2876](https://github.com/community-scripts/ProxmoxVE/pull/2876))
- Fix Tag "community-scripts" for ArchLinux / OPNSense [@MickLesk](https://github.com/MickLesk) ([#2875](https://github.com/community-scripts/ProxmoxVE/pull/2875))
- #### ✨ New Features
- Wastebin: Update Script for Version 3.0.0 [@MickLesk](https://github.com/MickLesk) ([#2885](https://github.com/community-scripts/ProxmoxVE/pull/2885))
## 2025-03-05
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Kimai: Better Handling of Updates (backup var / env / yaml) [@MickLesk](https://github.com/MickLesk) ([#2862](https://github.com/community-scripts/ProxmoxVE/pull/2862))
- Fix NextcloudPi-Installation [@MickLesk](https://github.com/MickLesk) ([#2853](https://github.com/community-scripts/ProxmoxVE/pull/2853))
## 2025-03-04
### 🆕 New Scripts
- Reveal.js [@tremor021](https://github.com/tremor021) ([#2806](https://github.com/community-scripts/ProxmoxVE/pull/2806))
- Apache Tomcat [@MickLesk](https://github.com/MickLesk) ([#2797](https://github.com/community-scripts/ProxmoxVE/pull/2797))
- Pterodactyl Wings [@bvdberg01](https://github.com/bvdberg01) ([#2800](https://github.com/community-scripts/ProxmoxVE/pull/2800))
- Pterodactyl Panel [@bvdberg01](https://github.com/bvdberg01) ([#2801](https://github.com/community-scripts/ProxmoxVE/pull/2801))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- reveal.js: Update function now backs up index and config [@tremor021](https://github.com/tremor021) ([#2845](https://github.com/community-scripts/ProxmoxVE/pull/2845))
- Changedetection: Increase RAM & Disk-Space [@MickLesk](https://github.com/MickLesk) ([#2838](https://github.com/community-scripts/ProxmoxVE/pull/2838))
- Linkwarden: Optimze RUST Installation [@MickLesk](https://github.com/MickLesk) ([#2817](https://github.com/community-scripts/ProxmoxVE/pull/2817))
- Nginx: Fix $STD for tar [@MickLesk](https://github.com/MickLesk) ([#2813](https://github.com/community-scripts/ProxmoxVE/pull/2813))
- #### ✨ New Features
- Add source to install scripts and make license one line [@bvdberg01](https://github.com/bvdberg01) ([#2842](https://github.com/community-scripts/ProxmoxVE/pull/2842))
### 🧰 Maintenance
- #### 🐞 Bug Fixes
- Better handling of create release [@MickLesk](https://github.com/MickLesk) ([#2818](https://github.com/community-scripts/ProxmoxVE/pull/2818))
### 🌐 Website
- #### 🐞 Bug Fixes
- Json file update [@bvdberg01](https://github.com/bvdberg01) ([#2824](https://github.com/community-scripts/ProxmoxVE/pull/2824))
- Prometheus-paperless-ngx-exporter: Fix wrong Interface Port [@schneider-de-com](https://github.com/schneider-de-com) ([#2812](https://github.com/community-scripts/ProxmoxVE/pull/2812))
- #### ✨ New Features
- Feature: Update Icons (selfhst repo) [@bannert1337](https://github.com/bannert1337) ([#2834](https://github.com/community-scripts/ProxmoxVE/pull/2834))
- Website: Add Mikrotik to Network too, OPNSense & OpenWRT to OS [@MickLesk](https://github.com/MickLesk) ([#2823](https://github.com/community-scripts/ProxmoxVE/pull/2823))
## 2025-03-03
### 🆕 New Scripts
- Habitica [@tremor021](https://github.com/tremor021) ([#2779](https://github.com/community-scripts/ProxmoxVE/pull/2779))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Zigbee2Mqtt Use fixed pnpm Version 10.4.1 [@MickLesk](https://github.com/MickLesk) ([#2805](https://github.com/community-scripts/ProxmoxVE/pull/2805))
- Linkwarden: Fix & Update Monolith-Installation [@MickLesk](https://github.com/MickLesk) ([#2787](https://github.com/community-scripts/ProxmoxVE/pull/2787))
- #### ✨ New Features
- Feature: MinIO use now static port 9001 [@MickLesk](https://github.com/MickLesk) ([#2786](https://github.com/community-scripts/ProxmoxVE/pull/2786))
- Feature Template Path for Mountings [@MickLesk](https://github.com/MickLesk) ([#2785](https://github.com/community-scripts/ProxmoxVE/pull/2785))
### 🌐 Website
- #### ✨ New Features
- Feature: Website - show default OS [@MickLesk](https://github.com/MickLesk) ([#2790](https://github.com/community-scripts/ProxmoxVE/pull/2790))
- #### 📝 Script Information
- Update zigbee2mqtt.json - make sure link is clickable [@gurtjun](https://github.com/gurtjun) ([#2802](https://github.com/community-scripts/ProxmoxVE/pull/2802))
## 2025-03-02
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Fix gpg Repo for nzbget [@flatlinebb](https://github.com/flatlinebb) ([#2774](https://github.com/community-scripts/ProxmoxVE/pull/2774))
## 2025-03-01
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Firefly III: FIx Ownership for OAuth Key [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2759](https://github.com/community-scripts/ProxmoxVE/pull/2759))
- homarr: double restart to fix homarr migration [@CrazyWolf13](https://github.com/CrazyWolf13) ([#2757](https://github.com/community-scripts/ProxmoxVE/pull/2757))
- #### ✨ New Features
- ActualBudget: New Installation Script with new Repo [@MickLesk](https://github.com/MickLesk) ([#2770](https://github.com/community-scripts/ProxmoxVE/pull/2770))
- #### 💥 Breaking Changes
- Breaking: Remove Update Function for Actual Budget until it fixed [@MickLesk](https://github.com/MickLesk) ([#2768](https://github.com/community-scripts/ProxmoxVE/pull/2768))
### 🧰 Maintenance
- #### 🐞 Bug Fixes
- Remove Note on Changelog [@MickLesk](https://github.com/MickLesk) ([#2758](https://github.com/community-scripts/ProxmoxVE/pull/2758))
- Fix Release Creation if Changelog.md to long [@MickLesk](https://github.com/MickLesk) ([#2752](https://github.com/community-scripts/ProxmoxVE/pull/2752))
## 2025-02-28
### 🧰 Maintenance
- #### ✨ New Features
- Shell Format Workflow [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2400](https://github.com/community-scripts/ProxmoxVE/pull/2400))
- #### 📂 Github
- Update all Action to new selfhosted Runner Cluster [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2739](https://github.com/community-scripts/ProxmoxVE/pull/2739))
- Update Script Test Workflow [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2741](https://github.com/community-scripts/ProxmoxVE/pull/2741))
## 2025-02-27
### 🆕 New Scripts
- web-check [@CrazyWolf13](https://github.com/CrazyWolf13) ([#2662](https://github.com/community-scripts/ProxmoxVE/pull/2662))
- Pelican Panel [@bvdberg01](https://github.com/bvdberg01) ([#2678](https://github.com/community-scripts/ProxmoxVE/pull/2678))
- Pelican Wings [@bvdberg01](https://github.com/bvdberg01) ([#2677](https://github.com/community-scripts/ProxmoxVE/pull/2677))
- ByteStash [@tremor021](https://github.com/tremor021) ([#2680](https://github.com/community-scripts/ProxmoxVE/pull/2680))
### 🚀 Updated Scripts
- ByteStash: Removed sed, app supports Node v22 now [@tremor021](https://github.com/tremor021) ([#2728](https://github.com/community-scripts/ProxmoxVE/pull/2728))
- Keycloak: Update installation script [@tremor021](https://github.com/tremor021) ([#2714](https://github.com/community-scripts/ProxmoxVE/pull/2714))
- ByteStash: Fix Node 22 compatibility (thanks t2lc) [@tremor021](https://github.com/tremor021) ([#2705](https://github.com/community-scripts/ProxmoxVE/pull/2705))
- #### 🐞 Bug Fixes
- EOF not detected [@CrazyWolf13](https://github.com/CrazyWolf13) ([#2726](https://github.com/community-scripts/ProxmoxVE/pull/2726))
- Zitadel-install.sh: Remove one version file and update to our standard [@bvdberg01](https://github.com/bvdberg01) ([#2710](https://github.com/community-scripts/ProxmoxVE/pull/2710))
- Outline: Change key to hex32 [@tremor021](https://github.com/tremor021) ([#2709](https://github.com/community-scripts/ProxmoxVE/pull/2709))
- Typo in update scripts [@bvdberg01](https://github.com/bvdberg01) ([#2707](https://github.com/community-scripts/ProxmoxVE/pull/2707))
- SFTPGo Remove unneeded RELEASE variable [@MickLesk](https://github.com/MickLesk) ([#2683](https://github.com/community-scripts/ProxmoxVE/pull/2683))
### 🧰 Maintenance
- #### 🐞 Bug Fixes
- Update install.func: Change Line Number for Error message. [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2690](https://github.com/community-scripts/ProxmoxVE/pull/2690))
- #### 📂 Github
- New Workflow to close Script Request Discussions on PR merge [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2688](https://github.com/community-scripts/ProxmoxVE/pull/2688))
- Improve Script-Test Workflow [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2712](https://github.com/community-scripts/ProxmoxVE/pull/2712))
- Switch all actions to self-hosted Runners [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2711](https://github.com/community-scripts/ProxmoxVE/pull/2711))
### 🌐 Website
- #### ✨ New Features
- Use HTML button element for copying to clipboard [@scallaway](https://github.com/scallaway) ([#2720](https://github.com/community-scripts/ProxmoxVE/pull/2720))
- Add basic pagination to Data Viewer [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2715](https://github.com/community-scripts/ProxmoxVE/pull/2715))
- #### 📝 Script Information
- wger - Add HTTPS instructions to the website [@tremor021](https://github.com/tremor021) ([#2695](https://github.com/community-scripts/ProxmoxVE/pull/2695))
## 2025-02-26 ## 2025-02-26

View File

@ -26,12 +26,10 @@ function update_script() {
if [[ ! -d /opt/actualbudget ]]; then if [[ ! -d /opt/actualbudget ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit 1 exit
fi fi
RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual/releases/latest | \ RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
grep "tag_name" | awk -F '"' '{print substr($4, 2)}')
if [[ ! -f /opt/actualbudget_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/actualbudget_version.txt)" ]]; then if [[ ! -f /opt/actualbudget_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/actualbudget_version.txt)" ]]; then
msg_info "Stopping ${APP}" msg_info "Stopping ${APP}"
systemctl stop actualbudget systemctl stop actualbudget
@ -39,11 +37,11 @@ function update_script() {
msg_info "Updating ${APP} to ${RELEASE}" msg_info "Updating ${APP} to ${RELEASE}"
cd /tmp cd /tmp
wget -q "https://github.com/actualbudget/actual-server/archive/refs/tags/v${RELEASE}.tar.gz" wget -q https://github.com/actualbudget/actual/archive/refs/tags/v${RELEASE}.tar.gz
mv /opt/actualbudget /opt/actualbudget_bak mv /opt/actualbudget /opt/actualbudget_bak
$STD tar -xzf "v${RELEASE}.tar.gz" tar -xzf "v${RELEASE}.tar.gz"
mv *ctual-server-* /opt/actualbudget mv actual-${RELEASE} /opt/actualbudget
mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config} mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config}
for dir in server-files .migrate user-files migrations; do for dir in server-files .migrate user-files migrations; do
@ -59,6 +57,11 @@ function update_script() {
mv /opt/actualbudget/server-files/account.sqlite /opt/actualbudget-data/server-files/account.sqlite mv /opt/actualbudget/server-files/account.sqlite /opt/actualbudget-data/server-files/account.sqlite
fi fi
if [[ -f /opt/actualbudget_bak/selfhost.key ]]; then
mv /opt/actualbudget_bak/selfhost.key /opt/actualbudget/selfhost.key
mv /opt/actualbudget_bak/selfhost.crt /opt/actualbudget/selfhost.crt
fi
if [[ -f /opt/actualbudget_bak/.env ]]; then if [[ -f /opt/actualbudget_bak/.env ]]; then
mv /opt/actualbudget_bak/.env /opt/actualbudget-data/.env mv /opt/actualbudget_bak/.env /opt/actualbudget-data/.env
else else
@ -74,7 +77,7 @@ ACTUAL_HTTPS_CERT=/opt/actualbudget/selfhost.crt
EOF EOF
fi fi
cd /opt/actualbudget cd /opt/actualbudget
$STD yarn install $STD yarn workspaces focus @actual-app/sync-server --production
echo "${RELEASE}" >/opt/actualbudget_version.txt echo "${RELEASE}" >/opt/actualbudget_version.txt
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"
@ -90,7 +93,7 @@ User=root
Group=root Group=root
WorkingDirectory=/opt/actualbudget WorkingDirectory=/opt/actualbudget
EnvironmentFile=/opt/actualbudget-data/.env EnvironmentFile=/opt/actualbudget-data/.env
ExecStart=/usr/bin/yarn start ExecStart=/usr/bin/yarn start:server
Restart=always Restart=always
RestartSec=10 RestartSec=10
@ -110,7 +113,7 @@ EOF
else else
msg_ok "No update required. ${APP} is already at ${RELEASE}" msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi
exit 0 exit
} }
start start

View File

@ -27,7 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no update path available." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }

View File

@ -28,7 +28,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no update path available." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }

View File

@ -27,7 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no update path available." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }

View File

@ -27,7 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "Ther is currently no automatic update function for ${APP}." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }

41
ct/apache-tomcat.sh Normal file
View File

@ -0,0 +1,41 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (Canbiz)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://tomcat.apache.org/
APP="Apache-Tomcat"
var_tags="webserver"
var_disk="5"
var_cpu="1"
var_ram="1024"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if ! ls -d /opt/tomcat-* >/dev/null 2>&1; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_error "Currently we don't provide an update function for this ${APP}."
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}"

View File

@ -27,8 +27,18 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
/opt/beszel/beszel update msg_info "Stopping $APP"
msg_error "Ther is currently no automatic update function for ${APP}." systemctl stop beszel-hub
msg_ok "Stopped $APP"
msg_info "Updating $APP"
$STD /opt/beszel/beszel update
msg_ok "Updated $APP"
msg_info "Starting $APP"
systemctl start beszel-hub
msg_ok "Successfully started $APP"
msg_ok "Update Successful"
exit exit
} }

73
ct/bytestash.sh Normal file
View File

@ -0,0 +1,73 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/jordan-dalby/ByteStash
APP="ByteStash"
var_tags="code"
var_disk="4"
var_cpu="1"
var_ram="1024"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/bytestash ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/jordan-dalby/ByteStash/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping Services"
systemctl stop bytestash-backend
systemctl stop bytestash-frontend
msg_ok "Services Stopped"
msg_info "Updating ${APP} to ${RELEASE}"
temp_file=$(mktemp)
wget -q "https://github.com/jordan-dalby/ByteStash/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file
tar zxf $temp_file
rm -rf /opt/bytestash/server/node_modules
rm -rf /opt/bytestash/client/node_modules
cp -rf ByteStash-${RELEASE}/* /opt/bytestash
cd /opt/bytestash/server
$STD npm install
cd /opt/bytestash/client
$STD npm install
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP}"
msg_info "Starting Services"
systemctl start bytestash-backend
systemctl start bytestash-frontend
msg_ok "Started Services"
msg_info "Cleaning Up"
rm -f $temp_file
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
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}"

View File

@ -8,8 +8,8 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
APP="Change Detection" APP="Change Detection"
var_tags="monitoring;crawler" var_tags="monitoring;crawler"
var_cpu="2" var_cpu="2"
var_ram="1024" var_ram="2048"
var_disk="8" var_disk="10"
var_os="debian" var_os="debian"
var_version="12" var_version="12"
var_unprivileged="1" var_unprivileged="1"

View File

@ -27,7 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no update path available." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }

View File

@ -221,7 +221,8 @@ mapfile -t TEMPLATES < <(pveam available -section system | sed -n "s/.*\($TEMPLA
exit 207 exit 207
} }
TEMPLATE="${TEMPLATES[-1]}" TEMPLATE="${TEMPLATES[-1]}"
TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE" TEMPLATE_PATH="$(pvesm path $TEMPLATE_STORAGE:vztmpl/$TEMPLATE)"
# Without NAS/Mount: TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE"
# Check if template exists, if corrupt remove and redownload # Check if template exists, if corrupt remove and redownload
if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE" || ! zstdcat "$TEMPLATE_PATH" | tar -tf - >/dev/null 2>&1; then if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE" || ! zstdcat "$TEMPLATE_PATH" | tar -tf - >/dev/null 2>&1; then
msg_warn "Template $TEMPLATE not found in storage or seems to be corrupted. Redownloading." msg_warn "Template $TEMPLATE not found in storage or seems to be corrupted. Redownloading."

View File

@ -27,7 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no update path available." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
msg_info "Updating ${APP}" msg_info "Updating ${APP}"
systemctl stop ${APP} systemctl stop ${APP}

78
ct/fluid-calendar.sh Normal file
View File

@ -0,0 +1,78 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: vhsdream
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://fluidcalendar.com
APP="fluid-calendar"
var_tags="calendar,tasks"
var_cpu="3"
var_ram="4096"
var_disk="7"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/fluid-calendar ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/dotnetfactory/fluid-calendar/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
msg_info "Stopping $APP"
systemctl stop fluid-calendar.service
msg_ok "Stopped $APP"
msg_info "Creating Backup"
$STD tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" /opt/fluid-calendar
msg_ok "Backup Created"
msg_info "Updating $APP to v${RELEASE}"
tmp_file=$(mktemp)
wget -q "https://github.com/dotnetfactory/fluid-calendar/archive/refs/tags/v${RELEASE}.zip" -O $tmp_file
unzip -q $tmp_file
cp -rf ${APP}-${RELEASE}/* /opt/fluid-calendar
cd /opt/fluid-calendar
export NEXT_TELEMETRY_DISABLED=1
$STD npm run setup
$STD npm run build
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"
systemctl start fluid-calendar.service
msg_ok "Started $APP"
msg_info "Cleaning Up"
rm -rf $tmp_file
rm -rf "/opt/${APP}_backup_$(date +%F).tar.gz"
rm -rf /tmp/${APP}-${RELEASE}
msg_ok "Cleanup Completed"
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
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}"

View File

@ -30,7 +30,7 @@ function update_script() {
fi fi
RELEASE=$(curl -s https://api.github.com/repos/glpi-project/glpi/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/') RELEASE=$(curl -s https://api.github.com/repos/glpi-project/glpi/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_error "Ther is currently no automatic update function for ${APP}." msg_error "Currently we don't provide an update function for this ${APP}."
else else
msg_ok "No update required. ${APP} is already at v${RELEASE}." msg_ok "No update required. ${APP} is already at v${RELEASE}."
fi fi

View File

@ -27,7 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no update path available." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }

74
ct/habitica.sh Normal file
View File

@ -0,0 +1,74 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/HabitRPG/habitica
APP="Habitica"
var_tags="gaming"
var_cpu="2"
var_ram="4096"
var_disk="8"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d "/opt/habitica" ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/HabitRPG/habitica/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
msg_info "Stopping $APP"
systemctl stop habitica-mongodb
systemctl stop habitica
systemctl stop habitica-client
msg_ok "Stopped $APP"
msg_info "Updating $APP to ${RELEASE}"
temp_file=$(mktemp)
wget -q "https://github.com/HabitRPG/habitica/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file
tar zxf $temp_file
cp -rf habitica-${RELEASE}/* /opt/habitica
cd /opt/habitica
$STD npm i
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to ${RELEASE}"
msg_info "Starting $APP"
systemctl start habitica-mongodb
systemctl start habitica
systemctl start habitica-client
msg_ok "Started $APP"
msg_info "Cleaning Up"
rm -f $temp_file
rm -rf ~/habitica-${RELEASE}
msg_ok "Cleanup Completed"
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
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}"

6
ct/headers/apache-tomcat Normal file
View File

@ -0,0 +1,6 @@
___ __ ______ __
/ | ____ ____ ______/ /_ ___ /_ __/___ ____ ___ _________ _/ /_
/ /| | / __ \/ __ `/ ___/ __ \/ _ \______/ / / __ \/ __ `__ \/ ___/ __ `/ __/
/ ___ |/ /_/ / /_/ / /__/ / / / __/_____/ / / /_/ / / / / / / /__/ /_/ / /_
/_/ |_/ .___/\__,_/\___/_/ /_/\___/ /_/ \____/_/ /_/ /_/\___/\__,_/\__/
/_/

6
ct/headers/bytestash Normal file
View File

@ -0,0 +1,6 @@
____ __ _____ __ __
/ __ )__ __/ /____ / ___// /_____ ______/ /_
/ __ / / / / __/ _ \\__ \/ __/ __ `/ ___/ __ \
/ /_/ / /_/ / /_/ __/__/ / /_/ /_/ (__ ) / / /
/_____/\__, /\__/\___/____/\__/\__,_/____/_/ /_/
/____/

View File

@ -0,0 +1,6 @@
______ _ __ __ __
/ __/ /_ __(_)___/ / _________ _/ /__ ____ ____/ /___ ______
/ /_/ / / / / / __ /_____/ ___/ __ `/ / _ \/ __ \/ __ / __ `/ ___/
/ __/ / /_/ / / /_/ /_____/ /__/ /_/ / / __/ / / / /_/ / /_/ / /
/_/ /_/\__,_/_/\__,_/ \___/\__,_/_/\___/_/ /_/\__,_/\__,_/_/

6
ct/headers/habitica Normal file
View File

@ -0,0 +1,6 @@
__ __ __ _ __ _
/ / / /___ _/ /_ (_) /_(_)________ _
/ /_/ / __ `/ __ \/ / __/ / ___/ __ `/
/ __ / /_/ / /_/ / / /_/ / /__/ /_/ /
/_/ /_/\__,_/_.___/_/\__/_/\___/\__,_/

6
ct/headers/inventree Normal file
View File

@ -0,0 +1,6 @@
____ ______
/ _/___ _ _____ ____/_ __/_______ ___
/ // __ \ | / / _ \/ __ \/ / / ___/ _ \/ _ \
_/ // / / / |/ / __/ / / / / / / / __/ __/
/___/_/ /_/|___/\___/_/ /_/_/ /_/ \___/\___/

View File

@ -1,6 +1,6 @@
__ __ _ __ __ __ __ __ __ _ __ __ __ __
/ /_ ______ __ __/ /____ _____/ | / /___ / /____ / /_ ____ ____ / /__ / /_ ______ __ __/ /____ _____/ | / /___ / /____ / /_ ____ ____ / /__
__ / / / / / __ \/ / / / __/ _ \/ ___/ / |/ / __ \/ __/ _ \/ __ \/ __ \/ __ \/ //_/ __ / / / / / __ \/ / / / __/ _ \/ ___/ |/ / __ \/ __/ _ \/ __ \/ __ \/ __ \/ //_/
/ /_/ / /_/ / /_/ / /_/ / /_/ __/ / / /| / /_/ / /_/ __/ /_/ / /_/ / /_/ / ,< / /_/ / /_/ / /_/ / /_/ / /_/ __/ / / /| / /_/ / /_/ __/ /_/ / /_/ / /_/ / ,<
\____/\__,_/ .___/\__, /\__/\___/_/ /_/ |_/\____/\__/\___/_.___/\____/\____/_/|_| \____/\__,_/ .___/\__, /\__/\___/_/ /_/ |_/\____/\__/\___/_.___/\____/\____/_/|_|
/_/ /____/ /_/ /____/

6
ct/headers/paperless-gpt Normal file
View File

@ -0,0 +1,6 @@
____ __ __________ ______
/ __ \____ _____ ___ _____/ /__ __________ / ____/ __ \/_ __/
/ /_/ / __ `/ __ \/ _ \/ ___/ / _ \/ ___/ ___/_____/ / __/ /_/ / / /
/ ____/ /_/ / /_/ / __/ / / / __(__ |__ )_____/ /_/ / ____/ / /
/_/ \__,_/ .___/\___/_/ /_/\___/____/____/ \____/_/ /_/
/_/

6
ct/headers/pelican-panel Normal file
View File

@ -0,0 +1,6 @@
____ ___ ____ __
/ __ \___ / (_)________ _____ / __ \____ _____ ___ / /
/ /_/ / _ \/ / / ___/ __ `/ __ \______/ /_/ / __ `/ __ \/ _ \/ /
/ ____/ __/ / / /__/ /_/ / / / /_____/ ____/ /_/ / / / / __/ /
/_/ \___/_/_/\___/\__,_/_/ /_/ /_/ \__,_/_/ /_/\___/_/

6
ct/headers/pelican-wings Normal file
View File

@ -0,0 +1,6 @@
____ ___ _ ___
/ __ \___ / (_)________ _____ | | / (_)___ ____ ______
/ /_/ / _ \/ / / ___/ __ `/ __ \_____| | /| / / / __ \/ __ `/ ___/
/ ____/ __/ / / /__/ /_/ / / / /_____/ |/ |/ / / / / / /_/ (__ )
/_/ \___/_/_/\___/\__,_/_/ /_/ |__/|__/_/_/ /_/\__, /____/
/____/

6
ct/headers/plant-it Normal file
View File

@ -0,0 +1,6 @@
____ __ __ _ __
/ __ \/ /___ _____ / /_ (_) /_
/ /_/ / / __ `/ __ \/ __/_____/ / __/
/ ____/ / /_/ / / / / /_/_____/ / /_
/_/ /_/\__,_/_/ /_/\__/ /_/\__/

View File

@ -0,0 +1,6 @@
____ __ __ __ __ ____ __
/ __ \/ /____ _________ ____/ /___ ______/ /___ __/ / / __ \____ _____ ___ / /
/ /_/ / __/ _ \/ ___/ __ \/ __ / __ `/ ___/ __/ / / / /_____/ /_/ / __ `/ __ \/ _ \/ /
/ ____/ /_/ __/ / / /_/ / /_/ / /_/ / /__/ /_/ /_/ / /_____/ ____/ /_/ / / / / __/ /
/_/ \__/\___/_/ \____/\__,_/\__,_/\___/\__/\__, /_/ /_/ \__,_/_/ /_/\___/_/
/____/

View File

@ -0,0 +1,6 @@
____ __ __ __ __ _ ___
/ __ \/ /____ _________ ____/ /___ ______/ /___ __/ / | | / (_)___ ____ ______
/ /_/ / __/ _ \/ ___/ __ \/ __ / __ `/ ___/ __/ / / / /____| | /| / / / __ \/ __ `/ ___/
/ ____/ /_/ __/ / / /_/ / /_/ / /_/ / /__/ /_/ /_/ / /_____/ |/ |/ / / / / / /_/ (__ )
/_/ \__/\___/_/ \____/\__,_/\__,_/\___/\__/\__, /_/ |__/|__/_/_/ /_/\__, /____/
/____/ /____/

6
ct/headers/revealjs Normal file
View File

@ -0,0 +1,6 @@
____ __ _______
/ __ \___ _ _____ ____ _/ / / / ___/
/ /_/ / _ \ | / / _ \/ __ `/ /_ / /\__ \
/ _, _/ __/ |/ / __/ /_/ / / /_/ /___/ /
/_/ |_|\___/|___/\___/\__,_/_/\____//____/

6
ct/headers/seafile Normal file
View File

@ -0,0 +1,6 @@
_____ _____ __
/ ___/___ ____ _/ __(_) /__
\__ \/ _ \/ __ `/ /_/ / / _ \
___/ / __/ /_/ / __/ / / __/
/____/\___/\__,_/_/ /_/_/\___/

6
ct/headers/web-check Normal file
View File

@ -0,0 +1,6 @@
__ __ __
_ _____ / /_ _____/ /_ ___ _____/ /__
| | /| / / _ \/ __ \______/ ___/ __ \/ _ \/ ___/ //_/
| |/ |/ / __/ /_/ /_____/ /__/ / / / __/ /__/ ,<
|__/|__/\___/_.___/ \___/_/ /_/\___/\___/_/|_|

View File

@ -41,7 +41,8 @@ function update_script() {
msg_ok "Updated $APP to ${RELEASE}" msg_ok "Updated $APP to ${RELEASE}"
msg_info "Starting ${APP}" msg_info "Starting ${APP}"
systemctl start headscale # Temporary fix until headscale project resolves service getting disabled on updates.
systemctl enable -q --now headscale
msg_ok "Started ${APP}" msg_ok "Started ${APP}"
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
else else

View File

@ -45,7 +45,8 @@ function update_script() {
cp -R Heimdall-${VER}/* /opt/Heimdall cp -R Heimdall-${VER}/* /opt/Heimdall
cd /opt/Heimdall cd /opt/Heimdall
$STD apt-get install -y composer $STD apt-get install -y composer
$STD COMPOSER_ALLOW_SUPERUSER=1 composer dump-autoload export COMPOSER_ALLOW_SUPERUSER=1
$STD composer dump-autoload
echo "${RELEASE}" >/opt/${APP}_version.txt echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated Heimdall Dashboard to ${RELEASE}" msg_ok "Updated Heimdall Dashboard to ${RELEASE}"
msg_info "Restoring Data" msg_info "Restoring Data"

View File

@ -27,7 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no update path available." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }

View File

@ -37,6 +37,9 @@ function update_script() {
if [[ $(corepack -v) < "0.31.0" ]]; then if [[ $(corepack -v) < "0.31.0" ]]; then
$STD npm install -g corepack@0.31.0 $STD npm install -g corepack@0.31.0
fi fi
if [[ "${PREV_RELEASE}" < 0.23.0 ]]; then
$STD apt-get install -y graphicsmagick ghostscript
fi
cd /opt cd /opt
if [[ -f /opt/hoarder/.env ]] && [[ ! -f /etc/hoarder/hoarder.env ]]; then if [[ -f /opt/hoarder/.env ]] && [[ ! -f /etc/hoarder/hoarder.env ]]; then
mkdir -p /etc/hoarder mkdir -p /etc/hoarder

View File

@ -150,6 +150,10 @@ EOF
systemctl start homarr systemctl start homarr
msg_ok "Started Services" msg_ok "Started Services"
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
read -p "It's recommended to reboot the LXC after an update, would you like to reboot the LXC now ? (y/n): " choice
if [[ "$choice" =~ ^[Yy]$ ]]; then
reboot
fi
else else
msg_ok "No update required. ${APP} is already at v${RELEASE}" msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi fi

View File

@ -45,8 +45,8 @@ function update_script() {
cp -r homepage-${RELEASE}/* /opt/homepage/ cp -r homepage-${RELEASE}/* /opt/homepage/
rm -rf homepage-${RELEASE} rm -rf homepage-${RELEASE}
cd /opt/homepage cd /opt/homepage
$STD npx --yes update-browserslist-db@latest
$STD pnpm install $STD pnpm install
$STD npx --yes update-browserslist-db@latest
export NEXT_PUBLIC_VERSION="v$RELEASE" export NEXT_PUBLIC_VERSION="v$RELEASE"
export NEXT_PUBLIC_REVISION="source" export NEXT_PUBLIC_REVISION="source"
$STD pnpm build $STD pnpm build

45
ct/inventree.sh Normal file
View File

@ -0,0 +1,45 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/inventree/InvenTree
APP="InvenTree"
var_tags="inventory"
var_cpu="2"
var_ram="2048"
var_disk="6"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d "/opt/inventree" ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating $APP"
$STD apt-get update
$STD apt-get install --only-upgrade inventree -y
msg_ok "Updated $APP"
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}"

View File

@ -27,7 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no update path available." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }

View File

@ -28,20 +28,29 @@ function update_script() {
exit exit
fi fi
RELEASE=$(curl -s https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') RELEASE=$(curl -s https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
BACKUP_DIR="/opt/kimai_backup"
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping Apache2" msg_info "Stopping Apache2"
systemctl stop apache2 systemctl stop apache2
msg_ok "Stopped Apache2" msg_ok "Stopped Apache2"
msg_info "Backing up Kimai configuration and var directory"
mkdir -p "$BACKUP_DIR"
[ -d /opt/kimai/var ] && cp -r /opt/kimai/var "$BACKUP_DIR/"
[ -f /opt/kimai/.env ] && cp /opt/kimai/.env "$BACKUP_DIR/"
[ -f /opt/kimai/config/packages/local.yaml ] && cp /opt/kimai/config/packages/local.yaml "$BACKUP_DIR/"
msg_ok "Backup completed"
msg_info "Updating ${APP} to ${RELEASE}" msg_info "Updating ${APP} to ${RELEASE}"
cp /opt/kimai/.env /opt/.env
[ -f /opt/kimai/config/packages/local.yaml ] && cp /opt/kimai/config/packages/local.yaml /opt/local.yaml
rm -rf /opt/kimai rm -rf /opt/kimai
wget -q "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip" wget -q "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip"
unzip -q ${RELEASE}.zip unzip -q ${RELEASE}.zip
mv kimai-${RELEASE} /opt/kimai mv kimai-${RELEASE} /opt/kimai
mv /opt/.env /opt/kimai/.env [ -d "$BACKUP_DIR/var" ] && cp -r "$BACKUP_DIR/var" /opt/kimai/
[ -f /opt/local.yaml ] && mv /opt/local.yaml /opt/kimai/config/packages/local.yaml [ -f "$BACKUP_DIR/.env" ] && cp "$BACKUP_DIR/.env" /opt/kimai/
[ -f "$BACKUP_DIR/local.yaml" ] && cp "$BACKUP_DIR/local.yaml" /opt/kimai/config/packages/
rm -rf "$BACKUP_DIR"
cd /opt/kimai cd /opt/kimai
$STD composer install --no-dev --optimize-autoloader $STD composer install --no-dev --optimize-autoloader
$STD bin/console kimai:update $STD bin/console kimai:update
@ -60,6 +69,7 @@ function update_script() {
msg_info "Cleaning Up" msg_info "Cleaning Up"
rm -rf ${RELEASE}.zip rm -rf ${RELEASE}.zip
rm -rf "$BACKUP_DIR"
msg_ok "Cleaned" msg_ok "Cleaned"
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
else else

View File

@ -32,6 +32,15 @@ function update_script() {
systemctl stop linkwarden systemctl stop linkwarden
msg_ok "Stopped ${APP}" msg_ok "Stopped ${APP}"
msg_info "Updating Rust"
$STD apt-get install -y build-essential
$STD curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source $HOME/.cargo/env
echo 'export PATH=/usr/local/cargo/bin:$PATH' >> /etc/profile
source /etc/profile
$STD cargo install monolith
msg_ok "Updated Rust"
msg_info "Updating ${APP} to ${RELEASE}" msg_info "Updating ${APP} to ${RELEASE}"
cd /opt cd /opt
mv /opt/linkwarden/.env /opt/.env mv /opt/linkwarden/.env /opt/.env

View File

@ -27,7 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no update path available." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }

View File

@ -51,7 +51,7 @@ function update_script() {
msg_ok "Cleaned Old Files" msg_ok "Cleaned Old Files"
msg_info "Downloading NPM v${RELEASE}" msg_info "Downloading NPM v${RELEASE}"
$STD wget -q https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE} -O - | tar -xz wget -q https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE} -O - | tar -xz
cd nginx-proxy-manager-${RELEASE} cd nginx-proxy-manager-${RELEASE}
msg_ok "Downloaded NPM v${RELEASE}" msg_ok "Downloaded NPM v${RELEASE}"

View File

@ -29,6 +29,11 @@ function update_script() {
fi fi
msg_info "Updating ${APP} (Patience)" msg_info "Updating ${APP} (Patience)"
cd /opt/open-webui cd /opt/open-webui
mkdir /opt/open-webui-backup
cp -rf /opt/open-webui/backend/data /opt/open-webui-backup
git add -A
$STD git stash
$STD git reset --hard
output=$(git pull --no-rebase) output=$(git pull --no-rebase)
if echo "$output" | grep -q "Already up to date."; then if echo "$output" | grep -q "Already up to date."; then
msg_ok "$APP is already up to date." msg_ok "$APP is already up to date."
@ -40,6 +45,8 @@ function update_script() {
$STD npm run build $STD npm run build
cd ./backend cd ./backend
$STD pip install -r requirements.txt -U $STD pip install -r requirements.txt -U
cp -rf /opt/open-webui-backup/* /opt/open-webui/backend
$STD git stash pop
systemctl start open-webui.service systemctl start open-webui.service
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
exit exit

74
ct/paperless-gpt.sh Normal file
View File

@ -0,0 +1,74 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
# Source: https://github.com/icereed/paperless-gpt
APP="Paperless-GPT"
var_tags="os"
var_cpu="3"
var_ram="2048"
var_disk="7"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/paperless-gpt ]]; then
msg_error "No Paperless-GPT installation found!"
exit 1
fi
RELEASE=$(curl -s https://api.github.com/repos/icereed/paperless-gpt/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping Service"
systemctl stop paperless-gpt
msg_ok "Service Stopped"
msg_info "Updating Paperless-GPT to ${RELEASE}"
temp_file=$(mktemp)
wget -q "https://github.com/icereed/paperless-gpt/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file
tar zxf $temp_file
rm -rf /opt/paperless-gpt
mv paperless-gpt-${RELEASE} /opt/paperless-gpt
cd /opt/paperless-gpt/web-app
$STD npm install
$STD npm run build
cd /opt/paperless-gpt
go mod download
export CC=musl-gcc
CGO_ENABLED=1 go build -tags musl -o /dev/null github.com/mattn/go-sqlite3
CGO_ENABLED=1 go build -tags musl -o paperless-gpt .
echo "${RELEASE}" >"/opt/paperless-gpt_version.txt"
msg_ok "Updated Paperless-GPT to ${RELEASE}"
msg_info "Starting Service"
systemctl start paperless-gpt
msg_ok "Started Service"
msg_info "Cleaning Up"
rm -f $temp_file
msg_ok "Cleanup Completed"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
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}"

76
ct/pelican-panel.sh Normal file
View File

@ -0,0 +1,76 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: bvdberg01
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/pelican-dev/panel
APP="Pelican-Panel"
var_tags="Gaming"
var_cpu="2"
var_ram="1024"
var_disk="4"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/pelican-panel ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/pelican-dev/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping Service"
cd /opt/pelican-panel
$STD php artisan down
msg_ok "Stopped Service"
msg_info "Updating ${APP} to v${RELEASE}"
cp -r /opt/pelican-panel/.env /opt/
rm -rf * .*
wget -q "https://github.com/pelican-dev/panel/releases/download/v${RELEASE}/panel.tar.gz"
tar -xzf "panel.tar.gz"
mv /opt/.env /opt/pelican-panel/
$STD composer install --no-dev --optimize-autoloader --no-interaction
$STD php artisan p:environment:setup
$STD php artisan view:clear
$STD php artisan config:clear
$STD php artisan filament:optimize
$STD php artisan migrate --seed --force
chown -R www-data:www-data /opt/pelican-panel
chmod -R 755 /opt/pelican-panel/storage /opt/pelican-panel/bootstrap/cache/
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting Service"
$STD php artisan queue:restart
$STD php artisan up
msg_ok "Started Service"
msg_info "Cleaning up"
rm -rf "/opt/pelican-panel/panel.tar.gz"
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
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}/installer${CL}"

58
ct/pelican-wings.sh Normal file
View File

@ -0,0 +1,58 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: bvdberg01
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/pelican-dev/wings
APP="Pelican-Wings"
var_tags="Gaming"
var_cpu="2"
var_ram="4096"
var_disk="8"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /usr/local/bin/wings ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/pelican-dev/wings/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping Service"
systemctl stop wings
msg_ok "Stopped Service"
msg_info "Updating ${APP} to v${RELEASE}"
rm /usr/local/bin/wings
wget -q -O /usr/local/bin/wings "https://github.com/pelican-dev/wings/releases/download/v${RELEASE}/wings_linux_amd64"
chmod u+x /usr/local/bin/wings
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting Service"
systemctl start wings
msg_ok "Started Service"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"

View File

@ -29,7 +29,7 @@ function update_script() {
fi fi
msg_info "Updating ${APP}" msg_info "Updating ${APP}"
set +e set +e
pihole -up /usr/local/bin/pihole -up
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"
exit exit
} }

64
ct/plant-it.sh Normal file
View File

@ -0,0 +1,64 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://plant-it.org/
APP="Plant-it"
var_tags="plants;garden"
var_cpu="2"
var_ram="2048"
var_disk="5"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/plant-it ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/MDeLuise/plant-it/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
msg_info "Stopping $APP"
systemctl stop plant-it
msg_ok "Stopped $APP"
msg_info "Updating $APP to v${RELEASE}"
wget -q -O /opt/plant-it/server.jar "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/server.jar"
cd /opt/plant-it/frontend
wget -q https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/client.tar.gz
tar -xzf client.tar.gz
rm -f client.tar.gz
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"
systemctl start plant-it
msg_ok "Started $APP"
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
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}"

View File

@ -27,7 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no update path available." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }

74
ct/pterodactyl-panel.sh Normal file
View File

@ -0,0 +1,74 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: bvdberg01
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/pterodactyl/panel
APP="Pterodactyl-Panel"
var_tags="gaming"
var_cpu="2"
var_ram="1024"
var_disk="4"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/pterodactyl-panel ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/pterodactyl/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping Service"
cd /opt/pterodactyl-panel
$STD php artisan down
msg_ok "Stopped Service"
msg_info "Updating ${APP} to v${RELEASE}"
cp -r /opt/pterodactyl-panel/.env /opt/
rm -rf * .*
wget -q "https://github.com/pterodactyl/panel/releases/download/v${RELEASE}/panel.tar.gz"
tar -xzf "panel.tar.gz"
mv /opt/.env /opt/pterodactyl-panel/
$STD composer install --no-dev --optimize-autoloader --no-interaction
$STD php artisan view:clear
$STD php artisan config:clear
$STD php artisan migrate --seed --force --no-interaction
chown -R www-data:www-data /opt/pterodactyl-panel/*
chmod -R 755 /opt/pterodactyl-panel/storage /opt/pterodactyl-panel/bootstrap/cache/
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting Service"
$STD php artisan queue:restart
$STD php artisan up
msg_ok "Started Service"
msg_info "Cleaning up"
rm -rf "/opt/pterodactyl-panel/panel.tar.gz"
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
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}"

58
ct/pterodactyl-wings.sh Normal file
View File

@ -0,0 +1,58 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: bvdberg01
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/pterodactyl/wings
APP="Pterodactyl-Wings"
var_tags="gaming"
var_cpu="2"
var_ram="4096"
var_disk="8"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /usr/local/bin/wings ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/pterodactyl/wings/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping Service"
systemctl stop wings
msg_ok "Stopped Service"
msg_info "Updating ${APP} to v${RELEASE}"
rm /usr/local/bin/wings
wget -q -O /usr/local/bin/wings "https://github.com/pterodactyl/wings/releases/download/v${RELEASE}/wings_linux_amd64"
chmod u+x /usr/local/bin/wings
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting Service"
systemctl start wings
msg_ok "Started Service"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"

View File

@ -27,7 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no update path available." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }

View File

@ -27,7 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no update path available." msg_error "Currently we don't provide an update function for this ${APP}."
exit exit
} }

75
ct/revealjs.sh Normal file
View File

@ -0,0 +1,75 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/hakimel/reveal.js
APP="RevealJS"
var_tags="presentation"
var_cpu="1"
var_ram="1024"
var_disk="4"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d "/opt/revealjs" ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/hakimel/reveal.js/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
msg_info "Stopping $APP"
systemctl stop revealjs
msg_ok "Stopped $APP"
msg_info "Updating $APP to ${RELEASE}"
temp_file=$(mktemp)
wget -q "https://github.com/hakimel/reveal.js/archive/refs/tags/${RELEASE}.tar.gz" -O $temp_file
tar zxf $temp_file
rm -rf /opt/revealjs/node_modules/*
cp /opt/revealjs/index.html /opt
cp /opt/revealjs/gulpfile.js /opt
cp -rf reveal.js-${RELEASE}/* /opt/revealjs
cd /opt/revealjs
$STD npm install
cp -f /opt/index.html /opt/revealjs
cp -f /opt/gulpfile.js /opt/revealjs
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to ${RELEASE}"
msg_info "Starting $APP"
systemctl start revealjs
msg_ok "Started $APP"
msg_info "Cleaning Up"
rm -f $temp_file
rm -rf ~/reveal.js-${RELEASE}
msg_ok "Cleanup Completed"
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
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}:8000${CL}"

43
ct/seafile.sh Normal file
View File

@ -0,0 +1,43 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 tteck
# Author: dave-yap (dave-yap)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://seafile.com/
APP="Seafile"
var_tags="documents"
var_cpu="2"
var_ram="2048"
var_disk="20"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
base_settings
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /etc/systemd/system/seafile.service ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_ok "No upgrade path available now."
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}:8000${CL}"

View File

@ -6,7 +6,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
# Source: https://snipeitapp.com/ # Source: https://snipeitapp.com/
APP="SnipeIT" APP="SnipeIT"
var_tags="assat-management;foss" var_tags="asset-management;foss"
var_cpu="2" var_cpu="2"
var_ram="2048" var_ram="2048"
var_disk="4" var_disk="4"
@ -27,13 +27,20 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
RELEASE=$(curl -s https://api.github.com/repos/snipe/snipe-it/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -s https://api.github.com/repos/snipe/snipe-it/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "v([^"]+).*/\1/')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping Services"
systemctl stop nginx
msg_ok "Services Stopped"
msg_info "Updating ${APP} to v${RELEASE}" msg_info "Updating ${APP} to v${RELEASE}"
$STD apt-get update $STD apt-get update
$STD apt-get -y upgrade $STD apt-get -y upgrade
mv /opt/snipe-it /opt/snipe-it-backup mv /opt/snipe-it /opt/snipe-it-backup
cd /opt temp_file=$(mktemp)
wget -q "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file
tar zxf $temp_file
mv snipe-it-${RELEASE} /opt/snipe-it
$STD wget -q "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.zip" $STD wget -q "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.zip"
unzip -q v${RELEASE}.zip unzip -q v${RELEASE}.zip
mv snipe-it-${RELEASE} /opt/snipe-it mv snipe-it-${RELEASE} /opt/snipe-it
@ -53,9 +60,13 @@ function update_script() {
chmod -R 755 /opt/snipe-it chmod -R 755 /opt/snipe-it
rm -rf /opt/v${RELEASE}.zip rm -rf /opt/v${RELEASE}.zip
rm -rf /opt/snipe-it-backup rm -rf /opt/snipe-it-backup
msg_ok "Updated ${APP} LXC" msg_ok "Updated ${APP}"
msg_info "Starting Service"
systemctl start nginx
msg_ok "Started Service"
else else
msg_ok "No update required. ${APP} is already at v${RELEASE}." msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi fi
exit exit
} }

View File

@ -32,10 +32,10 @@ function update_script() {
msg_info "Updating ${APP} to v${VERSION}" msg_info "Updating ${APP} to v${VERSION}"
cd /opt cd /opt
mv /opt/teddycloud /opt_teddycloud_bak mv /opt/teddycloud /opt/teddycloud_bak
wget -q "https://github.com/toniebox-reverse-engineering/teddycloud/releases/download/${RELEASE}/teddycloud.amd64.release_v${VERSION}.zip" wget -q "https://github.com/toniebox-reverse-engineering/teddycloud/releases/download/${RELEASE}/teddycloud.amd64.release_v${VERSION}.zip"
unzip -q -d /opt/teddycloud teddycloud.amd64.release_v${VERSION}.zip unzip -q -d /opt/teddycloud teddycloud.amd64.release_v${VERSION}.zip
cp -R /opt_teddycloud_bak/certs /opt_teddycloud_bak/config /opt_teddycloud_bak/data /opt/teddycloud cp -R /opt/teddycloud_bak/certs /opt/teddycloud_bak/config /opt/teddycloud_bak/data /opt/teddycloud
echo "${VERSION}" >"/opt/${APP}_version.txt" echo "${VERSION}" >"/opt/${APP}_version.txt"
msg_ok "Updated ${APP} to v${VERSION}" msg_ok "Updated ${APP} to v${VERSION}"

View File

@ -27,8 +27,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_error "There is currently no update path available." msg_error "Currently we don't provide an update function for this ${APP}."
exit
exit exit
} }

View File

@ -37,7 +37,8 @@ function update_script() {
cd /opt cd /opt
rm -rf /opt/vikunja/vikunja rm -rf /opt/vikunja/vikunja
wget -q "https://dl.vikunja.io/vikunja/$RELEASE/vikunja-$RELEASE-amd64.deb" wget -q "https://dl.vikunja.io/vikunja/$RELEASE/vikunja-$RELEASE-amd64.deb"
$STD DEBIAN_FRONTEND=noninteractive dpkg -i vikunja-$RELEASE-amd64.deb export DEBIAN_FRONTEND=noninteractive
$STD dpkg -i vikunja-$RELEASE-amd64.deb
echo "${RELEASE}" >/opt/${APP}_version.txt echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"

View File

@ -28,14 +28,44 @@ function update_script() {
exit exit
fi fi
RELEASE=$(curl -s https://api.github.com/repos/matze/wastebin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') RELEASE=$(curl -s https://api.github.com/repos/matze/wastebin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
# Dirty-Fix 03/2025 for missing APP_version.txt on old installations, set to pre-latest release
msg_info "Running Migration"
if [[ ! -f /opt/${APP}_version.txt ]]; then
echo "2.7.1" >/opt/${APP}_version.txt
mkdir -p /opt/wastebin-data
cat <<EOF >/opt/wastebin-data/.env
WASTEBIN_DATABASE_PATH=/opt/wastebin-data/wastebin.db
WASTEBIN_CACHE_SIZE=1024
WASTEBIN_HTTP_TIMEOUT=30
WASTEBIN_SIGNING_KEY=$(openssl rand -hex 32)
WASTEBIN_PASTE_EXPIRATIONS=0,600,3600=d,86400,604800,2419200,29030400
EOF
systemctl stop wastebin
cat <<EOF >/etc/systemd/system/wastebin.service
[Unit]
Description=Wastebin Service
After=network.target
[Service]
WorkingDirectory=/opt/wastebin
ExecStart=/opt/wastebin/wastebin
EnvironmentFile=/opt/wastebin-data/.env
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
fi
msg_ok "Migration Done"
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping Wastebin" msg_info "Stopping Wastebin"
systemctl stop wastebin systemctl stop wastebin
msg_ok "Wastebin Stopped" msg_ok "Wastebin Stopped"
msg_info "Updating Wastebin" msg_info "Updating Wastebin"
wget -q https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_x86_64-unknown-linux-musl.tar.zst temp_file=$(mktemp)
tar -xf wastebin_${RELEASE}_x86_64-unknown-linux-musl.tar.zst wget -q https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_x86_64-unknown-linux-musl.zip -O $temp_file
unzip -o -q $temp_file
cp -f wastebin /opt/wastebin/ cp -f wastebin /opt/wastebin/
chmod +x /opt/wastebin/wastebin chmod +x /opt/wastebin/wastebin
echo "${RELEASE}" >/opt/${APP}_version.txt echo "${RELEASE}" >/opt/${APP}_version.txt
@ -46,8 +76,8 @@ function update_script() {
msg_ok "Started Wastebin" msg_ok "Started Wastebin"
msg_info "Cleaning Up" msg_info "Cleaning Up"
rm -rf wastebin_${RELEASE}_x86_64-unknown-linux-musl.tar.zst rm -f $temp_file
msg_ok "Cleaned" msg_ok "Cleanup Completed"
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
else else
msg_ok "No update required. ${APP} is already at v${RELEASE}" msg_ok "No update required. ${APP} is already at v${RELEASE}"

41
ct/web-check.sh Normal file
View File

@ -0,0 +1,41 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/Lissy93/web-check
APP="web-check"
TAGS="network;analysis"
var_cpu="2"
var_ram="2048"
var_disk="12"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/web-check ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_error "Currently we don't provide an update function for this ${APP}."
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}"

View File

@ -32,8 +32,11 @@ function update_script() {
msg_ok "Stopped ${APP}" msg_ok "Stopped ${APP}"
msg_info "Backing up Data" msg_info "Backing up Data"
rm -rf ~/data-backup
mkdir -p ~/data-backup mkdir -p ~/data-backup
cp -R /opt/wikijs/{db.sqlite,config.yml,/data} ~/data-backup [ -f /opt/wikijs/db.sqlite ] && cp /opt/wikijs/db.sqlite ~/data-backup
[ -f /opt/wikijs/config.yml ] && cp /opt/wikijs/config.yml ~/data-backup
[ -d /opt/wikijs/data ] && cp -R /opt/wikijs/data ~/data-backup
msg_ok "Backed up Data" msg_ok "Backed up Data"
msg_info "Updating ${APP}" msg_info "Updating ${APP}"

View File

@ -33,6 +33,10 @@ function update_script() {
systemctl stop zigbee2mqtt systemctl stop zigbee2mqtt
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Updating pnpm"
$STD npm install -g pnpm@10.4.1
msg_ok "Updated pnpm"
msg_info "Creating Backup" msg_info "Creating Backup"
rm -rf /opt/${APP}_backup*.tar.gz rm -rf /opt/${APP}_backup*.tar.gz
mkdir -p /opt/z2m_backup mkdir -p /opt/z2m_backup

View File

@ -1,6 +1,6 @@
"use client"; "use client";
import React, { useEffect, useState } from "react"; import React, { JSX, useEffect, useState } from "react";
import DatePicker from 'react-datepicker'; import DatePicker from 'react-datepicker';
import 'react-datepicker/dist/react-datepicker.css'; import 'react-datepicker/dist/react-datepicker.css';
import ApplicationChart from "../../components/ApplicationChart"; import ApplicationChart from "../../components/ApplicationChart";
@ -21,28 +21,45 @@ interface DataModel {
status: string; status: string;
error: string; error: string;
type: string; type: string;
[key: string]: any;
} }
interface SummaryData {
total_entries: number;
status_count: Record<string, number>;
nsapp_count: Record<string, number>;
}
const DataFetcher: React.FC = () => { const DataFetcher: React.FC = () => {
const [data, setData] = useState<DataModel[]>([]); const [data, setData] = useState<DataModel[]>([]);
const [summary, setSummary] = useState<SummaryData | null>(null);
const [loading, setLoading] = useState<boolean>(true); const [loading, setLoading] = useState<boolean>(true);
const [error, setError] = useState<string | null>(null); const [error, setError] = useState<string | null>(null);
const [searchQuery, setSearchQuery] = useState('');
const [startDate, setStartDate] = useState<Date | null>(null);
const [endDate, setEndDate] = useState<Date | null>(null);
const [sortConfig, setSortConfig] = useState<{ key: keyof DataModel | null, direction: 'ascending' | 'descending' }>({ key: 'id', direction: 'descending' });
const [itemsPerPage, setItemsPerPage] = useState(25);
const [currentPage, setCurrentPage] = useState(1); const [currentPage, setCurrentPage] = useState(1);
const [itemsPerPage, setItemsPerPage] = useState(25);
const [showErrorRow, setShowErrorRow] = useState<number | null>(null); const [sortConfig, setSortConfig] = useState<{ key: string; direction: 'ascending' | 'descending' } | null>(null);
useEffect(() => { useEffect(() => {
const fetchData = async () => { const fetchSummary = async () => {
try { try {
const response = await fetch("https://api.htl-braunau.at/data/json"); const response = await fetch("https://api.htl-braunau.at/data/summary");
if (!response.ok) throw new Error("Failed to fetch data: ${response.statusText}"); if (!response.ok) throw new Error(`Failed to fetch summary: ${response.statusText}`);
const result: SummaryData = await response.json();
setSummary(result);
} catch (err) {
setError((err as Error).message);
}
};
fetchSummary();
}, []);
useEffect(() => {
const fetchPaginatedData = async () => {
setLoading(true);
try {
const response = await fetch(`https://api.htl-braunau.at/data/paginated?page=${currentPage}&limit=${itemsPerPage === 0 ? '' : itemsPerPage}`);
if (!response.ok) throw new Error(`Failed to fetch data: ${response.statusText}`);
const result: DataModel[] = await response.json(); const result: DataModel[] = await response.json();
setData(result); setData(result);
} catch (err) { } catch (err) {
@ -52,52 +69,34 @@ const DataFetcher: React.FC = () => {
} }
}; };
fetchData(); fetchPaginatedData();
}, []); }, [currentPage, itemsPerPage]);
const filteredData = data.filter(item => {
const matchesSearchQuery = Object.values(item).some(value =>
value.toString().toLowerCase().includes(searchQuery.toLowerCase())
);
const itemDate = new Date(item.created_at);
const matchesDateRange = (!startDate || itemDate >= startDate) && (!endDate || itemDate <= endDate);
return matchesSearchQuery && matchesDateRange;
});
const sortedData = React.useMemo(() => { const sortedData = React.useMemo(() => {
let sortableData = [...filteredData]; if (!sortConfig) return data;
if (sortConfig.key !== null) { const sorted = [...data].sort((a, b) => {
sortableData.sort((a, b) => { if (a[sortConfig.key] < b[sortConfig.key]) {
if (sortConfig.key !== null && a[sortConfig.key] < b[sortConfig.key]) {
return sortConfig.direction === 'ascending' ? -1 : 1; return sortConfig.direction === 'ascending' ? -1 : 1;
} }
if (sortConfig.key !== null && a[sortConfig.key] > b[sortConfig.key]) { if (a[sortConfig.key] > b[sortConfig.key]) {
return sortConfig.direction === 'ascending' ? 1 : -1; return sortConfig.direction === 'ascending' ? 1 : -1;
} }
return 0; return 0;
}); });
} return sorted;
return sortableData; }, [data, sortConfig]);
}, [filteredData, sortConfig]);
const requestSort = (key: keyof DataModel | null) => { if (loading) return <p>Loading...</p>;
if (error) return <p>Error: {error}</p>;
const requestSort = (key: string) => {
let direction: 'ascending' | 'descending' = 'ascending'; let direction: 'ascending' | 'descending' = 'ascending';
if (sortConfig.key === key && sortConfig.direction === 'ascending') { if (sortConfig && sortConfig.key === key && sortConfig.direction === 'ascending') {
direction = 'descending';
} else if (sortConfig.key === key && sortConfig.direction === 'descending') {
direction = 'ascending';
} else {
direction = 'descending'; direction = 'descending';
} }
setSortConfig({ key, direction }); setSortConfig({ key, direction });
}; };
interface SortConfig {
key: keyof DataModel | null;
direction: 'ascending' | 'descending';
}
const formatDate = (dateString: string): string => { const formatDate = (dateString: string): string => {
const date = new Date(dateString); const date = new Date(dateString);
const year = date.getFullYear(); const year = date.getFullYear();
@ -109,85 +108,14 @@ const DataFetcher: React.FC = () => {
return `${day}.${month}.${year} ${hours}:${minutes} ${timezoneOffset} GMT`; return `${day}.${month}.${year} ${hours}:${minutes} ${timezoneOffset} GMT`;
}; };
const handleItemsPerPageChange = (event: React.ChangeEvent<HTMLSelectElement>) => {
setItemsPerPage(Number(event.target.value));
setCurrentPage(1);
};
const paginatedData = sortedData.slice((currentPage - 1) * itemsPerPage, currentPage * itemsPerPage);
if (loading) return <p>Loading...</p>;
if (error) return <p>Error: {error}</p>;
var installingCounts: number = 0;
var failedCounts: number = 0;
var doneCounts: number = 0
var unknownCounts: number = 0;
data.forEach((item) => {
if (item.status === "installing") {
installingCounts += 1;
} else if (item.status === "failed") {
failedCounts += 1;
}
else if (item.status === "done") {
doneCounts += 1;
}
else {
unknownCounts += 1;
}
});
return ( return (
<div className="p-6 mt-20"> <div className="p-6 mt-20">
<h1 className="text-2xl font-bold mb-4 text-center">Created LXCs</h1> <h1 className="text-2xl font-bold mb-4 text-center">Created LXCs</h1>
<div className="mb-4 flex space-x-4"> <ApplicationChart data={summary} />
<div> <p className="text-lg font-bold mt-4"> </p>
<input
type="text"
placeholder="Search..."
value={searchQuery}
onChange={e => setSearchQuery(e.target.value)}
className="p-2 border"
/>
<label className="text-sm text-gray-600 mt-1 block">Search by keyword</label>
</div>
<div>
<DatePicker
selected={startDate}
onChange={date => setStartDate(date)}
selectsStart
startDate={startDate}
endDate={endDate}
placeholderText="Start date"
className="p-2 border"
/>
<label className="text-sm text-gray-600 mt-1 block">Set a start date</label>
</div>
<div>
<DatePicker
selected={endDate}
onChange={date => setEndDate(date)}
selectsEnd
startDate={startDate}
endDate={endDate}
placeholderText="End date"
className="p-2 border"
/>
<label className="text-sm text-gray-600 mt-1 block">Set a end date</label>
</div>
</div>
<ApplicationChart data={filteredData} />
<div className="mb-4 flex justify-between items-center"> <div className="mb-4 flex justify-between items-center">
<p className="text-lg font-bold">{filteredData.length} results found</p> <p className="text-lg font-bold">{summary?.total_entries} results found</p>
<p className="text-lg font">Status Legend: 🔄 installing {installingCounts} | completetd {doneCounts} | failed {failedCounts} | unknown {unknownCounts}</p> <p className="text-lg font">Status Legend: 🔄 installing {summary?.status_count["installing"] ?? 0} | completed {summary?.status_count["done"] ?? 0} | failed {summary?.status_count["failed"] ?? 0} | unknown</p>
<select value={itemsPerPage} onChange={handleItemsPerPageChange} className="p-2 border">
<option value={25}>25</option>
<option value={50}>50</option>
<option value={100}>100</option>
<option value={200}>200</option>
</select>
</div> </div>
<div className="overflow-x-auto"> <div className="overflow-x-auto">
<div className="overflow-y-auto lg:overflow-y-visible"> <div className="overflow-y-auto lg:overflow-y-visible">
@ -209,7 +137,7 @@ const DataFetcher: React.FC = () => {
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{paginatedData.map((item, index) => ( {sortedData.map((item, index) => (
<tr key={index}> <tr key={index}>
<td className="px-4 py-2 border-b"> <td className="px-4 py-2 border-b">
{item.status === "done" ? ( {item.status === "done" ? (
@ -237,20 +165,7 @@ const DataFetcher: React.FC = () => {
<td className="px-4 py-2 border-b">{item.ram_size}</td> <td className="px-4 py-2 border-b">{item.ram_size}</td>
<td className="px-4 py-2 border-b">{item.method}</td> <td className="px-4 py-2 border-b">{item.method}</td>
<td className="px-4 py-2 border-b">{item.pve_version}</td> <td className="px-4 py-2 border-b">{item.pve_version}</td>
<td className="px-4 py-2 border-b"> <td className="px-4 py-2 border-b">{item.error}</td>
{item.error && item.error !== "none" ? (
showErrorRow === index ? (
<>
{item.error}
<button onClick={() => setShowErrorRow(null)}>{item.error}</button>
</>
) : (
<button onClick={() => setShowErrorRow(index)}>Click to show error</button>
)
) : (
"none"
)}
</td>
<td className="px-4 py-2 border-b">{formatDate(item.created_at)}</td> <td className="px-4 py-2 border-b">{formatDate(item.created_at)}</td>
</tr> </tr>
))} ))}
@ -259,26 +174,25 @@ const DataFetcher: React.FC = () => {
</div> </div>
</div> </div>
<div className="mt-4 flex justify-between items-center"> <div className="mt-4 flex justify-between items-center">
<button <button onClick={() => setCurrentPage(prev => Math.max(prev - 1, 1))} disabled={currentPage === 1} className="p-2 border">Previous</button>
onClick={() => setCurrentPage(prev => Math.max(prev - 1, 1))}
disabled={currentPage === 1}
className="p-2 border"
>
Previous
</button>
<span>Page {currentPage}</span> <span>Page {currentPage}</span>
<button <button onClick={() => setCurrentPage(prev => prev + 1)} className="p-2 border">Next</button>
onClick={() => setCurrentPage(prev => (prev * itemsPerPage < sortedData.length ? prev + 1 : prev))} <select
disabled={currentPage * itemsPerPage >= sortedData.length} value={itemsPerPage}
onChange={(e) => setItemsPerPage(Number(e.target.value))}
className="p-2 border" className="p-2 border"
> >
Next <option value={10}>10</option>
</button> <option value={20}>20</option>
<option value={50}>50</option>
<option value={100}>100</option>
<option value={250}>250</option>
<option value={500}>500</option>
<option value={5000}>5000</option>
</select>
</div> </div>
</div> </div>
); );
}; };
export default DataFetcher; export default DataFetcher;

View File

@ -111,7 +111,7 @@ export default function Page() {
of Proxmox Virtual Environment (VE). of Proxmox Virtual Environment (VE).
</p> </p>
<p> <p>
With 200+ scripts to help you manage your{" "} With 300+ scripts to help you manage your{" "}
<b>Proxmox VE environment</b>. Whether you&#39;re a seasoned <b>Proxmox VE environment</b>. Whether you&#39;re a seasoned
user or a newcomer, we&#39;ve got you covered. user or a newcomer, we&#39;ve got you covered.
</p> </p>

View File

@ -28,6 +28,10 @@ function ScriptItem({
setSelectedScript(null); setSelectedScript(null);
}; };
const defaultInstallMethod = item.install_methods?.[0];
const os = defaultInstallMethod?.resources?.os || "Proxmox Node";
const version = defaultInstallMethod?.resources?.version || "";
return ( return (
<div className="mr-7 mt-0 flex w-full min-w-fit"> <div className="mr-7 mt-0 flex w-full min-w-fit">
<div className="flex w-full min-w-fit"> <div className="flex w-full min-w-fit">
@ -60,6 +64,9 @@ function ScriptItem({
<p className="w-full text-sm text-muted-foreground"> <p className="w-full text-sm text-muted-foreground">
Date added: {extractDate(item.date_created)} Date added: {extractDate(item.date_created)}
</p> </p>
<p className="text-sm text-muted-foreground">
Default OS: {os} {version}
</p>
</div> </div>
<div className="flex gap-5"> <div className="flex gap-5">
<DefaultSettings item={item} /> <DefaultSettings item={item} />

View File

@ -1,14 +1,23 @@
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { basePath } from "@/config/siteConfig"; import { basePath } from "@/config/siteConfig";
import { Script } from "@/lib/types"; import { Script } from "@/lib/types";
import { BookOpenText, Code, Globe } from "lucide-react"; import { BookOpenText, Code, Globe, RefreshCcw } from "lucide-react";
import Link from "next/link"; import Link from "next/link";
const generateInstallSourceUrl = (slug: string) => {
const baseUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main`;
return `${baseUrl}/install/${slug}-install.sh`;
};
const generateSourceUrl = (slug: string, type: string) => { const generateSourceUrl = (slug: string, type: string) => {
const baseUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main`; const baseUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main`;
return type === "ct" return type === "vm" ? `${baseUrl}/vm/${slug}.sh` : `${baseUrl}/misc/${slug}.sh`;
? `${baseUrl}/install/${slug}-install.sh` return `${baseUrl}/misc/${slug}.sh`;
: `${baseUrl}/${type}/${slug}.sh`; };
const generateUpdateUrl = (slug: string) => {
const baseUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main`;
return `${baseUrl}/ct/${slug}.sh`;
}; };
interface ButtonLinkProps { interface ButtonLinkProps {
@ -29,6 +38,11 @@ const ButtonLink = ({ href, icon, text }: ButtonLinkProps) => (
); );
export default function Buttons({ item }: { item: Script }) { export default function Buttons({ item }: { item: Script }) {
const isCtOrDefault = ["ct"].includes(item.type);
const installSourceUrl = isCtOrDefault ? generateInstallSourceUrl(item.slug) : null;
const updateSourceUrl = isCtOrDefault ? generateUpdateUrl(item.slug) : null;
const sourceUrl = !isCtOrDefault ? generateSourceUrl(item.slug, item.type) : null;
const buttons = [ const buttons = [
item.website && { item.website && {
href: item.website, href: item.website,
@ -40,8 +54,18 @@ export default function Buttons({ item }: { item: Script }) {
icon: <BookOpenText className="h-4 w-4" />, icon: <BookOpenText className="h-4 w-4" />,
text: "Documentation", text: "Documentation",
}, },
{ installSourceUrl && {
href: generateSourceUrl(item.slug, item.type), href: installSourceUrl,
icon: <Code className="h-4 w-4" />,
text: "Install-Source",
},
updateSourceUrl && {
href: updateSourceUrl,
icon: <RefreshCcw className="h-4 w-4" />,
text: "Update-Source",
},
sourceUrl && {
href: sourceUrl,
icon: <Code className="h-4 w-4" />, icon: <Code className="h-4 w-4" />,
text: "Source Code", text: "Source Code",
}, },

View File

@ -25,12 +25,16 @@ import { Chart as ChartJS, ArcElement, Tooltip as ChartTooltip, Legend } from "c
import ChartDataLabels from "chartjs-plugin-datalabels"; import ChartDataLabels from "chartjs-plugin-datalabels";
import { BarChart3, PieChart } from "lucide-react"; import { BarChart3, PieChart } from "lucide-react";
import React, { useState } from "react"; import React, { useState } from "react";
import { Pie } from "react-chartjs-2"; import { Pie, Bar } from "react-chartjs-2";
ChartJS.register(ArcElement, ChartTooltip, Legend, ChartDataLabels); ChartJS.register(ArcElement, ChartTooltip, Legend, ChartDataLabels);
interface SummaryData {
nsapp_count: Record<string, number>;
}
interface ApplicationChartProps { interface ApplicationChartProps {
data: { nsapp: string }[]; data: SummaryData | null;
} }
const ITEMS_PER_PAGE = 20; const ITEMS_PER_PAGE = 20;
@ -57,13 +61,9 @@ export default function ApplicationChart({ data }: ApplicationChartProps) {
const [chartStartIndex, setChartStartIndex] = useState(0); const [chartStartIndex, setChartStartIndex] = useState(0);
const [tableLimit, setTableLimit] = useState(ITEMS_PER_PAGE); const [tableLimit, setTableLimit] = useState(ITEMS_PER_PAGE);
// Calculate application counts if (!data) return null;
const appCounts = data.reduce((acc, item) => {
acc[item.nsapp] = (acc[item.nsapp] || 0) + 1;
return acc;
}, {} as Record<string, number>);
const sortedApps = Object.entries(appCounts) const sortedApps = Object.entries(data.nsapp_count)
.sort(([, a], [, b]) => b - a); .sort(([, a], [, b]) => b - a);
const chartApps = sortedApps.slice( const chartApps = sortedApps.slice(

View File

@ -37,10 +37,6 @@ export default function CodeCopyButton({
); );
}, 500); }, 500);
} }
// toast.success(`copied ${type} to clipboard`, {
// icon: <ClipboardCheck className="h-4 w-4" />,
// });
}; };
return ( return (
@ -49,17 +45,17 @@ export default function CodeCopyButton({
<div className="overflow-x-auto whitespace-pre-wrap text-nowrap break-all pr-4 text-sm"> <div className="overflow-x-auto whitespace-pre-wrap text-nowrap break-all pr-4 text-sm">
{!isMobile && children ? children : "Copy install command"} {!isMobile && children ? children : "Copy install command"}
</div> </div>
<div <button
className={cn(" right-0 cursor-pointer bg-muted px-3 py-4")}
onClick={() => handleCopy("install command", children)} onClick={() => handleCopy("install command", children)}
className={cn("bg-muted px-3 py-4")}
title="Copy"
> >
{hasCopied ? ( {hasCopied ? (
<CheckIcon className="h-4 w-4" /> <CheckIcon className="h-4 w-4" />
) : ( ) : (
<ClipboardIcon className="h-4 w-4" /> <ClipboardIcon className="h-4 w-4" />
)} )}
<span className="sr-only">Copy</span> </button>
</div>
</Card> </Card>
</div> </div>
); );

View File

@ -2,10 +2,9 @@
# Copyright (c) 2021-2025 community-scripts ORG # Copyright (c) 2021-2025 community-scripts ORG
# Author: jkrgr0 # Author: jkrgr0
# License: MIT # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://docs.2fauth.app/ # Source: https://docs.2fauth.app/
# Import Functions und Setup
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
color color
verb_ip6 verb_ip6
@ -14,7 +13,6 @@ setting_up_container
network_check network_check
update_os update_os
# Installing Dependencies with the 3 core dependencies (curl;sudo;mc)
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
$STD apt-get install -y \ $STD apt-get install -y \
curl \ curl \
@ -26,7 +24,6 @@ $STD apt-get install -y \
mariadb-server mariadb-server
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
# Template: MySQL Database
msg_info "Setting up Database" msg_info "Setting up Database"
DB_NAME=2fauth_db DB_NAME=2fauth_db
DB_USER=2fauth DB_USER=2fauth
@ -42,7 +39,6 @@ $STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH
} >> ~/2FAuth.creds } >> ~/2FAuth.creds
msg_ok "Set up Database" msg_ok "Set up Database"
# Setup App
msg_info "Setup 2FAuth" msg_info "Setup 2FAuth"
RELEASE=$(curl -s https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }') RELEASE=$(curl -s https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
wget -q "https://github.com/Bubka/2FAuth/archive/refs/tags/${RELEASE}.zip" wget -q "https://github.com/Bubka/2FAuth/archive/refs/tags/${RELEASE}.zip"
@ -78,7 +74,6 @@ chmod -R 755 /opt/2fauth
echo "${RELEASE}" >"/opt/2fauth_version.txt" echo "${RELEASE}" >"/opt/2fauth_version.txt"
msg_ok "Setup 2fauth" msg_ok "Setup 2fauth"
# Configure Service (NGINX)
msg_info "Configure Service" msg_info "Configure Service"
cat <<EOF >/etc/nginx/conf.d/2fauth.conf cat <<EOF >/etc/nginx/conf.d/2fauth.conf
server { server {
@ -115,7 +110,6 @@ msg_ok "Configured Service"
motd_ssh motd_ssh
customize customize
# Cleanup
msg_info "Cleaning up" msg_info "Cleaning up"
rm -f "/opt/v${RELEASE}.zip" rm -f "/opt/v${RELEASE}.zip"
$STD apt-get -y autoremove $STD apt-get -y autoremove

View File

@ -38,9 +38,9 @@ msg_ok "Installed Node.js"
msg_info "Installing Actual Budget" msg_info "Installing Actual Budget"
cd /opt cd /opt
RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
wget -q https://github.com/actualbudget/actual-server/archive/refs/tags/v${RELEASE}.tar.gz wget -q https://github.com/actualbudget/actual/archive/refs/tags/v${RELEASE}.tar.gz
tar -xzf v${RELEASE}.tar.gz tar -xzf v${RELEASE}.tar.gz
mv *ctual-server-* /opt/actualbudget mv actual-${RELEASE} /opt/actualbudget
mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config} mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config}
chown -R root:root /opt/actualbudget-data chown -R root:root /opt/actualbudget-data
@ -57,7 +57,7 @@ ACTUAL_HTTPS_KEY=/opt/actualbudget/selfhost.key
ACTUAL_HTTPS_CERT=/opt/actualbudget/selfhost.crt ACTUAL_HTTPS_CERT=/opt/actualbudget/selfhost.crt
EOF EOF
cd /opt/actualbudget cd /opt/actualbudget
$STD yarn install $STD yarn workspaces focus @actual-app/sync-server --production
$STD openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout selfhost.key -out selfhost.crt <<EOF $STD openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout selfhost.key -out selfhost.crt <<EOF
US US
California California
@ -82,14 +82,14 @@ User=root
Group=root Group=root
WorkingDirectory=/opt/actualbudget WorkingDirectory=/opt/actualbudget
EnvironmentFile=/opt/actualbudget-data/.env EnvironmentFile=/opt/actualbudget-data/.env
ExecStart=/usr/bin/yarn start ExecStart=/usr/bin/yarn start:server
Restart=always Restart=always
RestartSec=10 RestartSec=10
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
systemctl enable -q --now actualbudget.service systemctl enable -q --now actualbudget
msg_ok "Created Service" msg_ok "Created Service"
motd_ssh motd_ssh

View File

@ -2,8 +2,8 @@
# Copyright (c) 2021-2025 tteck # Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster) # Author: tteck (tteckster)
# License: MIT # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://adguard.com/
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
color color

View File

@ -3,8 +3,7 @@
# Copyright (c) 2021-2025 tteck # Copyright (c) 2021-2025 tteck
# Author: tteck # Author: tteck
# Co-Author: MickLesk (Canbiz) # Co-Author: MickLesk (Canbiz)
# License: MIT # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/seanmorley15/AdventureLog # Source: https://github.com/seanmorley15/AdventureLog
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"

View File

@ -2,8 +2,8 @@
# Copyright (c) 2021-2025 tteck # Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster) # Author: tteck (tteckster)
# License: MIT # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://www.ispyconnect.com/
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
color color

View File

@ -2,10 +2,10 @@
# Copyright (c) 2021-2025 tteck # Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster) # Author: tteck (tteckster)
# License: MIT # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://www.docker.com/
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
color color
verb_ip6 verb_ip6
catch_errors catch_errors

View File

@ -2,10 +2,10 @@
# Copyright (c) 2021-2025 tteck # Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster) # Author: tteck (tteckster)
# License: MIT # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://grafana.com/
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
color color
verb_ip6 verb_ip6
catch_errors catch_errors

View File

@ -2,10 +2,10 @@
# Copyright (c) 2021-2025 tteck # Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster) # Author: tteck (tteckster)
# License: MIT # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://alpinelinux.org/
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
color color
verb_ip6 verb_ip6
catch_errors catch_errors

View File

@ -3,7 +3,7 @@
# Copyright (c) 2021-2025 community-scripts ORG # Copyright (c) 2021-2025 community-scripts ORG
# Author: nicedevil007 (NiceDevil) # Author: nicedevil007 (NiceDevil)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://it-tools.tech/
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
color color

View File

@ -2,10 +2,10 @@
# Copyright (c) 2021-2025 tteck # Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster) # Author: tteck (tteckster)
# License: MIT # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://nextcloud.com/
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
color color
verb_ip6 verb_ip6
catch_errors catch_errors

View File

@ -2,10 +2,10 @@
# Copyright (c) 2021-2025 tteck # Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster) # Author: tteck (tteckster)
# License: MIT # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://github.com/dani-garcia/vaultwarden
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
color color
verb_ip6 verb_ip6
catch_errors catch_errors

View File

@ -2,10 +2,10 @@
# Copyright (c) 2021-2025 tteck # Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster) # Author: tteck (tteckster)
# License: MIT # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://www.zigbee2mqtt.io/
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
color color
verb_ip6 verb_ip6
catch_errors catch_errors

View File

@ -2,8 +2,8 @@
# Copyright (c) 2021-2025 tteck # Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster) # Author: tteck (tteckster)
# License: MIT # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # Source: https://cassandra.apache.org/_/index.html
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH" source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
color color

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