devzone 0.5.5 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -21,9 +21,10 @@ ARG PYTEST_VERSION=9.1.1
21
21
 
22
22
  SHELL ["/bin/bash", "-o", "pipefail", "-c"]
23
23
 
24
- # Contrôles shell de repowarden
24
+ # Contrôles shell de repowarden ; jq : lu par son garde-fou des agents IA
25
+ # (repowarden garde, module ia), qui sans lui ne vérifie rien
25
26
  RUN apt-get update \
26
- && apt-get install -y --no-install-recommends shellcheck bats \
27
+ && apt-get install -y --no-install-recommends shellcheck bats jq \
27
28
  && rm -rf /var/lib/apt/lists/*
28
29
 
29
30
  # k9s, actionlint (mêmes versions que la CI de repowarden), gitleaks, kind :
@@ -64,6 +64,15 @@ ecrire() {
64
64
  appliquer_ia() {
65
65
  if [ "$1" = on ]; then
66
66
  npm install -g --no-fund --no-audit --loglevel=error "${IA_PAQUETS[@]}" >/dev/null
67
+ # Garde-fou repowarden (hook PreToolUse de Claude Code, plugin opencode) :
68
+ # agent arrêté avant de modifier main/develop, de commiter sans
69
+ # repowarden cc ou de contourner les hooks. Global, dans les volumes
70
+ # ~/.claude et ~/.config/opencode : gardé aux rebuilds ; relancé, rien ne change
71
+ if command -v repowarden >/dev/null 2>&1 && repowarden agents init --global >/dev/null 2>&1; then
72
+ echo "devzone : garde-fou repowarden actif pour Claude Code et opencode"
73
+ else
74
+ echo "devzone : garde-fou repowarden non branché (repowarden 4.10 ou plus requis) : repowarden agents init --global" >&2
75
+ fi
67
76
  echo "devzone : ia actif : claude (puis /login), opencode auth login"
68
77
  else
69
78
  npm uninstall -g "${IA_NOMS[@]}" >/dev/null 2>&1 || true
@@ -46,7 +46,7 @@ git config --global url.https://github.com/.insteadOf git@github.com:
46
46
 
47
47
  # repowarden, version figée (il installe des hooks git globaux) ; mettre à jour
48
48
  # en changeant la version ici, puis Rebuild Container
49
- npm install -g repowarden@4.9.2
49
+ npm install -g repowarden@4.10.0
50
50
  repowarden install --global --lang fr
51
51
 
52
52
  # Modules facultatifs (assistants IA, Kubernetes) : commande devzone, état
package/.gitattributes CHANGED
@@ -6,5 +6,5 @@
6
6
  Dockerfile text eol=lf
7
7
  Makefile text eol=lf
8
8
  # Scripts bash sans extension (lancés directement)
9
- bin/devzone text eol=lf
9
+ core/devzone text eol=lf
10
10
  .devcontainer/devzone text eol=lf
package/Makefile CHANGED
@@ -19,9 +19,9 @@ help: ## Liste les commandes
19
19
  @grep -E '^[a-z-]+:.*## ' $(MAKEFILE_LIST) | awk -F':.*## ' '{printf " make %-16s %s\n", $$1, $$2}'
20
20
 
21
21
  # up et rebuild : étapes affichées, journal complet dans .devzone.log, question
22
- # posée dans le conteneur signalée au lieu d'attendre (lancer.sh)
22
+ # posée dans le conteneur signalée au lieu d'attendre (core/scripts/lancer.sh)
23
23
  up: hors-conteneur ## Lance le conteneur (le crée si absent)
24
- @bash lancer.sh up "$(CURDIR)"
24
+ @bash core/scripts/lancer.sh up "$(CURDIR)"
25
25
 
26
26
  shell: hors-conteneur up ## Ouvre un shell dans le conteneur
27
27
  @$(DC) exec $(WS) bash
@@ -35,16 +35,16 @@ down: hors-conteneur ## Supprime le conteneur (volumes, image et Docker interne
35
35
  docker rm -f $$ids >/dev/null && echo "devzone supprimé (désinstallation complète : make desinstaller)"; fi
36
36
 
37
37
  rebuild: hors-conteneur ## Reconstruit de zéro (après modif de .devcontainer/)
38
- @bash lancer.sh rebuild "$(CURDIR)"
38
+ @bash core/scripts/lancer.sh rebuild "$(CURDIR)"
39
39
 
40
40
  status: hors-conteneur ## État du conteneur
41
41
  @docker ps -a $(FILTRE) --format '{{.Status}}' | grep . || echo "aucun conteneur"
42
42
 
43
43
  test-fonctionnel: hors-conteneur ## Tests fonctionnels : devzone isolé, construit puis supprimé (5 à 10 min)
44
- @bash test/fonctionnel.sh
44
+ @bash core/test/fonctionnel.sh
45
45
 
46
46
  test-cli: hors-conteneur ## Tests de la CLI dans un vrai terminal : devzone isolé, puis supprimé (10 à 15 min)
47
- @bash test/cli-terminal.sh
47
+ @bash core/test/cli-terminal.sh
48
48
 
49
49
  desinstaller: hors-conteneur ## Supprime tout ce que devzone a créé, après confirmation (GARDER=connexions : garde les connexions)
50
- @GARDER="$(GARDER)" bash desinstaller.sh
50
+ @GARDER="$(GARDER)" bash core/scripts/desinstaller.sh
package/README.md CHANGED
@@ -1,34 +1,45 @@
1
1
  # devzone
2
2
 
3
- [![npm](https://img.shields.io/npm/v/devzone)](https://www.npmjs.com/package/devzone) [![Licence GPL-3.0-only](https://img.shields.io/badge/licence-GPL--3.0--only-blue)](LICENSE)
3
+ [![npm](https://img.shields.io/npm/v/devzone)](https://www.npmjs.com/package/devzone) [![Licence GPL-3.0-only](https://img.shields.io/badge/licence-GPL--3.0--only-blue)](https://github.com/SimBienvenueHoulBoumi/devzone/blob/main/LICENSE)
4
4
 
5
- Environnement de développement complet dans un conteneur (devcontainer) : les mêmes outils, aux mêmes versions, sur Mac, Linux et Windows. Rien à installer sur ta machine à part Docker.
5
+ devzone est un environnement de développement prêt en une commande : Java, Node, Python, Docker et Kubernetes dans un conteneur, identique sur Mac, Linux et Windows. Il s'adresse à toute personne qui souhaite développer sans installer d'outils sur sa machine, avec les mêmes versions pour toute l'équipe.
6
6
 
7
- | Domaine | Outils |
8
- |---|---|
9
- | Langages | Java 21 + Maven, Node LTS + pnpm, Python 3.12 + uv |
10
- | Conteneurs, Kubernetes | Docker (Docker-in-Docker), kubectl, helm, k9s, kind ; connexion au cluster de l'hôte : [module](#modules) `kubernetes` |
11
- | GitHub, qualité | gh, repowarden (hooks git globaux), shellcheck, bats, actionlint, gitleaks, ruff, vulture, pytest |
12
- | Assistants IA | Claude Code, opencode : [module](#modules) `ia`, désactivé par défaut |
7
+ ## Pourquoi devzone ?
13
8
 
14
- **Ce qui est facultatif est désactivé par défaut** et s'active à la demande, sans rebuild (voir [Modules](#modules)) : les assistants IA (`devzone activer ia`) et la connexion au cluster Kubernetes de ta machine (`devzone activer kubernetes`). devzone ne crée jamais de cluster : sans celui de ta machine, tu en crées un si besoin avec `kind create cluster` (voir [Kubernetes](#kubernetes)).
9
+ - **Rien à installer à part Docker** : tout le reste tourne dans un conteneur.
10
+ - **Mêmes outils et mêmes versions** pour toute l'équipe, sur Mac, Linux et Windows.
11
+ - **Prêt en quelques minutes** sur une machine neuve.
12
+ - **Jetable** : ta machine reste propre.
15
13
 
16
14
  ## Démarrage rapide
17
15
 
18
- 1. **Prérequis** : Docker (Docker Desktop, ou Docker Engine sous Linux), puis **soit** VS Code + extension *Dev Containers*, **soit** Node (pour `npx`) et `make`. Facultatif, pour Kubernetes : activer le cluster de Docker Desktop (*Settings → Kubernetes → Enable Kubernetes*). Sous Windows : cloner avec Git for Windows (les scripts restent en fins de ligne LF grâce à `.gitattributes`, et la commande npm trouve le `bash` qu'elle exige).
19
- 2. **Obtenir devzone**, au choix :
20
- - `npx devzone mon-devzone` : crée le dossier `mon-devzone/` et lance le conteneur (paquet npm `devzone`, une fois publié) ;
21
- - ou `git clone https://github.com/SimBienvenueHoulBoumi/devzone.git`.
22
-
23
- **Lancer** depuis ce dossier : `make shell` (ou, dans VS Code, *Dev Containers: Reopen in Container*). Le premier build prend quelques minutes (4 à 5 min mesurées, plus le téléchargement des images de base sur une machine neuve).
24
- 3. **Identité git**, une seule fois (nécessaire pour commiter, gardée ensuite, même après `make rebuild`) :
25
- - avec GitHub : `gh auth login -s workflow` ; l'identité est déduite du compte ;
26
- - sans GitHub : `git config --file ~/.config/git/config user.name "<nom>"`, puis de même `user.email "<email>"`.
16
+ ### Prérequis
17
+
18
+ - Docker Desktop (ou Docker Engine sous Linux). Pour Kubernetes (facultatif) : activer le cluster de Docker Desktop (*Settings → Kubernetes → Enable Kubernetes*).
19
+ - Node (pour `npx`).
20
+ - `make` (nécessaire pour `make shell` ; sous Windows sans `make`, voir le tableau « Au quotidien »).
27
21
 
28
- **Facultatif** : GitHub (push et PR GitHub, tickets et bots repowarden), `devzone activer ia` (assistants IA), `devzone activer kubernetes` (cluster de ta machine) ; voir [Connexions et identité](#connexions-et-identité) et [Modules](#modules).
29
- 4. **Vérifier** : `java -version`, `node -v`, `python3 --version`, `repowarden --version` ; avec un cluster : `kubectl get nodes`.
22
+ Sous Windows : il est recommandé de cloner avec Git for Windows (les scripts restent en fins de ligne LF grâce à `.gitattributes`, et la commande npm trouve le `bash` qu'elle exige).
30
23
 
31
- **À chaque démarrage, un récapitulatif** dit ce qui est prêt et ce qui reste à faire, chaque point avec sa commande ; `devzone` le réaffiche à tout moment :
24
+ ### Lancer en une commande
25
+
26
+ ```bash
27
+ npx devzone mon-devzone
28
+ cd mon-devzone
29
+ make shell
30
+ ```
31
+
32
+ Ou bien récupérer le code directement :
33
+
34
+ ```bash
35
+ git clone https://github.com/SimBienvenueHoulBoumi/devzone.git
36
+ cd devzone
37
+ make shell
38
+ ```
39
+
40
+ Tu peux aussi utiliser VS Code : ouvre le dossier `mon-devzone` (ou `devzone`), puis *Dev Containers: Reopen in Container*.
41
+
42
+ À chaque démarrage, un récapitulatif t'indique ce qui est prêt ou ce qu'il te reste à faire (extrait) :
32
43
 
33
44
  ```text
34
45
  devzone : état (devzone pour le réafficher)
@@ -39,26 +50,45 @@ devzone : état (devzone pour le réafficher)
39
50
  ○ module kubernetes facultatif, connexion au cluster de l'hôte et metrics-server au démarrage : devzone activer kubernetes
40
51
  ```
41
52
 
42
- ✔ prêt, ✖ nécessaire, ○ facultatif, ⚠ à corriger (par exemple GitHub connecté sans la permission `workflow`). Dans VS Code, il s'affiche dans le terminal de création du conteneur.
53
+ Le premier lancement prend 4 à 5 min mesurées, plus le téléchargement des images de base sur une machine neuve.
54
+
55
+ ### Vérifier que tout fonctionne
56
+
57
+ ```bash
58
+ java -version
59
+ node -v
60
+ python3 --version
61
+ repowarden --version
62
+ ```
63
+
64
+ Avec un cluster Kubernetes actif : `kubectl get nodes`.
43
65
 
44
- ## Modules
66
+ **Étape facultative** : `gh auth login -s workflow` pour activer GitHub (push, PR et tickets repowarden).
45
67
 
46
- Les fonctionnalités facultatives sont des modules, **désactivés par défaut**, activés à la demande depuis le conteneur, sans rebuild :
68
+ ## Ton premier projet
47
69
 
70
+ Tes projets vont dans `workspace/` (conservé sur ta machine, même après `make down` ou `make rebuild`).
71
+
72
+ Exemple :
48
73
  ```bash
49
- devzone # état : identité git, GitHub, modules
50
- devzone activer <module> # active et applique tout de suite
51
- devzone desactiver <module> # désactive et applique tout de suite
74
+ cd workspace
75
+ git clone https://github.com/ton-compte/ton-projet.git
76
+ # ou
77
+ mkdir mon-projet && cd mon-projet && git init -b main
52
78
  ```
53
79
 
54
- | Module | Activé | Désactivé |
55
- |---|---|---|
56
- | `ia` | Claude Code et opencode installés (versions figées), réinstallés à chaque rebuild ; se connecter : `claude` (puis `/login`), `opencode auth login` | désinstallés ; les connexions restent dans leurs volumes |
57
- | `kubernetes` | à chaque démarrage : connexion au cluster de ta machine et metrics-server sur les clusters locaux (CPU et RAM dans k9s) | aucune connexion au cluster de ta machine ; kubectl, helm, k9s et kind restent installés, un cluster kind créé à la main reste utilisable ; metrics-server n'est pas retiré des clusters où il a été installé |
80
+ Pour en savoir plus : [Mettre en route un projet](https://github.com/SimBienvenueHoulBoumi/devzone/blob/main/docs/reference.md#mettre-en-route-un-projet).
58
81
 
59
- Le choix est **propre à chaque utilisateur** et gardé dans le volume `devzone-config` (il survit aux rebuilds). Au premier démarrage, si une connexion Claude Code ou opencode existe déjà dans les volumes, le module `ia` est activé (et signalé) : rien ne disparaît pour qui s'en servait.
82
+ ## Ce que contient devzone
60
83
 
61
- ## Commandes
84
+ | Domaine | Outils |
85
+ |---|---|
86
+ | Langages | Java 21 + Maven, Node LTS + pnpm, Python 3.12 + uv |
87
+ | Conteneurs, Kubernetes | Docker (Docker-in-Docker), kubectl, helm, k9s, kind ; connexion au cluster de l'hôte (module `kubernetes`) |
88
+ | GitHub, qualité | gh, repowarden (hooks git globaux), shellcheck, bats, actionlint, gitleaks, ruff, vulture, pytest |
89
+ | Assistants IA | Claude Code, opencode (module `ia`, désactivé par défaut) |
90
+
91
+ ## Au quotidien
62
92
 
63
93
  | Action | VS Code (`Cmd+Shift+P`) | `make` | Sans `make` (Windows) |
64
94
  |---|---|---|---|
@@ -68,218 +98,38 @@ Le choix est **propre à chaque utilisateur** et gardé dans le volume `devzone-
68
98
  | Supprimer le conteneur | — | `make down` | — |
69
99
  | Reconstruire (après une modification de `.devcontainer/`) | *Dev Containers: Rebuild Container* | `make rebuild` | `npx @devcontainers/cli up --workspace-folder . --remove-existing-container` |
70
100
  | État | — | `make status` | — |
71
- | **Désinstaller** (tout ce que devzone a créé, après confirmation) | — | `make desinstaller` | `bash desinstaller.sh` |
72
-
73
- `make` seul affiche la liste. `up` et `rebuild` affichent leurs étapes (construction de l'image, installation, démarrage, puis l'état de devzone) et un signe de vie au moins toutes les 30 s ; le journal complet va dans `.devzone.log` (sa fin s'affiche en cas d'échec). Aucune étape automatique ne pose de question : si l'une le faisait, `make` l'afficherait et s'arrêterait au lieu d'attendre en silence (voir [Dépannage](#dépannage)).
74
-
75
- > Ne pas lancer `make up` pendant que VS Code ouvre ou reconstruit le conteneur : deux lancements simultanés créent des conteneurs en double.
76
-
77
- ## Connexions et identité
78
-
79
- **GitHub (facultatif)** : sert à pousser et ouvrir des PR sur GitHub, aux tickets et bots repowarden, et donne l'identité git automatiquement. Sans GitHub, git fonctionne normalement (dépôts locaux, autre hébergeur) ; seule l'identité se règle à la main. Pour l'utiliser : `gh auth login -s workflow`. Git passe alors par le jeton de `gh` (https, même pour les remotes en `git@github.com:`), sans clé ssh à recopier. Les dépôts de `/workspaces/devzone` sont déclarés sûrs (`safe.directory`).
80
- - **Permission `workflow`** : sans elle, GitHub refuse tout push qui modifie `.github/workflows/` (fréquent avec repowarden). Compte déjà connecté : `gh auth refresh -h github.com -s workflow`.
81
- - **Depuis `make shell`**, aucun navigateur ne s'ouvre depuis le conteneur : copier le code affiché par `gh` et ouvrir https://github.com/login/device à la main. L'avertissement « No clipboard utilities available » est sans conséquence.
82
-
83
- **Identité git** (nécessaire pour commiter) : sans GitHub, à régler à la main (`git config --file ~/.config/git/config user.name "<nom>"` et `user.email "<email>"`) ; avec GitHub, déduite du compte `gh` à chaque démarrage, tant qu'elle manque (`git-identite.sh`) :
84
- - nom du profil GitHub (sinon le login) ;
85
- - email noreply `<id>+<login>@users.noreply.github.com` : les commits sont rattachés au compte, l'email personnel n'est pas exposé.
86
-
87
- Une identité déjà définie n'est jamais remplacée. Pour un autre email : `git config --file ~/.config/git/config user.email "<email>"`. Après un `gh auth login` en cours de session : `bash .devcontainer/git-identite.sh`.
88
-
89
- **Assistants IA** (module `ia`, voir [Modules](#modules)) : `devzone activer ia`, puis `claude` (puis `/login`), `opencode auth login`.
90
-
91
- Chaque connexion est **propre à l'utilisateur** : elle vit dans les volumes Docker de sa machine (voir [Données conservées](#données-conservées)). Le dépôt ne contient aucun identifiant.
92
-
93
- ## Mettre en route un projet
94
-
95
- Tes projets vont dans `workspace/` (`/workspaces/devzone/workspace` dans le conteneur), chacun avec son propre dépôt git. Les hooks repowarden y sont actifs d'office.
96
-
97
- **Projet existant, déjà équipé de repowarden** (`.repowarden.conf` et workflows présents) : il suffit de le cloner.
98
-
99
- ```bash
100
- cd /workspaces/devzone/workspace
101
- git clone https://github.com/<compte>/<projet>.git
102
- cd <projet>
103
- repowarden # état du poste et du dépôt, étape suivante
104
- ```
105
-
106
- **Nouveau projet, ou projet sans repowarden** :
107
-
108
- ```bash
109
- cd /workspaces/devzone/workspace
110
- mkdir <projet> && cd <projet> && git init -b main # ou git clone d'un dépôt existant
111
- # … premiers fichiers, puis un premier commit : git add . && git cc
112
- gh repo create <compte>/<projet> --private --source . --push # dépôt GitHub (si absent)
113
- repowarden bots # CI, releases, tickets, GitHub App, protection : chacun avec ton accord
114
- repowarden # vérifier
115
- ```
116
-
117
- `repowarden bots` demande le flux (`main` seule, ou `develop` → `main`), montre ce qu'il va créer, puis attend ta confirmation ; un fichier existant n'est jamais écrasé. Il faut `gh` connecté et les droits d'administration du dépôt GitHub.
118
-
119
- ## Travailler sur un projet
101
+ | **Désinstaller** (tout ce que devzone a créé, après confirmation) | — | `make desinstaller` | `bash core/scripts/desinstaller.sh` |
120
102
 
121
- - **Hooks repowarden** : installés globalement (`repowarden install --global --lang fr`), ils s'appliquent à tout dépôt cloné dans le conteneur (messages de commit, secrets, formatage, tests). Ensuite, suivre les règles du projet (`AGENTS.md`, `CONTRIBUTING.md`) : `repowarden ticket <n>`, `repowarden cc …`.
122
- - **GitHub App** (proposée par `repowarden bots`, ou `repowarden app init`) : sans elle, les workflows agissent sous le bot `github-actions`, dont les actions ne déclenchent aucun autre workflow (PR brouillon sans CI, merge automatique sans préversion…) ; voir [Dépannage](#dépannage).
123
- - **Vérifications de la CI de repowarden** en local : `shellcheck`, `actionlint`, `bats test/`. actionlint est à la même version que la CI ; shellcheck et bats sont ceux d'Ubuntu 24.04 et peuvent différer légèrement.
103
+ ## Options
124
104
 
125
- ## Kubernetes
105
+ **Module `ia`** : active Claude Code et opencode (versions figées), avec le garde-fou repowarden qui les arrête avant de modifier `main` ou `develop` ou de commiter sans `repowarden cc` (voir [docs/reference.md](docs/reference.md#garde-fou-des-assistants-ia)). Pour l'activer : `devzone activer ia`. Ils sont désinstallés quand le module est désactivé, mais tes connexions restent dans leurs volumes.
126
106
 
127
- devzone fournit les outils, pas le cluster, et n'en crée jamais tout seul. Avec le module `kubernetes` actif (`devzone activer kubernetes`), il se connecte à chaque démarrage au cluster de l'hôte s'il existe et répond (Docker Desktop sur Mac, Windows ou Linux). Sinon, ou en plus, créer un cluster dans le conteneur :
107
+ **Module `kubernetes`** : active à chaque démarrage la connexion au cluster de l'hôte et l'installation de metrics-server sur les clusters locaux (pour voir le CPU et la RAM dans k9s). Pour l'activer : `devzone activer kubernetes`. Sans ce module, kubectl, helm, k9s et kind restent installés.
128
108
 
129
- ```bash
130
- kind create cluster # ~2 min la première fois
131
- kubectl config get-contexts # clusters de l'hôte + clusters kind
132
- kubectl config use-context <nom>
133
- ```
109
+ Ces modules sont désactivés par défaut, activables à la demande depuis le conteneur (sans rebuild), et leur choix est conservé d'un démarrage à l'autre.
134
110
 
135
- - **Cluster actif** : celui de l'hôte par défaut ; un choix fait avec `use-context` est gardé aux redémarrages.
136
- - **Clusters kind** : tournent dans le Docker interne, redémarrent avec le conteneur, sont conservés par `make rebuild` et `make down` ; supprimés par `kind delete cluster` (ou `make desinstaller`).
137
- - **CPU et RAM dans k9s** (`kubectl top`) : module `kubernetes` actif, metrics-server est installé au démarrage sur les clusters **locaux** qui ne l'ont pas (Docker Desktop, kind…), jamais sur un cluster distant. Après un `kind create cluster` : `bash .devcontainer/metrics-server.sh` (ou `… metrics-server.sh <contexte>` pour un cluster précis).
138
- - **Cluster de l'hôte** : `~/.kube` est monté en lecture seule, jamais modifié ; sa copie adaptée est `~/.kube/hote.config` (`127.0.0.1` remplacé par `host.docker.internal`). Après un changement de cluster sur l'hôte : `make stop && make up`.
139
- - **Messages de démarrage** (`kube-config : …`, `metrics-server : …`, récapitulatif) : dans le terminal de création, ou en relançant `bash .devcontainer/demarrage.sh`.
111
+ ## Questions fréquentes
140
112
 
141
- Le cluster de l'hôte n'est pas joignable dans deux cas (kind fonctionne quand même) :
142
- - **Codespaces, machine distante** : pas de `~/.kube` local ;
143
- - **Linux avec Docker Engine** : un cluster kind ou minikube de l'hôte écoute sur `127.0.0.1`, invisible du conteneur. Un cluster qui écoute sur toutes les interfaces (k3s, kubeadm) est joignable.
144
-
145
- ## Données conservées
146
-
147
- Le conteneur est jetable ; ce qui compte vit dans des volumes Docker, sur ta machine.
148
-
149
- | Volume | Contenu | `make stop` | `make down` | `make rebuild` |
150
- |---|---|---|---|---|
151
- | `devzone-gh` | connexion GitHub (`gh`) | gardé | gardé | gardé |
152
- | `devzone-git` | identité git (`~/.config/git/config`) | gardé | gardé | gardé |
153
- | `devzone-claude` | connexion et réglages de Claude Code | gardé | gardé | gardé |
154
- | `devzone-opencode-config`, `devzone-opencode-data` | connexion et réglages d'opencode | gardé | gardé | gardé |
155
- | `devzone-config` | modules activés (`devzone activer`) | gardé | gardé | gardé |
156
- | `devzone-m2`, `devzone-pnpm` | caches Maven (`~/.m2`) et pnpm | gardé | gardé | gardé |
157
- | volume du Docker interne | images Docker et clusters kind du conteneur | gardé | gardé | gardé |
158
- | `workspace/` (dossier de l'hôte) | tes projets | gardé | gardé | gardé |
159
-
160
- Tout le reste du conteneur (paquets installés à la main, fichiers hors de ces emplacements) est perdu à `make down` et `make rebuild`. Le Docker interne est isolé : ses images ne sont pas partagées avec Docker Desktop.
113
+ - **Le premier lancement est long** : c'est normal (construction de l'image, téléchargement des images de base). Il prend 4 à 5 min mesurées, plus le téléchargement des images de base sur une machine neuve.
114
+ - **`make` est absent sous Windows** : tu peux utiliser `npx @devcontainers/cli` (voir le tableau « Au quotidien ») ou Git Bash. Les scripts sont compatibles (fins de ligne LF).
115
+ - **Pas de cluster Kubernetes visible** : devzone ne crée jamais de cluster. Avec le module `kubernetes` actif, il tente de se connecter à celui de l'hôte. Sinon, crée un cluster local avec `kind create cluster`.
116
+ - **Problème d'identité git pour commiter** : règle-la une seule fois. Avec GitHub : `gh auth login -s workflow` (l'identité est déduite automatiquement). Sans GitHub : `git config --file ~/.config/git/config user.name "<nom>"` et `git config --file ~/.config/git/config user.email "<email>"`.
117
+ - **`make up` semble bloqué** : il affiche ses étapes et un signe de vie au moins toutes les 30 s ; le journal complet est dans `.devzone.log`.
161
118
 
162
119
  ## Désinstaller
163
120
 
164
- `make down` ne supprime que le conteneur. Pour retirer **tout ce que devzone a créé** sur ta machine :
165
-
166
121
  ```bash
167
- make desinstaller # liste ce qui sera supprimé, puis demande « oui »
168
- make desinstaller GARDER=connexions # pareil, mais garde gh, git, Claude Code, opencode et les modules
122
+ make desinstaller
169
123
  ```
170
124
 
171
- Installé par npm : `devzone desinstaller` dans le dossier (même chose), **puis** `npm uninstall -g devzone`. npm ne retire que la commande `devzone` : sans la désinstallation, image, volumes et Docker interne resteraient.
172
-
173
- | Supprimé | Jamais touché |
174
- |---|---|
175
- | conteneur et image `vsc-devzone-…` | `workspace/` (tes projets) |
176
- | volumes `devzone-*` | l'image de base `mcr.microsoft.com/devcontainers/base` (partagée) |
177
- | volume du Docker interne (images et clusters kind) | un metrics-server que devzone n'a pas installé |
178
- | metrics-server **installé par devzone** sur les clusters locaux de ta machine (il porte l'étiquette `devzone=installe` ; vérifié avec le `kubectl` de ta machine) | |
179
-
180
- Fonctionne aussi après un `make down` : celui-ci note l'image et le Docker interne dans `.devzone.etat`. À la fin, la commande affiche ce qui reste à retirer toi-même si tu le souhaites : le cache `npx` (`~/.npm/_npx`), l'autorisation « GitHub CLI » de ton compte (*GitHub → Settings → Applications*) et le dossier `devzone/`. Sans terminal : `CONFIRMER=oui make desinstaller`.
181
-
182
- ## Mettre à jour un outil
125
+ Cette commande supprime le conteneur, l'image `vsc-devzone-…`, les volumes `devzone-*`, le volume du Docker interne (images et clusters kind créés dans le conteneur) ainsi que les éventuels metrics-server installés par devzone sur les clusters locaux. Elle **ne touche jamais** à `workspace/` (tes projets). Pour garder tes connexions (GitHub, git, Claude Code, opencode et modules) : `make desinstaller GARDER=connexions`.
183
126
 
184
- | Outil | Où | Puis |
185
- |---|---|---|
186
- | k9s, actionlint, gitleaks, kind | `.devcontainer/Dockerfile` : `ARG …_VERSION` **et** les empreintes `sha256` (arm64 + amd64) | `make rebuild` |
187
- | uv, ruff, vulture, pytest | `.devcontainer/Dockerfile` : `ARG …_VERSION` | `make rebuild` |
188
- | repowarden | `.devcontainer/post-create.sh` : `repowarden@x.y.z` | `make rebuild` |
189
- | Claude Code, opencode | `.devcontainer/devzone` : `IA_PAQUETS` (`@anthropic-ai/claude-code@x.y.z`, `opencode-ai@x.y.z`) | `devzone activer ia` (ou `make rebuild`) |
190
- | metrics-server | `.devcontainer/metrics-server.sh` : `VERSION` | `bash .devcontainer/metrics-server.sh` sur un nouveau cluster |
191
- | Java, Node, Python, Docker, kubectl, helm, gh | `.devcontainer/devcontainer.json` (features), versions figées dans `devcontainer-lock.json` | `npx @devcontainers/cli upgrade --workspace-folder .` puis `make rebuild` |
127
+ ## Pour aller plus loin
192
128
 
193
- Empreinte d'une archive : `curl -fsSL <url> | shasum -a 256`.
194
-
195
- ## Tests
196
-
197
- | Tests | Commande | Où | Durée |
198
- |---|---|---|---|
199
- | Commande `devzone` du conteneur et commande npm (unitaires) | `bats test/` | dans le conteneur | quelques secondes |
200
- | Fonctionnels : un devzone construit et utilisé comme par un utilisateur (outils, modules, Kubernetes avec kind, hooks repowarden, redémarrage, rebuild) | `make test-fonctionnel` | sur ta machine (Docker, Node) | 5 à 10 min |
201
- | CLI dans un vrai terminal : chaque commande tapée comme par un humain (pseudo-terminal), avec un délai maximal ; une commande qui attend une entrée échoue. Cibles `make` (`help`, `up`, `shell`, `status`, `stop`, `down`, `rebuild`, `desinstaller`), commande npm (`devzone <dossier>`, `desinstaller`, `--version`, `--help`), commande `devzone` du conteneur, scripts de démarrage | `make test-cli` | sur ta machine (Docker, Node, Python 3) | 10 à 15 min |
202
- | Windows (local et CI) | `bash test/windows.sh` | macOS/Linux (local) ou Windows Git Bash (CI) | quelques secondes |
203
-
204
- **Windows (CI) : ce qui est vérifié / ce qui n'est pas (conteneur, VS Code).** Le job `windows` vérifie sous `windows-latest` (checkout avec `core.autocrlf=true`, comme un poste Windows) : aucun CRLF dans les scripts (tout fichier suivi commençant par `#!`, plus le `Makefile`) ; empaquetage npm (`npm pack`) et installation de l'archive — dans un préfixe npm isolé sous `$TMP` (le global de la machine n'est jamais touché) ; `devzone --version`, `devzone --help`, option inconnue (avec sortie en erreur) ; `devzone <dossier>` avec `DEVZONE_SANS_DEMARRER=1` (création des fichiers attendus, dossier non vide refusé sans écrasement) ; `devzone desinstaller` hors d'un dossier devzone refusé. Le même parcours passe ensuite par `cmd`, c'est-à-dire le raccourci `.cmd` de npm, avec cette fois une installation globale réelle (le cas d'un utilisateur Windows). Ce qui n'est **pas** vérifié sous Windows CI : `make up` et le conteneur Linux (impossibles sur les runners Windows de GitHub), ainsi que VS Code et Docker Desktop (vérifiés à la main).
205
-
206
- Les tests fonctionnels et ceux de la CLI travaillent sur une copie du dépôt, avec leurs propres volumes (`devzone-test-…`), puis suppriment tout (conteneur, volumes, image), même en cas d'échec : ton devzone, tes connexions et le cluster de ta machine ne sont jamais touchés (seul un cluster kind de test est utilisé). En CI, le workflow `fonctionnel` les lance (trois jobs : fonctionnel, cli et windows) sur chaque PR qui modifie `.devcontainer/`, `test/`, `bin/`, le `Makefile`, `lancer.sh`, `desinstaller.sh`, `.gitattributes` ou `package.json`, et à la main (*Actions → fonctionnel → Run workflow*).
207
-
208
- ## Versions et livraison
209
-
210
- Flux `develop` → `main`, géré par repowarden, **sans geste après le merge d'un ticket** :
211
- 1. Le travail entre dans `develop` (branche par défaut), par une PR liée à un ticket. **Son merge est la validation humaine.** Une PR de travail ouverte vers `main` est reciblée vers `develop` par la CI.
212
- 2. Le bot de release publie aussitôt une **préversion** `vX.Y.Z-next.N` et tient à jour la **PR de livraison** `develop` → `main`.
213
- 3. La GitHub App **merge la PR de livraison** dès que ses vérifications sont vertes (`repowarden`, et `livraison` : préversion publiée). Ce merge publie le tag `vX.Y.Z` et la [release GitHub](https://github.com/SimBienvenueHoulBoumi/devzone/releases). Une vérification rouge bloque la livraison, visible sur la PR.
214
-
215
- `main` reste ainsi à jour avec `develop`. La version suit les Conventional Commits : `fix` → correctif, `feat` → mineure ; une livraison sans `fix` ni `feat` (documentation, CI…) met `main` à jour sans nouvelle version.
216
-
217
- **Réglages, au choix du mainteneur** :
218
-
219
- | Réglage | Où | Effet |
220
- |---|---|---|
221
- | Livraison automatique (défaut de devzone) | `release.yml`, job `release` : `delivery-auto: true` et `delivery-on-push: true` ; `.repowarden.conf` : `deliveryApproval = auto` | la PR de livraison est armée en merge automatique par la GitHub App et part dès que ses vérifications sont vertes (réglage officiel de repowarden ≥ 4.9) |
222
- | Livraison manuelle | `release.yml` : `delivery-auto: false` (ou retiré) ; `.repowarden.conf` : `deliveryApproval = review` | la PR de livraison attend ton merge |
223
- | Préversion à chaque merge (devzone) ou le soir | `release.yml`, job `release` : `preversion-on-push: true` ou rien | sans préversion à chaque merge, la livraison attend celle du soir |
224
- | Préversion obligatoire avant une version stable (défaut, celui de devzone) | `release.yml`, job `release` : rien, ou `preversion-obligatoire: false` pour la désactiver | désactivée, la vérification `livraison` passe d'office (« préversion non exigée ») : la PR de livraison n'attend plus de préversion, mais la version stable n'a pas été testée en préversion |
225
-
226
- Prérequis de la livraison automatique : la GitHub App du dépôt (`repowarden app init`, lancé sur ta machine ; voir [Dépannage](#dépannage)). Sans elle, un merge fait par le jeton des Actions ne déclencherait pas la release.
227
-
228
- ## Dépannage
229
-
230
- | Symptôme | Cause | Solution |
231
- |---|---|---|
232
- | `make up` ou `make rebuild` semble figé | une étape longue (première construction de l'image : plusieurs minutes), ou une question posée dans le conteneur | `make` affiche un signe de vie avec la dernière ligne du journal au moins toutes les 30 s : suivre le détail avec `tail -f .devzone.log`. Une question (ligne finissant par `[o/N]`, `?`…) est signalée et le lancement arrêté : la [signaler](https://github.com/SimBienvenueHoulBoumi/devzone/issues), puis `make rebuild`. Version antérieure de devzone, figée sur « Configurer les bots … ? [o/N] » (invisible) : `Ctrl+C`, mettre devzone à jour puis `make rebuild` ; les bots se configurent à la main dans le conteneur : `repowarden bots` |
233
- | `git push` refusé : « refusing to allow an OAuth App to create or update workflow … without `workflow` scope » | jeton `gh` sans la permission `workflow` | `gh auth refresh -h github.com -s workflow` |
234
- | PR bloquée, run `action_required`, bandeau « Approve workflows to run » | PR ouverte ou poussée par le bot `github-actions` : pour les événements `pull_request` `opened`, `synchronize` et `reopened`, GitHub attend l'accord d'une personne ayant l'écriture ([doc GitHub](https://docs.github.com/en/actions/how-tos/write-workflows/choose-when-workflows-run/trigger-a-workflow)) | vérifier les changements (surtout `.github/workflows/`), puis *Approve workflows to run* ; pour ne plus avoir à le faire : `repowarden app init` dans le projet |
235
- | PR de livraison bloquée : « aucune préversion vX.Y.Z-next.N » | la préversion n'est pas encore publiée (sans `preversion-on-push`, elle part le soir) | attendre celle du soir, *Actions → release → Run workflow* sur `develop`, `preversion-on-push: true`, ou ne plus l'exiger : `preversion-obligatoire: false` |
236
- | PR de livraison restée ouverte | une vérification rouge (voir la PR), `delivery-auto: false`, ou GitHub App absente ou désinstallée (avertissement dans le run `release`) | corriger la vérification ; installer l'App (`repowarden app init` sur ta machine) |
237
- | `repowarden app init` depuis `make shell` : la page `http://127.0.0.1:…` ne s'ouvre pas, ou GitHub ne revient pas | la page est servie dans le conteneur, injoignable depuis le navigateur de ta machine | lancer la commande **sur ta machine** : `npx -y repowarden app init --repo <compte>/<dépôt>` |
238
- | `repowarden app init` : « nom déjà utilisé » | un essai précédent a créé l'App sans en récupérer les identifiants | supprimer l'App orpheline (*GitHub → Settings → Developer settings → GitHub Apps*), ou `--nom <autre-nom>` |
239
- | `git commit` : « Please tell me who you are » | identité git absente | avec GitHub : `gh auth login -s workflow` puis `bash .devcontainer/git-identite.sh` ; sans GitHub : `git config --file ~/.config/git/config user.name "<nom>"` et `user.email "<email>"` |
240
- | `gh auth login` : « Press Enter to open … in your browser », rien ne s'ouvre | pas de navigateur dans le conteneur (`make shell`) | ouvrir https://github.com/login/device à la main et saisir le code |
241
- | `k9s` : `Error: exit status 1` puis son aide ; `kubectl` : `localhost:8080` … `connection refused` | aucun cluster actif (module `kubernetes` désactivé, ou pas de cluster sur ta machine) | `devzone activer kubernetes` (cluster de ta machine), `kind create cluster`, ou `kubectl config use-context <nom>` |
242
- | `claude` ou `opencode` : « command not found » | module `ia` désactivé | `devzone activer ia` |
243
- | CPU et RAM vides dans k9s | metrics-server absent du cluster | `bash .devcontainer/metrics-server.sh` |
244
- | Deux conteneurs devzone | `make up` lancé pendant que VS Code ouvrait le conteneur | `make down`, puis un seul lancement |
245
- | Windows (Git Bash, MSYS) : `~/.kube` introuvable | `HOME` et `USERPROFILE` concaténés dans le chemin monté | lancer depuis VS Code ou PowerShell |
246
- | Pas de `~/.kube` sur l'hôte | Docker le crée vide au démarrage (sous Linux avec Docker Engine, il appartient à root) | rien à faire : le conteneur démarre quand même |
247
-
248
- ## Organisation
249
-
250
- ```text
251
- devzone/
252
- ├── .devcontainer/
253
- │ ├── Dockerfile # image de base + outils figés (versions et sha256)
254
- │ ├── devcontainer.json # features (langages, Docker, Kubernetes, gh), volumes, extensions VS Code
255
- │ ├── devcontainer-lock.json # versions figées des features
256
- │ ├── devzone # commande devzone : modules (ia, kubernetes), versions des assistants IA
257
- │ ├── post-create.sh # premier démarrage : droits des volumes, git, repowarden, modules actifs (sans question)
258
- │ ├── demarrage.sh # chaque démarrage : identité git, clusters, puis récapitulatif (devzone)
259
- │ ├── kube-config.sh # contextes kind ; module kubernetes : cluster de l'hôte, metrics-server
260
- │ ├── metrics-server.sh # metrics-server sur les clusters locaux (CPU et RAM dans k9s)
261
- │ └── git-identite.sh # identité git déduite du compte gh si elle manque
262
- ├── .github/workflows/
263
- │ ├── fonctionnel.yml # tests fonctionnels et de la CLI sous terminal (PR touchant le conteneur, les tests ou la CLI)
264
- │ ├── repowarden.yml # vérifications repowarden de chaque PR (PR mal visée reciblée vers develop)
265
- │ ├── tickets.yml # suivi des tickets : branche, PR brouillon, statuts jusqu'à la production
266
- │ ├── release.yml # préversions sur develop, livraison develop → main
267
- │ └── nettoyage.yml # branches mergées supprimées (main et develop conservées)
268
- ├── .repowarden.conf # réglages repowarden : flux develop → main
269
- ├── Makefile # pilotage sans VS Code
270
- ├── lancer.sh # make up / rebuild : étapes affichées, question du conteneur signalée
271
- ├── desinstaller.sh # make desinstaller : retire tout ce que devzone a créé
272
- ├── bin/devzone # commande npm : npx devzone <dossier>, devzone desinstaller
273
- ├── package.json, LICENSE # paquet npm devzone (licence GPL-3.0-only)
274
- ├── test/
275
- │ ├── devzone.bats # tests de la commande devzone (bats test/)
276
- │ ├── cli.bats # tests de la commande npm, du contenu du paquet et de lancer.sh
277
- │ ├── fonctionnel.sh # tests fonctionnels (make test-fonctionnel)
278
- │ ├── cli-terminal.sh # tests de la CLI dans un vrai terminal (make test-cli)
279
- │ └── terminal.py # lance une commande sous pseudo-terminal, avec délai maximal
280
- └── workspace/ # tes projets (ignorés par git, chacun son dépôt)
281
- ```
129
+ - [Référence détaillée](https://github.com/SimBienvenueHoulBoumi/devzone/blob/main/docs/reference.md)
130
+ - [Contribuer](https://github.com/SimBienvenueHoulBoumi/devzone/blob/main/docs/contribuer.md) : tests, processus de livraison et organisation
282
131
 
283
132
  ## Licence
284
133
 
285
- devzone est un logiciel libre, distribué sous la [GNU General Public License version 3](LICENSE).
134
+ devzone est un logiciel libre, distribué sous la [GNU General Public License version 3](https://github.com/SimBienvenueHoulBoumi/devzone/blob/main/LICENSE).
135
+
@@ -17,8 +17,9 @@ case "$SCRIPT" in
17
17
  [A-Za-z]:[\\/]*) SCRIPT="$(cygpath -u "$SCRIPT" 2>/dev/null || echo "${SCRIPT//\\//}")" ;;
18
18
  esac
19
19
  PAQUET="$(cd "$(dirname "$(readlink -f "$SCRIPT" 2>/dev/null || echo "$SCRIPT")")/.." && pwd)"
20
- # Fichiers d'un devzone (même liste que « files » de package.json, sans bin/)
21
- FICHIERS=(.devcontainer Makefile .gitattributes lancer.sh desinstaller.sh README.md LICENSE)
20
+ # Fichiers d'un devzone (même liste que « files » de package.json, sans la
21
+ # commande core/devzone) ; core/scripts copié à part, sous core/
22
+ FICHIERS=(.devcontainer Makefile .gitattributes README.md LICENSE)
22
23
 
23
24
  version() {
24
25
  # Chemin passé en argument à node, jamais écrit dans le code JavaScript de -p :
@@ -44,8 +45,9 @@ creer() {
44
45
  echo "✖ $cible existe et n'est pas vide : rien n'est écrasé. Choisis un autre dossier." >&2
45
46
  exit 1
46
47
  fi
47
- mkdir -p "$cible/workspace"
48
+ mkdir -p "$cible/workspace" "$cible/core"
48
49
  cp -R "${FICHIERS[@]/#/$PAQUET/}" "$cible/"
50
+ cp -R "$PAQUET/core/scripts" "$cible/core/"
49
51
  touch "$cible/workspace/.gitkeep"
50
52
  # npm n'embarque jamais .gitignore : écrit ici
51
53
  cat >"$cible/.gitignore" <<'EOF'
@@ -57,7 +59,7 @@ workspace/*
57
59
  .devzone.log
58
60
  .devzone.etat
59
61
  EOF
60
- chmod +x "$cible/desinstaller.sh" "$cible/lancer.sh"
62
+ chmod +x "$cible/core/scripts/desinstaller.sh" "$cible/core/scripts/lancer.sh"
61
63
  cible="$(cd "$cible" && pwd)"
62
64
  echo "✔ devzone $(version) créé dans $cible"
63
65
  if [ -n "${DEVZONE_SANS_DEMARRER:-}" ]; then
@@ -68,7 +70,7 @@ EOF
68
70
  if command -v make >/dev/null 2>&1; then
69
71
  make -C "$cible" up
70
72
  else
71
- bash "$cible/lancer.sh" up "$cible"
73
+ bash "$cible/core/scripts/lancer.sh" up "$cible"
72
74
  fi
73
75
  echo "Ensuite : cd $cible && make shell (ou ouvre le dossier dans VS Code : Reopen in Container)."
74
76
  }
@@ -77,11 +79,19 @@ case "${1:-}" in
77
79
  "" | -h | --help | aide) aide ;;
78
80
  -v | --version) version ;;
79
81
  desinstaller)
80
- if [ ! -f desinstaller.sh ] || [ ! -d .devcontainer ]; then
82
+ # Dossier devzone (.devcontainer/) ; un devzone plus ancien a son
83
+ # desinstaller.sh dans scripts/ (avant core/), ou à la racine (avant scripts/)
84
+ desinstalleur=""
85
+ if [ -d .devcontainer ]; then
86
+ for f in core/scripts/desinstaller.sh scripts/desinstaller.sh desinstaller.sh; do
87
+ if [ -f "$f" ]; then desinstalleur="$f" && break; fi
88
+ done
89
+ fi
90
+ if [ -z "$desinstalleur" ]; then
81
91
  echo "✖ À lancer dans un dossier devzone (desinstaller.sh introuvable ici)." >&2
82
92
  exit 1
83
93
  fi
84
- bash desinstaller.sh
94
+ bash "$desinstalleur"
85
95
  ;;
86
96
  -*)
87
97
  echo "✖ option inconnue : $1 (devzone --help)" >&2
@@ -10,7 +10,9 @@
10
10
  # Sans terminal : CONFIRMER=oui.
11
11
  set -euo pipefail
12
12
 
13
- ICI="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
13
+ # Dossier devzone : deux niveaux au-dessus du script (core/scripts/), pour que
14
+ # la commande fonctionne lancée depuis n'importe quel dossier
15
+ ICI="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
14
16
  ETAT="$ICI/.devzone.etat"
15
17
  GARDER="${GARDER:-}"
16
18
  CONNEXIONS=(gh git claude opencode-config opencode-data config)
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bash
2
2
  # Lance le conteneur sur l'hôte, sans jamais rester muet :
3
- # bash lancer.sh up [dossier] (make up)
4
- # bash lancer.sh rebuild [dossier] (make rebuild : reconstruit de zéro)
3
+ # bash core/scripts/lancer.sh up [dossier] (make up)
4
+ # bash core/scripts/lancer.sh rebuild [dossier] (make rebuild : reconstruit de zéro)
5
5
  # Sortie complète du CLI devcontainer dans <dossier>/.devzone.log ; dans le
6
6
  # terminal : les étapes clés, un signe de vie au plus toutes les
7
7
  # DEVZONE_SIGNE_DE_VIE secondes (30), et une question posée dans le conteneur
@@ -17,7 +17,7 @@ case "$mode" in
17
17
  up) options=() fini="devzone lancé" ;;
18
18
  rebuild) options=(--remove-existing-container) fini="devzone reconstruit" ;;
19
19
  *)
20
- echo "usage : bash lancer.sh up|rebuild [dossier]" >&2
20
+ echo "usage : bash core/scripts/lancer.sh up|rebuild [dossier]" >&2
21
21
  exit 2
22
22
  ;;
23
23
  esac
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devzone",
3
- "version": "0.5.5",
3
+ "version": "0.6.0",
4
4
  "description": "Zone de dev conteneurisée : Java, Node, Python, Docker, Kubernetes et outils repowarden, dans un devcontainer",
5
5
  "license": "GPL-3.0-only",
6
6
  "repository": {
@@ -17,15 +17,14 @@
17
17
  "environnement"
18
18
  ],
19
19
  "bin": {
20
- "devzone": "bin/devzone"
20
+ "devzone": "core/devzone"
21
21
  },
22
22
  "files": [
23
- "bin/",
23
+ "core/devzone",
24
24
  ".devcontainer/",
25
25
  "Makefile",
26
26
  ".gitattributes",
27
- "lancer.sh",
28
- "desinstaller.sh",
27
+ "core/scripts/",
29
28
  "README.md",
30
29
  "LICENSE"
31
30
  ]