Something went wrong on our end
-
Vincent Hatakeyama authoredVincent Hatakeyama authored
.gitlab-ci.yml 8.97 KiB
include:
- file: python3-ruff.gitlab-ci.yaml
project: xcg/ci-templates
- file: python-pylint.gitlab-ci.yaml
project: xcg/ci-templates
- file: python-package.gitlab-ci.yaml
project: xcg/ci-templates
- file: docker-build.gitlab-ci.yaml
project: xcg/ci-templates
- file: prettier.gitlab-ci.yaml
project: xcg/ci-templates
- file: yamllint.gitlab-ci.yaml
project: xcg/ci-templates
- template: "Workflows/Branch-Pipelines.gitlab-ci.yml"
variables:
TEMP_IMAGE_BASENAME: ${CI_REGISTRY_IMAGE}/ci
TEMP_IMAGE: ${CI_REGISTRY_IMAGE}/ci:ci-pipeline-${CI_PIPELINE_ID}
TAG_COMMIT_SHA: "no"
PG_MIRROR: quay.orus.io/cloudcrane/
ruff:
needs: []
rules:
- if: $CI_COMMIT_TAG == null
# build a temporary image for doc and tests
build-docker-image:
needs:
- job: create_package
artifacts: true
stage: build
variables:
TAG_COMMIT_REF_SLUG: "no"
TAG_BRANCH: "no"
TAG_PIPELINE: "yes"
DOCKER_IMAGE: $TEMP_IMAGE_BASENAME
TAG_TAG: "no"
pylint:
extends: .pylint
needs:
- job: build-docker-image
image: $TEMP_IMAGE
variables:
PYLINT_FILES: odoo_scripts doc tests
rules:
- if: $CI_COMMIT_TAG == null
before_script:
# list all non empty optional dependencies
- pip install ".[doc,docker,import_sql,import_base_import]"
- !reference [.pylint, before_script]
mypy:
needs:
- job: build-docker-image
image: $TEMP_IMAGE
script:
- python3 -m pip install mypy types-PyYAML types-psycopg2 types-python-dateutil
types-requests build twine ".[docker]"
- mypy odoo_scripts tests
rules: !reference [pylint, rules]
prettier:
rules: !reference [pylint, rules]
yamllint:
rules: !reference [pylint, rules]
unittest:
needs: []
stage: test
image: registry.orus.io/xcg/docker/multi-python:20241010
script:
- tox --parallel all -e
36,py37,py38,py39,py310,py311,py312,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
rules:
- if: $CI_COMMIT_TAG == null
import_jsonrpc_odoo11_test-focal:
stage: test
needs:
- job: create_package
artifacts: true
image:
name: registry.orus.io/xcg/docker/odoo:11.0.git20230705.01717dc-20.04.3
entrypoint: [""]
services:
- name: ${PG_MIRROR}postgres:12-alpine
command: ["-c", "fsync=off"]
alias: db
variables:
POSTGRES_USER: odoo
POSTGRES_HOST_AUTH_METHOD: trust
ODOO_ADDONS_PATH: ""
ODOO_TYPE: odoo11
ODOO_DATA_DIR: /var/lib/odoo
before_script:
- python3 -m pip show pip setuptools
- export PATH=$HOME/.local/bin:$PATH
- python3 -m pip install pip>10
# install current version as this is the one tested, not the one in the image
- python3 -m pip install dist/*.whl
# install modules
- &install_modules $CI_PROJECT_DIR/start --db_host=db -d test_setup
--max-cron-threads=0 --without-demo=all --data-dir $ODOO_DATA_DIR --init base
--stop-after-init
script:
# restart odoo with installed modules and use it in background
- start --db_host=db -d test_setup --max-cron-threads=0 --data-dir $ODOO_DATA_DIR &
- process_to_kill_pid=$!
- 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 db --user odoo --database test_setup --directory
tests/import_sql
# clean up background process
- kill $process_to_kill_pid
rules:
- if: $CI_COMMIT_TAG == null
import_jsonrpc_odoo11_test:
extends: import_jsonrpc_odoo11_test-focal
image:
name: registry.orus.io/xcg/docker/odoo:11.0.git20230705.01717dc-18.04.2
before_script:
- export PATH=$HOME/.local/bin:$PATH
- python3 -m pip install pip>10
# specific for 3.6: need pre compiled 3.6 backports-datetime-fromisoformat
- pip install
--index-url=https://gitlab-ci-token:$CI_JOB_TOKEN@orus.io/api/v4/projects/${CI_PROJECT_ID}/packages/pypi/simple
backports-datetime-fromisoformat
# install current version as this is the one tested, not the one in the image
- python3 -m pip install dist/*.whl
# install modules
- *install_modules
import_base_import_odoo11_test:
extends: import_jsonrpc_odoo11_test
script:
# restart odoo with installed modules and use it in background
- start --db_host=db -d test_setup --max-cron-threads=0 --data-dir /var/lib/odoo &
- process_to_kill_pid=$!
- 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 db --user odoo --database test_setup --directory
tests/import_sql
# clean up background process
- kill $process_to_kill_pid
import_jsonrpc_odoo13_test:
extends: import_jsonrpc_odoo11_test-focal
variables:
ODOO_TYPE: ""
image:
name: registry.orus.io/xcg/docker/odoo:13.0.20240131-3
entrypoint: [""]
import_jsonrpc_odoo14_test:
extends: import_jsonrpc_odoo13_test
image:
name: registry.orus.io/xcg/docker/odoo:14.0.git20230227.439095d-2.1
entrypoint: [""]
import_jsonrpc_odoo15_test:
extends: import_jsonrpc_odoo14_test
image:
name: registry.orus.io/xcg/docker/odoo:15.0.20240930-1
entrypoint: [""]
variables:
ODOO_DATA_DIR: /var/opt/odoo
import_jsonrpc_odoo16_test:
extends: import_jsonrpc_odoo15_test
image:
name: registry.orus.io/xcg/docker/odoo:16.0.20240930-1
entrypoint: [""]
services:
- name: ${PG_MIRROR}postgres:15-alpine
command: ["-c", "fsync=off"]
alias: db
import_jsonrpc_odoo17_test:
extends: import_jsonrpc_odoo16_test
image:
name: registry.orus.io/xcg/docker/odoo:17.0.20240930-2
import_jsonrpc_odoo18_test:
extends: import_jsonrpc_odoo17_test
image:
name: registry.orus.io/xcg/docker/odoo:18.0.20241021-1
services:
- name: ${PG_MIRROR}postgres:17-alpine
command: ["-c", "fsync=off"]
alias: db
docker_build_copy_test:
needs:
- job: build-docker-image
stage: test
image: $TEMP_IMAGE
script:
- docker_build_copy
- docker_build_clean
# shell tests for colorize/analyse
- ./shell_tests.zsh
rules:
- if: $CI_COMMIT_TAG == null
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
- pip3 install hg-evolve .[doc]
- cd doc
- for language in en fr ; do make LANGUAGE=$language
BUILDDIRSUFFIX=/$CI_COMMIT_HG_BRANCH html ; done
pages:
needs:
- job: build-documentation
artifacts: true
stage: deploy
script:
- mkdir public
- cp -Lr doc/_build/html/fr/$CI_COMMIT_HG_BRANCH public/fr
- cp -Lr doc/_build/html/en/$CI_COMMIT_HG_BRANCH public/en
- |
cat > public/_redirects <<EOF
/ /fr/ 302
EOF
artifacts:
paths:
- public
rules:
- if: "$CI_COMMIT_HG_TOPIC"
when: never
- if: $CI_COMMIT_HG_BRANCH == "default"
publish_image:
extends: build-docker-image
stage: deploy
needs:
- job: build-docker-image
- job: docker_build_copy_test
optional: true
- job: import_jsonrpc_odoo11_test
optional: true
- job: import_jsonrpc_odoo11_test-focal
optional: true
- job: import_jsonrpc_odoo13_test
optional: true
- job: import_base_import_odoo11_test
optional: true
- job: unittest
optional: true
variables:
TAG_LATEST: branch/default
script:
- DOCKER_BASE_IMAGE_NAME="$TEMP_IMAGE" DOCKER_IMAGE="${CI_REGISTRY_IMAGE}" tag-img
- DOCKER_BASE_IMAGE_NAME="$TEMP_IMAGE" DOCKER_IMAGE="xcgd/odoo_scripts" tag-img
rules: !reference [publish_package, rules]
release_job:
stage: deploy
image: registry.gitlab.com/python-gitlab/python-gitlab:alpine
needs:
- job: publish_package
- job: build-docker-image
rules:
- if: $CI_COMMIT_TAG
script:
- apk add mercurial pandoc
# Go back just before the tag
- hg up .~1
- pip install towncrier
- towncrier build --version=$CI_COMMIT_TAG --draft > changes.rst
- pandoc -s -o changes.md --to markdown_strict changes.rst
- gitlab --version
- |
gitlab project-release create --project-id $CI_PROJECT_ID --name $CI_COMMIT_TAG --tag-name $CI_COMMIT_TAG --ref $CI_COMMIT_TAG --description "$(cat changes.md)"
# TODO find a way to automatically add the packages to the release (need a valid generic URL)