@aikotools/repo-maintenance 1.0.2
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.
- package/README.md +227 -0
- package/bin/loader.js +10 -0
- package/bin/repohub.js +5 -0
- package/dist/client/assets/index-Bh_JYZxI.js +15 -0
- package/dist/client/assets/index-D-CxJxP4.css +1 -0
- package/dist/client/index.html +13 -0
- package/dist/server/server/index.js +118 -0
- package/dist/server/server/services/bulk-service.js +157 -0
- package/dist/server/server/services/cascade-service.js +474 -0
- package/dist/server/server/services/config-service.js +343 -0
- package/dist/server/server/services/dependency-resolver.js +144 -0
- package/dist/server/server/services/git-service.js +320 -0
- package/dist/server/server/services/package-service.js +152 -0
- package/dist/server/server/services/process.js +51 -0
- package/dist/server/server/services/pull-all-service.js +415 -0
- package/dist/server/server/services/repo-scanner.js +230 -0
- package/dist/server/server/services/task-queue.js +29 -0
- package/dist/server/server/trpc/context.js +4 -0
- package/dist/server/server/trpc/init.js +7 -0
- package/dist/server/server/trpc/procedures/bulk.js +110 -0
- package/dist/server/server/trpc/procedures/cascade.js +207 -0
- package/dist/server/server/trpc/procedures/dependencies.js +26 -0
- package/dist/server/server/trpc/procedures/git.js +151 -0
- package/dist/server/server/trpc/procedures/package.js +43 -0
- package/dist/server/server/trpc/procedures/project.js +181 -0
- package/dist/server/server/trpc/procedures/repos.js +42 -0
- package/dist/server/server/trpc/router.js +20 -0
- package/dist/server/shared/types.js +3 -0
- package/package.json +68 -0
package/README.md
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
# RepoHub - Repository Maintenance Tool
|
|
2
|
+
|
|
3
|
+
Web-basiertes Dashboard zur Verwaltung des `saas-coding-kernel` Multi-Repo Monorepos. Bietet Dependency-Graph, Bulk-Operationen, Cascade-Updates und Git-Management fuer 140+ Packages.
|
|
4
|
+
|
|
5
|
+
## Voraussetzungen
|
|
6
|
+
|
|
7
|
+
| Tool | Version | Zweck |
|
|
8
|
+
|------|---------|-------|
|
|
9
|
+
| **Bun** | latest | Backend-Runtime |
|
|
10
|
+
| **pnpm** | 10+ | Package Manager |
|
|
11
|
+
| **Node.js** | 24+ | Build-Tools |
|
|
12
|
+
| **Git** | - | Repository-Operationen |
|
|
13
|
+
| **GitHub CLI (`gh`)** | - | Pull-All (Clone + GitHub-Abfrage) |
|
|
14
|
+
|
|
15
|
+
GitHub CLI muss authentifiziert sein (`gh auth login`).
|
|
16
|
+
|
|
17
|
+
## Installation & Start
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
cd repo/tools/tool-repo-maintenance
|
|
22
|
+
pnpm install
|
|
23
|
+
cp .env.example .env # Anpassen falls noetig
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Development
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
pnpm dev # Backend (3100) + Frontend (3101) parallel
|
|
30
|
+
pnpm dev:server # Nur Backend
|
|
31
|
+
pnpm dev:client # Nur Frontend
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Oeffne http://localhost:3101 im Browser.
|
|
35
|
+
|
|
36
|
+
### Production
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
pnpm build
|
|
40
|
+
pnpm start # http://localhost:3100
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Konfiguration
|
|
44
|
+
|
|
45
|
+
### .env
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
PORT=3100 # Backend-Port
|
|
49
|
+
VITE_PORT=3101 # Vite Dev-Server Port
|
|
50
|
+
NPM_REGISTRY=https://npm.pkg.github.com # npm Registry (fuer Cascade)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Projekt-Einstellungen (UI)
|
|
54
|
+
|
|
55
|
+
Beim ersten Start ueber das Zahnrad-Icon (Settings) konfigurieren:
|
|
56
|
+
|
|
57
|
+
- **NPM Organizations** - z.B. `@xhubio-saas` (zum Erkennen interner Dependencies)
|
|
58
|
+
- **GitHub Organizations** - z.B. `xhubio-saas` (fuer Pull-All)
|
|
59
|
+
- **Parallel Tasks** - Anzahl gleichzeitiger Operationen (1-20, Default: 6)
|
|
60
|
+
- **Default Branch** - z.B. `main`
|
|
61
|
+
|
|
62
|
+
Die Konfiguration wird in `.repoMaintenance/project.json` gespeichert.
|
|
63
|
+
|
|
64
|
+
## Features
|
|
65
|
+
|
|
66
|
+
### Dashboard
|
|
67
|
+
|
|
68
|
+
Uebersicht mit Statistiken: Gesamtzahl Repos, Domains, uncommitted Changes und Dependency-Kanten. Zeigt Repos mit offenen Aenderungen und eine Domain-Uebersicht.
|
|
69
|
+
|
|
70
|
+
### Repository-Detail
|
|
71
|
+
|
|
72
|
+
Klick auf ein Repo in der Sidebar oeffnet die Detailansicht:
|
|
73
|
+
|
|
74
|
+
- **Changes-Tab** - Geaenderte Dateien mit Diff-Viewer. Untracked Files koennen per Klick zu `.gitignore` hinzugefuegt werden.
|
|
75
|
+
- **Dependencies-Tab** - Interne Abhaengigkeiten mit Links zum jeweiligen Repo.
|
|
76
|
+
- **Dependents-Tab** - Repos die von diesem Repo abhaengen.
|
|
77
|
+
- **Actions** - Commit & Push, Pull, Start Cascade.
|
|
78
|
+
- **Recent Commits** - Letzte Commits des Repos.
|
|
79
|
+
|
|
80
|
+
### Dependency Graph
|
|
81
|
+
|
|
82
|
+
Interaktive Visualisierung aller internen Abhaengigkeiten als Node-Edge-Graph (React Flow). Klick auf einen Node navigiert zum Repo-Detail.
|
|
83
|
+
|
|
84
|
+
### Pull All
|
|
85
|
+
|
|
86
|
+
Synchronisiert alle Repos mit GitHub - wie `repo-maintenance.sh`, aber mit UI:
|
|
87
|
+
|
|
88
|
+
1. Holt alle Repos der konfigurierten GitHub-Organisation via `gh repo list`
|
|
89
|
+
2. **Klont** fehlende Repos in den richtigen Domain-Ordner
|
|
90
|
+
3. **Pullt** existierende Repos (ueberspringt bei uncommitted Changes)
|
|
91
|
+
4. Zeigt Live-Fortschritt mit Status pro Repo
|
|
92
|
+
|
|
93
|
+
**Status-Typen:**
|
|
94
|
+
|
|
95
|
+
| Status | Bedeutung |
|
|
96
|
+
|--------|-----------|
|
|
97
|
+
| Updated | Erfolgreich gepullt |
|
|
98
|
+
| Already up-to-date | Keine Aenderungen |
|
|
99
|
+
| Cloned | Neu von GitHub geklont |
|
|
100
|
+
| Skipped | In Ignore-Liste |
|
|
101
|
+
| Unmapped | Kein Domain-Mapping konfiguriert |
|
|
102
|
+
| Has changes | Uebersprungen wegen uncommitted Changes |
|
|
103
|
+
| Failed | Fehler beim Pull/Clone |
|
|
104
|
+
|
|
105
|
+
**Repo-Mapping konfigurieren:** Settings > Repo Mapping > Edit. Dort koennen Repos Domains zugewiesen, ignoriert oder aus der Unmapped-Liste zugeordnet werden.
|
|
106
|
+
|
|
107
|
+
### Cascade Updates
|
|
108
|
+
|
|
109
|
+
Propagiert Dependency-Updates automatisch durch die gesamte Abhaengigkeitskette.
|
|
110
|
+
|
|
111
|
+
**Beispiel:** `lib-invoice-interface` wird aktualisiert. Cascade aktualisiert automatisch alle abhaengigen Pakete in der richtigen Reihenfolge (topologisch sortiert, Layer fuer Layer).
|
|
112
|
+
|
|
113
|
+
**Ablauf:**
|
|
114
|
+
|
|
115
|
+
1. Source-Repo auswaehlen (z.B. `lib-invoice-interface`)
|
|
116
|
+
2. Tool berechnet alle betroffenen Repos in topologischer Reihenfolge
|
|
117
|
+
3. Optionen konfigurieren:
|
|
118
|
+
- **Wait for CI** - Wartet zwischen Layern auf CI/CD-Publish
|
|
119
|
+
- **Run Tests** - Fuehrt `pnpm test` vor dem Commit aus
|
|
120
|
+
- **Commit Prefix** - z.B. `deps: ` oder `chore: `
|
|
121
|
+
4. Plan bestaetigen und starten
|
|
122
|
+
|
|
123
|
+
**Pro Repo wird ausgefuehrt:**
|
|
124
|
+
|
|
125
|
+
1. `package.json` Dependencies aktualisieren
|
|
126
|
+
2. `npm install`
|
|
127
|
+
3. Tests (optional)
|
|
128
|
+
4. Commit + Push
|
|
129
|
+
5. Auf CI warten (optional) + publishte Version aufloesen
|
|
130
|
+
|
|
131
|
+
**Steuerung waehrend der Ausfuehrung:** Pause, Resume, Abort, Skip Failed, manuell Version setzen.
|
|
132
|
+
|
|
133
|
+
### Bulk Operations
|
|
134
|
+
|
|
135
|
+
Beliebige Shell-Befehle ueber mehrere Repos gleichzeitig ausfuehren:
|
|
136
|
+
|
|
137
|
+
1. Repos filtern nach Domain, Typ oder Suchbegriff
|
|
138
|
+
2. Befehl eingeben (z.B. `npm run build`, `git status`, `npm test`)
|
|
139
|
+
3. Parallelitaet waehlen (1-20)
|
|
140
|
+
4. Starten - Live-Output pro Repo mit Exit-Code und Dauer
|
|
141
|
+
|
|
142
|
+
### Packages (File-URL Management)
|
|
143
|
+
|
|
144
|
+
Zeigt Repos mit `file:`-Dependencies in `package.json`. Ermoeglicht Batch-Umschaltung zwischen lokalen `file:`-Pfaden (Entwicklung) und npm-Versionen (Produktion).
|
|
145
|
+
|
|
146
|
+
### History
|
|
147
|
+
|
|
148
|
+
Persistente Historie aller Cascade- und Pull-All-Operationen mit Status, betroffenen Repos und Dauer.
|
|
149
|
+
|
|
150
|
+
## Datenablage
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
.repoMaintenance/
|
|
154
|
+
├── project.json # Projekt-Konfiguration + Repo-Mapping
|
|
155
|
+
├── cached-repos.json # Repo-Cache (fuer schnellen Start)
|
|
156
|
+
├── cached-graph.json # Dependency-Graph Cache
|
|
157
|
+
├── cascade-history/ # Cascade-Ausfuehrungen
|
|
158
|
+
└── pull-history/ # Pull-All Ausfuehrungen
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Scripts
|
|
162
|
+
|
|
163
|
+
| Script | Beschreibung |
|
|
164
|
+
|--------|-------------|
|
|
165
|
+
| `pnpm dev` | Development (Backend + Frontend) |
|
|
166
|
+
| `pnpm build` | TypeScript + Vite Build |
|
|
167
|
+
| `pnpm start` | Production Server starten |
|
|
168
|
+
| `pnpm test` | Tests mit Coverage |
|
|
169
|
+
| `pnpm lint` | ESLint |
|
|
170
|
+
| `pnpm format` | Prettier |
|
|
171
|
+
| `pnpm depcheck` | Unused Dependencies pruefen |
|
|
172
|
+
|
|
173
|
+
## Architektur
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
src/
|
|
177
|
+
├── server/ # Hono + tRPC Backend (Bun Runtime)
|
|
178
|
+
│ ├── index.ts # Server Entry Point
|
|
179
|
+
│ ├── services/ # Business Logic
|
|
180
|
+
│ │ ├── repo-scanner.ts # Scannt repo/ nach Packages
|
|
181
|
+
│ │ ├── dependency-resolver.ts # Baut Dependency-Graph
|
|
182
|
+
│ │ ├── cascade-service.ts # Cascade-Update Orchestrierung
|
|
183
|
+
│ │ ├── bulk-service.ts # Bulk-Command Ausfuehrung
|
|
184
|
+
│ │ ├── git-service.ts # Git-Operationen (simple-git)
|
|
185
|
+
│ │ ├── pull-all-service.ts # Pull/Clone aller Repos
|
|
186
|
+
│ │ ├── package-service.ts # file: URL Management
|
|
187
|
+
│ │ ├── task-queue.ts # Paralleler Task-Executor
|
|
188
|
+
│ │ └── config-service.ts # Config + Cache Persistenz
|
|
189
|
+
│ └── trpc/ # tRPC Router + Procedures
|
|
190
|
+
│ ├── router.ts
|
|
191
|
+
│ └── procedures/
|
|
192
|
+
│ ├── project.ts # Projekt-Konfiguration
|
|
193
|
+
│ ├── repos.ts # Repo-Liste / Refresh
|
|
194
|
+
│ ├── git.ts # Git-Operationen
|
|
195
|
+
│ ├── cascade.ts # Cascade-Updates
|
|
196
|
+
│ ├── bulk.ts # Bulk-Operationen
|
|
197
|
+
│ ├── dependencies.ts # Dependency-Graph
|
|
198
|
+
│ └── package.ts # Package-Management
|
|
199
|
+
├── client/ # React Frontend
|
|
200
|
+
│ ├── main.tsx # App Entry Point
|
|
201
|
+
│ ├── App.tsx # Root-Komponente
|
|
202
|
+
│ ├── trpc.ts # tRPC Client Setup
|
|
203
|
+
│ └── components/
|
|
204
|
+
│ ├── layout/ # AppLayout, Sidebar, StatusBar
|
|
205
|
+
│ ├── dashboard/ # Dashboard-Ansicht
|
|
206
|
+
│ ├── repo-detail/ # Repository-Detail
|
|
207
|
+
│ ├── graph/ # Dependency-Graph (React Flow)
|
|
208
|
+
│ ├── cascade/ # Cascade Planner & Monitor
|
|
209
|
+
│ ├── bulk/ # Bulk-Operationen
|
|
210
|
+
│ ├── history/ # History-Ansicht
|
|
211
|
+
│ ├── packages/ # File-URL Ansicht
|
|
212
|
+
│ ├── settings/ # Settings + Repo-Mapping Dialog
|
|
213
|
+
│ └── shared/ # Shared Components
|
|
214
|
+
└── shared/ # Shared Types (Server + Client)
|
|
215
|
+
└── types.ts
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
## Tech Stack
|
|
219
|
+
|
|
220
|
+
| Komponente | Technologie |
|
|
221
|
+
|------------|-------------|
|
|
222
|
+
| Backend | Bun + Hono + tRPC |
|
|
223
|
+
| Frontend | React 19 + Vite + Tailwind CSS 4 |
|
|
224
|
+
| State | TanStack Query (Polling fuer Live-Updates) |
|
|
225
|
+
| Graph | React Flow (@xyflow/react) |
|
|
226
|
+
| Git | simple-git |
|
|
227
|
+
| Icons | Lucide React |
|
package/bin/loader.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js ESM loader that adds .js extension to extensionless relative imports.
|
|
3
|
+
* Required because tsc with module:"preserve" emits imports as written in source.
|
|
4
|
+
*/
|
|
5
|
+
export async function resolve(specifier, context, nextResolve) {
|
|
6
|
+
if (specifier.startsWith('.') && !specifier.match(/\.\w+$/)) {
|
|
7
|
+
return nextResolve(specifier + '.js', context)
|
|
8
|
+
}
|
|
9
|
+
return nextResolve(specifier, context)
|
|
10
|
+
}
|