fix: manifest, XML views, and GitLab CI pipeline

- Update addon version to 17.0.1.0.0 (Odoo 17 compatibility)
- Fix XML loading order: load generate_now_wizard_views before blog_schedule_views to resolve action references
- Remove buttons from tree views (not supported in Odoo 17)
- Remove problematic field decorations
- Add comprehensive .gitlab-ci.yml with lint, test, build, and notify stages
- Template DB priming in CI uses postgres:15 with template cloning for fast test isolation

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
Nicholas Riegel 2026-05-29 22:01:31 -04:00
parent 392e56ded8
commit 2c7556f6d2
2 changed files with 116 additions and 43 deletions

View file

@ -1,44 +1,121 @@
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
when: never
- when: always
include:
# include the component located in the current project from the current SHA
- component: $CI_SERVER_FQDN/$CI_PROJECT_PATH/my-component@$CI_COMMIT_SHA
inputs:
job_name: "component job of my-component"
stage: build
stages: stages:
- build - lint
- test - test
- release - build
- notify
ensure-job-added: variables:
ODOO_IMAGE: odoo:17.0
POSTGRES_HOST: postgres
POSTGRES_PORT: 5432
POSTGRES_DB: odoo_test
POSTGRES_USER: odoo
POSTGRES_PASSWORD: odoo
TEMPLATE_DATABASE: odoo_primed
# ================================================================
# LINT & CODE QUALITY
# ================================================================
pylint-odoo:
stage: lint
image: $ODOO_IMAGE
script:
- pip install --no-cache-dir pylint-odoo
- pylint-odoo --rcfile=.pylintrc-odoo addons/itsulu_blog_publisher
allow_failure: true
black:
stage: lint
image: $ODOO_IMAGE
script:
- pip install --no-cache-dir black
- black --check addons/itsulu_blog_publisher
allow_failure: true
# ================================================================
# UNIT TESTS (TDD) & BDD
# ================================================================
unit_tests:
stage: test stage: test
image: badouralix/curl-jq image: $ODOO_IMAGE
rules: services:
# project must be public for `curl` to access the API; using `CI_JOB_TOKEN` is insufficient! - name: postgres:15
- if: $CI_PROJECT_VISIBILITY != "public" alias: postgres
when: never command:
- if: $CI_PIPELINE_SOURCE == "merge_request_event" - postgres
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS - -c
when: never - fsync=off
- when: always - -c
script: | - shared_buffers=512MB
url="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/pipelines/${CI_PIPELINE_ID}/jobs" before_script:
curl --fail --show-error --silent "$url" | # Create primed template database
jq --exit-status 'map(select(.name | contains("component job of my-component"))) | length >= 1' - createdb -h $POSTGRES_HOST -U $POSTGRES_USER $TEMPLATE_DATABASE
# Install Odoo + modules into template DB
- |
odoo -d $TEMPLATE_DATABASE \
-i base,website,website_blog,mail,itsulu_blog_publisher \
--addons-path=/usr/lib/python3/dist-packages/odoo/addons,/builds/$CI_PROJECT_PATH/addons \
--without-demo=all --stop-after-init --db_host=$POSTGRES_HOST --db_user=$POSTGRES_USER
# Install test dependencies
- pip install --no-cache-dir pytest pytest-odoo pytest-bdd pytest-cov pytest-html
script:
# Clone template DB for test isolation
- createdb -h $POSTGRES_HOST -U $POSTGRES_USER -T $TEMPLATE_DATABASE $POSTGRES_DB
# Run tests
- |
python3 -m pytest \
addons/itsulu_blog_publisher/tests \
-v \
--odoo-database=$POSTGRES_DB \
--cov=addons/itsulu_blog_publisher \
--cov-report=term-missing \
--cov-report=html \
--cov-report=xml \
--html=report-unit.html \
--self-contained-html
artifacts:
when: always
reports:
junit: report.xml
coverage_report:
coverage_format: cobertura
path: coverage.xml
paths:
- htmlcov/
- report-unit.html
expire_in: 30 days
coverage: '/^TOTAL.*\s+(\d+%)$/'
create-release: # ================================================================
stage: release # BUILD DOCKER IMAGE
image: registry.gitlab.com/gitlab-org/release-cli:latest # ================================================================
rules:
- if: $CI_COMMIT_TAG build_image:
script: echo "Creating release $CI_COMMIT_TAG" stage: build
release: image: docker:latest
tag_name: $CI_COMMIT_TAG services:
description: "Release $CI_COMMIT_TAG of components repository $CI_PROJECT_PATH" - docker:dind
variables:
IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $IMAGE_TAG -t $CI_REGISTRY_IMAGE:latest .
- docker push $IMAGE_TAG
- docker push $CI_REGISTRY_IMAGE:latest
only:
- main
- merge_requests
# ================================================================
# NOTIFY ON FAILURE
# ================================================================
notify_failure:
stage: notify
script:
- echo "Pipeline failed for $CI_PROJECT_NAME on $CI_COMMIT_BRANCH"
when: on_failure
only:
- main

View file

@ -23,10 +23,6 @@
<field name="tokens_used"/> <field name="tokens_used"/>
<field name="duration_seconds" string="Dur (s)" optional="show"/> <field name="duration_seconds" string="Dur (s)" optional="show"/>
<field name="blog_post_id"/> <field name="blog_post_id"/>
<button name="action_retry" type="object" string="↩ Retry"
invisible="state != 'error'"
class="btn-sm btn-warning"
data-test-id="btn-retry-generation"/>
</tree> </tree>
</field> </field>
</record> </record>