@wpmoo/odoo 0.8.53 → 0.8.55

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.
Files changed (3) hide show
  1. package/README.md +41 -92
  2. package/dist/cli.js +22 -1
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -4,41 +4,33 @@
4
4
 
5
5
  # WPMoo Odoo
6
6
 
7
- WPMoo Odoo is a development-first CLI for creating and operating Docker Compose
8
- based Odoo environments with source repositories managed as Git submodules.
7
+ WPMoo Odoo is a development-first CLI for creating and operating Docker Compose based Odoo environments with source repositories managed as Git submodules.
9
8
 
10
- It gives Odoo teams a repeatable environment layout, a guided cockpit for daily
11
- work, direct commands for automation, and recovery tools that refresh generated
12
- files without touching product source code.
9
+ It gives Odoo teams a repeatable environment layout, a guided cockpit for daily work, direct commands for automation, and recovery tools that refresh generated files without touching product source code.
10
+
11
+ ## Development Status
12
+
13
+ > [!IMPORTANT]
14
+ > **Pre-1.0 active development:** WPMoo Odoo has not reached `1.0.0` yet. Until the `1.0.0` release, use it as a preview tool for evaluation, local trials, and feedback rather than a dependency for critical production workflows. Setup conventions and command behavior may still change between pre-1.0 releases.
13
15
 
14
16
  ## Why WPMoo Odoo
15
17
 
16
- - Create a local Odoo development environment from a dev repository and one or
17
- more source repositories.
18
- - Keep product source repositories under `odoo/custom/src/private` as Git
19
- submodules pinned to the selected Odoo branch.
20
- - Copy Docker Compose resources from the standalone
21
- `wpmoo-org/odoo-docker-compose` resource instead of embedding large runtime
22
- assets in the TypeScript package.
23
- - Optionally copy project-local Agent Skills from `wpmoo-org/odoo-skills` into
24
- generated environments.
25
- - Use either a guided terminal cockpit or direct CLI commands for the same
26
- lifecycle tasks.
18
+ - Create a local Odoo development environment from a dev repository and one or more source repositories.
19
+ - Keep product source repositories under `odoo/custom/src/private` as Git submodules pinned to the selected Odoo branch.
20
+ - Copy Docker Compose resources from the standalone `wpmoo-org/odoo-docker-compose` resource instead of embedding large runtime assets in the TypeScript package.
21
+ - Optionally copy project-local Agent Skills from `wpmoo-org/odoo-skills` into generated environments.
22
+ - Use either a guided terminal cockpit or direct CLI commands for the same lifecycle tasks.
27
23
 
28
24
  ## Requirements
29
25
 
30
26
  - Node.js `>=20.17`
31
27
  - Git
32
28
  - Docker and Docker Compose for generated environment runtime commands
33
- - GitHub CLI (`gh`) is optional. Use it for repository discovery, repository
34
- creation, and deeper diagnostics.
29
+ - GitHub CLI (`gh`) is optional. Use it for repository discovery, repository creation, and deeper diagnostics.
35
30
 
36
- The wizard currently offers Odoo `19.0`, `18.0`, `17.0`, and `16.0`. The copied
37
- Compose resource must include the matching `docker-compose_<version>.yml` file
38
- for the selected branch.
31
+ The wizard currently offers Odoo `19.0`, `18.0`, `17.0`, and `16.0`. The copied Compose resource must include the matching `docker-compose_<version>.yml` file for the selected branch.
39
32
 
40
- Set up GitHub CLI only when you want WPMoo to discover your personal account and
41
- organizations or create missing repositories from the interactive wizard:
33
+ Set up GitHub CLI only when you want WPMoo to discover your personal account and organizations or create missing repositories from the interactive wizard:
42
34
 
43
35
  ```bash
44
36
  brew install gh
@@ -53,19 +45,13 @@ Run the guided wizard from a workspace directory:
53
45
  npx @wpmoo/odoo
54
46
  ```
55
47
 
56
- If the current directory is not already a WPMoo environment, the CLI opens the
57
- create flow. It asks for the product slug, Odoo version, and environment folder.
58
- Choose any environment folder; the default is `./<product>_dev`.
48
+ If the current directory is not already a WPMoo environment, the CLI opens the create flow. It asks for the product slug, Odoo version, and environment folder. Choose any environment folder; the default is `./<product>_dev`.
59
49
 
60
- After folder selection, connect Git/GitHub to use repository URLs. Choose
61
- local-only setup to skip Git/GitHub connection and source repo prompts. Add
62
- source repositories later from the cockpit (`Repositories` -> `add-repo`) or
63
- `npx @wpmoo/odoo add-repo`.
50
+ After folder selection, connect Git/GitHub to use repository URLs. Choose local-only setup to skip Git/GitHub connection and source repo prompts. Add source repositories later from the cockpit (`Repositories` -> `add-repo`) or `npx @wpmoo/odoo add-repo`.
64
51
 
65
52
  For non-interactive usage with repository URLs:
66
53
 
67
- Direct `create` commands keep the existing repo URL options; use
68
- `--target <path>` to choose a custom folder.
54
+ Direct `create` commands keep the existing repo URL options; use `--target <path>` to choose a custom folder.
69
55
 
70
56
  ```bash
71
57
  npx @wpmoo/odoo create \
@@ -107,8 +93,7 @@ Run the package with no command inside a generated environment:
107
93
  npx @wpmoo/odoo
108
94
  ```
109
95
 
110
- The cockpit starts with a fast environment status summary, then opens a compact
111
- menu designed for repeated local work:
96
+ The cockpit starts with a fast environment status summary, then opens a compact menu designed for repeated local work:
112
97
 
113
98
  ```text
114
99
  Command palette /
@@ -123,18 +108,12 @@ Exit
123
108
 
124
109
  The UI is intentionally practical rather than decorative:
125
110
 
126
- - `Command palette /` searches slash commands such as `/test`, `/logs`,
127
- `/doctor`, and `/safe-reset`.
128
- - Category menus group related tasks for scanability: services, modules,
129
- database, diagnostics, repositories, and maintenance.
111
+ - `Command palette /` searches slash commands such as `/test`, `/logs`, `/doctor`, and `/safe-reset`.
112
+ - Category menus group related tasks for scanability: services, modules, database, diagnostics, repositories, and maintenance.
130
113
  - `Esc` returns from category menus to the top-level cockpit.
131
- - Empty states explain the next action, such as adding a source repo before
132
- selecting a module.
133
- - Risky commands such as stopping services, resetting databases, restoring
134
- snapshots, removing repos, removing modules, and safe reset ask for explicit
135
- confirmation.
136
- - Guided prompts collect common arguments for daily actions, including module
137
- names, database names, test modes, tags, snapshot names, and POT output paths.
114
+ - Empty states explain the next action, such as adding a source repo before selecting a module.
115
+ - Risky commands such as stopping services, resetting databases, restoring snapshots, removing repos, removing modules, and safe reset ask for explicit confirmation.
116
+ - Guided prompts collect common arguments for daily actions, including module names, database names, test modes, tags, snapshot names, and POT output paths.
138
117
 
139
118
  ## Cockpit Command Map
140
119
 
@@ -147,9 +126,7 @@ The UI is intentionally practical rather than decorative:
147
126
  | Repositories | `add-repo`, `remove-repo` |
148
127
  | Maintenance | `safe-reset` |
149
128
 
150
- Every cockpit action maps to a direct command, or to an equivalent management
151
- command such as `/safe-reset` mapping to `reset`, for scripting and repeatable
152
- terminal workflows.
129
+ Every cockpit action maps to a direct command, or to an equivalent management command such as `/safe-reset` mapping to `reset`, for scripting and repeatable terminal workflows.
153
130
 
154
131
  ## Direct Commands
155
132
 
@@ -183,15 +160,11 @@ npx @wpmoo/odoo snapshot devel before-update
183
160
  npx @wpmoo/odoo restore-snapshot before-update devel
184
161
  ```
185
162
 
186
- Daily action commands must be run from a generated environment root containing
187
- `.wpmoo/odoo.json`. They delegate to fixed scripts under `./scripts`; they do
188
- not search parent directories or run arbitrary script names.
163
+ Daily action commands must be run from a generated environment root containing `.wpmoo/odoo.json`. They delegate to fixed scripts under `./scripts`; they do not search parent directories or run arbitrary script names.
189
164
 
190
165
  ## Generated Environment Layout
191
166
 
192
- A generated environment is a separate Git repository, usually named
193
- `<product>_dev`, but the wizard and `--target` can use any folder. Product
194
- source code stays in child source repositories.
167
+ A generated environment is a separate Git repository, usually named `<product>_dev`, but the wizard and `--target` can use any folder. Product source code stays in child source repositories.
195
168
 
196
169
  ```text
197
170
  odoo_sample_module_dev/
@@ -214,15 +187,11 @@ odoo_sample_module_dev/
214
187
  `-- scripts/
215
188
  ```
216
189
 
217
- The metadata file `.wpmoo/odoo.json` records the product slug, selected Odoo
218
- version, dev repo URL, source repos, engine, external resource refs, ports, and
219
- template configuration. Status, doctor, daily actions, and safe reset use that
220
- metadata instead of guessing from the filesystem.
190
+ The metadata file `.wpmoo/odoo.json` records the product slug, selected Odoo version, dev repo URL, source repos, engine, external resource refs, ports, and template configuration. Status, doctor, daily actions, and safe reset use that metadata instead of guessing from the filesystem.
221
191
 
222
192
  ## Daily `./moo` Commands
223
193
 
224
- Generated environments include a local `./moo` dispatcher. It is the shortest
225
- path for everyday Compose and Odoo work:
194
+ Generated environments include a local `./moo` dispatcher. It is the shortest path for everyday Compose and Odoo work:
226
195
 
227
196
  ```bash
228
197
  cp .env.example .env
@@ -245,15 +214,11 @@ cp .env.example .env
245
214
  ./moo resetdb devel sale
246
215
  ```
247
216
 
248
- Use `npx @wpmoo/odoo ...` for package/operator commands such as `create`,
249
- `add-repo`, `remove-repo`, `add-module`, `remove-module`, `status`, `doctor`,
250
- and `reset`. Use `./moo ...` inside a generated environment for local daily
251
- Compose commands.
217
+ Use `npx @wpmoo/odoo ...` for package/operator commands such as `create`, `add-repo`, `remove-repo`, `add-module`, `remove-module`, `status`, `doctor`, and `reset`. Use `./moo ...` inside a generated environment for local daily Compose commands.
252
218
 
253
219
  ## Repository and Module Management
254
220
 
255
- Add a source repository after local-only setup from the cockpit or direct
256
- command:
221
+ Add a source repository after local-only setup from the cockpit or direct command:
257
222
 
258
223
  ```bash
259
224
  npx @wpmoo/odoo add-repo \
@@ -261,8 +226,7 @@ npx @wpmoo/odoo add-repo \
261
226
  --init-empty-repos
262
227
  ```
263
228
 
264
- GitHub CLI is optional for repository setup. When it is available and
265
- authenticated, the interactive flow can:
229
+ GitHub CLI is optional for repository setup. When it is available and authenticated, the interactive flow can:
266
230
 
267
231
  - detect the owner or organization from the current environment;
268
232
  - suggest repository URLs;
@@ -301,8 +265,7 @@ Remove a source repository submodule:
301
265
  npx @wpmoo/odoo remove-repo --repo odoo_sample_module_reports
302
266
  ```
303
267
 
304
- WPMoo refuses to remove a source repo submodule when that submodule has
305
- uncommitted changes.
268
+ WPMoo refuses to remove a source repo submodule when that submodule has uncommitted changes.
306
269
 
307
270
  ## Status, Doctor, and Recovery
308
271
 
@@ -312,9 +275,7 @@ uncommitted changes.
312
275
  npx @wpmoo/odoo status
313
276
  ```
314
277
 
315
- It reports whether the environment is detected, which Odoo version is selected,
316
- how many source repos are configured, how many module candidates are present,
317
- which core files are missing, and the recommended next action.
278
+ It reports whether the environment is detected, which Odoo version is selected, how many source repos are configured, how many module candidates are present, which core files are missing, and the recommended next action.
318
279
 
319
280
  `doctor` performs deeper checks:
320
281
 
@@ -322,22 +283,15 @@ which core files are missing, and the recommended next action.
322
283
  npx @wpmoo/odoo doctor
323
284
  ```
324
285
 
325
- It validates metadata, engine support, selected compose files, daily scripts,
326
- source repo paths, `.env` ports, Docker CLI access, Docker Compose access, Git
327
- submodule state, and GitHub CLI authentication when available.
286
+ It validates metadata, engine support, selected compose files, daily scripts, source repo paths, `.env` ports, Docker CLI access, Docker Compose access, Git submodule state, and GitHub CLI authentication when available.
328
287
 
329
- Safe reset refreshes generated environment files without deleting product source
330
- code:
288
+ Safe reset refreshes generated environment files without deleting product source code:
331
289
 
332
290
  ```bash
333
291
  npx @wpmoo/odoo reset
334
292
  ```
335
293
 
336
- Safe reset updates generated files such as `.wpmoo/odoo.json`, `moo`,
337
- `.gitignore`, `.env.example`, generated docs, compose assets, and optional
338
- Agent Skills. It does not touch source repo folders under
339
- `odoo/custom/src/private`, module source code, Git history, remotes, or
340
- branches.
294
+ Safe reset updates generated files such as `.wpmoo/odoo.json`, `moo`, `.gitignore`, `.env.example`, generated docs, compose assets, and optional Agent Skills. It does not touch source repo folders under `odoo/custom/src/private`, module source code, Git history, remotes, or branches.
341
295
 
342
296
  Recommended recovery pattern:
343
297
 
@@ -350,8 +304,7 @@ npx @wpmoo/odoo doctor
350
304
 
351
305
  ## External Resources
352
306
 
353
- WPMoo Odoo keeps the package small by copying external resources into generated
354
- environments:
307
+ WPMoo Odoo keeps the package small by copying external resources into generated environments:
355
308
 
356
309
  ```text
357
310
  gh:wpmoo-org/odoo-docker-compose
@@ -406,13 +359,11 @@ npm run test:coverage
406
359
  npm run build
407
360
  ```
408
361
 
409
- Generated environment behavior is covered by the operator-facing matrix in
410
- [Generated Environment Verification](docs/generated-environment-verification.md).
362
+ Generated environment behavior is covered by the operator-facing matrix in [Generated Environment Verification](docs/generated-environment-verification.md).
411
363
 
412
364
  ## Release
413
365
 
414
- The normal release path uses the repository helper and GitHub Actions trusted
415
- publishing:
366
+ The normal release path uses the repository helper and GitHub Actions trusted publishing:
416
367
 
417
368
  ```bash
418
369
  npm run release:check
@@ -424,9 +375,7 @@ git tag -a "v$VERSION" -m "Release v$VERSION"
424
375
  git push origin "v$VERSION"
425
376
  ```
426
377
 
427
- If `npm run release:check` bumps `package.json` and `package-lock.json`, commit
428
- and push that version bump first, then rerun the release check before tagging.
429
- Publishing is handled by the `Publish` workflow after the tag is pushed.
378
+ If `npm run release:check` bumps `package.json` and `package-lock.json`, commit and push that version bump first, then rerun the release check before tagging. Publishing is handled by the `Publish` workflow after the tag is pushed.
430
379
 
431
380
  ## Sponsoring
432
381
 
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { confirm, intro, isCancel, note, outro, select, text } from '@clack/prompts';
3
3
  import { realpathSync } from 'node:fs';
4
- import { basename, resolve } from 'node:path';
4
+ import { basename, relative, resolve } from 'node:path';
5
5
  import { fileURLToPath, pathToFileURL } from 'node:url';
6
6
  import { commandFromArgs, isHelpRequested, isVersionRequested, optionsFromArgs, parseArgs, stripInternalFlags, } from './args.js';
7
7
  import { selectCockpitCommandFromPalette } from './cockpit/command-palette.js';
@@ -92,6 +92,25 @@ function booleanOption(values, key, fallback) {
92
92
  return false;
93
93
  throw new Error(`Invalid boolean value for --${key}: ${value}`);
94
94
  }
95
+ function yellow(value) {
96
+ if (!process.stdout.isTTY || process.env.NO_COLOR !== undefined)
97
+ return value;
98
+ return `\u001b[33m${value}\u001b[39m`;
99
+ }
100
+ function shellQuote(value) {
101
+ if (/^[A-Za-z0-9_./:-]+$/.test(value))
102
+ return value;
103
+ return `'${value.replaceAll("'", "'\\''")}'`;
104
+ }
105
+ function renderPostCreateGuidance(target, cwd) {
106
+ const relativeTarget = relative(cwd, target) || '.';
107
+ return yellow([
108
+ 'Environment is ready. Enter the development folder, then run the local WPMoo cockpit:',
109
+ '',
110
+ `cd ${shellQuote(relativeTarget)}`,
111
+ './moo',
112
+ ].join('\n'));
113
+ }
95
114
  function validateRepoName(value) {
96
115
  const normalized = value.trim();
97
116
  if (!normalized)
@@ -674,6 +693,7 @@ export async function runCli(cliArgv = process.argv.slice(2), cwd = process.cwd(
674
693
  const resolvedOptions = await optionsFromPrompts();
675
694
  await ensureGitHubRepositories(resolvedOptions, true);
676
695
  await scaffold(resolvedOptions);
696
+ note(renderPostCreateGuidance(resolvedOptions.target, cwd), 'Next steps');
677
697
  outro(`Created Odoo dev overlay in ${resolvedOptions.target}. Review staged changes, then commit.`);
678
698
  return;
679
699
  }
@@ -803,6 +823,7 @@ export async function runCli(cliArgv = process.argv.slice(2), cwd = process.cwd(
803
823
  console.log(`- ${command}`);
804
824
  return;
805
825
  }
826
+ note(renderPostCreateGuidance(resolvedOptions.target, cwd), 'Next steps');
806
827
  outro(`Created Odoo dev overlay in ${resolvedOptions.target}. Review staged changes, then commit.`);
807
828
  }
808
829
  export function isCliEntrypoint(metaUrl, argvPath = process.argv[1]) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wpmoo/odoo",
3
- "version": "0.8.53",
3
+ "version": "0.8.55",
4
4
  "description": "WPMoo Odoo lifecycle tooling for development, staging, and production workflows.",
5
5
  "type": "module",
6
6
  "repository": {