include:
  - file: python3-lint-needs.gitlab-ci.yaml
    project: xcg/ci-templates
  - file: docker-build.gitlab-ci.yaml
    project: xcg/ci-templates
  - file: deploy-doc.gitlab-ci.yaml
    project: xcg/ci-templates

variables:
  HTML_DOC_SOURCES: doc/_build/html
  DOCKER_IMAGE: quay.orus.io/xcgd/odoo_scripts
  # do not use $TEMP_IMAGE_BASENAME, it will not be correctly replaced by GitLab
  TEMP_IMAGE: quay.orus.io/xcgd/odoo_scripts:hg-${CI_COMMIT_HG_SHA}

# build a temporary image for doc and tests
build-docker-image:
  needs: []
  stage: build
  variables:
    TAG_COMMIT_REF_SLUG: "no"
    TAG_COMMIT_SHA: "yes"
    TAG_BRANCH: "no"

pylint:
  needs:
    - job: build-docker-image
  image: $TEMP_IMAGE
  variables:
    PYLINT_FILES: odoo_scripts doc tests

unittest:
  needs: []
  stage: test
  image: fkrull/multi-python
  script:
    - tox --workdir=.cache/tox --parallel all -e py36,py37,py38,py39,coverage-report,coverage-xml
  artifacts:
    when: always
    reports:
      coverage_report:
        coverage_format: cobertura
        path: coverage.xml
      junit: report.py36.xml
    paths:
      - report.py36.xml
  coverage: "/TOTAL.+ ([0-9]{1,3}%)/"
  cache:
    paths:
      - .cache
  variables:
    PIP_CACHE_DIR: $CI_PROJECT_DIR/.cache/pip

unittest-py310:
  extends: unittest
  image: python:3.10-alpine
  script:
    - apk add git
    - python3 -m pip install tox
    - tox --workdir=.cache/tox -e py310,coverage-report,coverage-xml

import_jsonrpc_odoo11_test:
  stage: test
  needs: []
  image:
    name: quay.orus.io/odoo/odoo:11.0-bionic
    entrypoint: [""]
  services:
    - name: postgres:12-alpine
      command: ["-c", "fsync=off"]
      alias: db
  variables:
    POSTGRES_USER: odoo
    POSTGRES_HOST_AUTH_METHOD: trust
    ODOO_ADDONS_PATH: ""
    ODOO_TYPE: odoo11
    __PIP_EXTRA_OPTS: "--system"
  before_script:
    # install modules
    - $CI_PROJECT_DIR/start --db_host=db -d test_setup --max-cron-threads=0 --without-demo=all --data-dir /var/lib/odoo --init base --stop-after-init
    # install current version as this is the one tested, not the one in the image
    - python3 -m pip install --disable-pip-version-check --no-cache-dir $__PIP_EXTRA_OPTS --upgrade $CI_PROJECT_DIR
  script:
    # restart odoo with installed modules and use it in background
    - $CI_PROJECT_DIR/start --db_host=db -d test_setup --max-cron-threads=0 --data-dir /var/lib/odoo &
    - sleep 3
    # then test the setup files
    - import_jsonrpc -v --host localhost --password admin -d test_setup --protocol jsonrpc -p 8069 --directory tests/import
    - import_jsonrpc -v --host localhost --password admin -d test_setup --protocol jsonrpc -p 8069 --file tests/context_import/res.company.csv --context test=value
    - import_jsonrpc -v --host localhost --password admin -d test_setup --protocol jsonrpc -p 8069 --directory tests/import_emptyyaml --delimiter ";"
    - import_sql -v --host postgres --user odoo --database test_setup --directory tests/import_sql
    # clean up background process
    - pkill --echo --full /usr/bin/python3
    - pkill --echo --full zsh

import_base_import_odoo11_test:
  extends: import_jsonrpc_odoo11_test
  script:
    # restart odoo with installed modules and use it in background
    - $CI_PROJECT_DIR/start --db_host=db -d test_setup --max-cron-threads=0 --data-dir /var/lib/odoo &
    - sleep 3
    # then test the setup files
    - import_base_import -v --host localhost --password admin -d test_setup --protocol jsonrpc -p 8069 --directory tests/import
    - import_sql -vv --host postgres --user odoo --database test_setup --directory tests/import_sql
    # clean up background process
    - pkill --echo --full /usr/bin/python3
    - pkill --echo --full zsh

import_jsonrpc_odoo13_test:
  extends: import_jsonrpc_odoo11_test
  image:
    name: quay.orus.io/odoo/odoo:13.0
    entrypoint: [""]
  variables:
    ODOO_TYPE: odoo13

import_jsonrpc_odoo15_test:
  extends: import_jsonrpc_odoo11_test
  image:
    name: quay.orus.io/odoo/odoo:15.0
    entrypoint: [""]
  variables:
    ODOO_TYPE: odoo15
    __PIP_EXTRA_OPTS: ""

docker_build_copy_test:
  needs:
  - job: build-docker-image
  stage: test
  image: $TEMP_IMAGE
  script:
  - docker_build_copy
  - docker_build_clean

build-documentation:
  # done in test stage to be able to use the built image
  stage: test
  needs:
  - job: build-docker-image
  image: $TEMP_IMAGE
  artifacts:
    paths:
    - doc/_build
    expire_in: 10m
  script:
  - apk add make
  - cd doc
  - pip3 install -r requirements hg-evolve
  - for language in en fr ; do make LANGUAGE=$language BUILDDIRSUFFIX=/$CI_COMMIT_HG_BRANCH html ; done

publish_documentation:
  needs:
  - job: build-documentation
    artifacts: true
  only:
  - /^branch\/.*/

publish:
  extends: build-docker-image
  stage: deploy
  needs:
    - job: docker_build_copy_test
    - job: import_jsonrpc_odoo11_test
    - job: import_jsonrpc_odoo13_test
    - job: import_base_import_odoo11_test
    - job: unittest
    - job: unittest-py310
  variables:
    TAG_LATEST: branch/default
  script:
  - DOCKER_BASE_IMAGE_NAME="$TEMP_IMAGE" tag-img
  - TAG_COMMIT_SHA="no" DOCKER_BASE_IMAGE_NAME="$TEMP_IMAGE" DOCKER_IMAGE="xcgd/odoo_scripts" tag-img