fix: logo wiki servi depuis docs/assets/ (hors git, généré par build-assets.py)

overrides/partials/logo.html : remplace l'URL static.alpinux.org par
{{ base_url }}/assets/alpinux-logo.png — le logo est inclus dans le
build MkDocs, pas servi depuis le CDN.

scripts/build-assets.py : sépare les deux destinations :
- docs/assets/alpinux-logo.png (200×200, pour le wiki)
- /tmp/alpinux-static-assets/ (512px + favicons → static.alpinux.org/logo/)
Plus d'argument --out ; les chemins sont fixes et documentés.

docs/technique/deploiement-wiki.md :
- schéma mis à jour (SVG → build-assets.py → PNG → mkdocs build)
- ajout de l'étape 3 "Générer le logo" dans la procédure manuelle
- script deploy-wiki.sh inclut python3 scripts/build-assets.py
- tableau résumé mis à jour
- prérequis : ajout pillow et chromium

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Cédrix 2026-05-03 09:15:44 +02:00
parent 096edc378e
commit 14cb68c4c5
3 changed files with 79 additions and 34 deletions

View file

@ -15,13 +15,19 @@ Cette page décrit comment mettre en ligne une nouvelle version du wiki après a
## Vue d'ensemble ## Vue d'ensemble
``` ```
docs/assets/alpinux-logo.svg (source, dans git)
│ build-assets.py (à faire si le SVG a changé)
docs/assets/alpinux-logo.png (généré, hors git) + /tmp/ → static.alpinux.org
Gitea (origin/main) Gitea (origin/main)
│ git pull (sur le serveur) │ git pull (sur le serveur)
Dépôt local serveur Dépôt local serveur
│ mkdocs build │ mkdocs build --strict
/var/www/clients/client1/web2/web/wiki-static/ /var/www/clients/client1/web2/web/wiki-static/
@ -30,15 +36,26 @@ Dépôt local serveur
https://wiki.alpinux.org https://wiki.alpinux.org
``` ```
!!! info "Images et logo"
Les fichiers PNG ne sont **pas stockés dans git**. Le logo (`docs/assets/alpinux-logo.png`)
est généré par `build-assets.py` avant le build MkDocs. Les autres images des articles
sont hébergées sur **static.alpinux.org**.
--- ---
## Prérequis côté serveur ## Prérequis côté serveur
- Python 3 et pip installés - Python 3 et pip installés
- MkDocs et le thème Material installés : - MkDocs, le thème Material et Pillow installés :
```bash ```bash
pip install mkdocs-material pip install mkdocs-material pillow
```
- Chromium installé (pour `build-assets.py`) :
```bash
sudo apt install chromium
``` ```
- Un clone du dépôt présent sur le serveur (à faire une seule fois) : - Un clone du dépôt présent sur le serveur (à faire une seule fois) :
@ -73,7 +90,24 @@ git pull
Vérifiez que la commande affiche bien les fichiers modifiés. Si elle affiche `Already up to date`, le serveur est déjà à jour. Vérifiez que la commande affiche bien les fichiers modifiés. Si elle affiche `Already up to date`, le serveur est déjà à jour.
### 3. Lancer le build MkDocs ### 3. Générer le logo (si le SVG a changé)
Le logo PNG n'est pas dans git — il est généré depuis le SVG source :
```bash
python3 scripts/build-assets.py
```
Cette commande produit :
- `docs/assets/alpinux-logo.png` — logo 200×200 inclus dans le wiki
- `/tmp/alpinux-static-assets/` — logo 512px + favicons à uploader sur `static.alpinux.org/logo/`
!!! tip
Si seul le contenu Markdown a changé (aucune modification du SVG), cette étape peut être ignorée.
Le `docs/assets/alpinux-logo.png` du précédent build est toujours présent sur le serveur.
### 4. Lancer le build MkDocs
```bash ```bash
mkdocs build --strict mkdocs build --strict
@ -91,7 +125,7 @@ INFO - Documentation built in X.XX seconds
Le dossier `site_dir` est maintenant mis à jour. Apache sert immédiatement les nouveaux fichiers — **pas besoin de redémarrer Apache**. Le dossier `site_dir` est maintenant mis à jour. Apache sert immédiatement les nouveaux fichiers — **pas besoin de redémarrer Apache**.
### 4. Vérifier en ligne ### 5. Vérifier en ligne
Ouvrez [https://wiki.alpinux.org](https://wiki.alpinux.org) et vérifiez que la modification apparaît bien. Ouvrez [https://wiki.alpinux.org](https://wiki.alpinux.org) et vérifiez que la modification apparaît bien.
@ -111,6 +145,9 @@ echo "==> Récupération des modifications..."
cd "$WIKI_DIR" cd "$WIKI_DIR"
git pull git pull
echo "==> Génération du logo..."
python3 scripts/build-assets.py
echo "==> Build MkDocs..." echo "==> Build MkDocs..."
mkdocs build --strict mkdocs build --strict
@ -205,6 +242,7 @@ Ouvrez [http://localhost:8000](http://localhost:8000) — MkDocs recharge automa
| Action | Commande | | Action | Commande |
|---|---| |---|---|
| Mettre à jour le dépôt serveur | `git pull` | | Mettre à jour le dépôt serveur | `git pull` |
| Générer le logo PNG (si SVG modifié) | `python3 scripts/build-assets.py` |
| Construire et déployer | `mkdocs build --strict` | | Construire et déployer | `mkdocs build --strict` |
| Tester en local | `mkdocs serve` | | Tester en local | `mkdocs serve` |
| Déployer via script | `/home/alpinux/deploy-wiki.sh` | | Déployer via script (tout en un) | `/home/alpinux/deploy-wiki.sh` |

View file

@ -1,3 +1,3 @@
<img src="https://static.alpinux.org/logo/alpinux-logo.png" <img src="{{ base_url }}/assets/alpinux-logo.png"
alt="Alpinux" alt="Alpinux"
class="md-logo__image"> class="md-logo__image">

View file

@ -4,12 +4,13 @@ Génère les assets binaires (logo PNG + favicons) depuis la source SVG.
Dépendances : Pillow, chromium Dépendances : Pillow, chromium
Usage : Usage :
python3 scripts/build-assets.py [--out /chemin/de/sortie] python3 scripts/build-assets.py
Les fichiers générés sont ensuite uploadés sur static.alpinux.org/logo/ Sorties :
docs/assets/alpinux-logo.png logo 200×200 inclus dans le wiki (MkDocs)
/tmp/alpinux-static-assets/ favicons + logo 512px à uploader sur static.alpinux.org/logo/
""" """
import argparse
import subprocess import subprocess
import tempfile import tempfile
import os import os
@ -19,6 +20,8 @@ from PIL import Image, ImageDraw, ImageFont
REPO = Path(__file__).resolve().parent.parent REPO = Path(__file__).resolve().parent.parent
SVG = REPO / "docs/assets/alpinux-logo.svg" SVG = REPO / "docs/assets/alpinux-logo.svg"
DOCS_OUT = REPO / "docs/assets"
CDN_OUT = Path("/tmp/alpinux-static-assets")
FONT_R = "/usr/share/fonts/truetype/msttcorefonts/arial.ttf" FONT_R = "/usr/share/fonts/truetype/msttcorefonts/arial.ttf"
FONT_B = "/usr/share/fonts/truetype/msttcorefonts/arialbd.ttf" FONT_B = "/usr/share/fonts/truetype/msttcorefonts/arialbd.ttf"
COLOR = (15, 78, 143) # #0f4e8f COLOR = (15, 78, 143) # #0f4e8f
@ -74,21 +77,22 @@ def add_text(canvas: Image.Image) -> Image.Image:
return canvas return canvas
def build_logo(out_dir: Path): def build_logo_wiki(docs_out: Path):
"""Build 200×200 logo PNG.""" """Build 200×200 logo PNG → docs/assets/ (servi par MkDocs, non commité)."""
shapes = render_shapes(SVG, 200, 164) shapes = render_shapes(SVG, 200, 164)
canvas = Image.new("RGBA", (200, 200), (255, 255, 255, 255)) canvas = Image.new("RGBA", (200, 200), (255, 255, 255, 255))
canvas.paste(shapes, (0, 0)) canvas.paste(shapes, (0, 0))
canvas = add_text(canvas) canvas = add_text(canvas)
path = out_dir / "alpinux-logo.png" path = docs_out / "alpinux-logo.png"
canvas.convert("RGB").save(path) canvas.convert("RGB").save(path)
print(f" {path} (200×200)") print(f" {path} (200×200) → wiki MkDocs")
# 512px high-res version
def build_logo_cdn(cdn_out: Path):
"""Build 512×512 logo PNG → CDN (static.alpinux.org/logo/)."""
shapes512 = render_shapes(SVG, 512, 421) shapes512 = render_shapes(SVG, 512, 421)
canvas512 = Image.new("RGBA", (512, 512), (255, 255, 255, 255)) canvas512 = Image.new("RGBA", (512, 512), (255, 255, 255, 255))
canvas512.paste(shapes512, (0, 0)) canvas512.paste(shapes512, (0, 0))
# Scale text proportionally
draw = ImageDraw.Draw(canvas512) draw = ImageDraw.Draw(canvas512)
size = 77 size = 77
f_reg = ImageFont.truetype(FONT_R, size) f_reg = ImageFont.truetype(FONT_R, size)
@ -103,13 +107,13 @@ def build_logo(out_dir: Path):
bb = f.getbbox(char) bb = f.getbbox(char)
draw.text((x - bb[0], y - bb[1]), char, font=f, fill=COLOR) draw.text((x - bb[0], y - bb[1]), char, font=f, fill=COLOR)
x += w x += w
path512 = out_dir / "alpinux-logo-512.png" path512 = cdn_out / "alpinux-logo-512.png"
canvas512.convert("RGB").save(path512) canvas512.convert("RGB").save(path512)
print(f" {path512} (512×512)") print(f" {path512} (512×512) → static.alpinux.org/logo/")
def build_favicons(out_dir: Path): def build_favicons(cdn_out: Path):
"""Build favicon PNG set + .ico from the icon portion of the SVG.""" """Build favicon PNG set + .ico → CDN (static.alpinux.org/logo/)."""
icon_src = render_shapes(SVG, 200, 164).crop((0, 0, 164, 164)) icon_src = render_shapes(SVG, 200, 164).crop((0, 0, 164, 164))
sizes = { sizes = {
@ -124,31 +128,34 @@ def build_favicons(out_dir: Path):
img = icon_src.resize((sz, sz), Image.LANCZOS) img = icon_src.resize((sz, sz), Image.LANCZOS)
bg = Image.new("RGBA", (sz, sz), (255, 255, 255, 255)) bg = Image.new("RGBA", (sz, sz), (255, 255, 255, 255))
bg.paste(img, (0, 0)) bg.paste(img, (0, 0))
p = out_dir / name p = cdn_out / name
bg.save(p) bg.save(p)
imgs[sz] = bg imgs[sz] = bg
print(f" {p} ({sz}×{sz})") print(f" {p} ({sz}×{sz}) → static.alpinux.org/logo/")
ico = out_dir / "favicon.ico" ico = cdn_out / "favicon.ico"
imgs[16].save(ico, format="ICO", sizes=[(16,16),(32,32),(48,48)], imgs[16].save(ico, format="ICO", sizes=[(16,16),(32,32),(48,48)],
append_images=[imgs[32], imgs[48]]) append_images=[imgs[32], imgs[48]])
print(f" {ico} (multi-size: 16+32+48)") print(f" {ico} (multi-size: 16+32+48) → static.alpinux.org/logo/")
def main(): def main():
parser = argparse.ArgumentParser(description=__doc__) DOCS_OUT.mkdir(parents=True, exist_ok=True)
parser.add_argument("--out", default="/tmp/alpinux-static-assets", CDN_OUT.mkdir(parents=True, exist_ok=True)
help="Répertoire de sortie (défaut: /tmp/alpinux-static-assets)")
args = parser.parse_args()
out_dir = Path(args.out)
out_dir.mkdir(parents=True, exist_ok=True)
print("Génération des assets Alpinux...") print("Génération des assets Alpinux...")
build_logo(out_dir) print()
build_favicons(out_dir) print("── Logo wiki (docs/assets/) ──")
print(f"\nFichiers dans : {out_dir}") build_logo_wiki(DOCS_OUT)
print()
print("── CDN static.alpinux.org/logo/ ──")
build_logo_cdn(CDN_OUT)
build_favicons(CDN_OUT)
print()
print(f"Fichiers CDN dans : {CDN_OUT}")
print("À uploader sur : static.alpinux.org/logo/") print("À uploader sur : static.alpinux.org/logo/")
print()
print("Ensuite : mkdocs build")
if __name__ == "__main__": if __name__ == "__main__":