release: v0.5.0 — establish Odoo 14.0 branch (ITSulu production target)

Seed the 14.0 series branch from the 17.0 baseline:
- .odoo-series = 14.0; Dockerfile FROM odoo:14.0; manifest 14.0.0.5.0
- PORTING.md tracks the Odoo-14 checklist (biggest delta: mail templates
  must revert to Odoo 14's Jinja2 syntax; render API differs)
- README retargeted to 14.0 with porting-in-progress notice
- CHANGELOG v0.5.0 entry

NOTE: seeded from 17.0 — the Odoo-14 port is NOT yet verified (PORTING.md).
Not deploy-ready on the production 14.0 instance until the suite is green there.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Nicholas Riegel 2026-05-30 11:17:49 -04:00
parent 5ed2851ee5
commit dd19b2f463
7 changed files with 78 additions and 9 deletions

1
.odoo-series Normal file
View file

@ -0,0 +1 @@
14.0

View file

@ -12,6 +12,31 @@ Release notes are written in plain language so anyone on the team can follow wha
--- ---
## v0.5.0 — 2026-05-30
Sets up support for **multiple Odoo Community versions**, each on its own branch — the same
model the Odoo project itself uses. We initially target **Odoo 19.0** (the latest stable) and
**Odoo 14.0** (the version ITSulu runs in production).
### Added
- **Per-Odoo-version branches.** The addon now lives on a branch per Odoo release — `19.0`
and `14.0` — so each can track the API differences of its Odoo version independently. Check
out the branch that matches your Odoo install.
- **Version tooling is Odoo-aware.** The release helper (`bump-version.sh`) now reads which
Odoo series a branch targets and stamps the addon and release tags accordingly
(e.g. `19.0-v0.5.0`, `14.0-v0.5.0`), so one product version can ship on several Odoo versions.
- A `PORTING.md` on each version branch tracks what still needs checking for that Odoo release.
### Notes
- This `14.0` branch is the target for the **ITSulu production** instance. It is **seeded from
the 17.0 codebase**, so the Odoo-14 port is still being completed — most notably the email
template must move back to Odoo 14's older Jinja syntax. See `PORTING.md`.
- Documentation (`README`, `CLAUDE.md` §15) now describes the branch-per-version model.
---
## v0.4.8 — 2026-05-30 ## v0.4.8 — 2026-05-30
The first tagged release. This version gets the whole test suite running green on the The first tagged release. This version gets the whole test suite running green on the

View file

@ -1,4 +1,4 @@
FROM odoo:17.0 FROM odoo:14.0
# Install Python testing dependencies using the system Python # Install Python testing dependencies using the system Python
RUN python3 -m pip install --no-cache-dir \ RUN python3 -m pip install --no-cache-dir \

39
PORTING.md Normal file
View file

@ -0,0 +1,39 @@
# Porting status — Odoo 14.0 branch
This branch targets **Odoo Community 14.0** — the version **ITSulu runs in production**. It was
**seeded from the 17.0 baseline** and the Odoo-14 porting is tracked here. Until every item is
verified, treat this branch as **work in progress** — do not deploy to the production 14.0
instance unverified.
> The product feature set is the same across all Odoo branches; only the Odoo-API-specific code
> differs. Odoo 14 is **older** than the 17.0 baseline, so several things move *backwards*.
> See `CLAUDE.md` §15 for the branch model and §11.5 / §12 for version-specific gotchas.
## Series markers (done)
- [x] `.odoo-series` = `14.0`
- [x] `Dockerfile` base image = `odoo:14.0`
- [x] manifest version prefix = `14.0.` (via `bump-version.sh`)
## API porting checklist (verify on a real Odoo 14.0 instance)
- [ ] **Mail template syntax — REVERT to Jinja2.** Odoo 14 renders `mail.template` with Jinja2
(`${object.blog_post_id.name}`, `% if`, `% for`), **not** the qweb `<t t-out>` used on 17.0.
The 17.0 template in `data/mail_template_data.xml` must be converted back to Jinja for 14.0.
- [ ] **Mail render API.** 14.0 uses `template.render_template(...)` / `_render_template(...)`,
not 17.0's `_render_field`. Update `blog_generation_log.send_notification_email` + tests.
- [ ] `blog.post` body field name on 14.0 (the 17.0 baseline writes `content` — confirm 14.0).
- [ ] Python 3.63.8 only — remove any 3.9+ syntax (dict `|` merge, `str.removeprefix`, etc.).
- [ ] `@api.model_create_multi`, `name_get`, and other ORM signatures valid on 14.0.
- [ ] View/RELAXNG validation for 14.0 (attrs/states syntax differs from 17.0).
- [ ] `ir.cron` + mail data XML formats.
- [ ] Full test suite green on a 14.0 template DB (K8s job, §8, base image `odoo:14.0`).
- [ ] pytest-odoo / pytest-bdd versions compatible with the 14.0 Python.
## How to work this branch
1. Stand up a 14.0 template DB (mirror §8, base image `odoo:14.0`).
2. Start with the mail template (Jinja revert) and the render API — those are the biggest deltas.
3. Run the suite, fix one Odoo-API difference at a time.
4. Record each gotcha in `CLAUDE.md` §12 tagged with the series.
5. When green, cut a release on this branch (`bump-version.sh` → tag `14.0-vX.Y.Z`).

View file

@ -1,8 +1,12 @@
# ITSulu Blog Publisher — Odoo 17 Addon # ITSulu Blog Publisher — Odoo 14 Addon
**Version:** 0.4.8 **Version:** 0.5.0
Automated blog post generation and publishing for Odoo 17 Community Edition, powered by generative AI (Anthropic Claude, OpenAI, Google Gemini, or Ollama). Automated blog post generation and publishing for Odoo 14.0 Community Edition, powered by generative AI (Anthropic Claude, OpenAI, Google Gemini, or Ollama).
> ⚠️ **Porting in progress.** This `14.0` branch is the target for the ITSulu production
> instance. It is seeded from the 17.0 baseline; the Odoo-14 API port (notably the older
> Jinja-style mail templates) is tracked in [PORTING.md](PORTING.md).
> **Versioning**`MAJOR.MINOR.PATCH` (each 0999). MAJOR = major release for sale / significant change; MINOR = features or performance improvements; PATCH = a single group of commits. See [CHANGELOG.md](CHANGELOG.md) for release notes and [CLAUDE.md](CLAUDE.md) §15 for the full scheme. > **Versioning**`MAJOR.MINOR.PATCH` (each 0999). MAJOR = major release for sale / significant change; MINOR = features or performance improvements; PATCH = a single group of commits. See [CHANGELOG.md](CHANGELOG.md) for release notes and [CLAUDE.md](CLAUDE.md) §15 for the full scheme.
@ -63,9 +67,9 @@ primed PostgreSQL template database. See [CLAUDE.md](CLAUDE.md) §8 for the K8s
### Prerequisites ### Prerequisites
- Odoo 17.0 Community - Odoo 14.0 Community
- Python 3.10+ - Python 3.63.8
- PostgreSQL 13+ - PostgreSQL 10+
- pip packages: `requests`, `pytest-odoo`, `pytest-bdd` - pip packages: `requests`, `pytest-odoo`, `pytest-bdd`
### Steps ### Steps

View file

@ -1 +1 @@
0.4.8 0.5.0

View file

@ -3,7 +3,7 @@
'name': 'ITSulu Blog Publisher', 'name': 'ITSulu Blog Publisher',
# Odoo manifest version = <odoo_series>.<product_version>. Product version # Odoo manifest version = <odoo_series>.<product_version>. Product version
# is tracked in the repo-root VERSION file (currently 0.4.8). See CLAUDE.md §15. # is tracked in the repo-root VERSION file (currently 0.4.8). See CLAUDE.md §15.
'version': '17.0.0.4.8', 'version': '14.0.0.5.0',
'summary': 'AI-powered blog post generation with multi-LLM support, scheduling, and social media copy', 'summary': 'AI-powered blog post generation with multi-LLM support, scheduling, and social media copy',
'description': """ 'description': """
ITSulu Blog Publisher ITSulu Blog Publisher