stages: - check - build - deploy format: stage: check image: python before_script: - pip install yapf autoflake --break-system-packages script: - ./format.sh --check typecheck: stage: check image: python before_script: - pip install mypy --break-system-packages script: - ./typecheck.sh --non-interactive --junit-xml mypy-report.xml artifacts: reports: junit: mypy-report.xml pytest: stage: check image: archlinux before_script: - pacman -Sy --noconfirm --needed archlinux-keyring && pacman -Su --noconfirm python python-pip sudo git base-devel arch-install-scripts rsync - pip install -r test_requirements.txt -r requirements.txt --break-system-packages - 'echo "kupfer ALL = (ALL) NOPASSWD: ALL" > /etc/sudoers.d/kupfer_all' - useradd -m kupfer - chmod 777 . script: - script -e -c 'su kupfer -s /bin/bash -c "INTEGRATION_TESTS_USE_GLOBAL_CONFIG=TRUE KUPFERBOOTSTRAP_WRAPPED=DOCKER ./pytest.sh --junit-xml=pytest-report.xml --cov-report=xml:coverage.xml integration_tests.py"' coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/' artifacts: reports: junit: pytest-report.xml coverage_report: coverage_format: cobertura path: coverage.xml build_docker: stage: build image: docker:latest services: - name: docker:dind command: ["--mtu=1100"] # very low, safe value -.- variables: DOCKER_TLS_CERTDIR: "" script: - 'docker build --pull -t "${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}" -t "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG}" .' only: - branches except: - main - dev push_docker: extends: build_docker before_script: - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin "$CI_REGISTRY" script: - !reference [build_docker, script] - if [[ "$CI_COMMIT_REF_NAME" == "main" ]]; then docker image tag "${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}" "${CI_REGISTRY_IMAGE}:latest"; fi - docker push -a "${CI_REGISTRY_IMAGE}" only: - main - dev except: .docs: image: "registry.gitlab.com/kupfer/kupferbootstrap:dev" variables: DOCS_SPHINXARGS: '-W' DOCS_MAKE_TARGET: "html" DOCS_MAKE_THREADS: 6 before_script: &docs_before_script - pip install -r requirements.txt -r docs/requirements.txt --break-system-packages script: &docs_script - make -C docs -j$DOCS_MAKE_THREADS SPHINXARGS="$DOCS_SPHINXARGS" $DOCS_MAKE_TARGET - mv "docs/$DOCS_MAKE_TARGET" public - if [[ -e docs/archived ]]; then cp -r docs/archived public/ ; fi - rm -vf docs/archived/{main,dev,"$CI_COMMIT_REF_NAME"}.tar.gz # we want to cache only old tags as they won't change after_script: artifacts: paths: - public cache: key: docs paths: - docs/archived/*.tar.gz build_docs: stage: build extends: .docs except: refs: - main - dev - docs variables: - '$CI_COMMIT_MESSAGE =~ /ci-kbs-docs-build-full/' - '$KBS_DOCS_FULL_BUILD == "1"' build_docs_all: stage: build extends: pages resource_group: $CI_COMMIT_SHA script: - (cd docs && make SPHINXARGS="$DOCS_SPHINXARGS -D 'version=$CI_COMMIT_REF_NAME'" && mkdir -p versions && cp -r html versions/$CI_COMMIT_REF_SLUG) - *docs_script only: refs: - branches variables: - '$CI_COMMIT_MESSAGE =~ /ci-kbs-docs-build-full/' - '$KBS_DOCS_FULL_BUILD == "1"' - '$CI_COMMIT_REF_NAME == "docs"' except: - main - dev pages: stage: deploy extends: .docs only: - main - dev variables: DOCS_MAKE_TARGET: versions resource_group: docs before_script: - git remote update - *docs_before_script