odx-cli 0.0.4__py3-none-win_amd64.whl

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.
Binary file
@@ -0,0 +1,256 @@
1
+ Metadata-Version: 2.4
2
+ Name: odx-cli
3
+ Version: 0.0.4
4
+ Classifier: Development Status :: 2 - Pre-Alpha
5
+ Classifier: Environment :: Console
6
+ Classifier: Framework :: Odoo
7
+ Classifier: Intended Audience :: Developers
8
+ Classifier: Programming Language :: Rust
9
+ Classifier: Topic :: Software Development :: Build Tools
10
+ License-File: LICENSE
11
+ Summary: Rust-native workspace manager for Odoo projects
12
+ Keywords: odoo,oca,git,workspace,cli
13
+ Home-Page: https://github.com/getfluvo/odx
14
+ Author: Strategic Efficiency B.V.
15
+ License-Expression: MIT
16
+ Requires-Python: >=3.10
17
+ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
18
+ Project-URL: Documentation, https://odx.readthedocs.io/
19
+ Project-URL: Homepage, https://github.com/getfluvo/odx
20
+ Project-URL: Issues, https://github.com/getfluvo/odx/issues
21
+
22
+ <p align="center">
23
+ <img src="https://raw.githubusercontent.com/getfluvo/odx/main/docs/_static/logo.svg" alt="odx logo" width="160">
24
+ </p>
25
+
26
+ <h1 align="center">odx</h1>
27
+
28
+ <p align="center">
29
+ <a href="https://pypi.org/project/odx-cli/"><img src="https://img.shields.io/pypi/v/odx-cli?style=flat-square&logo=pypi&logoColor=white&label=PyPI&color=ef662f" alt="PyPI"></a>
30
+ <a href="https://crates.io/crates/odx-cli"><img src="https://img.shields.io/crates/v/odx-cli?style=flat-square&logo=rust&logoColor=white&label=crates.io&color=ef662f" alt="crates.io"></a>
31
+ <a href="https://github.com/getfluvo/odx/actions/workflows/tests.yml"><img src="https://img.shields.io/github/actions/workflow/status/getfluvo/odx/tests.yml?branch=main&style=flat-square&logo=githubactions&logoColor=white&label=tests" alt="Tests"></a>
32
+ <a href="https://odx.readthedocs.io/"><img src="https://img.shields.io/readthedocs/odx?style=flat-square&logo=readthedocs&logoColor=white&label=docs" alt="Documentation"></a>
33
+ <a href="https://github.com/getfluvo/odx/blob/main/LICENSE"><img src="https://img.shields.io/github/license/getfluvo/odx?style=flat-square&color=7e5a8c" alt="License: MIT"></a>
34
+ </p>
35
+
36
+ <!-- start-docs -->
37
+
38
+ **Odoo Developer eXtension**: a Rust CLI for managing Odoo projects from a
39
+ single `[tool.odx]` table in `pyproject.toml`. The command is `odx`; the
40
+ package is `odx-cli`.
41
+
42
+ odx aggregates unmerged pull requests on top of upstream Odoo and OCA
43
+ repositories, pins the result in a lockfile, vaults the pinned commits on a
44
+ private mirror so they cannot disappear, refuses to follow PR heads whose CI
45
+ is red, prepares a local development workspace, promotes exactly tested pins
46
+ between environments, and analyzes the project (migration scripts, dependency
47
+ drift, upstream merge status, portable fixes on other series, upgrade
48
+ readiness). The same engine is available as a drop-in replacement for
49
+ git-aggregator's `gitaggregate`: `odx git-aggregate`, or the standalone
50
+ `git-aggregate-rs` package.
51
+
52
+ > Status: pre-alpha. Working today: the `[tool.odx]` configuration,
53
+ > `odx import`/`export`/`add`/`drop`, `odx aggregate`, `odx lock` (with the vault and the
54
+ > force-push guard rail), `odx verify`, `odx vendor`, `odx build`, `odx sniff`, `odx stats`,
55
+ > `odx dev`, `odx sync`/`daemon`/`cache`, `odx doctor`, `odx auth`, `odx status`,
56
+ > `odx upgrade`, `odx check-deps`, `odx suggest`, `odx verdict`, `odx dashboard`,
57
+ > `odx port` and `odx migrate`, and the gitaggregate drop-in (`odx git-aggregate`,
58
+ > `git-aggregate-rs`). Every command not yet implemented (`promote`, `env`, `bot`,
59
+ > `lint`) names the roadmap phase in which it lands.
60
+
61
+ ## Features
62
+
63
+ - **Aggregate**: parallel fetch of PRs, commits and branches into a shared
64
+ object cache; sequential merges per repository with clean abort on conflict;
65
+ optional syntax-aware merging through [mergiraf](https://mergiraf.org).
66
+ - **Lock and vault**: `odx.lock` pins every merged commit with its SHA, tree id
67
+ and patch-id; commits are pushed to content-addressed refs on a private
68
+ mirror (Forgejo, Gitea, GitLab) so a force-pushed PR cannot break a rebuild.
69
+ - **Force-push guard rail**: when a tracked PR head changes, odx checks the
70
+ new head's CI; red heads are not adopted, the vaulted pin is kept and
71
+ flagged, and dropping a PR is always a human decision.
72
+ - **Packages**: addons consumed through `uv` VCS sources are vaulted the same
73
+ way and written to `[tool.uv.sources]` (replaces uvault), with a one-command
74
+ switch to a local editable clone.
75
+ - **Dev workspace**: generates the Odoo `addons_path` (and rewrites
76
+ `odoo.conf`) and runs PEP 660 editable installs through `uv`.
77
+ - **Verify**: one command for CI and pre-commit that proves a checkout matches
78
+ `odx.lock` and `uv.lock`.
79
+ - **Sniff**: lists database migration scripts introduced by aggregated PRs
80
+ before they reach production.
81
+ - **Check-deps**: compares `__manifest__.py` dependencies with
82
+ `pyproject.toml`; reports missing addons, the same addon from two sources,
83
+ and license conflicts.
84
+ - **Status / track**: aggregated PRs that were merged upstream, PRs with new
85
+ commits, orphaned pins, red upstream heads, local modifications on vendored
86
+ modules.
87
+ - **Suggest**: a dashboard of PRs and commits on other Odoo series that touch
88
+ the modules you use, with mutes (reason and expiry) committed to the repo.
89
+ - **Upgrade**: module availability on the index and the forge for the next
90
+ Odoo series, plus code readiness from odoo-lint.
91
+ - **Port**: ports a PR or an addon's missing commits onto another series from
92
+ the local cache, with a maintainer sweep over a whole repository,
93
+ patch-id deduplication, oca-port-compatible blacklists, authorship
94
+ preserved, odoo-lint's upgrade fixes applied, and PRs opened on GitHub,
95
+ GitLab, Gitea or Forgejo; addons that moved repositories between series
96
+ are followed through a cross-series addon index.
97
+ - **Platform profiles**: `generic-wheels`, `vendored-source`, `odoo-sh` and
98
+ `custom` define how artefacts are delivered and verified; odx prepares
99
+ and verifies, the platform deploys. Provided-package sets per platform and
100
+ series keep requirements that the platform already ships out of the
101
+ generated requirements file.
102
+ - **Build**: builds aggregated, unmerged and private addons as wheels with
103
+ content-derived versions (`+odx.<shortsha>`) and publishes them to the
104
+ private index, so wheel-capable platforms install hashes instead of
105
+ copying source.
106
+ - **Vendor**: materializes the locked packages of each dependency group into
107
+ deployable addon directories for source-based platforms, with the
108
+ manifest version-bump rule, a content-hash manifest and the platform
109
+ requirements file.
110
+ - **Verdicts**: a declined forward-port ("not needed on 19.0") is recorded
111
+ once, keyed by patch-id, addon and target series, shared privately across
112
+ every environment and every project of the organisation, and re-checked
113
+ when the target code changes; project-level mutes stay with the project.
114
+ - **Promote**: copies the exact pins of modules, a feature set or a
115
+ functional description (`--search "invoicing"`) along a configurable
116
+ promotion graph between environments (presets for common branch layouts
117
+ and Odoo.sh), always plan first, detects divergence, optionally carries
118
+ the project's own commits, and supports rollback; `odx env diff` shows
119
+ what differs. Scripts and AI coding agents drive it through `--json` and
120
+ `--yes`.
121
+ - **Dashboard**: one view of everything beyond Dependabot: pinned PRs and
122
+ droppable overrides, new upstream PRs touching deployed modules,
123
+ forward-port suggestions (fixes merged on a lower series and missing on
124
+ yours), translation-only bumps and promotion drift, in the terminal, as a
125
+ TUI, as JSON or as Markdown, each entry with actions: include in the
126
+ project, open a forward-port PR upstream (human-triggered only), or mute
127
+ with a reason.
128
+ - **Bot**: a nightly job posts the same dashboard as one rolling issue per
129
+ series with checkboxes, and opens grouped PRs for merged overrides, green
130
+ re-pins, translation-only bumps and promotions, on GitHub Actions and
131
+ Forgejo Actions, inside the private project repository only.
132
+ - **Background sync**: an opt-in user-level scheduled job prefetches
133
+ repositories, PR refs, index metadata and wheels into the shared cache
134
+ within the API budget, mirror first, so `aggregate`, `status`, `dashboard`
135
+ and `port` answer from the cache immediately, show data staleness, refresh
136
+ only what is stale, and keep working offline.
137
+ - **Lint**: [odoo-lint](https://github.com/bosd/odoo-lint) embedded with
138
+ project context.
139
+ - **Stats**: lines of code per language via `tokei`.
140
+ - **Import**: converts git-aggregator `repos.yaml` and doodba `addons.yaml`
141
+ to `[tool.odx]`.
142
+ - **Auto-update**: translation-only wheel bumps are re-locked automatically
143
+ under a configurable policy with a wheel content check.
144
+ - **Polite to APIs**: tokens from the environment, `gh` or the keyring;
145
+ batched GraphQL, ETag caching, per-host rate limiting, `--offline`.
146
+
147
+ ## Example configuration
148
+
149
+ ```toml
150
+ [tool.odx]
151
+ odoo_version = "17.0"
152
+ merge_strategy = "rebase" # or "merge" for merge commits
153
+ mergiraf = "auto"
154
+ on_head_change = "follow-if-green"
155
+
156
+ [tool.odx.mirror]
157
+ url = "ssh://git@forgejo.internal/odoo/vault.git" # private
158
+
159
+ [[tool.odx.repositories]]
160
+ url = "https://github.com/OCA/pos.git"
161
+ target_dir = "vendor/pos"
162
+ addons = ["pos_discount", "pos_loyalty*"]
163
+ merges = [
164
+ { pr = 123, track_upstream = true },
165
+ { sha = "a1b2c3d4e5f67890123456789012345678901234" },
166
+ ]
167
+
168
+ [tool.odx.packages]
169
+ "odoo-addon-pos-vouchers" = { repo = "OCA/pos", pr = 45, subdirectory = "pos_vouchers" }
170
+
171
+ [tool.odx.features.pos-loyalty]
172
+ modules = ["pos_loyalty", "pos_loyalty_reports"]
173
+ ```
174
+
175
+ Everything else in `pyproject.toml` (`[project]`, `[build-system]`, other
176
+ `[tool.*]` tables) is left alone.
177
+
178
+ ## CLI
179
+
180
+ ```text
181
+ odx aggregate [--locked | --update | --fetch-only] [-c repos.yaml]
182
+ odx lock [--check] [--update] [--auto-update] [--no-push]
183
+ odx vendor [--requirements] | odx build [--publish --index private]
184
+ odx verify [--vendored | --installed .venv | --requirements | --deployed <dir>]
185
+ odx dev [<package> --branch <name>] [--restore]
186
+ odx add <url | owner/repo#pr> [--package <dist>] | odx drop <repo>#<pr>
187
+ odx import repos.yaml [addons.yaml] [--write] | odx export repos.yaml
188
+ odx dashboard [--format table|markdown|tui] [--checkboxes] | odx dashboard act <id> --include|--drop|--follow|--mute|--port
189
+ odx status [--fail-on-merged]
190
+ odx suggest [--env uat] [--check-apply] [--show-suppressed]
191
+ odx verdict add OCA/contract#1480 --addon contract --kind not-applicable --reason "..." | odx verdict upstream <id> --public-reason "..."
192
+ odx check-deps [--licenses] [--fix]
193
+ odx sniff | odx stats | odx upgrade --target 18.0
194
+ odx port pr OCA/sale-workflow#1234 --to 17.0 [--open-pr]
195
+ odx port addon sale_x --from 18.0 --to 19.0 | odx port blacklist sale_x OCA/x#12 --reason "..."
196
+ odx port sweep --to 19.0 --from 16.0,17.0,18.0 [--write-blacklist --open-pr]
197
+ odx migrate plan --to 19.0 | odx migrate addon sale_x --to 19.0 [--open-pr] | odx migrate own
198
+ odx migrate update [OCA/server-tools#3631] [--push] | odx migrate pin | odx migrate unpin [--push] [--merge]
199
+ odx lint [--only-changed] [--fix] [--output-format github]
200
+ odx sync [--all] | odx daemon install --interval 30m | odx cache gc
201
+ odx doctor | odx auth login <host> | odx completions <shell>
202
+
203
+ # planned
204
+ odx promote <module>... | --feature pos-loyalty | --search "invoicing" --to prod [--open-pr] [--yes --json]
205
+ odx env diff test prod
206
+ odx bot run --apply
207
+
208
+ odx git-aggregate -c repos.yaml -j 4 # gitaggregate drop-in
209
+ git-aggregate-rs -c repos.yaml -j 4 # same, standalone package
210
+ ```
211
+
212
+ Every command supports `--json`.
213
+
214
+ ## Installation (planned)
215
+
216
+ ```bash
217
+ uv tool install odx-cli # binary wheel from PyPI, no Rust toolchain needed
218
+ cargo install odx-cli # from crates.io
219
+ ```
220
+
221
+ Static binaries will also be published on GitHub Releases.
222
+
223
+ ## Quality
224
+
225
+ The codebase is held to a fixed set of gates enforced in CI behind one
226
+ required `all-checks` status on `main`: `rustfmt`, `clippy` with `pedantic`
227
+ and selected restriction lints as errors, `unsafe_code = "forbid"`,
228
+ `missing_docs = "deny"`, 100% line coverage with `cargo llvm-cov`, doc tests,
229
+ `cargo doc` and the Sphinx documentation with warnings denied, `cargo deny`,
230
+ `cargo machete`, an MSRV check, `typos` and Conventional Commits.
231
+
232
+ Rust edition 2024, MSRV 1.97, MIT license.
233
+
234
+ <!-- github-only -->
235
+
236
+ ## Documentation
237
+
238
+ User documentation is published on [Read the Docs](https://odx.readthedocs.io/).
239
+
240
+ ## Contributing
241
+
242
+ Contributions are welcome. Read [CONTRIBUTING.md](CONTRIBUTING.md) for the
243
+ development setup, the quality gates and the Contributor License Agreement.
244
+ This project follows the [Contributor Covenant](CODE_OF_CONDUCT.md).
245
+
246
+ ## License
247
+
248
+ MIT. See [LICENSE](LICENSE).
249
+
250
+ ---
251
+
252
+ Maintained by Strategic Efficiency B.V. under the
253
+ [getfluvo](https://github.com/getfluvo) organization.
254
+
255
+ Built with Rust & AI-accelerated engineering
256
+
@@ -0,0 +1,6 @@
1
+ odx_cli-0.0.4.data/scripts/odx.exe,sha256=0bkXrpydNMXR7xHW11D0QFqcuTzx5vYh9urfGWnRiQg,21802496
2
+ odx_cli-0.0.4.dist-info/METADATA,sha256=y7RfeVRn9nn0UOgFYzwLXtSYdhDeEtyTN0F3U9mlrHA,12754
3
+ odx_cli-0.0.4.dist-info/WHEEL,sha256=8Aej0W0a6Cz6apA3IzJrTnxLRVLAt-w0Oh8SA3Con_c,94
4
+ odx_cli-0.0.4.dist-info/licenses/LICENSE,sha256=jz1Axaa45Wz8dcPm9e6RJmL0uJTuGs5FnyNMVcaEU6E,1062
5
+ odx_cli-0.0.4.dist-info/sboms/odx-cli.cyclonedx.json,sha256=5fryvXoVjQOqXc4u_rVsTGaTxblwjCivYCCLIc__bpM,428616
6
+ odx_cli-0.0.4.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: maturin (1.15.0)
3
+ Root-Is-Purelib: false
4
+ Tag: py3-none-win_amd64
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Fluvo
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.