Skip to content

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 (or never), plus a per-type tally (active users first, then by login). --active / --inactive (mutually exclusive) filter by the active flag, --type internal|portal|public filters by type and --json returns 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 denormalized res_users.share flag when the user belongs to none of them, and the last login is read from res_users_log (res_users.login_date is 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-only psql query (no odoo shell). New ProjectManager.users() and ls_users() helper in core/project.py. Version 0.8.29
  • --json now also reports ignored requirements: of env init --json, of env update --git --json and of project new --json include an ignored_requirements list with the requirements.txt paths skipped through project.yml's requirements_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() and create_compose() accept an ignored_paths list and a json_output flag to support this.

Fixed

  • Non-ASCII characters (accents) are no longer escaped in --json output. Every JSON document printed by the CLI was serialized with json.dumps() and its default ensure_ascii=True, so a name such as Ruth Guadalupe Guzmán came out as Ruth Guadalupe Guzm\u00e1n (this showed up in of env users --json, but it affected every command with --json: of db ls, of env modules, of project ls, ...). A single _json_dumps() helper in main.py (mirroring _json_exit() and the ensure_ascii=False already used in cli_storage.py / cli_release.py) now serializes every JSON output, keeping accents readable while leaving each command's formatting unchanged. Regression tests assert the literal Guzmán is printed and \u00e1 is 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>/addons for 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 a modules argument and passes the filtered list to clone_or_update_repos(); the untouched repositories keep their pinned commits in .project.lock because save_project_lock() now supports merge=True (repos matched by URL) and of env update -m <module> --git merges instead of replacing the environment entry. Before, -m was ignored by --git and a failure in any unrelated repository aborted the whole command
  • of env update --git no longer hides the cause of a Git failure. update_environment() printed ❌ Error: Failed to update/clone repos. and swallowed the RuntimeError that already carried the failing URL, the Git message and an actionable hint, so a repo that failed while every other one (or a manual git pull) worked was impossible to diagnose. The error is now printed, so auth/branch/submodule failures surface their real reason
  • of env update --git --json now emits valid JSON in every case. On a Git failure update_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 as error and the command exits 1. With -m the payload lists only the refreshed repositories and adds unmatched_modules for requested modules that no repository provides, and -v no longer writes the per-repository lines into the JSON
  • of project ls now 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 a prod/staging environment runs behind the Traefik reverse proxy and publishes no host port, so the URL column showed - even though of env url resolved it correctly from project.yml. ls_projects() now enriches every running environment with the domain (and port) declared in the project's project.yml — located one directory above the compose working directory that the Docker label com.docker.compose.project.working_dir points to — and builds inactive environments from that same file, so both the CLI and the dashboard link env_type: https://<domain> for prod/staging or env_type: http://localhost:<port> for dev. New helpers _load_project_data(), _declared_servers() and _inactive_environments() in core/project.py, and templates/dashboard/dashboard.j2 links the domain too
  • of env update -g (and any other command that resolves repository variables) crashed with TypeError: expected string or bytes-like object, got 'float' when a repository in project.yml had an unquoted numeric branch such as branch: 19.0 — YAML parses that scalar as a float, and resolve_env_vars() passed it straight to re.sub(). resolve_env_vars() and has_unresolved_vars() now coerce non-string scalars to str before matching, so an unquoted branch keeps working instead of aborting the whole update
  • itsdangerous moved from the dev group to runtime dependencies: odoofly/dashboard.py imports Starlette's SessionMiddleware, which requires it, so on a plain pipx install odoofly any code path importing the dashboard crashed with ModuleNotFoundError: No module named 'itsdangerous'
  • test_env_password_success_json no longer writes to the real filesystem: it mocked get_project_path to /tmp but not append_project_changelog / append_project_log, so the command wrote /tmp/CHANGELOG.md for real and the test failed with Errno 13 on 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_path no longer accumulates ghost entries: update_addons_paths_in_conf() accepts base_path and 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 update now refreshes addons_path even without --git. Until now only the --git path 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 % (typically dbfilter = ^%d$, written by of env update --db-name) made every config read/write crash with InterpolationSyntaxError: '%' must be followed by '%' or '('. of env conf --set/--unset, of env update --so, read_odoo_conf() and update_addons_paths_in_conf() were all affected. ConfigParser is now built with interpolation=None everywhere, so odoo.conf values are read and written verbatim

[0.8.8] - 2026-08-25

Fixed

  • of db create no longer collides with the running odoo container: new_db() launched odoo shell without --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 --cpu and --mem-limit options for of project new and of env new. When set, they render Docker Compose cpus and mem_limit on the odoo service (cgroup limits) and are persisted in project.yml under server.cpus / server.mem_limit, so of env init --recreate keeps 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.compress and server.traefik_middlewares keys for environments rendered with the production Traefik template. compress: true makes 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.js is 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_middlewares appends 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_redirect key. www_redirect: true declares a redirectregex middleware (<TRAEFIK_NAME>-wwwredirect) that 301s www.<domain> to <domain>. It is placed first in the chain, before compress, so a redirected request is never compressed for nothing. The replacement is rendered as https://$${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 ls no longer reports every project as inactive when an environment is served through Traefik. container.ports carries the key 8069/tcp with a None value whenever the port is exposed but not published to the host (the compose generated for websecure: true environments has no ports: section), so ports.get("8069/tcp", [{}]) returned None instead of the default and None[0] raised TypeError: 'NoneType' object is not subscriptable. Since the try wraps 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 new get_container_host_port() helper that normalises the bindings before indexing; unpublished ports render as -. The same latent bug in ProjectManager.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 new no longer inherit extra_domains from main. 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 drops extra_domains, pins traefik_name to the staging name and records the source environment in a new staging_from field.
  • of env init <staging> --recreate no longer regenerates a staging environment with the production template. It previously used the inherited env_type (prod), rendering TRAEFIK_NAME=<project name> — the same router name as main — and two Traefik routers with the same name disable BOTH, taking production down with 404s. Environments carrying staging_from are now rendered with the staging template and their own router name.
  • Removed flush=True from three console.print() calls in core/project.py. Rich's Console.print does not accept a flush kwarg, so any code path reaching those lines crashed with TypeError (e.g. of env update -v while streaming log lines).

[0.8.3] - 2026-08-11

Added

  • of env init --init-db now creates the database and installs modules on a fresh environment. It starts the containers if needed, refuses to run when the database already exists, runs odoo -d <db> -i <modules> --load-language <lang> --stop-after-init with the DB_USER/DB_PASSWORD/ADMIN_PASSWORD from the environment .env, verifies the modules reached the installed state, and sets the admin user password (random unless --admin-password is given). It also reconciles the postgres role password with the .env (fixes auth failures when the data volume was initialized with an older .env), writes db_name into etc/odoo.conf and 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 (default base), --language (default en_US), --admin-user (default admin), --admin-password (random if omitted). New ProjectManager-based init_db() helper in odoofly.core.db, plus update_odoo_conf_options() in odoofly.core.odoo_conf.

Fixed

  • ProjectManager.module_states(), pending_modules() and modules() 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-db also verifies the database was actually created after the init and reports a clear error (with a --verbose hint) when it was not.

[0.8.2] - 2026-08-09

Fixed

  • of env update now decides success by verifying the real module state in ir_module_module after the update, same as of env install since 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 --verbose hint. Real failures print each module's final state. With target modules, success means all of them end up installed; for update all, success means no module is left pending (to upgrade, to install, to remove). New ProjectManager.pending_modules() helper
  • of env update -m now accepts a comma-separated module list (e.g. -m a,b,c), like of env install. Installed modules are passed to -u, known-but-uninstalled ones to -i; unknown names still raise "Module not found" listing them
  • of env update --git no longer silently ignores -m and -r: with -g -m the 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. -g alone keeps its behaviour and now prints a clear closing message ("✅ Repositories updated.", plus a warning when the module list refresh failed). The --git JSON output gains module/module_updated/restarted fields 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 install now decides success by verifying the real module state in ir_module_module after 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 --verbose hint; real failures print each module's final state. Supports comma-separated module lists. New ProjectManager.module_states() helper and backward-compatible error_log collector in _run_odoo_command()

[0.8.0] - 2026-08-07

Fixed

  • of env init and of project init no longer overwrite an existing docker-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 init new --recreate flag to force regeneration of docker-compose.yml.
  • of project init --force is now implemented: overwrites existing environments (previously documented but not functional).

[0.7.9] - 2026-08-06

Added

  • of repo add now clones the repository into addons/ and then refreshes the Odoo app list, reporting the result in both console and JSON output. New --db flag selects the target database (defaults to DB_NAME from .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 check now 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 install reportaba "installed successfully" aunque la instalacion fallara con ERROR/CRITICAL (ParseError, modulos no instalados quedaban como exito). Ahora install() pasa log_check=True a _run_odoo_command, igual que update(), 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 --json was not passed. The default of typer OptionInfo objects (truthy) leaked into direct Python calls, making if json_output: evaluate as True.
  • Removed the short -r flag from of env conf --ram (it was shadowed by --restart -r).

[0.7.7] - 2026-08-03

Added

  • Project-level CHANGELOG.md is 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 password now also logs to project.log (previously only CHANGELOG.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 lists CHANGELOG.md and project.log in the project structure table

Security

  • Passwords are never written to any log — of env password records only the user, database and environment, never the password value

[0.7.6] - 2026-07-16

Added

  • of repo auth now detects SSH repositories and diagnoses connectivity: if git ls-remote fails, 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 token
  • of project check now tests connectivity for repos that are "Not cloned": runs git ls-remote and shows a hint for SSH key setup or token configuration when the remote is unreachable
  • env init -v / --verbose mode with step-by-step output (directory creation, repo status, requirements, etc.)
  • project.log entries on environment initialization failure ([FAILED])

Changed

  • create_environment() now returns {"success": False, "error": "..."} instead of the generic {"requirements_created": False} when repo cloning fails
  • env init checks result.success and exits with a clear error message + project.log entry instead of falsely printing "initialized successfully"
  • env init JSON output includes "error" field on failure
  • _init_project() propagates RuntimeError, properly caught by project_init and project_new
  • Generic clone-failure hint replaced with the actual _diagnose_clone_error() hint from the exception

Fixed

  • of env init no longer prints "✅ initialized successfully" when repo cloning fails

[0.7.5] - 2026-07-16

Added

  • Smart clone failure diagnostics — when a git clone fails, 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 --yes when no environment was created

Changed

  • of project new now 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 new regardless of --yes

Fixed

  • UnboundLocalError on server_opts when of project new runs with --no-env default
  • project.log not logging repository clones during environment initialization

[0.7.4] - 2026-07-16

Added

  • project.log auto-generated per project — logs routine operations (env up, env down, env restart, env init, env update, env check) with syslog-style YYYY-MM-DD HH:MM:SS [ACTION] detail format. 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 check and of 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 new now auto-generates a README.md in 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 in project.py renders the README template — designed for future custom client README templates

[0.7.1] - 2026-07-14

Changed

  • .gitignore now dynamically adds environment directories (main/, production/, staging_*/) as they are created — only project.yml (and optionally .project.lock) need version control
  • ensure_gitignore_entry() helper keeps .gitignore in 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 .env file
  • of repo auth — interactive CLI command to fill unresolved ${VAR} tokens in your per-environment .env file without exposing secrets in project.yml
  • Hardcoded token warnings — of project check and of env check now warn when a repository token is a plain string instead of a ${VAR} reference
  • Automatic .gitignore created on of project new, pre-configured to ignore .env and the initial environment directory. New environments created via of env new or of env staging new are automatically appended — only project.yml (and optionally .project.lock) need version control
  • .project.lock now stores per-environment metadata (version, image, per-env updated_at) for full auditability
  • of env rm automatically removes the environment entry from .project.lock

Changed

  • resolve_env_vars() applied in create_environment() and update_environment() so token/url/branch/rev can leverage shell and .env variables
  • check_hardcoded_tokens() utility used in health-check commands
  • save_project_lock() accepts optional env_data dict with version and image
  • remove_env_from_lock() helper for cleaning up removed environments

[0.6.2] - 2026-07-14

Features

  • New rev field for repositories in project.yml — pin a tag (e.g. rev: "17.0") or commit SHA (e.g. rev: "a1b2c3d") instead of a branch
  • Automatic .project.lock file generated after of env update --git and of env init, recording the exact commit SHA of every cloned repository for deterministic production deployments
  • of repo add now supports --rev flag
  • parse_repositories() no longer defaults a branch when rev is 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, backup commands (type of env up <TAB> inside a project directory)
  • of project ls now 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 backup is now a sub-app with new, ls, rm, prune commands
  • of env backup new replaces of env backup (same syntax, now under sub-app)
  • of env backup ls lists backup files (metadata: size, age, db_name)
  • of env backup rm <env> <filename> deletes a specific backup file
  • of env backup prune <env> with --keep, --days, or --before to clean old backups
  • Cleaner ls output: removed Version and Modules columns

Improvements

  • Extracted of env staging new as dedicated command (separated from env new --staging)
  • env new --staging kept 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 check improved: 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 check and improved of project check
  • Added Git branching + staging workflow guide in both READMEs

[0.5.5] - 2026-07-02

Features

  • New of env conf command: centralized odoo.conf management
  • --db-name and --hide-db-list/--no-hide-db-list flags for project/env creation commands
  • --clear-db-name flag to remove default DB setting and restore database picker
  • --set and --unset for arbitrary odoo.conf keys
  • Persisted in .env as DB_NAME / DB_LIST, auto-reapplied on env update --so
  • Restart suggestion after server option changes
  • New of project set-master-password command: changes master password in project.yml, .env, and odoo.conf for all environments

Bug Fixes

  • Fixed semantic inversion of --hide-db-list (was writing list_db = true instead of false)

[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

  • 17

  • 19

  • 19 & Install Modules

  • 19 & Uninstall Modules

[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