|
|
|
@@ -5,7 +5,7 @@
|
|
|
|
|
|
|
|
|
|
Aidé par Claude AI
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|

|
|
|
|
|

|
|
|
|
|

|
|
|
|
|
|
|
|
|
@@ -21,14 +21,11 @@ Aidé par Claude AI
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Prérequis
|
|
|
|
|
|
|
|
|
|
- Testé avec Roundcube **1.6.x** **1.7.x**
|
|
|
|
|
- Un autre skin **(ex: elastic)** présent dans `/var/www/html/skins/elastic/` (utilisé comme base)
|
|
|
|
|
## Testé avec Roundcube **1.6.0** jusqu'à **1.7.1**
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Démonstration vidéo
|
|
|
|
|
## Prévisualisation
|
|
|
|
|
|
|
|
|
|
<p align="center">
|
|
|
|
|
<video
|
|
|
|
@@ -56,7 +53,7 @@ $config['skin'] = 'skynet';
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### 2. Récuperer le skin
|
|
|
|
|
### 2. Récuperer le skin elastic comme base
|
|
|
|
|
|
|
|
|
|
#### 2.1 Depuis un container roundcubemail
|
|
|
|
|
|
|
|
|
@@ -66,6 +63,12 @@ docker run --name tmp-roundcube -d roundcube/roundcubemail:latest && \
|
|
|
|
|
mkdir -p skins && \
|
|
|
|
|
docker cp tmp-roundcube:/var/www/html/skins/elastic skins && \
|
|
|
|
|
|
|
|
|
|
# Attendre que le fichier soit disponible (max 60s)
|
|
|
|
|
echo "Waiting for Roundcube to be ready..."
|
|
|
|
|
timeout 60 bash -c 'until docker exec tmp-roundcube test -f /var/www/html/program/include/iniset.php 2>/dev/null; do sleep 1; done' && \
|
|
|
|
|
|
|
|
|
|
RC_VERSION=$(docker exec tmp-roundcube sed -n "s/define('RCMAIL_VERSION', '\([^']*\)');/\1/p" /var/www/html/program/include/iniset.php) && \
|
|
|
|
|
|
|
|
|
|
docker exec tmp-roundcube \
|
|
|
|
|
find /var/www/html/plugins -type d -path "*/skins/elastic" |
|
|
|
|
|
|
|
|
|
@@ -87,26 +90,46 @@ docker rm -f tmp-roundcube
|
|
|
|
|
|
|
|
|
|
ou
|
|
|
|
|
|
|
|
|
|
#### 2.1 Directement depuis les sources de roundcubemail (exemple pour va version avec la version 1.7.0)
|
|
|
|
|
#### 2.1 Directement depuis les sources de roundcubemail (exemple pour la version 1.7.1)
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
|
|
|
|
curl --location https://github.com/roundcube/roundcubemail/releases/download/1.7.0/roundcubemail-1.7.0-complete.tar.gz \
|
|
|
|
|
RC_VERSION=1.7.1
|
|
|
|
|
curl --location https://github.com/roundcube/roundcubemail/releases/download/${RC_VERSION}/roundcubemail-${RC_VERSION}-complete.tar.gz \
|
|
|
|
|
--output roundcubemail.tar.gz && \
|
|
|
|
|
tar -zxvf roundcubemail.tar.gz --wildcards --strip-components=1 -C . \
|
|
|
|
|
roundcubemail-1.7.0/skins/elastic roundcubemail-1.7.0/plugins/*/skins/elastic
|
|
|
|
|
roundcubemail-${RC_VERSION}/skins/elastic roundcubemail-${RC_VERSION}/plugins/*/skins/elastic
|
|
|
|
|
rm roundcubemail.tar.gz
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 3. Puis télécharger la release du thême depuis le dépôt
|
|
|
|
|
### 3. Puis télécharger la dernière release du thême depuis le dépôt
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
|
|
|
|
curl https://[TOKEN]@git.celjim.fr/jimmyGALLAND/roundcube-theme-skynet/releases/download/v1/roundcube-theme-skynet-v1.zip \
|
|
|
|
|
# Compare semver: returns 0 if $1 >= $2
|
|
|
|
|
version_gte() {
|
|
|
|
|
[ "$(printf '%s\n' "$1" "$2" | sort -V | head -n1)" = "$2" ]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Récupère l'URL du dernier asset zip via l'API Gitea
|
|
|
|
|
LATEST_ZIP=$(curl -s "https://git.celjim.fr/api/v1/repos/public/roundcube-theme-skynet/releases/latest" \
|
|
|
|
|
| grep -o '"browser_download_url":"[^"]*\.zip"' \
|
|
|
|
|
| head -n1 \
|
|
|
|
|
| cut -d'"' -f4)
|
|
|
|
|
|
|
|
|
|
curl "${LATEST_ZIP}" \
|
|
|
|
|
--output theme-skynet.zip && \
|
|
|
|
|
7z x theme-skynet.zip && \
|
|
|
|
|
mv -f login.html skins/elastic/templates && \
|
|
|
|
|
|
|
|
|
|
if version_gte "$RC_VERSION" "1.7.1"; then
|
|
|
|
|
sed -e 's|\.\/skins\/skynet\/styles\/styles-skynet\.min\.css|static.php/skins/skynet/styles/styles-skynet.min.css|g' \
|
|
|
|
|
-e 's|\.\/skins\/skynet\/script-skynet\.min\.js|static.php/skins/skynet/script-skynet.min.js|g' \
|
|
|
|
|
login.html > skins/elastic/templates/login.html && \
|
|
|
|
|
rm -f login.html
|
|
|
|
|
else
|
|
|
|
|
mv -f login.html skins/elastic/templates/login.html
|
|
|
|
|
fi && \
|
|
|
|
|
|
|
|
|
|
mv -f script-skynet.min.js skins/elastic/ && \
|
|
|
|
|
mv -f styles-skynet.min.css skins/elastic/styles && \
|
|
|
|
|
mv skins/elastic skins/skynet && \
|
|
|
|
|