Files
tryton/docs/custom-repository-operations.md
T
José Arturo García e22c0497bd
Validate Tryton customizations / validate (pull_request) Successful in 3m33s
Validate Tryton customizations / validate (push) Successful in 3m39s
refactor(i18n): make Dominican Spanish standalone
Remove the es_419 parent from the es_DO language record and provide the complete core ir catalog so the Dominican locale is independently maintained in core and every module.
2026-10-13 20:09:26 -04:00

3.7 KiB

Tryton private mirror and customization operations

Repository roles

  • tryton-do/tryton-mirror is a private pull mirror of https://github.com/tryton/tryton. Never develop or create custom references in this repository.
  • tryton-do/tryton preserves the upstream history and contains reviewed local changes.

Branches

  • 8.0: protected production branch for the 8.0 LTS series.
  • integration/8.0: protected target for automated upstream proposals.
  • feature/*: short-lived application changes.
  • translation/*: short-lived translation changes.
  • 8.2: evaluation branch for the current non-LTS series; it is not deployed.
  • automation/upstream-8.0: bot-managed, fast-forward-only proposal branch.

Production changes flow through translation/* or feature/* into integration/8.0, then through a second reviewed pull request into 8.0. Direct pushes and force pushes to the protected branches are forbidden.

Remotes for developers

git remote add origin https://code.unpaismejor.org.do/tryton-do/tryton.git
git remote add mirror https://code.unpaismejor.org.do/tryton-do/tryton-mirror.git
git remote add upstream https://github.com/tryton/tryton.git

Gitea Actions uses its short-lived, repository-scoped GITEA_TOKEN. The organization grants that token read-only cross-repository access to tryton-mirror; no long-lived personal access token is stored. The GitHub upstream remote is for diagnostics and disaster recovery.

Translation workflow

The Tryton server owns es_DO as a standalone language; its database record does not declare es_419 (or any other locale) as parent. Complete Dominican translations live beside each package in its regular locale/es_DO.po catalog. The initial catalogs were bootstrapped from es_419, but they are now independent and Dominican terminology is maintained directly in them. There is no duplicated localization module or runtime dependency on one.

Weblate must push through a dedicated translation/weblate-8.0 branch and a reviewed pull request to integration/8.0; it must never push directly to a protected branch. Gitea sends push notifications to https://translate.tryton.org.do/hooks/gitea/ so Weblate can pull source changes promptly. CI validates every PO catalog and the server package before the pull request can be merged.

When a catalog changes, update the database with:

trytond-admin -d DATABASE --all --activate-dependencies

Activate Spanish (Dominican Republic) as a translatable language, then update the activated modules to import any new es_DO.po catalogs delivered by Weblate. Activating Spanish (Latin American) is not required for es_DO.

Resolving an upstream conflict

  1. Fetch mirror/8.0 and the target branch.
  2. Create a new feature/upstream-conflict-YYYYMMDD branch from integration/8.0.
  3. Merge mirror/8.0 without rebasing published custom commits.
  4. Resolve only the reported paths, run CI locally, and push the branch.
  5. Open a reviewed pull request into integration/8.0.
  6. Close the automation conflict issue only after the pull request is merged.

Never force-push an integration, production, or automation branch.

Recovery

If the native mirror stops updating, keep tryton unchanged, inspect the mirror synchronization error, and trigger a manual mirror update. If the mirror repository is unrecoverable, create a new private pull mirror under a temporary name, verify branches and tags against GitHub, and only then update the workflow repository URL and cross-repository allowlist. Do not delete the previous mirror until the replacement is verified.

If an integration proposal is wrong, close its pull request and delete only its automation/* branch. Protected branches and their history remain intact.