Compare commits

...

215 Commits

Author SHA1 Message Date
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
5f2163bff4 Update CHANGELOG.md (#2679)
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
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-26 23:35:46 +01:00
9c59bdaea1 Fix: Homarr - Manually correct db-migration wrong-folder (#2676)
* Update homarr-install.sh

* Update homarr.sh
2025-02-26 23:23:03 +01:00
7f4c116b2c Update zigbee2mqtt-install.sh 2025-02-26 20:08:01 +01:00
ba842a1e49 Update CHANGELOG.md (#2672)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-26 19:52:10 +01:00
41f4aebdc7 Fix infinite spinner (#2673) 2025-02-26 19:51:46 +01:00
c12470ff12 Fix: SABnzbd - Removed few artefacts in the code preventing the update (#2670)
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 copy files to folder

* Fix untaring the archive
2025-02-26 19:20:48 +01:00
6722e52c9b Update CHANGELOG.md (#2664)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-26 18:43:25 +01:00
e68355d880 Update .app files (#2665)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-26 16:21:35 +01:00
7d29d8a05a New Script: Outline (#2653)
* Added Outline script

* Update outline-install.sh
2025-02-26 16:17:22 +01:00
e6792790cc Update autolabeler.yml (#2660) 2025-02-26 15:51:30 +02:00
4354079c4e Update CHANGELOG.md (#2659)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-26 14:45:52 +01:00
a02a9d803e Update CHANGELOG.md (#2652)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-26 14:39:16 +01:00
46462a790c [gh] Furhter Impove Changelog Workflow (#2655)
* Impove Workflow

* Impove Workflow
2025-02-26 14:38:35 +01:00
a971cedde5 Improve application description for website (#2658) 2025-02-26 14:32:16 +01:00
fda9557811 Kimai: add local.yaml & fix path permissions (#2646)
* Update kimai-install.sh

* Update kimai.sh

* Update kimai.sh
2025-02-26 13:16:11 +01:00
633dbe3e2b Update CHANGELOG.md (#2648)
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-02-26 09:57:04 +01:00
981baed9d3 PiHole: Fix Unbound sed for DNS (#2647) 2025-02-26 09:50:13 +01:00
90fc30a228 Update CHANGELOG.md (#2645) 2025-02-26 10:43:30 +02:00
0641ec1e2a fix(pocketid): Website and documentation links updated (#2643)
fix: #2639
2025-02-26 09:35:22 +01:00
82d4ee01d2 Alpine IT-Tools fix typo "unexpected EOF while looking for matching `"' (#2644) 2025-02-26 09:18:00 +01:00
d564dc0ecb Update CHANGELOG.md (#2634)
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-02-25 12:38:57 +01:00
cb462dcb39 Update add-tailscale-lxc.sh (#2633) 2025-02-25 11:41:08 +01:00
3401b76c44 Updated Changelog Workflow (#2632) 2025-02-25 11:27:31 +01:00
599a518cc3 Update CHANGELOG.md (#2631)
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-02-25 09:27:14 +01:00
59223628af Update Tailscale-lxc Json: Add message for Supported OS (#2629)
* Update add-tailscale-lxc.json

* Update json/add-tailscale-lxc.json

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>

* Update json/add-tailscale-lxc.json

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>

---------

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2025-02-25 09:20:41 +01:00
029332fb51 Revert "[gh] Update Changelog Workflow (#2621)" (#2630)
This reverts commit 893bff1b59.
2025-02-25 09:20:09 +01:00
aba73bd0f8 Update CHANGELOG.md (#2628)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-25 09:00:28 +01:00
893bff1b59 [gh] Update Changelog Workflow (#2621)
* Update Workflow

* Update Workflow
2025-02-25 08:55:17 +01:00
bef3ccd164 Update omada.sh 2025-02-25 08:46:18 +01:00
02fb3ab9b4 Update omada-install.sh 2025-02-25 08:44:53 +01:00
87c17fc16d Downgrade mongodb to v7.0 when installing Omada controller (#2625) 2025-02-25 08:42:48 +01:00
03424f0474 Update bookstack.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
Frontend CI/CD / build (push) Waiting to run
Frontend CI/CD / deploy (push) Blocked by required conditions
2025-02-24 17:19:18 +01:00
bf9edf41d9 Update CHANGELOG.md (#2620)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 16:40:39 +01:00
377d11bf48 Fix: Authelia - Make user enter their domain manually (#2618)
* Make user enter domain manually

* Update json to remind user

* Update authelia.json

---------

Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-02-24 16:19:41 +01:00
42ad6832ea Update CHANGELOG.md (#2617)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 15:12:00 +01:00
e2b6296cdf Update changelog-pr-config.json 2025-02-24 15:11:21 +01:00
a3b1984d0a Update changelog-pr-config.json 2025-02-24 15:10:26 +01:00
f24286b717 Update CHANGELOG.md (#2616)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 15:08:16 +01:00
375275b9c0 Update changelog-pr.yml 2025-02-24 15:07:13 +01:00
8c41fb692b Update autolabeler.yml 2025-02-24 15:04:11 +01:00
5de3075252 Update autolabeler.yml 2025-02-24 15:03:37 +01:00
c72e8d3da6 Update CHANGELOG.md (#2614)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 14:55:53 +01:00
40469c5de5 [gh] Update Script Test Workflow (#2599)
* Update Workflow

* Update Workflow
2025-02-24 14:54:51 +01:00
6827056a1d Fix: Firefly III - Update-Script based on their docs (#2534)
* Fix: Update-Script Firefly III Based on there docs

* Update autolabeler.yml

* Update autolabeler.yml

* Update firefly.sh

* Update firefly.sh
2025-02-24 14:52:23 +01:00
1172662095 Fix: Omada check for AVX Support and use the correct MongoDB Version (#2600)
* Update omada-install.sh

* Update omada-install.sh

* Update omada.sh
2025-02-24 14:50:09 +01:00
43dc12074d Update CHANGELOG.md (#2613)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 14:46:41 +01:00
6eb272ba4a Update .app files (#2612)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-24 14:46:13 +01:00
1bb6e4e899 Update CHANGELOG.md (#2611)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 14:45:54 +01:00
157657b298 Update date in json (#2610)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-24 14:45:41 +01:00
188712936f New Script: wger (#2574)
* Add wger script

* fixes

* fixes v2

* fix json

* Moved Apache config
2025-02-24 14:41:06 +01:00
0e5be846be Fix config file missing domain if hostname fails (#2609) 2025-02-24 14:39:35 +01:00
05364685af Update CHANGELOG.md (#2606)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 14:28:40 +01:00
03a2c41718 Update create_lxc.sh 2025-02-24 14:23:05 +01:00
de4f7c3166 Feature: Template-Check, Better Handling of Downloads, Better Network… (#2592)
* Feature: Template-Check, Better Handling of Downloads, Better Network Check, Better CTID check

* fix missing }

* Update misc/build.func

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

* remove useless space

---------

Co-authored-by: Michel Roegl-Brunner <73236783+michelroegl-brunner@users.noreply.github.com>
2025-02-24 13:55:31 +01:00
ba0153539d Update CHANGELOG.md (#2605)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 13:43:14 +01:00
8a64d345a4 Update pihole.json (#2602) 2025-02-24 13:42:36 +01:00
62939edc2e Update AppName.md & AppName.sh (#2603) 2025-02-24 13:42:04 +01:00
56a7505f15 Fix: Authelia Unbound Variable Argon2id (#2604) 2025-02-24 13:40:09 +01:00
01a02c41ff Update CHANGELOG.md (#2597)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 13:13:32 +01:00
a03a1034de Fix Docmost: default upload size and saving data when updating (#2598) 2025-02-24 13:10:32 +01:00
ece3ad2b13 Feature: Use Verbose Mode for all Scripts (removed &>/dev/null) (#2596)
* Feature: Use Verbose Mode for all Scripts (removed &>/dev/null)

* Update crafty-controller.sh
2025-02-24 12:49:16 +01:00
20cc7572a5 Update CHANGELOG.md (#2595)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 12:27:20 +01:00
7700b1a541 Update .app files (#2594)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-24 12:26:50 +01:00
fc9a7f2cd4 Update date in json (#2593)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-24 12:26:34 +01:00
a97a56bf88 New Script: VictoriaMetrics (#2565)
* Add VictoriaMetrics script

* fix file name

* Update json/victoriametrics.json

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

* Update ct/victoriametrics.sh

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

* Update victoriametrics.sh

---------

Co-authored-by: bvdberg01 <74251551+bvdberg01@users.noreply.github.com>
2025-02-24 12:25:18 +01:00
de2e785731 Update CHANGELOG.md (#2591)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 11:31:13 +01:00
eb3a2e41ed Update CHANGELOG.md (#2588)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 11:25:30 +01:00
acf5eda756 Fix: Wireguard - Restart wgdashboard after update (#2587)
Fix: Restart wgdashboard automatically after update
2025-02-24 11:24:58 +01:00
df110695cd Update .app files (#2590)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-24 11:24:48 +01:00
ebf63f55e6 Update date in json (#2589)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-24 11:24:25 +01:00
0a1248861b New Script: Authelia (#2060)
* fixed subscription nag removal

* Authelia + Dev env

* unbound var fix

* fixes

* service start and update function

* remove dev env

* remove dev env

* Apply suggestions from code review

Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>

* Update authelia.sh

* Update authelia-install.sh

---------

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2025-02-24 11:22:43 +01:00
10d4ce4eef Verbose_Update (#2583) 2025-02-24 11:18:38 +01:00
35f635bdb4 Update CHANGELOG.md (#2585)
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-02-24 10:06:43 +01:00
27c764afd3 Fix Jupyter Json (#2584) 2025-02-24 09:46:49 +01:00
1f500d5aeb Update CHANGELOG.md (#2581)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 09:24:08 +01:00
4e13134774 Update .app files (#2582)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-02-24 09:18:51 +01:00
2dbd03b74c New Script: Jupyter Notebook (#2561)
* Add jupyter notebook script, install script and json

* Add jupyter notebook script, install script and json

* Update jupyternotebook.sh

* Update jupyternotebook-install.sh

* Update jupyternotebook.sh

* Update jupyternotebook-install.sh

* Update jupyternotebook.json

---------

Co-authored-by: Dat Ta <datta@macmini.homeserver.local>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-02-24 09:10:43 +01:00
0084169c02 Update CHANGELOG.md (#2579)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-24 08:42:43 +01:00
4aabbefcc8 fix: homarr db migration (#2575)
* Update homarr.sh

* Update homarr-install.sh
2025-02-24 08:23:54 +01:00
663 changed files with 6121 additions and 1958 deletions

View File

@ -95,7 +95,7 @@ Example:
>| Variable | Description | Notes | >| Variable | Description | Notes |
>|----------|-------------|-------| >|----------|-------------|-------|
>| `APP` | Application name | Must match ct\AppName.sh | >| `APP` | Application name | Must match ct\AppName.sh |
>| `TAGS` | Proxmox display tags without Spaces, only ; | Limit the number | >| `var_tags` | Proxmox display tags without Spaces, only ; | Limit the number |
>| `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 |
@ -193,13 +193,13 @@ wget -q
unzip -q unzip -q
``` ```
- If a command does not come with this functionality use `&>/dev/null` to suppress it's output. - If a command does not come with this functionality use `$STD` to suppress it's output.
Example: Example:
```bash ```bash
php artisan migrate --force &>/dev/null $STD php artisan migrate --force
php artisan config:clear &>/dev/null $STD php artisan config:clear
``` ```
### 3.5 **Backups** ### 3.5 **Backups**
@ -247,7 +247,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

@ -8,7 +8,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
# App Default Values # App Default Values
APP="[APP_NAME]" APP="[APP_NAME]"
# Name of the app (e.g. Google, Adventurelog, Apache-Guacamole" # Name of the app (e.g. Google, Adventurelog, Apache-Guacamole"
TAGS="[TAGS]" var_tags="[TAGS]"
# Tags for Proxmox VE, maximum 2 pcs., no spaces allowed, separated by a semicolon ; (e.g. database | adblock;dhcp) # Tags for Proxmox VE, maximum 2 pcs., no spaces allowed, separated by a semicolon ; (e.g. database | adblock;dhcp)
var_cpu="[CPU]" var_cpu="[CPU]"
# Number of cores (1-X) (e.g. 4) - default are 2 # Number of cores (1-X) (e.g. 4) - default are 2

View File

@ -1,17 +1,5 @@
{ {
"breaking change": [
{
"fileStatus": "renamed",
"includeGlobs": ["ct/**", "install/**", "misc/**", "turnkey/**", "vm/**"],
"excludeGlobs": []
},
{
"fileStatus": "removed",
"includeGlobs": ["ct/**", "install/**", "misc/**", "turnkey/**", "vm/**"],
"excludeGlobs": []
}
],
"new script": [ "new script": [
{ {
"fileStatus": "added", "fileStatus": "added",
@ -33,10 +21,17 @@
"excludeGlobs": [] "excludeGlobs": []
} }
], ],
"rename script": [ "maintenance": [
{ {
"fileStatus": "renamed", "fileStatus": null,
"includeGlobs": ["ct/**", "install/**", "misc/**", "turnkey/**", "vm/**"], "includeGlobs": ["*.md", ".github/**", "misc/*.func", "ct/create_lxc.sh", "api/**"],
"excludeGlobs": []
}
],
"core": [
{
"fileStatus": null,
"includeGlobs": ["misc/*.func", "ct/create_lxc.sh"],
"excludeGlobs": [] "excludeGlobs": []
} }
], ],
@ -47,20 +42,28 @@
"excludeGlobs": [] "excludeGlobs": []
} }
], ],
"maintenance": [ "api": [
{
"fileStatus": null,
"includeGlobs": ["*.md", ".github/**", "misc/*.func", "ct/create_lxc.sh"],
"excludeGlobs": ["misc/api.func"]
}
],
"api": [
{ {
"fileStatus": null, "fileStatus": null,
"includeGlobs": ["api/**", "misc/api.func"], "includeGlobs": ["api/**", "misc/api.func"],
"excludeGlobs": [] "excludeGlobs": []
} }
], ],
"github": [
{
"fileStatus": null,
"includeGlobs": [".github/**"],
"excludeGlobs": []
}
],
"json": [
{
"fileStatus": "modified",
"includeGlobs": ["json/**"],
"excludeGlobs": []
}
],
"high risk": [ "high risk": [
{ {
"fileStatus": null, "fileStatus": null,
@ -68,4 +71,6 @@
"excludeGlobs": [] "excludeGlobs": []
} }
] ]
}
}

View File

@ -1,42 +1,97 @@
[ [
{
"title": "💥 Breaking Changes",
"labels": ["breaking change"]
},
{ {
"title": "🆕 New Scripts", "title": "🆕 New Scripts",
"labels": ["new script"] "labels": ["new script"]
}, },
{ {
"title": "🚀 Updated Scripts", "title": "🚀 Updated Scripts",
"labels": ["update script"] "labels": ["update script"],
}, "subCategories": [
{ {
"title": "🐞 Bug Fixes (Updated Scripts)", "title": "🐞 Bug Fixes",
"labels": ["update script", "bugfix"] "labels": ["bugfix"],
}, "notes" : []
{ },
"title": "✨ Feature Updates (Updated Scripts)", {
"labels": ["update script", "feature"] "title": "✨ New Features",
}, "labels": ["feature"],
{ "notes" : []
"title": "✨ New Features", },
"labels": ["feature"] {
}, "title": "💥 Breaking Changes",
{ "labels": ["breaking change"],
"title": "🌐 Website", "notes" : []
"labels": ["website"] }
}, ]
{
"title": "📡 API",
"labels": ["api"]
}, },
{ {
"title": "🧰 Maintenance", "title": "🧰 Maintenance",
"labels": ["maintenance"] "labels": ["maintenance"],
"subCategories": [
{
"title": "🐞 Bug Fixes",
"labels": ["bugfix"],
"notes" : []
},
{
"title": "✨ New Features",
"labels": ["feature"],
"notes" : []
},
{
"title": "💥 Breaking Changes",
"labels": ["breaking change"],
"notes" : []
},
{
"title": "📡 API",
"labels": ["api"],
"notes" : []
},
{
"title": "💾 Core",
"labels": ["core"],
"notes" : []
},
{
"title": "📂 Github",
"labels": ["github"],
"notes" : []
}
]
},
{
"title": "🌐 Website",
"labels": ["website"],
"subCategories": [
{
"title": "🐞 Bug Fixes",
"labels": ["bugfix"],
"notes" : []
},
{
"title": "✨ New Features",
"labels": ["feature"],
"notes" : []
},
{
"title": "💥 Breaking Changes",
"labels": ["breaking change"],
"notes" : []
},
{
"title": "📝 Script Information",
"labels": ["json"],
"notes" : []
}
]
}, },
{ {
"title": "❔ Unlabelled", "title": "❔ Unlabelled",
"labels": [] "labels": []
},
{
"title": "💥 Breaking Changes",
"labels": ["breaking change"]
} }
] ]

View File

@ -1,25 +1,25 @@
## ✍️ Description ## ✍️ Description
<!-- Provide a clear and concise description of your changes. --> <!-- Provide a clear and concise description of your changes. -->
## 🔗 Related PR / Discussion / Issue ## 🔗 Related PR / Discussion / Issue
Link: # Link: #
## ✅ Prerequisites ## ✅ Prerequisites
Before this PR can be reviewed, the following must be completed: Before this PR can be reviewed, the following must be completed:
- [] **Self-review performed** Code follows established patterns and conventions. - [] **Self-review performed** Code follows established patterns and conventions.
- [] **Testing performed** Changes have been thoroughly tested and verified. - [] **Testing performed** Changes have been thoroughly tested and verified.
## 🛠️ Type of Change ## 🛠️ Type of Change
Select all that apply:
- [] 🐞 **Bug fix** Resolves an issue without breaking functionality.
- [] ✨ **New feature** Adds new, non-breaking functionality.
- [] 💥 **Breaking change** Alters existing functionality in a way that may require updates.
- [] 🆕 **New script** A fully functional and tested script or script set.
Select all that apply:
- [] 🆕 **New script** A fully functional and tested script or script set.
- [] 🐞 **Bug fix** Resolves an issue without breaking functionality.
- [] ✨ **New feature** Adds new, non-breaking functionality.
- [] 💥 **Breaking change** Alters existing functionality in a way that may require updates.
## 📋 Additional Information (optional) ## 📋 Additional Information (optional)
<!-- Provide extra context, screenshots, or references if needed. --> <!-- Provide extra context, screenshots, or references if needed. -->

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:
@ -33,25 +33,26 @@ jobs:
const prNumber = context.payload.pull_request.number; const prNumber = context.payload.pull_request.number;
const prBody = context.payload.pull_request.body.toLowerCase(); const prBody = context.payload.pull_request.body.toLowerCase();
// Label-Sammlung (um doppelte API-Calls zu vermeiden)
let labelsToAdd = new Set(); let labelsToAdd = new Set();
// Prüfe Datei-Änderungen
const prListFilesResponse = await github.rest.pulls.listFiles({ const prListFilesResponse = await github.rest.pulls.listFiles({
owner: context.repo.owner, owner: context.repo.owner,
repo: context.repo.repo, repo: context.repo.repo,
pull_number: prNumber, pull_number: prNumber,
}); });
const prFiles = prListFilesResponse.data; const prFiles = prListFilesResponse.data;
// Apply labels based on file changes
for (const [label, rules] of Object.entries(autolabelerConfig)) { for (const [label, rules] of Object.entries(autolabelerConfig)) {
const shouldAddLabel = prFiles.some((prFile) => { const shouldAddLabel = prFiles.some((prFile) => {
return rules.some((rule) => { return rules.some((rule) => {
const isFileStatusMatch = rule.fileStatus ? rule.fileStatus === prFile.status : true; const isFileStatusMatch = rule.fileStatus ? rule.fileStatus === prFile.status : true;
const isIncludeGlobMatch = rule.includeGlobs.some((glob) => minimatch(prFile.filename, glob)); const isIncludeGlobMatch = rule.includeGlobs.some((glob) => minimatch(prFile.filename, glob));
const isExcludeGlobMatch = rule.excludeGlobs.some((glob) => minimatch(prFile.filename, glob)); const isExcludeGlobMatch = rule.excludeGlobs.some((glob) => minimatch(prFile.filename, glob));
return isFileStatusMatch && isIncludeGlobMatch && !isExcludeGlobMatch; return isFileStatusMatch && isIncludeGlobMatch && !isExcludeGlobMatch;
}); });
}); });
@ -60,27 +61,24 @@ jobs:
labelsToAdd.add(label); labelsToAdd.add(label);
} }
} }
// Prüfe PR-Template Checkboxen mit den korrekten Labels
const templateLabelMappings = { const templateLabelMappings = {
"🐞 bug fix": "bugfix", "🐞 **Bug fix**": "bugfix",
"✨ new feature": "feature", "✨ **New feature**": "feature",
"💥 breaking change": "breaking change", "💥 **Breaking change**": "breaking change",
"🆕 new script": "new script"
}; };
for (const [checkbox, label] of Object.entries(templateLabelMappings)) { for (const [checkbox, label] of Object.entries(templateLabelMappings)) {
const regex = new RegExp(`- \\[(.*?)\\] ${checkbox}`, "i"); const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
const match = prBody.match(regex); const regex = new RegExp(`- \\[(x|X)\\]\\s*.*${escapedCheckbox}`, "i");
if (match && match[1].trim() !== "") { // Checkbox ist gesetzt const match = prBody.match(regex);
if (match) {
console.log(`Match: ${match}`);
labelsToAdd.add(label); labelsToAdd.add(label);
} }
} }
// Debugging: Anzeigen, welche Labels tatsächlich erkannt wurden
console.log(`Labels to add: ${Array.from(labelsToAdd).join(", ")}`); console.log(`Labels to add: ${Array.from(labelsToAdd).join(", ")}`);
// Labels setzen, falls neue erkannt wurden
if (labelsToAdd.size > 0) { if (labelsToAdd.size > 0) {
console.log(`Adding labels ${Array.from(labelsToAdd).join(", ")} to PR ${prNumber}`); console.log(`Adding labels ${Array.from(labelsToAdd).join(", ")} to PR ${prNumber}`);
await github.rest.issues.addLabels({ await github.rest.issues.addLabels({

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
@ -30,7 +30,6 @@ jobs:
- name: Get latest dates in changelog - name: Get latest dates in changelog
run: | run: |
# Extrahiere die neuesten zwei Daten aus dem Changelog
DATES=$(grep -E '^## [0-9]{4}-[0-9]{2}-[0-9]{2}' CHANGELOG.md | head -n 2 | awk '{print $2}') DATES=$(grep -E '^## [0-9]{4}-[0-9]{2}-[0-9]{2}' CHANGELOG.md | head -n 2 | awk '{print $2}')
LATEST_DATE=$(echo "$DATES" | sed -n '1p') LATEST_DATE=$(echo "$DATES" | sed -n '1p')
@ -55,7 +54,31 @@ jobs:
const configPath = path.resolve(process.env.CONFIG_PATH); const configPath = path.resolve(process.env.CONFIG_PATH);
const fileContent = await fs.readFile(configPath, 'utf-8'); const fileContent = await fs.readFile(configPath, 'utf-8');
const changelogConfig = JSON.parse(fileContent); const changelogConfig = JSON.parse(fileContent);
const categorizedPRs = changelogConfig.map(obj => ({ ...obj, notes: [] }));
const categorizedPRs = changelogConfig.map(obj => ({
...obj,
notes: [],
subCategories: obj.subCategories ?? (
obj.labels.includes("update script") ? [
{ title: "🐞 Bug Fixes", labels: ["bugfix"], notes: [] },
{ title: "✨ New Features", labels: ["feature"], notes: [] },
{ title: "💥 Breaking Changes", labels: ["breaking change"], notes: [] }
] :
obj.labels.includes("maintenance") ? [
{ title: "🐞 Bug Fixes", labels: ["bugfix"], notes: [] },
{ title: "✨ New Features", labels: ["feature"], notes: [] },
{ title: "💥 Breaking Changes", labels: ["breaking change"], notes: [] },
{ title: "📡 API", labels: ["api"], notes: [] },
{ title: "Github", labels: ["github"], notes: [] }
] :
obj.labels.includes("website") ? [
{ title: "🐞 Bug Fixes", labels: ["bugfix"], notes: [] },
{ title: "✨ New Features", labels: ["feature"], notes: [] },
{ title: "💥 Breaking Changes", labels: ["breaking change"], notes: [] },
{ title: "Script Information", labels: ["json"], notes: [] }
] : []
)
}));
const latestDateInChangelog = new Date(process.env.LATEST_DATE); const latestDateInChangelog = new Date(process.env.LATEST_DATE);
latestDateInChangelog.setUTCHours(23, 59, 59, 999); latestDateInChangelog.setUTCHours(23, 59, 59, 999);
@ -70,24 +93,40 @@ jobs:
per_page: 100, per_page: 100,
}); });
pulls.filter(pr => pulls.filter(pr =>
pr.merged_at && pr.merged_at &&
new Date(pr.merged_at) > latestDateInChangelog && new Date(pr.merged_at) > latestDateInChangelog &&
!pr.labels.some(label => ["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL].includes(label.name.toLowerCase())) !pr.labels.some(label =>
["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL].includes(label.name.toLowerCase())
)
).forEach(pr => { ).forEach(pr => {
const prLabels = pr.labels.map(label => label.name.toLowerCase()); const prLabels = pr.labels.map(label => label.name.toLowerCase());
const prNote = `- ${pr.title} [@${pr.user.login}](https://github.com/${pr.user.login}) ([#${pr.number}](${pr.html_url}))`; const prNote = `- ${pr.title} [@${pr.user.login}](https://github.com/${pr.user.login}) ([#${pr.number}](${pr.html_url}))`;
for (const { labels, notes } of categorizedPRs) { const updateScriptsCategory = categorizedPRs.find(category =>
if (labels.length === 0 || labels.some(label => prLabels.includes(label))) { category.labels.some(label => prLabels.includes(label))
notes.push(prNote); );
break;
if (updateScriptsCategory) {
const subCategory = updateScriptsCategory.subCategories.find(sub =>
sub.labels.some(label => prLabels.includes(label))
);
if (subCategory) {
subCategory.notes.push(prNote);
} else {
updateScriptsCategory.notes.push(prNote);
} }
} }
}); });
console.log(JSON.stringify(categorizedPRs, null, 2));
return categorizedPRs; return categorizedPRs;
- name: Update CHANGELOG.md - name: Update CHANGELOG.md
uses: actions/github-script@v7 uses: actions/github-script@v7
with: with:
@ -100,17 +139,36 @@ jobs:
const changelogPath = path.resolve('CHANGELOG.md'); const changelogPath = path.resolve('CHANGELOG.md');
const categorizedPRs = ${{ steps.get-categorized-prs.outputs.result }}; const categorizedPRs = ${{ steps.get-categorized-prs.outputs.result }};
let newReleaseNotes = `## ${today}\n\n### Changes\n\n`; console.log(JSON.stringify(categorizedPRs, null, 2));
for (const { title, notes } of categorizedPRs) {
if (notes.length > 0) {
newReleaseNotes += `### ${title}\n\n${notes.join("\n")}\n\n`;
}
}
let newReleaseNotes = `## ${today}\n\n`;
for (const { title, notes, subCategories } of categorizedPRs) {
const hasSubcategories = subCategories && subCategories.length > 0;
const hasMainNotes = notes.length > 0;
const hasSubNotes = hasSubcategories && subCategories.some(sub => sub.notes && sub.notes.length > 0);
if (hasMainNotes || hasSubNotes) {
newReleaseNotes += `### ${title}\n\n`;
}
if (hasMainNotes) {
newReleaseNotes += ` ${notes.join("\n")}\n\n`;
}
if (hasSubcategories) {
for (const { title: subTitle, notes: subNotes } of subCategories) {
if (subNotes && subNotes.length > 0) {
newReleaseNotes += ` - #### ${subTitle}\n\n`;
newReleaseNotes += ` ${subNotes.join("\n ")}\n\n`;
}
}
}
}
const changelogContent = await fs.readFile(changelogPath, 'utf-8'); const changelogContent = await fs.readFile(changelogPath, 'utf-8');
const changelogIncludesTodaysReleaseNotes = changelogContent.includes(`\n## ${today}`); const changelogIncludesTodaysReleaseNotes = changelogContent.includes(`\n## ${today}`);
// Ersetze oder füge Release Notes ein
const regex = changelogIncludesTodaysReleaseNotes const regex = changelogIncludesTodaysReleaseNotes
? new RegExp(`## ${today}.*(?=## ${latestDateInChangelog})`, "gs") ? new RegExp(`## ${today}.*(?=## ${latestDateInChangelog})`, "gs")
: new RegExp(`(?=## ${latestDateInChangelog})`, "gs"); : new RegExp(`(?=## ${latestDateInChangelog})`, "gs");
@ -165,4 +223,4 @@ jobs:
PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number') PR_NUMBER=$(gh pr list --head "${BRANCH_NAME}" --json number --jq '.[].number')
if [ -n "$PR_NUMBER" ]; then if [ -n "$PR_NUMBER" ]; then
gh pr review $PR_NUMBER --approve gh pr review $PR_NUMBER --approve
fi fi

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,53 @@
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: Extract first 5000 characters from CHANGELOG.md
run: head -c 5000 CHANGELOG.md > changelog_cropped.md
- name: Debugging - Show extracted changelog
run: |
echo "=== CHANGELOG EXCERPT ==="
cat changelog_cropped.md
echo "========================="
- name: Extract relevant changelog section
run: |
YESTERDAY=$(date -u --date="yesterday" +%Y-%m-%d)
echo "Checking for changes on: $YESTERDAY"
# Extract relevant section from cropped changelog
awk -v date="## $YESTERDAY" '
$0 ~ date {found=1; next}
found && /^## [0-9]{4}-[0-9]{2}-[0-9]{2}/ {exit}
found
' changelog_cropped.md > changelog_tmp.md
echo "=== Extracted Changelog ==="
cat changelog_tmp.md
echo "==========================="
# Skip 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

@ -13,7 +13,7 @@ jobs:
run-install-script: run-install-script:
runs-on: pvenode runs-on: pvenode
steps: steps:
- name: Checkout PR branch (supports forks) - name: Checkout PR branch
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
ref: ${{ github.event.pull_request.head.ref }} ref: ${{ github.event.pull_request.head.ref }}
@ -37,7 +37,8 @@ jobs:
echo "Changed files: $CHANGED_FILES" echo "Changed files: $CHANGED_FILES"
echo "SCRIPT=$CHANGED_FILES" >> $GITHUB_ENV echo "SCRIPT=$CHANGED_FILES" >> $GITHUB_ENV
env: env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Get scripts - name: Get scripts
id: check-install-script id: check-install-script
@ -61,59 +62,71 @@ jobs:
id: run-install id: run-install
continue-on-error: true continue-on-error: true
run: | run: |
set +e set +e
#run for each files in /ct #run for each files in /ct
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 [[ $FILE =~ ^install/.*-install\.sh$ ]]; then if grep -E -q 'read\s+-r\s+-p\s+".*"\s+\w+' "$FILE"; then
CT_SCRIPT="ct/$STRIPPED_NAME.sh" echo "The script contains an interactive prompt. Skipping execution."
if [[ ! -f $CT_SCRIPT ]]; then
echo "No CT script found for $STRIPPED_NAME"
ERROR_MSG="No CT script found for $FILE"
echo "$ERROR_MSG" > result_$STRIPPED_NAME.log
continue continue
fi fi
echo "Found CT script for $STRIPPED_NAME" if [[ $FILE =~ ^install/.*-install\.sh$ ]]; then
chmod +x "$CT_SCRIPT" CT_SCRIPT="ct/$STRIPPED_NAME.sh"
RUNNING_FILE=$CT_SCRIPT if [[ ! -f $CT_SCRIPT ]]; then
elif [[ $FILE =~ ^ct/.*\.sh$ ]]; then echo "No CT script found for $STRIPPED_NAME"
INSTALL_SCRIPT="install/$STRIPPED_NAME-install.sh" ERROR_MSG="No CT script found for $FILE"
if [[ ! -f $INSTALL_SCRIPT ]]; then echo "$ERROR_MSG" > result_$STRIPPED_NAME.log
echo "No install script found for $STRIPPED_NAME" continue
ERROR_MSG="No install script found for $FILE" 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
echo "Found CT script for $STRIPPED_NAME"
chmod +x "$CT_SCRIPT"
RUNNING_FILE=$CT_SCRIPT
elif [[ $FILE =~ ^ct/.*\.sh$ ]]; then
INSTALL_SCRIPT="install/$STRIPPED_NAME-install.sh"
if [[ ! -f $INSTALL_SCRIPT ]]; then
echo "No install script found for $STRIPPED_NAME"
ERROR_MSG="No install script found for $FILE"
echo "$ERROR_MSG" > result_$STRIPPED_NAME.log
continue
fi
echo "Found install script for $STRIPPED_NAME"
chmod +x "$INSTALL_SCRIPT"
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
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 .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"
ERROR_MSG=$(./$RUNNING_FILE 2>&1 > /dev/null)
echo "Finished running $FILE"
if [ -n "$ERROR_MSG" ]; then
echo "ERROR in $STRIPPED_NAME: $ERROR_MSG"
echo "$ERROR_MSG" > result_$STRIPPED_NAME.log echo "$ERROR_MSG" > result_$STRIPPED_NAME.log
continue fi
fi done
echo "Found install script for $STRIPPED_NAME" set -e # Restore exit-on-error
chmod +x "$INSTALL_SCRIPT"
RUNNING_FILE=$FILE
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 .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"
ERROR_MSG=$(./$RUNNING_FILE 2>&1 > /dev/null)
echo "Finished running $FILE"
if [ -n "$ERROR_MSG" ]; then
echo "ERROR in $STRIPPED_NAME: $ERROR_MSG"
echo "$ERROR_MSG" > result_$STRIPPED_NAME.log
fi
done
set -e # Restore exit-on-error
- name: Cleanup PVE Node - name: Cleanup PVE Node
run: | run: |
@ -125,35 +138,40 @@ jobs:
pct stop $container_id pct stop $container_id
pct destroy $container_id pct destroy $container_id
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 253:" 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
continue continue
fi fi
ERROR_MSG=$(cat result_$STRIPPED_NAME.log) ERROR_MSG=$(cat result_$STRIPPED_NAME.log)
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.*||")
echo "Posting error message for $FILE" COMMENT_BODY=":warning: The script _**$FILE**_ failed with the following message: <br> <div><strong>${CLEANED_ERROR_MSG}</strong></div>"
echo ${CLEANED_ERROR_MSG}
gh pr comment ${{ github.event.pull_request.number }} \ # Check if the comment already exists
--repo ${{ github.repository }} \ if echo "$EXISTING_COMMENTS" | grep -qF "$COMMENT_BODY"; then
--body ":warning: The script _**$FILE**_ failed with the following message: <br> <div><strong>${CLEANED_ERROR_MSG}</strong></div>" echo "Skipping duplicate comment for $FILE"
else
echo "Posting error message for $FILE"
ERROR="true" gh pr comment ${{ github.event.pull_request.number }} \
--repo ${{ github.repository }} \
--body "$COMMENT_BODY"
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

@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG # Copyright (c) 2021-2025 community-scripts ORG
# Author: michelroegl-brunner # Author: Michel Roegl-Brunner (michelroegl-brunner)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
color() { color() {
@ -11,7 +11,7 @@ catch_errors() {
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
} }
# This function handles errors
error_handler() { error_handler() {
local line_number="$1" local line_number="$1"
local command="$2" local command="$2"
@ -21,8 +21,8 @@ error_handler() {
exit 0 exit 0
} }
verb_ip6() { verb_ip6() {
STD="" STD=""
return return
} }
msg_info() { msg_info() {
@ -30,13 +30,13 @@ msg_info() {
echo -ne "${msg}\n" echo -ne "${msg}\n"
} }
msg_ok() { msg_ok() {
local msg="$1" local msg="$1"
echo -e "${msg}\n" echo -e "${msg}\n"
} }
msg_error() { msg_error() {
local msg="$1" local msg="$1"
echo -e "${msg}\n" echo -e "${msg}\n"
} }
@ -71,7 +71,7 @@ network_check() {
} }
update_os() { update_os() {
msg_info "Updating Container OS" msg_info "Updating Container OS"
apk update apk update
apk upgrade apk upgrade
msg_ok "Updated Container OS" msg_ok "Updated Container OS"
@ -82,7 +82,5 @@ motd_ssh() {
} }
customize() { customize() {
return return
} }

View File

@ -6,12 +6,13 @@
variables() { variables() {
NSAPP=$(echo ${APP,,} | tr -d ' ') # This function sets the NSAPP variable by converting the value of the APP variable to lowercase and removing any spaces. NSAPP=$(echo ${APP,,} | tr -d ' ') # This function sets the NSAPP variable by converting the value of the APP variable to lowercase and removing any spaces.
var_install="${NSAPP}-install" # sets the var_install variable by appending "-install" to the value of NSAPP. var_install="${NSAPP}-install" # sets the var_install variable by appending "-install" to the value of NSAPP.
} }
NEXTID=$(pvesh get /cluster/nextid) NEXTID=$(pvesh get /cluster/nextid)
timezone=$(cat /etc/timezone) timezone=$(cat /etc/timezone)
header_info(){ header_info() {
return return
} }
base_settings() { base_settings() {
@ -20,10 +21,10 @@ base_settings() {
DISK_SIZE="4" DISK_SIZE="4"
CORE_COUNT="1" CORE_COUNT="1"
RAM_SIZE="1024" RAM_SIZE="1024"
VERBOSE="${1:-no}" VERBOSE="no"
PW="" PW=""
CT_ID=$NEXTID CT_ID=$NEXTID
HN="Testing" HN=$NSAPP
BRG="vmbr0" BRG="vmbr0"
NET="dhcp" NET="dhcp"
GATE="" GATE=""
@ -106,7 +107,7 @@ catch_errors() {
} }
# This function handles errors # This function handles errors
error_handler() { error_handler() {
local line_number="$1" local line_number="$1"
local command="$2" local command="$2"
SCRIPT_NAME=$(basename "$0") SCRIPT_NAME=$(basename "$0")
@ -120,17 +121,17 @@ msg_info() {
echo -ne "${msg}\n" echo -ne "${msg}\n"
} }
msg_ok() { msg_ok() {
local msg="$1" local msg="$1"
echo -e "${msg}\n" echo -e "${msg}\n"
} }
msg_error() { msg_error() {
local msg="$1" local msg="$1"
echo -e "${msg}\n" echo -e "${msg}\n"
} }
start(){ start() {
base_settings base_settings
return return
} }
@ -146,9 +147,9 @@ build_container() {
TEMP_DIR=$(mktemp -d) TEMP_DIR=$(mktemp -d)
pushd $TEMP_DIR >/dev/null pushd $TEMP_DIR >/dev/null
if [ "$var_os" == "alpine" ]; then if [ "$var_os" == "alpine" ]; then
export FUNCTIONS_FILE_PATH="$(cat /root/actions-runner/_work/ProxmoxVE/ProxmoxVE/.github/workflows/scripts/app-test/pr-alpine-install.func)" export FUNCTIONS_FILE_PATH="$(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/.github/workflows/scripts/app-test/pr-alpine-install.func)"
else else
export FUNCTIONS_FILE_PATH="$(cat /root/actions-runner/_work/ProxmoxVE/ProxmoxVE/.github/workflows/scripts/app-test/pr-install.func)" export FUNCTIONS_FILE_PATH="$(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/.github/workflows/scripts/app-test/pr-install.func)"
fi fi
export CACHER="$APT_CACHER" export CACHER="$APT_CACHER"
@ -182,9 +183,8 @@ build_container() {
" "
echo "Container ID: $CTID" echo "Container ID: $CTID"
# This executes create_lxc.sh and creates the container and .conf file # This executes create_lxc.sh and creates the container and .conf file
bash /root/actions-runner/_work/ProxmoxVE/ProxmoxVE/.github/workflows/scripts/app-test/pr-create-lxc.sh bash -c "$(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/.github/workflows/scripts/app-test/pr-create-lxc.sh)"
LXC_CONFIG=/etc/pve/lxc/${CTID}.conf LXC_CONFIG=/etc/pve/lxc/${CTID}.conf
if [ "$CT_TYPE" == "0" ]; then if [ "$CT_TYPE" == "0" ]; then
@ -233,6 +233,7 @@ EOF
fi fi
fi fi
fi fi
# This starts the container and executes <app>-install.sh # This starts the container and executes <app>-install.sh
msg_info "Starting LXC Container" msg_info "Starting LXC Container"
pct start "$CTID" pct start "$CTID"
@ -242,7 +243,7 @@ EOF
msg_error "No install script found for $APP" msg_error "No install script found for $APP"
exit 1 exit 1
fi fi
if [ "$var_os" == "alpine" ]; then if [ "$var_os" == "alpine" ]; then
sleep 3 sleep 3
pct exec "$CTID" -- /bin/sh -c 'cat <<EOF >/etc/apk/repositories pct exec "$CTID" -- /bin/sh -c 'cat <<EOF >/etc/apk/repositories
http://dl-cdn.alpinelinux.org/alpine/latest-stable/main http://dl-cdn.alpinelinux.org/alpine/latest-stable/main
@ -250,11 +251,10 @@ http://dl-cdn.alpinelinux.org/alpine/latest-stable/community
EOF' EOF'
pct exec "$CTID" -- ash -c "apk add bash >/dev/null" pct exec "$CTID" -- ash -c "apk add bash >/dev/null"
fi fi
lxc-attach -n "$CTID" -- bash -c "$(cat /root/actions-runner/_work/ProxmoxVE/ProxmoxVE/install/$var_install.sh)" $var_install.sh lxc-attach -n "$CTID" -- bash -c "$(cat /root/actions-runner/_work/ProxmoxVE/ProxmoxVE/install/$var_install.sh)"
} }
description(){ description() {
IP=$(pct exec "$CTID" ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1) IP=$(pct exec "$CTID" ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
return }
}

View File

@ -11,8 +11,9 @@ catch_errors() {
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
} }
# This function handles errors
error_handler() { error_handler() {
local exit_code="$?" local exit_code="$?"
local line_number="$1" local line_number="$1"
local command="$2" local command="$2"
local error_message="Failure in line $line_number: exit code $exit_code: while executing command $command" local error_message="Failure in line $line_number: exit code $exit_code: while executing command $command"
@ -20,7 +21,7 @@ error_handler() {
exit 100 exit 100
} }
verb_ip6() { verb_ip6() {
return return
} }
msg_info() { msg_info() {
@ -28,18 +29,17 @@ msg_info() {
echo -ne "${msg}\n" echo -ne "${msg}\n"
} }
msg_ok() { msg_ok() {
local msg="$1" local msg="$1"
echo -e "${msg}\n" echo -e "${msg}\n"
} }
msg_error() { msg_error() {
local msg="$1" local msg="$1"
echo -e "${msg}\n" echo -e "${msg}\n"
} }
VALIDCT=$(pvesm status -content rootdir | awk 'NR>1') VALIDCT=$(pvesm status -content rootdir | awk 'NR>1')
if [ -z "$VALIDCT" ]; then if [ -z "$VALIDCT" ]; then
msg_error "Unable to detect a valid Container Storage location." msg_error "Unable to detect a valid Container Storage location."
@ -64,9 +64,12 @@ function select_storage() {
CONTENT='vztmpl' CONTENT='vztmpl'
CONTENT_LABEL='Container template' CONTENT_LABEL='Container template'
;; ;;
*) false || { msg_error "Invalid storage class."; exit 201; };; *) false || {
msg_error "Invalid storage class."
exit 201
} ;;
esac esac
# This Queries all storage locations # This Queries all storage locations
local -a MENU local -a MENU
while read -r line; do while read -r line; do
@ -80,23 +83,32 @@ function select_storage() {
fi fi
MENU+=("$TAG" "$ITEM" "OFF") MENU+=("$TAG" "$ITEM" "OFF")
done < <(pvesm status -content $CONTENT | awk 'NR>1') done < <(pvesm status -content $CONTENT | awk 'NR>1')
# Select storage location # Select storage location
if [ $((${#MENU[@]}/3)) -eq 1 ]; then if [ $((${#MENU[@]} / 3)) -eq 1 ]; then
printf ${MENU[0]} printf ${MENU[0]}
else else
msg_error "STORAGE ISSUES!" msg_error "STORAGE ISSUES!"
exit 202 exit 202
fi fi
} }
[[ "${CTID:-}" ]] || {
msg_error "You need to set 'CTID' variable."
exit 203
}
[[ "${PCT_OSTYPE:-}" ]] || {
msg_error "You need to set 'PCT_OSTYPE' variable."
exit 204
}
# Test if ID is valid
[ "$CTID" -ge "100" ] || {
msg_error "ID cannot be less than 100."
exit 205
}
[[ "${CTID:-}" ]] || { msg_error "You need to set 'CTID' variable."; exit 203; } # Test if ID is in use
[[ "${PCT_OSTYPE:-}" ]] || { msg_error "You need to set 'PCT_OSTYPE' variable."; exit 204; }
[ "$CTID" -ge "100" ] || { msg_error "ID cannot be less than 100."; exit 205; }
if pct status $CTID &>/dev/null; then if pct status $CTID &>/dev/null; then
echo -e "ID '$CTID' is already in use." echo -e "ID '$CTID' is already in use."
unset CTID unset CTID
@ -110,10 +122,12 @@ CONTAINER_STORAGE=$(select_storage container) || exit
pveam update >/dev/null pveam update >/dev/null
TEMPLATE_SEARCH=${PCT_OSTYPE}-${PCT_OSVERSION:-} TEMPLATE_SEARCH=${PCT_OSTYPE}-${PCT_OSVERSION:-}
mapfile -t TEMPLATES < <(pveam available -section system | sed -n "s/.*\($TEMPLATE_SEARCH.*\)/\1/p" | sort -t - -k 2 -V) mapfile -t TEMPLATES < <(pveam available -section system | sed -n "s/.*\($TEMPLATE_SEARCH.*\)/\1/p" | sort -t - -k 2 -V)
[ ${#TEMPLATES[@]} -gt 0 ] || { msg_error "Unable to find a template when searching for '$TEMPLATE_SEARCH'."; exit 207; } [ ${#TEMPLATES[@]} -gt 0 ] || {
msg_error "Unable to find a template when searching for '$TEMPLATE_SEARCH'."
exit 207
}
TEMPLATE="${TEMPLATES[-1]}" TEMPLATE="${TEMPLATES[-1]}"
TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE" TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE"
@ -121,28 +135,29 @@ TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE"
if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE"; then if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE"; then
[[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH" [[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH"
pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null || pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null ||
{ msg_error "A problem occurred while downloading the LXC template."; exit 208; } {
msg_error "A problem occurred while downloading the LXC template."
exit 208
}
fi fi
grep -q "root:100000:65536" /etc/subuid || echo "root:100000:65536" >>/etc/subuid
grep -q "root:100000:65536" /etc/subuid || echo "root:100000:65536" >> /etc/subuid grep -q "root:100000:65536" /etc/subgid || echo "root:100000:65536" >>/etc/subgid
grep -q "root:100000:65536" /etc/subgid || echo "root:100000:65536" >> /etc/subgid
PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}}) PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}})
[[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs "$CONTAINER_STORAGE:${PCT_DISK_SIZE:-8}") [[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs "$CONTAINER_STORAGE:${PCT_DISK_SIZE:-8}")
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
[[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH"
pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null ||
{
msg_error "A problem occurred while re-downloading the LXC template."
exit 208
}
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
[[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH" msg_error "A problem occurred while trying to create container after re-downloading template."
exit 200
pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null ||
{ msg_error "A problem occurred while re-downloading the LXC template."; exit 208; }
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
msg_error "A problem occurred while trying to create container after re-downloading template."
exit 200
fi
fi fi
fi

View File

@ -1,31 +1,31 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG # Copyright (c) 2021-2025 community-scripts ORG
# Author: michelroegl-brunner # Author: Michel Roegl-Brunner (michelroegl-brunner)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE # License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
color() { color() {
return return
} }
SCRIPT_NAME="${BASH_SOURCE[0]:-unknown_script}"
catch_errors() { catch_errors() {
set -Euoe pipefail set -Euo pipefail
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
} }
error_handler() { error_handler() {
local line_number="$1" local line_number="$1"
local command="$2" local command="$2"
local error_message="$SCRIPT_NAME: Failure in line $line_number while executing command '$command'" local error_message="Failure in line $line_number while executing command '$command'"
echo -e "\n$error_message" echo -e "\n$error_message\n" >&2
exit 300 exit 1
} }
verb_ip6() { verb_ip6() {
STD="silent" STD="silent"
silent() { silent() {
"$@" >/dev/null 2>&1 || error_handler "${BASH_LINENO[0]}" "$*" "$@" >/dev/null 2>&1 || error_handler "${BASH_LINENO[0]}" "$*"
} }
return
} }
msg_info() { msg_info() {
@ -33,19 +33,21 @@ msg_info() {
echo -ne "${msg}\n" echo -ne "${msg}\n"
} }
msg_ok() { msg_ok() {
local msg="$1" local msg="$1"
echo -e "${msg}\n" echo -e "${msg}\n"
} }
msg_error() { msg_error() {
local msg="$1" local msg="$1"
echo -e "${msg}\n" echo -e "${msg}\n"
} }
RETRY_NUM=10
RETRY_EVERY=3 RETRY_NUM=10
RETRY_EVERY=3
setting_up_container() { setting_up_container() {
sed -i "/$LANG/ s/\(^# \)//" /etc/locale.gen sed -i "/$LANG/ s/\(^# \)//" /etc/locale.gen
locale_line=$(grep -v '^#' /etc/locale.gen | grep -E '^[a-zA-Z]' | awk '{print $1}' | head -n 1) locale_line=$(grep -v '^#' /etc/locale.gen | grep -E '^[a-zA-Z]' | awk '{print $1}' | head -n 1)
echo "LANG=${locale_line}" >/etc/default/locale echo "LANG=${locale_line}" >/etc/default/locale
@ -53,12 +55,11 @@ setting_up_container() {
export LANG=${locale_line} export LANG=${locale_line}
echo $tz >/etc/timezone echo $tz >/etc/timezone
ln -sf /usr/share/zoneinfo/$tz /etc/localtime ln -sf /usr/share/zoneinfo/$tz /etc/localtime
for ((i = RETRY_NUM; i > 0; i--)); do for ((i = RETRY_NUM; i > 0; i--)); do
if [ "$(hostname -I)" != "" ]; then if [ "$(hostname -I)" != "" ]; then
break break
fi fi
echo 1>&2 -en "No Network! "
sleep $RETRY_EVERY sleep $RETRY_EVERY
done done
if [ "$(hostname -I)" = "" ]; then if [ "$(hostname -I)" = "" ]; then
@ -68,8 +69,6 @@ setting_up_container() {
fi fi
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
systemctl disable -q --now systemd-networkd-wait-online.service systemctl disable -q --now systemd-networkd-wait-online.service
msg_ok "Set up Container OS"
msg_ok "Network Connected: $(hostname -I)"
} }
network_check() { network_check() {
@ -79,11 +78,10 @@ network_check() {
} }
update_os() { update_os() {
msg_info "Updating Container OS" export DEBIAN_FRONTEND=noninteractive
apt-get update apt-get update >/dev/null 2>&1
apt-get -o Dpkg::Options::="--force-confold" -y dist-upgrade apt-get -o Dpkg::Options::="--force-confold" -y dist-upgrade >/dev/null
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
msg_ok "Updated Container OS"
} }
motd_ssh() { motd_ssh() {
@ -91,5 +89,5 @@ motd_ssh() {
} }
customize() { customize() {
return return
} }

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,283 @@ 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-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
### 🆕 New Scripts
- New Script: Outline [@tremor021](https://github.com/tremor021) ([#2653](https://github.com/community-scripts/ProxmoxVE/pull/2653))
### 🚀 Updated Scripts
- Fix: SABnzbd - Removed few artefacts in the code preventing the update [@tremor021](https://github.com/tremor021) ([#2670](https://github.com/community-scripts/ProxmoxVE/pull/2670))
- #### 🐞 Bug Fixes
- Fix: Homarr - Manually correct db-migration wrong-folder [@CrazyWolf13](https://github.com/CrazyWolf13) ([#2676](https://github.com/community-scripts/ProxmoxVE/pull/2676))
- Kimai: add local.yaml & fix path permissions [@MickLesk](https://github.com/MickLesk) ([#2646](https://github.com/community-scripts/ProxmoxVE/pull/2646))
- PiHole: Fix Unbound sed for DNS [@MickLesk](https://github.com/MickLesk) ([#2647](https://github.com/community-scripts/ProxmoxVE/pull/2647))
- Alpine IT-Tools fix typo "unexpected EOF while looking for matching `"' [@MickLesk](https://github.com/MickLesk) ([#2644](https://github.com/community-scripts/ProxmoxVE/pull/2644))
### 🧰 Maintenance
- #### 📂 Github
- [gh] Furhter Impove Changelog Workflow [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2655](https://github.com/community-scripts/ProxmoxVE/pull/2655))
### 🌐 Website
- #### 🐞 Bug Fixes
- Website: PocketID Change of website and documentation links [@schneider-de-com](https://github.com/schneider-de-com) ([#2643](https://github.com/community-scripts/ProxmoxVE/pull/2643))
- #### 📝 Script Information
- Fix: Graylog - Improve application description for website [@tremor021](https://github.com/tremor021) ([#2658](https://github.com/community-scripts/ProxmoxVE/pull/2658))
## 2025-02-25
### Changes
### ✨ New Features
- Update Tailscale: Add Tag when installation is finished [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2633](https://github.com/community-scripts/ProxmoxVE/pull/2633))
### 🚀 Updated Scripts
#### 🐞 Bug Fixes
- Fix Omada installer [@JcMinarro](https://github.com/JcMinarro) ([#2625](https://github.com/community-scripts/ProxmoxVE/pull/2625))
### 🌐 Website
- Update Tailscale-lxc Json: Add message for Supported OS [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2629](https://github.com/community-scripts/ProxmoxVE/pull/2629))
### 🧰 Maintenance
- [gh] Updated Changelog Workflow [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2632](https://github.com/community-scripts/ProxmoxVE/pull/2632))
## 2025-02-24
### Changes
### 🆕 New Scripts
- New Script: wger [@tremor021](https://github.com/tremor021) ([#2574](https://github.com/community-scripts/ProxmoxVE/pull/2574))
- New Script: VictoriaMetrics [@tremor021](https://github.com/tremor021) ([#2565](https://github.com/community-scripts/ProxmoxVE/pull/2565))
- New Script: Authelia [@thost96](https://github.com/thost96) ([#2060](https://github.com/community-scripts/ProxmoxVE/pull/2060))
- New Script: Jupyter Notebook [@Dave-code-creater](https://github.com/Dave-code-creater) ([#2561](https://github.com/community-scripts/ProxmoxVE/pull/2561))
### 🐞 Bug Fixes
- Fix Docmost: default upload size and saving data when updating [@bvdberg01](https://github.com/bvdberg01) ([#2598](https://github.com/community-scripts/ProxmoxVE/pull/2598))
- Fix: homarr db migration [@CrazyWolf13](https://github.com/CrazyWolf13) ([#2575](https://github.com/community-scripts/ProxmoxVE/pull/2575))
- Fix: Wireguard - Restart wgdashboard automatically after update [@LostALice](https://github.com/LostALice) ([#2587](https://github.com/community-scripts/ProxmoxVE/pull/2587))
- Fix: Authelia Unbound Variable Argon2id [@MickLesk](https://github.com/MickLesk) ([#2604](https://github.com/community-scripts/ProxmoxVE/pull/2604))
- Fix: Omada check for AVX Support and use the correct MongoDB Version [@MickLesk](https://github.com/MickLesk) ([#2600](https://github.com/community-scripts/ProxmoxVE/pull/2600))
- Fix: Update-Script Firefly III based on their docs [@MickLesk](https://github.com/MickLesk) ([#2534](https://github.com/community-scripts/ProxmoxVE/pull/2534))
### ✨ New Features
- Feature: Template-Check, Better Handling of Downloads, Better Network… [@MickLesk](https://github.com/MickLesk) ([#2592](https://github.com/community-scripts/ProxmoxVE/pull/2592))
- Feature: Possibility to perform updates in silent / verbose (+ logging) [@MickLesk](https://github.com/MickLesk) ([#2583](https://github.com/community-scripts/ProxmoxVE/pull/2583))
- Feature: Use Verbose Mode for all Scripts (removed &>/dev/null) [@MickLesk](https://github.com/MickLesk) ([#2596](https://github.com/community-scripts/ProxmoxVE/pull/2596))
### 🌐 Website
- Fix: Authelia - Make user enter their domain manually [@tremor021](https://github.com/tremor021) ([#2618](https://github.com/community-scripts/ProxmoxVE/pull/2618))
- Website: Change Info for PiHole Password [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2602](https://github.com/community-scripts/ProxmoxVE/pull/2602))
- Fix: Jupyter Json (missing logo & improve name on website) [@MickLesk](https://github.com/MickLesk) ([#2584](https://github.com/community-scripts/ProxmoxVE/pull/2584))
### 🧰 Maintenance
- [gh] Update Script Test Workflow [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2599](https://github.com/community-scripts/ProxmoxVE/pull/2599))
- [gh] Contributor-Guide: Update AppName.md & AppName.sh [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2603](https://github.com/community-scripts/ProxmoxVE/pull/2603))
## 2025-02-23 ## 2025-02-23

View File

@ -35,8 +35,8 @@ function update_script() {
if [[ "${RELEASE}" != "$(cat /opt/2fauth_version.txt)" ]] || [[ ! -f /opt/2fauth_version.txt ]]; then if [[ "${RELEASE}" != "$(cat /opt/2fauth_version.txt)" ]] || [[ ! -f /opt/2fauth_version.txt ]]; then
msg_info "Updating $APP to ${RELEASE}" msg_info "Updating $APP to ${RELEASE}"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
# Creating Backup # Creating Backup
msg_info "Creating Backup" msg_info "Creating Backup"
@ -55,7 +55,7 @@ function update_script() {
chmod -R 755 "/opt/2fauth" chmod -R 755 "/opt/2fauth"
export COMPOSER_ALLOW_SUPERUSER=1 export COMPOSER_ALLOW_SUPERUSER=1
composer install --no-dev --prefer-source &>/dev/null $STD composer install --no-dev --prefer-source
php artisan 2fauth:install php artisan 2fauth:install

View File

@ -28,89 +28,8 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit 1 exit 1
fi fi
msg_error "Due to major changes in the Actual Budget repository, we are currently unable to provide updates. Please check back later."
RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual/releases/latest | \ exit
grep "tag_name" | awk -F '"' '{print substr($4, 2)}')
if [[ ! -f /opt/actualbudget_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/actualbudget_version.txt)" ]]; then
msg_info "Stopping ${APP}"
systemctl stop actualbudget
msg_ok "${APP} Stopped"
msg_info "Updating ${APP} to ${RELEASE}"
cd /tmp
wget -q "https://github.com/actualbudget/actual-server/archive/refs/tags/v${RELEASE}.tar.gz"
mv /opt/actualbudget /opt/actualbudget_bak
tar -xzf "v${RELEASE}.tar.gz" &>/dev/null
mv *ctual-server-* /opt/actualbudget
mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config}
for dir in server-files .migrate user-files migrations; do
if [[ -d /opt/actualbudget_bak/$dir ]]; then
mv /opt/actualbudget_bak/$dir/* /opt/actualbudget-data/$dir/ 2>/dev/null || true
fi
done
if [[ -f /opt/actualbudget-data/migrate/.migrations ]]; then
sed -i 's/null/1732656575219/g' /opt/actualbudget-data/migrate/.migrations
sed -i 's/null/1732656575220/g' /opt/actualbudget-data/migrate/.migrations
fi
if [[ -f /opt/actualbudget/server-files/account.sqlite ]] && [[ ! -f /opt/actualbudget-data/server-files/account.sqlite ]]; then
mv /opt/actualbudget/server-files/account.sqlite /opt/actualbudget-data/server-files/account.sqlite
fi
if [[ -f /opt/actualbudget_bak/.env ]]; then
mv /opt/actualbudget_bak/.env /opt/actualbudget-data/.env
else
cat <<EOF > /opt/actualbudget-data/.env
ACTUAL_UPLOAD_DIR=/opt/actualbudget-data/upload
ACTUAL_DATA_DIR=/opt/actualbudget-data
ACTUAL_SERVER_FILES_DIR=/opt/actualbudget-data/server-files
ACTUAL_USER_FILES=/opt/actualbudget-data/user-files
PORT=5006
ACTUAL_TRUSTED_PROXIES="10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,127.0.0.1/32,::1/128,fc00::/7"
ACTUAL_HTTPS_KEY=/opt/actualbudget/selfhost.key
ACTUAL_HTTPS_CERT=/opt/actualbudget/selfhost.crt
EOF
fi
cd /opt/actualbudget
yarn install &>/dev/null
echo "${RELEASE}" > /opt/actualbudget_version.txt
msg_ok "Updated ${APP}"
msg_info "Starting ${APP}"
cat <<EOF > /etc/systemd/system/actualbudget.service
[Unit]
Description=Actual Budget Service
After=network.target
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/opt/actualbudget
EnvironmentFile=/opt/actualbudget-data/.env
ExecStart=/usr/bin/yarn start
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start actualbudget
msg_ok "Started ${APP}"
msg_info "Cleaning Up"
rm -rf /opt/actualbudget_bak
rm -rf "/tmp/v${RELEASE}.tar.gz"
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit 0
} }
start start

View File

@ -43,15 +43,15 @@ function update_script() {
mv /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env mv /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env
mv /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media mv /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media
cd /opt/adventurelog/backend/server cd /opt/adventurelog/backend/server
pip install --upgrade pip &>/dev/null $STD pip install --upgrade pip
pip install -r requirements.txt &>/dev/null $STD pip install -r requirements.txt
python3 manage.py collectstatic --noinput &>/dev/null $STD python3 manage.py collectstatic --noinput
python3 manage.py migrate &>/dev/null $STD python3 manage.py migrate
mv /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env mv /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env
cd /opt/adventurelog/frontend cd /opt/adventurelog/frontend
pnpm install &>/dev/null $STD pnpm install
pnpm run build &>/dev/null $STD pnpm run build
echo "${RELEASE}" >/opt/${APP}_version.txt echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"

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

@ -30,7 +30,7 @@ if [ ! -d /usr/share/nginx/html ]; then
fi fi
RELEASE=$(curl -s https://api.github.com/repos/CorentinTh/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4) RELEASE=$(curl -s https://api.github.com/repos/CorentinTh/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4)
if [ "${RELEASE}" != "$(cat /opt/${APP}_version.txt 2>/dev/null)" ] || [ ! -f /opt/${APP}_version.txt ]; then if [ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ] || [ ! -f /opt/${APP}_version.txt ]; then
DOWNLOAD_URL="https://github.com/CorentinTh/it-tools/releases/download/${RELEASE}/it-tools-${RELEASE#v}.zip" DOWNLOAD_URL="https://github.com/CorentinTh/it-tools/releases/download/${RELEASE}/it-tools-${RELEASE#v}.zip"
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
curl -fsSL -o it-tools.zip "$DOWNLOAD_URL" curl -fsSL -o it-tools.zip "$DOWNLOAD_URL"

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

@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

View File

@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

55
ct/authelia.sh Normal file
View File

@ -0,0 +1,55 @@
#!/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: thost96 (thost96)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.authelia.com/
APP="Authelia"
TAGS=""
var_cpu="1"
var_ram="512"
var_disk="2"
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 [[ ! -d "/etc/authelia/" ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
RELEASE=$(curl -s https://api.github.com/repos/authelia/authelia/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(/usr/bin/authelia -v | awk '{print substr($3, 2, length($2)) }' )" ]]; then
msg_info "Updating $APP to ${RELEASE}"
$STD apt-get update
$STD apt-get -y upgrade
wget -q "https://github.com/authelia/authelia/releases/download/${RELEASE}/authelia_${RELEASE}_amd64.deb"
$STD dpkg -i "authelia_${RELEASE}_amd64.deb"
msg_info "Cleaning Up"
rm -f "authelia_${RELEASE}_amd64.deb"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleanup Completed"
msg_ok "Updated $APP to ${RELEASE}"
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}:9091${CL}"

View File

@ -40,11 +40,11 @@ function update_script() {
tar -xzf authentik.tar.gz -C /opt/authentik --strip-components 1 --overwrite tar -xzf authentik.tar.gz -C /opt/authentik --strip-components 1 --overwrite
rm -rf authentik.tar.gz rm -rf authentik.tar.gz
cd /opt/authentik/website cd /opt/authentik/website
npm install &>/dev/null $STD npm install
npm run build-bundled &>/dev/null $STD npm run build-bundled
cd /opt/authentik/web cd /opt/authentik/web
npm install &>/dev/null $STD npm install
npm run build &>/dev/null $STD npm run build
msg_ok "Built ${APP} website" msg_ok "Built ${APP} website"
msg_info "Building ${APP} server" msg_info "Building ${APP} server"
@ -56,15 +56,15 @@ function update_script() {
msg_info "Installing Python Dependencies" msg_info "Installing Python Dependencies"
cd /opt/authentik cd /opt/authentik
poetry install --only=main --no-ansi --no-interaction --no-root &>/dev/null $STD poetry install --only=main --no-ansi --no-interaction --no-root
poetry export --without-hashes --without-urls -f requirements.txt --output requirements.txt &>/dev/null $STD poetry export --without-hashes --without-urls -f requirements.txt --output requirements.txt
pip install --no-cache-dir -r requirements.txt &>/dev/null $STD pip install --no-cache-dir -r requirements.txt
pip install . &>/dev/null $STD pip install .
msg_ok "Installed Python Dependencies" msg_ok "Installed Python Dependencies"
msg_info "Updating ${APP} to v${RELEASE} (Patience)" msg_info "Updating ${APP} to v${RELEASE} (Patience)"
cp -r /opt/authentik/authentik/blueprints /opt/authentik/blueprints cp -r /opt/authentik/authentik/blueprints /opt/authentik/blueprints
bash /opt/authentik/lifecycle/ak migrate &>/dev/null $STD bash /opt/authentik/lifecycle/ak migrate
echo "${RELEASE}" >/opt/${APP}_version.txt echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to v${RELEASE}" msg_ok "Updated ${APP} to v${RELEASE}"

View File

@ -25,8 +25,8 @@ function update_script() {
check_container_resources check_container_resources
if [[ ! -d /var/lib/bazarr/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi if [[ ! -d /var/lib/bazarr/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

View File

@ -28,7 +28,7 @@ function update_script() {
exit exit
fi fi
/opt/beszel/beszel update /opt/beszel/beszel update
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
} }

View File

@ -25,8 +25,8 @@ function update_script() {
check_container_resources check_container_resources
if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

View File

@ -39,12 +39,13 @@ function update_script() {
unzip -q /opt/v${RELEASE}.zip -d /opt unzip -q /opt/v${RELEASE}.zip -d /opt
mv /opt/BookStack-${RELEASE} /opt/bookstack mv /opt/BookStack-${RELEASE} /opt/bookstack
cp /opt/bookstack-backup/.env /opt/bookstack/.env cp /opt/bookstack-backup/.env /opt/bookstack/.env
cp -r /opt/bookstack-backup/public/uploads/* /opt/bookstack/public/uploads/ 2>/dev/null || true cp -r /opt/bookstack-backup/public/uploads/* /opt/bookstack/public/uploads/ || true
cp -r /opt/bookstack-backup/storage/uploads/* /opt/bookstack/storage/uploads/ 2>/dev/null || true cp -r /opt/bookstack-backup/storage/uploads/* /opt/bookstack/storage/uploads/ || true
cp -r /opt/bookstack-backup/themes/* /opt/bookstack/themes/ 2>/dev/null || true cp -r /opt/bookstack-backup/themes/* /opt/bookstack/themes/ || true
cd /opt/bookstack cd /opt/bookstack
COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev &>/dev/null export COMPOSER_ALLOW_SUPERUSER=1
php artisan migrate --force &>/dev/null $STD composer install --no-dev
$STD php artisan migrate --force
chown www-data:www-data -R /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage chown www-data:www-data -R /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
chmod -R 755 /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage chmod -R 755 /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads

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

@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

View File

@ -115,10 +115,10 @@ function update_script() {
echo "${options[*]}" echo "${options[*]}"
) )
echo $cps_options >/opt/calibre-web/options.txt echo $cps_options >/opt/calibre-web/options.txt
pip install --upgrade calibreweb[$cps_options] &>/dev/null $STD pip install --upgrade calibreweb[$cps_options]
else else
rm -rf /opt/calibre-web/options.txt rm -rf /opt/calibre-web/options.txt
pip install --upgrade calibreweb &>/dev/null $STD pip install --upgrade calibreweb
fi fi
msg_info "Starting ${APP}" msg_info "Starting ${APP}"

View File

@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated ${APP} LXC" msg_ok "Updated ${APP} LXC"
exit exit
} }

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"
@ -31,31 +31,31 @@ function update_script() {
if ! dpkg -s libjpeg-dev >/dev/null 2>&1; then if ! dpkg -s libjpeg-dev >/dev/null 2>&1; then
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
apt-get update $STD apt-get update
apt-get install -y libjpeg-dev $STD apt-get install -y libjpeg-dev
msg_ok "Updated Dependencies" msg_ok "Updated Dependencies"
fi fi
msg_info "Updating ${APP}" msg_info "Updating ${APP}"
pip3 install changedetection.io --upgrade &>/dev/null $STD pip3 install changedetection.io --upgrade
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"
msg_info "Updating Playwright" msg_info "Updating Playwright"
pip3 install playwright --upgrade &>/dev/null $STD pip3 install playwright --upgrade
msg_ok "Updated Playwright" msg_ok "Updated Playwright"
if [[ -f /etc/systemd/system/browserless.service ]]; then if [[ -f /etc/systemd/system/browserless.service ]]; then
msg_info "Updating Browserless (Patience)" msg_info "Updating Browserless (Patience)"
git -C /opt/browserless/ fetch --all &>/dev/null $STD git -C /opt/browserless/ fetch --all
git -C /opt/browserless/ reset --hard origin/main &>/dev/null $STD git -C /opt/browserless/ reset --hard origin/main
npm update --prefix /opt/browserless &>/dev/null $STD npm update --prefix /opt/browserless
/opt/browserless/node_modules/playwright-core/cli.js install --with-deps &>/dev/null $STD /opt/browserless/node_modules/playwright-core/cli.js install --with-deps
# Update Chrome separately, as it has to be done with the force option. Otherwise the installation of other browsers will not be done if Chrome is already installed. # Update Chrome separately, as it has to be done with the force option. Otherwise the installation of other browsers will not be done if Chrome is already installed.
/opt/browserless/node_modules/playwright-core/cli.js install --force chrome &>/dev/null $STD /opt/browserless/node_modules/playwright-core/cli.js install --force chrome
/opt/browserless/node_modules/playwright-core/cli.js install chromium firefox webkit &>/dev/null $STD /opt/browserless/node_modules/playwright-core/cli.js install chromium firefox webkit
npm run build --prefix /opt/browserless &>/dev/null $STD npm run build --prefix /opt/browserless
npm run build:function --prefix /opt/browserless &>/dev/null $STD npm run build:function --prefix /opt/browserless
npm prune production --prefix /opt/browserless &>/dev/null $STD npm prune production --prefix /opt/browserless
systemctl restart browserless systemctl restart browserless
msg_ok "Updated Browserless" msg_ok "Updated Browserless"
else else

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

@ -30,14 +30,14 @@ function update_script() {
RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -v '\-rc' | sort -V | tail -n 1) RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -v '\-rc' | sort -V | tail -n 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 "Updating ${APP} to v${RELEASE}" msg_info "Updating ${APP} to v${RELEASE}"
omd stop monitoring &>/dev/null $STD omd stop monitoring
omd cp monitoring monitoringbackup &>/dev/null $STD omd cp monitoring monitoringbackup
wget -q https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.bookworm_amd64.deb -O /opt/checkmk.deb wget -q https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.bookworm_amd64.deb -O /opt/checkmk.deb
apt-get install -y /opt/checkmk.deb &>/dev/null $STD apt-get install -y /opt/checkmk.deb
omd --force -V ${RELEASE}.cre update --conflict=install monitoring &>/dev/null $STD omd --force -V ${RELEASE}.cre update --conflict=install monitoring
omd start monitoring &>/dev/null $STD omd start monitoring
omd -f rm monitoringbackup &>/dev/null $STD omd -f rm monitoringbackup
omd cleanup &>/dev/null $STD omd cleanup
rm -rf /opt/checkmk.deb rm -rf /opt/checkmk.deb
msg_ok "Updated ${APP} to v${RELEASE}" msg_ok "Updated ${APP} to v${RELEASE}"
else else

View File

@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

View File

@ -36,48 +36,48 @@ function update_script() {
if [ "$UPD" == "1" ]; then if [ "$UPD" == "1" ]; then
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated ${APP} LXC" msg_ok "Updated ${APP} LXC"
exit exit
fi fi
if [ "$UPD" == "2" ]; then if [ "$UPD" == "2" ]; then
msg_info "Installing dependencies (patience)" msg_info "Installing dependencies (patience)"
apt-get install -y attr &>/dev/null $STD apt-get install -y attr
apt-get install -y nfs-kernel-server &>/dev/null $STD apt-get install -y nfs-kernel-server
apt-get install -y samba &>/dev/null $STD apt-get install -y samba
apt-get install -y samba-common-bin &>/dev/null $STD apt-get install -y samba-common-bin
apt-get install -y winbind &>/dev/null $STD apt-get install -y winbind
apt-get install -y gawk &>/dev/null $STD apt-get install -y gawk
msg_ok "Installed dependencies" msg_ok "Installed dependencies"
msg_info "Installing Cockpit file sharing" msg_info "Installing Cockpit file sharing"
wget -q $(curl -s https://api.github.com/repos/45Drives/cockpit-file-sharing/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4) wget -q $(curl -s https://api.github.com/repos/45Drives/cockpit-file-sharing/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)
dpkg -i cockpit-file-sharing_*focal_all.deb &>/dev/null $STD dpkg -i cockpit-file-sharing_*focal_all.deb
rm cockpit-file-sharing_*focal_all.deb rm cockpit-file-sharing_*focal_all.deb
msg_ok "Installed Cockpit file sharing" msg_ok "Installed Cockpit file sharing"
exit exit
fi fi
if [ "$UPD" == "3" ]; then if [ "$UPD" == "3" ]; then
msg_info "Installing dependencies (patience)" msg_info "Installing dependencies (patience)"
apt-get install -y psmisc &>/dev/null $STD apt-get install -y psmisc
apt-get install -y samba &>/dev/null $STD apt-get install -y samba
apt-get install -y samba-common-bin &>/dev/null $STD apt-get install -y samba-common-bin
msg_ok "Installed dependencies" msg_ok "Installed dependencies"
msg_info "Installing Cockpit identities" msg_info "Installing Cockpit identities"
wget -q $(curl -s https://api.github.com/repos/45Drives/cockpit-identities/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4) wget -q $(curl -s https://api.github.com/repos/45Drives/cockpit-identities/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)
dpkg -i cockpit-identities_*focal_all.deb &>/dev/null $STD dpkg -i cockpit-identities_*focal_all.deb
rm cockpit-identities_*focal_all.deb rm cockpit-identities_*focal_all.deb
msg_ok "Installed Cockpit identities" msg_ok "Installed Cockpit identities"
exit exit
fi fi
if [ "$UPD" == "4" ]; then if [ "$UPD" == "4" ]; then
msg_info "Installing dependencies" msg_info "Installing dependencies"
apt-get install -y rsync &>/dev/null $STD apt-get install -y rsync
apt-get install -y zip &>/dev/null $STD apt-get install -y zip
msg_ok "Installed dependencies" msg_ok "Installed dependencies"
msg_info "Installing Cockpit navigator" msg_info "Installing Cockpit navigator"
wget -q $(curl -s https://api.github.com/repos/45Drives/cockpit-navigator/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4) wget -q $(curl -s https://api.github.com/repos/45Drives/cockpit-navigator/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)
dpkg -i cockpit-navigator_*focal_all.deb &>/dev/null $STD dpkg -i cockpit-navigator_*focal_all.deb
rm cockpit-navigator_*focal_all.deb rm cockpit-navigator_*focal_all.deb
msg_ok "Installed Cockpit navigator" msg_ok "Installed Cockpit navigator"
exit exit

View File

@ -36,7 +36,7 @@ trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
# This function handles errors # This function handles errors
function error_handler() { function error_handler() {
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
printf "\e[?25h" printf "\e[?25h"
local exit_code="$?" local exit_code="$?"
local line_number="$1" local line_number="$1"
@ -51,13 +51,13 @@ function spinner() {
local frames=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏') local frames=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local spin_i=0 local spin_i=0
local interval=0.1 local interval=0.1
printf "\e[?25l" printf "\e[?25l"
local color="${YWB}" local color="${YWB}"
while true; do while true; do
printf "\r ${color}%s${CL}" "${frames[spin_i]}" printf "\r ${color}%s${CL}" "${frames[spin_i]}"
spin_i=$(( (spin_i + 1) % ${#frames[@]} )) spin_i=$(((spin_i + 1) % ${#frames[@]}))
sleep "$interval" sleep "$interval"
done done
} }
@ -70,9 +70,16 @@ function msg_info() {
SPINNER_PID=$! SPINNER_PID=$!
} }
function msg_warn() {
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
printf "\e[?25h"
local msg="$1"
echo -e "${BFR}${INFO}${YWB}${msg}${CL}"
}
# This function displays a success message with a green color. # This function displays a success message with a green color.
function msg_ok() { function msg_ok() {
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
printf "\e[?25h" printf "\e[?25h"
local msg="$1" local msg="$1"
echo -e "${BFR}${CM}${GN}${msg}${CL}" echo -e "${BFR}${CM}${GN}${msg}${CL}"
@ -80,7 +87,7 @@ function msg_ok() {
# This function displays a error message with a red color. # This function displays a error message with a red color.
function msg_error() { function msg_error() {
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
printf "\e[?25h" printf "\e[?25h"
local msg="$1" local msg="$1"
echo -e "${BFR}${CROSS}${RD}${msg}${CL}" echo -e "${BFR}${CROSS}${RD}${msg}${CL}"
@ -113,9 +120,12 @@ function select_storage() {
CONTENT='vztmpl' CONTENT='vztmpl'
CONTENT_LABEL='Container template' CONTENT_LABEL='Container template'
;; ;;
*) false || { msg_error "Invalid storage class."; exit 201; }; *) false || {
msg_error "Invalid storage class."
exit 201
} ;;
esac esac
# This Queries all storage locations # This Queries all storage locations
local -a MENU local -a MENU
while read -r line; do while read -r line; do
@ -129,34 +139,60 @@ function select_storage() {
fi fi
MENU+=("$TAG" "$ITEM" "OFF") MENU+=("$TAG" "$ITEM" "OFF")
done < <(pvesm status -content $CONTENT | awk 'NR>1') done < <(pvesm status -content $CONTENT | awk 'NR>1')
# Select storage location # Select storage location
if [ $((${#MENU[@]}/3)) -eq 1 ]; then if [ $((${#MENU[@]} / 3)) -eq 1 ]; then
printf ${MENU[0]} printf ${MENU[0]}
else else
local STORAGE local STORAGE
while [ -z "${STORAGE:+x}" ]; do while [ -z "${STORAGE:+x}" ]; do
STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \ STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
"Which storage pool you would like to use for the ${CONTENT_LABEL,,}?\nTo make a selection, use the Spacebar.\n" \ "Which storage pool you would like to use for the ${CONTENT_LABEL,,}?\nTo make a selection, use the Spacebar.\n" \
16 $(($MSG_MAX_LENGTH + 23)) 6 \ 16 $(($MSG_MAX_LENGTH + 23)) 6 \
"${MENU[@]}" 3>&1 1>&2 2>&3) || { msg_error "Menu aborted."; exit 202; } "${MENU[@]}" 3>&1 1>&2 2>&3) || {
msg_error "Menu aborted."
exit 202
}
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo -e "${CROSS}${RD} Menu aborted by user.${CL}" echo -e "${CROSS}${RD} Menu aborted by user.${CL}"
exit 0 exit 0
fi fi
done done
printf "%s" "$STORAGE" printf "%s" "$STORAGE"
fi fi
} }
# Test if required variables are set # Test if required variables are set
[[ "${CTID:-}" ]] || { msg_error "You need to set 'CTID' variable."; exit 203; } [[ "${CTID:-}" ]] || {
[[ "${PCT_OSTYPE:-}" ]] || { msg_error "You need to set 'PCT_OSTYPE' variable."; exit 204; } msg_error "You need to set 'CTID' variable."
exit 203
}
[[ "${PCT_OSTYPE:-}" ]] || {
msg_error "You need to set 'PCT_OSTYPE' variable."
exit 204
}
# Test if ID is valid # Test if ID is valid
[ "$CTID" -ge "100" ] || { msg_error "ID cannot be less than 100."; exit 205; } [ "$CTID" -ge "100" ] || {
msg_error "ID cannot be less than 100."
exit 205
}
# Check for network connectivity (IPv4 & IPv6)
#function check_network() {
# local CHECK_URLS=("8.8.8.8" "1.1.1.1" "9.9.9.9" "2606:4700:4700::1111" "2001:4860:4860::8888" "2620:fe::fe")
#
# for url in "${CHECK_URLS[@]}"; do
# if ping -c 1 -W 2 "$url" &>/dev/null; then
# return 0 # Success: At least one connection works
# fi
# done
#
# msg_error "No network connection detected. Check your internet connection."
# exit 101
#}
# Test if ID is in use # Test if ID is in use
if pct status $CTID &>/dev/null; then if qm status "$CTID" &>/dev/null || pct status "$CTID" &>/dev/null; then
echo -e "ID '$CTID' is already in use." echo -e "ID '$CTID' is already in use."
unset CTID unset CTID
msg_error "Cannot use ID that is already in use." msg_error "Cannot use ID that is already in use."
@ -173,46 +209,74 @@ msg_ok "Using ${BL}$CONTAINER_STORAGE${CL} ${GN}for Container Storage."
# Update LXC template list # Update LXC template list
msg_info "Updating LXC Template List" msg_info "Updating LXC Template List"
#check_network
pveam update >/dev/null pveam update >/dev/null
msg_ok "Updated LXC Template List" msg_ok "Updated LXC Template List"
# Get LXC template string # Get LXC template string
TEMPLATE_SEARCH=${PCT_OSTYPE}-${PCT_OSVERSION:-} TEMPLATE_SEARCH=${PCT_OSTYPE}-${PCT_OSVERSION:-}
mapfile -t TEMPLATES < <(pveam available -section system | sed -n "s/.*\($TEMPLATE_SEARCH.*\)/\1/p" | sort -t - -k 2 -V) mapfile -t TEMPLATES < <(pveam available -section system | sed -n "s/.*\($TEMPLATE_SEARCH.*\)/\1/p" | sort -t - -k 2 -V)
[ ${#TEMPLATES[@]} -gt 0 ] || { msg_error "Unable to find a template when searching for '$TEMPLATE_SEARCH'."; exit 207; } [ ${#TEMPLATES[@]} -gt 0 ] || {
msg_error "Unable to find a template when searching for '$TEMPLATE_SEARCH'."
exit 207
}
TEMPLATE="${TEMPLATES[-1]}" TEMPLATE="${TEMPLATES[-1]}"
TEMPLATE_PATH="$(pvesm path $TEMPLATE_STORAGE:vztmpl/$TEMPLATE)"
TEMPLATE_PATH="/var/lib/vz/template/cache/$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"; 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."
[[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH" [[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH"
msg_info "Downloading LXC Template"
pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null || # Download with 3 attempts
{ msg_error "A problem occurred while downloading the LXC template."; exit 208; } for attempt in {1..3}; do
msg_ok "Downloaded LXC Template" msg_info "Attempt $attempt: Downloading LXC template..."
if timeout 120 pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null; then
msg_ok "Template download successful."
break
fi
if [ $attempt -eq 3 ]; then
msg_error "Three failed attempts. Aborting."
exit 208
fi
sleep $((attempt * 5))
done
fi fi
msg_ok "LXC Template is ready to use."
# Check and fix subuid/subgid # Check and fix subuid/subgid
grep -q "root:100000:65536" /etc/subuid || echo "root:100000:65536" >> /etc/subuid grep -q "root:100000:65536" /etc/subuid || echo "root:100000:65536" >>/etc/subuid
grep -q "root:100000:65536" /etc/subgid || echo "root:100000:65536" >> /etc/subgid grep -q "root:100000:65536" /etc/subgid || echo "root:100000:65536" >>/etc/subgid
# Combine all options # Combine all options
PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}}) PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}})
[[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs "$CONTAINER_STORAGE:${PCT_DISK_SIZE:-8}") [[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs "$CONTAINER_STORAGE:${PCT_DISK_SIZE:-8}")
# Create container with template integrity check
msg_info "Creating LXC Container" msg_info "Creating LXC Container"
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
[[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH" msg_error "Container creation failed. Checking if template is corrupted."
msg_ok "Template integrity check completed" if ! zstdcat "$TEMPLATE_PATH" | tar -tf - >/dev/null 2>&1; then
pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null || msg_error "Template appears to be corrupted. Removing and re-downloading."
{ msg_error "A problem occurred while re-downloading the LXC template."; exit 208; } rm -f "$TEMPLATE_PATH"
if ! timeout 120 pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null; then
msg_error "Failed to re-download template."
exit 208
fi
msg_ok "Re-downloaded LXC Template" msg_ok "Re-downloaded LXC Template"
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
msg_error "A problem occurred while trying to create container after re-downloading template." msg_error "Container creation failed after re-downloading template."
exit 200 exit 200
fi fi
else
msg_error "Container creation failed, but template is not corrupted."
exit 209
fi fi
fi
msg_ok "LXC Container ${BL}$CTID${CL} ${GN}was successfully created." msg_ok "LXC Container ${BL}$CTID${CL} ${GN}was successfully created."

View File

@ -36,12 +36,12 @@ function update_script() {
if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
if ! command -v npm >/dev/null 2>&1; then if ! command -v npm >/dev/null 2>&1; then
echo "Installing NPM..." echo "Installing NPM..."
apt-get install -y npm >/dev/null 2>&1 $STD apt-get install -y npm
echo "Installed NPM..." echo "Installed NPM..."
fi fi
fi fi
msg_info "Updating ${APP}" msg_info "Updating ${APP}"
/opt/cronicle/bin/control.sh upgrade &>/dev/null $STD /opt/cronicle/bin/control.sh upgrade
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"
exit exit
fi fi
@ -49,7 +49,7 @@ function update_script() {
if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
if ! command -v npm >/dev/null 2>&1; then if ! command -v npm >/dev/null 2>&1; then
echo "Installing NPM..." echo "Installing NPM..."
apt-get install -y npm >/dev/null 2>&1 $STD apt-get install -y npm
echo "Installed NPM..." echo "Installed NPM..."
fi fi
fi fi
@ -57,12 +57,12 @@ function update_script() {
IP=$(hostname -I | awk '{print $1}') IP=$(hostname -I | awk '{print $1}')
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
apt-get install -y git &>/dev/null $STD apt-get install -y git
apt-get install -y make &>/dev/null $STD apt-get install -y make
apt-get install -y g++ &>/dev/null $STD apt-get install -y g++
apt-get install -y gcc &>/dev/null $STD apt-get install -y gcc
apt-get install -y ca-certificates &>/dev/null $STD apt-get install -y ca-certificates
apt-get install -y gnupg &>/dev/null $STD apt-get install -y gnupg
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Setting up Node.js Repository" msg_info "Setting up Node.js Repository"
@ -72,21 +72,21 @@ function update_script() {
msg_ok "Set up Node.js Repository" msg_ok "Set up Node.js Repository"
msg_info "Installing Node.js" msg_info "Installing Node.js"
apt-get update &>/dev/null $STD apt-get update
apt-get install -y nodejs &>/dev/null $STD apt-get install -y nodejs
msg_ok "Installed Node.js" msg_ok "Installed Node.js"
msg_info "Installing Cronicle Worker" msg_info "Installing Cronicle Worker"
mkdir -p /opt/cronicle mkdir -p /opt/cronicle
cd /opt/cronicle cd /opt/cronicle
tar zxvf <(curl -fsSL https://github.com/jhuckaby/Cronicle/archive/${LATEST}.tar.gz) --strip-components 1 &>/dev/null $STD tar zxvf <(curl -fsSL https://github.com/jhuckaby/Cronicle/archive/${LATEST}.tar.gz) --strip-components 1
npm install &>/dev/null $STD npm install
node bin/build.js dist &>/dev/null $STD node bin/build.js dist
sed -i "s/localhost:3012/${IP}:3012/g" /opt/cronicle/conf/config.json sed -i "s/localhost:3012/${IP}:3012/g" /opt/cronicle/conf/config.json
/opt/cronicle/bin/control.sh start &>/dev/null $STD /opt/cronicle/bin/control.sh start
cp /opt/cronicle/bin/cronicled.init /etc/init.d/cronicled &>/dev/null $STD cp /opt/cronicle/bin/cronicled.init /etc/init.d/cronicled
chmod 775 /etc/init.d/cronicled chmod 775 /etc/init.d/cronicled
update-rc.d cronicled defaults &>/dev/null $STD update-rc.d cronicled defaults
msg_ok "Installed Cronicle Worker" msg_ok "Installed Cronicle Worker"
echo -e "\n Add Masters secret key to /opt/cronicle/conf/config.json \n" echo -e "\n Add Masters secret key to /opt/cronicle/conf/config.json \n"
exit exit

View File

@ -29,7 +29,7 @@ function update_script() {
latest_version=$(npm show cross-seed version) latest_version=$(npm show cross-seed version)
if [ "$current_version" != "$latest_version" ]; then if [ "$current_version" != "$latest_version" ]; then
msg_info "Updating ${APP} from version v${current_version} to v${latest_version}" msg_info "Updating ${APP} from version v${current_version} to v${latest_version}"
npm install -g cross-seed@latest &> /dev/null $STD npm install -g cross-seed@latest
systemctl restart cross-seed systemctl restart cross-seed
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
else else

View File

@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

View File

@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

View File

@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

View File

@ -28,7 +28,7 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
pip3 install deluge[all] --upgrade pip3 install deluge[all] --upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit

View File

@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated ${APP} LXC" msg_ok "Updated ${APP} LXC"
exit exit
} }

View File

@ -34,6 +34,7 @@ function update_script() {
msg_info "Updating ${APP} to v${RELEASE}" msg_info "Updating ${APP} to v${RELEASE}"
cp /opt/docmost/.env /opt/ cp /opt/docmost/.env /opt/
cp -r /opt/docmost/data /opt/
rm -rf /opt/docmost rm -rf /opt/docmost
temp_file=$(mktemp) temp_file=$(mktemp)
wget -q "https://github.com/docmost/docmost/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file" wget -q "https://github.com/docmost/docmost/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file"
@ -41,8 +42,9 @@ function update_script() {
mv docmost-${RELEASE} /opt/docmost mv docmost-${RELEASE} /opt/docmost
cd /opt/docmost cd /opt/docmost
mv /opt/.env /opt/docmost/.env mv /opt/.env /opt/docmost/.env
pnpm install --force &>/dev/null mv /opt/data /opt/docmost/data
pnpm build &>/dev/null $STD pnpm install --force
$STD pnpm build
echo "${RELEASE}" >/opt/${APP}_version.txt echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"

View File

@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
exit exit
} }

View File

@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

View File

@ -33,8 +33,8 @@ function update_script() {
msg_ok "Stopped ${APP}" msg_ok "Stopped ${APP}"
msg_info "Updating ${APP}" msg_info "Updating ${APP}"
wget https://github.com/MediaBrowser/Emby.Releases/releases/download/${LATEST}/emby-server-deb_${LATEST}_amd64.deb &>/dev/null $STD wget https://github.com/MediaBrowser/Emby.Releases/releases/download/${LATEST}/emby-server-deb_${LATEST}_amd64.deb
dpkg -i emby-server-deb_${LATEST}_amd64.deb &>/dev/null $STD dpkg -i emby-server-deb_${LATEST}_amd64.deb
rm emby-server-deb_${LATEST}_amd64.deb rm emby-server-deb_${LATEST}_amd64.deb
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"

View File

@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

View File

@ -33,9 +33,9 @@ function update_script() {
msg_info "Updating ESPHome" msg_info "Updating ESPHome"
if [[ -d /srv/esphome ]]; then if [[ -d /srv/esphome ]]; then
source /srv/esphome/bin/activate &>/dev/null $STD source /srv/esphome/bin/activate
fi fi
pip3 install -U esphome &>/dev/null $STD pip3 install -U esphome
msg_ok "Updated ESPHome" msg_ok "Updated ESPHome"
msg_info "Starting ESPHome" msg_info "Starting ESPHome"

View File

@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating evcc LXC" msg_info "Updating evcc LXC"
apt update &>/dev/null $STD apt update
apt --only-upgrade install -y evcc &>/dev/null $STD apt --only-upgrade install -y evcc
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
exit exit
} }

View File

@ -43,7 +43,7 @@ function update_script() {
rm -rf /opt/excalidraw rm -rf /opt/excalidraw
mv excalidraw-${RELEASE} /opt/excalidraw mv excalidraw-${RELEASE} /opt/excalidraw
cd /opt/excalidraw cd /opt/excalidraw
yarn &> /dev/null $STD yarn
msg_ok "Updated $APP to v${RELEASE}" msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP" msg_info "Starting $APP"

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}

View File

@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
exit exit
} }

View File

@ -37,21 +37,19 @@ check_container_resources
msg_info "Updating ${APP} to v${RELEASE}" msg_info "Updating ${APP} to v${RELEASE}"
cp /opt/firefly/.env /opt/.env cp /opt/firefly/.env /opt/.env
cp -r /opt/firefly/storage /opt/storage cp -r /opt/firefly/storage /opt/storage
rm -rf /opt/firefly/*
cd /opt cd /opt
wget -q "https://github.com/firefly-iii/firefly-iii/releases/download/v${RELEASE}/FireflyIII-v${RELEASE}.tar.gz" wget -q "https://github.com/firefly-iii/firefly-iii/releases/download/v${RELEASE}/FireflyIII-v${RELEASE}.tar.gz"
tar -xzf FireflyIII-v${RELEASE}.tar.gz -C /opt/firefly --exclude='storage' tar -xzf FireflyIII-v${RELEASE}.tar.gz -C /opt/firefly --exclude='storage'
cp /opt/.env /opt/firefly/.env
cp -r /opt/storage /opt/firefly/storage
cd /opt/firefly cd /opt/firefly
composer install --no-dev --no-interaction &>/dev/null
php artisan migrate --seed --force &>/dev/null
php artisan firefly:decrypt-all &>/dev/null
php artisan cache:clear &>/dev/null
php artisan view:clear &>/dev/null
php artisan firefly:upgrade-database &>/dev/null
php artisan firefly:laravel-passport-keys &>/dev/null
chown -R www-data:www-data /opt/firefly chown -R www-data:www-data /opt/firefly
chmod -R 775 /opt/firefly/storage chmod -R 775 /opt/firefly/storage
$STD php artisan migrate --seed --force
$STD php artisan cache:clear
$STD php artisan view:clear
$STD php artisan firefly-iii:upgrade-database
$STD php artisan firefly-iii:laravel-passport-keys
echo "${RELEASE}" >"/opt/${APP}_version.txt" echo "${RELEASE}" >"/opt/${APP}_version.txt"
msg_ok "Updated ${APP} to v${RELEASE}" msg_ok "Updated ${APP} to v${RELEASE}"
@ -76,4 +74,4 @@ description
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}" echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"

View File

@ -30,7 +30,7 @@ function update_script() {
latest_version=$(npm show ghost-cli version) latest_version=$(npm show ghost-cli version)
if [ "$current_version" != "$latest_version" ]; then if [ "$current_version" != "$latest_version" ]; then
msg_info "Updating ${APP} from version v${current_version} to v${latest_version}" msg_info "Updating ${APP} from version v${current_version} to v${latest_version}"
npm install -g ghost-cli@latest &> /dev/null $STD npm install -g ghost-cli@latest
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
else else
msg_ok "${APP} is already at v${current_version}" msg_ok "${APP} is already at v${current_version}"

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
} }

View File

@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating ${APP}" msg_info "Updating ${APP}"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
exit exit
} }

View File

@ -34,8 +34,8 @@ function update_script() {
msg_ok "Stopped $APP" msg_ok "Stopped $APP"
msg_info "Updating $APP" msg_info "Updating $APP"
apt-get update &> /dev/null $STD apt-get update
apt-get upgrade -y &> /dev/null $STD apt-get upgrade -y
msg_ok "Updated $APP" msg_ok "Updated $APP"
msg_info "Starting $APP" msg_info "Starting $APP"

View File

@ -51,15 +51,15 @@ function update_script() {
cd grist cd grist
msg_info "Installing Dependencies" msg_info "Installing Dependencies"
yarn install >/dev/null 2>&1 $STD yarn install
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
msg_info "Building" msg_info "Building"
yarn run build:prod >/dev/null 2>&1 $STD yarn run build:prod
msg_ok "Done building" msg_ok "Done building"
msg_info "Installing Python" msg_info "Installing Python"
yarn run install:python >/dev/null 2>&1 $STD yarn run install:python
msg_ok "Installed Python" msg_ok "Installed Python"
echo "${RELEASE}" >/opt/${APP}_version.txt echo "${RELEASE}" >/opt/${APP}_version.txt

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/authelia Normal file
View File

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

6
ct/headers/bytestash Normal file
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

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

6
ct/headers/outline 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 @@
____ ___ _ ___
/ __ \___ / (_)________ _____ | | / (_)___ ____ ______
/ /_/ / _ \/ / / ___/ __ `/ __ \_____| | /| / / / __ \/ __ `/ ___/
/ ____/ __/ / / /__/ /_/ / / / /_____/ |/ |/ / / / / / /_/ (__ )
/_/ \___/_/_/\___/\__,_/_/ /_/ |__/|__/_/_/ /_/\__, /____/
/____/

View File

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

View File

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

6
ct/headers/revealjs Normal file
View File

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

View File

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

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

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

6
ct/headers/wger Normal file
View File

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

View File

@ -44,8 +44,9 @@ function update_script() {
VER=$(curl -s https://api.github.com/repos/linuxserver/Heimdall/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') VER=$(curl -s https://api.github.com/repos/linuxserver/Heimdall/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
cp -R Heimdall-${VER}/* /opt/Heimdall cp -R Heimdall-${VER}/* /opt/Heimdall
cd /opt/Heimdall cd /opt/Heimdall
apt-get install -y composer &>/dev/null $STD apt-get install -y composer
COMPOSER_ALLOW_SUPERUSER=1 composer dump-autoload &>/dev/null 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

@ -35,7 +35,7 @@ function update_script() {
msg_ok "Stopped Services" msg_ok "Stopped Services"
msg_info "Updating ${APP} to v${RELEASE}" msg_info "Updating ${APP} to v${RELEASE}"
if [[ $(corepack -v) < "0.31.0" ]]; then if [[ $(corepack -v) < "0.31.0" ]]; then
npm install -g corepack@0.31.0 &>/dev/null $STD npm install -g corepack@0.31.0
fi 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
@ -47,14 +47,14 @@ function update_script() {
unzip -q v${RELEASE}.zip unzip -q v${RELEASE}.zip
mv hoarder-${RELEASE} /opt/hoarder mv hoarder-${RELEASE} /opt/hoarder
cd /opt/hoarder/apps/web cd /opt/hoarder/apps/web
pnpm install --frozen-lockfile &>/dev/null $STD pnpm install --frozen-lockfile
pnpm exec next build --experimental-build-mode compile &>/dev/null $STD pnpm exec next build --experimental-build-mode compile
cp -r /opt/hoarder/apps/web/.next/standalone/apps/web/server.js /opt/hoarder/apps/web cp -r /opt/hoarder/apps/web/.next/standalone/apps/web/server.js /opt/hoarder/apps/web
cd /opt/hoarder/apps/workers cd /opt/hoarder/apps/workers
pnpm install --frozen-lockfile &>/dev/null $STD pnpm install --frozen-lockfile
export DATA_DIR=/opt/hoarder_data export DATA_DIR=/opt/hoarder_data
cd /opt/hoarder/packages/db cd /opt/hoarder/packages/db
pnpm migrate &>/dev/null $STD pnpm migrate
sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/hoarder/hoarder.env sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/hoarder/hoarder.env
msg_ok "Updated ${APP} to v${RELEASE}" msg_ok "Updated ${APP} to v${RELEASE}"

View File

@ -38,14 +38,22 @@ fi
if [[ ! -f /opt/run_homarr.sh ]]; then if [[ ! -f /opt/run_homarr.sh ]]; then
msg_info "Detected outdated and missing service files" msg_info "Detected outdated and missing service files"
msg_error "Warning - The port of homarr changed from 3000 to 7575" msg_error "Warning - The port of homarr changed from 3000 to 7575"
apt-get install -y nginx gettext openssl gpg &>/dev/null $STD apt-get install -y nginx gettext openssl gpg
sed -i '/^NODE_ENV=/d' /opt/homarr/.env && echo "NODE_ENV='production'" >> /opt/homarr/.env sed -i '/^NODE_ENV=/d' /opt/homarr/.env && echo "NODE_ENV='production'" >> /opt/homarr/.env
sed -i '/^DB_DIALECT=/d' /opt/homarr/.env && echo "DB_DIALECT='sqlite'" >> /opt/homarr/.env sed -i '/^DB_DIALECT=/d' /opt/homarr/.env && echo "DB_DIALECT='sqlite'" >> /opt/homarr/.env
cat <<'EOF' >/opt/run_homarr.sh cat <<'EOF' >/opt/run_homarr.sh
#!/bin/bash #!/bin/bash
set -a
source /opt/homarr/.env
set +a
export DB_DIALECT='sqlite' export DB_DIALECT='sqlite'
export AUTH_SECRET=$(openssl rand -base64 32) export AUTH_SECRET=$(openssl rand -base64 32)
node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
dirname=$(basename "$dir")
mkdir -p "/opt/homarr_db/migrations/$dirname"
cp -r "$dir"/* "/opt/homarr_db/migrations/$dirname/" 2>/dev/null || true
done
export HOSTNAME=$(ip route get 1.1.1.1 | grep -oP 'src \K[^ ]+') export HOSTNAME=$(ip route get 1.1.1.1 | grep -oP 'src \K[^ ]+')
envsubst '${HOSTNAME}' < /etc/nginx/templates/nginx.conf > /etc/nginx/nginx.conf envsubst '${HOSTNAME}' < /etc/nginx/templates/nginx.conf > /etc/nginx/nginx.conf
nginx -g 'daemon off;' & nginx -g 'daemon off;' &
@ -85,6 +93,30 @@ fi
msg_ok "Backup Data" msg_ok "Backup Data"
msg_info "Updating and rebuilding ${APP} to v${RELEASE} (Patience)" msg_info "Updating and rebuilding ${APP} to v${RELEASE} (Patience)"
rm /opt/run_homarr.sh
cat <<'EOF' >/opt/run_homarr.sh
#!/bin/bash
set -a
source /opt/homarr/.env
set +a
export DB_DIALECT='sqlite'
export AUTH_SECRET=$(openssl rand -base64 32)
node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
dirname=$(basename "$dir")
mkdir -p "/opt/homarr_db/migrations/$dirname"
cp -r "$dir"/* "/opt/homarr_db/migrations/$dirname/" 2>/dev/null || true
done
export HOSTNAME=$(ip route get 1.1.1.1 | grep -oP 'src \K[^ ]+')
envsubst '${HOSTNAME}' < /etc/nginx/templates/nginx.conf > /etc/nginx/nginx.conf
nginx -g 'daemon off;' &
redis-server /opt/homarr/packages/redis/redis.conf &
node apps/tasks/tasks.cjs &
node apps/websocket/wssServer.cjs &
node apps/nextjs/server.js & PID=$!
wait $PID
EOF
chmod +x /opt/run_homarr.sh
wget -q "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip" wget -q "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip"
unzip -q v${RELEASE}.zip unzip -q v${RELEASE}.zip
rm -rf v${RELEASE}.zip rm -rf v${RELEASE}.zip
@ -92,8 +124,8 @@ fi
mv homarr-${RELEASE} /opt/homarr mv homarr-${RELEASE} /opt/homarr
mv /opt/homarr-data-backup/.env /opt/homarr/.env mv /opt/homarr-data-backup/.env /opt/homarr/.env
cd /opt/homarr cd /opt/homarr
pnpm install &>/dev/null $STD pnpm install
pnpm build &>/dev/null $STD pnpm build
cp /opt/homarr/apps/nextjs/next.config.ts . cp /opt/homarr/apps/nextjs/next.config.ts .
cp /opt/homarr/apps/nextjs/package.json . cp /opt/homarr/apps/nextjs/package.json .
cp -r /opt/homarr/packages/db/migrations /opt/homarr_db/migrations cp -r /opt/homarr/packages/db/migrations /opt/homarr_db/migrations
@ -118,6 +150,10 @@ fi
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

@ -59,7 +59,7 @@ function update_script() {
msg_info "Updating Home Assistant" msg_info "Updating Home Assistant"
source /srv/homeassistant/bin/activate source /srv/homeassistant/bin/activate
pip install ${BR}--upgrade homeassistant &>/dev/null $STD pip install ${BR}--upgrade homeassistant
msg_ok "Updated Home Assistant" msg_ok "Updated Home Assistant"
msg_info "Starting Home Assistant" msg_info "Starting Home Assistant"
@ -72,10 +72,10 @@ function update_script() {
fi fi
if [ "$UPD" == "2" ]; then if [ "$UPD" == "2" ]; then
msg_info "Installing Home Assistant Community Store (HACS)" msg_info "Installing Home Assistant Community Store (HACS)"
apt update &>/dev/null $STD apt update
apt install -y unzip &>/dev/null $STD apt install -y unzip
cd .homeassistant cd .homeassistant
bash <(curl -fsSL https://get.hacs.xyz) &>/dev/null $STD bash <(curl -fsSL https://get.hacs.xyz)
msg_ok "Installed Home Assistant Community Store (HACS)" msg_ok "Installed Home Assistant Community Store (HACS)"
echo -e "\n Reboot Home Assistant and clear browser cache then Add HACS integration.\n" echo -e "\n Reboot Home Assistant and clear browser cache then Add HACS integration.\n"
exit exit
@ -85,17 +85,17 @@ function update_script() {
read -r -p "Would you like to use No Authentication? <y/N> " prompt read -r -p "Would you like to use No Authentication? <y/N> " prompt
msg_info "Installing FileBrowser" msg_info "Installing FileBrowser"
RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g') RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g')
curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/$RELEASE/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin &>/dev/null $STD curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/$RELEASE/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
filebrowser config init -a '0.0.0.0' &>/dev/null $STD filebrowser config init -a '0.0.0.0'
filebrowser config set -a '0.0.0.0' &>/dev/null $STD filebrowser config set -a '0.0.0.0'
filebrowser config set --auth.method=noauth &>/dev/null $STD filebrowser config set --auth.method=noauth
filebrowser users add ID 1 --perm.admin &>/dev/null $STD filebrowser users add ID 1 --perm.admin
else else
filebrowser config init -a '0.0.0.0' &>/dev/null $STD filebrowser config init -a '0.0.0.0'
filebrowser config set -a '0.0.0.0' &>/dev/null $STD filebrowser config set -a '0.0.0.0'
filebrowser users add admin helper-scripts.com --perm.admin &>/dev/null $STD filebrowser users add admin helper-scripts.com --perm.admin
fi fi
msg_ok "Installed FileBrowser" msg_ok "Installed FileBrowser"

View File

@ -61,10 +61,10 @@ function update_script() {
fi fi
if [ "$UPD" == "3" ]; then if [ "$UPD" == "3" ]; then
msg_info "Installing Home Assistant Community Store (HACS)" msg_info "Installing Home Assistant Community Store (HACS)"
apt update &>/dev/null $STD apt update
apt install unzip &>/dev/null $STD apt install unzip
cd /var/lib/docker/volumes/hass_config/_data cd /var/lib/docker/volumes/hass_config/_data
bash <(curl -fsSL https://get.hacs.xyz) &>/dev/null $STD bash <(curl -fsSL https://get.hacs.xyz)
msg_ok "Installed Home Assistant Community Store (HACS)" msg_ok "Installed Home Assistant Community Store (HACS)"
echo -e "\n Reboot Home Assistant and clear browser cache then Add HACS integration.\n" echo -e "\n Reboot Home Assistant and clear browser cache then Add HACS integration.\n"
exit exit
@ -73,10 +73,10 @@ function update_script() {
IP=$(hostname -I | awk '{print $1}') IP=$(hostname -I | awk '{print $1}')
msg_info "Installing FileBrowser" msg_info "Installing FileBrowser"
RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g') RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g')
curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/v2.23.0/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin &>/dev/null $STD curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/v2.23.0/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin
filebrowser config init -a '0.0.0.0' &>/dev/null $STD filebrowser config init -a '0.0.0.0'
filebrowser config set -a '0.0.0.0' &>/dev/null $STD filebrowser config set -a '0.0.0.0'
filebrowser users add admin helper-scripts.com --perm.admin &>/dev/null $STD filebrowser users add admin helper-scripts.com --perm.admin
msg_ok "Installed FileBrowser" msg_ok "Installed FileBrowser"
msg_info "Creating Service" msg_info "Creating Service"
@ -91,7 +91,7 @@ ExecStart=/usr/local/bin/filebrowser -r /
[Install] [Install]
WantedBy=default.target" >$service_path WantedBy=default.target" >$service_path
systemctl enable --now filebrowser.service &>/dev/null $STD systemctl enable --now filebrowser.service
msg_ok "Created Service" msg_ok "Created Service"
msg_ok "Completed Successfully!\n" msg_ok "Completed Successfully!\n"

View File

@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get install -y homebridge &>/dev/null $STD apt-get install -y homebridge
msg_ok "Updated Successfully" msg_ok "Updated Successfully"
exit exit
} }

View File

@ -30,8 +30,8 @@ function update_script() {
if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
if ! command -v npm >/dev/null 2>&1; then if ! command -v npm >/dev/null 2>&1; then
echo "Installing NPM..." echo "Installing NPM..."
apt-get install -y npm >/dev/null 2>&1 $STD apt-get install -y npm
npm install -g pnpm >/dev/null 2>&1 $STD npm install -g pnpm
echo "Installed NPM..." echo "Installed NPM..."
fi fi
fi fi
@ -45,11 +45,11 @@ 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
npx --yes update-browserslist-db@latest >/dev/null 2>&1 $STD npx --yes update-browserslist-db@latest
pnpm install >/dev/null 2>&1 $STD pnpm install
export NEXT_PUBLIC_VERSION="v$RELEASE" export NEXT_PUBLIC_VERSION="v$RELEASE"
export NEXT_PUBLIC_REVISION="source" export NEXT_PUBLIC_REVISION="source"
pnpm build >/dev/null 2>&1 $STD pnpm build
systemctl start homepage systemctl start homepage
echo "${RELEASE}" >/opt/${APP}_version.txt echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated Homepage to v${RELEASE}" msg_ok "Updated Homepage to v${RELEASE}"

View File

@ -41,7 +41,7 @@ function update_script() {
rm -rf /opt/homer/* rm -rf /opt/homer/*
cd /opt/homer cd /opt/homer
wget -q https://github.com/bastienwirtz/homer/releases/latest/download/homer.zip wget -q https://github.com/bastienwirtz/homer/releases/latest/download/homer.zip
unzip homer.zip &>/dev/null $STD unzip homer.zip
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"
msg_info "Restoring assets directory" msg_info "Restoring assets directory"

View File

@ -28,8 +28,8 @@ function update_script() {
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
apt-get update &>/dev/null $STD apt-get update
apt-get -y upgrade &>/dev/null $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
exit exit
} }

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