@dafish/gogo-meta 0.1.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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Marcus Stöhr
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,515 @@
1
+ # gogo-meta
2
+
3
+ A modern TypeScript CLI for managing multi-repository projects. Execute commands across multiple git repositories simultaneously.
4
+
5
+ ## Features
6
+
7
+ - Clone entire project ecosystems with one command
8
+ - Execute arbitrary commands across all repositories
9
+ - Parallel or sequential execution modes
10
+ - Flexible filtering (include/exclude by name or pattern)
11
+ - NPM operations across all projects
12
+ - Symlink projects for local development
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ git clone <repository-url>
18
+ cd gogo-meta
19
+ bun install
20
+ bun run build
21
+ bun link
22
+ ```
23
+
24
+ ## Quick Start
25
+
26
+ ```bash
27
+ # Initialize a new meta repository
28
+ gogo init
29
+
30
+ # Import existing repositories
31
+ gogo project import api git@github.com:org/api.git
32
+ gogo project import web git@github.com:org/web.git
33
+
34
+ # Clone a meta repository (includes all children)
35
+ gogo git clone git@github.com:org/meta-repo.git
36
+
37
+ # Run commands across all projects
38
+ gogo exec "npm install"
39
+ gogo exec "git status" --parallel
40
+ ```
41
+
42
+ ## Configuration
43
+
44
+ ### .gogo
45
+
46
+ The `.gogo` file defines child repositories, ignore patterns, and predefined commands:
47
+
48
+ ```json
49
+ {
50
+ "projects": {
51
+ "api": "git@github.com:org/api.git",
52
+ "web": "git@github.com:org/web.git",
53
+ "libs/shared": "git@github.com:org/shared.git"
54
+ },
55
+ "ignore": [".git", "node_modules", ".vagrant", ".vscode"],
56
+ "commands": {
57
+ "build": "npm run build",
58
+ "test": {
59
+ "cmd": "npm test",
60
+ "parallel": true,
61
+ "description": "Run tests in all projects"
62
+ },
63
+ "deploy": {
64
+ "cmd": "npm run deploy",
65
+ "parallel": true,
66
+ "concurrency": 2,
67
+ "includeOnly": ["api", "web"]
68
+ }
69
+ }
70
+ }
71
+ ```
72
+
73
+ ### .looprc (optional)
74
+
75
+ Define default ignore patterns for command execution:
76
+
77
+ ```json
78
+ {
79
+ "ignore": ["docs", "examples"]
80
+ }
81
+ ```
82
+
83
+ ## Commands
84
+
85
+ ### Global Options
86
+
87
+ These options are available for most commands:
88
+
89
+ | Option | Description |
90
+ |--------|-------------|
91
+ | `--include-only <dirs>` | Only target specified directories (comma-separated) |
92
+ | `--exclude-only <dirs>` | Exclude specified directories (comma-separated) |
93
+ | `--include-pattern <regex>` | Include directories matching regex pattern |
94
+ | `--exclude-pattern <regex>` | Exclude directories matching regex pattern |
95
+ | `--parallel` | Execute commands concurrently |
96
+ | `--concurrency <n>` | Maximum parallel processes (default: 4) |
97
+
98
+ ---
99
+
100
+ ### `gogo init`
101
+
102
+ Initialize a new gogo-meta repository by creating a `.gogo` file.
103
+
104
+ ```bash
105
+ gogo init
106
+ gogo init --force # Overwrite existing .gogo file
107
+ ```
108
+
109
+ | Option | Description |
110
+ |--------|-------------|
111
+ | `-f, --force` | Overwrite existing `.gogo` file |
112
+
113
+ ---
114
+
115
+ ### `gogo exec <command>`
116
+
117
+ Execute an arbitrary command in all project directories.
118
+
119
+ ```bash
120
+ # Run in each project sequentially
121
+ gogo exec "npm test"
122
+
123
+ # Run in parallel
124
+ gogo exec "npm install" --parallel
125
+
126
+ # Run with limited concurrency
127
+ gogo exec "npm run build" --parallel --concurrency 2
128
+
129
+ # Filter to specific projects
130
+ gogo exec "git status" --include-only api,web
131
+
132
+ # Exclude projects
133
+ gogo exec "npm install" --exclude-only docs
134
+
135
+ # Use regex patterns
136
+ gogo exec "npm test" --include-pattern "^libs/"
137
+ ```
138
+
139
+ | Option | Description |
140
+ |--------|-------------|
141
+ | `--include-only <dirs>` | Only run in specified directories |
142
+ | `--exclude-only <dirs>` | Skip specified directories |
143
+ | `--include-pattern <regex>` | Include directories matching pattern |
144
+ | `--exclude-pattern <regex>` | Exclude directories matching pattern |
145
+ | `--parallel` | Run commands concurrently |
146
+ | `--concurrency <n>` | Max parallel processes |
147
+
148
+ ---
149
+
150
+ ### `gogo run [name]`
151
+
152
+ Run a predefined command from the `.gogo` file.
153
+
154
+ ```bash
155
+ # List available commands
156
+ gogo run
157
+ gogo run --list
158
+
159
+ # Run a predefined command
160
+ gogo run build
161
+
162
+ # Override config options with CLI flags
163
+ gogo run test --parallel
164
+ gogo run deploy --include-only api
165
+
166
+ # Commands can define defaults in .gogo:
167
+ # - parallel: true/false
168
+ # - concurrency: number
169
+ # - includeOnly/excludeOnly: array of directories
170
+ # - includePattern/excludePattern: regex patterns
171
+ # CLI flags override these config defaults
172
+ ```
173
+
174
+ | Option | Description |
175
+ |--------|-------------|
176
+ | `-l, --list` | List all available commands |
177
+ | `--include-only <dirs>` | Only run in specified directories (overrides config) |
178
+ | `--exclude-only <dirs>` | Skip specified directories (overrides config) |
179
+ | `--include-pattern <regex>` | Include directories matching pattern (overrides config) |
180
+ | `--exclude-pattern <regex>` | Exclude directories matching pattern (overrides config) |
181
+ | `--parallel` | Run commands concurrently (overrides config) |
182
+ | `--concurrency <n>` | Max parallel processes (overrides config) |
183
+
184
+ ---
185
+
186
+ ### `gogo git clone <url>`
187
+
188
+ Clone a meta repository and all its child repositories.
189
+
190
+ ```bash
191
+ # Clone to directory matching repo name
192
+ gogo git clone git@github.com:org/meta-repo.git
193
+
194
+ # Clone to custom directory
195
+ gogo git clone git@github.com:org/meta-repo.git -d my-project
196
+ ```
197
+
198
+ | Option | Description |
199
+ |--------|-------------|
200
+ | `-d, --directory <dir>` | Target directory name |
201
+
202
+ ---
203
+
204
+ ### `gogo git update`
205
+
206
+ Clone any child repositories defined in `.gogo` that don't exist locally.
207
+
208
+ ```bash
209
+ gogo git update
210
+ gogo git update --parallel
211
+ gogo git update --include-only api,web
212
+ ```
213
+
214
+ | Option | Description |
215
+ |--------|-------------|
216
+ | `--include-only <dirs>` | Only update specified projects |
217
+ | `--exclude-only <dirs>` | Skip specified projects |
218
+ | `--parallel` | Clone in parallel |
219
+ | `--concurrency <n>` | Max parallel clones |
220
+
221
+ ---
222
+
223
+ ### `gogo git status`
224
+
225
+ Show git status across all repositories.
226
+
227
+ ```bash
228
+ gogo git status
229
+ gogo git status --parallel
230
+ gogo git status --include-only api
231
+ ```
232
+
233
+ | Option | Description |
234
+ |--------|-------------|
235
+ | `--include-only <dirs>` | Only check specified projects |
236
+ | `--exclude-only <dirs>` | Skip specified projects |
237
+ | `--parallel` | Run in parallel |
238
+
239
+ ---
240
+
241
+ ### `gogo git pull`
242
+
243
+ Pull changes in all repositories.
244
+
245
+ ```bash
246
+ gogo git pull
247
+ gogo git pull --parallel
248
+ ```
249
+
250
+ | Option | Description |
251
+ |--------|-------------|
252
+ | `--include-only <dirs>` | Only pull specified projects |
253
+ | `--exclude-only <dirs>` | Skip specified projects |
254
+ | `--parallel` | Pull in parallel |
255
+ | `--concurrency <n>` | Max parallel pulls |
256
+
257
+ ---
258
+
259
+ ### `gogo git push`
260
+
261
+ Push changes in all repositories.
262
+
263
+ ```bash
264
+ gogo git push
265
+ gogo git push --include-only api,web
266
+ ```
267
+
268
+ | Option | Description |
269
+ |--------|-------------|
270
+ | `--include-only <dirs>` | Only push specified projects |
271
+ | `--exclude-only <dirs>` | Skip specified projects |
272
+ | `--parallel` | Push in parallel |
273
+
274
+ ---
275
+
276
+ ### `gogo git branch [name]`
277
+
278
+ List, create, or delete branches across all repositories.
279
+
280
+ ```bash
281
+ # List branches
282
+ gogo git branch
283
+
284
+ # List all branches (including remote)
285
+ gogo git branch --all
286
+
287
+ # Create a new branch
288
+ gogo git branch feature/new-feature
289
+
290
+ # Delete a branch
291
+ gogo git branch feature/old-feature --delete
292
+ ```
293
+
294
+ | Option | Description |
295
+ |--------|-------------|
296
+ | `-d, --delete` | Delete the specified branch |
297
+ | `-a, --all` | List all branches (local and remote) |
298
+ | `--include-only <dirs>` | Only target specified projects |
299
+ | `--exclude-only <dirs>` | Skip specified projects |
300
+ | `--parallel` | Run in parallel |
301
+
302
+ ---
303
+
304
+ ### `gogo git checkout <branch>`
305
+
306
+ Checkout a branch in all repositories.
307
+
308
+ ```bash
309
+ # Checkout existing branch
310
+ gogo git checkout main
311
+
312
+ # Create and checkout new branch
313
+ gogo git checkout -b feature/new-feature
314
+ ```
315
+
316
+ | Option | Description |
317
+ |--------|-------------|
318
+ | `-b, --create` | Create the branch if it doesn't exist |
319
+ | `--include-only <dirs>` | Only target specified projects |
320
+ | `--exclude-only <dirs>` | Skip specified projects |
321
+ | `--parallel` | Run in parallel |
322
+
323
+ ---
324
+
325
+ ### `gogo git commit`
326
+
327
+ Commit changes in all repositories with the same message.
328
+
329
+ ```bash
330
+ gogo git commit -m "Update dependencies"
331
+ gogo git commit -m "Fix bug" --include-only api
332
+ ```
333
+
334
+ | Option | Description |
335
+ |--------|-------------|
336
+ | `-m, --message <msg>` | Commit message (required) |
337
+ | `--include-only <dirs>` | Only commit in specified projects |
338
+ | `--exclude-only <dirs>` | Skip specified projects |
339
+
340
+ ---
341
+
342
+ ### `gogo project create <folder> <url>`
343
+
344
+ Create and initialize a new child repository.
345
+
346
+ ```bash
347
+ gogo project create libs/new-lib git@github.com:org/new-lib.git
348
+ ```
349
+
350
+ This will:
351
+ 1. Create the directory
352
+ 2. Initialize git
353
+ 3. Add the remote origin
354
+ 4. Add the project to `.gogo`
355
+ 5. Add the path to `.gitignore`
356
+
357
+ ---
358
+
359
+ ### `gogo project import <folder> [url]`
360
+
361
+ Import an existing repository as a child project.
362
+
363
+ ```bash
364
+ # Clone and import a remote repository
365
+ gogo project import api git@github.com:org/api.git
366
+
367
+ # Import an existing local directory (reads remote from git)
368
+ gogo project import existing-folder
369
+ ```
370
+
371
+ This will:
372
+ 1. Clone the repository (if URL provided and directory doesn't exist)
373
+ 2. Add the project to `.gogo`
374
+ 3. Add the path to `.gitignore`
375
+
376
+ ---
377
+
378
+ ### `gogo npm install`
379
+
380
+ Run `npm install` in all projects.
381
+
382
+ ```bash
383
+ gogo npm install
384
+ gogo npm i # Alias
385
+ gogo npm install --parallel
386
+ ```
387
+
388
+ | Option | Description |
389
+ |--------|-------------|
390
+ | `--include-only <dirs>` | Only install in specified projects |
391
+ | `--exclude-only <dirs>` | Skip specified projects |
392
+ | `--parallel` | Run in parallel |
393
+ | `--concurrency <n>` | Max parallel installs |
394
+
395
+ ---
396
+
397
+ ### `gogo npm ci`
398
+
399
+ Run `npm ci` in all projects (clean install from lockfile).
400
+
401
+ ```bash
402
+ gogo npm ci
403
+ gogo npm ci --parallel
404
+ ```
405
+
406
+ | Option | Description |
407
+ |--------|-------------|
408
+ | `--include-only <dirs>` | Only run in specified projects |
409
+ | `--exclude-only <dirs>` | Skip specified projects |
410
+ | `--parallel` | Run in parallel |
411
+ | `--concurrency <n>` | Max parallel processes |
412
+
413
+ ---
414
+
415
+ ### `gogo npm link`
416
+
417
+ Create npm links between projects for local development.
418
+
419
+ ```bash
420
+ # Create global npm links for all projects
421
+ gogo npm link
422
+
423
+ # Create symlinks between all interdependent projects
424
+ gogo npm link --all
425
+ ```
426
+
427
+ | Option | Description |
428
+ |--------|-------------|
429
+ | `--all` | Link all projects bidirectionally (symlink dependencies) |
430
+ | `--include-only <dirs>` | Only link specified projects |
431
+ | `--exclude-only <dirs>` | Skip specified projects |
432
+
433
+ ---
434
+
435
+ ### `gogo npm run <script>`
436
+
437
+ Run an npm script in all projects.
438
+
439
+ ```bash
440
+ # Run in all projects
441
+ gogo npm run build
442
+
443
+ # Run in parallel
444
+ gogo npm run test --parallel
445
+
446
+ # Only run if script exists
447
+ gogo npm run lint --if-present
448
+ ```
449
+
450
+ | Option | Description |
451
+ |--------|-------------|
452
+ | `--if-present` | Only run if the script exists in package.json |
453
+ | `--include-only <dirs>` | Only run in specified projects |
454
+ | `--exclude-only <dirs>` | Skip specified projects |
455
+ | `--parallel` | Run in parallel |
456
+ | `--concurrency <n>` | Max parallel processes |
457
+
458
+ ---
459
+
460
+ ## Examples
461
+
462
+ ### Setting Up a New Meta Repository
463
+
464
+ ```bash
465
+ mkdir my-project && cd my-project
466
+ gogo init
467
+ gogo project import backend git@github.com:org/backend.git
468
+ gogo project import frontend git@github.com:org/frontend.git
469
+ gogo project import shared git@github.com:org/shared.git
470
+ gogo npm install --parallel
471
+ ```
472
+
473
+ ### Daily Development Workflow
474
+
475
+ ```bash
476
+ # Start of day: pull all changes
477
+ gogo git pull --parallel
478
+
479
+ # Check status across all repos
480
+ gogo git status
481
+
482
+ # Create feature branch everywhere
483
+ gogo git checkout -b feature/my-feature
484
+
485
+ # Run tests
486
+ gogo npm run test --parallel
487
+
488
+ # Commit changes
489
+ gogo git commit -m "Add feature"
490
+
491
+ # Push changes
492
+ gogo git push
493
+ ```
494
+
495
+ ### Working with Specific Projects
496
+
497
+ ```bash
498
+ # Only work with API and shared libs
499
+ gogo exec "npm test" --include-only api,libs/shared
500
+
501
+ # Exclude documentation from builds
502
+ gogo npm run build --exclude-only docs
503
+
504
+ # Target all libs
505
+ gogo git status --include-pattern "^libs/"
506
+ ```
507
+
508
+ ## Requirements
509
+
510
+ - Bun 1.x or higher
511
+ - Git
512
+
513
+ ## License
514
+
515
+ MIT
package/bin/gogo ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+
3
+ import('../dist/cli.js');
package/dist/cli.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import { Command } from 'commander';
2
+
3
+ declare function createProgram(): Command;
4
+
5
+ export { createProgram };