From 4d50feb61a8bba2f2974973ec2d59f7ed2380ab8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Alix?= Date: Fri, 7 Jun 2024 17:11:28 +0200 Subject: [PATCH 1/6] Add 'odoo_project_changelog' module --- odoo_project_changelog/README.rst | 61 +++ odoo_project_changelog/__init__.py | 1 + odoo_project_changelog/__manifest__.py | 22 + odoo_project_changelog/data/queue_job.xml | 31 ++ odoo_project_changelog/models/__init__.py | 2 + odoo_project_changelog/models/odoo_project.py | 85 ++++ .../models/odoo_project_repository.py | 87 ++++ .../readme/CONTRIBUTORS.rst | 2 + odoo_project_changelog/readme/DESCRIPTION.rst | 1 + .../report/ir_actions_report.xml | 17 + .../report/odoo_project_changelog.xml | 79 ++++ .../security/ir.model.access.csv | 2 + .../static/description/icon.png | Bin 0 -> 10254 bytes .../static/description/index.html | 416 ++++++++++++++++++ odoo_project_changelog/utils/__init__.py | 0 odoo_project_changelog/utils/scanner.py | 50 +++ odoo_project_changelog/views/odoo_project.xml | 67 +++ 17 files changed, 923 insertions(+) create mode 100644 odoo_project_changelog/README.rst create mode 100644 odoo_project_changelog/__init__.py create mode 100644 odoo_project_changelog/__manifest__.py create mode 100644 odoo_project_changelog/data/queue_job.xml create mode 100644 odoo_project_changelog/models/__init__.py create mode 100644 odoo_project_changelog/models/odoo_project.py create mode 100644 odoo_project_changelog/models/odoo_project_repository.py create mode 100644 odoo_project_changelog/readme/CONTRIBUTORS.rst create mode 100644 odoo_project_changelog/readme/DESCRIPTION.rst create mode 100644 odoo_project_changelog/report/ir_actions_report.xml create mode 100644 odoo_project_changelog/report/odoo_project_changelog.xml create mode 100644 odoo_project_changelog/security/ir.model.access.csv create mode 100644 odoo_project_changelog/static/description/icon.png create mode 100644 odoo_project_changelog/static/description/index.html create mode 100644 odoo_project_changelog/utils/__init__.py create mode 100644 odoo_project_changelog/utils/scanner.py create mode 100644 odoo_project_changelog/views/odoo_project.xml diff --git a/odoo_project_changelog/README.rst b/odoo_project_changelog/README.rst new file mode 100644 index 00000000..0b340c44 --- /dev/null +++ b/odoo_project_changelog/README.rst @@ -0,0 +1,61 @@ +========================= +Odoo Project - Changelogs +========================= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:caf51f538da8b936e047ed66d1dce665e597514cd6e5da23c75d763fef84f5a3 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-camptocamp%2Fodoo--repository-lightgray.png?logo=github + :target: https://github.com/camptocamp/odoo-repository/tree/16.0/odoo_project_changelog + :alt: camptocamp/odoo-repository + +|badge1| |badge2| |badge3| + +This module allows to generate CHANGELOGs for repositories used within a project. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Camptocamp + +Contributors +~~~~~~~~~~~~ + +* Camptocamp + * Sébastien Alix + +Maintainers +~~~~~~~~~~~ + +This module is part of the `camptocamp/odoo-repository `_ project on GitHub. + +You are welcome to contribute. diff --git a/odoo_project_changelog/__init__.py b/odoo_project_changelog/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/odoo_project_changelog/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo_project_changelog/__manifest__.py b/odoo_project_changelog/__manifest__.py new file mode 100644 index 00000000..bb99b0ca --- /dev/null +++ b/odoo_project_changelog/__manifest__.py @@ -0,0 +1,22 @@ +# Copyright 2024 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) +{ + "name": "Odoo Project - Changelogs", + "summary": "Generate Changelogs from repositories for installed modules.", + "version": "16.0.1.0.0", + "category": "Tools", + "author": "Camptocamp, Odoo Community Association (OCA)", + "website": "https://github.com/camptocamp/odoo-repository", + "data": [ + "security/ir.model.access.csv", + "data/queue_job.xml", + "views/odoo_project.xml", + "report/ir_actions_report.xml", + "report/odoo_project_changelog.xml", + ], + "installable": True, + "depends": [ + "odoo_project", + ], + "license": "AGPL-3", +} diff --git a/odoo_project_changelog/data/queue_job.xml b/odoo_project_changelog/data/queue_job.xml new file mode 100644 index 00000000..96ac6013 --- /dev/null +++ b/odoo_project_changelog/data/queue_job.xml @@ -0,0 +1,31 @@ + + + + + + odoo_project_changelog + + + + + + _generate_changelog + + + + + + + _generate_changelog_report + + + + + diff --git a/odoo_project_changelog/models/__init__.py b/odoo_project_changelog/models/__init__.py new file mode 100644 index 00000000..3efaabd9 --- /dev/null +++ b/odoo_project_changelog/models/__init__.py @@ -0,0 +1,2 @@ +from . import odoo_project_repository +from . import odoo_project diff --git a/odoo_project_changelog/models/odoo_project.py b/odoo_project_changelog/models/odoo_project.py new file mode 100644 index 00000000..dfa5321e --- /dev/null +++ b/odoo_project_changelog/models/odoo_project.py @@ -0,0 +1,85 @@ +# Copyright 2024 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +from urllib.parse import urljoin + +from odoo import fields, models + +from odoo.addons.queue_job.delay import chain +from odoo.addons.queue_job.job import identity_exact + + +class OdooProject(models.Model): + _inherit = "odoo.project" + + used_repository_ids = fields.One2many( + comodel_name="odoo.project.repository", + inverse_name="odoo_project_id", + string="Used Repositories", + context={"active_test": False}, + ) + changelog_enabled_repository_ids = fields.One2many( + comodel_name="odoo.project.repository", + inverse_name="odoo_project_id", + string="Enabled Repositories for CHANGELOG", + ) + changelog_state = fields.Selection( + selection=[ + ("none", "None"), + ("in_progress", "In progress"), + ("done", "Done"), + ], + default="none", + copy=False, + ) + changelog_url = fields.Char(compute="_compute_changelog_url") + + def _compute_changelog_url(self): + for rec in self: + rec.changelog_url = urljoin( + rec.get_base_url() + "/", + f"report/html/odoo_project_changelog.report_changelog/{rec.id}", + ) + + def action_generate_changelog(self): + self.ensure_one() + self.changelog_state = "in_progress" + self.used_repository_ids.changelog = False + jobs = self._create_jobs() + chain(*jobs).delay() + + def action_open_changelog(self): + return { + "type": "ir.actions.act_url", + "url": self.changelog_url, + "target": "_new", + "target_type": "public", + } + + def _create_jobs(self): + self.ensure_one() + jobs = [] + # Spawn jobs generating a changelog for each repository + for repo in self.used_repository_ids: + if not repo.active: + continue + delayable = repo.delayable( + description=( + f"Collect CHANGELOG data for {self.display_name}, " + f"repository {repo.repository_branch_id.display_name}" + ), + identity_key=identity_exact, + ) + job = delayable._generate_changelog() + jobs.append(job) + # Spawn job updating the CHANGELOG state to done + delayable = self.delayable( + description=(f"Set CHANGELOG as ready for {self.display_name}"), + identity_key=identity_exact, + ) + job = delayable._set_changelog_done() + jobs.append(job) + return jobs + + def _set_changelog_done(self): + self.changelog_state = "done" diff --git a/odoo_project_changelog/models/odoo_project_repository.py b/odoo_project_changelog/models/odoo_project_repository.py new file mode 100644 index 00000000..fb30e737 --- /dev/null +++ b/odoo_project_changelog/models/odoo_project_repository.py @@ -0,0 +1,87 @@ +# Copyright 2024 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +from odoo import fields, models + +from ..utils.scanner import ChangelogScannerOdooEnv + + +class OdooProjectRepository(models.Model): + _name = "odoo.project.repository" + _description = "Repository used in a project" + + odoo_project_id = fields.Many2one( + comodel_name="odoo.project", + ondelete="cascade", + string="Project", + required=True, + index=True, + readonly=True, + ) + repository_branch_id = fields.Many2one( + comodel_name="odoo.repository.branch", + ondelete="cascade", + string="Repository Branch", + required=True, + index=True, + ) + deployed_commit = fields.Char(help="The changelog is generated from this commit.") + target_commit = fields.Char( + help=( + "Changelog is generated until this commit. " + "If not set, the latest commit of the branch is used." + ) + ) + active = fields.Boolean(string="Include", default=True) + changelog = fields.Serialized() + + def _prepare_changelog_scanner_parameters(self): + ir_config = self.env["ir.config_parameter"] + odoo_repository = self.repository_branch_id.repository_id + repositories_path = ir_config.get_param(odoo_repository._repositories_path_key) + return { + "org": odoo_repository.org_id.name, + "name": odoo_repository.name, + "clone_url": odoo_repository.clone_url, + "odoo_project_repository_id": self.id, + "repositories_path": repositories_path, + "repo_type": odoo_repository.repo_type, + "ssh_key": odoo_repository.ssh_key_id.private_key, + "token": odoo_repository._get_token(), + "env": self.env, + } + + def _generate_changelog(self): + self.ensure_one() + params = self._prepare_changelog_scanner_parameters() + scanner = ChangelogScannerOdooEnv(**params) + scanner.scan() + + def push_changelog(self, changelog): + """Store the changelog. Called by the scanner.""" + self.ensure_one() + self.changelog = changelog + self.target_commit = self.changelog["target_commit"] + + def _get_report_data(self): + """Return data used by the CHANGELOG report.""" + self.ensure_one() + project_module_model = self.env["odoo.project.module"] + if not self.changelog.get("modules"): + return {"categories": {}, "count": 0} + # Collect all related categories and sort them by name + project_module_ids = [ + int(project_module_id) for project_module_id in self.changelog["modules"] + ] + project_modules = project_module_model.browse(project_module_ids).exists() + categories = project_modules.category_id.sorted( + key=lambda o: (o.name or "").lower() # Case insensitive + ) + data = {"categories": {categ: {} for categ in categories}} + data["categories"][self.env["odoo.module.category"]] = {} + data["count"] = len(self.changelog["modules"]) + for project_module_id, module_data in self.changelog["modules"].items(): + project_module = project_module_model.browse(int(project_module_id)) + categ = project_module.category_id + data["categories"][categ][project_module] = module_data + return data diff --git a/odoo_project_changelog/readme/CONTRIBUTORS.rst b/odoo_project_changelog/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..a0c91e35 --- /dev/null +++ b/odoo_project_changelog/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Camptocamp + * Sébastien Alix diff --git a/odoo_project_changelog/readme/DESCRIPTION.rst b/odoo_project_changelog/readme/DESCRIPTION.rst new file mode 100644 index 00000000..8110b39d --- /dev/null +++ b/odoo_project_changelog/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module allows to generate CHANGELOGs for repositories used within a project. diff --git a/odoo_project_changelog/report/ir_actions_report.xml b/odoo_project_changelog/report/ir_actions_report.xml new file mode 100644 index 00000000..4412fd1b --- /dev/null +++ b/odoo_project_changelog/report/ir_actions_report.xml @@ -0,0 +1,17 @@ + + + + + + CHANGELOG + odoo.project + qweb-html + odoo_project_changelog.report_changelog + odoo_project_changelog.report_changelog + CHANGELOG + + report + + + diff --git a/odoo_project_changelog/report/odoo_project_changelog.xml b/odoo_project_changelog/report/odoo_project_changelog.xml new file mode 100644 index 00000000..7dad0740 --- /dev/null +++ b/odoo_project_changelog/report/odoo_project_changelog.xml @@ -0,0 +1,79 @@ + + + + + + + diff --git a/odoo_project_changelog/security/ir.model.access.csv b/odoo_project_changelog/security/ir.model.access.csv new file mode 100644 index 00000000..1964452d --- /dev/null +++ b/odoo_project_changelog/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_odoo_project_repository_user,odoo_project_repository_user,model_odoo_project_repository,odoo_repository.group_odoo_repository_user,1,1,1,1 diff --git a/odoo_project_changelog/static/description/icon.png b/odoo_project_changelog/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1dcc49c24f364e9adf0afbc6fc0bac6dbecdeb11 GIT binary patch literal 10254 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 + + + + +Odoo Project - Changelogs + + + +
+

Odoo Project - Changelogs

+ + +

Beta License: AGPL-3 camptocamp/odoo-repository

+

This module allows to generate CHANGELOGs for repositories used within a project.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Camptocamp
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is part of the camptocamp/odoo-repository project on GitHub.

+

You are welcome to contribute.

+
+
+
+ + diff --git a/odoo_project_changelog/utils/__init__.py b/odoo_project_changelog/utils/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/odoo_project_changelog/utils/scanner.py b/odoo_project_changelog/utils/scanner.py new file mode 100644 index 00000000..8405ca92 --- /dev/null +++ b/odoo_project_changelog/utils/scanner.py @@ -0,0 +1,50 @@ +# Copyright 2024 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +from odoo.addons.odoo_repository.lib.scanner import ChangelogScanner + + +class ChangelogScannerOdooEnv(ChangelogScanner): + """ChangelogScanner running on the same server than Odoo. + + This class takes an additional `env` parameter (`odoo.api.Environment`) + used to request Odoo, and implement required methods to use it. + """ + + def __init__(self, *args, **kwargs): + if kwargs.get("env"): + self.env = kwargs.pop("env") + super().__init__(*args, **kwargs) + + def _get_odoo_project_repository_data(self, project_repo_id): + project_repo = ( + self.env["odoo.project.repository"].browse(project_repo_id).exists() + ) + project = project_repo.odoo_project_id + data = { + "odoo_project_id": project.id, + "branch": project.odoo_version_id.name, + "source_commit": project_repo.deployed_commit, + "target_commit": project_repo.target_commit, + "modules": [ + # List of dicts {"id": PROJECT_MODULE_ID, ...} + # {"id": 1, "name": "base", "path": "odoo/addons/base"}, + # {"id": 2, "name": "account", "path": "addons/account"}, + {"id": mod.id, "name": mod.module_name, "path": mod.full_path} + for mod in project.project_module_ids.filtered_domain( + [ + ( + "repository_branch_id", + "=", + project_repo.repository_branch_id.id, + ) + ] + ) + ], + } + return data + + def _push_odoo_project_repository_changelog(self, project_repo_id, changelog): + self.env["odoo.project.repository"].browse( + project_repo_id + ).exists().push_changelog(changelog) diff --git a/odoo_project_changelog/views/odoo_project.xml b/odoo_project_changelog/views/odoo_project.xml new file mode 100644 index 00000000..fc4426ae --- /dev/null +++ b/odoo_project_changelog/views/odoo_project.xml @@ -0,0 +1,67 @@ + + + + + + odoo.project.form.inherit + odoo.project + + + + +
+ +
+ + + + + + + + + + + +
+
+
+
+ +
From bf1814a54d3775a3c9c1b5c7a5f58eebdb53c6ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Alix?= Date: Mon, 8 Dec 2025 12:00:37 +0100 Subject: [PATCH 2/6] [IMP] odoo_project_changelog: update README --- odoo_project_changelog/README.rst | 67 +++++++++++---- odoo_project_changelog/readme/CONTRIBUTORS.md | 2 + .../readme/CONTRIBUTORS.rst | 2 - odoo_project_changelog/readme/DESCRIPTION.md | 10 +++ odoo_project_changelog/readme/DESCRIPTION.rst | 1 - .../static/description/index.html | 79 ++++++++++++------ .../static/img/changelog.png | Bin 0 -> 121149 bytes 7 files changed, 115 insertions(+), 46 deletions(-) create mode 100644 odoo_project_changelog/readme/CONTRIBUTORS.md delete mode 100644 odoo_project_changelog/readme/CONTRIBUTORS.rst create mode 100644 odoo_project_changelog/readme/DESCRIPTION.md delete mode 100644 odoo_project_changelog/readme/DESCRIPTION.rst create mode 100644 odoo_project_changelog/static/img/changelog.png diff --git a/odoo_project_changelog/README.rst b/odoo_project_changelog/README.rst index 0b340c44..9a709268 100644 --- a/odoo_project_changelog/README.rst +++ b/odoo_project_changelog/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + ========================= Odoo Project - Changelogs ========================= @@ -7,22 +11,42 @@ Odoo Project - Changelogs !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:caf51f538da8b936e047ed66d1dce665e597514cd6e5da23c75d763fef84f5a3 + !! source digest: sha256:95c7028f7abcb463303b2436cec61be3f5f70cc946eeced2f0d06b2bf83bad06 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 -.. |badge3| image:: https://img.shields.io/badge/github-camptocamp%2Fodoo--repository-lightgray.png?logo=github - :target: https://github.com/camptocamp/odoo-repository/tree/16.0/odoo_project_changelog - :alt: camptocamp/odoo-repository +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fodoo--repository-lightgray.png?logo=github + :target: https://github.com/OCA/odoo-repository/tree/16.0/odoo_project_changelog + :alt: OCA/odoo-repository +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/odoo-repository-16-0/odoo-repository-16-0-odoo_project_changelog + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/odoo-repository&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows to generate CHANGELOGs for repositories used within a +project. + +Changelogs are generated from ``git`` commits history, and take as input +source and target references from this repository (a commit SHA, branch, +tag...). Only relevant changes done will be listed to not clutter the +changelog (translations, unit tests or documentation updates won't be +listed). + +The output is an HTML page where the user can easily navigate, fold and +unfold sections. -|badge1| |badge2| |badge3| +|Changelog| -This module allows to generate CHANGELOGs for repositories used within a project. +.. |Changelog| image:: https://raw.githubusercontent.com/OCA/odoo-repository/16.0/odoo_project_changelog/static/img/changelog.png **Table of contents** @@ -32,10 +56,10 @@ This module allows to generate CHANGELOGs for repositories used within a project Bug Tracker =========== -Bugs are tracked on `GitHub Issues `_. +Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -43,19 +67,30 @@ Credits ======= Authors -~~~~~~~ +------- * Camptocamp Contributors -~~~~~~~~~~~~ +------------ -* Camptocamp - * Sébastien Alix +- Camptocamp + + - Sébastien Alix Maintainers -~~~~~~~~~~~ +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. -This module is part of the `camptocamp/odoo-repository `_ project on GitHub. +This module is part of the `OCA/odoo-repository `_ project on GitHub. -You are welcome to contribute. +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo_project_changelog/readme/CONTRIBUTORS.md b/odoo_project_changelog/readme/CONTRIBUTORS.md new file mode 100644 index 00000000..17752927 --- /dev/null +++ b/odoo_project_changelog/readme/CONTRIBUTORS.md @@ -0,0 +1,2 @@ +- Camptocamp + - Sébastien Alix \ diff --git a/odoo_project_changelog/readme/CONTRIBUTORS.rst b/odoo_project_changelog/readme/CONTRIBUTORS.rst deleted file mode 100644 index a0c91e35..00000000 --- a/odoo_project_changelog/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1,2 +0,0 @@ -* Camptocamp - * Sébastien Alix diff --git a/odoo_project_changelog/readme/DESCRIPTION.md b/odoo_project_changelog/readme/DESCRIPTION.md new file mode 100644 index 00000000..dfecbb1a --- /dev/null +++ b/odoo_project_changelog/readme/DESCRIPTION.md @@ -0,0 +1,10 @@ +This module allows to generate CHANGELOGs for repositories used within a project. + +Changelogs are generated from `git` commits history, and take as input source +and target references from this repository (a commit SHA, branch, tag...). +Only relevant changes done will be listed to not clutter the changelog +(translations, unit tests or documentation updates won't be listed). + +The output is an HTML page where the user can easily navigate, fold and unfold sections. + + ![Changelog](./static/img/changelog.png) diff --git a/odoo_project_changelog/readme/DESCRIPTION.rst b/odoo_project_changelog/readme/DESCRIPTION.rst deleted file mode 100644 index 8110b39d..00000000 --- a/odoo_project_changelog/readme/DESCRIPTION.rst +++ /dev/null @@ -1 +0,0 @@ -This module allows to generate CHANGELOGs for repositories used within a project. diff --git a/odoo_project_changelog/static/description/index.html b/odoo_project_changelog/static/description/index.html index 68da1dab..9d7b0d84 100644 --- a/odoo_project_changelog/static/description/index.html +++ b/odoo_project_changelog/static/description/index.html @@ -2,18 +2,19 @@ - -Odoo Project - Changelogs + +README.rst -
-

Odoo Project - Changelogs

+
+ + +Odoo Community Association + +
+

Odoo Project - Changelogs

-

Beta License: AGPL-3 camptocamp/odoo-repository

-

This module allows to generate CHANGELOGs for repositories used within a project.

+

Beta License: AGPL-3 OCA/odoo-repository Translate me on Weblate Try me on Runboat

+

This module allows to generate CHANGELOGs for repositories used within a +project.

+

Changelogs are generated from git commits history, and take as input +source and target references from this repository (a commit SHA, branch, +tag…). Only relevant changes done will be listed to not clutter the +changelog (translations, unit tests or documentation updates won’t be +listed).

+

The output is an HTML page where the user can easily navigate, fold and +unfold sections.

+

Changelog

Table of contents

-

Bug Tracker

-

Bugs are tracked on GitHub Issues. +

Bug Tracker

+

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • Camptocamp
-

Contributors

+

Contributors

-

Maintainers

-

This module is part of the camptocamp/odoo-repository project on GitHub.

-

You are welcome to contribute.

+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/odoo-repository project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
diff --git a/odoo_project_changelog/static/img/changelog.png b/odoo_project_changelog/static/img/changelog.png new file mode 100644 index 0000000000000000000000000000000000000000..bc3839e2d850414a428dbff472980a0fb03857a0 GIT binary patch literal 121149 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

OO!<>%2GFug^%U(^6+ToDzbH@1fFP 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 Date: Sat, 17 Jan 2026 13:16:12 +0100 Subject: [PATCH 3/6] Update all modules manifest and README with new repo info --- odoo_project_changelog/README.rst | 20 +- odoo_project_changelog/__manifest__.py | 4 +- .../i18n/odoo_project_changelog.pot | 210 ++++++++++++++++++ .../static/description/index.html | 12 +- 4 files changed, 228 insertions(+), 18 deletions(-) create mode 100644 odoo_project_changelog/i18n/odoo_project_changelog.pot diff --git a/odoo_project_changelog/README.rst b/odoo_project_changelog/README.rst index 9a709268..7701d0ee 100644 --- a/odoo_project_changelog/README.rst +++ b/odoo_project_changelog/README.rst @@ -11,7 +11,7 @@ Odoo Project - Changelogs !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:95c7028f7abcb463303b2436cec61be3f5f70cc946eeced2f0d06b2bf83bad06 + !! source digest: sha256:06757be51744d76ceef1dad049c603a1dfbf21bed97b8f57c373a9a53b318556 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -20,14 +20,14 @@ Odoo Project - Changelogs .. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 -.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fodoo--repository-lightgray.png?logo=github - :target: https://github.com/OCA/odoo-repository/tree/16.0/odoo_project_changelog - :alt: OCA/odoo-repository +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmodule--composition--analysis-lightgray.png?logo=github + :target: https://github.com/OCA/module-composition-analysis/tree/16.0/odoo_project_changelog + :alt: OCA/module-composition-analysis .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/odoo-repository-16-0/odoo-repository-16-0-odoo_project_changelog + :target: https://translation.odoo-community.org/projects/module-composition-analysis-16-0/module-composition-analysis-16-0-odoo_project_changelog :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/odoo-repository&target_branch=16.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/module-composition-analysis&target_branch=16.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -46,7 +46,7 @@ unfold sections. |Changelog| -.. |Changelog| image:: https://raw.githubusercontent.com/OCA/odoo-repository/16.0/odoo_project_changelog/static/img/changelog.png +.. |Changelog| image:: https://raw.githubusercontent.com/OCA/module-composition-analysis/16.0/odoo_project_changelog/static/img/changelog.png **Table of contents** @@ -56,10 +56,10 @@ unfold sections. Bug Tracker =========== -Bugs are tracked on `GitHub Issues `_. +Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -91,6 +91,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/odoo-repository `_ project on GitHub. +This module is part of the `OCA/module-composition-analysis `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo_project_changelog/__manifest__.py b/odoo_project_changelog/__manifest__.py index bb99b0ca..12c56c0d 100644 --- a/odoo_project_changelog/__manifest__.py +++ b/odoo_project_changelog/__manifest__.py @@ -3,10 +3,10 @@ { "name": "Odoo Project - Changelogs", "summary": "Generate Changelogs from repositories for installed modules.", - "version": "16.0.1.0.0", + "version": "16.0.1.0.1", "category": "Tools", "author": "Camptocamp, Odoo Community Association (OCA)", - "website": "https://github.com/camptocamp/odoo-repository", + "website": "https://github.com/OCA/module-composition-analysis", "data": [ "security/ir.model.access.csv", "data/queue_job.xml", diff --git a/odoo_project_changelog/i18n/odoo_project_changelog.pot b/odoo_project_changelog/i18n/odoo_project_changelog.pot new file mode 100644 index 00000000..f04a6642 --- /dev/null +++ b/odoo_project_changelog/i18n/odoo_project_changelog.pot @@ -0,0 +1,210 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * odoo_project_changelog +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.report_changelog +msgid "- CHANGELOG" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.odoo_project_view_form +msgid "" +"" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.actions.report,name:odoo_project_changelog.action_report_changelog +#: model:ir.actions.report,print_report_name:odoo_project_changelog.action_report_changelog +msgid "CHANGELOG" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.odoo_project_view_form +msgid "Changelog" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project__changelog_state +msgid "Changelog State" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project__changelog_url +msgid "Changelog Url" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,help:odoo_project_changelog.field_odoo_project_repository__target_commit +msgid "" +"Changelog is generated until this commit. If not set, the latest commit of " +"the branch is used." +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__create_uid +msgid "Created by" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__create_date +msgid "Created on" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.report_changelog +msgid "Date:" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__deployed_commit +msgid "Deployed Commit" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__display_name +msgid "Display Name" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields.selection,name:odoo_project_changelog.selection__odoo_project__changelog_state__done +msgid "Done" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project__changelog_enabled_repository_ids +msgid "Enabled Repositories for CHANGELOG" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.report_changelog +msgid "From" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.odoo_project_view_form +msgid "Generate CHANGELOG" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__id +msgid "ID" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields.selection,name:odoo_project_changelog.selection__odoo_project__changelog_state__in_progress +msgid "In progress" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__active +msgid "Include" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository____last_update +msgid "Last Modified on" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__write_date +msgid "Last Updated on" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.report_changelog +msgid "Link" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields.selection,name:odoo_project_changelog.selection__odoo_project__changelog_state__none +msgid "None" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model,name:odoo_project_changelog.model_odoo_project +msgid "Odoo Project" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.odoo_project_view_form +msgid "Open CHANGELOG" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__odoo_project_id +msgid "Project" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.odoo_project_view_form +msgid "Refresh" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.odoo_project_view_form +msgid "Repositories" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__repository_branch_id +msgid "Repository Branch" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model,name:odoo_project_changelog.model_odoo_project_repository +msgid "Repository used in a project" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__target_commit +msgid "Target Commit" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,help:odoo_project_changelog.field_odoo_project_repository__deployed_commit +msgid "The changelog is generated from this commit." +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.odoo_project_view_form +msgid "To compare with" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project__used_repository_ids +msgid "Used Repositories" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.report_changelog +msgid "change" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.report_changelog +msgid "modules)" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.report_changelog +msgid "to" +msgstr "" diff --git a/odoo_project_changelog/static/description/index.html b/odoo_project_changelog/static/description/index.html index 9d7b0d84..19925f04 100644 --- a/odoo_project_changelog/static/description/index.html +++ b/odoo_project_changelog/static/description/index.html @@ -372,9 +372,9 @@

Odoo Project - Changelogs

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:95c7028f7abcb463303b2436cec61be3f5f70cc946eeced2f0d06b2bf83bad06 +!! source digest: sha256:06757be51744d76ceef1dad049c603a1dfbf21bed97b8f57c373a9a53b318556 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/odoo-repository Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/module-composition-analysis Translate me on Weblate Try me on Runboat

This module allows to generate CHANGELOGs for repositories used within a project.

Changelogs are generated from git commits history, and take as input @@ -384,7 +384,7 @@

Odoo Project - Changelogs

listed).

The output is an HTML page where the user can easily navigate, fold and unfold sections.

-

Changelog

+

Changelog

Table of contents

    @@ -399,10 +399,10 @@

    Odoo Project - Changelogs

Bug Tracker

-

Bugs are tracked on GitHub Issues. +

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -431,7 +431,7 @@

Maintainers

OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

-

This module is part of the OCA/odoo-repository project on GitHub.

+

This module is part of the OCA/module-composition-analysis project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

From 5b65f4bd88ca8c04ddd2ba8a1ace31b615f570c4 Mon Sep 17 00:00:00 2001 From: mymage Date: Mon, 2 Feb 2026 07:57:56 +0000 Subject: [PATCH 4/6] Added translation using Weblate (Italian) --- odoo_project_changelog/i18n/it.po | 211 ++++++++++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 odoo_project_changelog/i18n/it.po diff --git a/odoo_project_changelog/i18n/it.po b/odoo_project_changelog/i18n/it.po new file mode 100644 index 00000000..d9a7582a --- /dev/null +++ b/odoo_project_changelog/i18n/it.po @@ -0,0 +1,211 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * odoo_project_changelog +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.report_changelog +msgid "- CHANGELOG" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.odoo_project_view_form +msgid "" +"" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.actions.report,name:odoo_project_changelog.action_report_changelog +#: model:ir.actions.report,print_report_name:odoo_project_changelog.action_report_changelog +msgid "CHANGELOG" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.odoo_project_view_form +msgid "Changelog" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project__changelog_state +msgid "Changelog State" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project__changelog_url +msgid "Changelog Url" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,help:odoo_project_changelog.field_odoo_project_repository__target_commit +msgid "" +"Changelog is generated until this commit. If not set, the latest commit of " +"the branch is used." +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__create_uid +msgid "Created by" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__create_date +msgid "Created on" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.report_changelog +msgid "Date:" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__deployed_commit +msgid "Deployed Commit" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__display_name +msgid "Display Name" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields.selection,name:odoo_project_changelog.selection__odoo_project__changelog_state__done +msgid "Done" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project__changelog_enabled_repository_ids +msgid "Enabled Repositories for CHANGELOG" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.report_changelog +msgid "From" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.odoo_project_view_form +msgid "Generate CHANGELOG" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__id +msgid "ID" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields.selection,name:odoo_project_changelog.selection__odoo_project__changelog_state__in_progress +msgid "In progress" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__active +msgid "Include" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository____last_update +msgid "Last Modified on" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__write_date +msgid "Last Updated on" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.report_changelog +msgid "Link" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields.selection,name:odoo_project_changelog.selection__odoo_project__changelog_state__none +msgid "None" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model,name:odoo_project_changelog.model_odoo_project +msgid "Odoo Project" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.odoo_project_view_form +msgid "Open CHANGELOG" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__odoo_project_id +msgid "Project" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.odoo_project_view_form +msgid "Refresh" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.odoo_project_view_form +msgid "Repositories" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__repository_branch_id +msgid "Repository Branch" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model,name:odoo_project_changelog.model_odoo_project_repository +msgid "Repository used in a project" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project_repository__target_commit +msgid "Target Commit" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,help:odoo_project_changelog.field_odoo_project_repository__deployed_commit +msgid "The changelog is generated from this commit." +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.odoo_project_view_form +msgid "To compare with" +msgstr "" + +#. module: odoo_project_changelog +#: model:ir.model.fields,field_description:odoo_project_changelog.field_odoo_project__used_repository_ids +msgid "Used Repositories" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.report_changelog +msgid "change" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.report_changelog +msgid "modules)" +msgstr "" + +#. module: odoo_project_changelog +#: model_terms:ir.ui.view,arch_db:odoo_project_changelog.report_changelog +msgid "to" +msgstr "" From 1d2ae4ec84fa39888c7203d2c7b8d235aea35a7b Mon Sep 17 00:00:00 2001 From: Francois Poizat Date: Tue, 19 May 2026 12:01:56 +0200 Subject: [PATCH 5/6] [IMP] odoo_project_changelog: pre-commit auto fixes --- odoo_project_changelog/data/queue_job.xml | 34 ++--- odoo_project_changelog/pyproject.toml | 3 + .../report/ir_actions_report.xml | 22 ++- .../report/odoo_project_changelog.xml | 137 ++++++++++-------- odoo_project_changelog/views/odoo_project.xml | 60 ++++---- 5 files changed, 137 insertions(+), 119 deletions(-) create mode 100644 odoo_project_changelog/pyproject.toml diff --git a/odoo_project_changelog/data/queue_job.xml b/odoo_project_changelog/data/queue_job.xml index 96ac6013..9ceddeef 100644 --- a/odoo_project_changelog/data/queue_job.xml +++ b/odoo_project_changelog/data/queue_job.xml @@ -2,30 +2,28 @@ + + odoo_project_changelog + + - - odoo_project_changelog - - - - - - _generate_changelog - - - + + _generate_changelog + + + - - - _generate_changelog_report - - - - + + _generate_changelog_report + + + diff --git a/odoo_project_changelog/pyproject.toml b/odoo_project_changelog/pyproject.toml new file mode 100644 index 00000000..4231d0cc --- /dev/null +++ b/odoo_project_changelog/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/odoo_project_changelog/report/ir_actions_report.xml b/odoo_project_changelog/report/ir_actions_report.xml index 4412fd1b..c842549c 100644 --- a/odoo_project_changelog/report/ir_actions_report.xml +++ b/odoo_project_changelog/report/ir_actions_report.xml @@ -2,16 +2,14 @@ - - - CHANGELOG - odoo.project - qweb-html - odoo_project_changelog.report_changelog - odoo_project_changelog.report_changelog - CHANGELOG - - report - - + + CHANGELOG + odoo.project + qweb-html + odoo_project_changelog.report_changelog + odoo_project_changelog.report_changelog + CHANGELOG + + report + diff --git a/odoo_project_changelog/report/odoo_project_changelog.xml b/odoo_project_changelog/report/odoo_project_changelog.xml index 7dad0740..e5cfd5f3 100644 --- a/odoo_project_changelog/report/odoo_project_changelog.xml +++ b/odoo_project_changelog/report/odoo_project_changelog.xml @@ -2,78 +2,99 @@ - - diff --git a/odoo_project_changelog/views/odoo_project.xml b/odoo_project_changelog/views/odoo_project.xml index fc4426ae..28398fd3 100644 --- a/odoo_project_changelog/views/odoo_project.xml +++ b/odoo_project_changelog/views/odoo_project.xml @@ -2,21 +2,20 @@ - - - odoo.project.form.inherit - odoo.project - - - - -
+ odoo.project.form.inherit + odoo.project + + + + +
- -
- - - - + + + + - - - - - - - -
-
-
- - + + + + + + + + + + + From 7487c9bfe0e418f47089dd2b40dd91888f52620e Mon Sep 17 00:00:00 2001 From: Francois Poizat Date: Tue, 19 May 2026 12:01:56 +0200 Subject: [PATCH 6/6] [MIG] odoo_project_changelog: Migration to 18.0 --- odoo_project_changelog/README.rst | 22 ++++++-------- odoo_project_changelog/__manifest__.py | 2 +- .../report/odoo_project_changelog.xml | 16 +++++----- .../static/description/index.html | 30 ++++++++----------- odoo_project_changelog/views/odoo_project.xml | 20 ++++++------- 5 files changed, 39 insertions(+), 51 deletions(-) diff --git a/odoo_project_changelog/README.rst b/odoo_project_changelog/README.rst index 7701d0ee..300cb2a3 100644 --- a/odoo_project_changelog/README.rst +++ b/odoo_project_changelog/README.rst @@ -1,7 +1,3 @@ -.. image:: https://odoo-community.org/readme-banner-image - :target: https://odoo-community.org/get-involved?utm_source=readme - :alt: Odoo Community Association - ========================= Odoo Project - Changelogs ========================= @@ -17,17 +13,17 @@ Odoo Project - Changelogs .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmodule--composition--analysis-lightgray.png?logo=github - :target: https://github.com/OCA/module-composition-analysis/tree/16.0/odoo_project_changelog + :target: https://github.com/OCA/module-composition-analysis/tree/18.0/odoo_project_changelog :alt: OCA/module-composition-analysis .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/module-composition-analysis-16-0/module-composition-analysis-16-0-odoo_project_changelog + :target: https://translation.odoo-community.org/projects/module-composition-analysis-18-0/module-composition-analysis-18-0-odoo_project_changelog :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/module-composition-analysis&target_branch=16.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/module-composition-analysis&target_branch=18.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -46,7 +42,7 @@ unfold sections. |Changelog| -.. |Changelog| image:: https://raw.githubusercontent.com/OCA/module-composition-analysis/16.0/odoo_project_changelog/static/img/changelog.png +.. |Changelog| image:: https://raw.githubusercontent.com/OCA/module-composition-analysis/18.0/odoo_project_changelog/static/img/changelog.png **Table of contents** @@ -59,7 +55,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -74,9 +70,9 @@ Authors Contributors ------------ -- Camptocamp +- Camptocamp - - Sébastien Alix + - Sébastien Alix Maintainers ----------- @@ -91,6 +87,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/module-composition-analysis `_ project on GitHub. +This module is part of the `OCA/module-composition-analysis `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo_project_changelog/__manifest__.py b/odoo_project_changelog/__manifest__.py index 12c56c0d..02b9c060 100644 --- a/odoo_project_changelog/__manifest__.py +++ b/odoo_project_changelog/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Odoo Project - Changelogs", "summary": "Generate Changelogs from repositories for installed modules.", - "version": "16.0.1.0.1", + "version": "18.0.1.0.0", "category": "Tools", "author": "Camptocamp, Odoo Community Association (OCA)", "website": "https://github.com/OCA/module-composition-analysis", diff --git a/odoo_project_changelog/report/odoo_project_changelog.xml b/odoo_project_changelog/report/odoo_project_changelog.xml index e5cfd5f3..8f8f2053 100644 --- a/odoo_project_changelog/report/odoo_project_changelog.xml +++ b/odoo_project_changelog/report/odoo_project_changelog.xml @@ -9,18 +9,16 @@

- - CHANGELOG -

+ - CHANGELOG

- ( modules) -

+ ( modules)

From to

- ( () - - + -README.rst +Odoo Project - Changelogs -
+
+

Odoo Project - Changelogs

- - -Odoo Community Association - -
-

Odoo Project - Changelogs

-

Beta License: AGPL-3 OCA/module-composition-analysis Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/module-composition-analysis Translate me on Weblate Try me on Runboat

This module allows to generate CHANGELOGs for repositories used within a project.

Changelogs are generated from git commits history, and take as input @@ -384,7 +379,7 @@

Odoo Project - Changelogs

listed).

The output is an HTML page where the user can easily navigate, fold and unfold sections.

-

Changelog

+

Changelog

Table of contents

    @@ -398,23 +393,23 @@

    Odoo Project - Changelogs

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • Camptocamp
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -431,11 +426,10 @@

Maintainers

OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

-

This module is part of the OCA/module-composition-analysis project on GitHub.

+

This module is part of the OCA/module-composition-analysis project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

-
diff --git a/odoo_project_changelog/views/odoo_project.xml b/odoo_project_changelog/views/odoo_project.xml index 28398fd3..490bf661 100644 --- a/odoo_project_changelog/views/odoo_project.xml +++ b/odoo_project_changelog/views/odoo_project.xml @@ -12,41 +12,40 @@
-
- + - + -