Compare commits

..

12 Commits

Author SHA1 Message Date
646aecc4da Update CHANGELOG.md (#3271)
Some checks failed
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Auto Update .app-files / update-app-files (push) Has been cancelled
2025-03-19 18:49:10 +01:00
1035318f84 FluidCalendar: Switch to safer DB operations (#3270) 2025-03-19 18:47:00 +01:00
8c8412c7f8 Update versions.json (#3262)
Some checks are pending
Auto Update .app-files / update-app-files (push) Waiting to run
Create Changelog Pull Request / update-changelog-pull-request (push) Waiting to run
Frontend CI/CD / build (push) Waiting to run
Frontend CI/CD / deploy (push) Blocked by required conditions
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-19 13:17:12 +01:00
9c2522630f Update CHANGELOG.md (#3261)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-19 12:11:02 +01:00
6fa198147b JSON editor note fix (#3260) 2025-03-19 12:04:58 +01:00
6072e72974 Update CHANGELOG.md (#3259)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-19 10:45:02 +01:00
1dc1165894 License VED to VE (#3258) 2025-03-19 10:21:10 +01:00
e58dcb7a04 Update CHANGELOG.md (#3257) 2025-03-19 09:16:47 +01:00
da5b00359d Snipe-IT: Remove composer update & add no interaction for install (#3256) 2025-03-19 09:15:53 +01:00
a0eeeff67d Update versions.json (#3253) 2025-03-19 07:11:04 +01:00
392e2b5e79 Update CHANGELOG.md (#3255)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-19 07:01:44 +01:00
02493d5048 Fluid-Calendar: Remove unneeded $STD in update (#3250) 2025-03-19 07:00:22 +01:00
10 changed files with 279 additions and 238 deletions

View File

@ -14,6 +14,27 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
## 2025-03-19
### 🚀 Updated Scripts
- License url VED to VE [@bvdberg01](https://github.com/bvdberg01) ([#3258](https://github.com/community-scripts/ProxmoxVE/pull/3258))
- #### 🐞 Bug Fixes
- Snipe-IT: Remove composer update & add no interaction for install [@MickLesk](https://github.com/MickLesk) ([#3256](https://github.com/community-scripts/ProxmoxVE/pull/3256))
- Fluid-Calendar: Remove unneeded $STD in update [@MickLesk](https://github.com/MickLesk) ([#3250](https://github.com/community-scripts/ProxmoxVE/pull/3250))
- #### 💥 Breaking Changes
- FluidCalendar: Switch to safer DB operations [@vhsdream](https://github.com/vhsdream) ([#3270](https://github.com/community-scripts/ProxmoxVE/pull/3270))
### 🌐 Website
- #### 🐞 Bug Fixes
- JSON editor note fix [@bvdberg01](https://github.com/bvdberg01) ([#3260](https://github.com/community-scripts/ProxmoxVE/pull/3260))
## 2025-03-18
### 🆕 New Scripts

View File

@ -36,7 +36,7 @@ function update_script() {
msg_ok "Stopped $APP"
msg_info "Creating Backup"
$STD tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" /opt/fluid-calendar
tar -czf "/opt/${APP}_backup_$(date +%F).tar.gz" /opt/fluid-calendar
msg_ok "Backup Created"
msg_info "Updating $APP to v${RELEASE}"
@ -48,7 +48,7 @@ function update_script() {
export NEXT_TELEMETRY_DISABLED=1
$STD npm install --legacy-peer-deps
$STD npm run prisma:generate
$STD npm run prisma:migrate
$STD npx prisma migrate deploy
$STD npm run build:os
msg_ok "Updated $APP to v${RELEASE}"

View File

@ -2,7 +2,7 @@
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/ZoeyVid/NPMplus
APP="NPMplus"

View File

@ -2,7 +2,7 @@
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/icereed/paperless-gpt
APP="Paperless-GPT"

View File

@ -49,7 +49,7 @@ function update_script() {
cp -r /opt/snipe-it-backup/storage/private_uploads /opt/snipe-it/storage/private_uploads
cd /opt/snipe-it/
export COMPOSER_ALLOW_SUPERUSER=1
$STD composer install --no-dev --prefer-source
$STD composer install --no-dev --optimize-autoloader --no-interaction
$STD composer dump-autoload
$STD php artisan migrate --force
$STD php artisan config:clear

View File

@ -1,13 +1,113 @@
[
{
"name": "crowdsecurity/crowdsec",
"version": "v1.6.6",
"date": "2025-03-18T13:05:01Z"
"name": "Luligu/matterbridge",
"version": "2.2.5",
"date": "2025-03-19T09:11:26Z"
},
{
"name": "forgejo/forgejo",
"version": "v7.0.14",
"date": "2025-03-19T08:53:16Z"
},
{
"name": "zwave-js/zwave-js-ui",
"version": "v10.0.0",
"date": "2025-03-19T08:16:12Z"
},
{
"name": "Checkmk/checkmk",
"version": "v2.3.0p29",
"date": "2025-03-19T07:42:50Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.1665",
"date": "2025-03-19T05:58:42Z"
},
{
"name": "StarFleetCPTN/GoMFT",
"version": "v0.1.16",
"date": "2025-03-19T04:30:53Z"
},
{
"name": "fhem/fhem-mirror",
"version": "6.2",
"date": "2025-03-19T01:59:46Z"
},
{
"name": "pocket-id/pocket-id",
"version": "v0.42.1",
"date": "2025-03-18T22:03:53Z"
},
{
"name": "Donkie/Spoolman",
"version": "v0.22.1",
"date": "2025-03-18T21:01:22Z"
},
{
"name": "esphome/esphome",
"version": "2025.2.2",
"date": "2025-03-03T08:23:30Z"
},
{
"name": "keycloak/keycloak",
"version": "26.1.4",
"date": "2025-03-13T15:41:42Z"
},
{
"name": "dotnetfactory/fluid-calendar",
"version": "v1.2.2",
"date": "2025-03-18T18:47:36Z"
},
{
"name": "zitadel/zitadel",
"version": "v2.66.14",
"date": "2025-03-18T16:05:48Z"
},
{
"name": "prometheus/prometheus",
"version": "v2.53.4",
"date": "2025-03-18T15:50:39Z"
},
{
"name": "syncthing/syncthing",
"version": "v1.29.3",
"date": "2025-03-12T11:56:30Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.502",
"date": "2025-03-18T15:02:59Z"
},
{
"name": "element-hq/synapse",
"version": "v1.126.0",
"date": "2025-03-11T16:29:42Z"
},
{
"name": "OctoPrint/OctoPrint",
"version": "1.10.3",
"date": "2024-11-05T09:20:50Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.83.2",
"date": "2025-03-14T15:43:23Z"
},
{
"name": "zabbix/zabbix",
"version": "7.2.5rc1",
"date": "2025-03-18T14:10:32Z"
},
{
"name": "openobserve/openobserve",
"version": "v0.14.5-rc4",
"date": "2025-03-18T12:51:31Z"
"date": "2025-03-18T13:51:56Z"
},
{
"name": "crowdsecurity/crowdsec",
"version": "v1.6.6",
"date": "2025-03-18T13:05:01Z"
},
{
"name": "Radarr/Radarr",
@ -19,25 +119,10 @@
"version": "3.4.3.post1",
"date": "2025-03-18T09:44:59Z"
},
{
"name": "zitadel/zitadel",
"version": "v2.70.5",
"date": "2025-03-18T08:08:16Z"
},
{
"name": "nzbgetcom/nzbget",
"version": "testing",
"date": "2025-03-18T08:06:43Z"
},
{
"name": "Checkmk/checkmk",
"version": "v2.4.0b1",
"date": "2025-03-18T08:03:25Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.1660",
"date": "2025-03-18T06:10:42Z"
"version": "v24.8",
"date": "2025-03-18T07:33:51Z"
},
{
"name": "authelia/authelia",
@ -46,13 +131,8 @@
},
{
"name": "ollama/ollama",
"version": "v0.6.1",
"date": "2025-03-14T15:57:59Z"
},
{
"name": "StarFleetCPTN/GoMFT",
"version": "v0.1.15",
"date": "2025-03-18T02:30:29Z"
"version": "v0.6.2",
"date": "2025-03-18T03:11:33Z"
},
{
"name": "advplyr/audiobookshelf",
@ -64,11 +144,6 @@
"version": "v25.03.3",
"date": "2025-03-17T20:55:37Z"
},
{
"name": "keycloak/keycloak",
"version": "26.1.4",
"date": "2025-03-13T15:41:42Z"
},
{
"name": "semaphoreui/semaphore",
"version": "v2.13.0",
@ -99,11 +174,6 @@
"version": "v5.34.3",
"date": "2025-03-17T14:20:04Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.84.0",
"date": "2025-03-17T13:58:36Z"
},
{
"name": "Graylog2/graylog2-server",
"version": "6.2.0-beta.1",
@ -144,21 +214,11 @@
"version": "v1.0.4",
"date": "2025-03-16T22:19:31Z"
},
{
"name": "Donkie/Spoolman",
"version": "v0.22.0",
"date": "2025-03-16T21:14:52Z"
},
{
"name": "autobrr/autobrr",
"version": "v1.60.0",
"date": "2025-03-16T18:39:49Z"
},
{
"name": "pocket-id/pocket-id",
"version": "v0.40.1",
"date": "2025-03-16T17:02:54Z"
},
{
"name": "evcc-io/evcc",
"version": "0.201.0",
@ -194,11 +254,6 @@
"version": "8.0-m04",
"date": "2025-03-16T08:12:40Z"
},
{
"name": "esphome/esphome",
"version": "2025.3.0b3",
"date": "2025-03-16T06:53:58Z"
},
{
"name": "Kozea/Radicale",
"version": "v3.5.0",
@ -314,11 +369,6 @@
"version": "1.26.1",
"date": "2025-03-13T21:34:25Z"
},
{
"name": "dotnetfactory/fluid-calendar",
"version": "v1.2.1",
"date": "2025-03-13T19:11:35Z"
},
{
"name": "kimai/kimai",
"version": "2.31.0",
@ -336,8 +386,8 @@
},
{
"name": "moghtech/komodo",
"version": "v1.17.0-dev-7",
"date": "2025-03-13T05:03:04Z"
"version": "v1.16.12",
"date": "2024-12-02T08:46:29Z"
},
{
"name": "NodeBB/NodeBB",
@ -349,35 +399,20 @@
"version": "v4.0.1",
"date": "2025-03-12T22:41:17Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.501",
"date": "2025-03-12T21:47:58Z"
},
{
"name": "minio/minio",
"version": "RELEASE.2025-03-12T18-04-18Z",
"date": "2025-03-12T18:45:21Z"
},
{
"name": "zwave-js/zwave-js-ui",
"version": "v9.33.0",
"date": "2025-03-12T16:29:52Z"
},
{
"name": "cockpit-project/cockpit",
"version": "335",
"date": "2025-03-12T13:03:27Z"
},
{
"name": "syncthing/syncthing",
"version": "v1.29.3",
"date": "2025-03-12T11:56:30Z"
},
{
"name": "transmission/transmission",
"version": "4.1.0-beta.2",
"date": "2025-03-12T11:01:28Z"
"version": "4.0.1-beta.1",
"date": "2024-12-13T00:16:24Z"
},
{
"name": "emqx/emqx",
@ -389,21 +424,11 @@
"version": "1.21.2",
"date": "2025-03-12T04:19:30Z"
},
{
"name": "element-hq/synapse",
"version": "v1.126.0",
"date": "2025-03-11T16:29:42Z"
},
{
"name": "benjaminjonard/koillection",
"version": "1.6.12",
"date": "2025-03-11T15:04:43Z"
},
{
"name": "OctoPrint/OctoPrint",
"version": "1.11.0rc4",
"date": "2025-03-11T13:37:12Z"
},
{
"name": "excalidraw/excalidraw",
"version": "v0.18.0",
@ -439,11 +464,6 @@
"version": "v0.107.57",
"date": "2025-02-20T14:58:55Z"
},
{
"name": "Luligu/matterbridge",
"version": "2.2.4",
"date": "2025-03-10T10:40:00Z"
},
{
"name": "icereed/paperless-gpt",
"version": "v0.13.0",
@ -461,8 +481,8 @@
},
{
"name": "caddyserver/caddy",
"version": "v2.10.0-beta.2",
"date": "2025-03-09T13:51:09Z"
"version": "v2.9.1",
"date": "2025-01-08T15:22:53Z"
},
{
"name": "awawa-dev/HyperHDR",
@ -471,13 +491,13 @@
},
{
"name": "Lidarr/Lidarr",
"version": "v2.10.1.4589",
"date": "2025-03-09T09:51:41Z"
"version": "v2.9.6.4552",
"date": "2025-02-03T12:11:00Z"
},
{
"name": "Readarr/Readarr",
"version": "v0.4.12.2753",
"date": "2025-03-09T09:50:51Z"
"version": "v2.0.0.4645",
"date": "2017-03-07T18:56:06Z"
},
{
"name": "Brandawg93/PeaNUT",
@ -654,11 +674,6 @@
"version": "v1.16.1",
"date": "2025-02-26T11:29:15Z"
},
{
"name": "prometheus/prometheus",
"version": "v3.2.1",
"date": "2025-02-26T09:55:45Z"
},
{
"name": "silverbulletmd/silverbullet",
"version": "0.10.4",
@ -684,11 +699,6 @@
"version": "v3.3.4",
"date": "2025-02-25T10:18:58Z"
},
{
"name": "zabbix/zabbix",
"version": "7.2.4",
"date": "2025-02-25T09:35:54Z"
},
{
"name": "schlagmichdoch/PairDrop",
"version": "v1.11.2",
@ -811,8 +821,8 @@
},
{
"name": "MariaDB/server",
"version": "mariadb-11.8.1",
"date": "2025-02-13T04:14:39Z"
"version": "mariadb-11.7.2",
"date": "2025-02-13T04:13:46Z"
},
{
"name": "glpi-project/glpi",
@ -844,11 +854,6 @@
"version": "v0.15.0",
"date": "2025-02-08T18:45:30Z"
},
{
"name": "forgejo/forgejo",
"version": "v10.0.1",
"date": "2025-02-08T13:17:20Z"
},
{
"name": "bluenviron/mediamtx",
"version": "v1.11.3",
@ -1141,8 +1146,8 @@
},
{
"name": "motioneye-project/motioneye",
"version": "0.43.1b2",
"date": "2024-05-29T20:32:35Z"
"version": "0.42.1",
"date": "2020-06-07T07:27:04Z"
},
{
"name": "gnmyt/myspeed",
@ -1193,10 +1198,5 @@
"name": "sct/overseerr",
"version": "preview-test-node-18",
"date": "2023-11-06T10:21:37Z"
},
{
"name": "deepch/RTSPtoWeb",
"version": "v2.4.3",
"date": "2023-03-29T12:05:02Z"
}
]

View File

@ -1,11 +1,11 @@
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
import { AlertColors } from "@/config/siteConfig";
import { cn } from "@/lib/utils";
@ -15,116 +15,136 @@ import { ScriptSchema, type Script } from "../_schemas/schemas";
import { memo, useCallback, useRef } from "react";
type NoteProps = {
script: Script;
setScript: (script: Script) => void;
setIsValid: (isValid: boolean) => void;
setZodErrors: (zodErrors: z.ZodError | null) => void;
script: Script;
setScript: (script: Script) => void;
setIsValid: (isValid: boolean) => void;
setZodErrors: (zodErrors: z.ZodError | null) => void;
};
function Note({
script,
setScript,
setIsValid,
setZodErrors,
script,
setScript,
setIsValid,
setZodErrors,
}: NoteProps) {
const inputRefs = useRef<(HTMLInputElement | null)[]>([]);
const inputRefs = useRef<(HTMLInputElement | null)[]>([]);
const addNote = useCallback(() => {
setScript({
...script,
notes: [...script.notes, { text: "", type: "" }],
});
}, [script, setScript]);
const addNote = useCallback(() => {
setScript({
...script,
notes: [...script.notes, { text: "", type: "" }],
});
}, [script, setScript]);
const updateNote = useCallback((
index: number,
key: keyof Script["notes"][number],
value: string,
) => {
const updated: Script = {
...script,
notes: script.notes.map((note, i) =>
i === index ? { ...note, [key]: value } : note,
),
};
const result = ScriptSchema.safeParse(updated);
setIsValid(result.success);
setZodErrors(result.success ? null : result.error);
setScript(updated);
// Restore focus after state update
if (key === "text") {
setTimeout(() => {
inputRefs.current[index]?.focus();
}, 0);
}
}, [script, setScript, setIsValid, setZodErrors]);
const updateNote = useCallback((
index: number,
key: keyof Script["notes"][number],
value: string,
) => {
const updated: Script = {
...script,
notes: script.notes.map((note, i) =>
i === index ? { ...note, [key]: value } : note,
),
};
const result = ScriptSchema.safeParse(updated);
setIsValid(result.success);
setZodErrors(result.success ? null : result.error);
setScript(updated);
// Restore focus after state update
if (key === "text") {
setTimeout(() => {
inputRefs.current[index]?.focus();
}, 0);
}
}, [script, setScript, setIsValid, setZodErrors]);
const removeNote = useCallback((index: number) => {
setScript({
...script,
notes: script.notes.filter((_, i) => i !== index),
});
}, [script, setScript]);
const removeNote = useCallback((index: number) => {
setScript({
...script,
notes: script.notes.filter((_, i) => i !== index),
});
}, [script, setScript]);
const NoteItem = memo(
({ note, index }: { note: Script["notes"][number]; index: number }) => (
<div className="space-y-2 border p-4 rounded">
<Input
placeholder="Note Text"
value={note.text}
onChange={(e) => updateNote(index, "text", e.target.value)}
ref={(el) => {
inputRefs.current[index] = el;
}}
/>
<Select
value={note.type}
onValueChange={(value) => updateNote(index, "type", value)}
>
<SelectTrigger className="flex-1">
<SelectValue placeholder="Type" />
</SelectTrigger>
<SelectContent>
{Object.keys(AlertColors).map((type) => (
<SelectItem key={type} value={type}>
<span className="flex items-center gap-2">
{type.charAt(0).toUpperCase() + type.slice(1)}{" "}
<div
className={cn(
"size-4 rounded-full border",
AlertColors[type as keyof typeof AlertColors],
)}
/>
</span>
</SelectItem>
return (
<>
<h3 className="text-xl font-semibold">Notes</h3>
{script.notes.map((note, index) => (
<NoteItem key={index} note={note} index={index} updateNote={updateNote} removeNote={removeNote} />
))}
</SelectContent>
</Select>
<Button
size="sm"
variant="destructive"
type="button"
onClick={() => removeNote(index)}
>
<Trash2 className="mr-2 h-4 w-4" /> Remove Note
</Button>
</div>
),
);
NoteItem.displayName = 'NoteItem';
return (
<>
<h3 className="text-xl font-semibold">Notes</h3>
{script.notes.map((note, index) => (
<NoteItem key={index} note={note} index={index} />
))}
<Button type="button" size="sm" onClick={addNote}>
<PlusCircle className="mr-2 h-4 w-4" /> Add Note
</Button>
</>
);
<Button type="button" size="sm" onClick={addNote}>
<PlusCircle className="mr-2 h-4 w-4" /> Add Note
</Button>
</>
);
}
export default memo(Note);
const NoteItem = memo(
({
note,
index,
updateNote,
removeNote,
}: {
note: Script["notes"][number];
index: number;
updateNote: (index: number, key: keyof Script["notes"][number], value: string) => void;
removeNote: (index: number) => void;
}) => {
const inputRef = useRef<HTMLInputElement | null>(null);
const handleTextChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {
updateNote(index, "text", e.target.value);
setTimeout(() => {
inputRef.current?.focus();
}, 0);
}, [index, updateNote]);
return (
<div className="space-y-2 border p-4 rounded">
<Input
placeholder="Note Text"
value={note.text}
onChange={handleTextChange}
ref={inputRef}
/>
<Select
value={note.type}
onValueChange={(value) => updateNote(index, "type", value)}
>
<SelectTrigger className="flex-1">
<SelectValue placeholder="Type" />
</SelectTrigger>
<SelectContent>
{Object.keys(AlertColors).map((type) => (
<SelectItem key={type} value={type}>
<span className="flex items-center gap-2">
{type.charAt(0).toUpperCase() + type.slice(1)}{" "}
<div
className={cn(
"size-4 rounded-full border",
AlertColors[type as keyof typeof AlertColors],
)}
/>
</span>
</SelectItem>
))}
</SelectContent>
</Select>
<Button
size="sm"
variant="destructive"
type="button"
onClick={() => removeNote(index)}
>
<Trash2 className="mr-2 h-4 w-4" /> Remove Note
</Button>
</div>
);
}
);
NoteItem.displayName = 'NoteItem';
export default memo(Note);

View File

@ -74,7 +74,7 @@ export NEXT_TELEMETRY_DISABLED=1
cd /opt/fluid-calendar
$STD npm install --legacy-peer-deps
$STD npm run prisma:generate
$STD npm run prisma:migrate
$STD npx prisma migrate deploy
$STD npm run build:os
msg_ok "Setup ${APPLICATION}"

View File

@ -2,7 +2,7 @@
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVED/raw/main/LICENSE
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/icereed/paperless-gpt
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"

View File

@ -58,8 +58,8 @@ sed -i -e "s|^APP_URL=.*|APP_URL=http://$IPADDRESS|" \
chown -R www-data: /opt/snipe-it
chmod -R 755 /opt/snipe-it
export COMPOSER_ALLOW_SUPERUSER=1
$STD composer update --no-plugins --no-scripts
$STD composer install --no-dev
#$STD composer update --no-plugins --no-scripts
$STD composer install --no-dev --optimize-autoloader --no-interaction
$STD php artisan key:generate --force
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
msg_ok "Installed SnipeIT"