Просмотр исходного кода

Merge topic 'ci-single-rules-block'

537828483d gitlab-ci: configure development documentation and continuous pipelines
fff061d1e7 gitlab-ci: name pipelines
d505cf03d9 gitlab-ci: use a single rules block for "dependent" jobs
b1ec96bfa7 gitlab-ci: use a single rules block for "automatic" jobs
51fc225941 gitlab-ci: use a single rules block for "manual" jobs
2b944b7b26 gitlab-ci: port scheduled pipeline logic to the single rules block
e02d632072 gitlab-ci: port merge request pipeline logic to the single rules block
d42be92245 gitlab-ci: port continuous pipeline logic to the single rules block
...

Acked-by: Kitware Robot <[email protected]>
Merge-request: !11604
Brad King 1 месяц назад
Родитель
Сommit
56597a2fea
5 измененных файлов с 377 добавлено и 216 удалено
  1. 164 106
      .gitlab-ci.yml
  2. 5 3
      .gitlab/os-linux.yml
  3. 7 7
      .gitlab/os-macos.yml
  4. 14 14
      .gitlab/os-windows.yml
  5. 187 86
      .gitlab/rules.yml

Разница между файлами не показана из-за своего большого размера
+ 164 - 106
.gitlab-ci.yml


+ 5 - 3
.gitlab/os-linux.yml

@@ -903,21 +903,23 @@
         - .intelclassic_makefiles
         - .cmake_test_linux_release
         - .linux_x86_64_tags
-        - .run_manually
+        - .rules
         - .needs_centos7_x86_64
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
-        CMAKE_CI_NO_MR: "true"
+        CMAKE_CI_JOB_NO_MR: "true"
+        CMAKE_CI_JOB_RUN_MANUALLY: "true"
 
 .cmake_test_linux_inteloneapi_makefiles:
     extends:
         - .inteloneapi_makefiles
         - .cmake_test_linux_release
         - .linux_x86_64_tags
-        - .run_manually
+        - .rules
         - .needs_centos7_x86_64
     variables:
         CMAKE_CI_JOB_NIGHTLY: "true"
+        CMAKE_CI_JOB_RUN_MANUALLY: "true"
 
 .cmake_build_sunos_release:
     stage: build

+ 7 - 7
.gitlab/os-macos.yml

@@ -90,7 +90,7 @@
     variables:
         CMAKE_CONFIGURATION: macos_x86_64_xcode
         CMAKE_GENERATOR: Xcode
-        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS: "true"
 
 .macos_arm64_xcode:
     extends: .macos
@@ -98,7 +98,7 @@
     variables:
         CMAKE_CONFIGURATION: macos_arm64_xcode
         CMAKE_GENERATOR: Xcode
-        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS: "true"
 
 .macos_arm64_xcode_symlinked:
     extends: .macos
@@ -106,7 +106,7 @@
     variables:
         CMAKE_CONFIGURATION: macos_arm64_xcode_symlinked
         CMAKE_GENERATOR: Xcode
-        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS: "true"
         CMAKE_CI_IN_SYMLINK_TREE: 1
         CMAKE_CI_BUILD_DIR: "real_work/work/build"
 
@@ -116,7 +116,7 @@
     variables:
         CMAKE_CONFIGURATION: macos_arm64_xcode_ub
         CMAKE_GENERATOR: Xcode
-        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS: "true"
 
 .macos_arm64_ninja_multi:
     extends: .macos
@@ -124,14 +124,14 @@
     variables:
         CMAKE_CONFIGURATION: macos_arm64_ninja_multi
         CMAKE_GENERATOR: "Ninja Multi-Config"
-        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS: "true"
 
 .macos_x86_64_ninja_ub:
     extends: .macos
 
     variables:
         CMAKE_CONFIGURATION: macos_x86_64_ninja_ub
-        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS: "true"
 
 .macos_arm64_fastbuild:
     extends: .macos
@@ -139,7 +139,7 @@
     variables:
         CMAKE_CONFIGURATION: macos_arm64_fastbuild
         CMAKE_GENERATOR: FASTBuild
-        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS: "true"
 
 ## Tags
 

+ 14 - 14
.gitlab/os-windows.yml

@@ -130,7 +130,7 @@
         CMAKE_GENERATOR: "Visual Studio 18 2026"
         CMAKE_GENERATOR_PLATFORM: "x64"
         CMAKE_GENERATOR_TOOLSET: "v145,version=14.50.35717"
-        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS: "true"
 
 .windows_vs2022_x64:
     extends: .windows
@@ -140,7 +140,7 @@
         CMAKE_GENERATOR: "Visual Studio 17 2022"
         CMAKE_GENERATOR_PLATFORM: "x64"
         CMAKE_GENERATOR_TOOLSET: "v143,version=14.44.35207"
-        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS: "true"
 
 .windows_vs2019_x64:
     extends: .windows
@@ -150,7 +150,7 @@
         CMAKE_GENERATOR: "Visual Studio 16 2019"
         CMAKE_GENERATOR_PLATFORM: "x64"
         CMAKE_GENERATOR_TOOLSET: "v142,version=14.29.30133"
-        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS: "true"
 
 .windows_borland:
     extends: .windows
@@ -158,7 +158,7 @@
     variables:
         CMAKE_GENERATOR: "Borland Makefiles"
         CMAKE_CI_BUILD_TYPE: Release
-        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS: "true"
 
 .windows_borland5.5:
     extends: .windows_borland
@@ -178,14 +178,14 @@
     variables:
         CMAKE_GENERATOR: "Ninja"
         CMAKE_CI_BUILD_TYPE: Release
-        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS: "true"
 
 .windows_ninja_multi:
     extends: .windows
 
     variables:
         CMAKE_GENERATOR: "Ninja Multi-Config"
-        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS: "true"
 
 .windows_nmake:
     extends: .windows
@@ -193,7 +193,7 @@
     variables:
         CMAKE_GENERATOR: "NMake Makefiles"
         CMAKE_CI_BUILD_TYPE: Release
-        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS: "true"
 
 .windows_jom:
     extends: .windows
@@ -201,7 +201,7 @@
     variables:
         CMAKE_GENERATOR: "NMake Makefiles JOM"
         CMAKE_CI_BUILD_TYPE: Release
-        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS: "true"
 
 .windows_fastbuild:
     extends: .windows
@@ -209,7 +209,7 @@
     variables:
         CMAKE_GENERATOR: "FASTBuild"
         CMAKE_CI_BUILD_TYPE: Release
-        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS: "true"
 
 .windows_vs2026_x64_nmake:
     extends:
@@ -289,7 +289,7 @@
         GIT_CLONE_PATH: "$CI_BUILDS_DIR\\cmake-ci-ext\\$CI_CONCURRENT_ID"
         CMAKE_GENERATOR: "Watcom WMake"
         CMAKE_CI_BUILD_TYPE: Release
-        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS: "true"
 
 .windows_openwatcom1.9:
     extends: .windows_openwatcom
@@ -303,7 +303,7 @@
     variables:
         CMAKE_GENERATOR: "Ninja"
         CMAKE_CI_BUILD_TYPE: Release
-        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS: "true"
 
 .windows_orangec6.73.1:
     extends: .windows_orangec
@@ -319,7 +319,7 @@
         CMAKE_GENERATOR: "Visual Studio 18 2026"
         CMAKE_GENERATOR_PLATFORM: "ARM64"
         CMAKE_GENERATOR_TOOLSET: "v145,version=14.50.35717"
-        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS: "true"
 
 .windows_arm64_vs2022:
     extends: .windows
@@ -329,7 +329,7 @@
         CMAKE_GENERATOR: "Visual Studio 17 2022"
         CMAKE_GENERATOR_PLATFORM: "ARM64"
         CMAKE_GENERATOR_TOOLSET: "v143,version=14.44.35207"
-        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS: "true"
 
 .mingw_osdn_io:
     extends: .windows
@@ -338,7 +338,7 @@
         # Place MinGW environment in a path without spaces.
         GIT_CLONE_PATH: "$CI_BUILDS_DIR\\cmake-ci-ext\\$CI_CONCURRENT_ID"
         CMAKE_CI_BUILD_TYPE: Debug
-        CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true"
+        CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS: "true"
 
 .mingw_osdn_io_mingw_makefiles:
     extends: .mingw_osdn_io

+ 187 - 86
.gitlab/rules.yml

@@ -1,117 +1,218 @@
 # Rules for where jobs can run
 
-.run_manually:
-    rules:
-        - if: '$CMAKE_CI_PACKAGE != null || $CMAKE_CI_VERSION_UPDATE != null'
-          when: never
-        - if: '($CMAKE_CI_NIGHTLY == "true" && $CMAKE_CI_JOB_NIGHTLY == "false")'
-          when: never
-        - if: '$CMAKE_CI_NIGHTLY == "true"'
-          when: on_success
-        - if: '$CMAKE_CI_JOB_NIGHTLY == "true"'
-          when: never
-        - if: '$CMAKE_CI_PROJECT_CONTINUOUS_BRANCH != null && $CI_COMMIT_BRANCH != null && $CMAKE_CI_PROJECT_CONTINUOUS_BRANCH == $CI_COMMIT_BRANCH && $CMAKE_CI_JOB_CONTINUOUS == "true"'
-          when: delayed
-          start_in: 5 minutes
-        - if: '($CMAKE_CI_NO_MR == "true" && $CI_MERGE_REQUEST_ID)'
-          when: never
-        - if: '$CI_MERGE_REQUEST_ID'
-          when: manual
-        - if: '$CI_PROJECT_PATH == "cmake/cmake" && $CI_PIPELINE_SOURCE == "schedule"'
-          when: on_success
-        - if: '$CI_PROJECT_PATH == "cmake/cmake"'
-          when: manual
-        - when: never
+###
+## Job variables:
+##   CMAKE_CI_JOB_UPDATES_VERSION
+##     Set to "true" if the job performs a task that occurs with version
+##     updates.
+##   CMAKE_CI_JOB_UPDATES_WEBSITE_HELP
+##     Set to "true" if the job performs tasks to update website help.
+##   CMAKE_CI_JOB_NO_MR
+##     Set to "true" if the job should never run for merge requests.
+##     These jobs require secrets that MR pipelines cannot provide
+##     (software license information, upload secrets, etc.).
+##   CMAKE_CI_JOB_PACKAGE_ONLY
+##     Set to "true" if the job handles packaging tasks. These jobs will only
+##     run during packaging pipelines.
+##   CMAKE_CI_JOB_NIGHTLY
+##     Set to "true" if the job should only run for nightly pipelines. Set to
+##     "false" to suppress the job for nightly pipelines.
+##   CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS
+##     Set to "true" if the job should run even if dependent jobs fail (e.g.,
+##     further testing of the same setup under a different generator. Should
+##     only be used on jobs with `needs` on other jobs.
+##   CMAKE_CI_JOB_RUN_MANUALLY
+##     Set to "true" if the job should be manually triggered in MRs.
+##     These jobs will also be delayed for branch update pipelines.
+## Pipeline variables:
+##   CMAKE_CI_VERSION_UPDATE
+##     Set to "true" if the pipeline should perform version update tasks.
+##     No other tasks are performed if set.
+##   CMAKE_CI_PACKAGE
+##     Set to either "dev" or `vX.Y` to construct a packaging pipeline. Also
+##     uploads constructed packages. May also run website help jobs. No other
+##     tasks are performed if set.
+##   CMAKE_CI_NIGHTLY
+##     Set to "true" to enable nightly-only jobs.
+## Project variables:
+##   CMAKE_CI_PROJECT_MAIN_BRANCH
+##     Set to the name of the main integration branch where development
+##     version documentation pipelines run.
+##   CMAKE_CI_PROJECT_CONTINUOUS_BRANCH
+##     Set to the name of the staging branch where continuous pipelines run.
+####
 
-.run_automatically:
-    rules:
-        - if: '$CMAKE_CI_PACKAGE != null || $CMAKE_CI_VERSION_UPDATE != null'
-          when: never
-        - if: '($CMAKE_CI_NIGHTLY == "true" && $CMAKE_CI_JOB_NIGHTLY == "false")'
-          when: never
-        - if: '$CMAKE_CI_NIGHTLY == "true"'
-          when: on_success
-        - if: '$CMAKE_CI_JOB_NIGHTLY == "true"'
-          when: never
-        - if: '$CMAKE_CI_PROJECT_CONTINUOUS_BRANCH != null && $CI_COMMIT_BRANCH != null && $CMAKE_CI_PROJECT_CONTINUOUS_BRANCH == $CI_COMMIT_BRANCH && $CMAKE_CI_JOB_CONTINUOUS == "true"'
-          when: on_success
-        - if: '($CMAKE_CI_NO_MR == "true" && $CI_MERGE_REQUEST_ID)'
-          when: never
-        - if: '$CI_MERGE_REQUEST_ID'
-          when: on_success
-        - if: '$CI_PROJECT_PATH == "cmake/cmake" && $CI_PIPELINE_SOURCE == "schedule"'
-          when: on_success
-        - if: '$CI_PROJECT_PATH == "cmake/cmake"'
-          when: delayed
-          start_in: 5 minutes
-        - when: never
+variables:
+    CMAKE_CI_PIPELINE_NAME: 'Branch "$CI_COMMIT_REF_NAME"'
 
-.run_dependent:
+# When to even consider running a pipeline.
+workflow:
+    name: "$CMAKE_CI_PIPELINE_NAME"
     rules:
-        - if: '$CMAKE_CI_PACKAGE != null || $CMAKE_CI_VERSION_UPDATE != null'
-          when: never
-        - if: '($CMAKE_CI_NIGHTLY == "true" && $CMAKE_CI_JOB_NIGHTLY == "false")'
-          when: never
-        - if: '($CMAKE_CI_NIGHTLY == "true" && $CMAKE_CI_NIGHTLY_IGNORE_DEPS == "true")'
+        # Run for merge requests.
+        - if: '$CI_MERGE_REQUEST_ID'
           when: always
-        - if: '$CMAKE_CI_NIGHTLY == "true"'
-          when: on_success
-        - if: '$CMAKE_CI_JOB_NIGHTLY == "true"'
-          when: never
-        - if: '$CMAKE_CI_PROJECT_CONTINUOUS_BRANCH != null && $CI_COMMIT_BRANCH != null && $CMAKE_CI_PROJECT_CONTINUOUS_BRANCH == $CI_COMMIT_BRANCH && $CMAKE_CI_JOB_CONTINUOUS == "true"'
-          when: on_success
-        - if: '($CMAKE_CI_NO_MR == "true" && $CI_MERGE_REQUEST_ID)'
+          auto_cancel:
+              # Cancel all pipeline jobs if a new commit comes in on the branch/tag.
+              on_new_commit: interruptible
+          variables:
+              CMAKE_CI_PIPELINE_NAME: 'Merge request !$CI_MERGE_REQUEST_IID'
+        # If this is not a MR, do not run for other projects.
+        - if: '$CI_PROJECT_PATH != "cmake/cmake" && $CMAKE_CI_PROJECT_CONTINUOUS_BRANCH == null && $CMAKE_CI_PROJECT_MAIN_BRANCH == null'
           when: never
-        - if: '$CI_MERGE_REQUEST_ID'
-          when: on_success
-        - if: '$CI_PROJECT_PATH == "cmake/cmake"'
-          when: on_success
-        - when: never
-
-.run_only_for_package:
-    rules:
-        - if: '$CMAKE_CI_PACKAGE == "dev" && $CI_JOB_STAGE != "upload"'
-          when: on_success
-        - if: '$CMAKE_CI_PACKAGE == "dev" && $CI_JOB_STAGE == "upload"'
+        # Run for schedules.
+        - if: '$CI_PIPELINE_SOURCE == "schedule"'
+          when: always
+          auto_cancel:
+              # Never cancel scheduled pipelines because of new commits.
+              on_new_commit: none
           variables:
-              RSYNC_DESTINATION: "[email protected]:dev/"
-          when: on_success
-        - if: '$CMAKE_CI_PACKAGE != null && $CI_JOB_STAGE == "prep"'
-          when: manual
-        - if: '$CMAKE_CI_PACKAGE != null && $CI_JOB_STAGE != "upload"'
-          when: on_success
-        - if: '$CMAKE_CI_PACKAGE != null && $CI_JOB_STAGE == "upload" && $CMAKE_CI_PACKAGE_URL != null'
+              CMAKE_CI_PIPELINE_NAME: 'Schedule "$CI_PIPELINE_SCHEDULE_DESCRIPTION"'
+        # Run for development documentation.
+        - if: '$CMAKE_CI_PROJECT_MAIN_BRANCH != null && $CI_COMMIT_BRANCH != null && $CMAKE_CI_PROJECT_MAIN_BRANCH == $CI_COMMIT_BRANCH'
+          when: always
           variables:
-              RSYNC_DESTINATION: "$CMAKE_CI_PACKAGE_URL"
-          when: on_success
+              CMAKE_CI_PIPELINE_NAME: 'Development documentation on branch "$CI_COMMIT_REF_NAME"'
+        # Run for continuous testing of staging branch.
+        - if: '$CMAKE_CI_PROJECT_CONTINUOUS_BRANCH != null && $CI_COMMIT_BRANCH != null && $CMAKE_CI_PROJECT_CONTINUOUS_BRANCH == $CI_COMMIT_BRANCH'
+          when: always
+          variables:
+              CMAKE_CI_PIPELINE_NAME: 'Continuous branch "$CI_COMMIT_REF_NAME"'
+        # Run for protected branches.
+        - if: '$CI_COMMIT_REF_PROTECTED == "true"'
+          when: always
+          auto_cancel:
+              # Cancel all pipeline jobs if a new commit comes in on the branch.
+              on_new_commit: interruptible
+          variables:
+              CMAKE_CI_PIPELINE_NAME: 'Protected branch "$CI_COMMIT_REF_NAME"'
+        # Run for tags.
+        - if: '$CI_COMMIT_TAG'
+          when: always
+          variables:
+              CMAKE_CI_PIPELINE_NAME: 'Tag "$CI_COMMIT_TAG"'
+        # Skip pipelines in all other cases.
         - when: never
 
-.run_cmake_org_help:
+.rules:
     rules:
+        ### Version update pipelines.
+        # Version update pipelines run version update jobs automatically.
+        - if: '$CMAKE_CI_VERSION_UPDATE == "true" && $CMAKE_CI_JOB_UPDATES_VERSION == "true"'
+          when: on_success
+        # Version update pipelines run no other jobs.
         - if: '$CMAKE_CI_VERSION_UPDATE != null'
           when: never
-        - if: '$CMAKE_CI_PACKAGE =~ /v[0-9]+\.[0-9]+/'
+        # Version update jobs do not run in any other situations.
+        - if: '$CMAKE_CI_JOB_UPDATES_VERSION == "true"'
+          when: never
+
+        ### Website help update jobs run in a variety of pipeline kinds.
+        # Packaging pipelines upload release version documentation to the website upon request.
+        - if: '$CMAKE_CI_PACKAGE =~ /v[0-9]+\.[0-9]+/ && $CMAKE_CI_JOB_UPDATES_WEBSITE_HELP == "true"'
           variables:
               RSYNC_DESTINATION: "[email protected]:$CMAKE_CI_PACKAGE/"
               CMAKE_CI_SPHINX_QTHELP: "ON"
               CMAKE_CI_VERSION_NO_GIT: "ON"
           when: manual
-        - if: '$CMAKE_CI_PROJECT_MAIN_BRANCH != null && $CI_COMMIT_BRANCH != null && $CMAKE_CI_PROJECT_MAIN_BRANCH == $CI_COMMIT_BRANCH'
+        # Development documentation pipelines upload documentation to the website automatically.
+        - if: '$CMAKE_CI_PROJECT_MAIN_BRANCH != null && $CI_COMMIT_BRANCH != null && $CMAKE_CI_PROJECT_MAIN_BRANCH == $CI_COMMIT_BRANCH && $CMAKE_CI_JOB_UPDATES_WEBSITE_HELP == "true"'
           variables:
               RSYNC_DESTINATION: "[email protected]:git-master/"
               CMAKE_CI_SPHINX_QTHELP: "OFF"
               CMAKE_CI_VERSION_NO_GIT: "OFF"
           when: on_success
-        - if: '$CMAKE_CI_PROJECT_CONTINUOUS_BRANCH != null && $CI_COMMIT_BRANCH != null && $CMAKE_CI_PROJECT_CONTINUOUS_BRANCH == $CI_COMMIT_BRANCH'
+        # Continuous pipelines upload staging branch documentation to the website automatically.
+        - if: '$CMAKE_CI_PROJECT_CONTINUOUS_BRANCH != null && $CI_COMMIT_BRANCH != null && $CMAKE_CI_PROJECT_CONTINUOUS_BRANCH == $CI_COMMIT_BRANCH && $CMAKE_CI_JOB_UPDATES_WEBSITE_HELP == "true"'
           variables:
               RSYNC_DESTINATION: "[email protected]:git-stage/"
               CMAKE_CI_SPHINX_QTHELP: "OFF"
               CMAKE_CI_VERSION_NO_GIT: "OFF"
           when: on_success
-        - when: never
+        # Website help update jobs do not run in any other situations.
+        - if: '$CMAKE_CI_JOB_UPDATES_WEBSITE_HELP == "true"'
+          when: never
 
-.run_version_update:
-    rules:
-        - if: '$CMAKE_CI_VERSION_UPDATE != null'
+        ### Packaging pipelines.
+        # Packaging pipelines build development version packages automatically.
+        - if: '$CMAKE_CI_PACKAGE == "dev" && $CMAKE_CI_JOB_PACKAGE_ONLY == "true" && $CI_JOB_STAGE != "upload"'
           when: on_success
-        - when: never
+        # Packaging pipelines upload development version packages to the website automatically.
+        - if: '$CMAKE_CI_PACKAGE == "dev" && $CMAKE_CI_JOB_PACKAGE_ONLY == "true" && $CI_JOB_STAGE == "upload"'
+          variables:
+              RSYNC_DESTINATION: "[email protected]:dev/"
+          when: on_success
+        # Packaging pipelines build release version packages upon request.
+        - if: '$CMAKE_CI_PACKAGE != null && $CMAKE_CI_JOB_PACKAGE_ONLY == "true" && $CI_JOB_STAGE == "prep"'
+          when: manual
+        - if: '$CMAKE_CI_PACKAGE != null && $CMAKE_CI_JOB_PACKAGE_ONLY == "true" && $CI_JOB_STAGE != "upload"'
+          when: on_success
+        # Packaging pipelines upload release version packages to a staging area.
+        - if: '$CMAKE_CI_PACKAGE != null && $CMAKE_CI_JOB_PACKAGE_ONLY == "true" && $CI_JOB_STAGE == "upload" && $CMAKE_CI_PACKAGE_URL != null'
+          variables:
+              RSYNC_DESTINATION: "$CMAKE_CI_PACKAGE_URL"
+          when: on_success
+        # Packaging pipelines run no other jobs.
+        - if: '$CMAKE_CI_PACKAGE != null'
+          when: never
+        # Package-only jobs do not run in any other situations.
+        - if: '$CMAKE_CI_JOB_PACKAGE_ONLY == "true"'
+          when: never
+
+        ### Development documentation pipelines.
+        # Development documentation pipelines run no other jobs.
+        - if: '$CMAKE_CI_PROJECT_MAIN_BRANCH != null && $CI_COMMIT_BRANCH != null && $CMAKE_CI_PROJECT_MAIN_BRANCH == $CI_COMMIT_BRANCH'
+          when: never
+
+        ### Continuous pipelines.
+        # Continuous pipelines run manual jobs automatically after 5 minutes.
+        - if: '$CMAKE_CI_PROJECT_CONTINUOUS_BRANCH != null && $CI_COMMIT_BRANCH != null && $CMAKE_CI_PROJECT_CONTINUOUS_BRANCH == $CI_COMMIT_BRANCH && $CMAKE_CI_JOB_CONTINUOUS == "true" && $CMAKE_CI_JOB_RUN_MANUALLY == "true"'
+          when: delayed
+          start_in: 5 minutes
+        # Continuous pipelines run other jobs automatically.
+        - if: '$CMAKE_CI_PROJECT_CONTINUOUS_BRANCH != null && $CI_COMMIT_BRANCH != null && $CMAKE_CI_PROJECT_CONTINUOUS_BRANCH == $CI_COMMIT_BRANCH && $CMAKE_CI_JOB_CONTINUOUS == "true"'
+          when: on_success
+        # Continuous pipelines run no other jobs.
+        - if: '$CMAKE_CI_PROJECT_CONTINUOUS_BRANCH != null && $CI_COMMIT_BRANCH != null && $CMAKE_CI_PROJECT_CONTINUOUS_BRANCH == $CI_COMMIT_BRANCH'
+          when: never
+
+        ### Nightly pipelines.
+        # Nightly pipelines do not run jobs that are explicitly excluded.
+        - if: '$CMAKE_CI_NIGHTLY == "true" && $CMAKE_CI_JOB_NIGHTLY == "false"'
+          when: never
+        # Nightly pipelines always run jobs that ignore their dependencies.
+        - if: '$CMAKE_CI_NIGHTLY == "true" && $CMAKE_CI_JOB_NIGHTLY_IGNORE_DEPS == "true"'
+          when: always
+        # Nightly pipelines run all other jobs automatically when ready.
+        - if: '$CMAKE_CI_NIGHTLY == "true"'
+          when: on_success
+        # Nightly-only jobs do not run in any other situations.
+        - if: '$CMAKE_CI_JOB_NIGHTLY == "true"'
+          when: never
+
+        ### Merge request pipelines.
+        # Merge request pipelines do not run jobs that are explicitly excluded.
+        - if: '$CI_MERGE_REQUEST_ID && $CMAKE_CI_JOB_NO_MR == "true"'
+          when: never
+        # Merge request pipelines run manual jobs upon request.
+        - if: '$CI_MERGE_REQUEST_ID && $CMAKE_CI_JOB_RUN_MANUALLY == "true"'
+          when: manual
+        # Merge request pipelines run other jobs automatically when ready.
+        - if: '$CI_MERGE_REQUEST_ID'
+          when: on_success
+
+        ### Scheduled pipelines.
+        # Scheduled pipelines run all jobs automatically when ready.
+        - if: '$CI_PIPELINE_SOURCE == "schedule"'
+          when: on_success
+
+        ### Other pipelines.
+        # Other pipelines run manual jobs upon request.
+        - if: '$CMAKE_CI_JOB_RUN_MANUALLY == "true"'
+          when: manual
+        # Other pipelines run jobs in the `build` stage automatically after 5 minutes.
+        - if: '$CI_JOB_STAGE == "build"'
+          when: delayed
+          start_in: 5 minutes
+        # Other pipelines run other jobs automatically when ready.
+        - when: on_success

Некоторые файлы не были показаны из-за большого количества измененных файлов