oca-port-jarsa
oca-port-jarsa is a Jarsa-maintained fork of the original
oca-port tool.
It is designed for enterprise Odoo migrations using both GitHub and GitLab repositories, with automatic platform detection, GitLab Merge Request support and native integration with pre-commit-vauxoo.
Key Features
- Automatic SCM detection (GitHub / GitLab) using remote URL
- Native GitLab Merge Request lookup (gitlab.com and self-hosted)
- Native GitHub Pull Request lookup
- Automatic hook selection:
- pre-commit for GitHub projects
- pre-commit-vauxoo for GitLab projects
- Automatic hook installation for GitLab using pre-commit-vauxoo --install
- Multiple GitLab instances supported (per-domain tokens)
- pipx-ready installation
- CI/CD friendly
- JSON output compatible with original oca-port
Platform Auto Detection
The platform is automatically detected using the target remote URL:
| Remote URL contains | Platform |
|---|---|
| github | GitHub |
| gitlab | GitLab |
| (no github keyword) | GitLab (default for self-hosted) |
Manual override is also available:
oca-port-jarsa --platform gitlab ...
oca-port-jarsa --platform github ...
Installation
Using pipx (recommended)
pipx install oca-port-jarsa
Development installation
git clone https://github.com/Jarsa/oca-port-jarsa.git
cd oca-port-jarsa
pipx install .
Authentication Setup
GitHub Token
Used only when operating on GitHub repositories.
export GITHUB_TOKEN=ghp_xxxxxxxxx
GitLab Tokens (multi-instance support)
oca-port-jarsa supports multiple GitLab instances using domain-based environment variables.
Define tokens in your shell:
export GITLAB_TOKEN_GITLAB_COM="xxxx"
export GITLAB_TOKEN_GIT_JARSA_COM="xxxx"
export GITLAB_TOKEN_GIT_VAUXOO_COM="xxxx"
Naming rule:
GITLAB_TOKEN_<DOMAIN>
Where:
https://git.jarsa.com -> GITLAB_TOKEN_GIT_JARSA_COM
https://git.vauxoo.com -> GITLAB_TOKEN_GIT_VAUXOO_COM
https://gitlab.com -> GITLAB_TOKEN_GITLAB_COM
Usage
Basic syntax
oca-port-jarsa <source> <target> <module_path> [options]
Example — Migration preview (dry run)
oca-port-jarsa origin/16.0 origin/18.0 stock_move_auto_assign --dry-run --verbose
Execute migration
oca-port-jarsa origin/16.0 origin/18.0 stock_move_auto_assign
Custom destination branch
oca-port-jarsa origin/16.0 origin/18.0 stock_move_auto_assign \
--destination jarsa-dev/18.0-mig-stock_move_auto_assign
Using subfolder modules
oca-port-jarsa origin/main origin/18.0-mig \
--source-version=16.0 \
--target-version=18.0 \
./addons/custom/MY_MODULE \
--destination jarsa-dev/18.0-mig-MY_MODULE
Hook Execution Behavior
GitHub projects
Uses the standard pre-commit workflow:
pre-commit install
pre-commit run
GitLab projects
Uses Vauxoo workflow:
pre-commit-vauxoo --install
pre-commit-vauxoo
Existing PR / MR Detection
GitHub
Automatically searches existing Pull Requests using GitHub API.
GitLab
Automatically searches open Merge Requests:
- Target branch match
- Module name match
- Supports gitlab.com and self-hosted instances
Migration Mode
Exit codes:
| Code | Meaning |
|---|---|
| 100 | Addon can be migrated |
| 110 | PRs / commits available for porting |
JSON Output API Mode
import json
import oca_port
app = oca_port.App(
source="origin/16.0",
target="origin/18.0",
addon_path="stock_move_auto_assign",
repo_path="/home/odoo/repos/stock-logistics-warehouse",
output="json",
fetch=True,
github_token="<GITHUB_TOKEN>",
)
result = app.run()
data = json.loads(result)
print(data)
Release Flow
git tag v1.0.0
git push origin v1.0.0
Origin
Based on the original OCA tool: https://github.com/OCA/oca-port
Maintained by Jarsa Sistemas.
Release files for oca-port-jarsa 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| oca_port_jarsa-1.0.2.tar.gz | 50.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| oca_port_jarsa-1.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 107.0 kB
Release files / oca_port_jarsa-1.0.2.tar.gz
| Download URL | oca_port_jarsa-1.0.2.tar.gz |
|---|---|
| Size | 50.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d0e248b66dfcf160d109fa0cb82dc1f484360e85f0ab1c13235493d2b8dc4c08
|
|
BLAKE2b-256 checksum How to use checksums |
b456ac7df2b66e86dd2843b02f4570746f3a9697ee2d2c7ed152320aa8ddf928
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 4, 2026.
Transparency logRelease files / oca_port_jarsa-1.0.2-py3-none-any.whl
| Download URL | oca_port_jarsa-1.0.2-py3-none-any.whl |
|---|---|
| Size | 56.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6330b6aac98cb2c3a1bee2adaa2fb04eb93cba38b387dcce077b7686ee4db1f8
|
|
BLAKE2b-256 checksum How to use checksums |
8620d528ec60e2d4448f725e604bbd6be1e282604122e9c1c6ed901516217fb8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 4, 2026.
Transparency log