.gitlab-ci.yml 15.34 KiB
default:
tags:
- docker
stages:
- build-base-image
- test
- pack
- docker
- stress-test
workflow:
# See https://docs.gitlab.com/ee/ci/jobs/job_control.html#avoid-duplicate-pipelines
rules:
# To avoid duplicate pipelines we disable merge request events,
# leaving only pushes and manual triggering.
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: never
- if: $CI_PIPELINE_SOURCE == "push"
- if: $CI_PIPELINE_SOURCE == "web"
variables:
REGISTRY: docker-public.binary.picodata.io
BASE_IMAGE: ${REGISTRY}/picodata-build-base
BASE_IMAGE_LATEST: latest
MAIN_BRANCH: &main-branch master
CARGO_HOME: $CI_PROJECT_DIR/.cargo
KANIKO_REGISTRY_MIRROR: docker-proxy.binary.picodata.io
FF_USE_FASTZIP: "true"
CACHE_COMPRESSION_LEVEL: "fastest"
GET_SOURCES_ATTEMPTS: 3
PARENT_BRANCH: $CI_COMMIT_BRANCH
PARENT_CI_COMMIT_SHA: $CI_COMMIT_SHA
PARENT_PROJECT_PATH: ${CI_PROJECT_PATH}.git
# k8s runner config
KUBERNETES_CPU_REQUEST: 6
KUBERNETES_MEMORY_REQUEST: "6Gi"
# job:rules explained:
#
# - if build-base changes on master branch (compared to HEAD~1)
# * build-base-image (with tag latest) and push
# * test (on base-image:latest)
# - if build-base changes on development branch (compared to master)
# * build-base-image (with tag sha)
# * test (on base-image:sha)
# - else (if build-base doesn't change)
# * skip build-base-image
# * just test (on base-image:latest)
#
# Anchor syntax explained here:
# https://docs.gitlab.com/ee/ci/yaml/yaml_optimization.html
#
.rules:
- &if-build-base-changes-on-master-branch
if: $CI_COMMIT_BRANCH == $MAIN_BRANCH
changes:
# implies compare_to HEAD~1
paths: &build-base-changes-paths
- docker-build-base/**
- .gitlab-ci.yml
- &if-build-base-changes-on-dev-branch
if: $CI_COMMIT_BRANCH != $MAIN_BRANCH
changes:
compare_to: *main-branch
paths: *build-base-changes-paths
- &else {}