@wpmoo/toolkit 0.9.5 → 0.9.7
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 +95 -443
- package/dist/cli.js +417 -35
- package/dist/cockpit/command-registry.js +5 -1
- package/dist/cockpit/daily-prompts.js +30 -11
- package/dist/cockpit/menu.js +4 -1
- package/dist/cockpit/module-action-menu.js +40 -0
- package/dist/cockpit/module-browser.js +117 -0
- package/dist/daily-actions.js +40 -3
- package/dist/databases.js +58 -0
- package/dist/help.js +4 -2
- package/dist/menu-navigation.js +2 -2
- package/dist/module-actions.js +50 -1
- package/dist/prompts/index.js +69 -18
- package/dist/system-prerequisites.js +189 -0
- package/dist/templates.js +44 -25
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,373 +1,152 @@
|
|
|
1
1
|

|
|
2
2
|
|
|
3
|
-
[](https://github.com/wpmoo-org/wpmoo-odoo/actions/workflows/ci.yml) [](https://github.com/wpmoo-org/wpmoo-odoo) [](https://www.npmjs.com/package/@wpmoo/odoo) [](https://codecov.io/gh/wpmoo-org/wpmoo-odoo) [](LICENSE) [](https://github.com/wpmoo-org/wpmoo-odoo) [](https://www.buymeacoffee.com/cangir) [](https://www.patreon.com/wpmoo)
|
|
4
4
|
|
|
5
5
|
# WPMoo Toolkit
|
|
6
6
|
|
|
7
|
-
WPMoo Toolkit is a
|
|
7
|
+
WPMoo Toolkit is a free, MIT-licensed CLI for creating and operating repeatable Docker Compose based Odoo development environments.
|
|
8
8
|
|
|
9
|
-
It
|
|
9
|
+
It is built for the everyday moments that tend to slow Odoo teams down: setting up a clean environment, keeping source repositories in a known layout, starting services, updating modules, testing changes, taking snapshots, restoring a database, and recovering generated files without touching product source code.
|
|
10
10
|
|
|
11
11
|
WPMoo Toolkit is an independent project and is not affiliated with, endorsed by, or sponsored by Odoo S.A. Odoo is a trademark of Odoo S.A.
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## Why WPMoo Exists
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
Odoo development has good building blocks. Docker Compose is familiar. OCA conventions are strong. Projects like Doodba and odoo.build have helped many teams think more clearly about Odoo infrastructure.
|
|
16
|
+
|
|
17
|
+
What we kept missing was a smaller, local-first workflow tool.
|
|
17
18
|
|
|
18
|
-
|
|
19
|
+
We wanted a generated development repository that stayed boring and recoverable. We wanted product source code to live in its own Git repositories, not be mixed with disposable runtime files. We wanted a cockpit that remembered the daily Odoo tasks developers actually run, without asking everyone to become an infrastructure specialist just to update a module or restore a snapshot.
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
-
|
|
21
|
+
WPMoo is that layer. It does not try to replace the whole ecosystem. It gives an Odoo team a practical starting point, a stable folder layout, and a safer daily workflow.
|
|
22
|
+
|
|
23
|
+
## What It Solves
|
|
24
|
+
|
|
25
|
+
- Creates a repeatable Odoo development environment from a product name, Odoo version, and one or more source repositories.
|
|
26
|
+
- Keeps Odoo source repositories under `private`, `oca`, or `external` categories as Git submodules in `odoo/custom/src/`.
|
|
27
|
+
- Provides a guided terminal cockpit for services, modules, database work, diagnostics, repository management, and maintenance.
|
|
28
|
+
- Includes direct commands for automation and CI-friendly terminal workflows.
|
|
29
|
+
- Adds recovery tools such as `status`, `doctor`, `snapshot`, `restore-snapshot`, and safe reset.
|
|
30
|
+
- Refreshes generated environment files without deleting product source code.
|
|
31
|
+
|
|
32
|
+
## Development Status
|
|
33
|
+
|
|
34
|
+
> [!IMPORTANT]
|
|
35
|
+
> WPMoo Toolkit is still pre-1.0. Use it for evaluation, local trials, and feedback before relying on it for critical production workflows. Setup conventions and command behavior may still change before `1.0.0`.
|
|
25
36
|
|
|
26
37
|
## Prerequisites
|
|
27
38
|
|
|
28
39
|
- Node.js `20.17+`
|
|
29
40
|
- Git
|
|
30
|
-
- Docker
|
|
31
|
-
-
|
|
41
|
+
- Docker and Docker Compose for generated environment runtime commands
|
|
42
|
+
- Optional: GitHub CLI (`gh`) when you want setup to inspect or create GitHub repositories
|
|
32
43
|
|
|
33
|
-
|
|
34
|
-
brew install gh
|
|
35
|
-
gh auth login
|
|
36
|
-
```
|
|
44
|
+
Before environment setup starts, WPMoo checks Git, Docker, Docker Compose, and the Docker Engine. If a required tool is missing, the wizard stops before asking setup questions, shows official download links inline with the missing tools, and lets you check again or exit with `Ctrl+C`. Install the missing tools, restart your terminal if PATH changed, start Docker Desktop, then run `npx @wpmoo/toolkit` again.
|
|
37
45
|
|
|
38
|
-
|
|
39
|
-
|
|
46
|
+
```bash
|
|
47
|
+
brew install gh
|
|
48
|
+
gh auth login
|
|
49
|
+
```
|
|
40
50
|
|
|
41
|
-
|
|
42
|
-
environments now use the compact compose layout (`compose.yaml` with
|
|
43
|
-
`compose/<env>.yaml` overlays). Legacy root-level
|
|
44
|
-
`docker-compose_<version>.yml` layouts are still supported for compatibility.
|
|
51
|
+
GitHub CLI (`gh`) is optional. WPMoo can run local-only and source repositories can be added later.
|
|
45
52
|
|
|
46
|
-
## Quick
|
|
53
|
+
## Quick Setup
|
|
47
54
|
|
|
48
|
-
Run the guided wizard from
|
|
55
|
+
Run the guided wizard from the workspace where you keep Odoo projects:
|
|
49
56
|
|
|
50
57
|
```bash
|
|
51
58
|
npx @wpmoo/toolkit
|
|
52
59
|
```
|
|
53
60
|
|
|
54
|
-
Short
|
|
61
|
+
Short aliases are also available:
|
|
55
62
|
|
|
56
63
|
```bash
|
|
57
64
|
npx wpmoo
|
|
65
|
+
npx @wpmoo/odoo
|
|
66
|
+
npx @wpmoo/odoo-dev
|
|
58
67
|
```
|
|
59
68
|
|
|
60
|
-
Legacy package paths `npx @wpmoo/odoo` and `npx @wpmoo/odoo-dev` remain
|
|
61
|
-
available as compatibility redirects to `@wpmoo/toolkit`.
|
|
69
|
+
Legacy package paths `npx @wpmoo/odoo` and `npx @wpmoo/odoo-dev` remain available for compatibility.
|
|
62
70
|
|
|
63
|
-
|
|
71
|
+
When the current directory is not already a WPMoo environment, the CLI opens the create flow. It asks for a product slug, Odoo version, and environment folder. The default environment folder is `./<product>_dev`.
|
|
64
72
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
For non-interactive usage with repository URLs:
|
|
68
|
-
|
|
69
|
-
Direct `create` commands keep the existing repo URL options; use `--target <path>` to choose a custom folder.
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
npx @wpmoo/toolkit create \
|
|
73
|
-
--product odoo_sample_module \
|
|
74
|
-
--odoo-version 19.0 \
|
|
75
|
-
--dev-repo-url https://github.com/example-org/odoo_sample_module_dev.git \
|
|
76
|
-
--source-repo-url https://github.com/example-org/odoo_sample_module.git \
|
|
77
|
-
--init-empty-repos
|
|
78
|
-
```
|
|
73
|
+
Choose any environment folder; the default is `./<product>_dev`. 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/toolkit add-repo`. Direct `create` commands keep the existing repo URL options; use `--target <path>` to choose a custom folder.
|
|
79
74
|
|
|
80
|
-
|
|
75
|
+
After setup, enter the generated environment and open the cockpit:
|
|
81
76
|
|
|
82
77
|
```bash
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
--dev-repo-url https://github.com/example-org/odoo_sample_module_dev.git \
|
|
86
|
-
--source-repo-url https://github.com/example-org/odoo_sample_module.git \
|
|
87
|
-
--source-addons odoo_sample_module,odoo_sample_module_portal \
|
|
88
|
-
--source-repo-url git@github.com:example-org/odoo_sample_module_reports.git \
|
|
89
|
-
--source-path odoo_sample_module_reports \
|
|
90
|
-
--source-addons odoo_sample_module_reports
|
|
78
|
+
cd <product>_dev
|
|
79
|
+
./moo
|
|
91
80
|
```
|
|
92
81
|
|
|
93
|
-
|
|
82
|
+
For non-interactive setup:
|
|
94
83
|
|
|
95
84
|
```bash
|
|
96
85
|
npx @wpmoo/toolkit create \
|
|
97
86
|
--product odoo_sample_module \
|
|
87
|
+
--odoo-version 19.0 \
|
|
98
88
|
--dev-repo-url https://github.com/example-org/odoo_sample_module_dev.git \
|
|
99
89
|
--source-repo-url https://github.com/example-org/odoo_sample_module.git \
|
|
100
|
-
--
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
## The Cockpit
|
|
104
|
-
|
|
105
|
-
Run the package with no command inside a generated environment:
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
npx @wpmoo/toolkit
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
The cockpit starts with a fast environment status summary, then opens a compact menu designed for repeated local work:
|
|
112
|
-
|
|
113
|
-
```text
|
|
114
|
-
Command palette /
|
|
115
|
-
Services
|
|
116
|
-
Modules
|
|
117
|
-
Database
|
|
118
|
-
Diagnostics
|
|
119
|
-
Repositories
|
|
120
|
-
Maintenance
|
|
121
|
-
Exit
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
The UI is intentionally practical rather than decorative:
|
|
125
|
-
|
|
126
|
-
- `Command palette /` searches slash commands such as `/test`, `/logs`, `/doctor`, and `/safe-reset`.
|
|
127
|
-
- Category menus group related tasks for scanability: services, modules, database, diagnostics, repositories, and maintenance.
|
|
128
|
-
- `Esc` returns from category menus to the top-level cockpit.
|
|
129
|
-
- Empty states explain the next action, such as adding a source repo before selecting a module.
|
|
130
|
-
- Risky commands such as stopping services, resetting databases, restoring snapshots, removing repos, removing modules, and safe reset ask for explicit confirmation.
|
|
131
|
-
- Guided prompts collect common arguments for daily actions, including module names, database names, test modes, tags, snapshot names, and POT output paths.
|
|
132
|
-
|
|
133
|
-
## Cockpit Command Map
|
|
134
|
-
|
|
135
|
-
| Category | Commands |
|
|
136
|
-
| --- | --- |
|
|
137
|
-
| Services | `start`, `stop`, `restart`, `logs`, `shell` |
|
|
138
|
-
| Modules | `install`, `update`, `test`, `lint`, `pot`, `add-module`, `remove-module` |
|
|
139
|
-
| Database | `psql`, `snapshot`, `restore-snapshot`, `resetdb` |
|
|
140
|
-
| Diagnostics | `status`, `doctor` |
|
|
141
|
-
| Repositories | `add-repo`, `remove-repo` |
|
|
142
|
-
| Maintenance | `safe-reset` |
|
|
143
|
-
|
|
144
|
-
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.
|
|
145
|
-
|
|
146
|
-
## Direct Commands
|
|
147
|
-
|
|
148
|
-
```bash
|
|
149
|
-
npx @wpmoo/toolkit --help
|
|
150
|
-
npx @wpmoo/toolkit --version
|
|
151
|
-
|
|
152
|
-
npx @wpmoo/toolkit status
|
|
153
|
-
npx @wpmoo/toolkit status --json
|
|
154
|
-
npx @wpmoo/toolkit doctor
|
|
155
|
-
npx @wpmoo/toolkit doctor --json
|
|
156
|
-
npx @wpmoo/toolkit doctor --fix
|
|
157
|
-
npx @wpmoo/toolkit source list --json
|
|
158
|
-
npx @wpmoo/toolkit add-repo --repo-url https://github.com/example-org/odoo_sample_module_reports.git
|
|
159
|
-
npx @wpmoo/toolkit remove-repo --repo odoo_sample_module_reports
|
|
160
|
-
npx @wpmoo/toolkit add-module --repo odoo_sample_module --module odoo_sample_module_base --source-type private
|
|
161
|
-
npx @wpmoo/toolkit remove-module --repo odoo_sample_module --module odoo_sample_module_base --source-type private
|
|
162
|
-
npx @wpmoo/toolkit reset --dry-run
|
|
163
|
-
npx @wpmoo/toolkit reset
|
|
164
|
-
|
|
165
|
-
npx @wpmoo/toolkit start
|
|
166
|
-
npx @wpmoo/toolkit stop
|
|
167
|
-
npx @wpmoo/toolkit restart
|
|
168
|
-
npx @wpmoo/toolkit logs odoo
|
|
169
|
-
npx @wpmoo/toolkit shell
|
|
170
|
-
npx @wpmoo/toolkit psql postgres
|
|
171
|
-
|
|
172
|
-
npx @wpmoo/toolkit install sale devel
|
|
173
|
-
npx @wpmoo/toolkit update sale devel
|
|
174
|
-
npx @wpmoo/toolkit test sale --db devel --mode update --tags /sale
|
|
175
|
-
npx @wpmoo/toolkit lint
|
|
176
|
-
npx @wpmoo/toolkit pot sale devel i18n/sale.pot
|
|
177
|
-
|
|
178
|
-
npx @wpmoo/toolkit resetdb devel sale
|
|
179
|
-
npx @wpmoo/toolkit snapshot devel before-update
|
|
180
|
-
npx @wpmoo/toolkit restore-snapshot --dry-run before-update devel
|
|
181
|
-
npx @wpmoo/toolkit restore-snapshot before-update devel
|
|
90
|
+
--init-empty-repos
|
|
182
91
|
```
|
|
183
92
|
|
|
184
|
-
|
|
93
|
+
## Main Cockpit Menu
|
|
185
94
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
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.
|
|
95
|
+
The cockpit is the daily workspace. It starts with environment status and then shows a compact menu:
|
|
189
96
|
|
|
190
97
|
```text
|
|
191
|
-
|
|
192
|
-
|--
|
|
193
|
-
|
|
|
194
|
-
|--
|
|
195
|
-
|--
|
|
196
|
-
|--
|
|
197
|
-
|--
|
|
198
|
-
|--
|
|
199
|
-
|
|
|
200
|
-
|
|
201
|
-
|
|
|
202
|
-
|--
|
|
203
|
-
|
|
|
204
|
-
|
|
|
205
|
-
|--
|
|
206
|
-
| |--
|
|
207
|
-
| `--
|
|
208
|
-
|--
|
|
209
|
-
|
|
|
210
|
-
|
|
|
211
|
-
|--
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
|
215
|
-
|
|
|
216
|
-
|
|
217
|
-
|
|
|
218
|
-
`--
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
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.
|
|
226
|
-
|
|
227
|
-
## Daily `./moo` Commands
|
|
228
|
-
|
|
229
|
-
Generated environments include a local `./moo` dispatcher. It is the shortest path for everyday Compose and Odoo work:
|
|
98
|
+
WPMoo Cockpit
|
|
99
|
+
|-- Command palette /
|
|
100
|
+
| |-- search commands such as /test, /logs, /doctor, /safe-reset
|
|
101
|
+
|-- Services
|
|
102
|
+
| |-- start
|
|
103
|
+
| |-- stop
|
|
104
|
+
| |-- restart
|
|
105
|
+
| |-- logs
|
|
106
|
+
| `-- shell
|
|
107
|
+
|-- Modules
|
|
108
|
+
| |-- install
|
|
109
|
+
| |-- update
|
|
110
|
+
| |-- test
|
|
111
|
+
| |-- lint
|
|
112
|
+
| |-- pot
|
|
113
|
+
| |-- add-module
|
|
114
|
+
| `-- remove-module
|
|
115
|
+
|-- Database
|
|
116
|
+
| |-- psql
|
|
117
|
+
| |-- snapshot
|
|
118
|
+
| |-- restore-snapshot
|
|
119
|
+
| `-- resetdb
|
|
120
|
+
|-- Diagnostics
|
|
121
|
+
| |-- status
|
|
122
|
+
| `-- doctor
|
|
123
|
+
|-- Repositories
|
|
124
|
+
| |-- add-repo
|
|
125
|
+
| `-- remove-repo
|
|
126
|
+
|-- Maintenance
|
|
127
|
+
| `-- safe-reset
|
|
128
|
+
`-- Exit
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Every cockpit action maps to a direct command, so the same workflow can be used interactively or scripted:
|
|
230
132
|
|
|
231
133
|
```bash
|
|
232
|
-
cp .env.example .env
|
|
233
|
-
|
|
234
134
|
./moo start
|
|
235
135
|
./moo logs odoo
|
|
236
|
-
./moo
|
|
237
|
-
./moo
|
|
238
|
-
./moo restart
|
|
239
|
-
./moo stop
|
|
240
|
-
|
|
241
|
-
./moo install sale devel
|
|
242
|
-
./moo update sale devel
|
|
243
|
-
./moo test sale --db devel --mode update --tags /sale
|
|
244
|
-
./moo lint
|
|
245
|
-
./moo pot sale devel i18n/sale.pot
|
|
246
|
-
|
|
136
|
+
./moo update sale
|
|
137
|
+
./moo test sale
|
|
247
138
|
./moo snapshot devel before-update
|
|
248
139
|
./moo restore-snapshot --dry-run before-update devel
|
|
249
|
-
./moo restore-snapshot before-update devel
|
|
250
|
-
./moo resetdb devel sale
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
`restore-snapshot --dry-run` validates the selected snapshot and prints the
|
|
254
|
-
restore plan without changing the database or filestore. Generated environments
|
|
255
|
-
also support `WPMOO_SNAPSHOT_RETENTION_COUNT` for pruning old snapshot files.
|
|
256
|
-
When `WPMOO_ENV=stage` or `WPMOO_ENV=prod`, destructive database actions such
|
|
257
|
-
as `resetdb` and real `restore-snapshot` require `WPMOO_ALLOW_DESTRUCTIVE=1`.
|
|
258
|
-
|
|
259
|
-
Use `npx @wpmoo/toolkit ...` 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.
|
|
260
|
-
|
|
261
|
-
## Repository and Module Management
|
|
262
|
-
|
|
263
|
-
Add a source repository after local-only setup from the cockpit or direct command:
|
|
264
|
-
|
|
265
|
-
```bash
|
|
266
|
-
npx @wpmoo/toolkit add-repo \
|
|
267
|
-
--repo-url https://github.com/example-org/odoo_sample_module_reports.git \
|
|
268
|
-
--init-empty-repos
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
Pin source repositories to dedicated source directories:
|
|
272
|
-
|
|
273
|
-
```bash
|
|
274
|
-
npx @wpmoo/toolkit add-repo \
|
|
275
|
-
--repo-url https://github.com/OCA/sale-workflow.git \
|
|
276
|
-
--source-type oca
|
|
277
|
-
|
|
278
|
-
npx @wpmoo/toolkit add-repo \
|
|
279
|
-
--repo-url https://github.com/example-org/odoo_external_tool.git \
|
|
280
|
-
--source-type external
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
GitHub CLI is optional for repository setup. When it is available and authenticated, the interactive flow can:
|
|
284
|
-
|
|
285
|
-
- detect the owner or organization from the current environment;
|
|
286
|
-
- suggest repository URLs;
|
|
287
|
-
- check whether the repository is accessible;
|
|
288
|
-
- create inaccessible repositories after confirmation;
|
|
289
|
-
- initialize empty repositories with the selected Odoo branch.
|
|
290
|
-
|
|
291
|
-
Add a minimal Odoo module skeleton to a source repository:
|
|
292
|
-
|
|
293
|
-
For module actions, `--source-type` selects the source directory (`private`, `oca`, or `external`). Default is `private`.
|
|
294
|
-
|
|
295
|
-
```bash
|
|
296
|
-
npx @wpmoo/toolkit add-module \
|
|
297
|
-
--repo odoo_sample_module \
|
|
298
|
-
--module odoo_sample_module_base \
|
|
299
|
-
--source-type oca
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
Remove a module registration while keeping files:
|
|
303
|
-
|
|
304
|
-
```bash
|
|
305
|
-
npx @wpmoo/toolkit remove-module \
|
|
306
|
-
--repo odoo_sample_module \
|
|
307
|
-
--module odoo_sample_module_base \
|
|
308
|
-
--source-type oca
|
|
309
140
|
```
|
|
310
141
|
|
|
311
|
-
|
|
142
|
+
Module source actions also have direct commands. Default is `private`; pass `--source-type oca` or `--source-type external` for non-private source repositories:
|
|
312
143
|
|
|
313
144
|
```bash
|
|
314
|
-
npx @wpmoo/toolkit
|
|
315
|
-
|
|
316
|
-
--module odoo_sample_module_base \
|
|
317
|
-
--delete-files
|
|
145
|
+
npx @wpmoo/toolkit add-module --repo sale-workflow --module sale_order_line_no_discount --source-type oca
|
|
146
|
+
npx @wpmoo/toolkit remove-module --repo sale-workflow --module sale_order_line_no_discount --source-type oca
|
|
318
147
|
```
|
|
319
148
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
```bash
|
|
323
|
-
npx @wpmoo/toolkit remove-repo --repo odoo_sample_module_reports
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
WPMoo refuses to remove a source repo submodule when that submodule has uncommitted changes.
|
|
327
|
-
|
|
328
|
-
Generated environments also keep a deterministic source manifest at
|
|
329
|
-
`odoo/custom/manifests/sources.yaml`. It mirrors source submodules from
|
|
330
|
-
`.wpmoo/odoo.json` and `.gitmodules`, including source type, path, URL, branch,
|
|
331
|
-
and addon boundaries.
|
|
332
|
-
|
|
333
|
-
Inspect configured sources:
|
|
334
|
-
|
|
335
|
-
```bash
|
|
336
|
-
npx @wpmoo/toolkit source list
|
|
337
|
-
npx @wpmoo/toolkit source list --json
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
Regenerate the manifest and metadata from the current metadata/gitmodule state:
|
|
341
|
-
|
|
342
|
-
```bash
|
|
343
|
-
npx @wpmoo/toolkit source sync
|
|
344
|
-
npx @wpmoo/toolkit source sync --json
|
|
345
|
-
```
|
|
346
|
-
|
|
347
|
-
`source add` and `source remove` are direct aliases for the same repository
|
|
348
|
-
operations:
|
|
349
|
-
|
|
350
|
-
```bash
|
|
351
|
-
npx @wpmoo/toolkit source add \
|
|
352
|
-
--repo-url https://github.com/OCA/server-tools.git \
|
|
353
|
-
--source-type oca
|
|
354
|
-
|
|
355
|
-
npx @wpmoo/toolkit source remove --repo server-tools --source-type oca
|
|
356
|
-
```
|
|
357
|
-
|
|
358
|
-
## Status, Doctor, and Recovery
|
|
359
|
-
|
|
360
|
-
`status` is fast and offline. It reads local metadata and files only:
|
|
361
|
-
|
|
362
|
-
```bash
|
|
363
|
-
npx @wpmoo/toolkit status
|
|
364
|
-
npx @wpmoo/toolkit status --json
|
|
365
|
-
```
|
|
366
|
-
|
|
367
|
-
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.
|
|
368
|
-
|
|
369
|
-
For automation and VS Code cockpit integration, all of these commands also support
|
|
370
|
-
`--json`:
|
|
149
|
+
For automation and VS Code cockpit integration, selected commands support JSON output:
|
|
371
150
|
|
|
372
151
|
```bash
|
|
373
152
|
npx @wpmoo/toolkit status --json
|
|
@@ -378,143 +157,16 @@ npx @wpmoo/toolkit doctor --json
|
|
|
378
157
|
|
|
379
158
|
JSON output is optional; human-readable output remains the default.
|
|
380
159
|
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
```bash
|
|
384
|
-
npx @wpmoo/toolkit doctor
|
|
385
|
-
```
|
|
386
|
-
|
|
387
|
-
It validates metadata, engine support, selected compose files, source repo paths,
|
|
388
|
-
source manifest consistency, daily scripts, `.env` settings, Docker CLI access,
|
|
389
|
-
Docker Compose access, GitHub CLI authentication when available, and PostgreSQL
|
|
390
|
-
18 compatibility in compose mount targets (for mounts to
|
|
391
|
-
`/var/lib/postgresql/data` or `/var/lib/postgresql/18/docker`).
|
|
392
|
-
|
|
393
|
-
Use `doctor --fix` for safe file-level repairs. It can normalize PostgreSQL 18
|
|
394
|
-
mount targets and regenerate `odoo/custom/manifests/sources.yaml` from
|
|
395
|
-
metadata plus `.gitmodules`, then it runs doctor again and reports any remaining
|
|
396
|
-
manual issues.
|
|
397
|
-
|
|
398
|
-
Safe reset refreshes generated environment files without deleting product source code:
|
|
399
|
-
|
|
400
|
-
```bash
|
|
401
|
-
npx @wpmoo/toolkit reset --dry-run
|
|
402
|
-
npx @wpmoo/toolkit reset
|
|
403
|
-
```
|
|
404
|
-
|
|
405
|
-
Safe reset updates generated files such as `.wpmoo/odoo.json`, `moo`,
|
|
406
|
-
`.gitignore`, `.env.example`, generated docs, compose assets, and optional
|
|
407
|
-
Agent Skills. Compose overlays like `compose.yaml` and `compose/dev.yaml` are
|
|
408
|
-
also refreshed from the current compose template source.
|
|
409
|
-
|
|
410
|
-
Use `reset --dry-run` first when you want a deterministic preview of refreshed
|
|
411
|
-
files and cleanup warnings without writing to the environment.
|
|
412
|
-
|
|
413
|
-
It does not touch source repo folders under
|
|
414
|
-
`odoo/custom/src/private`, module source code, Git history, remotes, or
|
|
415
|
-
branches. It also preserves local runtime artifacts and custom source layout
|
|
416
|
-
content:
|
|
417
|
-
|
|
418
|
-
- `.env`, `data`, and `backups`
|
|
419
|
-
- `odoo/custom/src/oca`, `odoo/custom/src/external`, `odoo/custom/patches`,
|
|
420
|
-
`odoo/custom/manifests`, and their existing contents
|
|
421
|
-
|
|
422
|
-
Legacy compose template paths from older scaffolds can remain
|
|
423
|
-
(`docs/assets/`, `test/`, `.github/`) until you remove them manually.
|
|
160
|
+
## Documentation
|
|
424
161
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
./moo snapshot devel before-reset
|
|
429
|
-
npx @wpmoo/toolkit reset --dry-run
|
|
430
|
-
npx @wpmoo/toolkit reset
|
|
431
|
-
npx @wpmoo/toolkit doctor --fix
|
|
432
|
-
./moo restore-snapshot --dry-run before-reset devel
|
|
433
|
-
./moo restore-snapshot before-reset devel
|
|
434
|
-
```
|
|
435
|
-
|
|
436
|
-
## External Resources
|
|
437
|
-
|
|
438
|
-
WPMoo Toolkit keeps the package small by copying external resources into generated environments:
|
|
439
|
-
|
|
440
|
-
```text
|
|
441
|
-
gh:wpmoo-org/odoo-docker-compose
|
|
442
|
-
gh:wpmoo-org/odoo-skills
|
|
443
|
-
```
|
|
444
|
-
|
|
445
|
-
Use the default resources:
|
|
446
|
-
|
|
447
|
-
```bash
|
|
448
|
-
npx @wpmoo/toolkit create \
|
|
449
|
-
--product odoo_sample_module \
|
|
450
|
-
--source-repo-url https://github.com/example-org/odoo_sample_module.git \
|
|
451
|
-
--agent-skills-template
|
|
452
|
-
```
|
|
453
|
-
|
|
454
|
-
Pin external resource refs:
|
|
455
|
-
|
|
456
|
-
```bash
|
|
457
|
-
npx @wpmoo/toolkit create \
|
|
458
|
-
--product odoo_sample_module \
|
|
459
|
-
--source-repo-url https://github.com/example-org/odoo_sample_module.git \
|
|
460
|
-
--compose-template-ref v0.1.0 \
|
|
461
|
-
--agent-skills-template \
|
|
462
|
-
--agent-skills-template-ref v0.1.0
|
|
463
|
-
```
|
|
464
|
-
|
|
465
|
-
Use local resource clones while developing the resource packages:
|
|
466
|
-
|
|
467
|
-
```bash
|
|
468
|
-
git clone https://github.com/wpmoo-org/odoo-docker-compose ../odoo-docker-compose
|
|
469
|
-
git clone https://github.com/wpmoo-org/odoo-skills ../odoo-skills
|
|
470
|
-
|
|
471
|
-
npx @wpmoo/toolkit create \
|
|
472
|
-
--engine compose \
|
|
473
|
-
--compose-template-url ../odoo-docker-compose \
|
|
474
|
-
--agent-skills-template \
|
|
475
|
-
--agent-skills-template-url ../odoo-skills \
|
|
476
|
-
--product odoo_sample_module \
|
|
477
|
-
--source-repo-url https://github.com/example-org/odoo_sample_module.git
|
|
478
|
-
```
|
|
479
|
-
|
|
480
|
-
More detail: [External Resources](docs/external-resources.md).
|
|
481
|
-
|
|
482
|
-
## Verification
|
|
483
|
-
|
|
484
|
-
Run local package checks from the repository root:
|
|
485
|
-
|
|
486
|
-
```bash
|
|
487
|
-
npm run typecheck
|
|
488
|
-
npm test
|
|
489
|
-
npm run test:coverage
|
|
490
|
-
npm run build
|
|
491
|
-
```
|
|
492
|
-
|
|
493
|
-
Generated environment behavior is covered by the operator-facing matrix in [Generated Environment Verification](docs/generated-environment-verification.md).
|
|
494
|
-
|
|
495
|
-
## Release
|
|
496
|
-
|
|
497
|
-
The normal release path uses the repository helper and GitHub Actions trusted publishing:
|
|
498
|
-
|
|
499
|
-
```bash
|
|
500
|
-
npm run release:check
|
|
501
|
-
npm run typecheck
|
|
502
|
-
npm test
|
|
503
|
-
npm run build
|
|
504
|
-
VERSION="$(node -p "require('./package.json').version")"
|
|
505
|
-
git tag -a "v$VERSION" -m "Release v$VERSION"
|
|
506
|
-
git push origin "v$VERSION"
|
|
507
|
-
```
|
|
162
|
+
- [External Resources](docs/external-resources.md)
|
|
163
|
+
- [Generated Environment Verification](docs/generated-environment-verification.md)
|
|
164
|
+
- Public documentation site: <https://wpmoo.org>
|
|
508
165
|
|
|
509
|
-
|
|
166
|
+
## License
|
|
510
167
|
|
|
511
|
-
|
|
168
|
+
WPMoo Toolkit is free software released under the [MIT License](LICENSE).
|
|
512
169
|
|
|
513
|
-
|
|
170
|
+
## Acknowledgements
|
|
514
171
|
|
|
515
|
-
|
|
516
|
-
<img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me a Coffee" width="250">
|
|
517
|
-
</a>
|
|
518
|
-
<a href="https://www.patreon.com/wpmoo">
|
|
519
|
-
<img src="docs/assets/patreon-donate.png" alt="Support WPMoo on Patreon" width="250">
|
|
520
|
-
</a>
|
|
172
|
+
WPMoo builds on the work of many open source projects and communities. Thanks to the maintainers and contributors behind Odoo, OCA, Docker Compose, TypeScript, Node.js, Inquirer, Vitest, VitePress, GitHub CLI, npm, and the wider Odoo developer ecosystem.
|