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 @@ -