-
Julian Rother authoredJulian Rother authored
.gitlab-ci.yml 5.67 KiB
image: registry.git.cccv.de/uffd/docker-images/buster
variables:
DEBIAN_FRONTEND: noninteractive
GIT_SUBMODULE_STRATEGY: normal
PYTHONPATH: deps/ldapalchemy
APT_API_URL: https://packages.cccv.de
APT_REPO: uffd
PYLINT_PIN: pylint~=2.10.0
before_script:
- python3 -V
- lsb_release -a
- uname -a
- python3 -m pylint --version
- python3 -m coverage --version
- echo "${CI_COMMIT_TAG}" | grep -qE "v[0-9]+[.][0-9]+[.][0-9]+.*" && export PACKAGE_VERSION="${CI_COMMIT_TAG#v}" || export PACKAGE_VERSION="${CI_COMMIT_SHA}"
.build:
stage: build
build:pip:
extends: .build
script:
- PACKAGE_VERSION="${PACKAGE_VERSION}" python3 -m build
artifacts:
paths:
- dist/*
build:apt:
extends: .build
script:
- ./debian/create_changelog.py python3-ldapserver > debian/changelog
- dpkg-buildpackage -us -uc
- mv ../*.deb ./
- dpkg-deb -I *.deb
- dpkg-deb -c *.deb
artifacts:
paths:
- ./*.deb
build:docs:
extends: .build
script:
- pip3 install Sphinx sphinx-rtd-theme sphinx-multiversion
- sphinx-build docs docs/_build/html
artifacts:
paths:
- docs/_build/html/index.html
- docs/_build/html
expose_as: 'Documentation'
linter:buster:
image: registry.git.cccv.de/uffd/docker-images/buster
stage: test
script:
- pip3 install $PYLINT_PIN pylint-gitlab
- python3 -m pylint --exit-zero --rcfile .pylintrc --output-format=pylint_gitlab.GitlabCodeClimateReporter ldapserver > codeclimate.json
- python3 -m pylint --exit-zero --rcfile .pylintrc --output-format=pylint_gitlab.GitlabPagesHtmlReporter ldapserver > pylint.html
- python3 -m pylint --rcfile .pylintrc --output-format=text ldapserver
artifacts:
when: always
paths:
- pylint.html
reports:
codequality: codeclimate.json
linter:bullseye:
image: registry.git.cccv.de/uffd/docker-images/bullseye
stage: test
script:
- pip3 install $PYLINT_PIN pylint-gitlab
- python3 -m pylint --exit-zero --rcfile .pylintrc --output-format=pylint_gitlab.GitlabCodeClimateReporter ldapserver > codeclimate.json
- python3 -m pylint --exit-zero --rcfile .pylintrc --output-format=pylint_gitlab.GitlabPagesHtmlReporter ldapserver > pylint.html
- python3 -m pylint --rcfile .pylintrc --output-format=text ldapserver
artifacts:
when: always
paths:
- pylint.html
reports:
codequality: codeclimate.json
unittests:buster:
image: registry.git.cccv.de/uffd/docker-images/buster
stage: test
script:
- python3-coverage run --include 'ldapserver/*.py' -m pytest --junitxml=report.xml || true
- python3-coverage report -m
- python3-coverage html
- python3-coverage xml
artifacts:
when: always
paths:
- htmlcov/index.html
- htmlcov
expose_as: 'Coverage Report'
reports:
cobertura: coverage.xml
junit: report.xml
coverage: '/^TOTAL.*\s+(\d+\%)$/'
unittests:bullseye:
image: registry.git.cccv.de/uffd/docker-images/bullseye
stage: test
script:
- python3-coverage run --include 'ldapserver/*.py' -m pytest --junitxml=report.xml || true
#- python3-coverage report -m
- python3-coverage html
#- python3-coverage xml
artifacts:
when: always
paths:
- htmlcov/index.html
- htmlcov
expose_as: 'Coverage Report'
reports:
#cobertura: coverage.xml
junit: report.xml
#coverage: '/^TOTAL.*\s+(\d+\%)$/'
test:package:pip:buster:
image: registry.git.cccv.de/uffd/docker-images/buster
stage: test
script:
- pip3 install dist/*.tar.gz
dependencies:
- build:pip
test:package:pip:bullseye:
image: registry.git.cccv.de/uffd/docker-images/bullseye
stage: test
script:
- pip3 install dist/*.tar.gz
dependencies:
- build:pip
test:package:apt:buster:
image: registry.git.cccv.de/uffd/docker-images/buster
stage: test
script:
- apt -y install ./*.deb
dependencies:
- build:apt
test:package:apt:bullseye:
image: registry.git.cccv.de/uffd/docker-images/bullseye
stage: test
script:
- apt -y install ./*.deb
dependencies:
- build:apt
.publish:
stage: deploy
rules:
- if: '$CI_COMMIT_TAG =~ /v[0-9]+[.][0-9]+[.][0-9]+.*/'
publish:pip:
extends: .publish
script:
- TWINE_USERNAME="${GITLABPKGS_USERNAME}" TWINE_PASSWORD="${GITLABPKGS_PASSWORD}" python3 -m twine upload --repository-url ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi dist/*
- TWINE_USERNAME="${PYPI_USERNAME}" TWINE_PASSWORD="${PYPI_PASSWORD}" python3 -m twine upload dist/*
dependencies:
- build:pip
publish:apt:
extends: .publish
script:
- export DEBPATH="$(echo *.deb)"
- echo Upload deb file, add it to repo and clean up upload
- curl --user "${APTLY_API_USER}:${APTLY_API_PW}" -X POST -F file=@"$DEBPATH" "${APT_API_URL}/api/files/${APT_REPO}-ci-upload-${CI_JOB_ID}"
- curl --user "${APTLY_API_USER}:${APTLY_API_PW}" -X POST "${APT_API_URL}/api/repos/${APT_REPO}/file/${APT_REPO}-ci-upload-${CI_JOB_ID}"
- curl --user "${APTLY_API_USER}:${APTLY_API_PW}" -X DELETE "${APT_API_URL}/api/files/${APT_REPO}-ci-upload-${CI_JOB_ID}"
- echo Update published repo for all distros
- 'curl --user "${APTLY_API_USER}:${APTLY_API_PW}" -X PUT -H "Content-Type: application/json" --data "{ }" "${APT_API_URL}/api/publish/uffd/buster"'
- 'curl --user "${APTLY_API_USER}:${APTLY_API_PW}" -X PUT -H "Content-Type: application/json" --data "{ }" "${APT_API_URL}/api/publish/uffd/bullseye"'
dependencies:
- build:apt
pages:
stage: deploy
script:
- pip3 install Sphinx sphinx-rtd-theme sphinx-multiversion
- sphinx-multiversion docs public
- printf '/ /master 302\n/python-ldapserver /python-ldapserver/master 302\n' > public/_redirects
- du -sch public
artifacts:
paths:
- public
rules:
- if: '$CI_COMMIT_BRANCH =~ /v[0-9]+[.][0-9]+[.]x$/ || $CI_COMMIT_BRANCH == "master"'