Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
6f24143
[OU-ADD] website_crm: Nothing to do
pilarvargas-tecnativa Jun 2, 2026
3cf9c54
[OU-ADD] mass_mailing_crm: Nothing to do
pilarvargas-tecnativa Jun 3, 2026
040ee80
[OU-FIX] account_edi_ubl_cii: guard map_values when source column is …
mvalee Jun 13, 2026
683b515
[OU-ADD] sale_crm: Nothing to do
pilarvargas-tecnativa Jun 15, 2026
4462680
Merge branch '19.0' into 19.0-ou-fix-account_edi_ubl_cii-guard
mvalee Jun 16, 2026
f799261
[OU-FIX] account_edi_ubl_cii: condense guard comment
mvalee Jun 17, 2026
75456cd
Merge branch '19.0' into 19.0-ou-fix-account_edi_ubl_cii-guard
mvalee Jun 18, 2026
6768a02
[OU-ADD] crm: Migration scripts
eduezerouali-tecnativa Jun 9, 2026
4943171
Merge PR #5716 into 19.0
OCA-git-bot Jun 23, 2026
790c333
Merge pull request #5706 from Tecnativa/19.0-ou-add-crm
pedrobaeza Jun 23, 2026
9f1e4ff
[ADD] code import from https://github.com/grap/openupgrade-extra-tools
legalsylvain Jun 23, 2026
869c03c
[ADD] check dependency action
hbrunn Jun 23, 2026
1d96b54
[OU-IMP] base: Call disable_invalid_filters
pedrobaeza Jun 23, 2026
39f8963
Merge pull request #5747 from Tecnativa/19.0-ou_imp-disable_invalid_f…
pedrobaeza Jun 23, 2026
1823588
Merge pull request #5745 from hbrunn/19.0-check-dependency-action
pedrobaeza Jun 23, 2026
2854190
Merge pull request #5686 from Tecnativa/19.0-ou-add-website_crm
pedrobaeza Jun 24, 2026
b1fc425
Merge PR #5688 into 19.0
OCA-git-bot Jun 24, 2026
ca8633a
[OU-ADD] sale_expense: Migration scripts
carlos-lopez-tecnativa Jun 24, 2026
3f3ac97
Merge pull request #5750 from Tecnativa/19.0-ou-add-sale_expense
pedrobaeza Jun 24, 2026
bd876de
[OU-ADD] maintenance,stock_maintenance: Migration scripts
carlos-lopez-tecnativa Jun 24, 2026
5b41880
Merge pull request #5720 from Tecnativa/19.0-ou-add-sale_crmm
pedrobaeza Jun 25, 2026
4ea3c46
[OU-ADD] hr_maintenance: Nothing to do
carlos-lopez-tecnativa Jun 26, 2026
f1f0408
[OU-ADD] website_hr_recruitment: Migration scripts
carlos-lopez-tecnativa Jun 26, 2026
7df1d58
[OU-ADD] website_blog: Migration scripts
carlos-lopez-tecnativa Jun 26, 2026
52dfc6b
[OU-ADD] stock_picking_batch: Nothing to do
carlos-lopez-tecnativa Jun 26, 2026
1d8984e
[OU-ADD] website_google_map: Nothing to do
carlos-lopez-tecnativa Jun 26, 2026
db2e321
[OU-ADD] website_project: Nothing to do
carlos-lopez-tecnativa Jun 26, 2026
419b1cf
[OU-ADD] auth_oauth: Migration scripts
carlos-lopez-tecnativa Jun 26, 2026
cc8d790
Merge pull request #5756 from Tecnativa/19.0-ou-add-stock_picking_batch
pedrobaeza Jun 29, 2026
2051237
Merge pull request #5758 from Tecnativa/19.0-ou-add-website_project
pedrobaeza Jun 29, 2026
5d6f9f8
Merge pull request #5759 from Tecnativa/19.0-ou-add-auth_oauth
pedrobaeza Jun 29, 2026
4578e6f
Merge pull request #5757 from Tecnativa/19.0-ou-add-website_google_map
pedrobaeza Jun 29, 2026
486344a
Merge pull request #5753 from Tecnativa/19.0-ou-add-website_hr_recrui…
pedrobaeza Jun 29, 2026
38079d8
Merge pull request #5755 from Tecnativa/19.0-ou-add-website_blog
pedrobaeza Jun 30, 2026
6474081
Merge pull request #5751 from Tecnativa/19.0-ou-add-maintenance
pedrobaeza Jun 30, 2026
842c6bb
Merge pull request #5752 from Tecnativa/19.0-ou-add-hr_maintenance
pedrobaeza Jun 30, 2026
8790a6b
[MIG] event
hbrunn Jun 23, 2026
ad7a732
[OU-ADD] survey: Migration scripts
carlos-lopez-tecnativa Jun 26, 2026
dcc1376
Merge pull request #5760 from Tecnativa/19.0-ou-add-survey
pedrobaeza Jun 30, 2026
7eec2f6
[IMP] base: Load additional renames/merges from env.
david-banon-tecnativa Jul 6, 2026
c67d111
[OU-ADD] website_profile: Migration scripts
pilarvargas-tecnativa Jul 6, 2026
9f88cfd
[OU-ADD] event_product: Migration scripts
pilarvargas-tecnativa Jul 6, 2026
5128f3c
[OU-ADD] website_cf_turnstile: Nothing to do
pilarvargas-tecnativa Jul 6, 2026
5a03409
Merge pull request #5769 from Tecnativa/19.0-ou-add-website_profile
pedrobaeza Jul 6, 2026
6437799
Merge PR #5765 into 19.0
OCA-git-bot Jul 7, 2026
f5e227d
[IMP] check_dependency: don't set blocked label
hbrunn Jul 7, 2026
3455ea8
Merge pull request #5773 from hbrunn/19.0-check_dependency-same-pr
pedrobaeza Jul 7, 2026
4557fa2
Merge pull request #5771 from Tecnativa/19.0-ou-add-website_cf_turnstile
pedrobaeza Jul 7, 2026
174abc9
Merge pull request #5748 from hbrunn/19.0-event
pedrobaeza Jul 7, 2026
293d837
Merge pull request #5770 from Tecnativa/19.0-ou-add-event_product
pedrobaeza Jul 7, 2026
2a99668
[OU-ADD] payment_stripe: Nothing to do
pilarvargas-tecnativa Jul 8, 2026
dce8e9d
[OU-ADD] l10n_fr: Migration scripts
pilarvargas-tecnativa Jul 8, 2026
415de06
[OU-ADD] l10n_fr_account: Nothing to do
pilarvargas-tecnativa Jul 8, 2026
3bd5413
[OU-ADD] microsoft_outlook: Nothing to do
pilarvargas-tecnativa Jul 8, 2026
a0b75ca
[OU-ADD] mail_bot_hr: Nothing to do
pilarvargas-tecnativa Jul 8, 2026
7c234f0
Merge pull request #5785 from Tecnativa/19.0-ou-add-payment_stripe
pedrobaeza Jul 8, 2026
19fdb1e
Merge pull request #5786 from Tecnativa/19.0-ou-add-l10n_fr
pedrobaeza Jul 8, 2026
06ef56e
Merge pull request #5787 from Tecnativa/19.0-ou-add-l10n_fr_account
pedrobaeza Jul 8, 2026
a8bf392
Merge pull request #5788 from Tecnativa/19.0-ou-add-microsoft_outlook
pedrobaeza Jul 8, 2026
a2aa5fe
Merge pull request #5789 from Tecnativa/19.0-ou-add-mail_bot_hr
pedrobaeza Jul 8, 2026
89b67cb
[FIX] base: rename user.groups_id references in domain/code
dnplkndll May 13, 2026
2fdc94f
[FIX] base: groups_id references map to all_group_ids + res.users LHS
dnplkndll Jun 11, 2026
70f6429
[FIX] base: strip 19.0 RNG-removed search-view attrs (expand=, string…
dnplkndll Jun 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions .github/actions/check-pr-dependency/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
name: 'Check PR dependencies'
description: 'List PR dependencies in comment, set labels Dependency OK, Blocked by dependency'
inputs:
version:
description: 'OpenUpgrade version'
required: true
branding:
icon: 'git-merge'
color: 'yellow'
runs:
using: "composite"
steps:
- name: 'Run check'
run: |
pip install -r ${{ github.action_path }}/requirements.txt
python ${{ github.action_path }}/check_dependency.py --version ${{ inputs.version }} --repo ${{ github.repository }} --github-login ${{ github.actor }}
shell: sh
162 changes: 162 additions & 0 deletions .github/actions/check-pr-dependency/check_dependency.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
import argparse
import os
import re
from pathlib import Path

from github import Auth, Github
from github.PullRequestReview import PullRequestReview

import tools

parser = argparse.ArgumentParser()
parser.add_argument('--version', nargs='+')
parser.add_argument('--repo', default='OCA/OpenUpgrade')
parser.add_argument('--github-login', default='ocabot')
args = parser.parse_args()

auth = None
if os.environ.get('GITHUB_TOKEN'):
auth = Auth.Token(os.environ.get('GITHUB_TOKEN'))

g = Github(auth=auth)
repo = g.get_repo(args.repo)

# #######################
# Custom Function
# #######################
def module_ok(module_name):
return module_coverage[module_name] in ["nothing_to_do", "done"] or opened_prs.get(module_name) == pr_number

def _extract_migration_comment(migration_message):
if not migration_message:
return "", "", ""
text_reg = (
r"(?P<before>(\r|\n|.)*)"
r"<dependency>"
"(?P<current_text>(\n|.)*)"
r"<\/dependency>"
r"(?P<after>(\r|\n|.)*)"
)
res = re.match(text_reg, migration_message.body)
if not res:
return "", "", ""
groups = res.groupdict()
return groups["before"], groups["current_text"], groups["after"]


def _get_comment_or_review(pr, content):
comments = [x for x in pr.get_issue_comments() if content in x.body]
if comments:
return comments[0]
reviews = [x for x in pr.get_reviews() if content in x.body]
return reviews and reviews[0] or False


# ####################################
# Main Script
# ####################################

for current_version in map(float, args.version):
tools._logger.info(f"*************************************************")
tools._logger.info(f"Update Dependencies for Version {current_version}")
tools._logger.info(f"*************************************************")

# Get Opened PRs
done_prs, opened_prs = tools._get_prs(repo, current_version)

# Get Done modules
module_coverage = tools._get_module_coverage(repo, current_version)


for module_name, pr_number in opened_prs.items():
tools._logger.info(f"Handle PR #{pr_number} for module '{module_name}'")
manifest = tools._get_manifest_module(repo, current_version, module_name)
if not manifest:
tools._logger.info(f"the module {module_name} disappeared in the new version.")
continue

depends = manifest.get("depends")
pr = repo.get_pull(pr_number)

migration_message = _get_comment_or_review(pr, "ocabot migration")
current_labels = [x.name for x in pr.labels]
new_labels = current_labels.copy()

log_message = f"PR #{pr_number} for {module_name}:"
if all([module_ok(x) for x in depends]):
# all dependencies are OK, mark the PR as OK.
label_to_remove = "Blocked by dependency"
label_to_add = "Dependency OK"
else:
# mark the PR as blocked
label_to_remove = "Dependency OK"
label_to_add = "Blocked by dependency"

if label_to_remove in new_labels:
log_message += f" Remove '{label_to_remove}'"
new_labels.remove(label_to_remove)

if label_to_add not in new_labels:
log_message += f" Set '{label_to_add}'"
new_labels.append(label_to_add)

if new_labels != current_labels:
tools._logger.info(log_message)
pr.set_labels(*new_labels)

if not migration_message:
tools._logger.warning(f"Migration message not found in {pr.number}")
continue

before_text, current_text, after_text = _extract_migration_comment(
migration_message
)

dep_modules_ok = [x for x in depends if x in done_prs]
dep_modules_pending = [x for x in depends if x in opened_prs]
dep_modules_ko = [
x for x in depends if x not in dep_modules_ok + dep_modules_pending
]
new_text = ""
for dep_module in dep_modules_ok:
new_text += f"\n- {dep_module} : #{done_prs[dep_module]}"
for dep_module in dep_modules_pending:
new_text += f"\n- {dep_module} : #{opened_prs[dep_module]}"
for dep_module in dep_modules_ko:
new_text += f"\n- {dep_module} : TODO"
if module_ok(dep_module):
tools._logger.error(f"{dep_module} not found in the issue 'Migration to version {current_version}'")


if new_text:
new_text = "Depends on : \n" + new_text

new_body = ""
if not current_text and new_text:
tools._logger.info(
f"PR#{pr.number} - {pr.title}: ADDING Text in migration message."
)
if migration_message.user.login != args.github_login:
tools._logger.warning(
f"The message has been written by @{migration_message.user.login}"
)
new_body = (
migration_message.body + "\n\n<dependency>" + new_text + "</dependency>"
)
elif new_text != current_text:
tools._logger.info(
f"PR#{pr.number} - {pr.title}: Replacing text in migration message."
)
if migration_message.user.login != args.github_login:
tools._logger.warning(
f"The message has been written by @{migration_message.user.login}"
)
new_body = (
before_text + "<dependency>" + new_text + "</dependency>" + after_text
)

if new_body:
if type(migration_message) is PullRequestReview:
tools._logger.warning("Unable to edit the PR due to PyGithub limitation.")
continue
migration_message.edit(new_body)
1 change: 1 addition & 0 deletions .github/actions/check-pr-dependency/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
PyGithub
90 changes: 90 additions & 0 deletions .github/actions/check-pr-dependency/tools.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
import logging
import re
import sys
import urllib

logging.basicConfig(
level=logging.INFO,
format="[%(asctime)s] {%(filename)s:%(lineno)d} %(levelname)s - %(message)s",
handlers=[logging.StreamHandler(stream=sys.stdout)],
)

_logger = logging.getLogger()


def _get_prs(repo, version):
opened_prs = {}
done_prs = {}

line_reg = (
r"- \[(?P<done> |x)\] (\(del\) )?(\(new\) )?"
r"(?P<module_name>\w+).*(pull\/|#)(?P<pr_number>\d+)"
)
issue_title = f"Migration to version {version:.1f}"

_logger.info(f"Get PRs referenced in '{issue_title}' ...")
# Get main issue to have PRs numbers
for issue in repo.get_issues():
if issue.title == issue_title:
for line in issue.body.split("\n"):
if not line.startswith("- ["):
continue
res = re.match(line_reg, line)
if not res:
_logger.debug(f"Unable to parse correctly '{line}'")
continue
groups = res.groupdict()
pr_number = int(groups["pr_number"])
if groups["done"] == "x":
done_prs[groups["module_name"]] = pr_number
else:
opened_prs[groups["module_name"]] = pr_number
_logger.info(
f">> found {len(done_prs)} done PRs" f" and {len(opened_prs)} Opened PRs"
)
return done_prs, opened_prs


def _get_module_coverage(repo, version):
file_name = f"modules{(version - 1) * 10:.0f}-{(version) * 10:.0f}.rst"
url = (
f"https://raw.githubusercontent.com/OCA/OpenUpgrade"
f"/{version:.1f}/docsource/"
f"{file_name}"
)
module_coverage = {}
_logger.info(f"Get and parse {file_name} to know coverage state ...")
page = urllib.request.urlopen(url).read().decode()
for line in page.split("\n"):
line = line.replace("|del|", "").replace("|new|", "")
if not line.startswith("|"):
continue
res = line.split("|")
module_name = res[1].strip()
status = res[2].strip()
if module_name == "Module":
continue
if status == "":
module_coverage[module_name] = "to_do"
elif status == "Nothing to do":
module_coverage[module_name] = "nothing_to_do"
elif status.startswith("Done"):
module_coverage[module_name] = "done"
else:
continue
# TODO:fix me
raise Exception("Status '%s' has not been analyzed." % (status))
_logger.info(f">> found {len(module_coverage)} modules.")
return module_coverage


def _get_manifest_module(repo, version, module_name):
url = (
f"https://raw.githubusercontent.com/odoo/"
f"odoo/{version:.1f}/addons/{module_name}/__manifest__.py"
)
try:
page = urllib.request.urlopen(url).read().decode()
except urllib.error.HTTPError:
return
return eval(page)
19 changes: 19 additions & 0 deletions .github/workflows/check_pr_dependency.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: Check PR dependencies

on:
issues:
types: [edited]

jobs:
check_dependency:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
if: ${{ github.event.issue.state == 'open' && startsWith( github.event.issue.title, 'Migration to version ' ) }}
- name: Check dependency
if: ${{ github.event.issue.state == 'open' && startsWith( github.event.issue.title, 'Migration to version ' ) }}
uses: ./.github/actions/check-pr-dependency
with:
version: ${{ github.event.issue.milestone.title }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Loading
Loading