mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-07-31 10:12:56 +02:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 65219d9469 | |||
| 5bea573281 | |||
| 5603b69b81 |
+7
-40
@@ -12,17 +12,13 @@ body:
|
||||
Requests may be closed if the application is out of scope, abandoned, too new, not publicly verifiable, or not suitable for a reliable Proxmox VE Helper-Scripts integration.
|
||||
|
||||
General requirements:
|
||||
- The application must be self-hosted.
|
||||
- The project must have an official public source repository.
|
||||
- The project must provide official releases, tags, or release tarballs.
|
||||
- The project must be actively maintained.
|
||||
- The official source repository must have at least 1,000 stars.
|
||||
- The latest official release or tag must not be older than 6 months.
|
||||
- The project itself must be at least 6 months old.
|
||||
|
||||
Projects that do not meet these requirements may be closed without further evaluation.
|
||||
|
||||
Exceptions to the 1,000-star requirement are rare and require a clearly verifiable, significant public adoption signal.
|
||||
- The application should be self-hosted.
|
||||
- The project should have an official public source repository.
|
||||
- The project should provide official releases, tags, or release tarballs.
|
||||
- The project should be actively maintained.
|
||||
- The project should generally have at least 1,000 stars or a comparable public adoption signal.
|
||||
- The latest official release or tag should not be older than 6 months.
|
||||
- The project itself should be at least 6 months old.
|
||||
|
||||
- type: input
|
||||
id: application-name
|
||||
@@ -51,35 +47,6 @@ body:
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
## ⚠️ Project Eligibility
|
||||
|
||||
Before continuing, verify that the requested project meets the minimum requirements below.
|
||||
|
||||
**Projects with fewer than 1,000 stars are generally not eligible for a script request.**
|
||||
|
||||
Exceptions are only considered where there is a clearly verifiable, significant public adoption signal.
|
||||
|
||||
- type: input
|
||||
id: repository-stars
|
||||
attributes:
|
||||
label: Repository Stars
|
||||
description: Enter the current number of stars of the official source repository.
|
||||
placeholder: "e.g., 15,000"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: checkboxes
|
||||
id: minimum-stars
|
||||
attributes:
|
||||
label: Minimum Adoption Requirement
|
||||
description: Confirm that you have verified the project's public adoption.
|
||||
options:
|
||||
- label: The official source repository has at least 1,000 stars.
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: app-description
|
||||
attributes:
|
||||
|
||||
Generated
-1
@@ -1,3 +1,2 @@
|
||||
ko_fi: community_scripts
|
||||
github: community_scripts
|
||||
buy_me_a_coffee: communityscripts
|
||||
|
||||
Generated
-44
@@ -1,47 +1,3 @@
|
||||
## 2026-06-30
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: Use heredoc when creating env files and creds/other [@tremor021](https://github.com/tremor021) ([#15469](https://github.com/community-scripts/ProxmoxVE/pull/15469))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- [tools/pve/*.sh] https://download.proxmox.com -> http://download.proxmox.com (PVE8 Only) [@galeksandrp](https://github.com/galeksandrp) ([#15498](https://github.com/community-scripts/ProxmoxVE/pull/15498))
|
||||
|
||||
## 2026-06-29
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Koffan ([#15467](https://github.com/community-scripts/ProxmoxVE/pull/15467))
|
||||
- Etherpad ([#15468](https://github.com/community-scripts/ProxmoxVE/pull/15468))
|
||||
- Flame ([#15464](https://github.com/community-scripts/ProxmoxVE/pull/15464))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- chore(ct): sync snapotter defaults with PocketBase [@github-actions[bot]](https://github.com/github-actions[bot]) ([#15472](https://github.com/community-scripts/ProxmoxVE/pull/15472))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- feat: update nginx proxy manager to trixie [@asylumexp](https://github.com/asylumexp) ([#15457](https://github.com/community-scripts/ProxmoxVE/pull/15457))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- [tools.func]: add edit_yaml_config function [@tremor021](https://github.com/tremor021) ([#15484](https://github.com/community-scripts/ProxmoxVE/pull/15484))
|
||||
|
||||
## 2026-06-28
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- remove: promtail as EOL and other fixes [@asylumexp](https://github.com/asylumexp) ([#15455](https://github.com/community-scripts/ProxmoxVE/pull/15455))
|
||||
|
||||
## 2026-06-27
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
Generated
-483
@@ -1,483 +0,0 @@
|
||||
## 2026-07-25
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- SparkyFitness: substitute SPARKY_FITNESS_FRONTEND_URL in nginx config [@MickLesk](https://github.com/MickLesk) ([#16007](https://github.com/community-scripts/ProxmoxVE/pull/16007))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- AFFiNE: Bump version to v0.27.3 [@Oscar006](https://github.com/Oscar006) ([#16012](https://github.com/community-scripts/ProxmoxVE/pull/16012))
|
||||
|
||||
## 2026-07-24
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Termix: migrate database to new db/data layout [@MickLesk](https://github.com/MickLesk) ([#15996](https://github.com/community-scripts/ProxmoxVE/pull/15996))
|
||||
- Sync-in: create admin user with admin role instead of default user [@MickLesk](https://github.com/MickLesk) ([#15983](https://github.com/community-scripts/ProxmoxVE/pull/15983))
|
||||
- VM: fix machine type selection being ignored, VM always created as q35 [@MickLesk](https://github.com/MickLesk) ([#15995](https://github.com/community-scripts/ProxmoxVE/pull/15995))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Bump all Alpine scripts to 3.24 [@asylumexp](https://github.com/asylumexp) ([#15994](https://github.com/community-scripts/ProxmoxVE/pull/15994))
|
||||
|
||||
## 2026-07-23
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- IronClaw: pin to v0.29.1, 1.0 Reborn CLI/config is incompatible [@MickLesk](https://github.com/MickLesk) ([#15982](https://github.com/community-scripts/ProxmoxVE/pull/15982))
|
||||
- update authentik to 2026.5.6 [@thieneret](https://github.com/thieneret) ([#15973](https://github.com/community-scripts/ProxmoxVE/pull/15973))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Cockpit: default to Debian 13, 45Drives now ships Trixie packages | little refactor [@MickLesk](https://github.com/MickLesk) ([#15984](https://github.com/community-scripts/ProxmoxVE/pull/15984))
|
||||
- Paperless-ngx: Support v3 [@tomfrenzel](https://github.com/tomfrenzel) ([#15221](https://github.com/community-scripts/ProxmoxVE/pull/15221))
|
||||
|
||||
## 2026-07-22
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- pve-tool: storage share helper script for Proxmox [@MickLesk](https://github.com/MickLesk) ([#15869](https://github.com/community-scripts/ProxmoxVE/pull/15869))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- InvoiceNinja: preserve and Re-download snappdf Chromium [@MickLesk](https://github.com/MickLesk) ([#15956](https://github.com/community-scripts/ProxmoxVE/pull/15956))
|
||||
- Anytype: preserve default mongod.conf when configuring Anytype replica set [@MickLesk](https://github.com/MickLesk) ([#15954](https://github.com/community-scripts/ProxmoxVE/pull/15954))
|
||||
- Nametag: fix missing tailwindcss module [@MickLesk](https://github.com/MickLesk) ([#15955](https://github.com/community-scripts/ProxmoxVE/pull/15955))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- OPNSense: Bump FreeBSD to 15 and OPNSense to 26.7 [@MickLesk](https://github.com/MickLesk) ([#15943](https://github.com/community-scripts/ProxmoxVE/pull/15943))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- core: add OS mismatch guard for container updates [@MickLesk](https://github.com/MickLesk) ([#15948](https://github.com/community-scripts/ProxmoxVE/pull/15948))
|
||||
|
||||
## 2026-07-21
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Pangolin: Bump Version to 1.21.0 [@MickLesk](https://github.com/MickLesk) ([#15938](https://github.com/community-scripts/ProxmoxVE/pull/15938))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Standardize CT update backup handling [@MickLesk](https://github.com/MickLesk) ([#15937](https://github.com/community-scripts/ProxmoxVE/pull/15937))
|
||||
|
||||
## 2026-07-20
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- RomM: use backup helpers in update / clear folder [@MickLesk](https://github.com/MickLesk) ([#15915](https://github.com/community-scripts/ProxmoxVE/pull/15915))
|
||||
- fix: vikunja: asset selection [@CrazyWolf13](https://github.com/CrazyWolf13) ([#15929](https://github.com/community-scripts/ProxmoxVE/pull/15929))
|
||||
- Zammad : bind Elasticsearch to 127.0.0.1 [@MickLesk](https://github.com/MickLesk) ([#15909](https://github.com/community-scripts/ProxmoxVE/pull/15909))
|
||||
- Omada: fix package version extraction [@MickLesk](https://github.com/MickLesk) ([#15908](https://github.com/community-scripts/ProxmoxVE/pull/15908))
|
||||
- fix(wanderer): use PocketBase-relative plugin symlink in unprivileged LXC [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15911](https://github.com/community-scripts/ProxmoxVE/pull/15911))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- AFFiNE: Bump version to v0.27.2 [@MickLesk](https://github.com/MickLesk) ([#15930](https://github.com/community-scripts/ProxmoxVE/pull/15930))
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- Gotify: Migration to v3 [@MickLesk](https://github.com/MickLesk) ([#15912](https://github.com/community-scripts/ProxmoxVE/pull/15912))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- core: refactor to single-reporter telemetry and better error_handling [@MickLesk](https://github.com/MickLesk) ([#15933](https://github.com/community-scripts/ProxmoxVE/pull/15933))
|
||||
- tools.func: add support for extracting 7z archives [@MickLesk](https://github.com/MickLesk) ([#15919](https://github.com/community-scripts/ProxmoxVE/pull/15919))
|
||||
- Meilisearch : use dumpless Meilisearch upgrades [@MickLesk](https://github.com/MickLesk) ([#15921](https://github.com/community-scripts/ProxmoxVE/pull/15921))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- core: Improve GPU detection and mapping logic [@MickLesk](https://github.com/MickLesk) ([#15918](https://github.com/community-scripts/ProxmoxVE/pull/15918))
|
||||
|
||||
## 2026-07-19
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- change trek repo to liketrek/TREK [@asylumexp](https://github.com/asylumexp) ([#15893](https://github.com/community-scripts/ProxmoxVE/pull/15893))
|
||||
- update authentik to 2026.5.5 [@thieneret](https://github.com/thieneret) ([#15855](https://github.com/community-scripts/ProxmoxVE/pull/15855))
|
||||
- [FIX] BookOrbit: add missing `restore_backup` during update [@vhsdream](https://github.com/vhsdream) ([#15881](https://github.com/community-scripts/ProxmoxVE/pull/15881))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- tools.func: centralize deploy tail + trap-based tmpdir cleanup [@MickLesk](https://github.com/MickLesk) ([#15872](https://github.com/community-scripts/ProxmoxVE/pull/15872))
|
||||
- Update OPNsense from 26.1 to 26.7 [@tdn131](https://github.com/tdn131) ([#15895](https://github.com/community-scripts/ProxmoxVE/pull/15895))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- Revert "core: add configurable host CA inheritance during bootstrap" [@MickLesk](https://github.com/MickLesk) ([#15886](https://github.com/community-scripts/ProxmoxVE/pull/15886))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix(build.func): expand glob in SSH key "Scan Folder/Glob" so it can find keys [@TowyTowy](https://github.com/TowyTowy) ([#15873](https://github.com/community-scripts/ProxmoxVE/pull/15873))
|
||||
|
||||
## 2026-07-18
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- core: add configurable host CA inheritance during bootstrap [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15840](https://github.com/community-scripts/ProxmoxVE/pull/15840))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- tools.func: Safe Delete Directorys & Update PYTHON_VERSION with setup_uv [@MickLesk](https://github.com/MickLesk) ([#15870](https://github.com/community-scripts/ProxmoxVE/pull/15870))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- [tools.update-lxcs] feat: optional reporting success/failures to heathchecks.io (or others) [@sir106](https://github.com/sir106) ([#15701](https://github.com/community-scripts/ProxmoxVE/pull/15701))
|
||||
|
||||
## 2026-07-17
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Invidious ([#15824](https://github.com/community-scripts/ProxmoxVE/pull/15824))
|
||||
- OxiCloud ([#15823](https://github.com/community-scripts/ProxmoxVE/pull/15823))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- webtrees: initialize database schema before admin user creation [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15837](https://github.com/community-scripts/ProxmoxVE/pull/15837))
|
||||
- Fix DocuSeal missing Leptonica deps on install and update [@Copilot](https://github.com/Copilot) ([#15858](https://github.com/community-scripts/ProxmoxVE/pull/15858))
|
||||
- apache-guacamole: detect installed extensions during update [@TowyTowy](https://github.com/TowyTowy) ([#15841](https://github.com/community-scripts/ProxmoxVE/pull/15841))
|
||||
- CLIProxyAPI: fix update deleting config.yaml [@austinpilz](https://github.com/austinpilz) ([#15834](https://github.com/community-scripts/ProxmoxVE/pull/15834))
|
||||
- esphome: install libusb-1.0-0 for ESP-IDF native builds [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15838](https://github.com/community-scripts/ProxmoxVE/pull/15838))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- AFFiNE: Bump to 0.27.0 [@MickLesk](https://github.com/MickLesk) ([#15848](https://github.com/community-scripts/ProxmoxVE/pull/15848))
|
||||
- n8n: unpin / use latest release [@MickLesk](https://github.com/MickLesk) ([#15817](https://github.com/community-scripts/ProxmoxVE/pull/15817))
|
||||
- Pin Opencloud to v7.3.0 [@vhsdream](https://github.com/vhsdream) ([#15826](https://github.com/community-scripts/ProxmoxVE/pull/15826))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- SFTPGo: Update APT Repo & Re-Enable Script [@MickLesk](https://github.com/MickLesk) ([#15829](https://github.com/community-scripts/ProxmoxVE/pull/15829))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- tools.func: enhance rbenv with profile updates / bundle in bashrc [@MickLesk](https://github.com/MickLesk) ([#15822](https://github.com/community-scripts/ProxmoxVE/pull/15822))
|
||||
- feat(build.func): notify users when already on a pinned script version [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15819](https://github.com/community-scripts/ProxmoxVE/pull/15819))
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- MongoDB: Implement kernel version check and patch [@MickLesk](https://github.com/MickLesk) ([#15821](https://github.com/community-scripts/ProxmoxVE/pull/15821))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- update-lxc: autoremove and autoclean after apt full-upgrade [@soupy-boy](https://github.com/soupy-boy) ([#15831](https://github.com/community-scripts/ProxmoxVE/pull/15831))
|
||||
|
||||
## 2026-07-16
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Sync-In ([#15812](https://github.com/community-scripts/ProxmoxVE/pull/15812))
|
||||
- Beaverhabits ([#15813](https://github.com/community-scripts/ProxmoxVE/pull/15813))
|
||||
- Notediscovery ([#15811](https://github.com/community-scripts/ProxmoxVE/pull/15811))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Pin Immich to v3.0.3 [@vhsdream](https://github.com/vhsdream) ([#15790](https://github.com/community-scripts/ProxmoxVE/pull/15790))
|
||||
|
||||
## 2026-07-15
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Nexterm ([#15688](https://github.com/community-scripts/ProxmoxVE/pull/15688))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- 2fauth: minor fixes for 8.0.0 [@MickLesk](https://github.com/MickLesk) ([#15795](https://github.com/community-scripts/ProxmoxVE/pull/15795))
|
||||
- SnapOtter: refactor update process to prebuild [@MickLesk](https://github.com/MickLesk) ([#15797](https://github.com/community-scripts/ProxmoxVE/pull/15797))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- tools.func: default Docker setup to official repo [@MickLesk](https://github.com/MickLesk) ([#15794](https://github.com/community-scripts/ProxmoxVE/pull/15794))
|
||||
|
||||
## 2026-07-14
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Grav ([#15773](https://github.com/community-scripts/ProxmoxVE/pull/15773))
|
||||
- Yuvomi ([#15772](https://github.com/community-scripts/ProxmoxVE/pull/15772))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Lychee: Preserve uploads and ownership during update [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15768](https://github.com/community-scripts/ProxmoxVE/pull/15768))
|
||||
- Wanderer: Clean deploy and install plugins for v0.20.0 update [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15759](https://github.com/community-scripts/ProxmoxVE/pull/15759))
|
||||
- FileFlows: Handle update API 401, force update, and Node install [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15766](https://github.com/community-scripts/ProxmoxVE/pull/15766))
|
||||
- BirdNET-Go: Match new upstream release asset naming [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15758](https://github.com/community-scripts/ProxmoxVE/pull/15758))
|
||||
- [Upstream Fix] Immich: Fix loader priority [@vhsdream](https://github.com/vhsdream) ([#15755](https://github.com/community-scripts/ProxmoxVE/pull/15755))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Bump OpenCloud version to v7.2.2 [@MickLesk](https://github.com/MickLesk) ([#15769](https://github.com/community-scripts/ProxmoxVE/pull/15769))
|
||||
- Silverbullet: Add optional Runtime API install via Chromium [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15761](https://github.com/community-scripts/ProxmoxVE/pull/15761))
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- Pangolin: Bump to 1.20.0 | BREAKING: Switch to PostgreSQL [@MickLesk](https://github.com/MickLesk) ([#15682](https://github.com/community-scripts/ProxmoxVE/pull/15682))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- AFFiNE: Pin to v0.26.3 [@MickLesk](https://github.com/MickLesk) ([#15782](https://github.com/community-scripts/ProxmoxVE/pull/15782))
|
||||
|
||||
## 2026-07-13
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- LeafWiki ([#15748](https://github.com/community-scripts/ProxmoxVE/pull/15748))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix(hyperion): keep service running after container reboot [@TowyTowy](https://github.com/TowyTowy) ([#15653](https://github.com/community-scripts/ProxmoxVE/pull/15653))
|
||||
- Change sign-in URL to admin URL in affine.sh [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15741](https://github.com/community-scripts/ProxmoxVE/pull/15741))
|
||||
- immich: use actual PostgreSQL version for VectorChord package lookup [@mnavon](https://github.com/mnavon) ([#15705](https://github.com/community-scripts/ProxmoxVE/pull/15705))
|
||||
- fix storyteller release selection for stable web tags [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15736](https://github.com/community-scripts/ProxmoxVE/pull/15736))
|
||||
- Docmost: Fix update procedure [@MickLesk](https://github.com/MickLesk) ([#15732](https://github.com/community-scripts/ProxmoxVE/pull/15732))
|
||||
- fix(shinobi): remove obsolete --unsafe-perm npm flag [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15730](https://github.com/community-scripts/ProxmoxVE/pull/15730))
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- reitti: update to v5 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#15635](https://github.com/community-scripts/ProxmoxVE/pull/15635))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix(build.func): parse script status without jq dependency [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15729](https://github.com/community-scripts/ProxmoxVE/pull/15729))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- tools.func: some improvements (sql injection / command injection / guard) [@MickLesk](https://github.com/MickLesk) ([#15661](https://github.com/community-scripts/ProxmoxVE/pull/15661))
|
||||
|
||||
## 2026-07-12
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- AFFiNE ([#15690](https://github.com/community-scripts/ProxmoxVE/pull/15690))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- Immich: Bump version to 3.0.2 [@vhsdream](https://github.com/vhsdream) ([#15668](https://github.com/community-scripts/ProxmoxVE/pull/15668))
|
||||
|
||||
### ❔ Uncategorized
|
||||
|
||||
- fix(immich): correct Python indentation error in ct/immich.sh heredoc patch [@Copilot](https://github.com/Copilot) ([#15723](https://github.com/community-scripts/ProxmoxVE/pull/15723))
|
||||
|
||||
## 2026-07-11
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- LocalAGI ([#15687](https://github.com/community-scripts/ProxmoxVE/pull/15687))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- fix(adventurelog): allow pnpm build scripts so install/update doesn't abort [@TowyTowy](https://github.com/TowyTowy) ([#15681](https://github.com/community-scripts/ProxmoxVE/pull/15681))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix(fileflows): install .NET 10 ASP.NET Core Runtime to match current release [@TowyTowy](https://github.com/TowyTowy) ([#15702](https://github.com/community-scripts/ProxmoxVE/pull/15702))
|
||||
- Fix spacing on VLAN Input Box in haos-vm.sh [@pumrum](https://github.com/pumrum) ([#15696](https://github.com/community-scripts/ProxmoxVE/pull/15696))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- [tools.func]: Add function to handle deployment via GitLab release tags [@tremor021](https://github.com/tremor021) ([#15641](https://github.com/community-scripts/ProxmoxVE/pull/15641))
|
||||
|
||||
## 2026-07-10
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Squid ([#15605](https://github.com/community-scripts/ProxmoxVE/pull/15605))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Adapt to new artifact filename format for pocket id [@wollew](https://github.com/wollew) ([#15689](https://github.com/community-scripts/ProxmoxVE/pull/15689))
|
||||
- Fireshare: Fix for install and upgrade to v1.7.3 [@tremor021](https://github.com/tremor021) ([#15673](https://github.com/community-scripts/ProxmoxVE/pull/15673))
|
||||
- Endurain: Fix update procedure [@tremor021](https://github.com/tremor021) ([#15674](https://github.com/community-scripts/ProxmoxVE/pull/15674))
|
||||
|
||||
## 2026-07-09
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- fix(pihole): repair Unbound DNS-over-TLS (DoT) forwarding config [@TowyTowy](https://github.com/TowyTowy) ([#15654](https://github.com/community-scripts/ProxmoxVE/pull/15654))
|
||||
|
||||
## 2026-07-08
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Opencloud: Bump version to 7.2.1 [@vhsdream](https://github.com/vhsdream) ([#15655](https://github.com/community-scripts/ProxmoxVE/pull/15655))
|
||||
- BabyBuddy: Harden update script [@MickLesk](https://github.com/MickLesk) ([#15642](https://github.com/community-scripts/ProxmoxVE/pull/15642))
|
||||
|
||||
## 2026-07-07
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Forgejo-Runner ([#15046](https://github.com/community-scripts/ProxmoxVE/pull/15046))
|
||||
|
||||
## 2026-07-06
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- Fix alignment in various ct end messages [@tremor021](https://github.com/tremor021) ([#15632](https://github.com/community-scripts/ProxmoxVE/pull/15632))
|
||||
- Immich: Update libvips to 8.18.4 [@vhsdream](https://github.com/vhsdream) ([#15619](https://github.com/community-scripts/ProxmoxVE/pull/15619))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Wizarr: Build JS and CSS static assets [@vhsdream](https://github.com/vhsdream) ([#15634](https://github.com/community-scripts/ProxmoxVE/pull/15634))
|
||||
- RustDesk Server: Update URL format in rustdeskserver.sh [@tremor021](https://github.com/tremor021) ([#15626](https://github.com/community-scripts/ProxmoxVE/pull/15626))
|
||||
- attempt to port docker-vm to support arm64 [@asylumexp](https://github.com/asylumexp) ([#15611](https://github.com/community-scripts/ProxmoxVE/pull/15611))
|
||||
- fix(plane): don't clobber global app var, breaking /usr/bin/update [@asylumexp](https://github.com/asylumexp) ([#15612](https://github.com/community-scripts/ProxmoxVE/pull/15612))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- cliproxyapi: point setup message at /management.html [@austinpilz](https://github.com/austinpilz) ([#15628](https://github.com/community-scripts/ProxmoxVE/pull/15628))
|
||||
|
||||
### 🗑️ Deleted Scripts
|
||||
|
||||
- Remove: FlowiseAI [@MickLesk](https://github.com/MickLesk) ([#15624](https://github.com/community-scripts/ProxmoxVE/pull/15624))
|
||||
|
||||
## 2026-07-05
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- excalidash ([#15604](https://github.com/community-scripts/ProxmoxVE/pull/15604))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix: homarr: cli [@CrazyWolf13](https://github.com/CrazyWolf13) ([#15603](https://github.com/community-scripts/ProxmoxVE/pull/15603))
|
||||
- immich: vacuum smart_search/face_search before VectorChord bump [@irishpadres](https://github.com/irishpadres) ([#15607](https://github.com/community-scripts/ProxmoxVE/pull/15607))
|
||||
|
||||
## 2026-07-04
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Element Synapse: Fix heredoc syntax in elementsynapse-install.sh [@tremor021](https://github.com/tremor021) ([#15594](https://github.com/community-scripts/ProxmoxVE/pull/15594))
|
||||
- Twenty: Fix backup restore [@tremor021](https://github.com/tremor021) ([#15586](https://github.com/community-scripts/ProxmoxVE/pull/15586))
|
||||
- fix(endurain): update frontend dist path after upstream restructure [@joaovitoriasilva](https://github.com/joaovitoriasilva) ([#15590](https://github.com/community-scripts/ProxmoxVE/pull/15590))
|
||||
|
||||
## 2026-07-03
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Immich: handle mise monorepo_root rename correctly | bump to 3.0.1 [@MickLesk](https://github.com/MickLesk) ([#15557](https://github.com/community-scripts/ProxmoxVE/pull/15557))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Opencloud: bump to v7.2.0 [@vhsdream](https://github.com/vhsdream) ([#15575](https://github.com/community-scripts/ProxmoxVE/pull/15575))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- tools.func: fix corepack/pnpm install flow in setup_nodejs [@MickLesk](https://github.com/MickLesk) ([#15579](https://github.com/community-scripts/ProxmoxVE/pull/15579))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Removed deprecated parameter in Filebrowser Quantum configuration [@alpargatagazer](https://github.com/alpargatagazer) ([#15573](https://github.com/community-scripts/ProxmoxVE/pull/15573))
|
||||
|
||||
## 2026-07-02
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Rackula ([#15465](https://github.com/community-scripts/ProxmoxVE/pull/15465))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- typo: fix npm update to npm install for n8n [@MickLesk](https://github.com/MickLesk) ([#15545](https://github.com/community-scripts/ProxmoxVE/pull/15545))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Frigate: bump to v0.17.2 [@MickLesk](https://github.com/MickLesk) ([#15536](https://github.com/community-scripts/ProxmoxVE/pull/15536))
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- Revert "Immich v3.0.0" [@MickLesk](https://github.com/MickLesk) ([#15558](https://github.com/community-scripts/ProxmoxVE/pull/15558))
|
||||
- Immich v3.0.0 [@vhsdream](https://github.com/vhsdream) ([#15153](https://github.com/community-scripts/ProxmoxVE/pull/15153))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- tools.func: configure pnpm to allow all build scripts for environments [@MickLesk](https://github.com/MickLesk) ([#15532](https://github.com/community-scripts/ProxmoxVE/pull/15532))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- feat(build.func): add var_ignore_disable to bypass disabled-script guard [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#15544](https://github.com/community-scripts/ProxmoxVE/pull/15544))
|
||||
|
||||
## 2026-07-01
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- iVentoy ([#15503](https://github.com/community-scripts/ProxmoxVE/pull/15503))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Stirling-PDF: patch libicudata execstack flag for LXC container compatibility [@MickLesk](https://github.com/MickLesk) ([#15531](https://github.com/community-scripts/ProxmoxVE/pull/15531))
|
||||
- FlowiseAI: align install to use pnpm instead of npm to fix missing dependencies [@MickLesk](https://github.com/MickLesk) ([#15530](https://github.com/community-scripts/ProxmoxVE/pull/15530))
|
||||
- Vaultwarden: handle version detection failure gracefully in update [@MickLesk](https://github.com/MickLesk) ([#15526](https://github.com/community-scripts/ProxmoxVE/pull/15526))
|
||||
- homarr: fix: update-fail [@CrazyWolf13](https://github.com/CrazyWolf13) ([#15512](https://github.com/community-scripts/ProxmoxVE/pull/15512))
|
||||
- n8n: pin version to 2.27.5 [@tremor021](https://github.com/tremor021) ([#15516](https://github.com/community-scripts/ProxmoxVE/pull/15516))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- [arm64] feat: iventory arm64 support [@asylumexp](https://github.com/asylumexp) ([#15521](https://github.com/community-scripts/ProxmoxVE/pull/15521))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- core: fix SDN vnet network parameter to use bridge instead of vnet [@MickLesk](https://github.com/MickLesk) ([#15527](https://github.com/community-scripts/ProxmoxVE/pull/15527))
|
||||
- tools.func: use safe variable expansion in check_for_gh_release RETURN trap [@MickLesk](https://github.com/MickLesk) ([#15529](https://github.com/community-scripts/ProxmoxVE/pull/15529))
|
||||
Generated
-17
@@ -1,17 +0,0 @@
|
||||
# Keeps the GitHub Actions referenced in .github/workflows up to date.
|
||||
# https://docs.github.com/code-security/dependabot/working-with-dependabot/dependabot-options-reference
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
day: "monday"
|
||||
open-pull-requests-limit: 5
|
||||
labels:
|
||||
- "dependencies"
|
||||
# One PR per week for all action bumps instead of one PR per action.
|
||||
groups:
|
||||
github-actions:
|
||||
patterns:
|
||||
- "*"
|
||||
Generated
+1
-11
@@ -1,5 +1,5 @@
|
||||
<!--🛑 New scripts must be submitted to [ProxmoxVED](https://github.com/community-scripts/ProxmoxVED) for testing.
|
||||
PRs without prior testing will be closed. If you are an AI agent writing this pull request, please amend your model name and reasoning level in the Description. This is not to blame, more for informational Purposes. Thank you.-->
|
||||
PRs without prior testing will be closed. -->
|
||||
|
||||
## ✍️ Description
|
||||
|
||||
@@ -16,16 +16,6 @@ Fixes #
|
||||
|
||||
---
|
||||
|
||||
## 🤖 AI Assistance (**X** in brackets)
|
||||
|
||||
> If you used an AI tool (GitHub Copilot, Claude, ChatGPT, etc.) to write or generate any scripts in this PR, you **must** confirm compliance below.
|
||||
> Select exactly one option.
|
||||
|
||||
- [ ] **No AI used** – Scripts were written without AI assistance.
|
||||
- [ ] **AI was used** – I confirm the scripts were built using [`AGENTS.md`](https://github.com/community-scripts/ProxmoxVED/blob/main/AGENTS.md) and [`.github/agents/pve-script-creator.agent.md`](https://github.com/community-scripts/ProxmoxVED/blob/main/.github/agents/pve-script-creator.agent.md) as guidance, and the output has been reviewed and corrected to match those guidelines.
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Type of Change (**X** in brackets)
|
||||
|
||||
- [ ] 🐞 **Bug fix** – Resolves an issue without breaking functionality.
|
||||
|
||||
+3
-3
@@ -20,21 +20,21 @@ jobs:
|
||||
steps:
|
||||
- name: Generate a token
|
||||
id: generate-token
|
||||
uses: actions/create-github-app-token@v3
|
||||
uses: actions/create-github-app-token@v1
|
||||
with:
|
||||
app-id: ${{ vars.APP_ID }}
|
||||
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||
|
||||
- name: Generate a token for PR approval and merge
|
||||
id: generate-token-merge
|
||||
uses: actions/create-github-app-token@v3
|
||||
uses: actions/create-github-app-token@v1
|
||||
with:
|
||||
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
|
||||
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
|
||||
|
||||
# Step 1: Checkout repository
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v7
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Step 2: Disable file mode changes detection
|
||||
- name: Disable file mode changes
|
||||
|
||||
Generated
+2
-2
@@ -16,13 +16,13 @@ jobs:
|
||||
CONFIG_PATH: .github/autolabeler-config.json
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v7
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm install minimatch
|
||||
|
||||
- name: Label PR based on file changes, title, and PR template
|
||||
uses: actions/github-script@v9
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const fs = require('fs').promises;
|
||||
|
||||
Generated
+4
-4
@@ -19,25 +19,25 @@ jobs:
|
||||
steps:
|
||||
- name: Generate a token
|
||||
id: generate-token
|
||||
uses: actions/create-github-app-token@v3
|
||||
uses: actions/create-github-app-token@v1
|
||||
with:
|
||||
app-id: ${{ vars.APP_ID }}
|
||||
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||
|
||||
- name: Generate a token for PR approval and merge
|
||||
id: generate-token-merge
|
||||
uses: actions/create-github-app-token@v3
|
||||
uses: actions/create-github-app-token@v1
|
||||
with:
|
||||
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
|
||||
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v7
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Archive old changelog entries
|
||||
uses: actions/github-script@v9
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const fs = require('fs').promises;
|
||||
|
||||
Generated
+5
-5
@@ -19,20 +19,20 @@ jobs:
|
||||
steps:
|
||||
- name: Generate a token
|
||||
id: generate-token
|
||||
uses: actions/create-github-app-token@v3
|
||||
uses: actions/create-github-app-token@v1
|
||||
with:
|
||||
app-id: ${{ vars.APP_ID }}
|
||||
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||
|
||||
- name: Generate a token for PR approval and merge
|
||||
id: generate-token-merge
|
||||
uses: actions/create-github-app-token@v3
|
||||
uses: actions/create-github-app-token@v1
|
||||
with:
|
||||
app-id: ${{ secrets.APP_ID_APPROVE_AND_MERGE }}
|
||||
private-key: ${{ secrets.APP_KEY_APPROVE_AND_MERGE }}
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v7
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -53,7 +53,7 @@ jobs:
|
||||
|
||||
- name: Get categorized pull requests
|
||||
id: get-categorized-prs
|
||||
uses: actions/github-script@v9
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
async function main() {
|
||||
@@ -213,7 +213,7 @@ jobs:
|
||||
return await main();
|
||||
|
||||
- name: Update CHANGELOG.md
|
||||
uses: actions/github-script@v9
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const fs = require('fs').promises;
|
||||
|
||||
+2
-2
@@ -17,7 +17,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v7
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: main
|
||||
|
||||
@@ -242,7 +242,7 @@ jobs:
|
||||
checked=$((checked + 1))
|
||||
|
||||
# Extract our NODE_VERSION
|
||||
our_version=$(grep -oP 'NODE_VERSION=\K"?\d+' "$script" | head -1 | grep -oP '\d+' || echo "")
|
||||
our_version=$(grep -oP 'NODE_VERSION="(\d+)"' "$script" | head -1 | grep -oP '\d+' || echo "")
|
||||
if [[ -z "$our_version" ]]; then
|
||||
if grep -q 'NODE_VERSION=\$(' "$script"; then
|
||||
our_version="dynamic"
|
||||
|
||||
-163
@@ -1,163 +0,0 @@
|
||||
name: Close PRs Missing Template
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
branches: ["main"]
|
||||
types: [opened, edited, reopened, synchronize, labeled]
|
||||
|
||||
jobs:
|
||||
validate-pr-template:
|
||||
if: github.repository == 'community-scripts/ProxmoxVE'
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
pull-requests: write
|
||||
issues: write
|
||||
contents: read
|
||||
steps:
|
||||
- name: Close PR if it does not follow the PR template
|
||||
uses: actions/github-script@v9
|
||||
with:
|
||||
script: |
|
||||
const pr = context.payload.pull_request;
|
||||
const prNumber = pr.number;
|
||||
const author = pr.user.login;
|
||||
const owner = context.repo.owner;
|
||||
const repo = context.repo.repo;
|
||||
|
||||
const allowedBots = [
|
||||
"push-app-to-main[bot]",
|
||||
"push-app-to-main",
|
||||
"community-scripts-pr-app",
|
||||
"github-actions[bot]",
|
||||
"dependabot[bot]",
|
||||
];
|
||||
|
||||
if (allowedBots.includes(author) || author.endsWith("[bot]")) {
|
||||
core.info(`PR #${prNumber} by bot "${author}" — skipping template validation.`);
|
||||
return;
|
||||
}
|
||||
|
||||
const association = pr.author_association;
|
||||
const exemptAssociations = ["OWNER", "MEMBER", "COLLABORATOR"];
|
||||
if (exemptAssociations.includes(association)) {
|
||||
core.info(`PR #${prNumber} by ${association} "${author}" — skipping template validation.`);
|
||||
return;
|
||||
}
|
||||
|
||||
const labels = pr.labels.map((label) => label.name);
|
||||
const skipLabels = ["automated pr", "keep-open"];
|
||||
|
||||
if (skipLabels.some((label) => labels.includes(label))) {
|
||||
core.info(`PR #${prNumber} has a skip label (${labels.join(", ")}) — skipping template validation.`);
|
||||
return;
|
||||
}
|
||||
|
||||
if (pr.draft) {
|
||||
core.info(`PR #${prNumber} is a draft — skipping template validation.`);
|
||||
return;
|
||||
}
|
||||
|
||||
const body = pr.body || "";
|
||||
const failures = [];
|
||||
|
||||
const requiredSections = [
|
||||
"## ✍️ Description",
|
||||
"## ✅ Prerequisites",
|
||||
"## 🛠️ Type of Change",
|
||||
];
|
||||
|
||||
for (const section of requiredSections) {
|
||||
if (!body.includes(section)) {
|
||||
failures.push(`Missing required section: \`${section}\``);
|
||||
}
|
||||
}
|
||||
|
||||
const descriptionMatch = body.match(
|
||||
/## ✍️ Description\s*\n+([\s\S]*?)(?=\n## )/i
|
||||
);
|
||||
const description = (descriptionMatch?.[1] || "").trim();
|
||||
if (!description) {
|
||||
failures.push("The **Description** section is empty.");
|
||||
}
|
||||
|
||||
const prerequisiteCheckboxes = [
|
||||
"**Self-review completed**",
|
||||
"**Tested thoroughly**",
|
||||
"**No security risks**",
|
||||
];
|
||||
|
||||
for (const checkbox of prerequisiteCheckboxes) {
|
||||
const escaped = checkbox.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1");
|
||||
const regex = new RegExp(`- \\[(x|X)\\]\\s*${escaped}`, "i");
|
||||
if (!regex.test(body)) {
|
||||
failures.push(`Prerequisite not checked: ${checkbox}`);
|
||||
}
|
||||
}
|
||||
|
||||
const typeOfChangeCheckboxes = [
|
||||
"🐞 **Bug fix**",
|
||||
"✨ **New feature**",
|
||||
"💥 **Breaking change**",
|
||||
"🆕 **New script**",
|
||||
"🌍 **Website update**",
|
||||
"🔧 **Refactoring / Code Cleanup**",
|
||||
"📝 **Documentation update**",
|
||||
];
|
||||
|
||||
const hasTypeChecked = typeOfChangeCheckboxes.some((checkbox) => {
|
||||
const escaped = checkbox.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1");
|
||||
const regex = new RegExp(`- \\[(x|X)\\]\\s*${escaped}`, "i");
|
||||
return regex.test(body);
|
||||
});
|
||||
|
||||
if (!hasTypeChecked) {
|
||||
failures.push("At least one **Type of Change** checkbox must be checked.");
|
||||
}
|
||||
|
||||
if (failures.length === 0) {
|
||||
core.info(`PR #${prNumber} follows the PR template.`);
|
||||
return;
|
||||
}
|
||||
|
||||
core.info(`Closing PR #${prNumber} — template validation failed.`);
|
||||
|
||||
const templateUrl =
|
||||
"https://github.com/community-scripts/ProxmoxVE/blob/main/.github/pull_request_template.md";
|
||||
const failureList = failures.map((item) => `- ${item}`).join("\n");
|
||||
|
||||
const comment = [
|
||||
`👋 Hi @${author},`,
|
||||
``,
|
||||
`This pull request was closed because it does not follow the [PR template](${templateUrl}).`,
|
||||
``,
|
||||
`Please fix the following and open a new PR (or reopen this one after updating the description):`,
|
||||
``,
|
||||
failureList,
|
||||
``,
|
||||
`> Use the template sections, fill in the description, check all prerequisite boxes, and select at least one type of change.`,
|
||||
``,
|
||||
`Maintainers can add the \`keep-open\` label to exempt a PR from this check.`,
|
||||
``,
|
||||
`Thank you for contributing! 🙏`,
|
||||
].join("\n");
|
||||
|
||||
await github.rest.issues.createComment({
|
||||
owner,
|
||||
repo,
|
||||
issue_number: prNumber,
|
||||
body: comment,
|
||||
});
|
||||
|
||||
await github.rest.pulls.update({
|
||||
owner,
|
||||
repo,
|
||||
pull_number: prNumber,
|
||||
state: "closed",
|
||||
});
|
||||
|
||||
await github.rest.issues.addLabels({
|
||||
owner,
|
||||
repo,
|
||||
issue_number: prNumber,
|
||||
labels: ["missing pr template"],
|
||||
});
|
||||
+1
-1
@@ -14,7 +14,7 @@ jobs:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Close PR if unauthorized new script submission
|
||||
uses: actions/github-script@v9
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const pr = context.payload.pull_request;
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Auto-close if tteck script detected
|
||||
uses: actions/github-script@v9
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const issue = context.payload.issue;
|
||||
|
||||
+69
-105
@@ -3,145 +3,109 @@ on:
|
||||
pull_request:
|
||||
types:
|
||||
- closed
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
close_issue:
|
||||
if: github.event.pull_request.merged == true && github.repository == 'community-scripts/ProxmoxVE'
|
||||
runs-on: self-hosted
|
||||
env:
|
||||
DEV_REPO: community-scripts/ProxmoxVED
|
||||
|
||||
steps:
|
||||
- name: Checkout target repo (merge commit)
|
||||
uses: actions/checkout@v7
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: community-scripts/ProxmoxVE
|
||||
ref: ${{ github.event.pull_request.merge_commit_sha }}
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Collect script slugs from the merged PR
|
||||
- name: Extract and Process PR Title
|
||||
id: extract_title
|
||||
run: |
|
||||
title=$(echo "${{ github.event.pull_request.title }}" | sed 's/^New Script://g' | tr '[:upper:]' '[:lower:]' | sed 's/ //g' | sed 's/-//g')
|
||||
echo "Processed Title: $title"
|
||||
echo "title=$title" >> $GITHUB_ENV
|
||||
|
||||
- name: Get slugs from merged PR
|
||||
id: get_slugs
|
||||
shell: bash
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
PR_NUMBER: ${{ github.event.pull_request.number }}
|
||||
run: |
|
||||
pr_files=$(gh pr view ${{ github.event.pull_request.number }} --repo community-scripts/ProxmoxVE --json files -q '.files[].path' 2>/dev/null || true)
|
||||
slugs=""
|
||||
while IFS= read -r path; do
|
||||
[ -n "$path" ] || continue
|
||||
[ -f "$path" ] || continue
|
||||
|
||||
case "$path" in
|
||||
frontend/public/json/*.json)
|
||||
s=$(jq -r '.slug // empty' "$path" 2>/dev/null || true)
|
||||
;;
|
||||
install/*.sh)
|
||||
s=$(basename "$path" .sh)
|
||||
s="${s%-install}"
|
||||
;;
|
||||
ct/*.sh|tools/*.sh|turnkey/*.sh|vm/*.sh)
|
||||
s=$(basename "$path" .sh)
|
||||
;;
|
||||
*)
|
||||
s=""
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -n "$s" ]; then
|
||||
slugs="$slugs $s"
|
||||
for path in $pr_files; do
|
||||
[[ -f "$path" ]] || continue
|
||||
if [[ "$path" == frontend/public/json/*.json ]]; then
|
||||
s=$(jq -r '.slug // empty' "$path" 2>/dev/null)
|
||||
[[ -n "$s" ]] && slugs="$slugs $s"
|
||||
elif [[ "$path" == ct/*.sh ]] || [[ "$path" == install/*.sh ]] || [[ "$path" == tools/*.sh ]] || [[ "$path" == turnkey/*.sh ]] || [[ "$path" == vm/*.sh ]]; then
|
||||
base=$(basename "$path" .sh)
|
||||
if [[ "$path" == install/* && "$base" == *-install ]]; then
|
||||
s="${base%-install}"
|
||||
else
|
||||
s="$base"
|
||||
fi
|
||||
[[ -n "$s" ]] && slugs="$slugs $s"
|
||||
fi
|
||||
done < <(gh pr view "$PR_NUMBER" --repo community-scripts/ProxmoxVE --json files --jq '.files[].path')
|
||||
done
|
||||
slugs=$(echo $slugs | xargs -n1 | sort -u | tr '\n' ' ')
|
||||
if [[ -z "$slugs" && -n "$title" ]]; then
|
||||
slugs="$title"
|
||||
fi
|
||||
if [[ -z "$slugs" ]]; then
|
||||
echo "count=0" >> "$GITHUB_OUTPUT"
|
||||
exit 0
|
||||
fi
|
||||
echo "$slugs" > pocketbase_slugs.txt
|
||||
echo "count=$(echo $slugs | wc -w)" >> "$GITHUB_OUTPUT"
|
||||
|
||||
slugs=$(printf '%s\n' $slugs | sed '/^$/d' | sort -u | tr '\n' ' ' | xargs || true)
|
||||
printf '%s' "$slugs" > pocketbase_slugs.txt
|
||||
echo "count=$(printf '%s' "$slugs" | wc -w | tr -d '[:space:]')" >> "$GITHUB_OUTPUT"
|
||||
echo "Slugs in this PR: ${slugs:-<none>}"
|
||||
|
||||
- name: Resolve the matching ProxmoxVED issue
|
||||
- name: Find matching issues in ProxmoxVED by slug
|
||||
id: find_issue
|
||||
shell: bash
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
PR_BODY: ${{ github.event.pull_request.body }}
|
||||
run: |
|
||||
# move-to-main-repo.yaml stamps the source issue into the PR body it
|
||||
# creates, so migration PRs carry an exact back-reference. Guessing from
|
||||
# titles or file names is never needed for them.
|
||||
matched=$(printf '%s' "$PR_BODY" \
|
||||
| grep -oE 'community-scripts/ProxmoxVED#[0-9]+' \
|
||||
| sed 's/.*#//' || true)
|
||||
|
||||
if [ -n "$matched" ]; then
|
||||
echo "Back-reference in PR body -> issue(s): $(printf '%s' "$matched" | tr '\n' ' ')"
|
||||
else
|
||||
slugs=$(cat pocketbase_slugs.txt)
|
||||
if [ -z "$slugs" ]; then
|
||||
echo "No back-reference and no script slugs — nothing to close."
|
||||
else
|
||||
# Hand-made PR: fall back to an exact slug match, and only against
|
||||
# issues a maintainer already put into migration. A substring match
|
||||
# here would close unrelated issues that merely mention the app.
|
||||
issues=$(gh issue list --repo "$DEV_REPO" --state open --limit 500 \
|
||||
--json number,title,body,labels \
|
||||
| jq -c '[.[] | select([.labels[].name]
|
||||
| any(. == "Started Migration To ProxmoxVE" or . == "Migration To ProxmoxVE"))]')
|
||||
|
||||
echo "Migration candidates in $DEV_REPO: $(printf '%s' "$issues" | jq 'length')"
|
||||
|
||||
for slug in $slugs; do
|
||||
while IFS= read -r row; do
|
||||
[ -n "$row" ] || continue
|
||||
num=$(printf '%s' "$row" | jq -r '.number')
|
||||
|
||||
# Same slug derivation the ProxmoxVED workflows use, so both
|
||||
# sides agree on what "alpine-cinny" means.
|
||||
name=$(printf '%s' "$row" | jq -r '.body // ""' \
|
||||
| sed -n '/^###[[:space:]]*Name of the Script/,/^###/p' \
|
||||
| sed '1d;/^###/d;/^[[:space:]]*$/d' | head -n1)
|
||||
[ -n "$name" ] || name=$(printf '%s' "$row" | jq -r '.title')
|
||||
issue_slug=$(printf '%s' "$name" | tr -d '\r' | tr '[:upper:]' '[:lower:]' | sed 's/[[:space:]]\+/-/g')
|
||||
|
||||
if [ "$issue_slug" = "$slug" ]; then
|
||||
echo "Exact slug match: $slug -> #$num"
|
||||
matched="$matched $num"
|
||||
fi
|
||||
done < <(printf '%s' "$issues" | jq -c '.[]')
|
||||
done
|
||||
fi
|
||||
if [[ ! -s pocketbase_slugs.txt ]]; then
|
||||
echo "No slugs derived from PR — nothing to match."
|
||||
echo "issue_numbers=" >> "$GITHUB_OUTPUT"
|
||||
exit 0
|
||||
fi
|
||||
slugs=$(cat pocketbase_slugs.txt)
|
||||
|
||||
matched=$(printf '%s\n' $matched | sed '/^$/d' | sort -un | tr '\n' ' ' | xargs || true)
|
||||
count=$(printf '%s' "$matched" | wc -w | tr -d '[:space:]')
|
||||
# Normalize: lowercase, strip spaces and hyphens (same shape as the slug derivation)
|
||||
norm() { echo "$1" | tr '[:upper:]' '[:lower:]' | sed 's/[[:space:]]//g; s/-//g'; }
|
||||
|
||||
if [ "$count" -gt 3 ]; then
|
||||
echo "::error::Refusing to close $count issues for a single PR ($matched) — matching is wrong."
|
||||
exit 1
|
||||
issues=$(gh issue list --repo community-scripts/ProxmoxVED --state open --limit 1000 --json number,title,body)
|
||||
|
||||
matched=""
|
||||
for slug in $slugs; do
|
||||
nslug=$(norm "$slug")
|
||||
[[ -z "$nslug" ]] && continue
|
||||
while IFS= read -r row; do
|
||||
num=$(echo "$row" | jq -r '.number')
|
||||
ntitle=$(norm "$(echo "$row" | jq -r '.title')")
|
||||
body=$(echo "$row" | jq -r '.body // ""' | tr '[:upper:]' '[:lower:]')
|
||||
# Match when the issue title contains the slug, or the body mentions it verbatim
|
||||
if [[ "$ntitle" == *"$nslug"* ]] || [[ "$body" == *"$slug"* ]]; then
|
||||
matched="$matched $num"
|
||||
fi
|
||||
done < <(echo "$issues" | jq -c '.[]')
|
||||
done
|
||||
|
||||
matched=$(echo $matched | xargs -n1 2>/dev/null | sort -un | tr '\n' ' ')
|
||||
if [[ -z "$matched" ]]; then
|
||||
echo "No matching ProxmoxVED issues found for slugs: $slugs"
|
||||
echo "issue_numbers=" >> "$GITHUB_OUTPUT"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "Matched ProxmoxVED issues: $matched"
|
||||
echo "issue_numbers=$matched" >> "$GITHUB_OUTPUT"
|
||||
echo "Closing: ${matched:-<none>}"
|
||||
|
||||
- name: Comment on and close matching ProxmoxVED issues
|
||||
if: steps.find_issue.outputs.issue_numbers != ''
|
||||
shell: bash
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.PAT_MICHEL }}
|
||||
PR_NUMBER: ${{ github.event.pull_request.number }}
|
||||
ISSUE_NUMBERS: ${{ steps.find_issue.outputs.issue_numbers }}
|
||||
run: |
|
||||
for issue_number in $ISSUE_NUMBERS; do
|
||||
state=$(gh issue view "$issue_number" --repo "$DEV_REPO" --json state --jq '.state' 2>/dev/null || echo "MISSING")
|
||||
if [ "$state" != "OPEN" ]; then
|
||||
echo "Skipping #$issue_number (state: $state)"
|
||||
continue
|
||||
fi
|
||||
echo "Closing $DEV_REPO#$issue_number"
|
||||
gh issue comment "$issue_number" --repo "$DEV_REPO" \
|
||||
--body "Merged with #${PR_NUMBER} in ProxmoxVE"
|
||||
gh issue close "$issue_number" --repo "$DEV_REPO"
|
||||
for issue_number in ${{ steps.find_issue.outputs.issue_numbers }}; do
|
||||
echo "Closing ProxmoxVED issue #$issue_number"
|
||||
gh issue comment "$issue_number" --repo community-scripts/ProxmoxVED --body "Merged with #${{ github.event.pull_request.number }} in ProxmoxVE"
|
||||
gh issue close "$issue_number" --repo community-scripts/ProxmoxVED
|
||||
done
|
||||
|
||||
- name: Set is_dev to false in PocketBase
|
||||
|
||||
+1
-25
@@ -19,7 +19,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Delete branches of merged PRs
|
||||
uses: actions/github-script@v9
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const owner = context.repo.owner;
|
||||
@@ -91,30 +91,6 @@ jobs:
|
||||
let skipped = 0;
|
||||
|
||||
for (const branch of candidates) {
|
||||
// A branch name can be reused after an earlier PR was merged. Never delete a
|
||||
// branch while it is the head of a current open PR, even if it is also a
|
||||
// candidate from an older merged PR.
|
||||
try {
|
||||
const { data: openPrs } = await github.rest.pulls.list({
|
||||
owner,
|
||||
repo,
|
||||
state: "open",
|
||||
head: `${owner}:${branch}`,
|
||||
per_page: 1,
|
||||
});
|
||||
|
||||
if (openPrs.length > 0) {
|
||||
console.log(`Skipped "${branch}" (head of open PR #${openPrs[0].number})`);
|
||||
skipped++;
|
||||
continue;
|
||||
}
|
||||
} catch (error) {
|
||||
// Do not risk deleting a branch if GitHub cannot confirm it has no open PR.
|
||||
console.log(`Failed to check open PRs for "${branch}": ${error.message}`);
|
||||
skipped++;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Confirm the branch still exists and isn't protected.
|
||||
let branchData;
|
||||
try {
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ jobs:
|
||||
runs-on: self-hosted
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v7
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
|
||||
Generated
+1
-1
@@ -13,7 +13,7 @@ jobs:
|
||||
contents: write
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v7
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Clean CHANGELOG (remove HTML header)
|
||||
run: sed -n '/^## /,$p' CHANGELOG.md > changelog_cleaned.md
|
||||
|
||||
Generated
+1
-1
@@ -14,7 +14,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Lock old issues and PRs
|
||||
uses: actions/github-script@v9
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const daysBeforeLock = 7;
|
||||
|
||||
Generated
+1
-1
@@ -26,7 +26,7 @@ jobs:
|
||||
steps:
|
||||
- name: Mint GitHub App token (bot identity)
|
||||
id: app-token
|
||||
uses: actions/create-github-app-token@v3
|
||||
uses: actions/create-github-app-token@v1
|
||||
with:
|
||||
app-id: ${{ secrets.PB_BOT_APP_ID }}
|
||||
private-key: ${{ secrets.PB_BOT_APP_PRIVATE_KEY }}
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ jobs:
|
||||
runs-on: self-hosted
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v7
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
|
||||
Generated
+1
-1
@@ -16,7 +16,7 @@ jobs:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Handle stale PRs
|
||||
uses: actions/github-script@v9
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const now = new Date();
|
||||
|
||||
+3
-3
@@ -13,7 +13,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Create redirect page
|
||||
run: |
|
||||
@@ -33,9 +33,9 @@ jobs:
|
||||
</html>
|
||||
EOF
|
||||
|
||||
- uses: actions/upload-pages-artifact@v5
|
||||
- uses: actions/upload-pages-artifact@v3
|
||||
with:
|
||||
path: site
|
||||
|
||||
- name: Deploy
|
||||
uses: actions/deploy-pages@v5
|
||||
uses: actions/deploy-pages@v4
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ jobs:
|
||||
runs-on: self-hosted
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v7
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
|
||||
+595
-700
File diff suppressed because it is too large
Load Diff
@@ -60,7 +60,6 @@ function update_script() {
|
||||
php artisan 2fauth:install
|
||||
chown -R www-data: /opt/2fauth
|
||||
chmod -R 755 /opt/2fauth
|
||||
$STD php artisan 2fauth:fix-passport-key-permissions
|
||||
$STD systemctl restart php8.4-fpm
|
||||
$STD systemctl restart nginx
|
||||
msg_ok "Configured 2FAuth"
|
||||
|
||||
@@ -60,7 +60,6 @@ function update_script() {
|
||||
$STD .venv/bin/python -m manage migrate
|
||||
|
||||
cd /opt/adventurelog/frontend
|
||||
grep -q "^dangerouslyAllowAllBuilds:" ./pnpm-workspace.yaml 2>/dev/null || echo "dangerouslyAllowAllBuilds: true" >>./pnpm-workspace.yaml
|
||||
$STD pnpm i
|
||||
$STD pnpm build
|
||||
msg_ok "Updated AdventureLog"
|
||||
|
||||
-136
@@ -1,136 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/toeverything/AFFiNE
|
||||
|
||||
APP="AFFiNE"
|
||||
var_tags="${var_tags:-knowledge;notes;workspace}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-8192}"
|
||||
var_disk="${var_disk:-20}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_arm64="${var_arm64:-no}"
|
||||
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/affine ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE="v0.27.3"
|
||||
if check_for_gh_release "affine_app" "toeverything/AFFiNE" "${RELEASE}" "each release is tested individually before the version is updated. Please do not open issues for this"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop affine-web affine-worker
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
ensure_dependencies cmake
|
||||
|
||||
create_backup /opt/affine/.env /root/.affine/config /root/.affine/storage
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "affine_app" "toeverything/AFFiNE" "tarball" "${RELEASE}" "/opt/affine"
|
||||
|
||||
restore_backup
|
||||
|
||||
if [[ ! -f /opt/affine/.env ]]; then
|
||||
msg_error "/opt/affine/.env is missing (lost by an earlier update). Recreate it before retrying — see the AFFiNE install script for the expected variables."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
msg_info "Rebuilding Application (Patience ~25 mins, don't close the console!)"
|
||||
cd /opt/affine
|
||||
source /root/.profile
|
||||
export PATH="/root/.cargo/bin:/root/.rbenv/shims:$PATH"
|
||||
|
||||
set -a && source /opt/affine/.env && set +a
|
||||
|
||||
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||
export VITE_CORE_COMMIT_SHA=$(cat ~/.affine_app)
|
||||
|
||||
# Initialize git repo (required for build process)
|
||||
export HUSKY=0
|
||||
$STD git init -q
|
||||
$STD git config user.email "build@local"
|
||||
$STD git config user.name "Build"
|
||||
$STD git add -A
|
||||
$STD git commit -q -m "update" --no-verify --allow-empty
|
||||
|
||||
# Force Turbo to run sequentially
|
||||
mkdir -p /opt/affine/.turbo
|
||||
cat <<TURBO >/opt/affine/.turbo/config.json
|
||||
{
|
||||
"concurrency": 1
|
||||
}
|
||||
TURBO
|
||||
|
||||
$STD corepack enable
|
||||
$STD corepack prepare yarn@4.13.0 --activate
|
||||
$STD yarn config set enableTelemetry 0
|
||||
|
||||
export NODE_OPTIONS="--max-old-space-size=2048"
|
||||
$STD yarn install
|
||||
$STD npm install -g typescript
|
||||
|
||||
$STD yarn affine @affine/native build
|
||||
$STD yarn affine @affine/server-native build
|
||||
|
||||
# Create architecture-specific symlinks
|
||||
ln -sf /opt/affine/packages/backend/native/server-native.node \
|
||||
/opt/affine/packages/backend/native/server-native.x64.node
|
||||
ln -sf /opt/affine/packages/backend/native/server-native.node \
|
||||
/opt/affine/packages/backend/native/server-native.arm64.node
|
||||
ln -sf /opt/affine/packages/backend/native/server-native.node \
|
||||
/opt/affine/packages/backend/native/server-native.armv7.node
|
||||
|
||||
$STD yarn affine init
|
||||
$STD yarn affine build -p @affine/reader
|
||||
$STD yarn affine build -p @affine/server
|
||||
|
||||
export NODE_OPTIONS="--max-old-space-size=4096"
|
||||
$STD yarn affine build -p @affine/web
|
||||
$STD yarn affine build -p @affine/admin
|
||||
|
||||
# Copy web assets
|
||||
mkdir -p /opt/affine/packages/backend/server/static
|
||||
cp -r /opt/affine/packages/frontend/apps/web/dist/* /opt/affine/packages/backend/server/static/
|
||||
mkdir -p /opt/affine/packages/backend/server/static/admin
|
||||
cp -r /opt/affine/packages/frontend/admin/dist/* /opt/affine/packages/backend/server/static/admin/
|
||||
|
||||
# Mobile manifest placeholder
|
||||
mkdir -p /opt/affine/packages/backend/server/static/mobile
|
||||
echo '{"publicPath":"/","js":[],"css":[],"gitHash":"","description":""}' \
|
||||
>/opt/affine/packages/backend/server/static/mobile/assets-manifest.json
|
||||
|
||||
# Run migrations
|
||||
cd /opt/affine/packages/backend/server
|
||||
set -a && source /opt/affine/.env && set +a
|
||||
$STD node ./scripts/self-host-predeploy.js
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start affine-web affine-worker
|
||||
msg_ok "Started Services"
|
||||
msg_ok "Updated Successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
|
||||
echo -e "${GATEWAY}${BGN}http://${IP}:3010/admin${CL}"
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-3}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-20}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-3}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
+10
-5
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_nesting="${var_nesting:-0}"
|
||||
@@ -30,11 +30,16 @@ function update_script() {
|
||||
fi
|
||||
|
||||
if check_for_gh_release "cinny" "cinnyapp/cinny"; then
|
||||
create_backup /opt/cinny/config.json
|
||||
msg_info "Backing up Configuration"
|
||||
cp /opt/cinny/config.json /opt/cinny_config.json.bak
|
||||
msg_ok "Backed up Configuration"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cinny" "cinnyapp/cinny" "prebuild" "latest" "/opt/cinny" "cinny-*.tar.gz"
|
||||
|
||||
restore_backup
|
||||
msg_info "Restoring Configuration"
|
||||
cp /opt/cinny_config.json.bak /opt/cinny/config.json
|
||||
rm -f /opt/cinny_config.json.bak
|
||||
msg_ok "Restored Configuration"
|
||||
|
||||
msg_info "Restarting nginx"
|
||||
$STD rc-service nginx restart
|
||||
@@ -49,5 +54,5 @@ 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 IP:${CL}"
|
||||
echo -e "${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following IP:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ 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.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-3}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
@@ -28,8 +28,7 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
RELEASE="ironclaw-v0.29.1"
|
||||
if check_for_gh_release "ironclaw-bin" "nearai/ironclaw" "${RELEASE}" "IronClaw 1.0 (Reborn) is a ground-up rearchitecture with an incompatible CLI/config format; pinned until this script supports it"; then
|
||||
if check_for_gh_release "ironclaw-bin" "nearai/ironclaw"; then
|
||||
msg_info "Stopping Service"
|
||||
rc-service ironclaw stop 2>/dev/null || true
|
||||
msg_ok "Stopped Service"
|
||||
@@ -38,7 +37,7 @@ function update_script() {
|
||||
cp /root/.ironclaw/.env /root/ironclaw.env.bak
|
||||
msg_ok "Backed up Configuration"
|
||||
|
||||
fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "${RELEASE}" "/usr/local/bin" \
|
||||
fetch_and_deploy_gh_release "ironclaw-bin" "nearai/ironclaw" "prebuild" "latest" "/usr/local/bin" \
|
||||
"ironclaw-$(uname -m)-unknown-linux-musl.tar.gz"
|
||||
chmod +x /usr/local/bin/ironclaw
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-10}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
+3
-1
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
@@ -58,3 +58,5 @@ 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 "${GATEWAY}${BGN}http://${IP}:3100${CL}"
|
||||
echo -e "${INFO}${YW}Access Promtail using the following URL:${CL}"
|
||||
echo -e "${GATEWAY}${BGN}http://${IP}:9080${CL}"
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_fuse="${var_fuse:-yes}"
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-3}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-no}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
var_tun="${var_tun:-1}"
|
||||
|
||||
@@ -11,7 +11,7 @@ var_disk="${var_disk:-1}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-256}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-0}"
|
||||
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-1}"
|
||||
var_os="${var_os:-alpine}"
|
||||
var_version="${var_version:-3.24}"
|
||||
var_version="${var_version:-3.23}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ function update_script() {
|
||||
INSTALLED=$(cat ~/.airflow 2>/dev/null || echo "0")
|
||||
LATEST=$(curl -fsSL "https://pypi.org/pypi/apache-airflow/json" | jq -r '.info.version')
|
||||
|
||||
if [[ $INSTALLED == "$LATEST" ]]; then
|
||||
if [[ "$INSTALLED" == "$LATEST" ]]; then
|
||||
msg_ok "Already on the latest version (${LATEST})"
|
||||
exit
|
||||
fi
|
||||
@@ -71,5 +71,5 @@ 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 "${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||
|
||||
@@ -146,7 +146,7 @@ function update_script() {
|
||||
|
||||
# Check and upgrade optional extensions
|
||||
# TOTP Extension
|
||||
if compgen -G "/etc/guacamole/extensions/guacamole-auth-totp-*.jar" >/dev/null; then
|
||||
if [[ -f /etc/guacamole/extensions/guacamole-auth-totp-*.jar ]]; then
|
||||
msg_info "Updating TOTP Extension"
|
||||
rm -f /etc/guacamole/extensions/guacamole-auth-totp-*.jar
|
||||
curl_download "/tmp/guacamole-auth-totp.tar.gz" "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-totp-${LATEST_SERVER}.tar.gz"
|
||||
@@ -158,7 +158,7 @@ function update_script() {
|
||||
fi
|
||||
|
||||
# DUO Extension
|
||||
if compgen -G "/etc/guacamole/extensions/guacamole-auth-duo-*.jar" >/dev/null; then
|
||||
if [[ -f /etc/guacamole/extensions/guacamole-auth-duo-*.jar ]]; then
|
||||
msg_info "Updating DUO Extension"
|
||||
rm -f /etc/guacamole/extensions/guacamole-auth-duo-*.jar
|
||||
curl_download "/tmp/guacamole-auth-duo.tar.gz" "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-duo-${LATEST_SERVER}.tar.gz"
|
||||
@@ -170,7 +170,7 @@ function update_script() {
|
||||
fi
|
||||
|
||||
# LDAP Extension
|
||||
if compgen -G "/etc/guacamole/extensions/guacamole-auth-ldap-*.jar" >/dev/null; then
|
||||
if [[ -f /etc/guacamole/extensions/guacamole-auth-ldap-*.jar ]]; then
|
||||
msg_info "Updating LDAP Extension"
|
||||
rm -f /etc/guacamole/extensions/guacamole-auth-ldap-*.jar
|
||||
curl_download "/tmp/guacamole-auth-ldap.tar.gz" "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-ldap-${LATEST_SERVER}.tar.gz"
|
||||
@@ -182,7 +182,7 @@ function update_script() {
|
||||
fi
|
||||
|
||||
# Quick Connect Extension
|
||||
if compgen -G "/etc/guacamole/extensions/guacamole-auth-quickconnect-*.jar" >/dev/null; then
|
||||
if [[ -f /etc/guacamole/extensions/guacamole-auth-quickconnect-*.jar ]]; then
|
||||
msg_info "Updating Quick Connect Extension"
|
||||
rm -f /etc/guacamole/extensions/guacamole-auth-quickconnect-*.jar
|
||||
curl_download "/tmp/guacamole-auth-quickconnect.tar.gz" "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-auth-quickconnect-${LATEST_SERVER}.tar.gz"
|
||||
@@ -194,7 +194,7 @@ function update_script() {
|
||||
fi
|
||||
|
||||
# History Recording Storage Extension
|
||||
if compgen -G "/etc/guacamole/extensions/guacamole-history-recording-storage-*.jar" >/dev/null; then
|
||||
if [[ -f /etc/guacamole/extensions/guacamole-history-recording-storage-*.jar ]]; then
|
||||
msg_info "Updating History Recording Storage Extension"
|
||||
rm -f /etc/guacamole/extensions/guacamole-history-recording-storage-*.jar
|
||||
curl_download "/tmp/guacamole-history-recording-storage.tar.gz" "https://downloads.apache.org/guacamole/${LATEST_SERVER}/binary/guacamole-history-recording-storage-${LATEST_SERVER}.tar.gz"
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-10}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_version="${var_version:-12}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
|
||||
+63
-64
@@ -30,7 +30,7 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
read -r MAJOR MINOR PATCH <<<"$(sed 's/^version\///; s/\./ /g' "$HOME/.authentik")"
|
||||
read -r MAJOR MINOR PATCH <<< "$(sed 's/^version\///; s/\./ /g' "$HOME/.authentik")"
|
||||
|
||||
msg_info "Update dependencies"
|
||||
ensure_dependencies crossbuild-essential-$(arch_resolve) gcc-$(arch_resolve "x86-64" "aarch64")-linux-gnu cmake clang libunwind-18-dev
|
||||
@@ -38,14 +38,13 @@ function update_script() {
|
||||
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
setup_go
|
||||
$STD uv cache clean
|
||||
UV_PYTHON_INSTALL_DIR="/usr/local/bin" PYTHON_VERSION="3.14.6" setup_uv
|
||||
UV_PYTHON_INSTALL_DIR="/usr/local/bin" PYTHON_VERSION="3.14.3" setup_uv
|
||||
RUST_PROFILE="minimal" RUST_TOOLCHAIN="stable" setup_rust
|
||||
setup_yq
|
||||
|
||||
AUTHENTIK_VERSION="version/2026.5.6"
|
||||
AUTHENTIK_VERSION="version/2026.5.3"
|
||||
# Source: https://github.com/goauthentik/fips/blob/main/Makefile#L26
|
||||
XMLSEC_VERSION="1.3.12"
|
||||
XMLSEC_VERSION="1.3.11"
|
||||
|
||||
if check_for_gh_release "geoipupdate" "maxmind/geoipupdate"; then
|
||||
fetch_and_deploy_gh_release "geoipupdate" "maxmind/geoipupdate" "binary"
|
||||
@@ -67,26 +66,26 @@ function update_script() {
|
||||
if check_for_gh_release "authentik" "goauthentik/authentik" "${AUTHENTIK_VERSION}"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop authentik-server authentik-worker
|
||||
if [[ $(systemctl is-active authentik-ldap) == active ]]; then
|
||||
systemctl stop authentik-ldap
|
||||
fi
|
||||
if [[ $(systemctl is-active authentik-rac) == active ]]; then
|
||||
systemctl stop authentik-rac
|
||||
fi
|
||||
if [[ $(systemctl is-active authentik-radius) == active ]]; then
|
||||
systemctl stop authentik-radius
|
||||
fi
|
||||
if [[ $(systemctl is-active authentik-ldap) == active ]]; then
|
||||
systemctl stop authentik-ldap
|
||||
fi
|
||||
if [[ $(systemctl is-active authentik-rac) == active ]]; then
|
||||
systemctl stop authentik-rac
|
||||
fi
|
||||
if [[ $(systemctl is-active authentik-radius) == active ]]; then
|
||||
systemctl stop authentik-radius
|
||||
fi
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "authentik" "goauthentik/authentik" "tarball" "${AUTHENTIK_VERSION}" "/opt/authentik"
|
||||
|
||||
msg_info "Configuring rust"
|
||||
cd /opt/authentik
|
||||
$STD rustup install
|
||||
$STD rustup default "$(sed -n 's/channel = "\(.*\)"/\1/p' rust-toolchain.toml)"
|
||||
msg_ok "Configured rust"
|
||||
msg_info "Configuring rust"
|
||||
cd /opt/authentik
|
||||
$STD rustup install
|
||||
$STD rustup default "$(sed -n 's/channel = "\(.*\)"/\1/p' rust-toolchain.toml)"
|
||||
msg_ok "Configured rust"
|
||||
|
||||
msg_info "Updating web"
|
||||
msg_info "Updating web"
|
||||
cd /opt/authentik/web
|
||||
export NODE_ENV="production"
|
||||
$STD npm install
|
||||
@@ -100,18 +99,18 @@ function update_script() {
|
||||
export CC="$(arch_resolve "x86_64" "aarch64")-linux-gnu-gcc"
|
||||
$STD go mod download
|
||||
$STD go build -o /opt/authentik/authentik-server ./cmd/server
|
||||
$STD go build -o /opt/authentik/ldap ./cmd/ldap
|
||||
$STD go build -o /opt/authentik/rac ./cmd/rac
|
||||
$STD go build -o /opt/authentik/radius ./cmd/radius
|
||||
$STD go build -o /opt/authentik/ldap ./cmd/ldap
|
||||
$STD go build -o /opt/authentik/rac ./cmd/rac
|
||||
$STD go build -o /opt/authentik/radius ./cmd/radius
|
||||
msg_ok "Updated go proxy"
|
||||
|
||||
msg_info "Building worker. It may take more than 10 minutes, please be patient."
|
||||
export AWS_LC_FIPS_SYS_CC="clang"
|
||||
cd /opt/authentik
|
||||
$STD cargo build --package authentik --no-default-features --features core --locked --release --jobs 1
|
||||
cp ./target/release/authentik /opt/authentik/authentik-worker
|
||||
rm -r ./target
|
||||
msg_ok "Built worker"
|
||||
msg_info "Building worker"
|
||||
export AWS_LC_FIPS_SYS_CC="clang"
|
||||
cd /opt/authentik
|
||||
$STD cargo build --package authentik --no-default-features --features core --locked --release --jobs 1
|
||||
cp ./target/release/authentik /opt/authentik/authentik-worker
|
||||
rm -r ./target
|
||||
msg_ok "Built worker"
|
||||
|
||||
msg_info "Updating python server"
|
||||
export UV_NO_BINARY_PACKAGE="cryptography lxml python-kadmin-rs xmlsec"
|
||||
@@ -126,26 +125,26 @@ function update_script() {
|
||||
msg_ok "Updated python server"
|
||||
|
||||
if [[ $MAJOR == 2026 && $MINOR -lt 5 ]]; then
|
||||
msg_info "Updating Worker and Server config"
|
||||
cp /etc/authentik/config.yml /etc/authentik/config.bak
|
||||
yq -i ".postgresql.conn_max_age = 0" /etc/authentik/config.yml
|
||||
yq -i ".postgresql.conn_health_checks = false" /etc/authentik/config.yml
|
||||
yq -i '.listen.debug_tokio = "[::]:6669"' /etc/authentik/config.yml
|
||||
yq -i '.log.rust_log.console_subscriber = "info"' /etc/authentik/config.yml
|
||||
yq -i '.log.rust_log.h2 = "info"' /etc/authentik/config.yml
|
||||
yq -i '.log.rust_log.hyper_util = "warn"' /etc/authentik/config.yml
|
||||
yq -i '.log.rust_log.mio = "info"' /etc/authentik/config.yml
|
||||
yq -i '.log.rust_log.notify = "info"' /etc/authentik/config.yml
|
||||
yq -i '.log.rust_log.reqwest = "info"' /etc/authentik/config.yml
|
||||
yq -i '.log.rust_log.runtime = "info"' /etc/authentik/config.yml
|
||||
yq -i '.log.rust_log.rustls = "info"' /etc/authentik/config.yml
|
||||
yq -i '.log.rust_log.sqlx = "info"' /etc/authentik/config.yml
|
||||
yq -i '.log.rust_log.sqlx_postgres = "info"' /etc/authentik/config.yml
|
||||
yq -i '.log.rust_log.tokio = "info"' /etc/authentik/config.yml
|
||||
yq -i '.log.rust_log.tungstenite = "info"' /etc/authentik/config.yml
|
||||
yq -i ".web.workers = 2" /etc/authentik/config.yml
|
||||
mv /etc/default/authentik /etc/default/authentik.bak
|
||||
cat <<EOF >/etc/default/authentik-server
|
||||
msg_info "Updating Worker and Server config"
|
||||
cp /etc/authentik/config.yml /etc/authentik/config.bak
|
||||
yq -i ".postgresql.conn_max_age = 0" /etc/authentik/config.yml
|
||||
yq -i ".postgresql.conn_health_checks = false" /etc/authentik/config.yml
|
||||
yq -i ".listen.debug_tokio = \"[::]:6669\"" /etc/authentik/config.yml
|
||||
yq -i ".log.rust_log.console_subscriber = \"info\"" /etc/authentik/config.yml
|
||||
yq -i ".log.rust_log.h2 = \"info\"" /etc/authentik/config.yml
|
||||
yq -i ".log.rust_log.hyper_util = \"warn\"" /etc/authentik/config.yml
|
||||
yq -i ".log.rust_log.mio = \"info\"" /etc/authentik/config.yml
|
||||
yq -i ".log.rust_log.notify = \"info\"" /etc/authentik/config.yml
|
||||
yq -i ".log.rust_log.reqwest = \"info\"" /etc/authentik/config.yml
|
||||
yq -i ".log.rust_log.runtime = \"info\"" /etc/authentik/config.yml
|
||||
yq -i ".log.rust_log.rustls = \"info\"" /etc/authentik/config.yml
|
||||
yq -i ".log.rust_log.sqlx = \"info\"" /etc/authentik/config.yml
|
||||
yq -i ".log.rust_log.sqlx_postgres = \"info\"" /etc/authentik/config.yml
|
||||
yq -i ".log.rust_log.tokio = \"info\"" /etc/authentik/config.yml
|
||||
yq -i ".log.rust_log.tungstenite = \"info\"" /etc/authentik/config.yml
|
||||
yq -i ".web.workers = 2" /etc/authentik/config.yml
|
||||
mv /etc/default/authentik /etc/default/authentik.bak
|
||||
cat <<EOF >/etc/default/authentik-server
|
||||
TMPDIR=/dev/shm/
|
||||
UV_LINK_MODE=copy
|
||||
UV_PYTHON_DOWNLOADS=0
|
||||
@@ -160,7 +159,7 @@ AUTHENTIK_LISTEN__HTTP="[::]:9000"
|
||||
AUTHENTIK_LISTEN__HTTPS="[::]:9443"
|
||||
AUTHENTIK_LISTEN__METRICS="[::]:9300"
|
||||
EOF
|
||||
cat <<EOF >/etc/default/authentik-worker
|
||||
cat <<EOF >/etc/default/authentik-worker
|
||||
TMPDIR=/dev/shm/
|
||||
UV_LINK_MODE=copy
|
||||
UV_PYTHON_DOWNLOADS=0
|
||||
@@ -175,11 +174,11 @@ AUTHENTIK_LISTEN__HTTP="[::]:8000"
|
||||
AUTHENTIK_LISTEN__HTTPS="[::]:8443"
|
||||
AUTHENTIK_LISTEN__METRICS="[::]:8300"
|
||||
EOF
|
||||
msg_ok "Updated Worker and Server config!"
|
||||
msg_warn "Please check /etc/default/authentik-worker and /etc/default/authentik-server config files for port configurations!"
|
||||
msg_ok "Updated Worker and Server config!"
|
||||
msg_warn "Please check /etc/default/authentik-worker and /etc/default/authentik-server config files for port configurations!"
|
||||
|
||||
msg_info "Updating services"
|
||||
cat <<EOF >/etc/systemd/system/authentik-server.service
|
||||
msg_info "Updating services"
|
||||
cat <<EOF >/etc/systemd/system/authentik-server.service
|
||||
[Unit]
|
||||
Description=authentik Go Server (API Gateway)
|
||||
After=network.target
|
||||
@@ -199,7 +198,7 @@ EnvironmentFile=/etc/default/authentik-server
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
cat <<EOF >/etc/systemd/system/authentik-worker.service
|
||||
cat <<EOF >/etc/systemd/system/authentik-worker.service
|
||||
[Unit]
|
||||
Description=authentik Worker
|
||||
After=network.target postgresql.service
|
||||
@@ -218,21 +217,21 @@ RestartSec=5
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl daemon-reload
|
||||
msg_ok "Updated services"
|
||||
fi
|
||||
systemctl daemon-reload
|
||||
msg_ok "Updated services"
|
||||
fi
|
||||
fi
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start authentik-server authentik-worker
|
||||
if [[ $(systemctl is-enabled authentik-ldap) == enabled ]]; then
|
||||
systemctl start authentik-ldap
|
||||
systemctl start authentik-ldap
|
||||
fi
|
||||
if [[ $(systemctl is-enabled authentik-rac) == enabled ]]; then
|
||||
systemctl start authentik-rac
|
||||
systemctl start authentik-rac
|
||||
fi
|
||||
if [[ $(systemctl is-enabled authentik-radius) == enabled ]]; then
|
||||
systemctl start authentik-radius
|
||||
systemctl start authentik-radius
|
||||
fi
|
||||
msg_ok "Started Services"
|
||||
msg_ok "Updated successfully!"
|
||||
@@ -271,5 +270,5 @@ 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 "${GATEWAY}${BGN}https://${IP}:9443${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:9443${CL}"
|
||||
|
||||
+1
-3
@@ -40,8 +40,7 @@ function update_script() {
|
||||
create_backup /opt/babybuddy/babybuddy/settings/production.py
|
||||
|
||||
msg_info "Cleaning old files"
|
||||
cd /opt/babybuddy || exit
|
||||
find . -mindepth 1 -maxdepth 1 ! -name '.venv' -exec rm -rf -- {} +
|
||||
find . -mindepth 1 -maxdepth 1 ! -name '.venv' -exec rm -rf {} +
|
||||
msg_ok "Cleaned old files"
|
||||
|
||||
fetch_and_deploy_gh_release "babybuddy" "babybuddy/babybuddy" "tarball"
|
||||
@@ -52,7 +51,6 @@ function update_script() {
|
||||
source .venv/bin/activate
|
||||
$STD uv pip install -r requirements.txt
|
||||
export DJANGO_SETTINGS_MODULE=babybuddy.settings.production
|
||||
$STD python manage.py makemigrations
|
||||
$STD python manage.py migrate
|
||||
msg_ok "Updated ${APP}"
|
||||
|
||||
|
||||
+1
-2
@@ -42,8 +42,7 @@ function update_script() {
|
||||
/opt/bambuddy/data \
|
||||
/opt/bambuddy/bambuddy.db \
|
||||
/opt/bambuddy/bambutrack.db \
|
||||
/opt/bambuddy/archive \
|
||||
/opt/bambuddy/virtual_printer
|
||||
/opt/bambuddy/archive
|
||||
msg_ok "Backed up Configuration and Data"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bambuddy" "maziggy/bambuddy" "tarball" "latest" "/opt/bambuddy"
|
||||
|
||||
+2
-2
@@ -71,5 +71,5 @@ 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 "${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||
|
||||
@@ -28,31 +28,6 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if ! grep -qE -- "bazarr\.py.*[[:space:]](-c|--config)([[:space:]]|=)" /etc/systemd/system/bazarr.service 2>/dev/null; then
|
||||
if [[ -d /opt/bazarr/data && ! -L /opt/bazarr/data && -n "$(ls -A /var/lib/bazarr/ 2>/dev/null)" ]]; then
|
||||
msg_error "/opt/bazarr/data and /var/lib/bazarr both contain data - refusing to merge them. Keep the copy you want in /var/lib/bazarr, remove /opt/bazarr/data, then run the update again."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
msg_info "Moving Bazarr data to /var/lib/bazarr"
|
||||
systemctl stop bazarr
|
||||
if [[ -L /opt/bazarr/data ]]; then
|
||||
rm -f /opt/bazarr/data
|
||||
elif [[ -d /opt/bazarr/data ]]; then
|
||||
if ! cp -a /opt/bazarr/data/. /var/lib/bazarr/; then
|
||||
systemctl start bazarr
|
||||
msg_error "Could not copy /opt/bazarr/data to /var/lib/bazarr - nothing was removed."
|
||||
exit 1
|
||||
fi
|
||||
rm -rf /opt/bazarr/data
|
||||
fi
|
||||
sed -i -E "s|^(ExecStart=.*bazarr\.py.*)$|\1 -c /var/lib/bazarr|" /etc/systemd/system/bazarr.service
|
||||
systemctl daemon-reload
|
||||
systemctl start bazarr
|
||||
msg_ok "Moved Bazarr data to /var/lib/bazarr"
|
||||
fi
|
||||
|
||||
if check_for_gh_release "bazarr" "morpheus65535/bazarr"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop bazarr
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/daya0576/beaverhabits
|
||||
|
||||
APP="BeaverHabits"
|
||||
var_tags="${var_tags:-habits;tracking;productivity}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
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/beaverhabits ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "beaverhabits" "daya0576/beaverhabits"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop beaverhabits
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
create_backup /opt/beaverhabits/.user
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "beaverhabits" "daya0576/beaverhabits" "tarball"
|
||||
|
||||
msg_info "Syncing Dependencies"
|
||||
cd /opt/beaverhabits
|
||||
$STD uv sync --no-dev
|
||||
msg_ok "Synced Dependencies"
|
||||
|
||||
restore_backup
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start beaverhabits
|
||||
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 "${GATEWAY}${BGN}http://${IP}:8080/register{CL}"
|
||||
+47
-33
@@ -34,27 +34,30 @@ function update_script() {
|
||||
CURRENT_VERSION=$(cat /root/.bichon)
|
||||
fi
|
||||
|
||||
if [[ $CURRENT_VERSION != 1.* && $CURRENT_VERSION != 2.* ]]; then
|
||||
msg_error "Installed ${APP} version (${CURRENT_VERSION}) is too old for an automatic update to v2.x."
|
||||
msg_error "Please create a new ${APP} container and migrate your data manually."
|
||||
msg_error "Guide: https://github.com/rustmailer/bichon/wiki/Bichon-v2.x-Migration-Guide"
|
||||
exit
|
||||
fi
|
||||
|
||||
MIGRATE_V2=0
|
||||
if [[ $CURRENT_VERSION == 1.* ]]; then
|
||||
MIGRATE_V2=1
|
||||
STORAGE_KB=$(du -sk /opt/bichon-data/bichon-storage 2>/dev/null | awk '{print $1}')
|
||||
FREE_KB=$(df -Pk /opt/bichon-data | awk 'NR==2 {print $4}')
|
||||
if [[ -n "$STORAGE_KB" && -n "$FREE_KB" && "$FREE_KB" -lt "$STORAGE_KB" ]]; then
|
||||
echo -e "\n${RD}Warning: migration needs about $((STORAGE_KB / 1024))MB, only $((FREE_KB / 1024))MB free.${CL}"
|
||||
echo -e "${RD}The new bichon-blob store is written alongside the existing fjall data.${CL}"
|
||||
MIGRATE_V1=0
|
||||
if [[ $CURRENT_VERSION == 0.* ]]; then
|
||||
MIGRATE_V1=1
|
||||
DISK_USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
|
||||
if [ "$DISK_USAGE" -gt 50 ]; then
|
||||
echo -e "\n${RD}Warning: Less than 50% free storage remaining on the root disk.${CL}"
|
||||
echo -e "${RD}Bichon v1 data migration temporarily duplicates data and requires free space for it.${CL}"
|
||||
read -r -p "Are you sure you want to proceed with the update? (y/N): " proceed
|
||||
if [[ ! $proceed =~ ^[Yy]$ ]]; then
|
||||
msg_error "Update cancelled by user."
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
|
||||
RAM_TOTAL=$(free -m | awk '/^Mem:/{print $2}')
|
||||
if [ "$RAM_TOTAL" -lt 2000 ]; then
|
||||
echo -e "\n${RD}Warning: LXC has less than 2GB of RAM allocated (${RAM_TOTAL}MB).${CL}"
|
||||
echo -e "${RD}Bichon v1 data migration consumes significant memory and may crash if insufficient.${CL}"
|
||||
read -r -p "Are you sure you want to proceed with the update? (y/N): " proceed_ram
|
||||
if [[ ! $proceed_ram =~ ^[Yy]$ ]]; then
|
||||
msg_error "Update cancelled by user."
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if check_for_gh_release "bichon" "rustmailer/bichon"; then
|
||||
@@ -64,44 +67,55 @@ function update_script() {
|
||||
|
||||
create_backup /opt/bichon/bichon.env
|
||||
|
||||
if [ "$MIGRATE_V1" -eq 1 ] && [ "$CURRENT_VERSION" != "0.3.7" ]; then
|
||||
msg_info "Updating to intermediate version v0.3.7"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bichon" "rustmailer/bichon" "prebuild" "v0.3.7" "/opt/bichon" "bichon-*-$(arch_resolve "x86_64" "aarch64")-unknown-linux-gnu.tar.gz"
|
||||
restore_backup
|
||||
systemctl start bichon
|
||||
sleep 30
|
||||
systemctl stop bichon
|
||||
msg_ok "Intermediate update completed"
|
||||
fi
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bichon" "rustmailer/bichon" "prebuild" "latest" "/opt/bichon" "bichon-*-$(arch_resolve "x86_64" "aarch64")-unknown-linux-gnu.tar.gz"
|
||||
restore_backup
|
||||
|
||||
if [ "$MIGRATE_V2" -eq 1 ]; then
|
||||
msg_info "Migrating storage from fjall to bichon-blob (patience)"
|
||||
if [ "$MIGRATE_V1" -eq 1 ]; then
|
||||
msg_info "Running Bichon v1 Data Migration (patience)"
|
||||
$STD apt install -y expect
|
||||
# Menu: 0 Reset Password, 1 Migrate v0.3.7, 2 Migrate v1.x, 3 Exit
|
||||
$STD expect <<'EOF'
|
||||
set timeout -1
|
||||
spawn /opt/bichon/bichon-admin
|
||||
expect "*Select an operation*"
|
||||
send "\033\[B\033\[B\r"
|
||||
send "\033\[B\r"
|
||||
expect "*--bichon-root-dir*"
|
||||
send "/opt/bichon-data\r"
|
||||
expect "*--bichon-index-dir*"
|
||||
send "\r"
|
||||
expect "*--bichon-data-dir*"
|
||||
send "\r"
|
||||
expect "*batch size*"
|
||||
expect "*Ready to migrate?*"
|
||||
send "y"
|
||||
expect "*Enter batch size*"
|
||||
send "1000\r"
|
||||
expect eof
|
||||
catch wait
|
||||
EOF
|
||||
$STD apt remove --purge expect -y
|
||||
$STD apt autoremove -y
|
||||
msg_ok "Migration completed"
|
||||
|
||||
if [[ ! -d /opt/bichon-data/bichon-storage/blobs ]] ||
|
||||
[[ "$(cat /opt/bichon-data/STORAGE_VERSION 2>/dev/null)" != "2" ]]; then
|
||||
msg_error "Storage migration did not complete - service left stopped, legacy data untouched."
|
||||
msg_error "Run /opt/bichon/bichon-admin manually and select 'Migrate v1.x Storage to v2.x'."
|
||||
exit
|
||||
fi
|
||||
msg_ok "Migrated storage to bichon-blob"
|
||||
msg_info "Cleaning up legacy Bichon v0.x storage files"
|
||||
rm -rf /opt/bichon-data/envelope
|
||||
rm -rf /opt/bichon-data/eml
|
||||
rm -f /opt/bichon-data/mailbox.db
|
||||
rm -f /opt/bichon-data/meta.db
|
||||
msg_ok "Cleanup completed"
|
||||
|
||||
msg_info "Removing legacy fjall files"
|
||||
rm -rf /opt/bichon-data/bichon-storage/keyspaces
|
||||
rm -f /opt/bichon-data/bichon-storage/0.jnl
|
||||
rm -f /opt/bichon-data/bichon-storage/lock
|
||||
rm -f /opt/bichon-data/bichon-storage/version
|
||||
msg_ok "Removed legacy fjall files"
|
||||
msg_info "Updating Bichon service for v1"
|
||||
sed -i 's|ExecStart=/opt/bichon/bichon|ExecStart=/opt/bichon/bichon-server|g; s|RestartSec=5|RestartSec=5\n\nLimitNOFILE=65536|g' /etc/systemd/system/bichon.service
|
||||
systemctl daemon-reload
|
||||
msg_ok "Service updated"
|
||||
fi
|
||||
|
||||
msg_info "Starting service"
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@ function update_script() {
|
||||
systemctl stop birdnet
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
fetch_and_deploy_gh_release "birdnet" "tphakala/birdnet-go" "prebuild" "latest" "/opt/birdnet" "birdnet-go-linux-$(arch_resolve)*.tar.gz"
|
||||
fetch_and_deploy_gh_release "birdnet" "tphakala/birdnet-go" "prebuild" "latest" "/opt/birdnet" "birdnet-go-linux-$(arch_resolve).tar.gz"
|
||||
|
||||
msg_info "Deploying Binary"
|
||||
cp /opt/birdnet/birdnet-go /usr/local/bin/birdnet-go
|
||||
|
||||
+2
-3
@@ -53,7 +53,6 @@ function update_script() {
|
||||
mkdir -p /opt/bookorbit/server/migrations
|
||||
cp -r /opt/bookorbit/server/src/db/migrations/. /opt/bookorbit/server/migrations/
|
||||
chmod +x /opt/bookorbit/server/bin/kepubify/*
|
||||
restore_backup
|
||||
APP_VER=$(cat ~/.bookorbit)
|
||||
sed -i "s/^APP_VERSION=.*/APP_VERSION=v$APP_VER/" /opt/bookorbit/.env
|
||||
msg_ok "Rebuilt Application"
|
||||
@@ -76,5 +75,5 @@ 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 "${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||
|
||||
+2
-2
@@ -41,5 +41,5 @@ 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 "${GATEWAY}${BGN}http://${IP}:8123${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8123${CL}"
|
||||
|
||||
+2
-6
@@ -36,12 +36,8 @@ function update_script() {
|
||||
systemctl stop cliproxyapi
|
||||
msg_ok "Stopped CLIProxyAPI"
|
||||
|
||||
create_backup /opt/cliproxyapi/config.yaml
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cliproxyapi" "router-for-me/CLIProxyAPI" "prebuild" "latest" "/opt/cliproxyapi" "CLIProxyAPI_*_linux_$(arch_resolve "amd64" "aarch64").tar.gz"
|
||||
|
||||
restore_backup
|
||||
|
||||
msg_info "Starting CLIProxyAPI"
|
||||
systemctl start cliproxyapi
|
||||
msg_ok "Started CLIProxyAPI"
|
||||
@@ -56,5 +52,5 @@ description
|
||||
|
||||
msg_ok "Completed successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW}Authenticate your AI providers via the management panel at:${CL}"
|
||||
echo -e "${GATEWAY}${BGN}http://${IP}:8317/management.html${CL}"
|
||||
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
|
||||
echo -e "${GATEWAY}${BGN}http://${IP}:8317${CL}"
|
||||
|
||||
+3
-27
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-3}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_version="${var_version:-12}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
@@ -24,35 +24,11 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -f /usr/local/bin/ddns ]]; then
|
||||
if [[ ! -f /etc/systemd/system/cloudflare-ddns.service ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "cloudflare-ddns" "favonia/cloudflare-ddns"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop cloudflare-ddns
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
setup_go
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cloudflare-ddns" "favonia/cloudflare-ddns" "tarball"
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
cd /opt/cloudflare-ddns
|
||||
export CGO_ENABLED=0 GOOS=linux
|
||||
$STD go build -trimpath -ldflags="-s -w" -o /usr/local/bin/ddns ./cmd/ddns
|
||||
msg_ok "Updated ${APP}"
|
||||
|
||||
msg_info "Removing Build Dependencies"
|
||||
rm -rf /usr/local/go /usr/local/bin/go /usr/local/bin/gofmt /root/go /root/.cache/go-build /opt/cloudflare-ddns
|
||||
msg_ok "Removed Build Dependencies"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start cloudflare-ddns
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
msg_error "There is no update function for ${APP}."
|
||||
exit
|
||||
}
|
||||
|
||||
|
||||
+1
-17
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_version="${var_version:-12}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
@@ -33,22 +33,6 @@ function update_script() {
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
msg_ok "Updated ${APP} LXC"
|
||||
|
||||
if [[ ! -f /etc/apt/sources.list.d/45drives.sources ]]; then
|
||||
[[ "$(arch_resolve)" == "arm64" ]] || read -r -p "Would you like to install 45Drives' cockpit-file-sharing, cockpit-identities, and cockpit-navigator now? <y/N> " prompt
|
||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
msg_info "Installing 45Drives' cockpit extensions"
|
||||
setup_deb822_repo "45drives" \
|
||||
"https://repo.45drives.com/key/gpg.asc" \
|
||||
"https://repo.45drives.com/enterprise/debian" \
|
||||
"$(get_os_info codename)" \
|
||||
"main" \
|
||||
"amd64"
|
||||
$STD apt install -y cockpit-file-sharing cockpit-identities cockpit-navigator
|
||||
msg_ok "Installed 45Drives' cockpit extensions"
|
||||
fi
|
||||
fi
|
||||
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/cooklang/cookcli
|
||||
|
||||
APP="CookCLI"
|
||||
var_tags="${var_tags:-recipes;cooking;food}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
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/cookcli/cook ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "cook" "cooklang/cookcli"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop cookcli
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
create_backup /opt/cookcli/recipes
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "cook" "cooklang/cookcli" "prebuild" "latest" "/opt/cookcli" "cook-$(arch_resolve "x86_64-unknown-linux-gnu" "aarch64-unknown-linux-musl").tar.gz"
|
||||
chmod +x /opt/cookcli/cook
|
||||
|
||||
restore_backup
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start cookcli
|
||||
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 "${GATEWAY}${BGN}http://${IP}:9080${CL}"
|
||||
+2
-2
@@ -25,7 +25,7 @@ function update_script() {
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
NODE_VERSION="26" setup_nodejs
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
ensure_dependencies build-essential
|
||||
|
||||
if command -v cross-seed &>/dev/null; then
|
||||
@@ -52,5 +52,5 @@ description
|
||||
|
||||
msg_ok "Completed successfully!\n"
|
||||
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 "${GATEWAY}${BGN}http://${IP}:2468${CL}"
|
||||
|
||||
+4
-4
@@ -26,8 +26,8 @@ function update_script() {
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/cyberchef ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "cyberchef" "gchq/CyberChef"; then
|
||||
@@ -58,5 +58,5 @@ 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 "${GATEWAY}${BGN}http://${IP}${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://www.discourse.org/
|
||||
|
||||
APP="Discourse"
|
||||
var_tags="${var_tags:-forum;community;discussion}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-20}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_arm64="${var_arm64:-no}"
|
||||
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/discourse ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [[ ! -f /opt/discourse/.env ]]; then
|
||||
msg_error "No Discourse Configuration Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop discourse
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
create_backup /opt/discourse/.env
|
||||
|
||||
msg_info "Updating Discourse"
|
||||
PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql
|
||||
cd /opt/discourse
|
||||
git pull origin main
|
||||
$STD bundle install --deployment --without test development
|
||||
$STD yarn install
|
||||
$STD runuser -u postgres -- psql -d discourse -c "CREATE EXTENSION IF NOT EXISTS vector;"
|
||||
$STD bundle exec rails assets:precompile
|
||||
$STD bundle exec rails db:migrate
|
||||
msg_ok "Updated Discourse"
|
||||
|
||||
restore_backup
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start discourse
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
|
||||
echo -e "${GATEWAY}${BGN}http://${IP}${CL}"
|
||||
+26
-4
@@ -100,7 +100,7 @@ server {
|
||||
}
|
||||
}
|
||||
EOF
|
||||
nginx_enable_site dispatcharr.conf
|
||||
systemctl reload nginx
|
||||
msg_ok "Migrated Nginx Configuration"
|
||||
fi
|
||||
|
||||
@@ -116,10 +116,21 @@ EOF
|
||||
|
||||
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
|
||||
rm -f /opt/dispatcharr/start-gunicorn.sh
|
||||
fi
|
||||
create_backup /opt/dispatcharr/.env /opt/dispatcharr/start-celery.sh /opt/dispatcharr/start-celerybeat.sh /opt/dispatcharr/start-daphne.sh
|
||||
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
|
||||
@@ -134,9 +145,20 @@ EOF
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dispatcharr" "Dispatcharr/Dispatcharr" "tarball"
|
||||
|
||||
restore_backup
|
||||
|
||||
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-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
|
||||
|
||||
if ! grep -q "DJANGO_SECRET_KEY" /opt/dispatcharr/.env; then
|
||||
DJANGO_SECRET=$(openssl rand -base64 48 | tr -dc 'a-zA-Z0-9' | cut -c1-50)
|
||||
echo "DJANGO_SECRET_KEY=$DJANGO_SECRET" >>/opt/dispatcharr/.env
|
||||
|
||||
+4
-5
@@ -27,8 +27,8 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
if ! command -v node >/dev/null || [[ "$(/usr/bin/env node -v | grep -oP '^v\K[0-9]+')" != "26" ]]; then
|
||||
NODE_VERSION="26" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/docmost/docmost/main/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
|
||||
if ! command -v node >/dev/null || [[ "$(/usr/bin/env node -v | grep -oP '^v\K[0-9]+')" != "22" ]]; then
|
||||
NODE_VERSION="22" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/docmost/docmost/main/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
|
||||
fi
|
||||
export NODE_OPTIONS="--max_old_space_size=4096"
|
||||
|
||||
@@ -39,6 +39,7 @@ function update_script() {
|
||||
|
||||
create_backup /opt/docmost/.env \
|
||||
/opt/docmost/data
|
||||
|
||||
fetch_and_deploy_gh_release "docmost" "docmost/docmost" "tarball"
|
||||
|
||||
restore_backup
|
||||
@@ -53,11 +54,9 @@ function update_script() {
|
||||
sed -i '/^@Module({$/i @Global()' /opt/docmost/apps/server/src/core/core.module.ts
|
||||
fi
|
||||
|
||||
msg_info "Configuring Docmost"
|
||||
cd /opt/docmost
|
||||
$STD pnpm install --force
|
||||
$STD pnpm build
|
||||
msg_ok "Configured Docmost"
|
||||
msg_ok "Updated ${APP}"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start docmost
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://docspell.org/
|
||||
|
||||
APP="Docspell"
|
||||
var_tags="${var_tags:-documents;ocr;paperless;productivity}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-16}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -f /etc/docspell-restserver/docspell-server.conf ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "docspell-joex" "eikek/docspell"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop docspell-joex docspell-restserver
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
create_backup /etc/docspell-joex/docspell-joex.conf \
|
||||
/etc/docspell-restserver/docspell-server.conf
|
||||
|
||||
DPKG_FORCE_CONFOLD=1 fetch_and_deploy_gh_release "docspell-joex" "eikek/docspell" "binary" "latest" "/opt/docspell" "docspell-joex_*_all.deb"
|
||||
DPKG_FORCE_CONFOLD=1 fetch_and_deploy_gh_release "docspell-restserver" "eikek/docspell" "binary" "latest" "/opt/docspell" "docspell-restserver_*_all.deb"
|
||||
|
||||
restore_backup
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start docspell-restserver docspell-joex
|
||||
msg_ok "Started Services"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
|
||||
echo -e "${GATEWAY}${BGN}http://${IP}:7880${CL}"
|
||||
@@ -35,8 +35,6 @@ function update_script() {
|
||||
systemctl stop docuseal docuseal-sidekiq
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
ensure_dependencies libleptonica-dev libleptonica6
|
||||
|
||||
create_backup /opt/docuseal/.env \
|
||||
/opt/docuseal/data
|
||||
|
||||
|
||||
@@ -1,147 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: michelroegl-brunner | Co-Author: vhsdream
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://droppedneedle.com/ | Github: https://github.com/DroppedNeedle/DroppedNeedle
|
||||
|
||||
APP="DroppedNeedle"
|
||||
var_tags="${var_tags:-arr;media}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_arm64="${var_arm64:-yes}"
|
||||
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/droppedneedle && ! -d /opt/musicseerr ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
MIGRATING=false
|
||||
[[ -d /opt/musicseerr ]] && MIGRATING=true
|
||||
|
||||
if [[ "$MIGRATING" == "true" ]] || check_for_gh_release "droppedneedle" "DroppedNeedle/DroppedNeedle"; then
|
||||
if [[ "$MIGRATING" == "true" ]]; then
|
||||
msg_warn "Migrating Musicseerr to DroppedNeedle"
|
||||
msg_info "Stopping Musicseerr Service"
|
||||
systemctl disable -q --now musicseerr
|
||||
msg_ok "Stopped Musicseerr Service"
|
||||
DATA_DIR="/opt/musicseerr/backend"
|
||||
else
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop droppedneedle
|
||||
msg_ok "Stopped Service"
|
||||
DATA_DIR="/opt/droppedneedle/backend"
|
||||
fi
|
||||
|
||||
create_backup "$DATA_DIR/config" "$DATA_DIR/cache"
|
||||
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "droppedneedle" "DroppedNeedle/DroppedNeedle" "tarball"
|
||||
NODE_VERSION="25" NODE_MODULE="pnpm@10.33.0" setup_nodejs
|
||||
|
||||
msg_info "Building Frontend"
|
||||
cd /opt/droppedneedle/frontend
|
||||
export NODE_OPTIONS="--max-old-space-size=3072"
|
||||
rm -rf node_modules build
|
||||
$STD pnpm install --frozen-lockfile
|
||||
$STD pnpm run build
|
||||
msg_ok "Built Frontend"
|
||||
|
||||
msg_info "Updating Application"
|
||||
mkdir -p /opt/droppedneedle/backend/config /opt/droppedneedle/backend/cache
|
||||
$STD uv venv --clear /opt/droppedneedle/venv
|
||||
$STD uv pip install -r /opt/droppedneedle/backend/requirements.txt --python=/opt/droppedneedle/venv/bin/python
|
||||
rm -rf /opt/droppedneedle/backend/static
|
||||
cp -r /opt/droppedneedle/frontend/build /opt/droppedneedle/backend/static
|
||||
msg_ok "Updated Application"
|
||||
|
||||
restore_backup
|
||||
|
||||
if [[ "$MIGRATING" == "true" ]]; then
|
||||
msg_info "Migrating Musicseerr Data"
|
||||
rm -rf /opt/droppedneedle/backend/config /opt/droppedneedle/backend/cache
|
||||
cp -a /opt/musicseerr/backend/config /opt/droppedneedle/backend/config
|
||||
cp -a /opt/musicseerr/backend/cache /opt/droppedneedle/backend/cache
|
||||
msg_ok "Migrated Musicseerr Data"
|
||||
|
||||
msg_info "Replacing systemd Service"
|
||||
cat <<EOF >/etc/systemd/system/droppedneedle.service
|
||||
[Unit]
|
||||
Description=DroppedNeedle Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/droppedneedle/backend
|
||||
Environment=ROOT_APP_DIR=/opt/droppedneedle/backend
|
||||
Environment=PORT=8688
|
||||
# Environment=SLSKD_DOWNLOADS_PATH=<path-to-slskd-downloads>
|
||||
ExecStart=/opt/droppedneedle/venv/bin/uvicorn main:app --host 0.0.0.0 --port 8688 --loop uvloop --http httptools --workers 1
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
rm -f /etc/systemd/system/musicseerr.service
|
||||
msg_ok "Replaced systemd Service"
|
||||
elif ! grep -q 'SLSKD' /etc/systemd/system/droppedneedle.service; then
|
||||
sed -i '\|=8688$|a# Environment=SLSKD_DOWNLOADS_PATH=<path-to-slskd-downloads>' /etc/systemd/system/droppedneedle.service
|
||||
fi
|
||||
|
||||
systemctl daemon-reload
|
||||
if [[ "$MIGRATING" == "true" ]]; then
|
||||
msg_info "Enabling DroppedNeedle Service"
|
||||
systemctl enable -q --now droppedneedle
|
||||
msg_ok "Enabled DroppedNeedle Service"
|
||||
|
||||
sed -i 's/musicseerr/droppedneedle/g' /bin/update
|
||||
rm -rf /opt/musicseerr
|
||||
|
||||
msg_info "Waiting up to 1min for backend to boot and retrieve Admin Username"
|
||||
for i in {1..30}; do
|
||||
username=$(/opt/droppedneedle/venv/bin/python -c 'import sqlite3; conn = sqlite3.connect("/opt/droppedneedle/backend/cache/library.db"); c = conn.cursor(); c.execute("SELECT username FROM auth_users WHERE role=\"admin\""); admin=c.fetchone(); print(admin[0]) if (admin and admin[0]) else None' 2>/dev/null || true)
|
||||
if [[ -n "$username" ]]; then
|
||||
break
|
||||
fi
|
||||
sleep 2
|
||||
done
|
||||
if [[ -n "$username" ]]; then
|
||||
msg_ok "Admin Username retrieved (Admin Username is: ${username})"
|
||||
else
|
||||
msg_warn "Failed to retrieve Admin Username. The backend might still be starting."
|
||||
fi
|
||||
msg_ok "Migrated successfully!"
|
||||
else
|
||||
msg_info "Starting Service"
|
||||
systemctl start droppedneedle
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
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 "${GATEWAY}${BGN}http://${IP}:8688${CL}"
|
||||
+13
-6
@@ -34,24 +34,31 @@ function update_script() {
|
||||
systemctl stop endurain
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
msg_info "Creating Backup"
|
||||
cp /opt/endurain/.env /opt/endurain.env
|
||||
cp /opt/endurain/frontend/app/dist/env.js /opt/endurain.env.js
|
||||
msg_ok "Created Backup"
|
||||
|
||||
create_backup /opt/endurain/.env /opt/endurain/frontend/dist/env.js
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_codeberg_release "endurain" "endurain-project/endurain" "tarball" "latest" "/opt/endurain"
|
||||
|
||||
msg_info "Preparing Update"
|
||||
cd /opt/endurain
|
||||
rm -rf /opt/endurain/{docs,example.env,screenshot_01.png} /opt/endurain/docker* /opt/endurain/*.yml
|
||||
rm -rf \
|
||||
/opt/endurain/{docs,example.env,screenshot_01.png} \
|
||||
/opt/endurain/docker* \
|
||||
/opt/endurain/*.yml
|
||||
cp /opt/endurain.env /opt/endurain/.env
|
||||
rm /opt/endurain.env
|
||||
msg_ok "Prepared Update"
|
||||
|
||||
msg_info "Updating Frontend"
|
||||
cd /opt/endurain/frontend
|
||||
cd /opt/endurain/frontend/app
|
||||
$STD npm ci
|
||||
$STD npm run build
|
||||
cp /opt/endurain.env.js /opt/endurain/frontend/app/dist/env.js
|
||||
rm /opt/endurain.env.js
|
||||
msg_ok "Updated Frontend"
|
||||
|
||||
restore_backup
|
||||
|
||||
msg_info "Updating Backend"
|
||||
cd /opt/endurain/backend
|
||||
UV_VERSION=$(grep -Po 'required-version\s*=\s*"\K[^"]+' pyproject.toml 2>/dev/null || echo "0.11.18")
|
||||
|
||||
+3
-57
@@ -29,63 +29,9 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
FRAPPE_MAJOR="$(grep -oP '__version__\s*=\s*[\x27"]\K[0-9]+' /opt/frappe-bench/apps/frappe/frappe/__init__.py 2>/dev/null || echo 0)"
|
||||
SITE="$(ls /opt/frappe-bench/sites/*/site_config.json 2>/dev/null | head -1 | cut -d/ -f5)"
|
||||
[[ -z "$SITE" ]] && SITE="site1.local"
|
||||
|
||||
msg_info "Stopping ERPNext service"
|
||||
$STD supervisorctl stop all
|
||||
msg_ok "Stopped ERPNext service"
|
||||
|
||||
if [[ "${FRAPPE_MAJOR:-0}" -lt 16 ]] && { [[ "${PHS_SILENT:-0}" == "1" ]] || whiptail --backtitle "Proxmox VE Helper Scripts" --title "ERPNext v16 Major Upgrade" \
|
||||
--yesno "A major upgrade from Frappe/ERPNext v15 to v16 is available.\n\nUpgrade to v16 now?" 16 78; }; then
|
||||
|
||||
msg_info "Backing up site ${SITE}"
|
||||
$STD sudo -u frappe bash -c "export PATH=\"\$HOME/.local/bin:/usr/local/bin:\$PATH\"; cd /opt/frappe-bench && bench --site ${SITE} backup"
|
||||
msg_ok "Backup created"
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y pkg-config
|
||||
$STD sudo -u frappe bash -c 'export PATH="$HOME/.local/bin:/usr/local/bin:$PATH"; cd /opt/frappe-bench && uv python install 3.14'
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Migrating bench environment"
|
||||
$STD sudo -u frappe bash -c 'export PATH="$HOME/.local/bin:/usr/local/bin:$PATH"; cd /opt/frappe-bench && bench migrate-env "$(uv python find 3.14)"'
|
||||
msg_ok "Migrated environment"
|
||||
|
||||
msg_info "Switching Frappe and ERPNext to v16 (Patience)"
|
||||
$STD sudo -u frappe bash -c 'export PATH="$HOME/.local/bin:/usr/local/bin:$PATH"; cd /opt/frappe-bench && bench switch-to-branch version-16 frappe erpnext --upgrade' || true
|
||||
NEW_MAJOR="$(grep -oP '__version__\s*=\s*[\x27"]\K[0-9]+' /opt/frappe-bench/apps/frappe/frappe/__init__.py 2>/dev/null || echo 0)"
|
||||
if [[ "${NEW_MAJOR:-0}" -lt 16 ]]; then
|
||||
msg_error "Failed to switch Frappe/ERPNext to v16"
|
||||
exit 250
|
||||
fi
|
||||
msg_ok "Switched to v16"
|
||||
|
||||
msg_info "Running database migration (Patience)"
|
||||
for i in 1 2 3; do
|
||||
$STD sudo -u frappe bash -c "export PATH=\"\$HOME/.local/bin:/usr/local/bin:\$PATH\"; cd /opt/frappe-bench && bench --site ${SITE} migrate" && break
|
||||
[[ "$i" -eq 3 ]] && {
|
||||
msg_error "Database migration failed after 3 attempts"
|
||||
exit 253
|
||||
}
|
||||
done
|
||||
msg_ok "Database migrated"
|
||||
|
||||
msg_info "Building assets"
|
||||
$STD sudo -u frappe bash -c 'export PATH="$HOME/.local/bin:/usr/local/bin:$PATH"; cd /opt/frappe-bench && bench build --production'
|
||||
msg_ok "Assets built"
|
||||
|
||||
msg_info "Restarting ERPNext"
|
||||
$STD sudo -u frappe bash -c 'export PATH="$HOME/.local/bin:/usr/local/bin:$PATH"; cd /opt/frappe-bench && bench restart'
|
||||
msg_ok "Upgraded ERPNext to v16"
|
||||
else
|
||||
msg_info "Updating ERPNext"
|
||||
$STD sudo -u frappe bash -c 'export PATH="$HOME/.local/bin:$PATH"; cd /opt/frappe-bench && bench update --reset'
|
||||
msg_ok "Updated ERPNext"
|
||||
fi
|
||||
msg_ok "Updated successfully!"
|
||||
msg_info "Updating ERPNext"
|
||||
$STD sudo -u frappe bash -c 'export PATH="$HOME/.local/bin:$PATH"; cd /opt/frappe-bench && bench update --reset'
|
||||
msg_ok "Updated ERPNext"
|
||||
exit
|
||||
}
|
||||
|
||||
|
||||
@@ -28,7 +28,6 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
ensure_dependencies libusb-1.0-0
|
||||
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop esphome-device-builder 2>/dev/null || true
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: John McLear (JohnMcLear)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://etherpad.org
|
||||
|
||||
APP="Etherpad"
|
||||
var_tags="${var_tags:-docs;collaboration;editor}"
|
||||
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_arm64="${var_arm64:-yes}"
|
||||
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/etherpad-lite ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "etherpad-lite" "ether/etherpad"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop etherpad
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
create_backup /opt/etherpad-lite/.env /opt/etherpad-lite/APIKEY.txt /opt/etherpad-lite/settings.json
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "etherpad-lite" "ether/etherpad" "tarball"
|
||||
restore_backup
|
||||
|
||||
msg_info "Rebuilding Etherpad"
|
||||
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||
$STD corepack enable
|
||||
cd /opt/etherpad-lite
|
||||
$STD pnpm install --frozen-lockfile
|
||||
$STD pnpm run build:etherpad
|
||||
msg_ok "Rebuilt Etherpad"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start etherpad
|
||||
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 "${GATEWAY}${BGN}http://${IP}:9001${CL}"
|
||||
@@ -1,79 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/ZimengXiong/ExcaliDash
|
||||
|
||||
APP="ExcaliDash"
|
||||
var_tags="${var_tags:-documents;drawing;collaboration}"
|
||||
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_arm64="${var_arm64:-no}"
|
||||
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/excalidash ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "excalidash" "ZimengXiong/ExcaliDash"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop excalidash
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "excalidash" "ZimengXiong/ExcaliDash" "tarball"
|
||||
ln -sf /opt/excalidash_data/.env /opt/excalidash/backend/.env
|
||||
set -a && source /opt/excalidash_data/.env && set +a
|
||||
|
||||
msg_info "Configuring Database Provider (${DATABASE_PROVIDER:-sqlite})"
|
||||
cd /opt/excalidash/backend
|
||||
sed -i '/datasource db {/,/}/ s/provider = env("[^"]*")/provider = "'"${DATABASE_PROVIDER:-sqlite}"'"/' prisma/schema.prisma
|
||||
mv prisma/migrations/"${DATABASE_PROVIDER:-sqlite}"/* prisma/migrations/
|
||||
rm -rf prisma/migrations/postgresql prisma/migrations/sqlite
|
||||
msg_ok "Configured Database Provider"
|
||||
|
||||
msg_info "Rebuilding Application"
|
||||
$STD npm ci
|
||||
$STD npx prisma generate
|
||||
$STD npx tsc
|
||||
cd /opt/excalidash/frontend
|
||||
$STD npm ci
|
||||
$STD npm run build
|
||||
cp -r /opt/excalidash/frontend/dist/. /var/www/excalidash/
|
||||
msg_ok "Rebuilt Application"
|
||||
|
||||
msg_info "Running Migrations"
|
||||
cd /opt/excalidash/backend
|
||||
$STD npx prisma migrate deploy
|
||||
msg_ok "Ran Migrations"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start excalidash
|
||||
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 "${GATEWAY}${BGN}http://${IP}:6767${CL}"
|
||||
+5
-3
@@ -59,7 +59,9 @@ function update_script() {
|
||||
|
||||
envsubst </opt/feishin/settings.js.template >/etc/nginx/conf.d/settings.js
|
||||
envsubst '${PUBLIC_PATH}' </opt/feishin/ng.conf.template >/etc/nginx/sites-available/feishin
|
||||
nginx_enable_site feishin
|
||||
ln -sf /etc/nginx/sites-available/feishin /etc/nginx/sites-enabled/feishin
|
||||
rm -f /etc/nginx/sites-enabled/default
|
||||
systemctl restart nginx
|
||||
msg_ok "Published Web Assets"
|
||||
|
||||
msg_ok "Updated successfully!"
|
||||
@@ -73,5 +75,5 @@ 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 "${GATEWAY}${BGN}http://${IP}:9180${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9180${CL}"
|
||||
|
||||
+18
-73
@@ -31,83 +31,28 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
local proceed=false
|
||||
update_available=$(curl -fsSL -X 'GET' "http://localhost:19200/api/status/update-available" -H 'accept: application/json' | jq .UpdateAvailable)
|
||||
if [[ "${update_available}" == "true" ]]; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl --all stop 'fileflows*'
|
||||
msg_info "Stopped Service"
|
||||
|
||||
if systemctl list-unit-files 'fileflows.service' --no-legend 2>/dev/null | grep -q '^fileflows\.service'; then
|
||||
tmp=$(mktemp)
|
||||
http_code=$(curl -sSL -X 'GET' "http://localhost:19200/api/status/update-available" -H 'accept: application/json' -o "$tmp" -w '%{http_code}' 2>/dev/null) || http_code="000"
|
||||
if [[ "$http_code" == "200" ]]; then
|
||||
update_available=$(jq -r '.UpdateAvailable // false' "$tmp" 2>/dev/null)
|
||||
rm -f "$tmp"
|
||||
if [[ "${update_available}" == "true" ]]; then
|
||||
proceed=true
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at latest version"
|
||||
exit
|
||||
fi
|
||||
else
|
||||
rm -f "$tmp"
|
||||
if [[ "$http_code" == "401" ]]; then
|
||||
msg_warn "Could not check for updates: API returned 401 (security may be enabled)."
|
||||
else
|
||||
msg_warn "Could not check for updates: API unreachable (HTTP ${http_code})."
|
||||
fi
|
||||
if [[ "${FORCE_UPDATE:-}" == "1" ]]; then
|
||||
proceed=true
|
||||
else
|
||||
read -r -p "${TAB3}Force update without version check? [y/N]: " CONFIRM
|
||||
if [[ "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
||||
proceed=true
|
||||
else
|
||||
msg_error "Update aborted."
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
msg_info "Creating Backup"
|
||||
ls /opt/*.tar.gz &>/dev/null && rm -f /opt/*.tar.gz
|
||||
backup_filename="/opt/${APP}_backup_$(date +%F).tar.gz"
|
||||
tar -czf "$backup_filename" -C /opt/fileflows Data
|
||||
msg_ok "Backup Created"
|
||||
|
||||
fetch_and_deploy_from_url "https://fileflows.com/downloads/zip" "/opt/fileflows"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl --all start 'fileflows*'
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
else
|
||||
proceed=true
|
||||
msg_ok "No update required. ${APP} is already at latest version"
|
||||
fi
|
||||
|
||||
if [[ "$proceed" != "true" ]]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_info "Stopping Service"
|
||||
systemctl --all stop 'fileflows*'
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Creating Backup"
|
||||
ls /opt/*.tar.gz &>/dev/null && rm -f /opt/*.tar.gz
|
||||
backup_filename="/opt/${APP}_backup_$(date +%F).tar.gz"
|
||||
tar -czf "$backup_filename" -C /opt/fileflows Data
|
||||
msg_ok "Backup Created"
|
||||
|
||||
msg_info "Ensuring ASP.NET Core Runtime"
|
||||
if [[ "$(arch_resolve)" == "arm64" ]]; then
|
||||
if [[ ! -x /usr/lib/dotnet10/dotnet ]]; then
|
||||
curl -fsSL https://dot.net/v1/dotnet-install.sh -o /tmp/dotnet-install.sh
|
||||
$STD bash /tmp/dotnet-install.sh --channel 10.0 --runtime aspnetcore --install-dir /usr/lib/dotnet10
|
||||
ln -sf /usr/lib/dotnet10/dotnet /usr/bin/dotnet
|
||||
rm -f /tmp/dotnet-install.sh
|
||||
fi
|
||||
elif ! is_package_installed "aspnetcore-runtime-10.0"; then
|
||||
$STD apt remove -y aspnetcore-runtime-8.0 aspnetcore-runtime-9.0 2>/dev/null || true
|
||||
setup_deb822_repo \
|
||||
"microsoft" \
|
||||
"https://packages.microsoft.com/keys/microsoft-2025.asc" \
|
||||
"https://packages.microsoft.com/debian/13/prod/" \
|
||||
"trixie"
|
||||
$STD apt install -y aspnetcore-runtime-10.0
|
||||
fi
|
||||
msg_ok "Ensured ASP.NET Core Runtime"
|
||||
|
||||
fetch_and_deploy_from_url "https://fileflows.com/downloads/zip" "/opt/fileflows"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl --all start 'fileflows*'
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
|
||||
exit
|
||||
}
|
||||
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: esatbayhan
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://www.firecrawl.dev/
|
||||
|
||||
APP="Firecrawl"
|
||||
var_tags="${var_tags:-scraping;ai;crawler}"
|
||||
var_cpu="${var_cpu:-4}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-30}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_arm64="${var_arm64:-no}"
|
||||
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/firecrawl/apps/api ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "firecrawl" "firecrawl/firecrawl"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop firecrawl firecrawl-playwright
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
create_backup /opt/firecrawl/.env
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "firecrawl" "firecrawl/firecrawl" "tarball" "latest" "/opt/firecrawl"
|
||||
|
||||
restore_backup
|
||||
|
||||
FDB_VERSION="$(awk -F= '/^ARG FDB_VERSION=/{print $2; exit}' /opt/firecrawl/apps/api/Dockerfile)"
|
||||
if [[ -z "$FDB_VERSION" ]]; then
|
||||
msg_error "FDB_VERSION pin not found in upstream Dockerfile"
|
||||
exit 1
|
||||
fi
|
||||
if [[ "$(dpkg-query -W -f='${Version}' foundationdb-clients 2>/dev/null)" != "${FDB_VERSION}-"* ]]; then
|
||||
FDB_ARCH="$(get_system_arch)"
|
||||
[[ "$FDB_ARCH" == "arm64" ]] && FDB_ARCH="aarch64"
|
||||
fetch_and_deploy_gh_release "foundationdb-clients" "apple/foundationdb" "binary" "$FDB_VERSION" "/opt/foundationdb-clients" "foundationdb-clients_${FDB_VERSION}-1_${FDB_ARCH}.deb"
|
||||
fi
|
||||
|
||||
msg_info "Building Go Library"
|
||||
cd /opt/firecrawl/apps/api/sharedLibs/go-html-to-md
|
||||
$STD go build -o libhtml-to-markdown.so -buildmode=c-shared html-to-markdown.go
|
||||
msg_ok "Built Go Library"
|
||||
|
||||
msg_info "Building Firecrawl API"
|
||||
source "$HOME/.cargo/env"
|
||||
cd /opt/firecrawl/apps/api
|
||||
$STD pnpm install --frozen-lockfile
|
||||
$STD pnpm build
|
||||
CI=true $STD pnpm prune --prod --ignore-scripts
|
||||
msg_ok "Built Firecrawl API"
|
||||
|
||||
msg_info "Building Playwright Service"
|
||||
cd /opt/firecrawl/apps/playwright-service-ts
|
||||
$STD npm install
|
||||
$STD npx playwright install chromium --with-deps
|
||||
$STD npm run build
|
||||
$STD npm prune --omit=dev
|
||||
msg_ok "Built Playwright Service"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start firecrawl-playwright firecrawl
|
||||
msg_ok "Started Services"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
|
||||
echo -e "${GATEWAY}${BGN}http://${IP}:3002${CL}"
|
||||
+7
-14
@@ -35,22 +35,12 @@ function update_script() {
|
||||
systemctl stop fireshare
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
create_backup /opt/fireshare/fireshare.env
|
||||
mv /opt/fireshare/fireshare.env /opt
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "fireshare" "ShaneIsrael/fireshare" "tarball"
|
||||
restore_backup
|
||||
mv /opt/fireshare.env /opt/fireshare
|
||||
rm -f /usr/local/bin/fireshare
|
||||
|
||||
if ! grep -q "__FIRESHARE_PORT__" /etc/nginx/nginx.conf; then
|
||||
cp /opt/fireshare/app/nginx/prod.conf /etc/nginx/nginx.conf
|
||||
sed -i 's|root /processed/|root /opt/fireshare-processed/|g' /etc/nginx/nginx.conf
|
||||
sed -i 's/^user[[:space:]]\+nginx;/user root;/' /etc/nginx/nginx.conf
|
||||
sed -i 's|root[[:space:]]\+/app/build;|root /opt/fireshare/app/client/build;|' /etc/nginx/nginx.conf
|
||||
sed -i 's/__FIRESHARE_PORT__/80/g' /etc/nginx/nginx.conf
|
||||
cp /opt/fireshare/app/nginx/error.html /etc/nginx/
|
||||
cp /opt/fireshare/app/nginx/api_unavailable.html /etc/nginx/
|
||||
fi
|
||||
msg_info "Configuring Fireshare"
|
||||
|
||||
msg_info "Updating Fireshare"
|
||||
cd /opt/fireshare
|
||||
$STD uv venv --clear
|
||||
$STD .venv/bin/python -m ensurepip --upgrade
|
||||
@@ -63,10 +53,13 @@ function update_script() {
|
||||
export VIDEO_DIRECTORY=/opt/fireshare-videos
|
||||
export PROCESSED_DIRECTORY=/opt/fireshare-processed
|
||||
$STD uv run flask db upgrade
|
||||
|
||||
msg_info "Building Fireshare Client"
|
||||
cd /opt/fireshare/app/client
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
msg_ok "Configured Fireshare"
|
||||
msg_ok "Built Fireshare Client"
|
||||
msg_ok "Updated Fireshare"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start fireshare
|
||||
|
||||
+12
-2
@@ -35,11 +35,21 @@ function update_script() {
|
||||
systemctl stop nginx
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
create_backup /opt/fladder/assets/config/config.json
|
||||
if [[ -f /opt/fladder/assets/config/config.json ]]; then
|
||||
msg_info "Backing up configuration"
|
||||
cp /opt/fladder/assets/config/config.json /tmp/fladder_config.json.bak
|
||||
msg_ok "Configuration backed up"
|
||||
fi
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Fladder" "DonutWare/Fladder" "prebuild" "latest" "/opt/fladder" "Fladder-Web-*.zip"
|
||||
|
||||
restore_backup
|
||||
if [[ -f /tmp/fladder_config.json.bak ]]; then
|
||||
msg_info "Restoring configuration"
|
||||
mkdir -p /opt/fladder/assets/config
|
||||
cp /tmp/fladder_config.json.bak /opt/fladder/assets/config/config.json
|
||||
rm -f /tmp/fladder_config.json.bak
|
||||
msg_ok "Configuration restored"
|
||||
fi
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start nginx
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user