diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e983395..e53a05b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -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:
- - build
+ - lint
- 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
- image: badouralix/curl-jq
- rules:
- # project must be public for `curl` to access the API; using `CI_JOB_TOKEN` is insufficient!
- - if: $CI_PROJECT_VISIBILITY != "public"
- when: never
- - if: $CI_PIPELINE_SOURCE == "merge_request_event"
- - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
- when: never
- - when: always
- script: |
- url="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/pipelines/${CI_PIPELINE_ID}/jobs"
- curl --fail --show-error --silent "$url" |
- jq --exit-status 'map(select(.name | contains("component job of my-component"))) | length >= 1'
+ image: $ODOO_IMAGE
+ services:
+ - name: postgres:15
+ alias: postgres
+ command:
+ - postgres
+ - -c
+ - fsync=off
+ - -c
+ - shared_buffers=512MB
+ before_script:
+ # Create primed template database
+ - 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
- image: registry.gitlab.com/gitlab-org/release-cli:latest
- rules:
- - if: $CI_COMMIT_TAG
- script: echo "Creating release $CI_COMMIT_TAG"
- release:
- tag_name: $CI_COMMIT_TAG
- description: "Release $CI_COMMIT_TAG of components repository $CI_PROJECT_PATH"
+# ================================================================
+# BUILD DOCKER IMAGE
+# ================================================================
+
+build_image:
+ stage: build
+ image: docker:latest
+ services:
+ - 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
diff --git a/addons/itsulu_blog_publisher/views/blog_generation_log_views.xml b/addons/itsulu_blog_publisher/views/blog_generation_log_views.xml
index 5c26724..37ccafe 100644
--- a/addons/itsulu_blog_publisher/views/blog_generation_log_views.xml
+++ b/addons/itsulu_blog_publisher/views/blog_generation_log_views.xml
@@ -23,10 +23,6 @@
-