From fdc40da561d505b40233e6299daa446c3e94d2f3 Mon Sep 17 00:00:00 2001
From: Morgan Wattiez <morgan@zoemp.be>
Date: Tue, 29 Apr 2025 23:51:23 +0200
Subject: [PATCH] wip bumping version solved it. well...

---
 CloudronManifest.json |  5 ++---
 Dockerfile.cloudron   | 11 ++++++-----
 VERSION               |  2 +-
 build.sh              | 14 ++++++--------
 dev.sh                | 18 ++++++++++++------
 start.sh              | 16 ++++++++++------
 6 files changed, 37 insertions(+), 29 deletions(-)

diff --git a/CloudronManifest.json b/CloudronManifest.json
index 7b25903..c538412 100644
--- a/CloudronManifest.json
+++ b/CloudronManifest.json
@@ -3,16 +3,15 @@
   "title": "slskd",
   "author": "Morgan",
   "description": "file://DESCRIPTION.md",
-  "changelog": "file://CHANGELOG.md",
   "tagline": "A modern client-server application for the Soulseek file-sharing network.",
   "version": "1.0.3",
-  "manifestVersion": 2,
-  "minBoxVersion": "8.3.1",
   "healthCheckPath": "/health",
   "httpPort": 5030,
   "addons": {
     "localstorage": {}
   },
+  "manifestVersion": 2,
+  "minBoxVersion": "8.3.1",
   "website": "https://zoemp.be/slskd",
   "contactEmail": "morgan@zoemp.be",
   "icon": "file://logo.png",
diff --git a/Dockerfile.cloudron b/Dockerfile.cloudron
index ce3c003..26ff872 100644
--- a/Dockerfile.cloudron
+++ b/Dockerfile.cloudron
@@ -1,4 +1,4 @@
-# syntax=docker/dockerfile:1
+# 1) Télécharger et unzipper slskd
 FROM debian:bookworm-slim AS downloader
 RUN apt-get update \
  && apt-get install -y --no-install-recommends \
@@ -16,22 +16,23 @@ RUN TAG=$(curl -fsSL https://api.github.com/repos/slskd/slskd/releases/latest \
  && curl -fsSL "$URL" -o slskd.zip \
  && unzip slskd.zip
 
+# 2) Image finale
 FROM debian:bookworm-slim
 RUN apt-get update \
  && apt-get install -y --no-install-recommends \
       tini jq ca-certificates gosu libstdc++6 \
  && rm -rf /var/lib/apt/lists/*
 
-# créer les dossiers et l'utilisateur cloudron
+# Créer les répertoires code, data et cache
 RUN mkdir -p /app/code /app/data /run/slskd/cache \
  && useradd -u 1000 -m -d /app/data -s /bin/bash cloudron \
- && chmod -R 777 /app/data /run/slskd/cache
+ && chown -R cloudron:cloudron /app/data /run/slskd/cache
 
-# copier binaire + UI
+# Copier binaire + UI statique
 COPY --from=downloader /tmp/slskd    /app/code/slskd
 COPY --from=downloader /tmp/wwwroot  /app/code/wwwroot
 
-# config exemple & script de démarrage
+# Copier config example et script de démarrage
 COPY slskd.yml.example               /app/code/slskd.yml.example
 COPY start.sh                        /app/code/start.sh
 
diff --git a/VERSION b/VERSION
index 21e8796..ee90284 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.0.3
+1.0.4
diff --git a/build.sh b/build.sh
index 9970180..3bff754 100755
--- a/build.sh
+++ b/build.sh
@@ -3,24 +3,22 @@ set -xeuo pipefail
 
 VERSION=$(<VERSION)
 IMAGE="dr.zoemp.be/slskd:${VERSION}"
-LOCATION="slskd"                             # sous-domaine ⇒ slskd.ton-domaine.be
+LOCATION="slskd"
 FQDN="${LOCATION}.${CLOUDRON_APP_DOMAIN:-zoemp.be}"
 
-# 1) build + push
+# 1) Build & push
 docker build --platform linux/amd64 -t "${IMAGE}" -f Dockerfile.cloudron .
 docker push "${IMAGE}"
 
-# 2) install ou update sur Cloudron
+# 2) Install ou update sur Cloudron
 if cloudron status --app "${FQDN}" &>/dev/null; then
   echo "🔄 Mise à jour de ${FQDN} → ${IMAGE}"
-  cloudron update \
-    --image "${IMAGE}" \
-    --app   "${FQDN}"
+  cloudron update --app "${FQDN}" --image "${IMAGE}"
 else
-  echo "🚀 Installation de l’app sur ${FQDN}"
+  echo "🚀 Installation de org.zoemp.slskd sur ${FQDN}"
   cloudron install \
     --image    "${IMAGE}" \
     --location "${LOCATION}" \
-    "${CLOUDRON_MANIFEST_ID:-slskd.zoemp.be}"
+    org.zoemp.slskd
 fi
 
diff --git a/dev.sh b/dev.sh
index a447b2e..5f73ae7 100755
--- a/dev.sh
+++ b/dev.sh
@@ -2,15 +2,21 @@
 set -xeuo pipefail
 
 VERSION=$(<VERSION)
-IMAGE=dr.zoemp.be/slskd:${VERSION}
+IMAGE="dr.zoemp.be/slskd:${VERSION}"
 
-# build
-docker build --platform linux/amd64 -t ${IMAGE} -f Dockerfile.cloudron .
+# Préparation du dossier data (config + cache)
+mkdir -p data/cache
+chmod 770 data data/cache
 
-# run localement en mappant ./data
+# Build
+docker build --platform linux/amd64 -t "${IMAGE}" -f Dockerfile.cloudron .
+
+# Run en mode dev
 docker run --rm -it \
   --platform linux/amd64 \
-  -v "$(pwd)/data:/app/data" \
+  -v "$(pwd)/data":/app/data \
+  -v "$(pwd)/data/cache":/run/slskd/cache \
   -p 8080:5030 \
-  ${IMAGE}
+  -e DOTNET_BUNDLE_EXTRACT_BASE_DIR=/run/slskd/cache \
+  "${IMAGE}"
 
diff --git a/start.sh b/start.sh
index 63e2ba7..4e46cb0 100755
--- a/start.sh
+++ b/start.sh
@@ -1,16 +1,20 @@
 #!/usr/bin/env bash
 set -xeuo pipefail
 
-# 0) on s'assure que /app/data et /run/slskd/cache sont écrits par cloudron
-chmod -R 777 /app/data /run/slskd/cache
+chown -R cloudron:cloudron /app/data
+chmod -R 755 /app/data
+ls -ld /app/data
+stat /app/data
 
-# 1) répertoire d'extraction pour dotnet
+# 1) Préparer le cache d'extraction .NET
 export DOTNET_BUNDLE_EXTRACT_BASE_DIR=/run/slskd/cache
+mkdir -p "${DOTNET_BUNDLE_EXTRACT_BASE_DIR}"
+chown cloudron:cloudron "${DOTNET_BUNDLE_EXTRACT_BASE_DIR}"
 
-# 2) invariant globalization
+# 2) Mode globalization invariant
 export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=true
 
-# 3) si la conf n'existe pas, on la copie depuis l'exemple
+# 3) Copier la config si nécessaire
 if [ ! -f /app/data/slskd.yml ]; then
   echo "ℹ️ Copie de la config d'exemple dans /app/data/slskd.yml"
   cp /app/code/slskd.yml.example /app/data/slskd.yml
@@ -19,7 +23,7 @@ else
   echo "ℹ️ Utilisation de /app/data/slskd.yml existant"
 fi
 
-# 4) on lance en user cloudron
+# 4) Lancer slskd sous l'utilisateur cloudron
 exec gosu cloudron /app/code/slskd \
   --config      /app/data/slskd.yml \
   --http-port   "${SLSKD_HTTP_PORT:-5030}" \