Skip to content

Documentation / Code and addons

Addon Repositories

Connect GitHub repositories containing Odoo addons.

Addon repositories are GitHub repositories that contain one or more Odoo addons. By connecting a repository to calmo.cloud, you make its addons available for deployment to your services.

Connecting a repository #

1. Set up GitHub integration #

Before connecting repositories, you need to install the calmo.cloud GitHub App on the GitHub account or organization that owns them:

  1. In the sidebar, open Developer → GitHub Installations and click Connect GitHub.
  2. GitHub asks which account to install the app on and which repositories it may access. Pick the repositories with your addons and confirm.
  3. You are sent back to calmo.cloud, where the installation is verified and listed. Repeat for every GitHub account or organization you deploy from.

If the app was installed on GitHub already, use Add Manually and enter its installation ID instead.

2. Add a repository #

Go to Addon Repositories in the sidebar and click New Repository.

3. Select the repository #

Choose a repository from your GitHub organization. calmo.cloud will scan it for Odoo addons.

4. Review discovered addons #

calmo.cloud will list all addons found in the repository, including:

  • Addon name and description
  • Supported Odoo versions
  • Dependencies

Syncing repositories #

When you push new commits to your GitHub repository, you can sync the changes in calmo.cloud to discover new addons or updated versions. calmo.cloud tracks:

  • Commit SHAs — Which exact version of the code is deployed
  • Addon versions — Per Odoo version compatibility
  • External dependencies — Python packages or system libraries required

Adding a repository to a service #

On a service's Repositories tab, Add Repository and Attach add a repository to the service, and Deploy Addons later brings over addons that were pushed to it since. Each of them first reads the repository on GitHub and then copies every addon the service doesn't have yet. Addons already on the service are not updated by this.

The tab shows how far that got for each repository:

  • Addons counts the addons found in the repository, on any branch.
  • On this service counts the repository's addons that are on this service.
  • Discovery shows the last read of the repository for this service: Queued, Reading GitHub, Completed or Failed. Hover over it to see how many addons with code for the service's Odoo version were found and how many of them were queued for deployment, or why the read failed.

Every queued addon is then copied to the service as an action named "Deploy addon" followed by its technical name, which you can follow on the Actions tab. Once it succeeded, the addon is on the service but not yet installed in Odoo; see Install the module.

When the read fails, nothing is deployed from the repository. Fix the cause and click Deploy Addons again:

Discovery says What to do
The branch was not found on GitHub Check that the branch exists in the repository. The service reads its branch override, or else the repository's branch for the service's Odoo version (see below). A private repository also needs the calmo.cloud GitHub App to have access to it.
GitHub refused access to the repository On GitHub, check that the calmo.cloud GitHub App is still installed for the repository's owner and may access the repository.
GitHub's rate limit was reached Wait until the time it names, then deploy the addons again.
GitHub could not be read GitHub did not answer. Try again in a few minutes.

A failed read is also recorded on the service's activity timeline. The API and AI assistants see the same as discovery and addons_on_service on the service's repositories (see MCP server).

Creating a new repository on GitHub #

If your addons don't have a repository yet, for example modules you bought on the Odoo App Store, calmo.cloud can create one for you. On a service's Repositories tab, click Add Repository, switch on Create a new private repository on GitHub, pick the GitHub organization and enter a name.

calmo.cloud then:

  1. creates the repository on GitHub, private, in that organization,
  2. makes its first commit, a README, on a branch named after the service's Odoo version, for example 19.0, which GitHub makes the default branch,
  3. adds it to the service.

The new repository has no addons yet, so Discovery shows Completed with none found. Add modules from the Odoo App Store or a ZIP with Add Module next to it, in early access (see Adding modules from the Odoo App Store or a ZIP), or push your modules to the branch, each in its own folder at the top of the repository, and click Deploy Addons.

Creating a repository needs:

  • A GitHub organization. The calmo.cloud GitHub App can't create repositories in a personal GitHub account. Create the repository there yourself and add it as an existing one.
  • The Repository creation permission. To create repositories, the calmo.cloud GitHub App asks for the Repository creation permission in addition to the ones it already had. It only lets the app create repositories, not change their settings or delete them. An owner of the organization has to approve it on GitHub: open the organization's Settings → GitHub Apps, click Configure next to calmo.cloud and accept the requested permissions. Until then, creating a repository fails with a message saying so, and everything else keeps working as before. If you'd rather not grant that permission, create the repository on GitHub yourself: make it private, give it at least one commit (a README will do) on a branch named after the service's Odoo version, for example 19.0, give the calmo.cloud GitHub App access to it, and add it as an existing repository.

If a repository of that name already exists in the organization, nothing is created. Add the existing repository instead.

The API and AI assistants create a repository the same way, with create_on_github when they add a repository to a service or to your team (see MCP server). Through an API token, this needs the Manage repositories permission. Added to your team rather than to a service, the new repository gets the branch the request names. A branch that isn't named after an Odoo version, such as main, is entered as the repository's branch for every Odoo version (see Custom branch names per Odoo version), so every service the repository is added to deploys from it.

Custom branch names per Odoo version #

By default, calmo.cloud assumes a repository uses the Odoo version number as the branch name — for example, 18.0 for Odoo 18 and 19.0 for Odoo 19. Most repositories (including OCA) follow this convention.

Some teams use different branch names — for example v18 and v19, or 18 and 19. To make calmo.cloud sync and deploy from those branches, configure the branch name per Odoo version on the repository.

On the repository edit page, in the Branch names per Odoo version section, enter the branch that this repository uses for each Odoo version. Leave a field blank to fall back to the Odoo version itself (e.g. 18.0).

Example: a repository whose Odoo 18 branch is named v18 and Odoo 19 branch is named v19 would set:

  • Odoo 18.0 branch: v18
  • Odoo 19.0 branch: v19

After saving, the next sync will look for addons on the configured branches and deployments will use those branches by default.

Per-service or per-addon branch overrides (used for feature branches and preview deployments) still take precedence over the repository default — the per-version setting only changes what calmo.cloud falls back to when no override is set.

Managing repositories #

From the repository detail page, you can:

  • View all addons in the repository
  • See which services have addons from this repository deployed
  • Sync to pick up the latest changes from GitHub
  • Remove the repository if it's no longer needed