Forgejo : identité visuelle Alliance (custom/ officiel, léger)
Branding via le dossier custom/ de Forgejo (mécanisme officiel, résistant aux MAJ) : accent aurore par variables CSS, logo/favicon étoile, page d'accueil brandée (home.tmpl), thème sombre, nom + méta. Codifié dans serveur_forgejo (branding/app_name/theme). Prouvé sur forge-01. + CHANGELOG : entrées wiki pédagogique (14 unités) et GUI (boutons cohérents). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> EOF
This commit is contained in:
parent
716be304c5
commit
e9ca943425
9 changed files with 186 additions and 1 deletions
14
CHANGELOG.md
14
CHANGELOG.md
|
|
@ -3,6 +3,20 @@
|
|||
## 2026-07-03
|
||||
|
||||
### Ajouté
|
||||
- **Identité visuelle Alliance Boréale sur Forgejo (léger, officiel).** Branding via le dossier
|
||||
**`custom/`** de Forgejo (mécanisme *officiel* — pas de fork, résistant aux MAJ) : accent **aurore
|
||||
par variables CSS** (`--color-primary`…, aucune classe interne touchée), **logo/favicon étoile**
|
||||
(réutilisés du thème Keycloak), **page d'accueil brandée** (`home.tmpl` : hero aurore + accroche),
|
||||
**thème sombre** par défaut, **nom + méta**. Codifié dans `serveur_forgejo`
|
||||
(`serveur_forgejo_branding`, `_app_name`, `_theme`), déployé dans `{{ data }}/custom/`. **Prouvé**
|
||||
sur forge-01 : accueil rend (200, « Forge Chezlepro »), `alliance.css` servi (cyan aurore), lint OK.
|
||||
- **Wiki pédagogique Forgejo — 14 unités d'apprentissage.** Set-OPS comme *compagnon pédagogique* :
|
||||
chaque service = une lentille sur un fondamental TIC, méthodes génériques (on apprend OIDC, pas
|
||||
Keycloak). Source versionnée dans `wiki/`, publiée dans le wiki Forgejo (`eregion`). Moule à 4
|
||||
temps (concept → Set-OPS → transférable → à toi de jouer, avec *casse-répare*).
|
||||
- **GUI : boutons cohérents.** « Pousser » (surchargé : clonait *et* déployait) → « 🖥 Créer la VM »
|
||||
pour le clone, « Déployer » partout pour le déploiement, dry-run obligatoire partout. GUI 100 %
|
||||
française.
|
||||
- **Agents d'observabilité/ops éprouvés — observabilité *flotte-complète*.** Les 3 intégrations
|
||||
« agent » (liaisons nœud × optionnelles) déployées sur 4 nœuds (obs-01, data-sql-01, id-ldap-01,
|
||||
forge-01) et **prouvées** : `client_metrique` (node_exporter → **Prometheus scrape les 4 cibles,
|
||||
|
|
|
|||
|
|
@ -13,6 +13,13 @@ serveur_forgejo_service: "forgejo"
|
|||
|
||||
# Publication (derriere serveur_nginx, TLS a l'edge).
|
||||
serveur_forgejo_hostname: "forge.{{ domaine_interne }}"
|
||||
|
||||
# --- Identité visuelle (branding, léger). serveur_forgejo_branding=true déploie le
|
||||
# dossier custom/ (logo, favicon, accent aurore CSS, page d'accueil brandée).
|
||||
serveur_forgejo_app_name: "Forgejo"
|
||||
serveur_forgejo_theme: "forgejo-auto"
|
||||
serveur_forgejo_meta_description: "Forge git souveraine."
|
||||
serveur_forgejo_branding: false
|
||||
# Adresse d'ecoute : 0.0.0.0 car l'edge nginx est sur un AUTRE hote (le distant doit
|
||||
# joindre le backend). A restreindre par pare-feu (nftables) au reseau interne / a l'edge.
|
||||
serveur_forgejo_http_addr: "0.0.0.0"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,29 @@
|
|||
/* =========================================================================
|
||||
Alliance Boréale — accent aurore pour Forgejo.
|
||||
Surcharge UNIQUEMENT les variables de couleur (mécanisme officiel Forgejo) :
|
||||
léger, et résistant aux mises à jour (on ne touche à aucune classe interne).
|
||||
========================================================================= */
|
||||
html.theme-forgejo-dark,
|
||||
html.theme-forgejo-light,
|
||||
html.theme-forgejo-auto,
|
||||
:root {
|
||||
/* Primaire = cyan d'aurore (boutons, liens, onglets actifs) */
|
||||
--color-primary: #56c2ff !important;
|
||||
--color-primary-contrast: #04121a !important;
|
||||
--color-primary-dark-1: #45b6f6 !important;
|
||||
--color-primary-dark-2: #34a9ec !important;
|
||||
--color-primary-dark-3: #2b98d6 !important;
|
||||
--color-primary-light-1: #6fccff !important;
|
||||
--color-primary-light-2: #88d5ff !important;
|
||||
--color-primary-light-3: #a6e0ff !important;
|
||||
--color-primary-hover: #45b6f6 !important;
|
||||
--color-primary-active: #34a9ec !important;
|
||||
--color-primary-alpha-30: rgba(86, 194, 255, 0.30) !important;
|
||||
--color-primary-alpha-40: rgba(86, 194, 255, 0.40) !important;
|
||||
--color-primary-alpha-50: rgba(86, 194, 255, 0.50) !important;
|
||||
/* Accent = teal d'aurore */
|
||||
--color-accent: #4fe3c1 !important;
|
||||
}
|
||||
|
||||
/* Petit halo aurore derrière le logo du bandeau (touche discrète) */
|
||||
.navbar .brand img { filter: drop-shadow(0 0 8px rgba(86, 194, 255, 0.45)); }
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Alliance Boréale">
|
||||
<defs>
|
||||
<radialGradient id="sky" cx="50%" cy="36%" r="75%">
|
||||
<stop offset="0%" stop-color="#10184a"/>
|
||||
<stop offset="100%" stop-color="#05060f"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="aurora" x1="0" y1="1" x2="1" y2="0">
|
||||
<stop offset="0%" stop-color="#2ec18f"/>
|
||||
<stop offset="45%" stop-color="#56c2ff"/>
|
||||
<stop offset="100%" stop-color="#a98bff"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="glow" cx="50%" cy="50%" r="50%">
|
||||
<stop offset="0%" stop-color="#bfe9ff"/>
|
||||
<stop offset="100%" stop-color="#bfe9ff" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="star" cx="50%" cy="45%" r="60%">
|
||||
<stop offset="0%" stop-color="#ffffff"/>
|
||||
<stop offset="100%" stop-color="#d6ecff"/>
|
||||
</radialGradient>
|
||||
</defs>
|
||||
|
||||
<!-- ciel nocturne -->
|
||||
<circle cx="16" cy="16" r="16" fill="url(#sky)"/>
|
||||
|
||||
<!-- ruban d'aurore -->
|
||||
<path d="M3 21 C 9 16, 13 23, 18 18 C 22 14, 26 17, 30 13"
|
||||
fill="none" stroke="url(#aurora)" stroke-width="2.6"
|
||||
stroke-linecap="round" opacity="0.85"/>
|
||||
|
||||
<!-- petites étoiles (constellation) -->
|
||||
<circle cx="7" cy="9" r="0.9" fill="#cfe6ff"/>
|
||||
<circle cx="24" cy="8" r="1.1" fill="#ffffff"/>
|
||||
<circle cx="26" cy="22" r="0.8" fill="#bfe9ff"/>
|
||||
<circle cx="9" cy="25" r="0.7" fill="#cfe6ff"/>
|
||||
|
||||
<!-- halo de l'étoile centrale -->
|
||||
<circle cx="16" cy="15" r="9" fill="url(#glow)" opacity="0.55"/>
|
||||
|
||||
<!-- étoile centrale à quatre branches -->
|
||||
<path d="M16 5
|
||||
C 16.9 12.4, 17.6 13.1, 25 14
|
||||
C 17.6 14.9, 16.9 15.6, 16 23
|
||||
C 15.1 15.6, 14.4 14.9, 7 14
|
||||
C 14.4 13.1, 15.1 12.4, 16 5 Z"
|
||||
fill="url(#star)"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
|
|
@ -0,0 +1,46 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Alliance Boréale">
|
||||
<defs>
|
||||
<radialGradient id="sky" cx="50%" cy="36%" r="75%">
|
||||
<stop offset="0%" stop-color="#10184a"/>
|
||||
<stop offset="100%" stop-color="#05060f"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="aurora" x1="0" y1="1" x2="1" y2="0">
|
||||
<stop offset="0%" stop-color="#2ec18f"/>
|
||||
<stop offset="45%" stop-color="#56c2ff"/>
|
||||
<stop offset="100%" stop-color="#a98bff"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="glow" cx="50%" cy="50%" r="50%">
|
||||
<stop offset="0%" stop-color="#bfe9ff"/>
|
||||
<stop offset="100%" stop-color="#bfe9ff" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="star" cx="50%" cy="45%" r="60%">
|
||||
<stop offset="0%" stop-color="#ffffff"/>
|
||||
<stop offset="100%" stop-color="#d6ecff"/>
|
||||
</radialGradient>
|
||||
</defs>
|
||||
|
||||
<!-- ciel nocturne -->
|
||||
<circle cx="16" cy="16" r="16" fill="url(#sky)"/>
|
||||
|
||||
<!-- ruban d'aurore -->
|
||||
<path d="M3 21 C 9 16, 13 23, 18 18 C 22 14, 26 17, 30 13"
|
||||
fill="none" stroke="url(#aurora)" stroke-width="2.6"
|
||||
stroke-linecap="round" opacity="0.85"/>
|
||||
|
||||
<!-- petites étoiles (constellation) -->
|
||||
<circle cx="7" cy="9" r="0.9" fill="#cfe6ff"/>
|
||||
<circle cx="24" cy="8" r="1.1" fill="#ffffff"/>
|
||||
<circle cx="26" cy="22" r="0.8" fill="#bfe9ff"/>
|
||||
<circle cx="9" cy="25" r="0.7" fill="#cfe6ff"/>
|
||||
|
||||
<!-- halo de l'étoile centrale -->
|
||||
<circle cx="16" cy="15" r="9" fill="url(#glow)" opacity="0.55"/>
|
||||
|
||||
<!-- étoile centrale à quatre branches -->
|
||||
<path d="M16 5
|
||||
C 16.9 12.4, 17.6 13.1, 25 14
|
||||
C 17.6 14.9, 16.9 15.6, 16 23
|
||||
C 15.1 15.6, 14.4 14.9, 7 14
|
||||
C 14.4 13.1, 15.1 12.4, 16 5 Z"
|
||||
fill="url(#star)"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
|
|
@ -0,0 +1 @@
|
|||
<link rel="stylesheet" href="{{AppSubUrl}}/assets/css/alliance.css?v=1">
|
||||
25
roles/serveur_forgejo/files/custom/templates/home.tmpl
Normal file
25
roles/serveur_forgejo/files/custom/templates/home.tmpl
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
{{template "base/head" .}}
|
||||
<div role="main" aria-label="{{ctx.Locale.Tr "home"}}" class="page-content home">
|
||||
<div class="ab-hero">
|
||||
<img class="ab-hero-logo" src="{{AppSubUrl}}/assets/img/logo.svg" alt="{{AppName}}" width="96" height="96">
|
||||
<h1 class="ab-hero-title">{{AppName}}</h1>
|
||||
<p class="ab-hero-sub">La forge souveraine de l'Alliance Boréale — <em>tout est libre</em>.</p>
|
||||
<div class="ab-hero-actions">
|
||||
<a class="ui primary button" href="{{AppSubUrl}}/explore/repos">Explorer les dépôts</a>
|
||||
{{if not .IsSigned}}<a class="ui button" href="{{AppSubUrl}}/user/login">Se connecter</a>{{end}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<style>
|
||||
.home .ab-hero { max-width: 720px; margin: 8vh auto; text-align: center; padding: 2.4rem 2rem;
|
||||
background:
|
||||
radial-gradient(600px 300px at 70% -10%, rgba(19,26,68,.7) 0%, transparent 60%),
|
||||
radial-gradient(500px 260px at 20% 0%, rgba(14,22,64,.6) 0%, transparent 55%),
|
||||
linear-gradient(180deg, rgba(10,13,36,.5) 0%, transparent 70%);
|
||||
border: 1px solid rgba(255,255,255,.08); border-radius: 18px; }
|
||||
.home .ab-hero-logo { filter: drop-shadow(0 0 22px rgba(86,194,255,.5)); }
|
||||
.home .ab-hero-title { font-size: 2.4rem; margin: .7rem 0 .2rem; letter-spacing: .5px; }
|
||||
.home .ab-hero-sub { color: var(--color-text-light); font-size: 1.12rem; margin-bottom: 1.7rem; }
|
||||
.home .ab-hero-actions { display: flex; gap: .8rem; justify-content: center; flex-wrap: wrap; }
|
||||
</style>
|
||||
{{template "base/footer" .}}
|
||||
|
|
@ -76,6 +76,17 @@
|
|||
no_log: true
|
||||
notify: Redemarrer forgejo
|
||||
|
||||
- name: Deployer l'identite visuelle (logo, favicon, accent aurore, accueil)
|
||||
ansible.builtin.copy:
|
||||
src: custom/
|
||||
dest: "{{ serveur_forgejo_data }}/custom/"
|
||||
owner: "{{ serveur_forgejo_utilisateur }}"
|
||||
group: "{{ serveur_forgejo_utilisateur }}"
|
||||
mode: "0644"
|
||||
directory_mode: "0755"
|
||||
when: serveur_forgejo_branding | bool
|
||||
notify: Redemarrer forgejo
|
||||
|
||||
- name: Deployer l'unite systemd forgejo
|
||||
ansible.builtin.template:
|
||||
src: forgejo.service.j2
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
; Gere par Set-OPS (role serveur_forgejo). Ne pas editer a la main.
|
||||
APP_NAME = Forgejo
|
||||
APP_NAME = {{ serveur_forgejo_app_name }}
|
||||
RUN_USER = {{ serveur_forgejo_utilisateur }}
|
||||
RUN_MODE = prod
|
||||
WORK_PATH = {{ serveur_forgejo_data }}
|
||||
|
|
@ -46,3 +46,9 @@ PROTOCOL = smtp
|
|||
SMTP_ADDR = {{ serveur_forgejo_smtp }}
|
||||
SMTP_PORT = 25
|
||||
FROM = forge@{{ domaine_interne }}
|
||||
|
||||
[ui]
|
||||
DEFAULT_THEME = {{ serveur_forgejo_theme }}
|
||||
|
||||
[ui.meta]
|
||||
DESCRIPTION = {{ serveur_forgejo_meta_description }}
|
||||
|
|
|
|||
Loading…
Reference in a new issue