workflow: name: '$PIPELINE_TYPE' rules: # Avoid duplicate pipeline when an MR is open - if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS && $CI_PIPELINE_SOURCE == "push"' when: never # Skip pipelines if configured to do so. For example, # $SKIP_PIPELINE_SOURCE is set to "push" in QA mirror - if: '$SKIP_PIPELINE_SOURCE == $CI_PIPELINE_SOURCE' when: never # No pipeline on auto-deploy branches as a tag will definitely follow - if: '$CI_COMMIT_BRANCH =~ /^[0-9]+-[0-9]+-auto-deploy-[0-9]+$/' when: never # Detect pipeline type - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $CANONICAL_PROJECT_PATH && $PAGES_UPDATE == "true" && $CI_PIPELINE_SOURCE == "schedule"' variables: PIPELINE_TYPE: LICENSE_PAGE_UPDATE_PIPELINE - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $CANONICAL_PROJECT_PATH && $DEPENDENCY_SCANNING == "true" && $CI_PIPELINE_SOURCE == "schedule"' variables: PIPELINE_TYPE: DEPENDENCY_SCANNING_PIPELINE - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $CANONICAL_PROJECT_PATH && $DEPS_PIPELINE == "true"' variables: PIPELINE_TYPE: DEPS_IO_VERSION_CHECK_PIPELINE - if: '$PIPELINE_TYPE == null && $CACHE_UPDATE == "true" && $CI_PIPELINE_SOURCE == "schedule"' variables: PIPELINE_TYPE: CACHE_UPDATE_PIPELINE - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $QA_PROJECT_PATH && ($CI_PIPELINE_SOURCE == "pipeline" || $CI_PIPELINE_SOURCE == "trigger") && $ee == "true" && $CACHE_UPDATE == "true" && $TOP_UPSTREAM_SOURCE_PROJECT == "gitlab-org/gitlab"' variables: PIPELINE_TYPE: TRIGGER_CACHE_UPDATE_PIPELINE CACHE_EDITION: "GITLAB" # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up. CACHE_POLICY: 'push' - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $QA_PROJECT_PATH && $CACHE_UPDATE == "true"' variables: PIPELINE_TYPE: TRIGGER_CACHE_UPDATE_PIPELINE - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $QA_PROJECT_PATH && $DURATION_PLOTTER == "true" && $CI_PIPELINE_SOURCE == "schedule"' variables: PIPELINE_TYPE: DURATION_PLOTTER_PIPELINE - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $CANONICAL_PROJECT_PATH && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^deps/' variables: PIPELINE_TYPE: DEPS_IO_VERSION_BUMP_PIPELINE - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $CANONICAL_PROJECT_PATH && ($CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^docs-/ || $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /-docs$/)' variables: PIPELINE_TYPE: DOCS_PIPELINE - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $CANONICAL_PROJECT_PATH && $CI_PIPELINE_SOURCE == "merge_request_event"' variables: PIPELINE_TYPE: GITLAB_MR_PIPELINE - if: '$PIPELINE_TYPE == null && $NIGHTLY && $CI_COMMIT_BRANCH && ($ee == "true" || $GITLAB_VERSION =~ /-ee$/)' variables: PIPELINE_TYPE: EE_NIGHTLY_BUILD_PIPELINE CACHE_EDITION: "EE" # Set CACHE_EDITION variable to STABLE on stable branch pipelines so that they don't pollute regular branch cache - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $DEV_PROJECT_PATH && $CI_COMMIT_BRANCH =~ /^.*-stable$/ && ($ee == "true" || $GITLAB_VERSION =~ /-ee$/)' variables: PIPELINE_TYPE: EE_BRANCH_BUILD_PIPELINE CACHE_EDITION: "STABLE" - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $DEV_PROJECT_PATH && $CI_COMMIT_BRANCH && ($ee == "true" || $GITLAB_VERSION =~ /-ee$/)' variables: PIPELINE_TYPE: EE_BRANCH_BUILD_PIPELINE CACHE_EDITION: "EE" - if: '$PIPELINE_TYPE == null && $NIGHTLY && $CI_COMMIT_BRANCH' variables: PIPELINE_TYPE: CE_NIGHTLY_BUILD_PIPELINE CACHE_EDITION: "CE" # Set CACHE_EDITION variable to STABLE on stable branch pipelines so that they don't pollute regular branch cache - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $DEV_PROJECT_PATH && $CI_COMMIT_BRANCH =~ /^.*-stable$/' variables: PIPELINE_TYPE: CE_BRANCH_BUILD_PIPELINE CACHE_EDITION: "STABLE" - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $DEV_PROJECT_PATH && $CI_COMMIT_BRANCH' variables: PIPELINE_TYPE: CE_BRANCH_BUILD_PIPELINE CACHE_EDITION: "CE" - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $DEV_PROJECT_PATH && $CI_COMMIT_TAG =~ /^\d+\.\d+\.\d+\+[^ ]{7,}\.[^ ]{7,}$/' variables: PIPELINE_TYPE: AUTO_DEPLOY_BUILD_PIPELINE CACHE_EDITION: "AUTO_DEPLOY${AUTO_DEPLOY_CACHE_REVISION}" - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $DEV_PROJECT_PATH && $CI_COMMIT_TAG =~ /^.*\+rc.*\.ce\..*/' variables: PIPELINE_TYPE: CE_RC_BUILD_PIPELINE CACHE_EDITION: "CE" - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $DEV_PROJECT_PATH && $CI_COMMIT_TAG =~ /^.*\+rc.*\.ee\..*/' variables: PIPELINE_TYPE: EE_RC_BUILD_PIPELINE CACHE_EDITION: "EE" - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $DEV_PROJECT_PATH && $CI_COMMIT_TAG =~ /^.*ce\.\d.*$/' variables: PIPELINE_TYPE: CE_TAG_BUILD_PIPELINE CACHE_EDITION: "CE" GITLAB_EDITION: "Community Edition" - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $DEV_PROJECT_PATH && $CI_COMMIT_TAG =~ /^.*ee\.\d.*$/' variables: PIPELINE_TYPE: EE_TAG_BUILD_PIPELINE CACHE_EDITION: "EE" GITLAB_EDITION: "Enterprise Edition" - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $CANONICAL_PROJECT_PATH && $CI_COMMIT_REF_PROTECTED == "true"' variables: PIPELINE_TYPE: PROTECTED_TEST_PIPELINE - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $SECURITY_PROJECT_PATH && $CI_PIPELINE_SOURCE == "merge_request_event"' variables: PIPELINE_TYPE: GITLAB_MR_PIPELINE - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $SECURITY_PROJECT_PATH && $CI_COMMIT_REF_PROTECTED == "true"' variables: PIPELINE_TYPE: PROTECTED_TEST_PIPELINE - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $CANONICAL_PROJECT_PATH && $CI_COMMIT_BRANCH' variables: PIPELINE_TYPE: GITLAB_BRANCH_TEST_PIPELINE - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $SECURITY_PROJECT_PATH && $CI_COMMIT_BRANCH' variables: PIPELINE_TYPE: GITLAB_BRANCH_TEST_PIPELINE # Set CACHE_EDITION variable to GITLAB for pipelines triggered from gitlab-org/gitlab project so that they don't pollute regular branch cache - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $QA_PROJECT_PATH && ($CI_PIPELINE_SOURCE == "pipeline" || $CI_PIPELINE_SOURCE == "trigger") && $ee == "true" && $TOP_UPSTREAM_SOURCE_PROJECT == "gitlab-org/gitlab"' variables: PIPELINE_TYPE: TRIGGERED_EE_PIPELINE CACHE_EDITION: "GITLAB" - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $QA_PROJECT_PATH && ($CI_PIPELINE_SOURCE == "pipeline" || $CI_PIPELINE_SOURCE == "trigger") && $ee == "true"' variables: PIPELINE_TYPE: TRIGGERED_EE_PIPELINE CACHE_EDITION: "EE" - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH == $QA_PROJECT_PATH && ($CI_PIPELINE_SOURCE == "pipeline" || $CI_PIPELINE_SOURCE == "trigger")' variables: PIPELINE_TYPE: TRIGGERED_CE_PIPELINE CACHE_EDITION: "CE" - if: '$PIPELINE_TYPE == null && $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_PROJECT_PATH != $CANONICAL_PROJECT_PATH && $CI_PROJECT_PATH != $SECURITY_PROJECT_PATH && $CI_PROJECT_PATH != $QA_PROJECT_PATH && $CI_PROJECT_PATH != $DEV_PROJECT_PATH' variables: PIPELINE_TYPE: FORK_MR_PIPELINE - if: '$PIPELINE_TYPE == null && $CI_PROJECT_PATH != $CANONICAL_PROJECT_PATH && $CI_PROJECT_PATH != $SECURITY_PROJECT_PATH && $CI_PROJECT_PATH != $QA_PROJECT_PATH && $CI_PROJECT_PATH != $DEV_PROJECT_PATH' variables: PIPELINE_TYPE: FORK_BRANCH_TEST_PIPELINE # If a pipeline type is specified, use it and create a pipeline - if: '$PIPELINE_TYPE' # If pipeline type is neither specified nor could be detected, do not create a pipeline - if: '$PIPELINE_TYPE == null' when: never # Support Merge Request pipelines - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' # Run regular pipelines on pushes to branches that does not have an MR open - if: '$CI_COMMIT_BRANCH' # For tags, always create a pipeline. - if: '$CI_COMMIT_TAG'