# This file is part of Eigen, a lightweight C++ template library
# for linear algebra.
#
# Copyright (C) 2023, The Eigen Authors
#
# This Source Code Form is subject to the terms of the Mozilla
# Public License v. 2.0. If a copy of the MPL was not distributed
# with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
# SPDX-License-Identifier: MPL-2.0

default:
  interruptible: true

# For MR pipelines, auto-cancel running jobs when new commits are pushed.
# For scheduled (weekly) pipelines, never auto-cancel so all jobs run to
# completion and all failures are visible for debugging.
workflow:
  auto_cancel:
    on_new_commit: interruptible
    on_job_failure: none
  rules:
    # A scheduled pipeline off the default branch keeps `auto_cancel: none`,
    # but is scoped like any other non-default ref: only default-branch builds
    # write the shared pool.
    - if: $CI_PIPELINE_SOURCE == "schedule" && $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH
      auto_cancel:
        on_new_commit: none
      variables:
        EIGEN_CI_CCACHE_SCOPE: "-$CI_COMMIT_REF_SLUG"
    - if: $CI_PIPELINE_SOURCE == "schedule"
      auto_cancel:
        on_new_commit: none
    # Give each merge request its own ccache pool, keyed by IID so it survives
    # a force-push or a rebase: rebuild N of an MR then reuses rebuild N-1
    # instead of whatever unrelated pipeline wrote the shared pool last.
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
      variables:
        EIGEN_CI_CCACHE_SCOPE: "-mr$CI_MERGE_REQUEST_IID"
    # Same for a branch pipeline off the default branch, so only default-branch
    # builds write the shared pool.
    - if: $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH
      variables:
        EIGEN_CI_CCACHE_SCOPE: "-$CI_COMMIT_REF_SLUG"
    - when: always

stages:
  - checkformat
  - select
  - build
  - test
  - deploy

variables:
  # Pre-baked CI images hosted in the GitLab container registry.
  # Override in project/fork settings if you host the images elsewhere.
  # See ci/docker/ for the corresponding Dockerfiles.
  # Slim images used for MR smoke tests (gcc-10 + clang-14).
  # Builds are cross-compiled on arm64; tests run on their native runner.
  EIGEN_CI_IMAGE_LINUX_AMD64_SMOKETEST_BUILD: "registry.gitlab.com/libeigen/eigen/ubuntu-24.04-amd64-smoketest-build:latest"
  EIGEN_CI_IMAGE_LINUX_AMD64_SMOKETEST_RUN: "registry.gitlab.com/libeigen/eigen/ubuntu-24.04-amd64-smoketest-run:latest"
  EIGEN_CI_IMAGE_LINUX_ARM64_SMOKETEST_BUILD: "registry.gitlab.com/libeigen/eigen/ubuntu-24.04-arm64-smoketest-build:latest"
  EIGEN_CI_IMAGE_LINUX_ARM64_SMOKETEST_RUN: "registry.gitlab.com/libeigen/eigen/ubuntu-24.04-arm64-smoketest-run:latest"
  EIGEN_CI_IMAGE_LINUX_RISCV64_SMOKETEST_BUILD: "registry.gitlab.com/libeigen/eigen/ubuntu-26.04-riscv64-smoketest-build:latest"
  EIGEN_CI_IMAGE_LINUX_RISCV64_SMOKETEST_RUN: "registry.gitlab.com/libeigen/eigen/ubuntu-26.04-riscv64-smoketest-run:latest"
  # CMake build directory.
  EIGEN_CI_BUILDDIR: .build
  # Specify the CMake build target.
  EIGEN_CI_BUILD_TARGET: ""
  # If a test regex is specified, that will be selected.
  # Otherwise, we will try a label if specified.
  EIGEN_CI_CTEST_REGEX: ""
  # Valid CTest labels: Official, Unsupported, gpu, smoketest.
  EIGEN_CI_CTEST_LABEL: ""
  EIGEN_CI_CTEST_ARGS: ""
  # Affected-test tier: paths to the selection written by the select:tests job.
  # Unset for every other job, which keeps their existing behaviour.
  EIGEN_CI_BUILD_TARGET_FILE: ""
  EIGEN_CI_CTEST_REGEX_FILE: ""
  # ccache pool suffix, set per pipeline by the workflow rules above and empty
  # on the default branch.  A job variable outranks one from a workflow rule,
  # so a job opts out of scoping by setting this back to "" -- which is what
  # .smoketest:build does, and the only reason to set it in a job.
  EIGEN_CI_CCACHE_SCOPE: ""
  # Scope of a scheduled pipeline.  Empty runs the full matrix.  "gpu" runs the
  # GPU build and test jobs alone, so a second schedule can exercise the GPU
  # runners more often than the weekly full run without paying for the rest of
  # the matrix.  Set it as a variable on that schedule in the project's CI
  # settings; every non-GPU rule set that fires on "schedule" opens with
  # .rules:libeigen:gpu-schedule-guard.
  EIGEN_CI_SCHEDULE_SCOPE: ""

include:
  - "/ci/checkformat.gitlab-ci.yml"
  - "/ci/common.gitlab-ci.yml"
  - "/ci/images.gitlab-ci.yml"
  - "/ci/select.gitlab-ci.yml"
  - "/ci/build.linux.gitlab-ci.yml"
  - "/ci/build.windows.gitlab-ci.yml"
  - "/ci/test.linux.gitlab-ci.yml"
  - "/ci/test.windows.gitlab-ci.yml"
  - "/ci/deploy.gitlab-ci.yml"
