mirror of
https://gitlab.com/kupfer/kupferbootstrap.git
synced 2025-02-23 05:35:44 -05:00
136 lines
3.6 KiB
YAML
136 lines
3.6 KiB
YAML
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
|