mirror of
https://gitlab.com/itsulu-odoo/itsulu-blog-publisher.git
synced 2026-05-30 23:41:23 +00:00
Squash-merge of fix/ci-pipeline-corrections. Drives the full test suite
to 69/69 green on the ITSulu K8s cluster and fixes two production bugs.
Production fixes:
- Email template migrated from dead Odoo Mako (${}/% for) to Odoo 17
inline_template ({{ }}) + qweb body (type="html", t-out/t-foreach/t-if).
Notification emails previously rendered raw code in the subject/body.
- _create_blog_post now writes 'content': llm_response.body_html — every
auto-generated post was publishing empty.
- Removed duplicate itsulu_social_id field (startup warning).
Testing & infra:
- CI pipeline corrected (stage order, DB auth, junit artifact, addons path).
- E2E moved to ephemeral jobs in the itsulu-testing K8s namespace.
- Test code brought up to Odoo 17 (mail rendering, blog.post.content,
pytest-bdd env fixture, _render_field).
Versioning:
- Introduce MAJOR.MINOR.PATCH scheme, VERSION file, scripts/bump-version.sh,
CHANGELOG.md; first release v0.4.8. CLAUDE.md §15 documents the process.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
49 lines
2.5 KiB
XML
49 lines
2.5 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<odoo>
|
|
<data noupdate="0">
|
|
|
|
<record id="email_template_blog_published" model="mail.template">
|
|
<field name="name">Blog Publisher — Post Published Notification</field>
|
|
<field name="model_id" ref="model_itsulu_blog_generation_log"/>
|
|
<field name="subject">[ITSulu Insights] Blog Post Published: {{ object.blog_post_id.name }}</field>
|
|
<field name="email_from">{{ user.email_formatted }}</field>
|
|
<field name="auto_delete">True</field>
|
|
<field name="body_html" type="html">
|
|
<div style="font-family: Arial, sans-serif; line-height: 1.6; max-width: 700px;">
|
|
<h2>Blog Post Published</h2>
|
|
<p><strong>Title:</strong> <t t-out="object.blog_post_id.name"/></p>
|
|
<p><strong>Blog:</strong> <t t-out="object.blog_post_id.blog_id.name"/></p>
|
|
<p><strong>URL:</strong> <a t-attf-href="https://itsulu.com{{ object.blog_post_id.website_url }}">https://itsulu.com<t t-out="object.blog_post_id.website_url"/></a></p>
|
|
<h3>Social Media Posts — Ready to Post</h3>
|
|
<t t-foreach="object.blog_post_id.itsulu_social_id" t-as="social">
|
|
<t t-if="social.twitter_post_a">
|
|
<h4>Twitter</h4>
|
|
<p><t t-out="social.twitter_post_a"/></p>
|
|
</t>
|
|
<t t-if="social.twitter_post_b">
|
|
<h4>Twitter</h4>
|
|
<p><t t-out="social.twitter_post_b"/></p>
|
|
</t>
|
|
<t t-if="social.bluesky_post_a">
|
|
<h4>BlueSky</h4>
|
|
<p><t t-out="social.bluesky_post_a"/></p>
|
|
</t>
|
|
<t t-if="social.bluesky_post_b">
|
|
<h4>BlueSky</h4>
|
|
<p><t t-out="social.bluesky_post_b"/></p>
|
|
</t>
|
|
<t t-if="social.mastodon_post">
|
|
<h4>Mastodon</h4>
|
|
<p><t t-out="social.mastodon_post"/></p>
|
|
</t>
|
|
<t t-if="social.linkedin_post">
|
|
<h4>LinkedIn</h4>
|
|
<p><t t-out="social.linkedin_post"/></p>
|
|
</t>
|
|
</t>
|
|
</div>
|
|
</field>
|
|
</record>
|
|
|
|
</data>
|
|
</odoo>
|