Compare commits

...

169 Commits

Author SHA1 Message Date
CanbiZ
34032b7be3 testing actions 2025-11-04 09:50:52 +01:00
community-scripts-pr-app[bot]
2b920ca20b Update CHANGELOG.md (#8854)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-04 00:14:36 +00:00
community-scripts-pr-app[bot]
4dae433486 Update versions.json (#8853)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-04 01:14:12 +01:00
community-scripts-pr-app[bot]
5cb9733abe Update CHANGELOG.md (#8849)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-03 19:08:22 +00:00
Chris
e969f7f5a0 Pin version to 2.2.2 (#8848) 2025-11-03 20:07:59 +01:00
community-scripts-pr-app[bot]
1ee84c4f61 Update CHANGELOG.md (#8847)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-03 13:27:50 +00:00
CanbiZ
bfeece617a Asterisk: handle errors in version retrieval commands (#8844) 2025-11-03 14:27:21 +01:00
community-scripts-pr-app[bot]
bc7bf8d77a Update CHANGELOG.md (#8846)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-03 13:11:36 +00:00
Ömer Taha Öztop
08caae0ace linkstack: fix wrong directory installation (#8814) 2025-11-03 14:11:11 +01:00
community-scripts-pr-app[bot]
113d3ae784 Update CHANGELOG.md (#8843)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-03 12:06:48 +00:00
community-scripts-pr-app[bot]
fd7c08cd2f Update versions.json (#8842)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-03 13:06:21 +01:00
community-scripts-pr-app[bot]
c22a9d855b Update .app files (#8838)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-11-03 09:53:13 +01:00
community-scripts-pr-app[bot]
8a65470ec8 Update CHANGELOG.md (#8839)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-03 08:48:41 +00:00
community-scripts-pr-app[bot]
f8202ef665 Update CHANGELOG.md (#8837)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-03 08:48:03 +00:00
community-scripts-pr-app[bot]
5b0accb90d Update date in json (#8836)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-11-03 08:47:58 +00:00
push-app-to-main[bot]
5a70f4909e Donetick (#8835) 2025-11-03 09:47:38 +01:00
CanbiZ
7c94cc7d02 Removed: MeTube (#8830) 2025-11-03 09:47:19 +01:00
community-scripts-pr-app[bot]
45bcc5815a Update CHANGELOG.md (#8834)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-03 07:50:15 +00:00
CanbiZ
d427619745 Remove BOM from shebang lines in ct scripts (#8833) 2025-11-03 08:49:54 +01:00
community-scripts-pr-app[bot]
5ac3ab61f7 Update CHANGELOG.md (#8832)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-03 00:14:03 +00:00
community-scripts-pr-app[bot]
fa99d9c562 Update versions.json (#8831)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-03 01:13:42 +01:00
community-scripts-pr-app[bot]
7cff1153a4 Update CHANGELOG.md (#8829)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-02 19:53:30 +00:00
Slaviša Arežina
077c866399 Refactor (#8828) 2025-11-02 20:53:05 +01:00
community-scripts-pr-app[bot]
95c17ad8a4 Update CHANGELOG.md (#8826)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-02 17:52:04 +00:00
Fabian Kröger
39117a1b09 Zigbee2MQTT: fix: pnpm workspace in update (#8825) 2025-11-02 18:51:44 +01:00
community-scripts-pr-app[bot]
01b27f0f3e Update CHANGELOG.md (#8822)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-02 14:40:49 +00:00
Chris
cc5abc8282 MediaManager: fix BASE_PATH error preventing main page load (#8821) 2025-11-02 06:40:25 -08:00
community-scripts-pr-app[bot]
ae517626d9 Update versions.json (#8820)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-02 13:04:53 +01:00
community-scripts-pr-app[bot]
2ff63f561a Update CHANGELOG.md (#8816)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-02 00:13:54 +00:00
community-scripts-pr-app[bot]
afd693e65a Update versions.json (#8815)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-02 01:13:31 +01:00
community-scripts-pr-app[bot]
6a4909bee3 Update CHANGELOG.md (#8812)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-01 20:41:49 +00:00
Slaviša Arežina
84b0acc185 Fix release fetching (#8807) 2025-11-01 21:41:25 +01:00
community-scripts-pr-app[bot]
1e16f20951 Update CHANGELOG.md (#8811)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-01 19:07:13 +00:00
push-app-to-main[bot]
f36c8d525a Pangolin (#8809)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2025-11-01 20:06:45 +01:00
community-scripts-pr-app[bot]
dab9200916 Update CHANGELOG.md (#8806)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-01 13:49:22 +00:00
Tobias
600da80ff4 frontend: chore: bump debian OS (#8798)
Removed Debian version 11 from the operating systems list.
2025-11-01 06:48:59 -07:00
community-scripts-pr-app[bot]
8ec5e3e41f Update CHANGELOG.md (#8803)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-01 12:44:45 +00:00
Chris
d8618652d9 Immich: Pin version to 2.2.1 (#8800) 2025-11-01 13:44:21 +01:00
community-scripts-pr-app[bot]
dc90d68d3b Update versions.json (#8801)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-01 13:05:00 +01:00
community-scripts-pr-app[bot]
9fa2670348 Update CHANGELOG.md (#8797)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-01 08:07:00 +00:00
Tobias
9a2fc84789 jellyfin: fix: initial update (#8784) 2025-11-01 09:06:33 +01:00
community-scripts-pr-app[bot]
a48963ff66 Update CHANGELOG.md (#8795)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-01 00:16:00 +00:00
community-scripts-pr-app[bot]
fe0eb73ceb Update versions.json (#8794)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-01 01:15:34 +01:00
community-scripts-pr-app[bot]
a7524317fa Update CHANGELOG.md (#8792)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-31 21:33:47 +00:00
Andrew Still
c9e6f85a9c Removed errant ` from wireguard.json (#8791) 2025-10-31 22:33:23 +01:00
community-scripts-pr-app[bot]
9db82be59c Update CHANGELOG.md (#8790)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-31 16:15:52 +00:00
Slaviša Arežina
b715c1ed18 Reitti: Fix missing data directory (#8787)
* Reitti fix

* Update photon.service configuration in install script

* Update
2025-10-31 09:15:28 -07:00
community-scripts-pr-app[bot]
7f86f98d8d Update versions.json (#8788)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-31 13:06:26 +01:00
community-scripts-pr-app[bot]
3397846bc1 Update CHANGELOG.md (#8782)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-31 08:47:56 +00:00
CanbiZ
b3a7e9340a omada: fix update script with mongodb 8 (#8724)
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2025-10-31 09:47:22 +01:00
community-scripts-pr-app[bot]
4def83ef00 Update CHANGELOG.md (#8781)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-31 08:46:08 +00:00
Slaviša Arežina
630c223b19 Update Nginx configuration to use port 6060 (#8780) 2025-10-31 09:45:47 +01:00
community-scripts-pr-app[bot]
a1c7471e00 Update CHANGELOG.md (#8778)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-31 07:49:53 +00:00
Marcio Rinaldi
f9a3c8215b Fix paths in grist.sh (#8777) 2025-10-31 08:49:31 +01:00
community-scripts-pr-app[bot]
c1c073b10f Update CHANGELOG.md (#8774)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-31 00:13:16 +00:00
community-scripts-pr-app[bot]
2ba4152c23 Update versions.json (#8773)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-31 01:12:52 +01:00
community-scripts-pr-app[bot]
5c168bb938 Update CHANGELOG.md (#8771)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-30 19:41:18 +00:00
Chris
132e49f35e Immich: Updates for v2.2.0 (#8770)
* replace for-loop with curl native for multiple downloads

* add ccache dependency for OCR feature

* Update NodeJS to 24

* bump pinned version to 2.2.0
2025-10-30 20:40:44 +01:00
community-scripts-pr-app[bot]
edfaeb8467 Update CHANGELOG.md (#8769)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-30 18:21:11 +00:00
Slaviša Arežina
38963ede34 Update ExecStart in openarchiver.service (#8768) 2025-10-30 11:20:50 -07:00
community-scripts-pr-app[bot]
9867ab4c78 Update CHANGELOG.md (#8766)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-30 18:07:48 +00:00
Slaviša Arežina
0a25106abd Open Archiver: Fix missing command in update procedure (#8765)
* Fix update

* Update

* Update

* Update service file
2025-10-30 11:07:23 -07:00
community-scripts-pr-app[bot]
2cfe936605 Update CHANGELOG.md (#8760)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-30 16:24:46 +00:00
CanbiZ
be7d0704d7 Standardize update success messages in scripts (#8757) 2025-10-30 17:24:16 +01:00
community-scripts-pr-app[bot]
e900367b51 Update CHANGELOG.md (#8759)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-30 12:51:34 +00:00
Slaviša Arežina
9b32766560 Update DATABASE_URL to use mariadb in installation script (#8758) 2025-10-30 13:51:10 +01:00
community-scripts-pr-app[bot]
b20854d299 Update versions.json (#8756)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-30 13:06:10 +01:00
community-scripts-pr-app[bot]
ac2141b9e9 Update CHANGELOG.md (#8755)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-30 12:04:17 +00:00
CanbiZ
5a92816946 Add explicit exit calls to update_script functions (#8752) 2025-10-30 13:03:54 +01:00
community-scripts-pr-app[bot]
2d9d62118f Update CHANGELOG.md (#8754)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-30 11:48:18 +00:00
CanbiZ
6fcae07454 core: add function cleanup_lxc (#8749) 2025-10-30 12:47:54 +01:00
community-scripts-pr-app[bot]
106e2efc2a Update CHANGELOG.md (#8753)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-30 11:42:26 +00:00
CanbiZ
5b4f67f94f kimai: Set global SQL mode to empty in install script (#8747) 2025-10-30 12:42:04 +01:00
community-scripts-pr-app[bot]
d54b3a0bdb Update CHANGELOG.md (#8750)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-30 11:22:53 +00:00
Slaviša Arežina
490f65eac8 Update default credentials in cronicle.json (#8720) 2025-10-30 12:22:30 +01:00
community-scripts-pr-app[bot]
44ccf3e886 Update CHANGELOG.md (#8748)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-30 11:13:51 +00:00
CanbiZ
c6f08d09c4 Asterisk: add interactive version selection to installer (#8726) 2025-10-30 12:13:26 +01:00
Bram Suurd
851f0dc37c Fix markdown formatting in JSON notes (#8744) 2025-10-30 11:46:12 +01:00
community-scripts-pr-app[bot]
da6cff182c Update CHANGELOG.md (#8742)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-30 08:35:02 +00:00
push-app-to-main[bot]
c8c23ca1cb Livebook (#8739)
* 'Add new script'

* chore refactor

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2025-10-30 01:34:37 -07:00
community-scripts-pr-app[bot]
f7ec037a38 Update CHANGELOG.md (#8740)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-30 08:16:54 +00:00
push-app-to-main[bot]
8896e6c964 Reitti (#8736)
* 'Add new script'

* Update reitti.json

* Update documentation URL in reitti.json

* Apply suggestion from @tremor021

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2025-10-30 09:16:30 +01:00
community-scripts-pr-app[bot]
7c583c7aa0 Update CHANGELOG.md (#8738)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-30 08:01:10 +00:00
push-app-to-main[bot]
6e3aeab72f BentoPDF (#8735)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-10-30 09:00:41 +01:00
community-scripts-pr-app[bot]
0c4658394d Update CHANGELOG.md (#8733)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-30 00:13:13 +00:00
community-scripts-pr-app[bot]
ec7f6dd34d Update versions.json (#8732)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-30 01:12:49 +01:00
CanbiZ
5ff2bb4109 Fix typo for already updated 2025-10-29 22:10:07 +01:00
CanbiZ
de828aa565 typo 2025-10-29 14:00:50 -07:00
CanbiZ
4bf2846efa typo 2025-10-29 14:00:16 -07:00
CanbiZ
a04a2e1297 kimai switch to tarball 2025-10-29 13:44:04 -07:00
CanbiZ
28a6b688b9 kimai Switch to tarball 2025-10-29 13:43:32 -07:00
community-scripts-pr-app[bot]
0e4ef69d23 Update CHANGELOG.md (#8728)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-29 16:55:36 +00:00
CanbiZ
37403b554e Add Chromium and Node modules to ArchiveBox scripts (#8725) 2025-10-29 17:55:11 +01:00
community-scripts-pr-app[bot]
034c55b2a3 Update CHANGELOG.md (#8727)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-29 16:53:31 +00:00
CanbiZ
a1f8cb1bae Add workaround for libguestfs issue on Proxmox VE 9.0 (#8722) 2025-10-29 17:53:00 +01:00
CanbiZ
08ec932787 fix alpine gitea exit 2025-10-29 08:40:53 -07:00
CanbiZ
5a01dd2ec9 Add protobuf dependencies to installation script 2025-10-29 15:52:17 +01:00
community-scripts-pr-app[bot]
7aaaa9a71f Update CHANGELOG.md (#8723)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-29 14:44:38 +00:00
Tobias
cbc2ba1832 tracktor: refactor envfile (#8711)
* tracktor: refactor enfile

* tracktor: fix: update links

* tracktor: add: mechanic to update envfile
2025-10-29 15:44:10 +01:00
CanbiZ
ee02bc1977 Add missing dependencies to libretranslate-install.sh
Added missing dependencies for LibreTranslate installation.
2025-10-29 15:37:42 +01:00
CanbiZ
fda22e8890 typo 2025-10-29 14:33:22 +01:00
community-scripts-pr-app[bot]
6f52a6cff9 Update CHANGELOG.md (#8719)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-29 12:09:45 +00:00
CanbiZ
be539981f8 Dispatcharr: add folders in installer / add more build ressources (#8708) 2025-10-29 13:09:23 +01:00
community-scripts-pr-app[bot]
2009da9a79 Update versions.json (#8718)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-29 13:06:58 +01:00
community-scripts-pr-app[bot]
a5fb2c0fb6 Update CHANGELOG.md (#8717)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-29 12:06:51 +00:00
CanbiZ
ac32d7a304 LibreTranslate: bump torch version (#8710) 2025-10-29 13:06:31 +01:00
community-scripts-pr-app[bot]
3fe234b021 Update CHANGELOG.md (#8716)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-29 12:06:26 +00:00
CanbiZ
b9404efc57 Kimai / Ghost / ManageMyDamnLife: Switch to MariaDB (#8712)
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2025-10-29 13:06:03 +01:00
CanbiZ
304de66ec1 Remove: MySQL (#8709) 2025-10-29 12:53:27 +01:00
community-scripts-pr-app[bot]
9f565d3914 Update CHANGELOG.md (#8704)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-29 00:14:29 +00:00
community-scripts-pr-app[bot]
e702c552c5 Update versions.json (#8703)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-29 01:14:07 +01:00
community-scripts-pr-app[bot]
b853739fdc Update CHANGELOG.md (#8695)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-28 17:10:44 +00:00
Gerhard Burger
c84c44804f Update SABnzbd. Include par2cmdline-turbo (#8648)
* Fix non-free sources

- Don't delete after use
- Use trixie instead of bookworm
- deb822 style

* Add par2cmdline-turbo to sabnzbd

* Remove duplicate setup_uv

* Remove duplicated msg around setup_uv

* Update sabnzbd to use fetch_and_deploy

* switch fetch_deploy outside of msg

Added virtual environment setup and package installation for SABnzbd.

---------

Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-10-28 10:10:19 -07:00
community-scripts-pr-app[bot]
f77c2594c3 Update CHANGELOG.md (#8694)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-28 16:09:29 +00:00
glopes
b3849dbf2b Update alpine-komodo.sh fixing missing pull images command (#8689) 2025-10-28 17:09:09 +01:00
community-scripts-pr-app[bot]
2cd02870c5 Update CHANGELOG.md (#8693)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-28 16:09:00 +00:00
Chris
f6da623676 jotty: Add more ENV VARS - commented out (#8688) 2025-10-28 17:08:36 +01:00
community-scripts-pr-app[bot]
a4e1d261af Update CHANGELOG.md (#8687)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-28 13:20:04 +00:00
Gerhard Burger
909dbc20ce Bump bazarr to Debian 13 (#8677)
* Bump bazarr to Debian 13

- Removes unnecessary python3 install
- Use uv to create proper 3.12 venv (bazarr will give warnings about 3.13)

* Improve bazarr update

- setup_uv now versioned
- graceful update from pre-venv install

* chore: cosmetic

---------

Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
2025-10-28 14:19:38 +01:00
community-scripts-pr-app[bot]
3a1f1bf813 Update CHANGELOG.md (#8685)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-28 12:07:39 +00:00
community-scripts-pr-app[bot]
0adc827c69 Update versions.json (#8684)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-28 13:07:14 +01:00
community-scripts-pr-app[bot]
279d3d391a Update CHANGELOG.md (#8681)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-28 10:30:33 +00:00
Gerhard Burger
15047893bc Update flaresolverr to Debian 13 (#8672)
* Update flaresolverr to Debian 13

* Check Debian version before updating FlareSolverr
2025-10-28 11:30:06 +01:00
community-scripts-pr-app[bot]
8b54f615a8 Update CHANGELOG.md (#8676)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-28 00:12:59 +00:00
community-scripts-pr-app[bot]
57d435647b Update versions.json (#8675)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-28 01:12:37 +01:00
community-scripts-pr-app[bot]
fe2734f96a Update CHANGELOG.md (#8671)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-27 19:35:25 +00:00
CanbiZ
01f1985d2d Add typescript and esbuild to browserless setup (#8666)
Updated both the update and install scripts to include installation of typescript and esbuild for browserless. This ensures required build dependencies are present before running build commands.
2025-10-27 20:35:04 +01:00
community-scripts-pr-app[bot]
92f9033981 Update date in json (#8670)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-10-27 19:25:39 +00:00
community-scripts-pr-app[bot]
e1603bebec Update CHANGELOG.md (#8669)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-27 19:25:36 +00:00
push-app-to-main[bot]
abdbca59ff Dispatcharr (#8658)
* 'Add new script'

* Update dispatcharr.sh

* Apply suggestion from @tremor021

* Update install/dispatcharr-install.sh

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

* Update install/dispatcharr-install.sh

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

* Update install/dispatcharr-install.sh

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

* Update author information in dispatcharr.sh

* Update RAM and version in dispatcharr.json

* Remove gcc from dependency installation

* Update website and logo URLs in dispatcharr.json

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-10-27 20:25:16 +01:00
CanbiZ
6c662ae6ea Garage: fix Service 2025-10-27 11:09:27 -07:00
community-scripts-pr-app[bot]
5c04c89f3f Update .app files (#8664)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-10-27 15:48:44 +01:00
community-scripts-pr-app[bot]
fba1d16626 Update CHANGELOG.md (#8665)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-27 13:53:54 +00:00
push-app-to-main[bot]
3666f4981f Garage | Alpine-Garage (#8656)
* 'Add new script'

* add alpine-garage-install.sh

* add alpine-garage.sh

* Update alpine-garage.sh

* Update garage-install.sh

* Increase default RAM and disk for Garage containers

Updated ct/garage.sh and ct/alpine-garage.sh to set higher default RAM (1024MB for Garage, 512MB for Alpine-Garage) and disk (5GB for both). Synced these resource changes in frontend/public/json/garage.json to ensure consistency in container setup defaults.

* Apply suggestion from @tremor021

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2025-10-27 14:53:20 +01:00
community-scripts-pr-app[bot]
db9809a817 Update CHANGELOG.md (#8663)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-27 13:12:23 +00:00
Tobias
e69da3846a jellyfin: fix: intel deps (#8657) 2025-10-27 14:11:46 +01:00
community-scripts-pr-app[bot]
cfb76fd0ab Update versions.json (#8661)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-27 13:06:59 +01:00
community-scripts-pr-app[bot]
fb11b1a0e2 Update CHANGELOG.md (#8653)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-27 00:14:24 +00:00
community-scripts-pr-app[bot]
66b8d6cb90 Update versions.json (#8652)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-27 01:13:55 +01:00
community-scripts-pr-app[bot]
1723775c55 Update CHANGELOG.md (#8650)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-26 20:58:06 +00:00
CanbiZ
8852def9a6 PiHole: Bump to Debian 12 (#8649) 2025-10-26 21:57:42 +01:00
community-scripts-pr-app[bot]
249a02754a Update date in json (#8646) 2025-10-26 20:04:43 +01:00
community-scripts-pr-app[bot]
65c79447ea Update CHANGELOG.md (#8647)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-26 14:01:47 +00:00
push-app-to-main[bot]
a6607734b7 'Add new script' (#8633) 2025-10-26 15:01:21 +01:00
community-scripts-pr-app[bot]
a8d5fc9bc8 Update versions.json (#8645)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-26 13:06:29 +01:00
community-scripts-pr-app[bot]
0e7a089949 Update CHANGELOG.md (#8644)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-26 11:19:10 +00:00
Slaviša Arežina
e208b571b9 Refactor: Mylar3 (#8642)
* Refactor

* Update mylar3.sh
2025-10-26 04:18:38 -07:00
community-scripts-pr-app[bot]
327544c737 Update CHANGELOG.md (#8641)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-26 00:13:57 +00:00
community-scripts-pr-app[bot]
1c8b7b4e7e Update versions.json (#8640)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-26 02:13:28 +02:00
community-scripts-pr-app[bot]
6e5140314f Update CHANGELOG.md (#8636)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-25 18:35:00 +00:00
community-scripts-pr-app[bot]
622f85db23 Update CHANGELOG.md (#8635)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-25 18:34:39 +00:00
community-scripts-pr-app[bot]
55be335b66 Update date in json (#8634)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-10-25 18:34:35 +00:00
push-app-to-main[bot]
5db685f235 PatchMon (#8632)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ <47820557+MickLesk@users.noreply.github.com>
2025-10-25 20:34:09 +02:00
community-scripts-pr-app[bot]
14027a605a Update versions.json (#8629)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-25 14:04:37 +02:00
community-scripts-pr-app[bot]
5f0dba82ad Update CHANGELOG.md (#8626)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-25 06:37:11 +00:00
Slaviša Arežina
c0087bf8aa Fix interactive (#8622) 2025-10-25 08:36:39 +02:00
community-scripts-pr-app[bot]
691fc48915 Update CHANGELOG.md (#8624)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-25 00:12:19 +00:00
community-scripts-pr-app[bot]
fe9e894e79 Update versions.json (#8623)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-25 02:11:52 +02:00
community-scripts-pr-app[bot]
43356df77f Update CHANGELOG.md (#8619)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-24 16:38:08 +00:00
Nolhan
e4b96ec200 Change config_path to /etc/bunkerweb/variables.env (#8618) 2025-10-24 18:37:41 +02:00
community-scripts-pr-app[bot]
01a63d0a9d Update CHANGELOG.md (#8617)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-24 15:01:15 +00:00
Vincent
0a4a64ca0c Update logo URL in guardian.json (#8615) 2025-10-24 17:00:46 +02:00
community-scripts-pr-app[bot]
4cdb43065d Update versions.json (#8613)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-24 14:07:26 +02:00
community-scripts-pr-app[bot]
add12ef634 Update CHANGELOG.md (#8608)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-24 00:11:03 +00:00
community-scripts-pr-app[bot]
3ab5167d8a Update versions.json (#8607)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-24 02:10:34 +02:00
community-scripts-pr-app[bot]
b16a7f4562 Update CHANGELOG.md (#8604)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-23 16:46:45 +00:00
Filippo Stella
fa3f993256 Update dependency installation for Radicale (#8603) 2025-10-23 18:46:17 +02:00
community-scripts-pr-app[bot]
c0894cb612 Update CHANGELOG.md (#8601)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-23 15:29:08 +00:00
CanbiZ
3b96230327 Various Downgrades to Debian 12 (MySQL / OMW / Technitium) (#8595)
* downgrades deb12

* fixes

* Update inventree.sh

* fix format

* Update Debian version to 12 in omv and technitiumdns configs

Changed the Debian version from 13 to 12 in both omv.json and technitiumdns.json to reflect the correct OS version for these configurations.
2025-10-23 17:28:38 +02:00
446 changed files with 5899 additions and 2375 deletions

458
.github/AUTOLABELER_FEATURES.md generated vendored Normal file
View File

@@ -0,0 +1,458 @@
# 🤖 Autolabeler Features
This document describes the automated features of our PR labeling system.
## 🎯 All Features
### 1. **Label Cleanup** ✨
Automatically removes outdated or conflicting labels when PR is updated.
**Example:**
- PR initially labeled with `feature` and `bugfix`
- User updates PR and only checks `bugfix`
- Bot removes `feature` label automatically
**Benefits:**
- Prevents label confusion
- Ensures accurate changelog categorization
- Maintains label consistency
---
### 2. **Commit Message Analysis** 📝
Automatically detects change types from conventional commit messages.
**Supported Formats:**
- `fix:` or `fix(scope):` → adds `bugfix` label
- `feat:` or `feat(scope):` → adds `feature` label
- `refactor:` or `refactor(scope):` → adds `refactor` label
- `BREAKING CHANGE:` or `feat!:` → adds `breaking change` label
**Example:**
```
feat(docker): add support for custom networks
This adds support for user-defined networks
```
→ Automatically labeled with `feature`
**Benefits:**
- Works even if checkboxes are forgotten
- Supports standard Git conventions
- Combines with template checkboxes
---
### 3. **Size Labels** 📏
Automatically adds size labels based on total lines changed.
**Size Categories:**
- `size: XS` → 1-10 lines (🟢 Green)
- `size: S` → 11-50 lines (🟢 Yellow-Green)
- `size: M` → 51-200 lines (🟡 Yellow)
- `size: L` → 201-500 lines (🟠 Orange)
- `size: XL` → 500+ lines (🔴 Red)
**Benefits:**
- Helps reviewers prioritize
- Quick visual indication of PR complexity
- Automatic and consistent
**Note:** Labels need to be created in repository first. See [SETUP_NEW_LABELS.md](SETUP_NEW_LABELS.md)
---
### 4. **First-Time Contributor Welcome** 🎉
Special welcome message for contributors making their first PR.
**Example:**
```markdown
## 🎉 Welcome to the Community!
Thank you @username for your first contribution! 🙌
A maintainer will review your PR soon. Here are some helpful resources:
- Contributing Guide
- Code of Conduct
```
**Benefits:**
- Better onboarding experience
- Increases contributor retention
- Builds community
---
### 5. **Documentation Check** 📚
Warns when code changes don't include documentation updates.
**Triggers Warning When:**
- Code files modified (`.sh`, `.func`, `.js`, `.go`, etc.)
- No documentation files modified (`.md`, `README`, etc.)
- Not a bugfix or refactor (features should have docs!)
**Example Warning:**
```markdown
📚 **Documentation update recommended**: Consider updating documentation
for these code changes.
```
**Benefits:**
- Improves documentation coverage
- Reminds contributors about docs
- Better project maintainability
---
### 6. **Related Issues Detection** 🔗
Automatically finds and links related open issues.
**How it works:**
- Extracts script names from changed files
- Searches open issues for matching names
- Links up to 5 most relevant issues
**Example:**
```markdown
## 🔗 Related Issues
This PR may be related to the following open issues:
- #123: Docker script fails on Ubuntu 22.04
- #456: Add network configuration options
```
**Benefits:**
- Better context for reviewers
- Automatic cross-referencing
- Helps track issue resolution
---
### 7. **Validation Warnings** ⚠️
Provides helpful warnings when PR information is incomplete or inconsistent.
**Checks:**
- ✅ Change type checkbox is selected for script updates
- ✅ Website checkbox matches file changes
- ✅ Required labels are present
- ✅ Documentation updated for new features
**Example Warning:**
```markdown
## ⚠️ Validation Warnings
⚠️ **Missing change type**: Please check one of the change type checkboxes
(Bug fix, New feature, Refactoring, or Breaking change) in the PR description.
```
---
### 8. **Changelog Preview** 📝
Shows contributors exactly how their PR will appear in the changelog.
**Example Preview:**
```markdown
## 📝 Changelog Preview
This PR will appear in the changelog as:
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Fix docker script issue @username ([#123](url))
```
**Benefits:**
- Contributors see immediate feedback
- Reduces changelog errors
- Improves PR quality
---
## 🏷️ Label Priority System
When multiple change types are checked, only the highest priority label is applied:
1. 🐞 **Bugfix** (highest priority)
2. 🔧 **Refactor**
3.**Feature**
4. 💥 **Breaking Change** (lowest priority)
**Rationale:**
- Bug fixes are most important for users
- Prevents PRs from appearing in multiple subcategories
- Maintains clean changelog structure
**Note:** This applies to both template checkboxes AND conventional commit messages!
---
## 📊 Changelog Categories
The bot automatically determines which changelog category your PR belongs to:
| Files Changed | Category | Note |
| ------------------------------------ | ------------------------------- | ------------------ |
| `ct/`, `vm/`, `install/`, `turnkey/` | 🚀 Updated Scripts | Standard scripts |
| `tools/` | 🛠️ Updated Tools | Utility tools |
| `misc/` | 🔧 Core Updates | Core functionality |
| `frontend/` (not JSON) | 🌐 Website | Frontend changes |
| `frontend/public/json/` | 🌐 Website > Script Information | Metadata updates |
| Documentation files | 🧰 Maintenance | Docs, README, etc. |
**Multi-Category PRs:**
PRs that change files in multiple categories will appear in each relevant category.
---
## 🔄 Bot Behavior
### When PR is Opened/Edited:
1. ✅ Analyzes changed files
2. ✅ Parses PR template checkboxes
3. ✅ Analyzes commit messages (conventional commits)
4. ✅ Calculates size label
5. ✅ Checks if first-time contributor
6. ✅ Applies appropriate labels
7. ✅ Removes conflicting labels
8. ✅ Checks for validation issues
9. ✅ Finds related issues
10. ✅ Posts/updates comment with all info
### Comment Structure:
A single bot comment contains (in order):
1. 🎉 Welcome message (if first-time contributor)
2. ⚠️ Validation warnings (if any)
3. 📝 Changelog preview (always)
4. 🔗 Related issues (if found)
5. Footer with PR size
### Comment Updates:
- Bot updates its own comment when PR is edited (no spam)
- Only posts new comment if none exists
- Welcome message is preserved across updates
---
## 📝 Complete Example
Here's what a first-time contributor might see:
```markdown
## 🎉 Welcome to the Community!
Thank you @newuser for your first contribution! 🙌
A maintainer will review your PR soon. Here are some helpful resources:
- Contributing Guide
- Code of Conduct
---
## ⚠️ Validation Warnings
📚 **Documentation update recommended**: Consider updating documentation
for these code changes.
---
## 📝 Changelog Preview
This PR will appear in the changelog as:
### 🚀 Updated Scripts
- #### ✨ New Features
- Add Docker network support @newuser ([#789](url))
---
## 🔗 Related Issues
This PR may be related to the following open issues:
- #456: Docker networking not working
- #123: Request: Custom network support
---
_This is an automated message from the PR labeler bot. PR size: size: M_
```
---
## 🛠️ For Maintainers
### Debugging Label Issues
If labels aren't being applied correctly:
1. Check PR template checkboxes are properly formatted
2. Verify commit messages use conventional format
3. Look for bot comment explaining label decisions
4. Check GitHub Actions logs for errors
5. Verify all required labels exist in repository
### Modifying Label Behavior
**Config files:**
- `.github/autolabeler-config.json` - File path → label mappings
- `.github/changelog-pr-config.json` - Changelog categories
- `.github/workflows/autolabeler.yml` - Core logic
**Priority order** can be changed in `autolabeler.yml`:
```javascript
const priorityOrder = ["bugfix", "refactor", "feature", "breaking change"];
```
**Size thresholds** can be adjusted:
```javascript
if (totalChanges <= 10) labelsToAdd.add("size: XS");
else if (totalChanges <= 50) labelsToAdd.add("size: S");
// etc.
```
### Creating Required Labels
Run these commands to create all size labels:
```bash
gh label create "size: XS" --description "1-10 lines" --color "00ff00"
gh label create "size: S" --description "11-50 lines" --color "7fff00"
gh label create "size: M" --description "51-200 lines" --color "ffff00"
gh label create "size: L" --description "201-500 lines" --color "ff8c00"
gh label create "size: XL" --description "500+ lines" --color "ff0000"
```
See [SETUP_NEW_LABELS.md](SETUP_NEW_LABELS.md) for full setup guide.
---
## 🧪 Testing Scenarios
### Test 1: Conventional Commits
```bash
# Commit with conventional format
git commit -m "feat: add new feature"
# Expected: feature label, even without checkbox
```
### Test 2: Size Labels
```bash
# Small PR (< 50 lines)
# Expected: size: S label
```
### Test 3: First-Time Contributor
```bash
# Create PR from new contributor account
# Expected: Welcome message in bot comment
```
### Test 4: Documentation Check
```bash
# Change .sh file, no .md changes
# Expected: Warning about missing docs
```
### Test 5: Related Issues
```bash
# PR changes "docker.sh"
# Expected: Links to issues mentioning "docker"
```
---
## 🎉 Benefits Summary
**Automation**: Less manual work for maintainers
**Consistency**: All PRs follow same standard
**Quality**: Multiple validation checks
**Transparency**: Contributors see what happens
**Community**: Better onboarding for new contributors
**Context**: Automatic issue linking
**Clean Changelogs**: Priority system prevents duplication
---
## 🐛 Troubleshooting
**Labels not applied?**
- Check if PR template checkboxes are properly formatted
- Try using conventional commit messages
- Ensure files changed match expected patterns
- Look for validation warnings in bot comment
**Size label missing?**
- Labels need to be created first (see setup guide)
- Check if label was removed manually
- Verify workflow has permissions to add labels
**Wrong category?**
- Verify file paths (tools/ vs ct/ vs misc/)
- Check if multiple categories apply (intended behavior)
- Review `.github/changelog-pr-config.json`
**Bot comment not appearing?**
- Check GitHub Actions logs
- Verify bot has comment permissions
- May take a few seconds after PR creation
- Check if PR is from a fork (requires pull_request_target)
**Related issues not found?**
- Script name must match issue title/body
- Only searches open issues
- Limited to top 5 results
---
**Questions?** Check the workflow logs or ask in the repository discussions.

View File

@@ -11,9 +11,8 @@ body:
- 🔎 If you encounter `[ERROR] in line 23: exit code *: while executing command "$@" > /dev/null 2>&1`, rerun the script with verbose mode before submitting the issue. - 🔎 If you encounter `[ERROR] in line 23: exit code *: while executing command "$@" > /dev/null 2>&1`, rerun the script with verbose mode before submitting the issue.
- 📜 **Read the script:** Familiarize yourself with the script's content and its purpose. This will help you understand the issue better and provide more relevant information - 📜 **Read the script:** Familiarize yourself with the script's content and its purpose. This will help you understand the issue better and provide more relevant information
Thank you for taking the time to report an issue! Please provide as much detail as possible to help us address the problem efficiently. Thank you for taking the time to report an issue! Please provide as much detail as possible to help us address the problem efficiently.
- type: input - type: input
id: guidelines id: guidelines
attributes: attributes:
@@ -34,8 +33,7 @@ body:
id: script_command id: script_command
attributes: attributes:
label: 📂 What was the exact command used to execute the script? label: 📂 What was the exact command used to execute the script?
placeholder: "e.g., bash -c \"$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/zigbee2mqtt.sh)\" or \"update\"" placeholder: 'e.g., bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/zigbee2mqtt.sh)" or "update"'
validations:
required: true required: true
- type: checkboxes - type: checkboxes
@@ -56,14 +54,15 @@ body:
attributes: attributes:
label: 🖥️ Which Linux distribution are you using? label: 🖥️ Which Linux distribution are you using?
options: options:
- -
- Alpine - Alpine
- Debian 11 - Debian 11
- Debian 12 - Debian 12
- Debian 13 - Debian 13
- Ubuntu 22.04 - Ubuntu 22.04
- Ubuntu 24.04 - Ubuntu 24.04
- Ubuntu 24.10 - Ubuntu 25.04
- Other
validations: validations:
required: true required: true

79
.github/SETUP_NEW_LABELS.md generated vendored Normal file
View File

@@ -0,0 +1,79 @@
# 🏷️ Setup New Labels
The autolabeler now uses additional size labels. These need to be created in your repository.
## Required Labels
### Size Labels (New)
These labels are automatically added based on the number of lines changed:
| Label | Lines Changed | Color | Description |
| ---------- | ------------- | --------- | ----------------------------- |
| `size: XS` | 1-10 | `#00ff00` | Extra Small - Minimal changes |
| `size: S` | 11-50 | `#7fff00` | Small - Minor changes |
| `size: M` | 51-200 | `#ffff00` | Medium - Moderate changes |
| `size: L` | 201-500 | `#ff8c00` | Large - Significant changes |
| `size: XL` | 500+ | `#ff0000` | Extra Large - Major changes |
## Quick Setup Commands
Run these commands in your terminal to create all labels at once:
```bash
# Create size labels
gh label create "size: XS" --description "Extra Small - 1-10 lines changed" --color "00ff00"
gh label create "size: S" --description "Small - 11-50 lines changed" --color "7fff00"
gh label create "size: M" --description "Medium - 51-200 lines changed" --color "ffff00"
gh label create "size: L" --description "Large - 201-500 lines changed" --color "ff8c00"
gh label create "size: XL" --description "Extra Large - 500+ lines changed" --color "ff0000"
```
## Manual Setup (GitHub UI)
1. Go to: `https://github.com/community-scripts/ProxmoxVE/labels`
2. Click "New label" for each label
3. Fill in:
- **Name**: Use exact names from table above
- **Description**: Copy from table
- **Color**: Use hex codes from table (without #)
## Verification
After creating labels, test by:
1. Creating a small PR (< 10 lines) → should get `size: XS`
2. Check that bot comment includes size in footer
## Optional: Label Sync
For automated label management, consider using [github-label-sync](https://github.com/Financial-Times/github-label-sync):
```json
{
"size: XS": {
"color": "00ff00",
"description": "Extra Small - 1-10 lines changed"
},
"size: S": {
"color": "7fff00",
"description": "Small - 11-50 lines changed"
},
"size: M": {
"color": "ffff00",
"description": "Medium - 51-200 lines changed"
},
"size: L": {
"color": "ff8c00",
"description": "Large - 201-500 lines changed"
},
"size: XL": {
"color": "ff0000",
"description": "Extra Large - 500+ lines changed"
}
}
```
---
**Note**: The autolabeler will work even if labels don't exist yet, but they won't be visible on PRs until created.

13
.github/autolabeler-config.json generated vendored
View File

@@ -101,20 +101,11 @@
"excludeGlobs": [] "excludeGlobs": []
} }
], ],
"addon": [ "tools": [
{ {
"fileStatus": null, "fileStatus": null,
"includeGlobs": [ "includeGlobs": [
"tools/addon/**" "tools/**"
],
"excludeGlobs": []
}
],
"pve-tool": [
{
"fileStatus": null,
"includeGlobs": [
"tools/pve/**"
], ],
"excludeGlobs": [] "excludeGlobs": []
} }

175
.github/changelog-pr-config.json generated vendored
View File

@@ -10,6 +10,10 @@
"labels": [ "labels": [
"update script" "update script"
], ],
"excludeLabels": [
"tools",
"core"
],
"subCategories": [ "subCategories": [
{ {
"title": "🐞 Bug Fixes", "title": "🐞 Bug Fixes",
@@ -18,6 +22,13 @@
], ],
"notes": [] "notes": []
}, },
{
"title": "🔧 Refactor",
"labels": [
"refactor"
],
"notes": []
},
{ {
"title": "✨ New Features", "title": "✨ New Features",
"labels": [ "labels": [
@@ -31,6 +42,61 @@
"breaking change" "breaking change"
], ],
"notes": [] "notes": []
}
]
},
{
"title": "🛠️ Updated Tools",
"labels": [
"update script",
"tools"
],
"requireAllLabels": true,
"subCategories": [
{
"title": "<22> Bug Fixes",
"labels": [
"bugfix"
],
"notes": []
},
{
"title": "<22>🔧 Refactor",
"labels": [
"refactor"
],
"notes": []
},
{
"title": "✨ New Features",
"labels": [
"feature"
],
"notes": []
},
{
"title": "💥 Breaking Changes",
"labels": [
"breaking change"
],
"notes": []
}
]
},
{
"title": "🔧 Core Updates",
"labels": [
"update script",
"core"
],
"requireAllLabels": true,
"subCategories": [
{
"title": "🐞 Bug Fixes",
"labels": [
"bugfix"
],
"notes": []
}, },
{ {
"title": "🔧 Refactor", "title": "🔧 Refactor",
@@ -38,6 +104,63 @@
"refactor" "refactor"
], ],
"notes": [] "notes": []
},
{
"title": "✨ New Features",
"labels": [
"feature"
],
"notes": []
},
{
"title": "💥 Breaking Changes",
"labels": [
"breaking change"
],
"notes": []
}
]
},
{
"title": "🌐 Website",
"labels": [
"website"
],
"subCategories": [
{
"title": "<22> Bug Fixes",
"labels": [
"bugfix"
],
"notes": []
},
{
"title": "<22> Refactor",
"labels": [
"refactor"
],
"notes": []
},
{
"title": "✨ New Features",
"labels": [
"feature"
],
"notes": []
},
{
"title": "<22> Breaking Changes",
"labels": [
"breaking change"
],
"notes": []
},
{
"title": "<22> Script Information",
"labels": [
"json"
],
"notes": []
} }
] ]
}, },
@@ -54,6 +177,13 @@
], ],
"notes": [] "notes": []
}, },
{
"title": "🔧 Refactor",
"labels": [
"refactor"
],
"notes": []
},
{ {
"title": "✨ New Features", "title": "✨ New Features",
"labels": [ "labels": [
@@ -69,7 +199,7 @@
"notes": [] "notes": []
}, },
{ {
"title": "📡 API", "title": "<EFBFBD> API",
"labels": [ "labels": [
"api" "api"
], ],
@@ -95,49 +225,6 @@
"maintenance" "maintenance"
], ],
"notes": [] "notes": []
},
{
"title": "🔧 Refactor",
"labels": [
"refactor"
],
"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": []
} }
] ]
}, },

340
.github/workflows/autolabeler.yml generated vendored
View File

@@ -35,6 +35,7 @@ jobs:
const prNumber = context.payload.pull_request.number; const prNumber = context.payload.pull_request.number;
const prBody = context.payload.pull_request.body || ""; const prBody = context.payload.pull_request.body || "";
const prAuthor = context.payload.pull_request.user.login;
let labelsToAdd = new Set(); let labelsToAdd = new Set();
@@ -45,6 +46,24 @@ jobs:
}); });
const prFiles = prListFilesResponse.data; const prFiles = prListFilesResponse.data;
// Get commits for commit message analysis
const { data: commits } = await github.rest.pulls.listCommits({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: prNumber,
});
// Check if this is a first-time contributor
const { data: prsByAuthor } = await github.rest.pulls.list({
owner: context.repo.owner,
repo: context.repo.repo,
state: 'all',
per_page: 5
});
const isFirstTimeContributor = !prsByAuthor.some(pr =>
pr.user.login === prAuthor && pr.number !== prNumber && pr.merged_at
);
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) => {
@@ -57,49 +76,316 @@ jobs:
if (shouldAddLabel) { if (shouldAddLabel) {
labelsToAdd.add(label); labelsToAdd.add(label);
if (label === "update script") { if (label === "update script" || label === "new script") {
for (const prFile of prFiles) { for (const prFile of prFiles) {
const filename = prFile.filename; const filename = prFile.filename;
if (filename.startsWith("vm/")) labelsToAdd.add("vm"); if (filename.startsWith("vm/")) labelsToAdd.add("vm");
if (filename.startsWith("tools/addon/")) labelsToAdd.add("addon"); if (filename.startsWith("tools/")) labelsToAdd.add("tools");
if (filename.startsWith("tools/pve/")) labelsToAdd.add("pve-tool"); if (filename.startsWith("misc/")) labelsToAdd.add("core");
} }
} }
} }
} }
if (labelsToAdd.size < 2) { // Feature 2: Analyze commit messages for conventional commits
const templateLabelMappings = { const commitMessages = commits.map(c => c.commit.message).join('\n');
"🐞 **Bug fix**": "bugfix", const conventionalCommitLabels = [];
"✨ **New feature**": "feature",
"💥 **Breaking change**": "breaking change",
"🆕 **New script**": "new script",
"🌍 **Website update**": "website", // handled special
"🔧 **Refactoring / Code Cleanup**": "refactor",
"📝 **Documentation update**": "documentation" // mapped to maintenance
};
for (const [checkbox, label] of Object.entries(templateLabelMappings)) { if (/^fix(\(.*?\))?:/im.test(commitMessages)) {
const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1"); conventionalCommitLabels.push("bugfix");
const regex = new RegExp(`- \\[(x|X)\\]\\s*${escapedCheckbox}`, "i"); }
if (/^feat(\(.*?\))?:/im.test(commitMessages)) {
conventionalCommitLabels.push("feature");
}
if (/^refactor(\(.*?\))?:/im.test(commitMessages)) {
conventionalCommitLabels.push("refactor");
}
if (/BREAKING[:\s]CHANGE/i.test(commitMessages) || /^[a-z]+(\(.*?\))?!:/im.test(commitMessages)) {
conventionalCommitLabels.push("breaking change");
}
if (regex.test(prBody)) { // Parse PR template for content type labels (bugfix, feature, refactor, breaking change)
if (label === "website") { const templateLabelMappings = {
const hasJson = prFiles.some((f) => f.filename.startsWith("frontend/public/json/")); "🐞 **Bug fix**": "bugfix",
const hasUpdateScript = labelsToAdd.has("update script"); "✨ **New feature**": "feature",
const hasContentLabel = ["bugfix", "feature", "refactor"].some((l) => labelsToAdd.has(l)); "💥 **Breaking change**": "breaking change",
"🆕 **New script**": "new script",
"🌍 **Website update**": "website",
"🔧 **Refactoring / Code Cleanup**": "refactor",
"📝 **Documentation update**": "documentation"
};
if (!(hasUpdateScript && hasContentLabel)) { const contentLabels = ["bugfix", "feature", "refactor", "breaking change"];
labelsToAdd.add(hasJson ? "json" : "website"); const checkedContentLabels = [];
for (const [checkbox, label] of Object.entries(templateLabelMappings)) {
const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1");
const regex = new RegExp(`- \\[(x|X)\\]\\s*${escapedCheckbox}`, "i");
if (regex.test(prBody)) {
if (label === "website") {
const hasJson = prFiles.some((f) => f.filename.startsWith("frontend/public/json/"));
labelsToAdd.add(hasJson ? "json" : "website");
} else if (label === "documentation") {
labelsToAdd.add("maintenance");
} else if (label === "new script") {
labelsToAdd.add("new script");
} else if (contentLabels.includes(label)) {
checkedContentLabels.push(label);
} else {
labelsToAdd.add(label);
}
}
}
// Priority system: Combine template checkboxes and conventional commits
// Merge both sources
const allCheckedLabels = [...new Set([...checkedContentLabels, ...conventionalCommitLabels])];
// Priority: bugfix > refactor > feature > breaking change
if (allCheckedLabels.length > 0) {
const priorityOrder = ["bugfix", "refactor", "feature", "breaking change"];
const highestPriorityLabel = priorityOrder.find(label => allCheckedLabels.includes(label));
if (highestPriorityLabel) {
labelsToAdd.add(highestPriorityLabel);
}
}
// Feature 3: Add size labels based on changes
const totalChanges = prFiles.reduce((sum, file) => sum + file.additions + file.deletions, 0);
if (totalChanges <= 10) {
labelsToAdd.add("size: XS");
} else if (totalChanges <= 50) {
labelsToAdd.add("size: S");
} else if (totalChanges <= 200) {
labelsToAdd.add("size: M");
} else if (totalChanges <= 500) {
labelsToAdd.add("size: L");
} else {
labelsToAdd.add("size: XL");
}
// Get current PR labels
const { data: currentPR } = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: prNumber,
});
const currentLabels = currentPR.labels.map(label => label.name.toLowerCase());
// Label Cleanup: Remove outdated content labels and size labels
const allContentLabels = ["bugfix", "feature", "refactor", "breaking change"];
const allSizeLabels = ["size: XS", "size: S", "size: M", "size: L", "size: XL"];
const labelsToRemove = [
...allContentLabels.filter(label => currentLabels.includes(label) && !labelsToAdd.has(label)),
...allSizeLabels.filter(label => currentLabels.includes(label.toLowerCase()) && !labelsToAdd.has(label))
];
for (const label of labelsToRemove) {
try {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
name: label,
});
} catch (error) {
// Label might not exist, ignore
}
}
// Validation: Check for missing information
const warnings = [];
const hasUpdateOrNewScript = labelsToAdd.has("update script") || labelsToAdd.has("new script");
const hasContentLabel = allContentLabels.some(label => labelsToAdd.has(label));
if (hasUpdateOrNewScript && !hasContentLabel && !labelsToAdd.has("new script")) {
warnings.push("⚠️ **Missing change type**: Please check one of the change type checkboxes (Bug fix, New feature, Refactoring, or Breaking change) in the PR description.");
}
if (labelsToAdd.has("website") && !labelsToAdd.has("json") && prFiles.some(f => f.filename.includes("frontend/"))) {
const hasCheckbox = /- \[(x|X)\]\s*🌍 \*\*Website update\*\*/i.test(prBody);
if (!hasCheckbox) {
warnings.push("⚠️ **Missing checkbox**: Please check the '🌍 Website update' checkbox in the PR description.");
}
}
// Feature 5: Documentation check
const codeFiles = prFiles.filter(f => /\.(sh|func|go|js|ts|tsx|jsx)$/.test(f.filename));
const docFiles = prFiles.filter(f => /\.(md|txt)$/i.test(f.filename) || f.filename.includes('README'));
if (codeFiles.length > 0 && docFiles.length === 0 && !labelsToAdd.has("refactor") && !labelsToAdd.has("bugfix")) {
warnings.push("📚 **Documentation update recommended**: Consider updating documentation for these code changes.");
}
// Feature 6: Related issues detection
let relatedIssuesText = "";
const scriptFiles = prFiles.filter(f => /\.(sh|func)$/.test(f.filename));
if (scriptFiles.length > 0) {
const scriptNames = scriptFiles.map(f => {
const match = f.filename.match(/([^\/]+)\.(sh|func)$/);
return match ? match[1] : null;
}).filter(Boolean);
if (scriptNames.length > 0) {
try {
const { data: openIssues } = await github.rest.issues.listForRepo({
owner: context.repo.owner,
repo: context.repo.repo,
state: 'open',
per_page: 100
});
const related = [];
for (const scriptName of scriptNames) {
const matchingIssues = openIssues.filter(issue =>
!issue.pull_request &&
(issue.title.toLowerCase().includes(scriptName.toLowerCase()) ||
(issue.body || '').toLowerCase().includes(scriptName.toLowerCase()))
);
related.push(...matchingIssues);
}
const uniqueRelated = [...new Map(related.map(i => [i.number, i])).values()];
if (uniqueRelated.length > 0) {
relatedIssuesText = "\n\n## 🔗 Related Issues\n\n";
relatedIssuesText += "This PR may be related to the following open issues:\n";
uniqueRelated.slice(0, 5).forEach(issue => {
relatedIssuesText += `- #${issue.number}: ${issue.title}\n`;
});
if (uniqueRelated.length > 5) {
relatedIssuesText += `- _...and ${uniqueRelated.length - 5} more_\n`;
} }
} else if (label === "documentation") {
labelsToAdd.add("maintenance");
} else {
labelsToAdd.add(label);
} }
} catch (error) {
console.error("Error fetching related issues:", error);
} }
} }
} }
// Generate Changelog Preview
let changelogPreview = "## 📝 Changelog Preview\n\n";
changelogPreview += "This PR will appear in the changelog as:\n\n";
const categories = [];
if (labelsToAdd.has("new script")) {
changelogPreview += "### 🆕 New Scripts\n";
changelogPreview += `- ${currentPR.title} @${currentPR.user.login} ([#${prNumber}](${currentPR.html_url}))\n\n`;
} else {
if (labelsToAdd.has("update script")) {
if (labelsToAdd.has("tools")) {
categories.push({ name: "🛠️ Updated Tools", label: labelsToAdd });
} else if (labelsToAdd.has("core")) {
categories.push({ name: "🔧 Core Updates", label: labelsToAdd });
} else {
categories.push({ name: "🚀 Updated Scripts", label: labelsToAdd });
}
}
if (labelsToAdd.has("website") || labelsToAdd.has("json")) {
categories.push({ name: "🌐 Website", label: labelsToAdd });
}
if (labelsToAdd.has("maintenance")) {
categories.push({ name: "🧰 Maintenance", label: labelsToAdd });
}
for (const category of categories) {
changelogPreview += `### ${category.name}\n`;
const subCategoryMap = {
"bugfix": " - #### 🐞 Bug Fixes",
"refactor": " - #### 🔧 Refactor",
"feature": " - #### ✨ New Features",
"breaking change": " - #### 💥 Breaking Changes"
};
const matchedSubCat = allContentLabels.find(label => labelsToAdd.has(label));
if (matchedSubCat && subCategoryMap[matchedSubCat]) {
changelogPreview += `${subCategoryMap[matchedSubCat]}\n`;
}
if (labelsToAdd.has("json")) {
changelogPreview += " - #### 📝 Script Information\n";
}
changelogPreview += ` - ${currentPR.title} @${currentPR.user.login} ([#${prNumber}](${currentPR.html_url}))\n\n`;
}
if (categories.length === 0) {
changelogPreview += "_This PR may not appear in the changelog. Please ensure proper labels are set._\n\n";
}
}
// Post comment with warnings and changelog preview
if (warnings.length > 0 || changelogPreview || relatedIssuesText || isFirstTimeContributor) {
let commentBody = "";
// Feature 4: First-time contributor welcome
if (isFirstTimeContributor) {
commentBody += "## 🎉 Welcome to the Community!\n\n";
commentBody += `Thank you **@${prAuthor}** for your first contribution! 🙌\n\n`;
commentBody += "A maintainer will review your PR soon. Here are some helpful resources:\n";
commentBody += "- [Contributing Guide](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CONTRIBUTOR_AND_GUIDES/CONTRIBUTING.md)\n";
commentBody += "- [Code of Conduct](https://github.com/community-scripts/ProxmoxVE/blob/main/.github/CODE_OF_CONDUCT.md)\n\n";
commentBody += "---\n\n";
}
if (warnings.length > 0) {
commentBody += "## ⚠️ Validation Warnings\n\n";
commentBody += warnings.join("\n\n") + "\n\n---\n\n";
}
commentBody += changelogPreview;
if (relatedIssuesText) {
commentBody += relatedIssuesText;
}
commentBody += "\n\n---\n";
commentBody += `_This is an automated message from the PR labeler bot. PR size: ${Array.from(labelsToAdd).find(l => l.startsWith('size:')) || 'unknown'}_`;
// Check if we already posted a comment
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
});
const botComment = comments.find(comment =>
comment.user.login === "github-actions[bot]" &&
(comment.body.includes("Changelog Preview") || comment.body.includes("Welcome to the Community"))
);
if (botComment) {
// Update existing comment (but keep welcome message if it was there)
let updatedBody = commentBody;
if (botComment.body.includes("Welcome to the Community") && !isFirstTimeContributor) {
// Preserve welcome message from original comment
const welcomeSection = botComment.body.match(/## 🎉 Welcome to the Community![\s\S]*?---\n\n/);
if (welcomeSection) {
updatedBody = welcomeSection[0] + commentBody;
}
}
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
body: updatedBody,
});
} else {
// Create new comment
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
body: commentBody,
});
}
}
if (labelsToAdd.size === 0) { if (labelsToAdd.size === 0) {
labelsToAdd.add("needs triage"); labelsToAdd.add("needs triage");
} }

158
.github/workflows/changelog-pr.yml generated vendored
View File

@@ -67,29 +67,12 @@ jobs:
const categorizedPRs = changelogConfig.map(obj => ({ const categorizedPRs = changelogConfig.map(obj => ({
...obj, ...obj,
notes: [], notes: [],
subCategories: obj.subCategories ?? ( requireAllLabels: obj.requireAllLabels ?? false,
obj.labels.includes("update script") ? [ excludeLabels: obj.excludeLabels ?? [],
{ title: "🐞 Bug Fixes", labels: ["bugfix"], notes: [] }, subCategories: obj.subCategories ? obj.subCategories.map(sub => ({
{ title: "✨ New Features", labels: ["feature"], notes: [] }, ...sub,
{ title: "💥 Breaking Changes", labels: ["breaking change"], notes: [] }, notes: []
{ title: "🔧 Refactor", labels: ["refactor"], 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: [] },
{ title: "📝 Documentation", labels: ["maintenance"], notes: [] },
{ title: "🔧 Refactor", labels: ["refactor"], 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);
@@ -115,69 +98,92 @@ jobs:
for (const pr of filteredPRs) { for (const pr of filteredPRs) {
const prLabels = pr.labels.map(label => label.name.toLowerCase()); const prLabels = pr.labels.map(label => label.name.toLowerCase());
let prNote;
if (pr.user.login.includes("push-app-to-main[bot]")) { if (pr.user.login.includes("push-app-to-main[bot]")) {
const scriptName = pr.title; const scriptName = pr.title;
try { try {
const { data: relatedIssues } = await github.rest.issues.listForRepo({ const { data: relatedIssues } = await github.rest.issues.listForRepo({
owner: context.repo.owner, owner: context.repo.owner,
repo: "ProxmoxVED", repo: "ProxmoxVED",
state: "all", state: "all",
labels: ["Started Migration To ProxmoxVE"] labels: ["Started Migration To ProxmoxVE"]
}); });
const matchingIssue = relatedIssues.find(issue => const matchingIssue = relatedIssues.find(issue =>
issue.title.toLowerCase().includes(scriptName.toLowerCase()) issue.title.toLowerCase().includes(scriptName.toLowerCase())
);
if (matchingIssue) {
const issueAuthor = matchingIssue.user.login;
const issueAuthorUrl = `https://github.com/${issueAuthor}`;
prNote = `- ${pr.title} [@${issueAuthor}](${issueAuthorUrl}) ([#${pr.number}](${pr.html_url}))`;
}
else {
prNote = `- ${pr.title} ([#${pr.number}](${pr.html_url}))`;
}
} catch (error) {
console.error(`Error fetching related issues: ${error}`);
prNote = `- ${pr.title} ([#${pr.number}](${pr.html_url}))`;
}
}else{
prNote = `- ${pr.title} [@${pr.user.login}](https://github.com/${pr.user.login}) ([#${pr.number}](${pr.html_url}))`;
}
if (prLabels.includes("new script")) {
const newScriptCategory = categorizedPRs.find(category =>
category.title === "New Scripts" || category.labels.includes("new script"));
if (newScriptCategory) {
newScriptCategory.notes.push(prNote);
}
} else {
let categorized = false;
const priorityCategories = categorizedPRs.slice();
for (const category of priorityCategories) {
if (categorized) break;
if (category.labels.some(label => prLabels.includes(label))) {
if (category.subCategories && category.subCategories.length > 0) {
const subCategory = category.subCategories.find(sub =>
sub.labels.some(label => prLabels.includes(label))
); );
if (subCategory) { if (matchingIssue) {
subCategory.notes.push(prNote); const issueAuthor = matchingIssue.user.login;
prNote = `- ${pr.title} @${issueAuthor} ([#${pr.number}](${pr.html_url}))`;
} else { } else {
category.notes.push(prNote); prNote = `- ${pr.title} ([#${pr.number}](${pr.html_url}))`;
} }
} else { } catch (error) {
category.notes.push(prNote); console.error(`Error fetching related issues: ${error}`);
} prNote = `- ${pr.title} ([#${pr.number}](${pr.html_url}))`;
categorized = true;
}
} }
} else {
prNote = `- ${pr.title} @${pr.user.login} ([#${pr.number}](${pr.html_url}))`;
} }
// Handle "new script" separately - always goes to New Scripts category
if (prLabels.includes("new script")) {
const newScriptCategory = categorizedPRs.find(category =>
category.title === "🆕 New Scripts" || category.labels.includes("new script")
);
if (newScriptCategory) {
newScriptCategory.notes.push(prNote);
}
continue;
}
// For other PRs, check all applicable categories (can appear in multiple)
for (const category of categorizedPRs) {
// Skip "new script" and unlabelled categories
if (category.labels.includes("new script") || category.labels.length === 0) {
continue;
}
// Check if PR matches category requirements
let matchesCategory = false;
if (category.requireAllLabels) {
// All labels must be present
matchesCategory = category.labels.every(label => prLabels.includes(label));
} else {
// At least one label must be present
matchesCategory = category.labels.some(label => prLabels.includes(label));
}
// Check exclude labels
if (matchesCategory && category.excludeLabels.length > 0) {
const hasExcludedLabel = category.excludeLabels.some(label => prLabels.includes(label));
if (hasExcludedLabel) {
matchesCategory = false;
}
}
if (matchesCategory) {
// Try to find matching subcategory
if (category.subCategories && category.subCategories.length > 0) {
const subCategory = category.subCategories.find(sub =>
sub.labels.some(label => prLabels.includes(label))
);
if (subCategory) {
subCategory.notes.push(prNote);
} else {
// No matching subcategory, add to main category
category.notes.push(prNote);
}
} else {
// No subcategories, add to main category
category.notes.push(prNote);
}
}
}
} }
return categorizedPRs; return categorizedPRs;

View File

@@ -10,12 +10,197 @@
> [!CAUTION] > [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes. Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-11-04
## 2025-11-03
### 🆕 New Scripts
- Donetick ([#8835](https://github.com/community-scripts/ProxmoxVE/pull/8835))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Immich: Pin version to 2.2.2 [@vhsdream](https://github.com/vhsdream) ([#8848](https://github.com/community-scripts/ProxmoxVE/pull/8848))
- Asterisk: handle errors in version retrieval commands [@MickLesk](https://github.com/MickLesk) ([#8844](https://github.com/community-scripts/ProxmoxVE/pull/8844))
- linkstack: fix wrong directory installation [@omertahaoztop](https://github.com/omertahaoztop) ([#8814](https://github.com/community-scripts/ProxmoxVE/pull/8814))
- Remove BOM from shebang lines in ct scripts [@MickLesk](https://github.com/MickLesk) ([#8833](https://github.com/community-scripts/ProxmoxVE/pull/8833))
- #### 💥 Breaking Changes
- Removed: MeTube [@MickLesk](https://github.com/MickLesk) ([#8830](https://github.com/community-scripts/ProxmoxVE/pull/8830))
## 2025-11-02
### 🚀 Updated Scripts
- Zigbee2MQTT: fix: pnpm workspace in update [@fkroeger](https://github.com/fkroeger) ([#8825](https://github.com/community-scripts/ProxmoxVE/pull/8825))
- #### 🐞 Bug Fixes
- Pangolin: Fix install and database migration [@tremor021](https://github.com/tremor021) ([#8828](https://github.com/community-scripts/ProxmoxVE/pull/8828))
- MediaManager: fix BASE_PATH error preventing main page load [@vhsdream](https://github.com/vhsdream) ([#8821](https://github.com/community-scripts/ProxmoxVE/pull/8821))
## 2025-11-01
### 🆕 New Scripts
- Pangolin ([#8809](https://github.com/community-scripts/ProxmoxVE/pull/8809))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- VictoriaMetrics: Fix release fetching for Victori Logs add-on [@tremor021](https://github.com/tremor021) ([#8807](https://github.com/community-scripts/ProxmoxVE/pull/8807))
- Immich: Pin version to 2.2.1 [@vhsdream](https://github.com/vhsdream) ([#8800](https://github.com/community-scripts/ProxmoxVE/pull/8800))
- jellyfin: fix: initial update [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8784](https://github.com/community-scripts/ProxmoxVE/pull/8784))
### 🌐 Website
- frontend: chore: bump debian OS [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8798](https://github.com/community-scripts/ProxmoxVE/pull/8798))
## 2025-10-31
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Reitti: Fix missing data directory [@tremor021](https://github.com/tremor021) ([#8787](https://github.com/community-scripts/ProxmoxVE/pull/8787))
- omada: fix update script with mongodb 8 [@MickLesk](https://github.com/MickLesk) ([#8724](https://github.com/community-scripts/ProxmoxVE/pull/8724))
- Booklore: Fix port configuration for Nginx [@tremor021](https://github.com/tremor021) ([#8780](https://github.com/community-scripts/ProxmoxVE/pull/8780))
- Fix paths in grist.sh [@mrinaldi](https://github.com/mrinaldi) ([#8777](https://github.com/community-scripts/ProxmoxVE/pull/8777))
### 🌐 Website
- #### 📝 Script Information
- Removed errant ` from wireguard.json [@AndrewDragonCh](https://github.com/AndrewDragonCh) ([#8791](https://github.com/community-scripts/ProxmoxVE/pull/8791))
## 2025-10-30
### 🆕 New Scripts
- Livebook ([#8739](https://github.com/community-scripts/ProxmoxVE/pull/8739))
- Reitti ([#8736](https://github.com/community-scripts/ProxmoxVE/pull/8736))
- BentoPDF ([#8735](https://github.com/community-scripts/ProxmoxVE/pull/8735))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Open Archiver: Fix missing daemon-reload [@tremor021](https://github.com/tremor021) ([#8768](https://github.com/community-scripts/ProxmoxVE/pull/8768))
- Open Archiver: Fix missing command in update procedure [@tremor021](https://github.com/tremor021) ([#8765](https://github.com/community-scripts/ProxmoxVE/pull/8765))
- Kimai: Fix database connection string [@tremor021](https://github.com/tremor021) ([#8758](https://github.com/community-scripts/ProxmoxVE/pull/8758))
- Add explicit exit calls to update_script functions [@MickLesk](https://github.com/MickLesk) ([#8752](https://github.com/community-scripts/ProxmoxVE/pull/8752))
- kimai: Set global SQL mode to empty in install script [@MickLesk](https://github.com/MickLesk) ([#8747](https://github.com/community-scripts/ProxmoxVE/pull/8747))
- #### ✨ New Features
- Immich: Updates for v2.2.0 [@vhsdream](https://github.com/vhsdream) ([#8770](https://github.com/community-scripts/ProxmoxVE/pull/8770))
- Standardize update success messages in scripts [@MickLesk](https://github.com/MickLesk) ([#8757](https://github.com/community-scripts/ProxmoxVE/pull/8757))
- core: add function cleanup_lxc [@MickLesk](https://github.com/MickLesk) ([#8749](https://github.com/community-scripts/ProxmoxVE/pull/8749))
- Asterisk: add interactive version selection to installer [@MickLesk](https://github.com/MickLesk) ([#8726](https://github.com/community-scripts/ProxmoxVE/pull/8726))
### 🌐 Website
- #### 📝 Script Information
- Cronicle: Update default credentials [@tremor021](https://github.com/tremor021) ([#8720](https://github.com/community-scripts/ProxmoxVE/pull/8720))
## 2025-10-29
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Docker-VM: add workaround for libguestfs issue on Proxmox VE 9+ [@MickLesk](https://github.com/MickLesk) ([#8722](https://github.com/community-scripts/ProxmoxVE/pull/8722))
- Dispatcharr: add folders in installer / add more build ressources [@MickLesk](https://github.com/MickLesk) ([#8708](https://github.com/community-scripts/ProxmoxVE/pull/8708))
- LibreTranslate: bump torch version [@MickLesk](https://github.com/MickLesk) ([#8710](https://github.com/community-scripts/ProxmoxVE/pull/8710))
- #### ✨ New Features
- Archivebox: add Chromium and Node modules [@MickLesk](https://github.com/MickLesk) ([#8725](https://github.com/community-scripts/ProxmoxVE/pull/8725))
- #### 🔧 Refactor
- tracktor: refactor envfile [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8711](https://github.com/community-scripts/ProxmoxVE/pull/8711))
- Kimai / Ghost / ManageMyDamnLife: Switch to MariaDB [@MickLesk](https://github.com/MickLesk) ([#8712](https://github.com/community-scripts/ProxmoxVE/pull/8712))
## 2025-10-28
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Update alpine-komodo.sh fixing missing pull images command [@glopes](https://github.com/glopes) ([#8689](https://github.com/community-scripts/ProxmoxVE/pull/8689))
- #### ✨ New Features
- Update SABnzbd. Include par2cmdline-turbo [@burgerga](https://github.com/burgerga) ([#8648](https://github.com/community-scripts/ProxmoxVE/pull/8648))
- jotty: Add more ENV VARS (disabled) [@vhsdream](https://github.com/vhsdream) ([#8688](https://github.com/community-scripts/ProxmoxVE/pull/8688))
- Bump bazarr to Debian 13 [@burgerga](https://github.com/burgerga) ([#8677](https://github.com/community-scripts/ProxmoxVE/pull/8677))
- Update flaresolverr to Debian 13 [@burgerga](https://github.com/burgerga) ([#8672](https://github.com/community-scripts/ProxmoxVE/pull/8672))
## 2025-10-27
### 🆕 New Scripts
- Dispatcharr ([#8658](https://github.com/community-scripts/ProxmoxVE/pull/8658))
- Garage | Alpine-Garage ([#8656](https://github.com/community-scripts/ProxmoxVE/pull/8656))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Add typescript and esbuild to browserless setup [@MickLesk](https://github.com/MickLesk) ([#8666](https://github.com/community-scripts/ProxmoxVE/pull/8666))
- jellyfin: fix: intel deps [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8657](https://github.com/community-scripts/ProxmoxVE/pull/8657))
## 2025-10-26
### 🆕 New Scripts
- ComfyUI ([#8633](https://github.com/community-scripts/ProxmoxVE/pull/8633))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- PiHole: Bump to Debian 12 [@MickLesk](https://github.com/MickLesk) ([#8649](https://github.com/community-scripts/ProxmoxVE/pull/8649))
- #### 🔧 Refactor
- Refactor: Mylar3 [@tremor021](https://github.com/tremor021) ([#8642](https://github.com/community-scripts/ProxmoxVE/pull/8642))
## 2025-10-25
### 🆕 New Scripts
- PatchMon ([#8632](https://github.com/community-scripts/ProxmoxVE/pull/8632))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- UrBackup Server: Fix install going interactive [@tremor021](https://github.com/tremor021) ([#8622](https://github.com/community-scripts/ProxmoxVE/pull/8622))
## 2025-10-24
### 🌐 Website
- #### 📝 Script Information
- Fix config path for BunkerWeb [@Nonolanlan1007](https://github.com/Nonolanlan1007) ([#8618](https://github.com/community-scripts/ProxmoxVE/pull/8618))
- Update logo URL in guardian.json [@HydroshieldMKII](https://github.com/HydroshieldMKII) ([#8615](https://github.com/community-scripts/ProxmoxVE/pull/8615))
## 2025-10-23 ## 2025-10-23
### 🚀 Updated Scripts ### 🚀 Updated Scripts
- #### 🐞 Bug Fixes - #### 🐞 Bug Fixes
- Radicale: Update dependencies [@ilofX](https://github.com/ilofX) ([#8603](https://github.com/community-scripts/ProxmoxVE/pull/8603))
- Various Downgrades to Debian 12 (MySQL / OMW / Technitium) [@MickLesk](https://github.com/MickLesk) ([#8595](https://github.com/community-scripts/ProxmoxVE/pull/8595))
- MeTube: Fix inserting path into .bashrc [@tremor021](https://github.com/tremor021) ([#8589](https://github.com/community-scripts/ProxmoxVE/pull/8589)) - MeTube: Fix inserting path into .bashrc [@tremor021](https://github.com/tremor021) ([#8589](https://github.com/community-scripts/ProxmoxVE/pull/8589))
- #### 🔧 Refactor - #### 🔧 Refactor

View File

@@ -66,7 +66,7 @@ function update_script() {
$STD apt -y autoclean $STD apt -y autoclean
$STD apt -y clean $STD apt -y clean
msg_ok "Cleanup Completed" msg_ok "Cleanup Completed"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -44,6 +44,7 @@ function update_script() {
msg_info "Starting Service" msg_info "Starting Service"
systemctl start actualbudget systemctl start actualbudget
msg_ok "Started Service" msg_ok "Started Service"
msg_ok "Updated successfully!"
else else
msg_info "${APP} is already up to date" msg_info "${APP} is already up to date"
fi fi
@@ -51,7 +52,7 @@ function update_script() {
msg_info "Old Installation Found, you need to migrate your data and recreate to a new container" msg_info "Old Installation Found, you need to migrate your data and recreate to a new container"
msg_info "Please follow the instructions on the ${APP} website to migrate your data" msg_info "Please follow the instructions on the ${APP} website to migrate your data"
msg_info "https://actualbudget.org/docs/backup-restore/backup" msg_info "https://actualbudget.org/docs/backup-restore/backup"
exit 1 exit
fi fi
exit exit
} }

View File

@@ -73,7 +73,7 @@ function update_script() {
msg_info "Cleaning Up" msg_info "Cleaning Up"
rm -rf /opt/adventurelog-backup rm -rf /opt/adventurelog-backup
msg_ok "Cleaned" msg_ok "Cleaned"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
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
RELEASE=$(curl -fsSL "https://www.ispyconnect.com/api/Agent/DownloadLocation4?platform=Linux64&fromVersion=0" | grep -o 'https://.*\.zip') RELEASE=$(curl -fsSL "https://www.ispyconnect.com/api/Agent/DownloadLocation4?platform=Linux64&fromVersion=0" | grep -o 'https://.*\.zip')
if [[ "${RELEASE}" != "$(cat ~/.agentdvr 2>/dev/null)" ]] || [[ ! -f ~/.agentdvr ]]; then if [[ "${RELEASE}" != "$(cat ~/.agentdvr 2>/dev/null)" ]] || [[ ! -f ~/.agentdvr ]]; then
msg_info "Stopping service" msg_info "Stopping service"
@@ -39,15 +39,14 @@ function update_script() {
curl -fsSL "$RELEASE" -o $(basename "$RELEASE") curl -fsSL "$RELEASE" -o $(basename "$RELEASE")
$STD unzip -o Agent_Linux64*.zip $STD unzip -o Agent_Linux64*.zip
chmod +x ./Agent chmod +x ./Agent
echo $RELEASE > ~/.agentdvr echo $RELEASE >~/.agentdvr
rm -rf Agent_Linux64*.zip rm -rf Agent_Linux64*.zip
msg_ok "Updated $APP" msg_ok "Updated $APP"
msg_info "Starting service" msg_info "Starting service"
systemctl start AgentDVR systemctl start AgentDVR
msg_ok "Service started" msg_ok "Service started"
msg_ok "Updated successfully!"
msg_ok "Updated $APP successfully"
else else
msg_ok "No update required. ${APP} is already at ${RELEASE}" msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi

View File

@@ -32,7 +32,7 @@ function update_script() {
msg_info "Restarting AdGuard Home" msg_info "Restarting AdGuard Home"
$STD rc-service adguardhome restart $STD rc-service adguardhome restart
msg_ok "Restarted AdGuard Home" msg_ok "Restarted AdGuard Home"
msg_ok "Updated successfully!"
exit 0 exit 0
} }

View File

@@ -24,7 +24,7 @@ function update_script() {
if [[ ! -d /opt/bitmagnet ]]; then if [[ ! -d /opt/bitmagnet ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit 1 exit
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [ "${RELEASE}" != "$(cat /opt/bitmagnet_version.txt)" ] || [ ! -f /opt/bitmagnet_version.txt ]; then if [ "${RELEASE}" != "$(cat /opt/bitmagnet_version.txt)" ] || [ ! -f /opt/bitmagnet_version.txt ]; then
@@ -71,11 +71,10 @@ function update_script() {
rm -f "$temp_file" rm -f "$temp_file"
echo "${RELEASE}" >/opt/bitmagnet_version.txt echo "${RELEASE}" >/opt/bitmagnet_version.txt
$STD service bitmagnet start $STD service bitmagnet start
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
else else
msg_ok "No update required. ${APP} is already at ${RELEASE}" msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi
exit 0 exit 0
} }

View File

@@ -32,7 +32,8 @@ function update_script() {
msg_info "Restarting Caddy" msg_info "Restarting Caddy"
rc-service caddy restart rc-service caddy restart
msg_ok "Restarted Caddy" msg_ok "Restarted Caddy"
exit msg_ok "Updated successfully!"
exit 0
} }
start start

View File

@@ -37,10 +37,12 @@ function update_script() {
case $CHOICE in case $CHOICE in
1) 1)
$STD apk -U upgrade $STD apk -U upgrade
msg_ok "Updated successfully!"
exit exit
;; ;;
esac esac
done done
exit 0
} }
start start

View File

@@ -31,7 +31,7 @@ function update_script() {
msg_info "Restarting Forgejo" msg_info "Restarting Forgejo"
$STD rc-service forgejo restart $STD rc-service forgejo restart
msg_ok "Restarted Forgejo" msg_ok "Restarted Forgejo"
msg_ok "Updated successfully!"
exit 0 exit 0
} }

63
ct/alpine-garage.sh Normal file
View File

@@ -0,0 +1,63 @@
#!/usr/bin/env bash
source <(curl -fsSL 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://garagehq.deuxfleurs.fr/
APP="Alpine-Garage"
var_tags="${var_tags:-alpine;object-storage}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-5}"
var_os="${var_os:-alpine}"
var_version="${var_version:-3.22}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
if [[ ! -f /usr/local/bin/garage ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
GITEA_RELEASE=$(curl -fsSL https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
if [[ "${GITEA_RELEASE}" != "$(cat ~/.garage 2>/dev/null)" ]] || [[ ! -f ~/.garage ]]; then
msg_info "Stopping Service"
rc-service garage stop || true
msg_ok "Stopped Service"
msg_info "Backing Up Data"
cp /usr/local/bin/garage /usr/local/bin/garage.old 2>/dev/null || true
cp /etc/garage.toml /etc/garage.toml.bak 2>/dev/null || true
msg_ok "Backed Up Data"
msg_info "Updating Garage"
curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
chmod +x /usr/local/bin/garage
echo "${GITEA_RELEASE}" >~/.garage
msg_ok "Updated Garage"
msg_info "Starting Service"
rc-service garage start || rc-service garage restart
msg_ok "Started Service"
msg_ok "Updated successfully!"
else
msg_ok "No update required. Garage is already at ${GITEA_RELEASE}"
fi
exit 0
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"

View File

@@ -24,7 +24,7 @@ function update_script() {
if [[ ! -d /opt/gatus ]]; then if [[ ! -d /opt/gatus ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit 1 exit
fi fi
RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [ "${RELEASE}" != "$(cat /opt/gatus_version.txt)" ] || [ ! -f /opt/gatus_version.txt ]; then if [ "${RELEASE}" != "$(cat /opt/gatus_version.txt)" ] || [ ! -f /opt/gatus_version.txt ]; then
@@ -44,11 +44,10 @@ function update_script() {
rm -f "$temp_file" rm -f "$temp_file"
echo "${RELEASE}" >/opt/gatus_version.txt echo "${RELEASE}" >/opt/gatus_version.txt
$STD service gatus start $STD service gatus start
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
else else
msg_ok "No update required. ${APP} is already at ${RELEASE}" msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi
exit 0 exit 0
} }

View File

@@ -32,6 +32,8 @@ function update_script() {
msg_info "Restarting Gitea" msg_info "Restarting Gitea"
rc-service gitea restart rc-service gitea restart
msg_ok "Restarted Gitea" msg_ok "Restarted Gitea"
msg_ok "Updated successfully!"
exit 0
} }
start start

View File

@@ -40,20 +40,24 @@ function update_script() {
case $CHOICE in case $CHOICE in
1) 1)
$STD apk -U upgrade $STD apk -U upgrade
msg_ok "Updated successfully!"
exit exit
;; ;;
2) 2)
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/grafana sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/grafana
service grafana restart service grafana restart
msg_ok "Allowed listening on all interfaces!"
exit exit
;; ;;
3) 3)
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/grafana sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/grafana
service grafana restart service grafana restart
msg_ok "Allowed listening only on ${LXCIP}!"
exit exit
;; ;;
esac esac
done done
exit 0
} }
start start

View File

@@ -24,7 +24,7 @@ function update_script() {
if [ ! -d /usr/share/nginx/html ]; then if [ ! -d /usr/share/nginx/html ]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit 1 exit
fi fi
RELEASE=$(curl -fsSL https://api.github.com/repos/sharevb/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4) RELEASE=$(curl -fsSL https://api.github.com/repos/sharevb/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4)
@@ -37,11 +37,10 @@ function update_script() {
cp -r /tmp/dist/* /usr/share/nginx/html cp -r /tmp/dist/* /usr/share/nginx/html
rm -rf /tmp/dist rm -rf /tmp/dist
rm -f it-tools.zip rm -f it-tools.zip
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
else else
msg_ok "No update required. ${APP} is already at ${RELEASE}" msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi
exit 0 exit 0
} }

View File

@@ -22,14 +22,14 @@ catch_errors
function update_script() { function update_script() {
[[ -d /opt/komodo ]] || { [[ -d /opt/komodo ]] || {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit 1 exit
} }
msg_info "Updating ${APP}" msg_info "Updating ${APP}"
COMPOSE_FILE=$(find /opt/komodo -maxdepth 1 -type f -name '*.compose.yaml' ! -name 'compose.env' | head -n1) COMPOSE_FILE=$(find /opt/komodo -maxdepth 1 -type f -name '*.compose.yaml' ! -name 'compose.env' | head -n1)
if [[ -z "$COMPOSE_FILE" ]]; then if [[ -z "$COMPOSE_FILE" ]]; then
msg_error "No valid compose file found in /opt/komodo!" msg_error "No valid compose file found in /opt/komodo!"
exit 1 exit
fi fi
COMPOSE_BASENAME=$(basename "$COMPOSE_FILE") COMPOSE_BASENAME=$(basename "$COMPOSE_FILE")
@@ -38,23 +38,25 @@ function update_script() {
echo -e "${YW}This configuration is no longer supported since Komodo v1.18.0.${CL}" echo -e "${YW}This configuration is no longer supported since Komodo v1.18.0.${CL}"
echo -e "${YW}Please follow the migration guide:${CL}" echo -e "${YW}Please follow the migration guide:${CL}"
echo -e "${BGN}https://github.com/community-scripts/ProxmoxVE/discussions/5689${CL}\n" echo -e "${BGN}https://github.com/community-scripts/ProxmoxVE/discussions/5689${CL}\n"
exit 1 exit
fi fi
BACKUP_FILE="/opt/komodo/${COMPOSE_BASENAME}.bak_$(date +%Y%m%d_%H%M%S)" BACKUP_FILE="/opt/komodo/${COMPOSE_BASENAME}.bak_$(date +%Y%m%d_%H%M%S)"
cp "$COMPOSE_FILE" "$BACKUP_FILE" || { cp "$COMPOSE_FILE" "$BACKUP_FILE" || {
msg_error "Failed to create backup of ${COMPOSE_BASENAME}!" msg_error "Failed to create backup of ${COMPOSE_BASENAME}!"
exit 1 exit
} }
GITHUB_URL="https://raw.githubusercontent.com/moghtech/komodo/main/compose/${COMPOSE_BASENAME}" GITHUB_URL="https://raw.githubusercontent.com/moghtech/komodo/main/compose/${COMPOSE_BASENAME}"
if ! curl -fsSL "$GITHUB_URL" -o "$COMPOSE_FILE"; then if ! curl -fsSL "$GITHUB_URL" -o "$COMPOSE_FILE"; then
msg_error "Failed to download ${COMPOSE_BASENAME} from GitHub!" msg_error "Failed to download ${COMPOSE_BASENAME} from GitHub!"
mv "$BACKUP_FILE" "$COMPOSE_FILE" mv "$BACKUP_FILE" "$COMPOSE_FILE"
exit 1 exit
fi fi
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env pull
$STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d $STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d
msg_ok "Updated ${APP}" msg_ok "Updated Alpine-Komodo"
exit msg_ok "Updated successfully!"
exit 0
} }
start start

View File

@@ -31,7 +31,7 @@ function update_script() {
msg_info "Restarting MariaDB" msg_info "Restarting MariaDB"
$STD rc-service mariadb restart $STD rc-service mariadb restart
msg_ok "Restarted MariaDB" msg_ok "Restarted MariaDB"
msg_ok "Updated successfully!"
exit 0 exit 0
} }

View File

@@ -50,6 +50,7 @@ function update_script() {
;; ;;
esac esac
done done
exit 0
} }
start start

View File

@@ -31,7 +31,7 @@ function update_script() {
msg_info "Updating Node-RED" msg_info "Updating Node-RED"
$STD npm install -g --unsafe-perm node-red $STD npm install -g --unsafe-perm node-red
msg_ok "Updated Node-RED" msg_ok "Updated Node-RED"
msg_ok "Updated successfully!"
exit 0 exit 0
} }

View File

@@ -31,7 +31,7 @@ function update_script() {
msg_info "Restarting PostgreSQL" msg_info "Restarting PostgreSQL"
$STD rc-service postgresql restart $STD rc-service postgresql restart
msg_ok "Restarted PostgreSQL" msg_ok "Restarted PostgreSQL"
msg_ok "Updated successfully!"
exit 0 exit 0
} }

View File

@@ -31,7 +31,7 @@ function update_script() {
msg_info "Restarting Prometheus" msg_info "Restarting Prometheus"
$STD rc-service prometheus restart $STD rc-service prometheus restart
msg_ok "Restarted Prometheus" msg_ok "Restarted Prometheus"
msg_ok "Updated successfully!"
exit 0 exit 0
} }

View File

@@ -24,7 +24,7 @@ function update_script() {
header_info header_info
if [ ! -d /opt/rclone ]; then if [ ! -d /opt/rclone ]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit 1 exit
fi fi
RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [ "${RELEASE}" != "$(cat /opt/rclone_version.txt)" ] || [ ! -f /opt/rclone_version.txt ]; then if [ "${RELEASE}" != "$(cat /opt/rclone_version.txt)" ] || [ ! -f /opt/rclone_version.txt ]; then
@@ -34,11 +34,10 @@ function update_script() {
$STD unzip -o "$temp_file" '*/**' -d /opt/rclone $STD unzip -o "$temp_file" '*/**' -d /opt/rclone
rm -f "$temp_file" rm -f "$temp_file"
echo "${RELEASE}" >/opt/rclone_version.txt echo "${RELEASE}" >/opt/rclone_version.txt
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
else else
msg_ok "No update required. ${APP} is already at ${RELEASE}" msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi
exit 0 exit 0
} }

View File

@@ -42,7 +42,7 @@ function update_script() {
msg_info "Updating Redis" msg_info "Updating Redis"
apk update && apk upgrade redis apk update && apk upgrade redis
rc-service redis restart rc-service redis restart
msg_ok "Redis updated successfully!" msg_ok "Updated successfully!"
exit exit
;; ;;
2) 2)

View File

@@ -41,9 +41,8 @@ function update_script() {
msg_info "Starting Service" msg_info "Starting Service"
$STD rc-service redlib start $STD rc-service redlib start
msg_ok "Started Service" msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_ok "Update Successful" exit 0
exit
} }
start start

View File

@@ -23,7 +23,7 @@ function update_script() {
header_info header_info
if [[ ! -d /opt/rustdesk-server ]]; then if [[ ! -d /opt/rustdesk-server ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit 1 exit
fi fi
APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }') APIRELEASE=$(curl -s https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')

View File

@@ -31,8 +31,8 @@ function update_script() {
msg_info "Restarting Syncthing" msg_info "Restarting Syncthing"
$STD rc-service syncthing restart $STD rc-service syncthing restart
msg_ok "Restarted Syncthing" msg_ok "Restarted Syncthing"
msg_ok "Updated successfully!"
exit 1 exit 0
} }
start start

View File

@@ -24,7 +24,7 @@ function update_script() {
if [[ ! -d /opt/teamspeak-server ]]; then if [[ ! -d /opt/teamspeak-server ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit 1 exit
fi fi
set +o pipefail && RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.*teamspeak3-server_linux_amd64-\([0-9.]*[0-9]\).*/\1/p' | head -1) && set -o pipefail set +o pipefail && RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.*teamspeak3-server_linux_amd64-\([0-9.]*[0-9]\).*/\1/p' | head -1) && set -o pipefail
@@ -40,11 +40,10 @@ function update_script() {
rm -rf teamspeak3-server_linux_amd64 rm -rf teamspeak3-server_linux_amd64
echo "${RELEASE}" >~/.teamspeak-server echo "${RELEASE}" >~/.teamspeak-server
$STD service teamspeak start $STD service teamspeak start
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
else else
msg_ok "No update required. ${APP} is already at ${RELEASE}" msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi
exit 0 exit 0
} }

View File

@@ -22,7 +22,7 @@ catch_errors
function update_script() { function update_script() {
if [[ ! -d /opt/tinyauth ]]; then if [[ ! -d /opt/tinyauth ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit 1 exit
fi fi
msg_info "Updating packages" msg_info "Updating packages"
@@ -45,7 +45,7 @@ function update_script() {
msg_info "Restarting Tinyauth" msg_info "Restarting Tinyauth"
$STD service tinyauth start $STD service tinyauth start
msg_ok "Restarted Tinyauth" msg_ok "Restarted Tinyauth"
msg_ok "Updated Tinyauth" msg_ok "Updated successfully!"
else else
msg_ok "No update required. ${APP} is already at ${RELEASE}" msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi

View File

@@ -25,10 +25,11 @@ function update_script() {
$STD apk -U upgrade $STD apk -U upgrade
msg_ok "Updated Alpine Packages" msg_ok "Updated Alpine Packages"
msg_info "Upgrading traefik from edge" msg_info "Updating traefik from edge"
$STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community $STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community
msg_ok "Upgraded traefik" msg_ok "Updated traefik"
exit msg_ok "Updated successfully!"
exit 0
} }
start start

View File

@@ -31,8 +31,8 @@ function update_script() {
msg_info "Restarting Transmission" msg_info "Restarting Transmission"
$STD rc-service transmission-daemon restart $STD rc-service transmission-daemon restart
msg_ok "Restarted Transmission" msg_ok "Restarted Transmission"
msg_ok "Updated successfully!"
exit 1 exit 0
} }
start start

View File

@@ -36,7 +36,6 @@ function update_script() {
$STD ./wgd.sh start $STD ./wgd.sh start
msg_ok "WGDashboard updated" msg_ok "WGDashboard updated"
fi fi
exit 0 exit 0
} }

View File

@@ -29,7 +29,8 @@ function update_script() {
header_info header_info
if [ "$UPD" == "1" ]; then if [ "$UPD" == "1" ]; then
$STD apk -U upgrade $STD apk -U upgrade
exit msg_ok "Updated successfully!"
exit 0
fi fi
} }

View File

@@ -47,7 +47,7 @@ function update_script() {
msg_info "Cleaning Up" msg_info "Cleaning Up"
rm -rf /opt/apache-tika/tika-server-standard-prev-version.jar rm -rf /opt/apache-tika/tika-server-standard-prev-version.jar
msg_ok "Cleanup Completed" msg_ok "Cleanup Completed"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
else else
msg_ok "No update required. ${APP} is already at v${RELEASE}" msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi fi

View File

@@ -31,6 +31,7 @@ function update_script() {
$STD apt-get update $STD apt-get update
$STD apt-get -y upgrade $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit exit
} }

View File

@@ -28,12 +28,18 @@ function update_script() {
exit exit
fi fi
NODE_VERSION="22" setup_nodejs NODE_VERSION="22" NODE_MODULE="@postlight/parser@latest,single-file-cli@latest" setup_nodejs
PYTHON_VERSION="3.13" setup_uv PYTHON_VERSION="3.13" setup_uv
msg_info "Stopping ArchiveBox" if ! dpkg -l | grep -q "^ii chromium "; then
msg_info "Installing System Dependencies"
$STD apt-get install -y chromium
msg_ok "Installed System Dependencies"
fi
msg_info "Stopping Service"
systemctl stop archivebox systemctl stop archivebox
msg_ok "Stopped ArchiveBox" msg_ok "Stopped Service"
msg_info "Upgrading Playwright" msg_info "Upgrading Playwright"
$STD uv pip install playwright --system $STD uv pip install playwright --system
@@ -46,11 +52,10 @@ function update_script() {
sudo -u archivebox archivebox init sudo -u archivebox archivebox init
msg_ok "Updated ArchiveBox" msg_ok "Updated ArchiveBox"
msg_info "Starting ArchiveBox" msg_info "Starting Service"
systemctl start archivebox systemctl start archivebox
msg_ok "Started ArchiveBox" msg_ok "Started Service"
msg_ok "Updated successfully!"
msg_ok "Updated Successfully"
exit exit
} }

View File

@@ -37,7 +37,7 @@ function update_script() {
msg_info "Starting service" msg_info "Starting service"
systemctl start argus systemctl start argus
msg_ok "Service started" msg_ok "Service started"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -20,18 +20,19 @@ color
catch_errors catch_errors
function update_script() { function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -d /var ]]; then if [[ ! -d /var ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating $APP LXC"
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
exit exit
fi
msg_info "Updating $APP LXC"
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit
} }
start start
@@ -41,4 +42,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}:6880${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6880${CL}"

View File

@@ -32,6 +32,7 @@ function update_script() {
$STD apt-get update $STD apt-get update
$STD apt-get -y upgrade $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit exit
} }

View File

@@ -40,7 +40,7 @@ function update_script() {
$STD apt-get -y autoremove $STD apt-get -y autoremove
$STD apt-get -y autoclean $STD apt-get -y autoclean
msg_ok "Cleanup Completed" msg_ok "Cleanup Completed"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -38,7 +38,7 @@ function update_script() {
msg_info "Starting Service" msg_info "Starting Service"
systemctl start autobrr systemctl start autobrr
msg_ok "Started Service" msg_ok "Started Service"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -68,7 +68,7 @@ function update_script() {
systemctl start autocaliweb metadata-change-detector acw-ingest-service acw-auto-zipper systemctl start autocaliweb metadata-change-detector acw-ingest-service acw-auto-zipper
msg_ok "Started Services" msg_ok "Started Services"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -61,7 +61,7 @@ function update_script() {
systemctl start uwsgi systemctl start uwsgi
systemctl start nginx systemctl start nginx
msg_ok "Services Started" msg_ok "Services Started"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -49,7 +49,7 @@ function update_script() {
msg_info "Cleaning up" msg_info "Cleaning up"
rm -f "$temp_file" rm -f "$temp_file"
msg_ok "Cleaned up" msg_ok "Cleaned up"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
else else
msg_ok "No update required. ${APP} is already at ${RELEASE}" msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi

View File

@@ -56,7 +56,7 @@ function update_script() {
msg_info "Cleaning up" msg_info "Cleaning up"
rm -rf /opt/baikal-backup rm -rf /opt/baikal-backup
msg_ok "Cleaned" msg_ok "Cleaned"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -102,7 +102,7 @@ function update_script() {
msg_info "Starting Meilisearch" msg_info "Starting Meilisearch"
systemctl start meilisearch systemctl start meilisearch
msg_ok "Started Meilisearch" msg_ok "Started Meilisearch"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -54,7 +54,7 @@ function update_script() {
msg_info "Cleaning up" msg_info "Cleaning up"
rm -r /opt/barcodebuddy-backup rm -r /opt/barcodebuddy-backup
msg_ok "Cleaned" msg_ok "Cleaned"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}" var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}" var_disk="${var_disk:-4}"
var_os="${var_os:-debian}" var_os="${var_os:-debian}"
var_version="${var_version:-12}" var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}" var_unprivileged="${var_unprivileged:-1}"
header_info "$APP" header_info "$APP"
@@ -28,16 +28,29 @@ function update_script() {
exit exit
fi fi
if check_for_gh_release "bazarr" "morpheus65535/bazarr"; then if check_for_gh_release "bazarr" "morpheus65535/bazarr"; then
PYTHON_VERSION="3.13" setup_uv msg_info "Stopping Service"
systemctl stop bazarr
msg_ok "Stopped Service"
PYTHON_VERSION="3.12" setup_uv
fetch_and_deploy_gh_release "bazarr" "morpheus65535/bazarr" "prebuild" "latest" "/opt/bazarr" "bazarr.zip" fetch_and_deploy_gh_release "bazarr" "morpheus65535/bazarr" "prebuild" "latest" "/opt/bazarr" "bazarr.zip"
msg_info "Setup Bazarr" msg_info "Setup Bazarr"
mkdir -p /var/lib/bazarr/ mkdir -p /var/lib/bazarr/
chmod 775 /opt/bazarr /var/lib/bazarr/ chmod 775 /opt/bazarr /var/lib/bazarr/
if [[ ! -d /opt/bazarr/venv/ ]]; then
$STD uv venv /opt/bazarr/venv --python 3.12
sed -i "s|ExecStart=/usr/bin/python3 /opt/bazarr/bazarr.py|ExecStart=/opt/bazarr/venv/bin/python3 /opt/bazarr/bazarr.py|g" /etc/systemd/system/bazarr.service
systemctl daemon-reload
fi
sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt
$STD uv pip install -r /opt/bazarr/requirements.txt --system $STD uv pip install -r /opt/bazarr/requirements.txt --python /opt/bazarr/venv/bin/python3
msg_ok "Setup Bazarr" msg_ok "Setup Bazarr"
msg_ok "Updated Successfully"
msg_info "Starting Service"
systemctl start bazarr
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi fi
exit exit
} }

62
ct/bentopdf.sh Normal file
View File

@@ -0,0 +1,62 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: vhsdream
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/alam00000/bentopdf
APP="BentoPDF"
var_tags="${var_tags:-pdf-editor}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/bentopdf ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
NODE_VERSION="24" setup_nodejs
if check_for_gh_release "bentopdf" "alam00000/bentopdf"; then
msg_info "Stopping Service"
systemctl stop bentopdf
msg_ok "Stopped Service"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bentopdf" "alam00000/bentopdf" "tarball" "latest" "/opt/bentopdf"
msg_info "Updating BentoPDF"
cd /opt/bentopdf
$STD npm ci --no-audit --no-fund
export SIMPLE_MODE=true
$STD npm run build -- --mode production
msg_ok "Updated BentoPDF"
msg_info "Starting Service"
systemctl start bentopdf
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"

View File

@@ -20,27 +20,27 @@ color
catch_errors catch_errors
function update_script() { function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -d /opt/beszel ]]; then if [[ ! -d /opt/beszel ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Stopping $APP"
systemctl stop beszel-hub
msg_ok "Stopped $APP"
msg_info "Updating $APP"
$STD /opt/beszel/beszel update
sleep 2 && chmod +x /opt/beszel/beszel
msg_ok "Updated $APP"
msg_info "Starting $APP"
systemctl start beszel-hub
msg_ok "Successfully started $APP"
msg_ok "Update Successful"
exit exit
fi
msg_info "Stopping Service"
systemctl stop beszel-hub
msg_info "Stopped Service"
msg_info "Updating $APP"
$STD /opt/beszel/beszel update
sleep 2 && chmod +x /opt/beszel/beszel
msg_ok "Updated $APP"
msg_info "Starting Service"
systemctl start beszel-hub
msg_ok "Successfully started $APP"
msg_ok "Updated successfully!"
exit
} }
start start

View File

@@ -74,7 +74,7 @@ function update_script() {
msg_info "Starting Service" msg_info "Starting Service"
systemctl start bitmagnet-web systemctl start bitmagnet-web
msg_ok "Started Service" msg_ok "Started Service"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -49,7 +49,7 @@ function update_script() {
msg_info "Starting Service" msg_info "Starting Service"
systemctl start blocky systemctl start blocky
msg_ok "Started Service" msg_ok "Started Service"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -29,9 +29,9 @@ function update_script() {
exit exit
fi fi
if check_for_gh_release "booklore" "booklore-app/BookLore"; then if check_for_gh_release "booklore" "booklore-app/BookLore"; then
msg_info "Stopping $APP" msg_info "Stopping Service"
systemctl stop booklore systemctl stop booklore
msg_ok "Stopped $APP" msg_info "Stopped Service"
msg_info "backup old install" msg_info "backup old install"
mv /opt/booklore /opt/booklore_bak mv /opt/booklore /opt/booklore_bak
@@ -56,17 +56,17 @@ function update_script() {
JAR_PATH=$(find /opt/booklore/booklore-api/build/libs -maxdepth 1 -type f -name "booklore-api-*.jar" ! -name "*plain*" | head -n1) JAR_PATH=$(find /opt/booklore/booklore-api/build/libs -maxdepth 1 -type f -name "booklore-api-*.jar" ! -name "*plain*" | head -n1)
if [[ -z "$JAR_PATH" ]]; then if [[ -z "$JAR_PATH" ]]; then
msg_error "Backend JAR not found" msg_error "Backend JAR not found"
exit 1 exit
fi fi
cp "$JAR_PATH" /opt/booklore/dist/app.jar cp "$JAR_PATH" /opt/booklore/dist/app.jar
msg_ok "Built Backend" msg_ok "Built Backend"
msg_info "Starting $APP" msg_info "Starting Service"
systemctl start booklore systemctl start booklore
systemctl reload nginx systemctl reload nginx
rm -rf /opt/booklore_bak rm -rf /opt/booklore_bak
msg_ok "Started $APP" msg_ok "Started Service"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -66,7 +66,7 @@ function update_script() {
msg_info "Cleaning Up" msg_info "Cleaning Up"
rm -rf /opt/bookstack-backup rm -rf /opt/bookstack-backup
msg_ok "Cleaned" msg_ok "Cleaned"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -41,7 +41,7 @@ EOF
apt-get install -y --allow-downgrades bunkerweb=${RELEASE} apt-get install -y --allow-downgrades bunkerweb=${RELEASE}
echo "${RELEASE}" >/opt/${APP}_version.txt echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP} to ${RELEASE}" msg_ok "Updated ${APP} to ${RELEASE}"
msg_ok "Updated successfully!"
else else
msg_ok "No update required. ${APP} is already at ${RELEASE}" msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi

View File

@@ -54,8 +54,9 @@ function update_script() {
msg_error "PLEASE MAKE A BACKUP FIRST!" msg_error "PLEASE MAKE A BACKUP FIRST!"
exit exit
fi fi
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit
} }
start start

View File

@@ -20,31 +20,33 @@ color
catch_errors catch_errors
function update_script() { function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -d /etc/caddy ]]; then if [[ ! -d /etc/caddy ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Updating $APP LXC" msg_info "Updating $APP LXC"
$STD apt-get update $STD apt-get update
$STD apt-get -y upgrade $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated successfully!"
msg_ok "Updated $APP LXC"
if command -v xcaddy >/dev/null 2>&1; then if command -v xcaddy >/dev/null 2>&1; then
setup_go setup_go
msg_info "Updating xCaddy" msg_info "Updating xCaddy"
cd /opt cd /opt
RELEASE=$(curl -fsSL https://api.github.com/repos/caddyserver/xcaddy/releases/latest | grep "tag_name" | awk -F '"' '{print $4}') RELEASE=$(curl -fsSL https://api.github.com/repos/caddyserver/xcaddy/releases/latest | grep "tag_name" | awk -F '"' '{print $4}')
VERSION="${RELEASE#v}" VERSION="${RELEASE#v}"
curl -fsSL "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${VERSION}_linux_amd64.deb" -o "xcaddy_${VERSION}_linux_amd64.deb" curl -fsSL "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${VERSION}_linux_amd64.deb" -o "xcaddy_${VERSION}_linux_amd64.deb"
$STD dpkg -i "xcaddy_${VERSION}_linux_amd64.deb" $STD dpkg -i "xcaddy_${VERSION}_linux_amd64.deb"
rm -f "xcaddy_${VERSION}_linux_amd64.deb" rm -f "xcaddy_${VERSION}_linux_amd64.deb"
$STD xcaddy build $STD xcaddy build
msg_ok "Updated xCaddy" msg_ok "Updated xCaddy"
fi msg_ok "Updated successfully!"
exit fi
exit
} }
start start

View File

@@ -104,7 +104,7 @@ function update_script() {
;; ;;
*) *)
echo "Unsupported item $CHOICE!" >&2 echo "Unsupported item $CHOICE!" >&2
exit 1 exit
;; ;;
esac esac
done done
@@ -124,7 +124,7 @@ function update_script() {
msg_info "Starting Service" msg_info "Starting Service"
systemctl start cps systemctl start cps
msg_ok "Started Service" msg_ok "Started Service"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
exit exit
} }

View File

@@ -20,18 +20,19 @@ color
catch_errors catch_errors
function update_script() { function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -d /var ]]; then if [[ ! -d /var ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
$STD apt-get update $STD apt-get update
$STD apt-get -y upgrade $STD apt-get -y upgrade
msg_ok "Updated ${APP} LXC" msg_ok "Updated ${APP} LXC"
exit msg_ok "Updated successfully!"
exit
} }
start start
@@ -41,4 +42,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

@@ -68,7 +68,7 @@ function update_script() {
fi fi
systemctl restart changedetection systemctl restart changedetection
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
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
RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -Ev 'rc|b' | 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 -Ev 'rc|b' | sort -V | tail -n 1)
msg_info "Updating ${APP} to v${RELEASE}" msg_info "Updating ${APP} to v${RELEASE}"
$STD omd stop monitoring $STD omd stop monitoring
@@ -40,8 +40,8 @@ function update_script() {
$STD omd cleanup $STD omd cleanup
rm -rf /opt/checkmk.deb rm -rf /opt/checkmk.deb
msg_ok "Updated ${APP}" msg_ok "Updated ${APP}"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
exit exit
} }

View File

@@ -37,7 +37,7 @@ function update_script() {
msg_info "Starting Service" msg_info "Starting Service"
systemctl start cleanuparr systemctl start cleanuparr
msg_ok "Started Service" msg_ok "Started Service"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -31,6 +31,7 @@ function update_script() {
$STD apt update $STD apt update
$STD apt -y upgrade $STD apt -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit exit
} }

View File

@@ -29,16 +29,16 @@ function update_script() {
exit exit
fi fi
if check_for_gh_release "cloudreve" "cloudreve/cloudreve"; then if check_for_gh_release "cloudreve" "cloudreve/cloudreve"; then
msg_info "Stopping $APP" msg_info "Stopping Service"
systemctl stop cloudreve systemctl stop cloudreve
msg_ok "Stopped $APP" msg_info "Stopped Service"
fetch_and_deploy_gh_release "cloudreve" "cloudreve/cloudreve" "prebuild" "latest" "/opt/cloudreve" "*linux_amd64.tar.gz" fetch_and_deploy_gh_release "cloudreve" "cloudreve/cloudreve" "prebuild" "latest" "/opt/cloudreve" "*linux_amd64.tar.gz"
msg_info "Starting $APP" msg_info "Starting Service"
systemctl start cloudreve systemctl start cloudreve
msg_ok "Started $APP" msg_ok "Started Service"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -27,11 +27,12 @@ function update_script() {
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit exit
fi fi
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
$STD apt update $STD apt update
$STD apt -y upgrade $STD apt -y upgrade
msg_ok "Updated ${APP} LXC" msg_ok "Updated ${APP} LXC"
msg_ok "Updated successfully!"
exit exit
} }

42
ct/comfyui.sh Normal file
View File

@@ -0,0 +1,42 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: jdacode
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/comfyanonymous/ComfyUI
APP="ComfyUI"
var_tags="${var_tags:-ai}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-8192}"
var_disk="${var_disk:-25}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /opt/${APP} ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_error "To update use the ${APP} Manager."
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}:8188${CL}"

View File

@@ -57,7 +57,7 @@ function update_script() {
msg_info "Starting Service" msg_info "Starting Service"
systemctl start commafeed systemctl start commafeed
msg_ok "Started Service" msg_ok "Started Service"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -41,7 +41,7 @@ function update_script() {
msg_info "Starting Service" msg_info "Starting Service"
systemctl start configarr-task.timer systemctl start configarr-task.timer
msg_ok "Started Service" msg_ok "Started Service"
msg_ok "Updated Successfully!" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -28,9 +28,9 @@ function update_script() {
exit exit
fi fi
if check_for_gh_release "ConvertX" "C4illin/ConvertX"; then if check_for_gh_release "ConvertX" "C4illin/ConvertX"; then
msg_info "Stopping $APP" msg_info "Stopping Service"
systemctl stop convertx systemctl stop convertx
msg_ok "Stopped $APP" msg_info "Stopped Service"
msg_info "Move data-Folder" msg_info "Move data-Folder"
if [[ -d /opt/convertx/data ]]; then if [[ -d /opt/convertx/data ]]; then
@@ -48,10 +48,10 @@ function update_script() {
$STD bun install $STD bun install
msg_ok "Updated $APP" msg_ok "Updated $APP"
msg_info "Starting $APP" msg_info "Starting Service"
systemctl start convertx systemctl start convertx
msg_ok "Started $APP" msg_ok "Started Service"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -28,6 +28,7 @@ function update_script() {
exit exit
fi fi
msg_ok "${APP} updates itself automatically!" msg_ok "${APP} updates itself automatically!"
exit
} }
start start
@@ -37,4 +38,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

@@ -67,7 +67,7 @@ function update_script() {
systemctl start crafty-controller systemctl start crafty-controller
msg_ok "Started Crafty-Controller" msg_ok "Started Crafty-Controller"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
else else
msg_ok "No update required. ${APP} is already at v${RELEASE}" msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi fi

View File

@@ -62,7 +62,6 @@ function update_script() {
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
$STD /opt/cronicle/bin/control.sh start $STD /opt/cronicle/bin/control.sh start
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
fi fi

View File

@@ -31,7 +31,7 @@ function update_script() {
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}"
$STD npm install -g cross-seed@latest $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
msg_ok "${APP} is already at v${current_version}" msg_ok "${APP} is already at v${current_version}"
fi fi
@@ -49,4 +49,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 cross-seed API using the following URL:${CL}" echo -e "${INFO}${YW} Access cross-seed API using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:2468${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:2468${CL}"

View File

@@ -29,9 +29,9 @@ function update_script() {
exit exit
fi fi
if check_for_gh_release "cryptpad" "cryptpad/cryptpad"; then if check_for_gh_release "cryptpad" "cryptpad/cryptpad"; then
msg_info "Stopping $APP" msg_info "Stopping Service"
systemctl stop cryptpad systemctl stop cryptpad
msg_ok "Stopped $APP" msg_info "Stopped Service"
msg_info "Backing up configuration" msg_info "Backing up configuration"
[ -f /opt/cryptpad/config/config.js ] && mv /opt/cryptpad/config/config.js /opt/ [ -f /opt/cryptpad/config/config.js ] && mv /opt/cryptpad/config/config.js /opt/
@@ -50,10 +50,10 @@ function update_script() {
mv /opt/config.js /opt/cryptpad/config/ mv /opt/config.js /opt/cryptpad/config/
msg_ok "Configuration restored" msg_ok "Configuration restored"
msg_info "Starting $APP" msg_info "Starting Service"
systemctl start cryptpad systemctl start cryptpad
msg_ok "Started $APP" msg_ok "Started Service"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -20,18 +20,19 @@ color
catch_errors catch_errors
function update_script() { function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -d /var ]]; then if [[ ! -d /var ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating $APP LXC"
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
exit exit
fi
msg_info "Updating $APP LXC"
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit
} }
start start
@@ -41,4 +42,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}:8084${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8084${CL}"

View File

@@ -62,7 +62,7 @@ function update_script() {
msg_info "Starting Dashy" msg_info "Starting Dashy"
systemctl start dashy systemctl start dashy
msg_ok "Started Dashy" msg_ok "Started Dashy"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -31,6 +31,7 @@ function update_script() {
$STD apt update $STD apt update
$STD apt -y upgrade $STD apt -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit exit
} }

View File

@@ -31,6 +31,7 @@ function update_script() {
$STD apt-get update $STD apt-get update
$STD apt-get -y upgrade $STD apt-get -y upgrade
msg_ok "Updated $APP LXC" msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit exit
} }
@@ -41,4 +42,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

@@ -20,18 +20,19 @@ color
catch_errors catch_errors
function update_script() { function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -f /etc/systemd/system/deluged.service ]]; then if [[ ! -f /etc/systemd/system/deluged.service ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating $APP LXC"
$STD apt-get update
pip3 install deluge[all] --upgrade
msg_ok "Updated $APP LXC"
exit exit
fi
msg_info "Updating $APP LXC"
$STD apt-get update
pip3 install deluge[all] --upgrade
msg_ok "Updated $APP LXC"
msg_ok "Updated successfully!"
exit
} }
start start
@@ -41,4 +42,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}:8112${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8112${CL}"

136
ct/dispatcharr.sh Normal file
View File

@@ -0,0 +1,136 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: ekke85 | MickLesk
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/Dispatcharr/Dispatcharr
APP="Dispatcharr"
var_tags="${var_tags:-media;arr}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d "/opt/dispatcharr" ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
setup_uv
NODE_VERSION="24" setup_nodejs
if check_for_gh_release "Dispatcharr" "Dispatcharr/Dispatcharr"; then
msg_info "Stopping Services"
systemctl stop dispatcharr-celery
systemctl stop dispatcharr-celerybeat
systemctl stop dispatcharr-daphne
systemctl stop dispatcharr
msg_ok "Stopped Services"
msg_info "Creating Backup"
BACKUP_FILE="/opt/dispatcharr_backup_$(date +%F_%H-%M-%S).tar.gz"
if [[ -f /opt/dispatcharr/.env ]]; then
cp /opt/dispatcharr/.env /tmp/dispatcharr.env.backup
fi
if [[ -f /opt/dispatcharr/start-gunicorn.sh ]]; then
cp /opt/dispatcharr/start-gunicorn.sh /tmp/start-gunicorn.sh.backup
fi
if [[ -f /opt/dispatcharr/start-celery.sh ]]; then
cp /opt/dispatcharr/start-celery.sh /tmp/start-celery.sh.backup
fi
if [[ -f /opt/dispatcharr/start-celerybeat.sh ]]; then
cp /opt/dispatcharr/start-celerybeat.sh /tmp/start-celerybeat.sh.backup
fi
if [[ -f /opt/dispatcharr/start-daphne.sh ]]; then
cp /opt/dispatcharr/start-daphne.sh /tmp/start-daphne.sh.backup
fi
if [[ -f /opt/dispatcharr/.env ]]; then
set -o allexport
source /opt/dispatcharr/.env
set +o allexport
if [[ -n "$POSTGRES_DB" ]] && [[ -n "$POSTGRES_USER" ]] && [[ -n "$POSTGRES_PASSWORD" ]]; then
PGPASSWORD=$POSTGRES_PASSWORD pg_dump -U $POSTGRES_USER -h ${POSTGRES_HOST:-localhost} $POSTGRES_DB >/tmp/dispatcharr_db_$(date +%F).sql
msg_info "Database backup created"
fi
fi
$STD tar -czf "$BACKUP_FILE" -C /opt dispatcharr /tmp/dispatcharr_db_*.sql
msg_ok "Backup created: $BACKUP_FILE"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dispatcharr" "Dispatcharr/Dispatcharr"
msg_info "Updating Dispatcharr Backend"
if [[ -f /tmp/dispatcharr.env.backup ]]; then
mv /tmp/dispatcharr.env.backup /opt/dispatcharr/.env
fi
if [[ -f /tmp/start-gunicorn.sh.backup ]]; then
mv /tmp/start-gunicorn.sh.backup /opt/dispatcharr/start-gunicorn.sh
fi
if [[ -f /tmp/start-celery.sh.backup ]]; then
mv /tmp/start-celery.sh.backup /opt/dispatcharr/start-celery.sh
fi
if [[ -f /tmp/start-celerybeat.sh.backup ]]; then
mv /tmp/start-celerybeat.sh.backup /opt/dispatcharr/start-celerybeat.sh
fi
if [[ -f /tmp/start-daphne.sh.backup ]]; then
mv /tmp/start-daphne.sh.backup /opt/dispatcharr/start-daphne.sh
fi
cd /opt/dispatcharr
rm -rf .venv
$STD uv venv
$STD uv pip install -r requirements.txt --index-strategy unsafe-best-match
$STD uv pip install gunicorn gevent celery redis daphne
msg_ok "Updated Dispatcharr Backend"
msg_info "Building Frontend"
cd /opt/dispatcharr/frontend
$STD npm install --legacy-peer-deps
$STD npm run build
msg_ok "Built Frontend"
msg_info "Running Django Migrations"
cd /opt/dispatcharr
if [[ -f .env ]]; then
set -o allexport
source .env
set +o allexport
fi
$STD uv run python manage.py migrate --noinput
$STD uv run python manage.py collectstatic --noinput
msg_ok "Migrations Complete"
msg_info "Starting Services"
systemctl start dispatcharr
systemctl start dispatcharr-celery
systemctl start dispatcharr-celerybeat
systemctl start dispatcharr-daphne
msg_ok "Started Services"
msg_info "Cleaning up"
rm -f /tmp/dispatcharr_db_*.sql
msg_ok "Cleanup completed"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"

View File

@@ -81,6 +81,7 @@ function update_script() {
$STD apt-get -y autoremove $STD apt-get -y autoremove
$STD apt-get -y autoclean $STD apt-get -y autoclean
msg_ok "Cleanup complete" msg_ok "Cleanup complete"
msg_ok "Updated successfully!"
exit exit
} }

View File

@@ -20,19 +20,20 @@ color
catch_errors catch_errors
function update_script() { function update_script() {
header_info header_info
check_container_storage check_container_storage
check_container_resources check_container_resources
if [[ ! -d /opt/dockge ]]; then if [[ ! -d /opt/dockge ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating ${APP}"
cd /opt/dockge
docker compose pull
docker compose up -d
msg_ok "Updated ${APP}"
exit exit
fi
msg_info "Updating ${APP}"
cd /opt/dockge
$STD docker compose pull
$STD docker compose up -d
msg_ok "Updated ${APP}"
msg_ok "Updated successfully!"
exit
} }
start start
@@ -42,4 +43,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}:5001${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5001${CL}"

View File

@@ -55,7 +55,7 @@ function update_script() {
msg_info "Starting Service" msg_info "Starting Service"
systemctl start docmost systemctl start docmost
msg_ok "Started Service" msg_ok "Started Service"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -60,7 +60,7 @@ function update_script() {
msg_info "Cleaning Up" msg_info "Cleaning Up"
rm -rf /opt/v${RELEASE}.zip rm -rf /opt/v${RELEASE}.zip
msg_ok "Cleaned" msg_ok "Cleaned"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
else else
msg_ok "No update required. ${APP} is already at ${RELEASE}" msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi fi

63
ct/donetick.sh Normal file
View File

@@ -0,0 +1,63 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: fstof
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/donetick/donetick
APP="Donetick"
var_tags="${var_tags:-productivity;tasks}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/donetick ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "donetick" "donetick/donetick"; then
msg_info "Stopping Service"
systemctl stop donetick
msg_ok "Stopped Service"
msg_info "Backing Up Configurations"
mv /opt/donetick/config/selfhosted.yml /opt/donetick/donetick.db /opt
msg_ok "Backed Up Configurations"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "donetick" "donetick/donetick" "prebuild" "latest" "/opt/donetick" "donetick_Linux_x86_64.tar.gz"
msg_info "Restoring Configurations"
mv /opt/selfhosted.yml /opt/donetick/config
mv /opt/donetick.db /opt/donetick
msg_ok "Restored Configurations"
msg_info "Starting Service"
systemctl start donetick
msg_ok "Started Service"
msg_ok "Updated successfully!"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:2021${CL}"

View File

@@ -30,7 +30,7 @@ function update_script() {
msg_info "Updating ${APP} LXC" msg_info "Updating ${APP} LXC"
$STD apt-get update $STD apt-get update
$STD apt-get -y upgrade $STD apt-get -y upgrade
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
exit exit
} }
@@ -41,4 +41,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 IP:${CL}" echo -e "${INFO}${YW} Access it using the following IP:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}${IP}:80${CL}" echo -e "${TAB}${GATEWAY}${BGN}${IP}:80${CL}"

View File

@@ -29,16 +29,16 @@ function update_script() {
fi fi
if check_for_gh_release "duplicati" "duplicati/duplicati"; then if check_for_gh_release "duplicati" "duplicati/duplicati"; then
msg_info "Stopping $APP" msg_info "Stopping Service"
systemctl stop duplicati systemctl stop duplicati
msg_ok "Stopped $APP" msg_info "Stopped Service"
fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "duplicati-*-linux-x64-gui.deb" fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "duplicati-*-linux-x64-gui.deb"
msg_info "Starting $APP" msg_info "Starting Service"
systemctl start duplicati systemctl start duplicati
msg_ok "Started $APP" msg_ok "Started Service"
msg_ok "Update Successful" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -61,8 +61,8 @@ function update_script() {
$STD yarn global add serve $STD yarn global add serve
$STD yarn install --ignore-engines $STD yarn install --ignore-engines
$STD yarn build $STD yarn build
mv ./dist ../ && \ mv ./dist ../ &&
rm -rf * && \ rm -rf * &&
mv ../dist ./ mv ../dist ./
if [[ -z $(grep "ExecStart=/usr/local/bin/serve" /etc/systemd/system/synapse-admin.service) ]]; then if [[ -z $(grep "ExecStart=/usr/local/bin/serve" /etc/systemd/system/synapse-admin.service) ]]; then
sed -i 's|^ExecStart=.*|ExecStart=/usr/local/bin/serve -s dist -l 5173|' /etc/systemd/system/synapse-admin.service sed -i 's|^ExecStart=.*|ExecStart=/usr/local/bin/serve -s dist -l 5173|' /etc/systemd/system/synapse-admin.service
@@ -71,7 +71,7 @@ function update_script() {
systemctl start synapse-admin systemctl start synapse-admin
echo "${RELEASE}" >/opt/"${APP}"_version.txt echo "${RELEASE}" >/opt/"${APP}"_version.txt
rm -f "$temp_file" rm -f "$temp_file"
msg_ok "Update Successful" msg_ok "Updated successfully!"
else else
msg_ok "No update required. ${APP} is already at v${RELEASE}" msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi fi

View File

@@ -38,7 +38,7 @@ function update_script() {
msg_info "Starting Service" msg_info "Starting Service"
systemctl start emby-server systemctl start emby-server
msg_ok "Started Service" msg_ok "Started Service"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -57,7 +57,7 @@ function update_script() {
msg_info "Cleaning Up" msg_info "Cleaning Up"
rm -f "$DEB_FILE" rm -f "$DEB_FILE"
msg_ok "Cleanup Completed" msg_ok "Cleanup Completed"
msg_ok "Update Successful" msg_ok "Updated successfully!"
else else
msg_ok "No update required. EMQX is already at v${RELEASE}" msg_ok "No update required. EMQX is already at v${RELEASE}"
fi fi

View File

@@ -37,7 +37,7 @@ function update_script() {
systemctl start ersatzTV systemctl start ersatzTV
msg_ok "Started ErsatzTV" msg_ok "Started ErsatzTV"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
if check_for_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg"; then if check_for_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg"; then
@@ -57,7 +57,7 @@ function update_script() {
msg_info "Starting ErsatzTV" msg_info "Starting ErsatzTV"
systemctl start ersatzTV systemctl start ersatzTV
msg_ok "Started ErsatzTV" msg_ok "Started ErsatzTV"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

View File

@@ -25,7 +25,7 @@ function update_script() {
check_container_resources check_container_resources
if [[ ! -f /etc/systemd/system/esphomeDashboard.service ]]; then if [[ ! -f /etc/systemd/system/esphomeDashboard.service ]]; then
msg_error "No ${APP} Installation Found!" msg_error "No ${APP} Installation Found!"
exit 1 exit
fi fi
msg_info "Stopping Service" msg_info "Stopping Service"
@@ -81,7 +81,7 @@ EOF
msg_info "Starting Service" msg_info "Starting Service"
systemctl start esphomeDashboard systemctl start esphomeDashboard
msg_ok "Started Service" msg_ok "Started Service"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
exit exit
} }

View File

@@ -30,7 +30,7 @@ function update_script() {
msg_info "Updating evcc LXC" msg_info "Updating evcc LXC"
$STD apt update $STD apt update
$STD apt --only-upgrade install -y evcc $STD apt --only-upgrade install -y evcc
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
exit exit
} }
@@ -41,4 +41,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}:7070${CL}" echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7070${CL}"

View File

@@ -29,9 +29,9 @@ function update_script() {
exit exit
fi fi
if check_for_gh_release "excalidraw" "excalidraw/excalidraw"; then if check_for_gh_release "excalidraw" "excalidraw/excalidraw"; then
msg_info "Stopping $APP" msg_info "Stopping Service"
systemctl stop excalidraw systemctl stop excalidraw
msg_ok "Stopped $APP" msg_info "Stopped Service"
rm -rf /opt/excalidraw rm -rf /opt/excalidraw
fetch_and_deploy_gh_release "excalidraw" "excalidraw/excalidraw" fetch_and_deploy_gh_release "excalidraw" "excalidraw/excalidraw"
@@ -41,10 +41,10 @@ function update_script() {
$STD yarn $STD yarn
msg_ok "Updated $APP" msg_ok "Updated $APP"
msg_info "Starting $APP" msg_info "Starting Service"
systemctl start excalidraw systemctl start excalidraw
msg_ok "Started $APP" msg_ok "Started Service"
msg_ok "Updated Successfully" msg_ok "Updated successfully!"
fi fi
exit exit
} }

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