From 20202a3048e03cdf0f5d073100f916bfbb152cad Mon Sep 17 00:00:00 2001
From: John McDonnell <jmcdonnell@gitlab.com>
Date: Thu, 25 Jul 2024 10:25:25 +0000
Subject: [PATCH] Only allow manual runs of sha256 pipelines

We are aware of a number of known failures in these pipelines at the
time of writing. In order to avoid noisy failures, let's only run these
jobs on-demand until such time that the known failures are addressed.
---
 .../package-and-test-nightly/main.gitlab-ci.yml  | 14 ++++++++++++++
 .gitlab/ci/package-and-test/main.gitlab-ci.yml   | 16 ++++++++++++++++
 qa/qa/git/repository.rb                          |  4 +++-
 qa/qa/resource/project.rb                        |  6 +++++-
 qa/qa/runtime/env.rb                             |  4 ++++
 5 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/.gitlab/ci/package-and-test-nightly/main.gitlab-ci.yml b/.gitlab/ci/package-and-test-nightly/main.gitlab-ci.yml
index 1d65a82602257..58366f3b434ca 100644
--- a/.gitlab/ci/package-and-test-nightly/main.gitlab-ci.yml
+++ b/.gitlab/ci/package-and-test-nightly/main.gitlab-ci.yml
@@ -199,6 +199,20 @@ gitlab-pages:
     - if: $QA_SUITES =~ /Test::Instance::GitlabPages/
     - !reference [.rules:test:manual, rules]
 
+# ========== git sha256 enabled ===========
+git-sha256-repositories:
+  when: manual
+  extends:
+    - .parallel
+    - .qa
+  variables:
+    QA_SCENARIO: Test::Instance::Image
+    QA_USE_SHA256_REPOSITORY_OBJECT_STORAGE: true
+    GITLAB_QA_OPTS: "--enable-feature support_sha256_repositories"
+  rules:
+    - !reference [.rules:test:qa-parallel, rules]
+    - if: $QA_SUITES =~ /Test::Instance::All/
+
 # ==========================================
 # Post test stage
 # ==========================================
diff --git a/.gitlab/ci/package-and-test/main.gitlab-ci.yml b/.gitlab/ci/package-and-test/main.gitlab-ci.yml
index 6754c0bf6e818..50ee368e2fa30 100644
--- a/.gitlab/ci/package-and-test/main.gitlab-ci.yml
+++ b/.gitlab/ci/package-and-test/main.gitlab-ci.yml
@@ -192,6 +192,22 @@ gitaly-transactions-selective-parallel:
       variables:
         QA_TESTS: ""
 
+# ========== git sha256 enabled ===========
+git-sha256-repositories:
+  when: manual
+  extends:
+    - .parallel
+    - .qa
+  parallel: 5
+  variables:
+    QA_SCENARIO: Test::Instance::Image
+    QA_USE_SHA256_REPOSITORY_OBJECT_STORAGE: true
+    GITLAB_QA_OPTS: "--enable-feature support_sha256_repositories"
+  rules:
+    - !reference [.rules:test:smoke-for-omnibus-mr, rules]
+    - !reference [.rules:test:feature-flags-set, rules]
+    - !reference [.rules:test:qa-parallel, rules]
+    - if: $QA_SUITES =~ /Test::Instance::All/
 # ------------------------------------------
 # Non parallel jobs
 # ------------------------------------------
diff --git a/qa/qa/git/repository.rb b/qa/qa/git/repository.rb
index 2d0940ef67db2..28dfe73d12ec5 100644
--- a/qa/qa/git/repository.rb
+++ b/qa/qa/git/repository.rb
@@ -147,7 +147,9 @@ def merge(branch)
       end
 
       def init_repository
-        run_git("git init --initial-branch=#{default_branch}")
+        cmd = "git init --initial-branch=#{default_branch}"
+        cmd += " --object-format=sha256" if Runtime::Env.use_sha256_repository_object_storage
+        run_git(cmd)
       end
 
       def pull(repository = nil, branch = nil)
diff --git a/qa/qa/resource/project.rb b/qa/qa/resource/project.rb
index 0763bfba32981..215c494c7ce2f 100644
--- a/qa/qa/resource/project.rb
+++ b/qa/qa/resource/project.rb
@@ -15,7 +15,8 @@ class Project < Base
         :github_repository_path,
         :gitlab_repository_path,
         :personal_namespace,
-        :import_wait_duration
+        :import_wait_duration,
+        :repository_object_format
 
       attr_reader :repository_storage
 
@@ -263,6 +264,9 @@ def api_post_body
         post_body[:repository_storage] = repository_storage if repository_storage
         post_body[:template_name] = @template_name if @template_name
 
+        # Use experimental SHA256 support https://gitlab.com/groups/gitlab-org/-/epics/794
+        post_body[:repository_object_format] = 'sha256' if Runtime::Env.use_sha256_repository_object_storage
+
         post_body
       end
 
diff --git a/qa/qa/runtime/env.rb b/qa/qa/runtime/env.rb
index a77a68b37d99b..77404dfb24b37 100644
--- a/qa/qa/runtime/env.rb
+++ b/qa/qa/runtime/env.rb
@@ -261,6 +261,10 @@ def use_selenoid?
         enabled?(ENV['USE_SELENOID'], default: false)
       end
 
+      def use_sha256_repository_object_storage
+        enabled?(ENV['QA_USE_SHA256_REPOSITORY_OBJECT_STORAGE'], default: false)
+      end
+
       def save_all_videos?
         enabled?(ENV['QA_SAVE_ALL_VIDEOS'], default: false)
       end
-- 
GitLab