Changelog¶
All notable changes to this project are documented here.
[Unreleased]¶
Added¶
of env users <env> <db>— list the users of a database and their status. Prints a table with Login, Name, Type (Internal / Portal / Public), Active and last login (ornever), plus a per-type tally (active users first, then by login).--active/--inactive(mutually exclusive) filter by theactiveflag,--type internal|portal|publicfilters by type and--jsonreturns the list of{login, name, type, active, last_login}. The type is resolved from the base groups (base.group_user/group_portal/group_public), falling back to the denormalizedres_users.shareflag when the user belongs to none of them, and the last login is read fromres_users_log(res_users.login_dateis not a column, not even on Odoo 13/19: using it made psql fail and the command report no users), all through a single read-onlypsqlquery (noodoo shell). NewProjectManager.users()andls_users()helper incore/project.py. Version 0.8.29--jsonnow also reports ignored requirements:of env init --json,of env update --git --jsonandof project new --jsoninclude anignored_requirementslist with therequirements.txtpaths skipped throughproject.yml'srequirements_ignore(e.g.["addons/CybroAddons/requirements.txt"]). In JSON mode the human "ignorando requirements" line is suppressed and the data is surfaced in the payload instead.collect_requirements(),create_environment(),update_environment()andcreate_compose()accept anignored_pathslist and ajson_outputflag to support this.
Fixed¶
- Non-ASCII characters (accents) are no longer escaped in
--jsonoutput. Every JSON document printed by the CLI was serialized withjson.dumps()and its defaultensure_ascii=True, so a name such asRuth Guadalupe Guzmáncame out asRuth Guadalupe Guzm\u00e1n(this showed up inof env users --json, but it affected every command with--json:of db ls,of env modules,of project ls, ...). A single_json_dumps()helper inmain.py(mirroring_json_exit()and theensure_ascii=Falsealready used incli_storage.py/cli_release.py) now serializes every JSON output, keeping accents readable while leaving each command's formatting unchanged. Regression tests assert the literalGuzmánis printed and\u00e1is not. Version 0.8.30 of env update <env> <db> --git -m <module>now pulls only the repository that provides the module instead of every repository of the environment. The repository is resolved by scanning<env>/addonsfor a checkout containing a directory named after the module with a__manifest__.py/__openerp__.py(a repository that is the module, and a not-yet-cloned repo whose name matches the module, are matched too).update_environment()gained amodulesargument and passes the filtered list toclone_or_update_repos(); the untouched repositories keep their pinned commits in.project.lockbecausesave_project_lock()now supportsmerge=True(repos matched by URL) andof env update -m <module> --gitmerges instead of replacing the environment entry. Before,-mwas ignored by--gitand a failure in any unrelated repository aborted the whole commandof env update --gitno longer hides the cause of a Git failure.update_environment()printed❌ Error: Failed to update/clone repos.and swallowed theRuntimeErrorthat already carried the failing URL, the Git message and an actionable hint, so a repo that failed while every other one (or a manualgit pull) worked was impossible to diagnose. The error is now printed, so auth/branch/submodule failures surface their real reasonof env update --git --jsonnow emits valid JSON in every case. On a Git failureupdate_environment()printed the❌ Error: Failed to update/clone repos.line plus the Git detail to stdout (interleaved with the JSON document) and the command exited with code 0; the detail is now returned in the payload aserrorand the command exits 1. With-mthe payload lists only the refreshed repositories and addsunmatched_modulesfor requested modules that no repository provides, and-vno longer writes the per-repository lines into the JSONof project lsnow shows the access URL of production and staging environments. The list derived the URL only from the container's published host port (get_container_host_port()), and aprod/stagingenvironment runs behind the Traefik reverse proxy and publishes no host port, so the URL column showed-even thoughof env urlresolved it correctly fromproject.yml.ls_projects()now enriches every running environment with thedomain(andport) declared in the project'sproject.yml— located one directory above the compose working directory that the Docker labelcom.docker.compose.project.working_dirpoints to — and builds inactive environments from that same file, so both the CLI and the dashboard linkenv_type: https://<domain>forprod/stagingorenv_type: http://localhost:<port>fordev. New helpers_load_project_data(),_declared_servers()and_inactive_environments()incore/project.py, andtemplates/dashboard/dashboard.j2links the domain tooof env update -g(and any other command that resolves repository variables) crashed withTypeError: expected string or bytes-like object, got 'float'when a repository inproject.ymlhad an unquoted numeric branch such asbranch: 19.0— YAML parses that scalar as a float, andresolve_env_vars()passed it straight tore.sub().resolve_env_vars()andhas_unresolved_vars()now coerce non-string scalars tostrbefore matching, so an unquoted branch keeps working instead of aborting the whole updateitsdangerousmoved from the dev group to runtime dependencies:odoofly/dashboard.pyimports Starlette'sSessionMiddleware, which requires it, so on a plainpipx install odooflyany code path importing the dashboard crashed withModuleNotFoundError: No module named 'itsdangerous'test_env_password_success_jsonno longer writes to the real filesystem: it mockedget_project_pathto/tmpbut notappend_project_changelog/append_project_log, so the command wrote/tmp/CHANGELOG.mdfor real and the test failed withErrno 13on any host where that file exists and belongs to another user. Both helpers are now patched
[0.8.11] - 2026-09-01¶
Added¶
- Optional requirements_ignore list in project.yml: repository or directory names whose requirements.txt is skipped when odoofly collects Python requirements for an environment. Some third-party addon bundles (e.g. CybroAddons) ship huge or invalid requirements files for modules that are not even installed; ignoring them keeps env init and rebuilds working. When unset, behaviour is unchanged.
[0.8.10] - 2026-08-25¶
Fixed¶
addons_pathno longer accumulates ghost entries:update_addons_paths_in_conf()acceptsbase_pathand rebuilds everything under that prefix from the scan, so a renamed checkout or a migration to a meta-repo removes the old paths instead of piling up next to the new ones (paths outside the prefix, added by hand, are still preserved)of env updatenow refreshesaddons_patheven without--git. Until now only the--gitpath re-scanned the addons folder, so after changing the layout the command reported success while Odoo kept booting with the previous (non-existent) paths
[0.8.9] - 2026-08-25¶
Fixed¶
- Any odoo.conf holding a value with
%(typicallydbfilter = ^%d$, written byof env update --db-name) made every config read/write crash withInterpolationSyntaxError: '%' must be followed by '%' or '('.of env conf --set/--unset,of env update --so,read_odoo_conf()andupdate_addons_paths_in_conf()were all affected. ConfigParser is now built withinterpolation=Noneeverywhere, so odoo.conf values are read and written verbatim
[0.8.8] - 2026-08-25¶
Fixed¶
of db createno longer collides with the running odoo container:new_db()launchedodoo shellwithout--no-http, so the shell tried to bind 8069 already taken by the service and the create failed whenever the environment was up. The shell now runs with--no-http --stop-after-init, matching every other odoo invocation in the codebase. Regression test added.
[0.8.7] - 2026-08-25¶
Added¶
- Container-level resource limits: new
--cpuand--mem-limitoptions forof project newandof env new. When set, they render Docker Composecpusandmem_limiton the odoo service (cgroup limits) and are persisted inproject.ymlunderserver.cpus/server.mem_limit, soof env init --recreatekeeps them. Optional and opt-in: when unset no limit is rendered, and the compose stays byte-identical for existing projects.
[0.8.6] - 2026-08-24¶
Added¶
- Optional
server.compressandserver.traefik_middlewareskeys for environments rendered with the production Traefik template.compress: truemakes odoofly declare a per-environment compression middleware (<TRAEFIK_NAME>-compress) and attach it to the environment's main router, so responses leave the origin gzip/brotli/zstd encoded instead of raw. This is not cosmetic on an Odoo deployment: measured on a live 19.0 site,web.assets_frontend_lazy.min.jsis 4,256,712 bytes uncompressed and 956,559 bytes with brotli — 4.4x less on every request that reaches the origin, which on a CDN-fronted site is every cache MISS, and on a direct-hit site is every visitor.traefik_middlewaresappends middlewares that already exist in the Traefik instance (e.g.["my-auth", "my-ratelimit@file"]) in the order given, skipping blanks and duplicates.
Both keys apply to the main router only. The -lp router serving /longpolling and /websocket is deliberately left untouched: compressing a websocket stream buys nothing and middleware chains on long-lived connections are a well-known source of breakage.
- Optional
server.www_redirectkey.www_redirect: truedeclares aredirectregexmiddleware (<TRAEFIK_NAME>-wwwredirect) that 301swww.<domain>to<domain>. It is placed first in the chain, beforecompress, so a redirected request is never compressed for nothing. The replacement is rendered ashttps://$${1}:$$is the Compose escape for a literal$, without which Compose would interpolate${1}away and the redirect would drop the path.
Note that the production template has always put www.<domain> in the router rule, which means Let's Encrypt asks for it as a SAN — so www must resolve in DNS whether or not you redirect it. A missing www record fails the whole certificate order, not just that name.
New build_router_middlewares() helper in odoofly.core.project. Environments that set neither key render a byte-identical docker-compose.yml, so this is a no-op for every existing project until it opts in.
[0.8.5] - 2026-08-18¶
Fixed¶
of project lsno longer reports every project asinactivewhen an environment is served through Traefik.container.portscarries the key8069/tcpwith aNonevalue whenever the port is exposed but not published to the host (the compose generated forwebsecure: trueenvironments has noports:section), soports.get("8069/tcp", [{}])returnedNoneinstead of the default andNone[0]raisedTypeError: 'NoneType' object is not subscriptable. Since thetrywraps the whole container loop, the first unpublished container aborted the scan and all projects fell through to the "inactive from projects_path" branch — including the ones that were up. The port lookup is now shared in a newget_container_host_port()helper that normalises the bindings before indexing; unpublished ports render as-. The same latent bug inProjectManager.get_odoo_port()(reached by callers that resolve an environment by port instead of by domain) is fixed by the same helper.
[0.8.4] - 2026-08-13¶
Fixed¶
of env new --staging/of env staging newno longer inheritextra_domainsfrommain. The inherited extra domains made the staging Traefik rule also match the production hosts and, since Traefik resolves router priority by rule length, the (longer) staging rule captured ALL production traffic for those hosts — with a freshly created staging this sent production users to the database selector. The staging server config now dropsextra_domains, pinstraefik_nameto the staging name and records the source environment in a newstaging_fromfield.of env init <staging> --recreateno longer regenerates a staging environment with the production template. It previously used the inheritedenv_type(prod), renderingTRAEFIK_NAME=<project name>— the same router name asmain— and two Traefik routers with the same name disable BOTH, taking production down with 404s. Environments carryingstaging_fromare now rendered with the staging template and their own router name.- Removed
flush=Truefrom threeconsole.print()calls incore/project.py. Rich'sConsole.printdoes not accept aflushkwarg, so any code path reaching those lines crashed withTypeError(e.g.of env update -vwhile streaming log lines).
[0.8.3] - 2026-08-11¶
Added¶
of env init --init-dbnow creates the database and installs modules on a fresh environment. It starts the containers if needed, refuses to run when the database already exists, runsodoo -d <db> -i <modules> --load-language <lang> --stop-after-initwith theDB_USER/DB_PASSWORD/ADMIN_PASSWORDfrom the environment.env, verifies the modules reached theinstalledstate, and sets the admin user password (random unless--admin-passwordis given). It also reconciles the postgres role password with the.env(fixes auth failures when the data volume was initialized with an older.env), writesdb_nameintoetc/odoo.confand restarts the odoo container so the URL opens the database login page directly instead of the database selector. Prints the access data (URL, admin/DB credentials, master password) or returns it as JSON with--json. New flags:-m/--modules(defaultbase),--language(defaulten_US),--admin-user(defaultadmin),--admin-password(random if omitted). NewProjectManager-basedinit_db()helper inodoofly.core.db, plusupdate_odoo_conf_options()inodoofly.core.odoo_conf.
Fixed¶
ProjectManager.module_states(),pending_modules()andmodules()no longer crash on psql output lines that are not query tuples (e.g. stderr NOTICE/error lines mixed into the exec output). Such lines are now skipped instead of raising "not enough values to unpack".of env init --init-dbalso verifies the database was actually created after the init and reports a clear error (with a--verbosehint) when it was not.
[0.8.2] - 2026-08-09¶
Fixed¶
of env updatenow decides success by verifying the real module state inir_module_moduleafter the update, same asof env installsince 0.8.1, instead of failing on any ERROR/CRITICAL line in the log. Databases carrying pre-existing errors unrelated to the update (broken registry entries of other modules, skipped demo data) no longer produce a false "❌ Error updating" after a successful update; unrelated log errors are surfaced as a warning with a--verbosehint. Real failures print each module's final state. With target modules, success means all of them end upinstalled; for update all, success means no module is left pending (to upgrade,to install,to remove). NewProjectManager.pending_modules()helperof env update -mnow accepts a comma-separated module list (e.g.-m a,b,c), likeof env install. Installed modules are passed to-u, known-but-uninstalled ones to-i; unknown names still raise "Module not found" listing themof env update --gitno longer silently ignores-mand-r: with-g -mthe module update runs after the repositories are refreshed, and with-g -r(without-m) the environment is restarted at the end. Previously the command exited 0 without updating or restarting and without any message.-galone keeps its behaviour and now prints a clear closing message ("✅ Repositories updated.", plus a warning when the module list refresh failed). The--gitJSON output gainsmodule/module_updated/restartedfields when those flags are used, and the command exits non-zero when the composed module update or restart fails
[0.8.1] - 2026-08-08¶
Fixed¶
of env installnow decides success by verifying the real module state inir_module_moduleafter the install, instead of trusting the odoo log. Fixes both failure modes: false success when the log was not checked, and false errors on databases carrying pre-existing ERROR lines unrelated to the installed module (broken registry entries of other modules, demo data skipped with a traceback). Unrelated log errors are surfaced as a warning with a--verbosehint; real failures print each module's final state. Supports comma-separated module lists. NewProjectManager.module_states()helper and backward-compatibleerror_logcollector in_run_odoo_command()
[0.8.0] - 2026-08-07¶
Fixed¶
of env initandof project initno longer overwrite an existingdocker-compose.yml. The compose (and.env) are only regenerated when missing or when explicitly requested (of env init --recreate/of project init --force).
Added¶
of env initnew--recreateflag to force regeneration ofdocker-compose.yml.of project init --forceis now implemented: overwrites existing environments (previously documented but not functional).
[0.7.9] - 2026-08-06¶
Added¶
of repo addnow clones the repository intoaddons/and then refreshes the Odoo app list, reporting the result in both console and JSON output. New--dbflag selects the target database (defaults toDB_NAMEfrom.env).- New
of env update-list [env] [db]command to manually refresh the Odoo module/app list in a database.
[0.7.8] - 2026-08-06¶
Added¶
of project checknow verifies URL accessibility for environments with a domain (server.domain): performs an HTTPS (falling back to HTTP) request and reports the URL plus result in both table and JSON output.
Fixed¶
of env installreportaba "installed successfully" aunque la instalacion fallara con ERROR/CRITICAL (ParseError, modulos no instalados quedaban como exito). Ahorainstall()pasalog_check=Truea_run_odoo_command, igual queupdate(), y devuelve error real.- Commands that internally call other commands (
of env conf --restart,of project init --up,of env new --yes,of env init -u) no longer print JSON output when--jsonwas not passed. The default of typerOptionInfoobjects (truthy) leaked into direct Python calls, makingif json_output:evaluate as True. - Removed the short
-rflag fromof env conf --ram(it was shadowed by--restart -r).
[0.7.7] - 2026-08-03¶
Added¶
- Project-level
CHANGELOG.mdis now auto-updated by every significant operation, with entries grouped by date and action (### Added/### Changed/### Removed):of project init,of env init,of env install,of env uninstall,of env update,of env password,of env staging new,of env staging refresh,of env backup new,of env restore,of env backup rm,of env backup prune,of db create,of db rm,of db cpn of env passwordnow also logs toproject.log(previously onlyCHANGELOG.md)- New
docs/reference/logging.md— complete reference of the project logging system (CHANGELOG.md+project.log): where each file lives, per-operation messages, what is intentionally not logged, security notes and automation snippets. Linked from the docs navigation and both READMEs - Generated project README (
templates/readme/README.md.j2) now listsCHANGELOG.mdandproject.login the project structure table
Security¶
- Passwords are never written to any log —
of env passwordrecords only the user, database and environment, never the password value
[0.7.6] - 2026-07-16¶
Added¶
of repo authnow detects SSH repositories and diagnoses connectivity: ifgit ls-remotefails, it suggests adding your SSH public key as a Deploy Key on GitHub (Settings → Deploy keys → Add deploy key) and offers the alternative of switching to HTTPS with a tokenof project checknow tests connectivity for repos that are "Not cloned": runsgit ls-remoteand shows a hint for SSH key setup or token configuration when the remote is unreachableenv init -v/--verbosemode with step-by-step output (directory creation, repo status, requirements, etc.)project.logentries on environment initialization failure ([FAILED])
Changed¶
create_environment()now returns{"success": False, "error": "..."}instead of the generic{"requirements_created": False}when repo cloning failsenv initchecksresult.successand exits with a clear error message + project.log entry instead of falsely printing "initialized successfully"env initJSON output includes"error"field on failure_init_project()propagatesRuntimeError, properly caught byproject_initandproject_new- Generic clone-failure hint replaced with the actual
_diagnose_clone_error()hint from the exception
Fixed¶
of env initno longer prints "✅ initialized successfully" when repo cloning fails
[0.7.5] - 2026-07-16¶
Added¶
- Smart clone failure diagnostics — when a
git clonefails, the error message now includes an actionable hint: SSH key setup, missing token, wrong credentials, repo not found, or wrong branch name _diagnose_clone_error()utility for classifying git errors and suggesting fixes- 6 new tests for
_diagnose_clone_error()covering all failure scenarios - Environment creation hint after
of project new --yeswhen no environment was created
Changed¶
of project newnow defaults to--no-env(no environment created). In interactive mode, the user is prompted: "Do you want to create an environment now?"- Success message now always shows after
of project newregardless of--yes
Fixed¶
UnboundLocalErroronserver_optswhenof project newruns with--no-envdefaultproject.lognot logging repository clones during environment initialization
[0.7.4] - 2026-07-16¶
Added¶
project.logauto-generated per project — logs routine operations (env up,env down,env restart,env init,env update,env check) with syslog-styleYYYY-MM-DD HH:MM:SS [ACTION] detailformat. Ignored by.gitignore.of repo add --token <value>now auto-converts the token to a${GIT_TOKEN_<REPO>}variable reference, stores the real value in<env>/.env, and prints a confirmation message
Fixed¶
- Warning display in
of project checkandof env check— hardcoded token warnings now show the message text instead of the raw dict
[0.7.3] - 2026-07-16¶
Fixed¶
clone_or_update_repo()ahora maneja correctamente repositorios vacíos: clona sin branch, borra la branch default (main), y crea/checkoutea la branch del proyecto (ej.18.0)parse_repositories()restaurado para default branch = version
Changed¶
ensure_gitignore_entry()extraída como helper público para agregar entradas a.gitignore
[0.7.2] - 2026-07-16¶
Features¶
of project newnow auto-generates aREADME.mdin the project root from a Jinja2 template (templates/readme/README.md.j2) with project name, author, Odoo version, quick-start commands, common operations reference and project structure overview- New
create_project_readme()utility inproject.pyrenders the README template — designed for future custom client README templates
[0.7.1] - 2026-07-14¶
Changed¶
.gitignorenow dynamically adds environment directories (main/,production/,staging_*/) as they are created — onlyproject.yml(and optionally.project.lock) need version controlensure_gitignore_entry()helper keeps.gitignorein sync
[0.7.0] - 2026-07-14¶
Features¶
- New
${VAR}token variable resolution — tokens can reference environment variables (e.g.token: "${GIT_TOKEN}") resolved from the shell environment or the env's.envfile of repo auth— interactive CLI command to fill unresolved${VAR}tokens in your per-environment.envfile without exposing secrets inproject.yml- Hardcoded token warnings —
of project checkandof env checknow warn when a repository token is a plain string instead of a${VAR}reference - Automatic
.gitignorecreated onof project new, pre-configured to ignore.envand the initial environment directory. New environments created viaof env neworof env staging neware automatically appended — onlyproject.yml(and optionally.project.lock) need version control .project.locknow stores per-environment metadata (version,image, per-envupdated_at) for full auditabilityof env rmautomatically removes the environment entry from.project.lock
Changed¶
resolve_env_vars()applied increate_environment()andupdate_environment()so token/url/branch/rev can leverage shell and.envvariablescheck_hardcoded_tokens()utility used in health-check commandssave_project_lock()accepts optionalenv_datadict withversionandimageremove_env_from_lock()helper for cleaning up removed environments
[0.6.2] - 2026-07-14¶
Features¶
- New
revfield for repositories inproject.yml— pin a tag (e.g.rev: "17.0") or commit SHA (e.g.rev: "a1b2c3d") instead of a branch - Automatic
.project.lockfile generated afterof env update --gitandof env init, recording the exact commit SHA of every cloned repository for deterministic production deployments of repo addnow supports--revflagparse_repositories()no longer defaults a branch whenrevis set
[0.6.1] - 2026-07-07¶
Features¶
- Tab autocompletion for database names in
db shell,db rm,db cpn,env backup new,env install,env uninstall,env update - Tab autocompletion for backup filenames in
env backup rm - Tab autocompletion for repository URLs in
repo rm - All new completions gracefully return empty if container is offline
[0.6.0] - 2026-07-07¶
Features¶
- Tab autocompletion for environment names in all
env,db,repo,staging,backupcommands (typeof env up <TAB>inside a project directory) of project lsnow shows URLs for all running environments, not just the first one
Bug Fixes¶
- Dashboard now displays access URLs for all environments of a project
[0.5.8] - 2026-07-03¶
Features¶
of env backupis now a sub-app withnew,ls,rm,prunecommandsof env backup newreplacesof env backup(same syntax, now under sub-app)of env backup lslists backup files (metadata: size, age, db_name)of env backup rm <env> <filename>deletes a specific backup fileof env backup prune <env>with--keep,--days, or--beforeto clean old backups- Cleaner
lsoutput: removed Version and Modules columns
Improvements¶
- Extracted
of env staging newas dedicated command (separated fromenv new --staging) env new --stagingkept as alias for backwards compatibility- Fix filestore sync in
staging refresh: purge before copy to avoid stale data
[0.5.7] - 2026-07-03¶
Features¶
- New
of env staging refresh <env>command: sync DBs from source to staging (pg_dump → psql cross-container, neutralize, filestore copy) - Fix
of db cpn: now resolves env_hash so it actually works
[0.5.6] - 2026-07-03¶
Features¶
- New
of env check <env>command: runtime health check — containers, logs (ERROR/FATAL scan), DB connectivity, port, odoo.conf keys, .env vars, cloned repos of project checkimproved: now validates odoo.conf existence and required keys, container status via docker compose ps, log scanning for ERROR/FATAL, and port binding check per environment
Documentation¶
- Updated README.md and README_ES.md with
of env checkand improvedof project check - Added Git branching + staging workflow guide in both READMEs
[0.5.5] - 2026-07-02¶
Features¶
- New
of env confcommand: centralized odoo.conf management --db-nameand--hide-db-list/--no-hide-db-listflags for project/env creation commands--clear-db-nameflag to remove default DB setting and restore database picker--setand--unsetfor arbitrary odoo.conf keys- Persisted in
.envasDB_NAME/DB_LIST, auto-reapplied onenv update --so - Restart suggestion after server option changes
- New
of project set-master-passwordcommand: changes master password in project.yml, .env, and odoo.conf for all environments
Bug Fixes¶
- Fixed semantic inversion of
--hide-db-list(was writinglist_db = trueinstead offalse)
[0.5.4] - 2026-06-26¶
Bug Fixes¶
- Check exit codes from container exec_run in backup version detection
- Safeguard ast.literal_eval with try/except for invalid version strings
- Run chown as root when fixing filestore permissions after restore
- Change default RAM from 2GB to auto-detection to prevent worker OOM kills
[0.5.0] - 2026-05-28¶
Bug Fixes¶
- test_cli
- make mypy non-blocking in CI, add .coverage to gitignore
Features¶
- clean error messages for missing environments
- v0.5.0 — integrate odoogci/odooconf, repo detail output, version bump
[0.4.4] - 2026-05-27¶
Features¶
- enterprise quality — session auth, structured logging, CI/CD pipeline
Testing¶
- increase coverage from 40 to 120 tests across all core modules
[0.4.3] - 2026-05-27¶
Bug Fixes¶
- use docker compose ps instead of labels for env running checks and status
Refactor¶
- modularize core logic and improve test isolation
[0.4.2] - 2026-05-26¶
Bug Fixes¶
- descriptive JSON output instead of {} for --json, bump v0.4.2
[0.4.1] - 2026-05-25¶
Bug Fixes¶
- fix(compose): set top-level project name in rendered docker-compose.yml
- fix(compose): set top-level project name in rendered docker-compose.yml
- Problem with project name
- fix(env update): mandar -u en vez de -i cuando el modulo ya esta instalado
- fix(env update): mandar -u en vez de -i cuando el modulo ya esta instalado
- check env containers running before operating on db/env commands
Features¶
- addons untracked in project check
- JSON in all commands
- --yes in all commands (if apply)
- Logs save support
Miscellaneous¶
- merge remote-tracking branch 'origin/main' into unstable
Refactor¶
- Black format
[0.4.0] - 2026-05-20¶
Bug Fixes¶
- production template
Features¶
- JSON in all commands
Work in Progress¶
- work in #42
[0.3.9] - 2026-05-15¶
Bug Fixes¶
- close #35
- close #34
- close #34
- close #9
[0.3.8] - 2026-05-14¶
Features¶
- support for plugins
Updates¶
- Version Number
Work in Progress¶
-
16 Close #44 #43¶
[0.3.7] - 2026-05-07¶
Bug Fixes¶
- Repositories clone in Production mode
- Bug with production-traefik.j2 and odoo web #31
- Longpolling in Production #33
Updates¶
- README.md README_ES.md
- README.md README_ES.md
Work in Progress¶
-
16 #43¶
[0.3.6] - 2026-04-22¶
Bug Fixes¶
Features¶
- Repositories manager & add: env pull to update docker images
[0.3.5] - 2026-04-21¶
Bug Fixes¶
- NoneType when execute env ls or env stats in a Folder without project
- Tests
- close #18
Features¶
- Password in Dashboard
- Custom Command #15 & Fix Password Error
Testing¶
- Tests xD
- Tests xD
[0.3.4] - 2026-04-14¶
Documentation¶
- improve Documentation
Features¶
- Project Check with Database container support
- Restart Command
- docker Image generator Works, but not work odoo.conf
- PRE_INSTALL & POST_INSTALL in Environment
- Dashboard
Miscellaneous¶
- change Version
Updates¶
- readme actualizados
[0.3.3] - 2026-04-10¶
Bug Fixes¶
- Major Bugs
- No clone repositories in Production
- No clone repositories in Production
Documentation¶
- improve Readme(s) & fix problem with docker client
Features¶
- Basic Testing
- Proxy Logs
- Check Compatibility
- Check Project
- URL in Env
- Support for python Requirements and Image build #14 :)
Miscellaneous¶
- ignore dist folder
- remove nginx support
Updates¶
- en manejo de Traefik
- Actions
[0.3.2] - 2026-03-31¶
Features¶
- improve security, stability and CLI usability (v0.3.2)
Miscellaneous¶
- vía Gemini
[0.3.1] - 2026-03-30¶
Bug Fixes¶
- close #26
Features¶
- basic Config in config.yaml #17
- Basic User Configuration
- Basic Setup User Configuration
Miscellaneous¶
- merge branch 'unstable' into unstable.user_config
Updates¶
- README.md README_ES.md
- Packages
[0.3.0] - 2026-03-26¶
Miscellaneous¶
- change Logo
- merge pull request #27 from Alitux/main.odoogci-pypi
- delete publicaciones.md
Updates¶
- add publicaciones.md in .gitignore
- README.md & README_ES.md
- README.md README_ES.md
Work in Progress¶
[0.2.9] - 2026-02-24¶
Bug Fixes¶
- Dev in Production Traefik
- close #25 Cambiar contraseña de Usuario
[0.2.8] - 2026-02-17¶
Bug Fixes¶
- Empty repositories
Miscellaneous¶
- merge pull request #22 from Alitux/21-nonetype-cuando-hay-dos-entornos-en-backup
[0.2.7] - 2026-02-17¶
Bug Fixes¶
- Refactor db list functionality
- env_stats
- env_stats containers name
-
21¶
Documentation¶
- Update README with new features and flags
Features¶
- 0.2.6 Release
- 0.2.6 Release with Fix
Updates¶
- README.md & ADD README_ES.md
- ADD README_ES.md
[0.2.6] - 2025-12-19¶
Bug Fixes¶
- Working dir bug
[0.2.5] - 2025-12-18¶
Bug Fixes¶
- Bug in aux.py
- db_list & update method
Features¶
- Long Polling Support in production
- Long Polling Support in production
[0.2.4] - 2025-10-16¶
Bug Fixes¶
- Version in main.py
- self.get_db_envvars with env
Updates¶
- README.md
- mv ls_modules to ProjectManager
- README.md
[0.2.2] - 2025-10-07¶
Updates¶
- Version 0.2.2 Staging in local 🥳
Work in Progress¶
- staging generation
- Generate Staging
- Generate Staging
- Staging
- staging generationwork only in main
- staging generation works :)
[0.2.1] - 2025-09-30¶
Bug Fixes¶
- Close #11
[0.2.0] - 2025-09-10¶
Bug Fixes¶
- Users == 1 bug
- Verbose exit in dc down & dc up
- env down & env up & add: env init
Refactor¶
- New Project upd: README.MD
Updates¶
- README.md & add Logo
- README.md
- README.md & project not_env option and multiples fixes. Version 0.1.2 installable
Work in Progress¶
- env_hash & Version Integration
- Version & production mode
[0.1.9] - 2025-09-09¶
Features¶
- Traefik RPM deploy Function 🔥
[0.1.8] - 2025-09-05¶
Bug Fixes¶
- WIP in rm environment #7
- WIP in rm environment #7
- rm environment Close #7
- rm environment Close #7
Features¶
- Traefik RPM deploy Function 🔥
Work in Progress¶
- Working in #11
[0.1.7] - 2025-08-12¶
Bug Fixes¶
- Bug in env update
- Upgrade in PM
Features¶
- ProjectManager Class & WIP in #6
- WIP Backup Function #6
- Close #6 Odoo Backups 🥳
Refactor¶
- Black Format
Updates¶
- Move psqshell & odooshell to ProjectManager
Work in Progress¶
- Uninstall Function
[0.1.6] - 2025-07-11¶
Bug Fixes¶
- close #4 add: list modules in db
[0.1.5] - 2025-06-10¶
Features¶
- Staging Function WIP #1
[0.1.4] - 2025-06-05¶
Features¶
- Update env & Minor Changes in devel.j2
- db cpn & Fix Volume names
[0.1.3] - 2025-05-31¶
Bug Fixes¶
- Bugs in env new & RAM calculation
Features¶
- Basic Stats command & upd: readme.md
[0.1.0] - 2025-05-05¶
Features¶
- First Commit