From 08c7b526e10650944320ff6763fa180bc1612b88 Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Wed, 13 May 2026 16:22:46 -0400 Subject: [PATCH 01/15] [19.0][FIX] base: rename user.groups_id references in domain/code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `rename_fields()` (via `rename_field_references` in openupgradelib) renames the field column and quoted occurrences in ir.filters.domain, but it doesn't process: * ir.rule.domain_force (not touched at all) * unquoted dotted references like `user.groups_id.ids` in Python expressions inside domain_force / ir.filters.domain / ir.act_server.code Concretely, an ir.rule with domain_force = "[('groups_id', 'in', user.groups_id.ids)]" has its LHS migrated to `'group_ids'` but the RHS is left untouched, which then crashes any view that triggers the rule with AttributeError: 'res.users' object has no attribute 'groups_id' Add a post-step in base/19.0.1.3 pre-migration that does a word-boundary regex_replace of `user.groups_id` → `user.group_ids` in: * ir_rule.domain_force * ir_filters.domain * ir_act_server.code Reproduced migrating a real prod 18.0 database (Ledo Enterprises) to 19.0: the login page returned HTTP 500 with the AttributeError until the ir.rule for `Website menu: group_ids` was patched manually. --- .../scripts/base/19.0.1.3/pre-migration.py | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/openupgrade_scripts/scripts/base/19.0.1.3/pre-migration.py b/openupgrade_scripts/scripts/base/19.0.1.3/pre-migration.py index 39b145615b4b..699de5d46ed7 100644 --- a/openupgrade_scripts/scripts/base/19.0.1.3/pre-migration.py +++ b/openupgrade_scripts/scripts/base/19.0.1.3/pre-migration.py @@ -176,3 +176,48 @@ def migrate(env, version): openupgrade.rename_xmlids(env.cr, _renamed_xmlids) openupgrade.rename_xmlids(env.cr, _merged_xmlids, allow_merge=True) openupgrade.rename_fields(env, _renamed_fields) + _fix_user_groups_id_references(env) + + +def _fix_user_groups_id_references(env): + """rename_fields() renames the field column on res_users and quoted + references in ir.filters.domain, but it does not process ir.rule + domain_force, nor does it match unquoted dotted references like + ``user.groups_id.ids`` in Python-evaluated domain expressions. + + Concretely, an ir.rule with + domain_force = "[('groups_id', 'in', user.groups_id.ids)]" + has its LHS migrated to 'group_ids' but the RHS is left untouched, + so any view referencing the rule crashes at runtime with + ``AttributeError: 'res.users' object has no attribute 'groups_id'``. + """ + openupgrade.logged_query( + env.cr, + r""" + UPDATE ir_rule + SET domain_force = regexp_replace( + domain_force, '\muser\.groups_id\M', 'user.group_ids', 'g' + ) + WHERE domain_force ~ '\muser\.groups_id\M' + """, + ) + openupgrade.logged_query( + env.cr, + r""" + UPDATE ir_filters + SET domain = regexp_replace( + domain, '\muser\.groups_id\M', 'user.group_ids', 'g' + ) + WHERE domain ~ '\muser\.groups_id\M' + """, + ) + openupgrade.logged_query( + env.cr, + r""" + UPDATE ir_act_server + SET code = regexp_replace( + code, '\muser\.groups_id\M', 'user.group_ids', 'g' + ) + WHERE code ~ '\muser\.groups_id\M' + """, + ) From 4c003157eb47d849ccfe2805fcfe62623343d630 Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Wed, 13 May 2026 18:02:54 -0400 Subject: [PATCH 02/15] ci: mirror upstream + aggregate + build image to registry.ledoweb.com MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three workflows + a Dockerfile that turn the ledoent/OpenUpgrade fork into a self-maintaining mirror with custom CI: * mirror-upstream.yml — daily cron + workflow_dispatch. Force-pushes OCA/OpenUpgrade `19.0` to `ledoent/OpenUpgrade:19.0`. Opens an issue if `ledoent` (default branch) has drifted from upstream and needs rebase. * aggregate.yml — on push to `ledoent` or any `19.0-fix-*` branch, runs `git-aggregator` against an inline config that merges `ledoent` + every active fix branch and force-pushes the result to `aggregated`. * build-image.yml — on push to `aggregated`, builds Dockerfile.openupgrade (FROM odoo:19.0 + lab pip deps + openupgradelib from git master + the full aggregated checkout at /opt/openupgrade) and pushes to registry.ledoweb.com/openupgrade:{latest,sha}. Secrets required on this fork: ZOT_USERNAME, ZOT_PASSWORD (for Zot push), AGGREGATE_PUSH_TOKEN (fine-scoped PAT with contents:write — falls back to GITHUB_TOKEN if absent), and optionally GIT_PUSH_TOKEN for mirror. --- .github/workflows/aggregate.yml | 65 +++++++++++++++++++++++++++ .github/workflows/build-image.yml | 43 ++++++++++++++++++ .github/workflows/mirror-upstream.yml | 62 +++++++++++++++++++++++++ Dockerfile.openupgrade | 29 ++++++++++++ 4 files changed, 199 insertions(+) create mode 100644 .github/workflows/aggregate.yml create mode 100644 .github/workflows/build-image.yml create mode 100644 .github/workflows/mirror-upstream.yml create mode 100644 Dockerfile.openupgrade diff --git a/.github/workflows/aggregate.yml b/.github/workflows/aggregate.yml new file mode 100644 index 000000000000..2f991c6fb0a4 --- /dev/null +++ b/.github/workflows/aggregate.yml @@ -0,0 +1,65 @@ +name: Aggregate fork branches + +on: + push: + branches: + - ledoent + - "19.0-fix-*" + workflow_dispatch: + +permissions: + contents: write + +jobs: + aggregate: + runs-on: ubuntu-latest + steps: + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.10" + + - name: Install git-aggregator + run: pip install git-aggregator==4.1 + + - name: Checkout fork (no working tree needed; gitaggregate clones fresh) + uses: actions/checkout@v4 + with: + ref: ledoent + path: fork-meta + fetch-depth: 1 + + - name: Write aggregate config + # gitaggregate clones into ./openupgrade so the lab's repos.yaml layout is reproduced. + # `target ledoent aggregated` is what gets pushed back. + run: | + cat > aggregate.yml <<'YAML' + ./openupgrade: + defaults: + depth: 500 + remotes: + origin: https://github.com/OCA/OpenUpgrade.git + ledoent: https://github.com/ledoent/OpenUpgrade.git + target: ledoent aggregated + merges: + - ledoent ledoent + - ledoent 19.0-fix-user-groups-id-rename + YAML + + - name: Run gitaggregate + run: gitaggregate -c aggregate.yml + + - name: Configure git identity + working-directory: openupgrade + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + + - name: Force-push aggregated + working-directory: openupgrade + env: + PUSH_TOKEN: ${{ secrets.AGGREGATE_PUSH_TOKEN || secrets.GITHUB_TOKEN }} + run: | + git remote set-url ledoent "https://x-access-token:${PUSH_TOKEN}@github.com/ledoent/OpenUpgrade.git" + git push --force ledoent HEAD:refs/heads/aggregated + echo "Aggregated head: $(git rev-parse HEAD)" diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml new file mode 100644 index 000000000000..c16c5e47cd2d --- /dev/null +++ b/.github/workflows/build-image.yml @@ -0,0 +1,43 @@ +name: Build openupgrade image + +on: + push: + branches: + - aggregated + workflow_dispatch: + +permissions: + contents: read + packages: write + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout aggregated + uses: actions/checkout@v4 + with: + ref: aggregated + fetch-depth: 1 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to Zot (registry.ledoweb.com) + uses: docker/login-action@v3 + with: + registry: registry.ledoweb.com + username: ${{ secrets.ZOT_USERNAME }} + password: ${{ secrets.ZOT_PASSWORD }} + + - name: Build and push + uses: docker/build-push-action@v6 + with: + context: . + file: ./Dockerfile.openupgrade + push: true + tags: | + registry.ledoweb.com/openupgrade:latest + registry.ledoweb.com/openupgrade:${{ github.sha }} + cache-from: type=registry,ref=registry.ledoweb.com/openupgrade:buildcache + cache-to: type=registry,ref=registry.ledoweb.com/openupgrade:buildcache,mode=max diff --git a/.github/workflows/mirror-upstream.yml b/.github/workflows/mirror-upstream.yml new file mode 100644 index 000000000000..7d1819a4dc17 --- /dev/null +++ b/.github/workflows/mirror-upstream.yml @@ -0,0 +1,62 @@ +name: Mirror upstream OCA/OpenUpgrade + +on: + schedule: + - cron: "0 6 * * *" # daily 06:00 UTC + workflow_dispatch: + +permissions: + contents: write + +jobs: + mirror: + runs-on: ubuntu-latest + steps: + - name: Checkout fork + uses: actions/checkout@v4 + with: + ref: ledoent + fetch-depth: 0 + token: ${{ secrets.GIT_PUSH_TOKEN || secrets.GITHUB_TOKEN }} + + - name: Fetch upstream + run: | + git remote add upstream https://github.com/OCA/OpenUpgrade.git + git fetch upstream 19.0 + + - name: Force-push upstream/19.0 to fork's 19.0 + run: | + git push origin "upstream/19.0:refs/heads/19.0" --force-with-lease || \ + git push origin "upstream/19.0:refs/heads/19.0" --force + + - name: Check whether ledoent has drifted from upstream/19.0 + id: drift + run: | + # ledoent should be upstream/19.0 + custom-CI commits. If a merge-base + # comparison shows ledoent missing upstream commits, we need a rebase. + if git merge-base --is-ancestor upstream/19.0 ledoent; then + echo "drift=no" >> "$GITHUB_OUTPUT" + echo "ledoent is up to date with upstream/19.0" + else + echo "drift=yes" >> "$GITHUB_OUTPUT" + behind=$(git rev-list --count ledoent..upstream/19.0) + echo "ledoent is behind upstream/19.0 by $behind commits — rebase needed" + fi + + - name: Open issue if drift detected + if: steps.drift.outputs.drift == 'yes' + uses: actions/github-script@v7 + with: + script: | + const { owner, repo } = context.repo; + const title = 'ledoent branch needs rebase onto upstream/19.0'; + const existing = await github.rest.issues.listForRepo({ + owner, repo, labels: 'mirror-drift', state: 'open' + }); + if (existing.data.length === 0) { + await github.rest.issues.create({ + owner, repo, title, + labels: ['mirror-drift'], + body: 'upstream OCA/OpenUpgrade `19.0` has advanced. Rebase `ledoent` onto it and force-push.\n\n```bash\ngit fetch origin\ngit checkout ledoent\ngit rebase origin/19.0\ngit push -f origin ledoent\n```' + }); + } diff --git a/Dockerfile.openupgrade b/Dockerfile.openupgrade new file mode 100644 index 000000000000..c5b2bcc310bb --- /dev/null +++ b/Dockerfile.openupgrade @@ -0,0 +1,29 @@ +## Image: registry.ledoweb.com/openupgrade +## +## Built by .github/workflows/build-image.yml on every push to `aggregated`. +## Contains: +## - Odoo 19.0 base +## - Python deps the openupgrade-lab uses (s3fs, redis, sentry-sdk, etc.) +## - The full `aggregated` checkout of this repo as /opt/openupgrade +## The lab's docker-compose mounts the openupgradelib source over the +## pip-installed lib so it can hot-swap during development. + +FROM odoo:19.0 + +USER root + +RUN pip install --no-cache-dir --break-system-packages \ + fsspec>=2025.3.0 \ + s3fs \ + packaging \ + python-json-logger \ + redis \ + sentry-sdk \ + python-slugify \ + plaid-python \ + cssselect \ + "git+https://github.com/OCA/openupgradelib@master" + +COPY --chown=odoo:odoo . /opt/openupgrade + +USER odoo From 1a593d904a062fc67800f22f4e73e33cdcf25933 Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Wed, 13 May 2026 18:03:57 -0400 Subject: [PATCH 03/15] ci(aggregate): set git identity globally before gitaggregate --- .github/workflows/aggregate.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/aggregate.yml b/.github/workflows/aggregate.yml index 2f991c6fb0a4..ec29d79a4170 100644 --- a/.github/workflows/aggregate.yml +++ b/.github/workflows/aggregate.yml @@ -22,6 +22,11 @@ jobs: - name: Install git-aggregator run: pip install git-aggregator==4.1 + - name: Configure git identity (gitaggregate needs this before merging) + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" + - name: Checkout fork (no working tree needed; gitaggregate clones fresh) uses: actions/checkout@v4 with: @@ -49,12 +54,6 @@ jobs: - name: Run gitaggregate run: gitaggregate -c aggregate.yml - - name: Configure git identity - working-directory: openupgrade - run: | - git config user.name "github-actions[bot]" - git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - - name: Force-push aggregated working-directory: openupgrade env: From 7f84b5e078bed6e785cf2f1f05c1fd74aac32895 Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Wed, 13 May 2026 19:28:06 -0400 Subject: [PATCH 04/15] ci(build-image): switch from Zot to GAR with Workload Identity Federation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mirrors the existing ledoent build patterns (openobserve, erp): pushes to europe-west3-docker.pkg.dev/kendall-ledo/docker/openupgrade with no stored secrets — auth via google-github-actions/auth WIF using the ci-github@kendall-ledo service account and the existing ledoent provider. Removes ZOT_USERNAME/ZOT_PASSWORD secrets dependency. --- .github/workflows/build-image.yml | 52 +++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 16 deletions(-) diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index c16c5e47cd2d..7430f48e8d29 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -1,34 +1,54 @@ name: Build openupgrade image +# Builds an Odoo 19 image with the aggregated OpenUpgrade tree baked in +# and pushes to Google Artifact Registry (GAR). Mirrors the pattern used +# by ledoent's openobserve and erp builds: Workload Identity Federation — +# no stored secrets. +# +# Image: europe-west3-docker.pkg.dev/kendall-ledo/docker/openupgrade +# Consumed by: openupgrade-lab/docker-compose.yml (odoo-19 service) + on: push: branches: - aggregated workflow_dispatch: -permissions: - contents: read - packages: write +concurrency: + group: build-image-${{ github.ref }} + cancel-in-progress: true + +env: + GAR_HOST: europe-west3-docker.pkg.dev + GAR_IMAGE: europe-west3-docker.pkg.dev/kendall-ledo/docker/openupgrade jobs: build: runs-on: ubuntu-latest + permissions: + id-token: write + contents: read steps: - - name: Checkout aggregated - uses: actions/checkout@v4 + - uses: actions/checkout@v4 with: ref: aggregated fetch-depth: 1 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + - id: auth + name: Authenticate to Google Cloud (WIF) + uses: google-github-actions/auth@v2 + with: + workload_identity_provider: projects/852639431500/locations/global/workloadIdentityPools/github/providers/ledoent + service_account: ci-github@kendall-ledo.iam.gserviceaccount.com + token_format: access_token - - name: Log in to Zot (registry.ledoweb.com) - uses: docker/login-action@v3 + - uses: docker/login-action@v3 with: - registry: registry.ledoweb.com - username: ${{ secrets.ZOT_USERNAME }} - password: ${{ secrets.ZOT_PASSWORD }} + registry: ${{ env.GAR_HOST }} + username: oauth2accesstoken + password: ${{ steps.auth.outputs.access_token }} + + - uses: docker/setup-buildx-action@v3 - name: Build and push uses: docker/build-push-action@v6 @@ -37,7 +57,7 @@ jobs: file: ./Dockerfile.openupgrade push: true tags: | - registry.ledoweb.com/openupgrade:latest - registry.ledoweb.com/openupgrade:${{ github.sha }} - cache-from: type=registry,ref=registry.ledoweb.com/openupgrade:buildcache - cache-to: type=registry,ref=registry.ledoweb.com/openupgrade:buildcache,mode=max + ${{ env.GAR_IMAGE }}:latest + ${{ env.GAR_IMAGE }}:${{ github.sha }} + cache-from: type=registry,ref=${{ env.GAR_IMAGE }}:buildcache + cache-to: type=registry,ref=${{ env.GAR_IMAGE }}:buildcache,mode=max From 43c57f958ad9ed19e789c60197201836b8d7c1a9 Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Wed, 13 May 2026 19:40:49 -0400 Subject: [PATCH 05/15] ci(build-image): revert to Zot at registry.hz.ledoweb.com MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GAR was wrong — ledoent runs its own Zot at registry.hz.ledoweb.com (confirmed via kubectl ingress in the zot namespace). Robot user `robot-ci` already exists; CI auth needs ZOT_USERNAME + ZOT_PASSWORD secrets on this repo. --- .github/workflows/build-image.yml | 36 ++++++++++++------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index 7430f48e8d29..2a5fdc6f66e3 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -1,11 +1,12 @@ name: Build openupgrade image # Builds an Odoo 19 image with the aggregated OpenUpgrade tree baked in -# and pushes to Google Artifact Registry (GAR). Mirrors the pattern used -# by ledoent's openobserve and erp builds: Workload Identity Federation — -# no stored secrets. +# and pushes to the ledoent Zot registry at registry.hz.ledoweb.com. # -# Image: europe-west3-docker.pkg.dev/kendall-ledo/docker/openupgrade +# Auth: basic-auth via the `robot-ci` Zot user. +# Secrets: ZOT_USERNAME (= robot-ci), ZOT_PASSWORD (set on this repo). +# +# Image: registry.hz.ledoweb.com/openupgrade/openupgrade # Consumed by: openupgrade-lab/docker-compose.yml (odoo-19 service) on: @@ -19,14 +20,13 @@ concurrency: cancel-in-progress: true env: - GAR_HOST: europe-west3-docker.pkg.dev - GAR_IMAGE: europe-west3-docker.pkg.dev/kendall-ledo/docker/openupgrade + ZOT_HOST: registry.hz.ledoweb.com + ZOT_IMAGE: registry.hz.ledoweb.com/openupgrade/openupgrade jobs: build: runs-on: ubuntu-latest permissions: - id-token: write contents: read steps: - uses: actions/checkout@v4 @@ -34,19 +34,11 @@ jobs: ref: aggregated fetch-depth: 1 - - id: auth - name: Authenticate to Google Cloud (WIF) - uses: google-github-actions/auth@v2 - with: - workload_identity_provider: projects/852639431500/locations/global/workloadIdentityPools/github/providers/ledoent - service_account: ci-github@kendall-ledo.iam.gserviceaccount.com - token_format: access_token - - uses: docker/login-action@v3 with: - registry: ${{ env.GAR_HOST }} - username: oauth2accesstoken - password: ${{ steps.auth.outputs.access_token }} + registry: ${{ env.ZOT_HOST }} + username: ${{ secrets.ZOT_USERNAME }} + password: ${{ secrets.ZOT_PASSWORD }} - uses: docker/setup-buildx-action@v3 @@ -57,7 +49,7 @@ jobs: file: ./Dockerfile.openupgrade push: true tags: | - ${{ env.GAR_IMAGE }}:latest - ${{ env.GAR_IMAGE }}:${{ github.sha }} - cache-from: type=registry,ref=${{ env.GAR_IMAGE }}:buildcache - cache-to: type=registry,ref=${{ env.GAR_IMAGE }}:buildcache,mode=max + ${{ env.ZOT_IMAGE }}:latest + ${{ env.ZOT_IMAGE }}:${{ github.sha }} + cache-from: type=registry,ref=${{ env.ZOT_IMAGE }}:buildcache + cache-to: type=registry,ref=${{ env.ZOT_IMAGE }}:buildcache,mode=max From e64e8cbc3dadac3353d7e75b3812edd79ef41fb1 Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Wed, 13 May 2026 19:56:36 -0400 Subject: [PATCH 06/15] ci(chain): aggregate fires repository_dispatch to build-image Auto-trigger image build after each aggregation: - aggregate.yml: after force-pushing `aggregated`, fires a repository_dispatch event_type=aggregated-updated using AGGREGATE_PUSH_TOKEN (skips if unset). - build-image.yml: adds a repository_dispatch trigger listening for the same event_type. GITHUB_TOKEN-driven branch pushes don't fire downstream workflows by design (loop protection), so a PAT is required for the dispatch. Manual workflow_dispatch on build-image still works as a fallback. --- .github/workflows/aggregate.yml | 20 +++++++++++++++++++- .github/workflows/build-image.yml | 2 ++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/.github/workflows/aggregate.yml b/.github/workflows/aggregate.yml index ec29d79a4170..46dd22652145 100644 --- a/.github/workflows/aggregate.yml +++ b/.github/workflows/aggregate.yml @@ -55,10 +55,28 @@ jobs: run: gitaggregate -c aggregate.yml - name: Force-push aggregated + id: push working-directory: openupgrade env: PUSH_TOKEN: ${{ secrets.AGGREGATE_PUSH_TOKEN || secrets.GITHUB_TOKEN }} run: | git remote set-url ledoent "https://x-access-token:${PUSH_TOKEN}@github.com/ledoent/OpenUpgrade.git" git push --force ledoent HEAD:refs/heads/aggregated - echo "Aggregated head: $(git rev-parse HEAD)" + sha=$(git rev-parse HEAD) + echo "Aggregated head: $sha" + echo "sha=$sha" >> "$GITHUB_OUTPUT" + + - name: Trigger build-image workflow + # GITHUB_TOKEN-driven branch pushes don't fire downstream workflows + # (loop protection). Use repository_dispatch with a PAT so build-image + # can react. Falls back to no-op if AGGREGATE_PUSH_TOKEN is unset. + if: ${{ secrets.AGGREGATE_PUSH_TOKEN != '' }} + env: + GH_TOKEN: ${{ secrets.AGGREGATE_PUSH_TOKEN }} + run: | + gh api \ + -X POST \ + "/repos/${{ github.repository }}/dispatches" \ + -f event_type=aggregated-updated \ + -f "client_payload[sha]=${{ steps.push.outputs.sha }}" + echo "Fired repository_dispatch event_type=aggregated-updated" diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index 2a5fdc6f66e3..2fb411a56e9d 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -13,6 +13,8 @@ on: push: branches: - aggregated + repository_dispatch: + types: [aggregated-updated] workflow_dispatch: concurrency: From 6be5b030dd0398329994c906bb9a925bc0486866 Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Wed, 13 May 2026 21:22:48 -0400 Subject: [PATCH 07/15] fix(image): apt-install git so openupgradelib install from git can run odoo:19.0 base ships without git; pip+git URL requires it. --- Dockerfile.openupgrade | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Dockerfile.openupgrade b/Dockerfile.openupgrade index c5b2bcc310bb..5d946f732c28 100644 --- a/Dockerfile.openupgrade +++ b/Dockerfile.openupgrade @@ -12,6 +12,11 @@ FROM odoo:19.0 USER root +# git needed for the openupgradelib install (no pinned PyPI release yet for 19.0). +RUN apt-get update && \ + apt-get install -y --no-install-recommends git && \ + rm -rf /var/lib/apt/lists/* + RUN pip install --no-cache-dir --break-system-packages \ fsspec>=2025.3.0 \ s3fs \ From 9b91e01f63bc788537b8b0b73ad1c9bcd3b34320 Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Wed, 13 May 2026 21:26:02 -0400 Subject: [PATCH 08/15] fix(aggregate): move AGGREGATE_PUSH_TOKEN check from if: to runtime GitHub Actions doesn't permit `secrets.*` in step-level `if:` conditions, so the previous workflow failed at parse time. Check the PAT inside the step itself via env, skip gracefully if missing. --- .github/workflows/aggregate.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/aggregate.yml b/.github/workflows/aggregate.yml index 46dd22652145..0f75ebb29187 100644 --- a/.github/workflows/aggregate.yml +++ b/.github/workflows/aggregate.yml @@ -70,10 +70,14 @@ jobs: # GITHUB_TOKEN-driven branch pushes don't fire downstream workflows # (loop protection). Use repository_dispatch with a PAT so build-image # can react. Falls back to no-op if AGGREGATE_PUSH_TOKEN is unset. - if: ${{ secrets.AGGREGATE_PUSH_TOKEN != '' }} env: GH_TOKEN: ${{ secrets.AGGREGATE_PUSH_TOKEN }} run: | + if [ -z "$GH_TOKEN" ]; then + echo "AGGREGATE_PUSH_TOKEN not set; skipping repository_dispatch." + echo "Run \`gh workflow run build-image.yml --ref aggregated\` manually." + exit 0 + fi gh api \ -X POST \ "/repos/${{ github.repository }}/dispatches" \ From b4cf0a502109e037109abfa1ce010046d809443a Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Wed, 13 May 2026 21:37:49 -0400 Subject: [PATCH 09/15] ci(build-image): build multi-arch (linux/amd64 + linux/arm64) Local dev on Apple Silicon needs arm64 manifests. Cluster is amd64. Add docker/setup-qemu-action for cross-build, set platforms list on build-push-action. --- .github/workflows/build-image.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index 2fb411a56e9d..ac5c59c728f2 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -42,14 +42,17 @@ jobs: username: ${{ secrets.ZOT_USERNAME }} password: ${{ secrets.ZOT_PASSWORD }} + - uses: docker/setup-qemu-action@v3 # cross-build linux/arm64 on amd64 runner + - uses: docker/setup-buildx-action@v3 - - name: Build and push + - name: Build and push (multi-arch) uses: docker/build-push-action@v6 with: context: . file: ./Dockerfile.openupgrade push: true + platforms: linux/amd64,linux/arm64 tags: | ${{ env.ZOT_IMAGE }}:latest ${{ env.ZOT_IMAGE }}:${{ github.sha }} From 0f2f195845f5659780b9a61ce7754e2183d24c19 Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Wed, 13 May 2026 21:55:04 -0400 Subject: [PATCH 10/15] ci(build-image): drop arm64, keep amd64 only MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zot intermittently 400s on the arm64 cross-build's many slow blob uploads ("provided digest did not match uploaded content" after ~6 min of QEMU). Cluster is amd64 — Apple Silicon dev can pull via Docker Desktop's Rosetta amd64 emulation. --- .github/workflows/build-image.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index ac5c59c728f2..3b684ed68606 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -42,17 +42,15 @@ jobs: username: ${{ secrets.ZOT_USERNAME }} password: ${{ secrets.ZOT_PASSWORD }} - - uses: docker/setup-qemu-action@v3 # cross-build linux/arm64 on amd64 runner - - uses: docker/setup-buildx-action@v3 - - name: Build and push (multi-arch) + - name: Build and push (amd64 only — cluster is amd64; M-series uses Rosetta) uses: docker/build-push-action@v6 with: context: . file: ./Dockerfile.openupgrade push: true - platforms: linux/amd64,linux/arm64 + platforms: linux/amd64 tags: | ${{ env.ZOT_IMAGE }}:latest ${{ env.ZOT_IMAGE }}:${{ github.sha }} From 6eb92af7be545cfbd4258b0bc8c1afd9886590e8 Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Thu, 14 May 2026 21:04:36 -0400 Subject: [PATCH 11/15] ci(aggregate): merge five new 19.0-fix-* branches into aggregated Add the merges introduced by today's PR series so the auto-built image includes them and the lab can `OPENUPGRADE_PULL_POLICY=always` again: - 19.0-fix-hr-null-write-date (OCA/OpenUpgrade#5628) - 19.0-fix-loyalty-stale-mail-template-fields (OCA/OpenUpgrade#5629) - 19.0-fix-hr-obsolete-fields-cleanup (OCA/OpenUpgrade#5630) - 19.0-fix-partner-autocomplete-cleanup (OCA/OpenUpgrade#5631) - 19.0-fix-l10n-fr-cleanup (OCA/OpenUpgrade#5632) The companion lab repos.yaml is updated separately so local `make sync-repos` matches. --- .github/workflows/aggregate.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/aggregate.yml b/.github/workflows/aggregate.yml index 0f75ebb29187..3e49f7cf75f1 100644 --- a/.github/workflows/aggregate.yml +++ b/.github/workflows/aggregate.yml @@ -49,6 +49,11 @@ jobs: merges: - ledoent ledoent - ledoent 19.0-fix-user-groups-id-rename + - ledoent 19.0-fix-hr-null-write-date # OCA/OpenUpgrade#5628 + - ledoent 19.0-fix-loyalty-stale-mail-template-fields # OCA/OpenUpgrade#5629 + - ledoent 19.0-fix-hr-obsolete-fields-cleanup # OCA/OpenUpgrade#5630 + - ledoent 19.0-fix-partner-autocomplete-cleanup # OCA/OpenUpgrade#5631 + - ledoent 19.0-fix-l10n-fr-cleanup # OCA/OpenUpgrade#5632 YAML - name: Run gitaggregate From 4d2bddaf3e208c1d6a723344d320806aaa24a352 Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Thu, 14 May 2026 21:08:04 -0400 Subject: [PATCH 12/15] ci(aggregate): use single 19.0-fix-rollup branch instead of 5 individual fixes The five 19.0-fix-* branches from today's PR series can't be merged individually by gitaggregate's `git pull --no-rebase` because 19.0-fix-hr-null-write-date and 19.0-fix-hr-obsolete-fields-cleanup both add new functions to the same file (hr/19.0.1.1/pre-migration.py) at overlapping locations. gitaggregate doesn't ask for conflict resolution and aborts. 19.0-fix-rollup is a hand-crafted branch (cherry-picked from each of the five fix branches onto origin/19.0 with a single manual resolution) that applies cleanly as a single merge. The five individual branches remain the source of truth for the OCA PRs; the rollup tracks their tip and must be rebuilt when any of the source PRs is updated. --- .github/workflows/aggregate.yml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/.github/workflows/aggregate.yml b/.github/workflows/aggregate.yml index 3e49f7cf75f1..6a84fd5f89bc 100644 --- a/.github/workflows/aggregate.yml +++ b/.github/workflows/aggregate.yml @@ -49,11 +49,14 @@ jobs: merges: - ledoent ledoent - ledoent 19.0-fix-user-groups-id-rename - - ledoent 19.0-fix-hr-null-write-date # OCA/OpenUpgrade#5628 - - ledoent 19.0-fix-loyalty-stale-mail-template-fields # OCA/OpenUpgrade#5629 - - ledoent 19.0-fix-hr-obsolete-fields-cleanup # OCA/OpenUpgrade#5630 - - ledoent 19.0-fix-partner-autocomplete-cleanup # OCA/OpenUpgrade#5631 - - ledoent 19.0-fix-l10n-fr-cleanup # OCA/OpenUpgrade#5632 + # 19.0-fix-rollup is a conflict-resolved combination of the five + # OCA/OpenUpgrade PRs #5628-5632 (cherry-picked onto origin/19.0 + # in dependency order). Listing them individually here fails + # because #5628 and #5630 both touch hr/19.0.1.1/pre-migration.py + # with non-overlapping additions that gitaggregate's straight + # `git pull --no-rebase` can't auto-merge. When any OCA PR + # changes, rebase the rollup branch. + - ledoent 19.0-fix-rollup YAML - name: Run gitaggregate From 5f5c272c6612e9b712a4a7b40e2f4cd097426220 Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Fri, 15 May 2026 14:55:44 -0400 Subject: [PATCH 13/15] ci(test-migration): extend triggers to 19.0-mig-* / 19.0-fix-* / aggregated / ledoent Without these patterns the migration workflow only ran on the PR sync to OCA (using OCA's Actions context). Now pushing any work-branch on the fork triggers the migration test locally so we can validate before opening upstream PRs. --- .github/workflows/test-migration.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/test-migration.yml b/.github/workflows/test-migration.yml index e73dc53db842..46da397ffc28 100644 --- a/.github/workflows/test-migration.yml +++ b/.github/workflows/test-migration.yml @@ -13,6 +13,10 @@ on: branches: - "19.0" - "19.0-ocabot-*" + - "19.0-mig-*" + - "19.0-fix-*" + - "aggregated" + - "ledoent" jobs: test: From db830e182498fdc51bd3069719f2ef437bf6271c Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Fri, 15 May 2026 17:56:38 -0400 Subject: [PATCH 14/15] ci(documentation-commit): restrict to OCA upstream pushes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The workflow checks out a 'documentation' branch that exists only on OCA/OpenUpgrade — forks 404 at the checkout step. Add a branch filter ("19.0") AND a github.repository_owner == 'OCA' job guard so fork pushes don't fire the workflow uselessly. Fork CI now reports only the migration test and pre-commit, matching intent. --- .github/workflows/documentation-commit.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/documentation-commit.yml b/.github/workflows/documentation-commit.yml index c7d445ee6521..84842b18ecf6 100644 --- a/.github/workflows/documentation-commit.yml +++ b/.github/workflows/documentation-commit.yml @@ -8,10 +8,15 @@ name: Build and commit documentation on: push: + branches: ["19.0"] paths: ["docsource/modules180-190.rst"] jobs: documentation-commit: + # Docs publishing only makes sense on OCA upstream (default branch + # publishes to https://oca.github.io/OpenUpgrade/). Forks don't have + # a `documentation` branch — checkout would fail. Restrict to OCA. + if: ${{ github.repository_owner == 'OCA' }} runs-on: ubuntu-latest steps: - name: Check out OpenUpgrade Documentation From e8e0dd430ff050bdbaf296c77ddeed137ab7e51d Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Fri, 15 May 2026 21:44:30 -0400 Subject: [PATCH 15/15] [MIG] mail/sms/google/contacts/calendar_sms: 10 comms-cluster annotations --- docsource/modules180-190.rst | 20 ++++++------- .../19.0.1.1/upgrade_analysis_work.txt | 8 +++++ .../19.0.1.0/upgrade_analysis_work.txt | 8 +++++ .../19.0.1.0/upgrade_analysis_work.txt | 11 +++++++ .../19.0.1.2/upgrade_analysis_work.txt | 13 +++++++++ .../19.0.1.2/upgrade_analysis_work.txt | 8 +++++ .../19.0.1.0/upgrade_analysis_work.txt | 8 +++++ .../19.0.1.1/upgrade_analysis_work.txt | 13 +++++++++ .../19.0.1.1/upgrade_analysis_work.txt | 8 +++++ .../sms/19.0.3.0/upgrade_analysis_work.txt | 29 +++++++++++++++++++ .../19.0.1.0/upgrade_analysis_work.txt | 8 +++++ 11 files changed, 124 insertions(+), 10 deletions(-) create mode 100644 openupgrade_scripts/scripts/calendar_sms/19.0.1.1/upgrade_analysis_work.txt create mode 100644 openupgrade_scripts/scripts/contacts/19.0.1.0/upgrade_analysis_work.txt create mode 100644 openupgrade_scripts/scripts/google_address_autocomplete/19.0.1.0/upgrade_analysis_work.txt create mode 100644 openupgrade_scripts/scripts/google_gmail/19.0.1.2/upgrade_analysis_work.txt create mode 100644 openupgrade_scripts/scripts/mail_bot/19.0.1.2/upgrade_analysis_work.txt create mode 100644 openupgrade_scripts/scripts/mail_bot_hr/19.0.1.0/upgrade_analysis_work.txt create mode 100644 openupgrade_scripts/scripts/mail_group/19.0.1.1/upgrade_analysis_work.txt create mode 100644 openupgrade_scripts/scripts/microsoft_outlook/19.0.1.1/upgrade_analysis_work.txt create mode 100644 openupgrade_scripts/scripts/sms/19.0.3.0/upgrade_analysis_work.txt create mode 100644 openupgrade_scripts/scripts/sms_twilio/19.0.1.0/upgrade_analysis_work.txt diff --git a/docsource/modules180-190.rst b/docsource/modules180-190.rst index 39d37c51049d..43cf7f9a2d65 100644 --- a/docsource/modules180-190.rst +++ b/docsource/modules180-190.rst @@ -100,7 +100,7 @@ Module coverage 18.0 -> 19.0 +---------------------------------------------------+----------------------+-------------------------------------------------+ | calendar |Done | | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| calendar_sms | | | +| calendar_sms |Done |Nothing to do | +---------------------------------------------------+----------------------+-------------------------------------------------+ | certificate | |No DB layout changes. | +---------------------------------------------------+----------------------+-------------------------------------------------+ @@ -110,7 +110,7 @@ Module coverage 18.0 -> 19.0 +---------------------------------------------------+----------------------+-------------------------------------------------+ | cloud_storage_google | | | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| contacts | | | +| contacts |Done |Nothing to do | +---------------------------------------------------+----------------------+-------------------------------------------------+ | crm | | | +---------------------------------------------------+----------------------+-------------------------------------------------+ @@ -158,11 +158,11 @@ Module coverage 18.0 -> 19.0 +---------------------------------------------------+----------------------+-------------------------------------------------+ | google_account | |No DB layout changes. | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| |new| google_address_autocomplete | | | +| |new| google_address_autocomplete |Done |Nothing to do | +---------------------------------------------------+----------------------+-------------------------------------------------+ | google_calendar | |No DB layout changes. | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| google_gmail | | | +| google_gmail |Done |Nothing to do | +---------------------------------------------------+----------------------+-------------------------------------------------+ | google_recaptcha |Nothing to do | | +---------------------------------------------------+----------------------+-------------------------------------------------+ @@ -704,11 +704,11 @@ Module coverage 18.0 -> 19.0 +---------------------------------------------------+----------------------+-------------------------------------------------+ | mail |Done | | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| mail_bot | | | +| mail_bot |Done |Nothing to do | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| mail_bot_hr | | | +| mail_bot_hr |Done |Nothing to do | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| mail_group | | | +| mail_group |Done |Nothing to do | +---------------------------------------------------+----------------------+-------------------------------------------------+ | mail_plugin | |No DB layout changes. | +---------------------------------------------------+----------------------+-------------------------------------------------+ @@ -746,7 +746,7 @@ Module coverage 18.0 -> 19.0 +---------------------------------------------------+----------------------+-------------------------------------------------+ | microsoft_calendar | |No DB layout changes. | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| microsoft_outlook | | | +| microsoft_outlook |Done |Nothing to do | +---------------------------------------------------+----------------------+-------------------------------------------------+ | mrp |Done | | +---------------------------------------------------+----------------------+-------------------------------------------------+ @@ -1046,9 +1046,9 @@ Module coverage 18.0 -> 19.0 +---------------------------------------------------+----------------------+-------------------------------------------------+ | sales_team |Nothing to do | | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| sms | | | +| sms |Done |Nothing to do | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| sms_twilio | | | +| sms_twilio |Done |Nothing to do | +---------------------------------------------------+----------------------+-------------------------------------------------+ | snailmail | | | +---------------------------------------------------+----------------------+-------------------------------------------------+ diff --git a/openupgrade_scripts/scripts/calendar_sms/19.0.1.1/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/calendar_sms/19.0.1.1/upgrade_analysis_work.txt new file mode 100644 index 000000000000..13a3e02fb39c --- /dev/null +++ b/openupgrade_scripts/scripts/calendar_sms/19.0.1.1/upgrade_analysis_work.txt @@ -0,0 +1,8 @@ +---Models in module 'calendar_sms'--- + +---Fields in module 'calendar_sms'--- +calendar_sms / calendar.alarm / sms_notify_responsible (boolean): DEL + +# NOTHING TO DO + +---XML records in module 'calendar_sms'--- diff --git a/openupgrade_scripts/scripts/contacts/19.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/contacts/19.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..47db0d8ae43a --- /dev/null +++ b/openupgrade_scripts/scripts/contacts/19.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,8 @@ +---Models in module 'contacts'--- + +---Fields in module 'contacts'--- + +---XML records in module 'contacts'--- +DEL ir.ui.menu: contacts.menu_partner_title_contact + +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/google_address_autocomplete/19.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/google_address_autocomplete/19.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..199df1c28058 --- /dev/null +++ b/openupgrade_scripts/scripts/google_address_autocomplete/19.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,11 @@ +---Models in module 'google_address_autocomplete'--- + +---Fields in module 'google_address_autocomplete'--- + +---XML records in module 'google_address_autocomplete'--- +NEW ir.ui.view: google_address_autocomplete.res_config_settings_view_form +NEW ir.ui.view: google_address_autocomplete.view_company_form_inherit_address_autocomplete +NEW ir.ui.view: google_address_autocomplete.view_partner_address_form_inherit_address_autocomplete +NEW ir.ui.view: google_address_autocomplete.view_partner_form_inherit_address_autocomplete + +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/google_gmail/19.0.1.2/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/google_gmail/19.0.1.2/upgrade_analysis_work.txt new file mode 100644 index 000000000000..eac7c7a4f1c0 --- /dev/null +++ b/openupgrade_scripts/scripts/google_gmail/19.0.1.2/upgrade_analysis_work.txt @@ -0,0 +1,13 @@ +---Models in module 'google_gmail'--- + +---Fields in module 'google_gmail'--- +google_gmail / fetchmail.server / google_gmail_authorization_code (char): DEL +google_gmail / ir.mail_server / google_gmail_authorization_code (char): DEL +google_gmail / res.users / outgoing_mail_server_type (False): NEW selection_keys: ['default', 'gmail'], mode: modify + +# NOTHING TO DO + +---XML records in module 'google_gmail'--- +NEW ir.ui.view: google_gmail.google_gmail_oauth_error + +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/mail_bot/19.0.1.2/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/mail_bot/19.0.1.2/upgrade_analysis_work.txt new file mode 100644 index 000000000000..cf321b99d4f7 --- /dev/null +++ b/openupgrade_scripts/scripts/mail_bot/19.0.1.2/upgrade_analysis_work.txt @@ -0,0 +1,8 @@ +---Models in module 'mail_bot'--- + +---Fields in module 'mail_bot'--- + +---XML records in module 'mail_bot'--- +DEL ir.ui.view: mail_bot.res_users_view_form_preferences + +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/mail_bot_hr/19.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/mail_bot_hr/19.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..6b26daf75df6 --- /dev/null +++ b/openupgrade_scripts/scripts/mail_bot_hr/19.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,8 @@ +---Models in module 'mail_bot_hr'--- + +---Fields in module 'mail_bot_hr'--- + +---XML records in module 'mail_bot_hr'--- +DEL ir.ui.view: mail_bot_hr.res_users_view_form_profile + +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/mail_group/19.0.1.1/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/mail_group/19.0.1.1/upgrade_analysis_work.txt new file mode 100644 index 000000000000..4f9766d7544b --- /dev/null +++ b/openupgrade_scripts/scripts/mail_group/19.0.1.1/upgrade_analysis_work.txt @@ -0,0 +1,13 @@ +---Models in module 'mail_group'--- + +---Fields in module 'mail_group'--- +mail_group / mail.group / _order : _order is now 'is_closed ASC, create_date DESC, id DESC' ('create_date DESC, id DESC') +mail_group / mail.group / is_closed (boolean) : NEW + +# NOTHING TO DO + +---XML records in module 'mail_group'--- +NEW ir.actions.act_window: mail_group.mail_compose_message_action_mail_group +NEW ir.ui.view: mail_group.email_template_mail_group_closed + +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/microsoft_outlook/19.0.1.1/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/microsoft_outlook/19.0.1.1/upgrade_analysis_work.txt new file mode 100644 index 000000000000..8e6c5d31b372 --- /dev/null +++ b/openupgrade_scripts/scripts/microsoft_outlook/19.0.1.1/upgrade_analysis_work.txt @@ -0,0 +1,8 @@ +---Models in module 'microsoft_outlook'--- + +---Fields in module 'microsoft_outlook'--- +microsoft_outlook / res.users / outgoing_mail_server_type (False): NEW selection_keys: ['default', 'gmail', 'outlook'], mode: modify + +# NOTHING TO DO + +---XML records in module 'microsoft_outlook'--- diff --git a/openupgrade_scripts/scripts/sms/19.0.3.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/sms/19.0.3.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..fb77777d3032 --- /dev/null +++ b/openupgrade_scripts/scripts/sms/19.0.3.0/upgrade_analysis_work.txt @@ -0,0 +1,29 @@ +---Models in module 'sms'--- +obsolete model sms.resend [transient] +obsolete model sms.resend.recipient [transient] + +# NOTHING TO DO + +---Fields in module 'sms'--- +sms / ir.actions.server / state (False) : selection_keys added: [object_copy] (most likely nothing to do) +sms / mail.message / message_type (False) : selection_keys added: [out_of_office] (most likely nothing to do) +sms / mail.notification / failure_type (False) : selection_keys added: [mail_bl, mail_dup, mail_optout, mail_spam] (most likely nothing to do) +sms / res.partner / phone_blacklisted (boolean) : module is now 'phone_validation' ('sms') +sms / res.partner / phone_mobile_search (char) : module is now 'phone_validation' ('sms') +sms / res.partner / phone_sanitized (char) : module is now 'phone_validation' ('sms') +sms / res.partner / phone_sanitized_blacklisted (boolean): module is now 'phone_validation' ('sms') +sms / res.users / phone_blacklisted (boolean) : module is now 'phone_validation' ('sms') +sms / res.users / phone_mobile_search (char) : module is now 'phone_validation' ('sms') +sms / res.users / phone_sanitized (char) : module is now 'phone_validation' ('sms') +sms / res.users / phone_sanitized_blacklisted (boolean): module is now 'phone_validation' ('sms') + +# NOTHING TO DO + +---XML records in module 'sms'--- +DEL ir.actions.act_window: sms.sms_resend_action +DEL ir.model.access: sms.access_sms_resend +DEL ir.model.access: sms.access_sms_resend_recipient +DEL ir.ui.view: sms.mail_resend_message_view_form +DEL ir.ui.view: sms.res_partner_view_search + +# NOTHING TO DO diff --git a/openupgrade_scripts/scripts/sms_twilio/19.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/sms_twilio/19.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..7167821a283a --- /dev/null +++ b/openupgrade_scripts/scripts/sms_twilio/19.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,8 @@ +---Models in module 'sms_twilio'--- + +---Fields in module 'sms_twilio'--- +sms_twilio / mail.notification / failure_type (False) : selection_keys added: [mail_bl, mail_dup, mail_optout, mail_spam] (most likely nothing to do) + +# NOTHING TO DO + +---XML records in module 'sms_twilio'---