From 49edae93a40429f6ca0311a812463488542b6952 Mon Sep 17 00:00:00 2001
From: Stan Hu <stanhu@gmail.com>
Date: Wed, 17 Jul 2024 08:56:30 -0700
Subject: [PATCH] Update gems for Faraday 2 compatibility

This commit updates a number of gems:

- gitlab-fog-azure-rm: This gem vendored a number of deprecated
Microsoft Azure client libraries and was the main blocker
to updating to Faraday 2.
(https://gitlab.com/gitlab-org/ruby/gems/gitlab-fog-azure-rm/-/merge_requests/48)

- graphlient: Full changelog:
  https://github.com/ashkan18/graphlient/blob/master/CHANGELOG.md

- Elasticsearch-related gems: These were pinned to 7.x presumably
since they still had Faraday 1 support, but we need to update to 8.x
for Faraday 2 support.

As mentoined in https://github.com/lostisland/faraday_middleware,
faraday_middleware is no longer needed supported for Faraday 2.
The JSON middleware is already bundled with Faraday 2.

Relates to https://gitlab.com/gitlab-org/gitlab/-/issues/408884

Changelog: changed
---
 Gemfile                                    | 21 +++--
 Gemfile.checksum                           | 35 ++++----
 Gemfile.lock                               | 96 ++++++++++------------
 lib/container_registry/base_client.rb      |  5 +-
 lib/container_registry/client.rb           |  4 +-
 spec/lib/container_registry/client_spec.rb |  2 +-
 tooling/merge_request.rb                   |  1 -
 7 files changed, 76 insertions(+), 88 deletions(-)

diff --git a/Gemfile b/Gemfile
index 715c940337bea..b2309f74d5656 100644
--- a/Gemfile
+++ b/Gemfile
@@ -59,7 +59,8 @@ gem 'neighbor', '~> 0.3.2', feature_category: :duo_chat
 
 gem 'rugged', '~> 1.6' # rubocop:todo Gemfile/MissingFeatureCategory
 
-gem 'faraday', '~> 1.10.3' # rubocop:todo Gemfile/MissingFeatureCategory
+gem 'faraday', '~> 2', feature_category: :shared
+gem 'faraday-retry', '~> 2', feature_category: :shared
 gem 'marginalia', '~> 1.11.1' # rubocop:todo Gemfile/MissingFeatureCategory
 
 # Authorization
@@ -146,7 +147,7 @@ gem 'graphql', '~> 2.3.5', feature_category: :api
 gem 'graphql-docs', '~> 5.0.0', group: [:development, :test], feature_category: :api
 gem 'graphiql-rails', '~> 1.10', feature_category: :api
 gem 'apollo_upload_server', '~> 2.1.6', feature_category: :api
-gem 'graphlient', '~> 0.6.0', feature_category: :importers # Used by BulkImport feature (group::import)
+gem 'graphlient', '~> 0.8.0', feature_category: :importers # Used by BulkImport feature (group::import)
 
 # Generate Fake data
 gem 'ffaker', '~> 2.23' # rubocop:todo Gemfile/MissingFeatureCategory
@@ -177,7 +178,7 @@ gem 'fog-local', '~> 0.8' # rubocop:todo Gemfile/MissingFeatureCategory
 # We may want to update this dependency if this is ever addressed upstream, e.g. via
 # https://github.com/aliyun/aliyun-oss-ruby-sdk/pull/93
 gem 'fog-aliyun', '~> 0.4' # rubocop:todo Gemfile/MissingFeatureCategory
-gem 'gitlab-fog-azure-rm', '~> 1.9.1', require: 'fog/azurerm' # rubocop:todo Gemfile/MissingFeatureCategory
+gem 'gitlab-fog-azure-rm', '~> 2.0.1', require: 'fog/azurerm', feature_category: :shared
 
 # for Google storage
 
@@ -205,14 +206,16 @@ gem 'google-cloud-compute-v1', '~> 2.6.0', feature_category: :shared
 gem 'seed-fu', '~> 2.3.7' # rubocop:todo Gemfile/MissingFeatureCategory
 
 # Search
-gem 'elasticsearch-model', '~> 7.2' # rubocop:todo Gemfile/MissingFeatureCategory
-gem 'elasticsearch-rails', '~> 7.2', require: 'elasticsearch/rails/instrumentation' # rubocop:todo Gemfile/MissingFeatureCategory
-gem 'elasticsearch-api',   '7.13.3' # rubocop:todo Gemfile/MissingFeatureCategory
+gem 'elasticsearch-model', '~> 7.2', feature_category: :global_search
+gem 'elasticsearch-rails', '~> 7.2', require: 'elasticsearch/rails/instrumentation', feature_category: :global_search
+gem 'elasticsearch-api', '7.17.11', feature_category: :global_search
 gem 'aws-sdk-core', '~> 3.200.0' # rubocop:todo Gemfile/MissingFeatureCategory
 gem 'aws-sdk-cloudformation', '~> 1' # rubocop:todo Gemfile/MissingFeatureCategory
 gem 'aws-sdk-s3', '~> 1.155.0' # rubocop:todo Gemfile/MissingFeatureCategory
-gem 'faraday_middleware-aws-sigv4', '~>0.3.0' # rubocop:todo Gemfile/MissingFeatureCategory
-gem 'typhoeus', '~> 1.4.0' # Used with Elasticsearch to support http keep-alive connections # rubocop:todo Gemfile/MissingFeatureCategory
+gem 'faraday-typhoeus', '~> 1.1', feature_category: :global_search
+gem 'faraday_middleware-aws-sigv4', '~> 1.0.1', feature_category: :global_search
+# Used with Elasticsearch to support http keep-alive connections
+gem 'typhoeus', '~> 1.4.0', feature_category: :global_search
 
 # Markdown and HTML processing
 gem 'html-pipeline', '~> 2.14.3', feature_category: :team_planning
@@ -569,6 +572,8 @@ group :test do
 end
 
 gem 'octokit', '~> 9.0', feature_category: :importers
+# Needed by octokit: https://github.com/octokit/octokit.rb/pull/1688
+gem 'faraday-multipart', '~> 1.0', feature_category: :importers
 
 gem 'gitlab-mail_room', '~> 0.0.24', require: 'mail_room', feature_category: :shared
 
diff --git a/Gemfile.checksum b/Gemfile.checksum
index 47d1c7e0e8eef..d1adbeab9af97 100644
--- a/Gemfile.checksum
+++ b/Gemfile.checksum
@@ -1,7 +1,7 @@
 [
 {"name":"CFPropertyList","version":"3.0.5","platform":"ruby","checksum":"a78551cd4768d78ebca98488c27e33652ef818be64697a54676d34e6434674a4"},
 {"name":"RedCloth","version":"4.3.3","platform":"ruby","checksum":"d941b8ac96e2730d2d9326d97dda9fcf64cb73532b3f902d91c18970c5f4632d"},
-{"name":"acme-client","version":"2.0.11","platform":"ruby","checksum":"edf6da9f3c5dbe3ab0c6738eb3b97978b7a60e3500445480d2a72fcc610089de"},
+{"name":"acme-client","version":"2.0.18","platform":"ruby","checksum":"3feab341926ffc16eb65babe51ba4dad8180c13e21e774871344e0b3502ef275"},
 {"name":"actioncable","version":"7.0.8.4","platform":"ruby","checksum":"7997fbc32d49c2cffbfe050540a316c96d287b9ef09fa6fe659821373dc186b0"},
 {"name":"actionmailbox","version":"7.0.8.4","platform":"ruby","checksum":"3326fd92baabc3ff9d6e0931dc455769e9571604202af49b2d4cb84cf0062074"},
 {"name":"actionmailer","version":"7.0.8.4","platform":"ruby","checksum":"f9f3a782b6cc9568fb1e61395f13ca4cf79afaa1fca85a1d314aef63cd3abac1"},
@@ -44,8 +44,6 @@
 {"name":"axe-core-api","version":"4.9.1","platform":"ruby","checksum":"9ea7ac16bfee1cb3545345d210878aa8cccfb41b493e00fe1faab79af4d9fed8"},
 {"name":"axe-core-rspec","version":"4.9.1","platform":"ruby","checksum":"31ef067bee36d6efb3f156a83aa2fb6ac721270a53fb9473f0268e325a3e6efd"},
 {"name":"axiom-types","version":"0.1.1","platform":"ruby","checksum":"c1ff113f3de516fa195b2db7e0a9a95fd1b08475a502ff660d04507a09980383"},
-{"name":"azure-storage-blob","version":"2.0.3","platform":"ruby","checksum":"61b76118843c91776bd24bee22c74adafeb7c4bb3a858a325047dae3b59d0363"},
-{"name":"azure-storage-common","version":"2.0.4","platform":"ruby","checksum":"608f4daab0e06b583b73dcffd3246ea39e78056de31630286b0cf97af7d6956b"},
 {"name":"babosa","version":"2.0.0","platform":"ruby","checksum":"a6218db8a4dc8fd99260dde8bc3d5fa1a0c52178196e236ebb31e41fbdcdb8a6"},
 {"name":"backport","version":"1.2.0","platform":"ruby","checksum":"912c7dfdd9ee4625d013ddfccb6205c3f92da69a8990f65c440e40f5b2fc7f75"},
 {"name":"base32","version":"0.3.2","platform":"ruby","checksum":"532e9b19c5dd1fce281df67fc93a803ebd5d26426a93f6dda6612769bc46fe2c"},
@@ -143,11 +141,11 @@
 {"name":"ecma-re-validator","version":"0.3.0","platform":"ruby","checksum":"66a95bd8c2b0641baf1fbf9bd355a0dcf13c82c6883f6f496a722420a8b6e0d7"},
 {"name":"ed25519","version":"1.3.0","platform":"java","checksum":"8e5d2f8a5325c7a463d61d1a48406ce54074c610f3dccd889e6532c9527a3894"},
 {"name":"ed25519","version":"1.3.0","platform":"ruby","checksum":"514a5584f84d39daac568a17ec93a4e7261e140c52c562ed8c382c18456e627d"},
-{"name":"elasticsearch","version":"7.13.3","platform":"ruby","checksum":"58b1ad787fafd41836388176dc09e914b2f6e0b257e73b8a51a704ba6bf75b41"},
-{"name":"elasticsearch-api","version":"7.13.3","platform":"ruby","checksum":"888f35c64c896db7909f1a56f6c383c45ad6b73c3231649b9c989e39b3d2ba2e"},
-{"name":"elasticsearch-model","version":"7.2.0","platform":"ruby","checksum":"2cc1810a45619223c43eff78c6112988f12d475d201523243007dccc6ef96cc7"},
+{"name":"elasticsearch","version":"7.17.11","platform":"ruby","checksum":"ed080f085d939f21d07f424ebcea95326e4bdb5f770a8f33aac699374f2ffc86"},
+{"name":"elasticsearch-api","version":"7.17.11","platform":"ruby","checksum":"fed8f7b64493c97cf3984a33396a798204b54b8e1b01c5b6c099fa3fd4209107"},
+{"name":"elasticsearch-model","version":"7.2.1","platform":"ruby","checksum":"8b5c4b57664bb29f4854fa39603b5ccecfbf9b22fee87bcd16917321dae6a20b"},
 {"name":"elasticsearch-rails","version":"7.2.1","platform":"ruby","checksum":"0750dc0e956358d9a3a0912a8186c266ef19f8de0b178c61996ed1a6998156e4"},
-{"name":"elasticsearch-transport","version":"7.13.3","platform":"ruby","checksum":"ab8d0226652fb5b32923f172c1abfbc7464058b7de2d9dde3215c88d518c8e2e"},
+{"name":"elasticsearch-transport","version":"7.17.11","platform":"ruby","checksum":"d18057d5295e4c39fe80084ede9e00e9c0e0d74580348985f8677b2fb7f70f03"},
 {"name":"email_reply_trimmer","version":"0.1.6","platform":"ruby","checksum":"9fede222ce660993e4e2e3dad282535ceb7914e246eb8302c19aa9e021f7326e"},
 {"name":"email_spec","version":"2.2.0","platform":"ruby","checksum":"60b7980580a835e7f676db60667f17a2d60e8e0e39c26d81cfc231805c544d79"},
 {"name":"encryptor","version":"3.0.0","platform":"ruby","checksum":"abf23f94ab4d864b8cea85b43f3432044a60001982cda7c33c1cd90da8db1969"},
@@ -162,20 +160,15 @@
 {"name":"extended-markdown-filter","version":"0.7.0","platform":"ruby","checksum":"c8eeef7409fbae18c6b407cd3e4eeb5d25c35cb08fe1ac06f375df3db2d4f138"},
 {"name":"factory_bot","version":"6.4.5","platform":"ruby","checksum":"d71dd29bc95f0ec2bf27e3dd9b1b4d557bd534caca744663cb7db4bacf3198be"},
 {"name":"factory_bot_rails","version":"6.4.3","platform":"ruby","checksum":"ea73ceac1c0ff3dc11fff390bf2ea8a2604066525ed8ecd3b3bc2c267226dcc8"},
-{"name":"faraday","version":"1.10.3","platform":"ruby","checksum":"20f52e9f73231e5f3d43fb645901573ce2b75f0bd01ea52a2772133d0106e6b0"},
-{"name":"faraday-em_http","version":"1.0.0","platform":"ruby","checksum":"7a3d4c7079789121054f57e08cd4ef7e40ad1549b63101f38c7093a9d6c59689"},
-{"name":"faraday-em_synchrony","version":"1.0.0","platform":"ruby","checksum":"460dad1c30cc692d6e77d4c391ccadb4eca4854b315632cd7e560f74275cf9ed"},
-{"name":"faraday-excon","version":"1.1.0","platform":"ruby","checksum":"b055c842376734d7f74350fe8611542ae2000c5387348d9ba9708109d6e40940"},
+{"name":"faraday","version":"2.10.0","platform":"ruby","checksum":"1a3e6c02acc511fc334d799521f1013e449bde38aa2dceb3af71e8030519bda9"},
+{"name":"faraday-follow_redirects","version":"0.3.0","platform":"ruby","checksum":"d92d975635e2c7fe525dd494fcd4b9bb7f0a4a0ec0d5f4c15c729530fdb807f9"},
 {"name":"faraday-http-cache","version":"2.5.0","platform":"ruby","checksum":"64b7366d66e508e1c3dd855ebb20ce9da429330e412a23d9ebbc0a7a7b227463"},
-{"name":"faraday-httpclient","version":"1.0.1","platform":"ruby","checksum":"4c8ff1f0973ff835be8d043ef16aaf54f47f25b7578f6d916deee8399a04d33b"},
 {"name":"faraday-multipart","version":"1.0.4","platform":"ruby","checksum":"9012021ab57790f7d712f590b48d5f948b19b43cfa11ca83e6459f06090b0725"},
-{"name":"faraday-net_http","version":"1.0.1","platform":"ruby","checksum":"3245ce406ebb77b40e17a77bfa66191dda04be2fd4e13a78d8a4305854d328ba"},
-{"name":"faraday-net_http_persistent","version":"1.2.0","platform":"ruby","checksum":"0b0cbc8f03dab943c3e1cc58d8b7beb142d9df068b39c718cd83e39260348335"},
-{"name":"faraday-patron","version":"1.0.0","platform":"ruby","checksum":"dc2cd7b340bb3cc8e36bcb9e6e7eff43d134b6d526d5f3429c7a7680ddd38fa7"},
-{"name":"faraday-rack","version":"1.0.0","platform":"ruby","checksum":"ef60ec969a2bb95b8dbf24400155aee64a00fc8ba6c6a4d3968562bcc92328c0"},
-{"name":"faraday-retry","version":"1.0.3","platform":"ruby","checksum":"add154f4f399243cbe070806ed41b96906942e7f5259bb1fe6daf2ec8f497194"},
-{"name":"faraday_middleware","version":"1.2.0","platform":"ruby","checksum":"ded15d574d50e92bd04448d5566913af5cb1a01b2fa311ceecc2464fa0ab88af"},
-{"name":"faraday_middleware-aws-sigv4","version":"0.3.0","platform":"ruby","checksum":"744654bd5b15539a54aed39b806e2dfb45aa47708fa1e6f6766fedcda6c262be"},
+{"name":"faraday-net_http","version":"3.1.0","platform":"ruby","checksum":"1627be414960d0131691190ff524506ba6607402a50fb6eccda9e64ca60f859f"},
+{"name":"faraday-net_http_persistent","version":"2.1.0","platform":"ruby","checksum":"b41720b13f56dae77114d9de54baef2d76d0b06ab40d695b2a98e254b56ade0b"},
+{"name":"faraday-retry","version":"2.2.1","platform":"ruby","checksum":"4146fed14549c0580bf14591fca419a40717de0dd24f267a8ec2d9a728677608"},
+{"name":"faraday-typhoeus","version":"1.1.0","platform":"ruby","checksum":"24c6147c213818dde3ebc50ae47ab92f9a7e554903aa362707126f749c6890e7"},
+{"name":"faraday_middleware-aws-sigv4","version":"1.0.1","platform":"ruby","checksum":"a001ea4f687ca1c60bad8f2a627196905ce3dbf285e461dc153240e92eaabe8f"},
 {"name":"fast_blank","version":"1.0.1","platform":"java","checksum":"90d82106b0e4aa19ac24ba1604c79a0c5a4c471601e800c9b2b072938a6d9a92"},
 {"name":"fast_blank","version":"1.0.1","platform":"ruby","checksum":"269fc30414fed4e6403bc4a49081e1ea539f8b9226e59276ed1efaefabaa17ea"},
 {"name":"fast_gettext","version":"2.3.0","platform":"ruby","checksum":"0253e26423ccab68061c42387827e3b99243a1b15ad614df1c800ba870d64f84"},
@@ -219,7 +212,7 @@
 {"name":"gitlab-chronic","version":"0.10.5","platform":"ruby","checksum":"f80f18dc699b708870a80685243331290bc10cfeedb6b99c92219722f729c875"},
 {"name":"gitlab-dangerfiles","version":"4.8.0","platform":"ruby","checksum":"b327d079552ec974a63bf34d749a0308425af6ebf51d01064f1a6ff216a523db"},
 {"name":"gitlab-experiment","version":"0.9.1","platform":"ruby","checksum":"f230ee742154805a755d5f2539dc44d93cdff08c5bbbb7656018d61f93d01f48"},
-{"name":"gitlab-fog-azure-rm","version":"1.9.1","platform":"ruby","checksum":"026b8e188ac4183c1bf1b1909b0489da0ffad453996a6e744e0eba67dc284f37"},
+{"name":"gitlab-fog-azure-rm","version":"2.0.1","platform":"ruby","checksum":"61cc049fa98cc61bc735c14ea01c1e4179e8439ad84ba496c8b5939810aa7925"},
 {"name":"gitlab-glfm-markdown","version":"0.0.17","platform":"aarch64-linux","checksum":"81ccfd91c7a1da4b165e700f1a6fbb15cf20ffd283ec8c6e05d5e2078a569717"},
 {"name":"gitlab-glfm-markdown","version":"0.0.17","platform":"arm64-darwin","checksum":"2f9da51bb0e57ca431fe957e384c385c4380127a9a22ff3cbf7e0c67efb35897"},
 {"name":"gitlab-glfm-markdown","version":"0.0.17","platform":"ruby","checksum":"f379545fc53a71c31525025fdb422f46081133af5cced3130ce680b155c2aa69"},
@@ -282,7 +275,7 @@
 {"name":"grape-swagger-entity","version":"0.5.4","platform":"ruby","checksum":"34c1644de6523c64cee922988bad3d1057634224f26dd48b9b5c1f90709bb571"},
 {"name":"grape_logging","version":"1.8.4","platform":"ruby","checksum":"efcc3e322dbd5d620a68f078733b7db043cf12680144cd03c982f14115c792d1"},
 {"name":"graphiql-rails","version":"1.10.0","platform":"ruby","checksum":"b557f989a737c8b9e985142609bec52fb1e9393a701eb50e02a7c14422891040"},
-{"name":"graphlient","version":"0.6.0","platform":"ruby","checksum":"b8d8664b4c8ec215012cbe3cca918a045b0a206d709712d68b6db51fd215c5c0"},
+{"name":"graphlient","version":"0.8.0","platform":"ruby","checksum":"98c408da1d083454e9f5e274f3b0b6261e2a0c2b5f2ed7b3ef9441d46f8e7cb1"},
 {"name":"graphlyte","version":"1.0.0","platform":"ruby","checksum":"b5af4ab67dde6e961f00ea1c18f159f73b52ed11395bb4ece297fe628fa1804d"},
 {"name":"graphql","version":"2.3.5","platform":"ruby","checksum":"9c367835f86541660d24c3d81632267ecee553d304577aaee070f8ac05860af1"},
 {"name":"graphql-client","version":"0.23.0","platform":"ruby","checksum":"f238b8e451676baad06bd15f95396e018192243dcf12c4e6d13fb41d9a2babc1"},
diff --git a/Gemfile.lock b/Gemfile.lock
index fa1f290ca4c57..41147e23a0644 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -195,9 +195,9 @@ GEM
     CFPropertyList (3.0.5)
       rexml
     RedCloth (4.3.3)
-    acme-client (2.0.11)
+    acme-client (2.0.18)
       faraday (>= 1.0, < 3.0.0)
-      faraday-retry (~> 1.0)
+      faraday-retry (>= 1.0, < 3.0.0)
     actioncable (7.0.8.4)
       actionpack (= 7.0.8.4)
       activesupport (= 7.0.8.4)
@@ -333,14 +333,6 @@ GEM
       descendants_tracker (~> 0.0.4)
       ice_nine (~> 0.11.0)
       thread_safe (~> 0.3, >= 0.3.1)
-    azure-storage-blob (2.0.3)
-      azure-storage-common (~> 2.0)
-      nokogiri (~> 1, >= 1.10.8)
-    azure-storage-common (2.0.4)
-      faraday (~> 1.0)
-      faraday_middleware (~> 1.0, >= 1.0.0.rc1)
-      net-http-persistent (~> 4.0)
-      nokogiri (~> 1, >= 1.10.8)
     babosa (2.0.0)
     backport (1.2.0)
     base32 (0.3.2)
@@ -537,18 +529,19 @@ GEM
     ecma-re-validator (0.3.0)
       regexp_parser (~> 2.0)
     ed25519 (1.3.0)
-    elasticsearch (7.13.3)
-      elasticsearch-api (= 7.13.3)
-      elasticsearch-transport (= 7.13.3)
-    elasticsearch-api (7.13.3)
+    elasticsearch (7.17.11)
+      elasticsearch-api (= 7.17.11)
+      elasticsearch-transport (= 7.17.11)
+    elasticsearch-api (7.17.11)
       multi_json
-    elasticsearch-model (7.2.0)
+    elasticsearch-model (7.2.1)
       activesupport (> 3)
       elasticsearch (~> 7)
       hashie
     elasticsearch-rails (7.2.1)
-    elasticsearch-transport (7.13.3)
-      faraday (~> 1)
+    elasticsearch-transport (7.17.11)
+      base64
+      faraday (>= 1, < 3)
       multi_json
     email_reply_trimmer (0.1.6)
     email_spec (2.2.0)
@@ -574,36 +567,28 @@ GEM
     factory_bot_rails (6.4.3)
       factory_bot (~> 6.4)
       railties (>= 5.0.0)
-    faraday (1.10.3)
-      faraday-em_http (~> 1.0)
-      faraday-em_synchrony (~> 1.0)
-      faraday-excon (~> 1.1)
-      faraday-httpclient (~> 1.0)
-      faraday-multipart (~> 1.0)
-      faraday-net_http (~> 1.0)
-      faraday-net_http_persistent (~> 1.0)
-      faraday-patron (~> 1.0)
-      faraday-rack (~> 1.0)
-      faraday-retry (~> 1.0)
-      ruby2_keywords (>= 0.0.4)
-    faraday-em_http (1.0.0)
-    faraday-em_synchrony (1.0.0)
-    faraday-excon (1.1.0)
+    faraday (2.10.0)
+      faraday-net_http (>= 2.0, < 3.2)
+      logger
+    faraday-follow_redirects (0.3.0)
+      faraday (>= 1, < 3)
     faraday-http-cache (2.5.0)
       faraday (>= 0.8)
-    faraday-httpclient (1.0.1)
     faraday-multipart (1.0.4)
       multipart-post (~> 2)
-    faraday-net_http (1.0.1)
-    faraday-net_http_persistent (1.2.0)
-    faraday-patron (1.0.0)
-    faraday-rack (1.0.0)
-    faraday-retry (1.0.3)
-    faraday_middleware (1.2.0)
-      faraday (~> 1.0)
-    faraday_middleware-aws-sigv4 (0.3.0)
+    faraday-net_http (3.1.0)
+      net-http
+    faraday-net_http_persistent (2.1.0)
+      faraday (~> 2.5)
+      net-http-persistent (~> 4.0)
+    faraday-retry (2.2.1)
+      faraday (~> 2.0)
+    faraday-typhoeus (1.1.0)
+      faraday (~> 2.0)
+      typhoeus (~> 1.4)
+    faraday_middleware-aws-sigv4 (1.0.1)
       aws-sigv4 (~> 1.0)
-      faraday (>= 0.15)
+      faraday (>= 2.0, < 3)
     fast_blank (1.0.1)
     fast_gettext (2.3.0)
     ffaker (2.23.0)
@@ -711,12 +696,15 @@ GEM
     gitlab-experiment (0.9.1)
       activesupport (>= 3.0)
       request_store (>= 1.0)
-    gitlab-fog-azure-rm (1.9.1)
-      azure-storage-blob (~> 2.0)
-      azure-storage-common (~> 2.0)
+    gitlab-fog-azure-rm (2.0.1)
+      faraday (~> 2.0)
+      faraday-follow_redirects (~> 0.3.0)
+      faraday-net_http_persistent (~> 2.0)
       fog-core (~> 2.1)
       fog-json (~> 1.2)
       mime-types
+      net-http-persistent (~> 4.0)
+      nokogiri (~> 1, >= 1.10.8)
     gitlab-glfm-markdown (0.0.17)
       rb_sys (= 0.9.94)
     gitlab-labkit (0.36.1)
@@ -883,9 +871,8 @@ GEM
       rack
     graphiql-rails (1.10.0)
       railties
-    graphlient (0.6.0)
-      faraday (>= 1.0)
-      faraday_middleware
+    graphlient (0.8.0)
+      faraday (~> 2.0)
       graphql-client
     graphlyte (1.0.0)
     graphql (2.3.5)
@@ -1997,15 +1984,18 @@ DEPENDENCIES
   doorkeeper-openid_connect (~> 1.8, >= 1.8.7)
   duo_api (~> 1.3)
   ed25519 (~> 1.3.0)
-  elasticsearch-api (= 7.13.3)
+  elasticsearch-api (= 7.17.11)
   elasticsearch-model (~> 7.2)
   elasticsearch-rails (~> 7.2)
   email_reply_trimmer (~> 0.1)
   email_spec (~> 2.2.0)
   error_tracking_open_api!
   factory_bot_rails (~> 6.4.3)
-  faraday (~> 1.10.3)
-  faraday_middleware-aws-sigv4 (~> 0.3.0)
+  faraday (~> 2)
+  faraday-multipart (~> 1.0)
+  faraday-retry (~> 2)
+  faraday-typhoeus (~> 1.1)
+  faraday_middleware-aws-sigv4 (~> 1.0.1)
   fast_blank (~> 1.0.1)
   ffaker (~> 2.23)
   flipper (~> 0.26.2)
@@ -2026,7 +2016,7 @@ DEPENDENCIES
   gitlab-chronic (~> 0.10.5)
   gitlab-dangerfiles (~> 4.8.0)
   gitlab-experiment (~> 0.9.1)
-  gitlab-fog-azure-rm (~> 1.9.1)
+  gitlab-fog-azure-rm (~> 2.0.1)
   gitlab-glfm-markdown (~> 0.0.17)
   gitlab-housekeeper!
   gitlab-http!
@@ -2072,7 +2062,7 @@ DEPENDENCIES
   grape-swagger-entity (~> 0.5.1)
   grape_logging (~> 1.8, >= 1.8.4)
   graphiql-rails (~> 1.10)
-  graphlient (~> 0.6.0)
+  graphlient (~> 0.8.0)
   graphlyte (~> 1.0.0)
   graphql (~> 2.3.5)
   graphql-docs (~> 5.0.0)
diff --git a/lib/container_registry/base_client.rb b/lib/container_registry/base_client.rb
index bd30b31722f9d..b556379228d34 100644
--- a/lib/container_registry/base_client.rb
+++ b/lib/container_registry/base_client.rb
@@ -1,7 +1,8 @@
 # frozen_string_literal: true
 
 require 'faraday'
-require 'faraday_middleware'
+require 'faraday/follow_redirects'
+require 'faraday/retry'
 require 'digest'
 
 module ContainerRegistry
@@ -15,7 +16,7 @@ class BaseClient
     ACCEPTED_TYPES = [DOCKER_DISTRIBUTION_MANIFEST_V2_TYPE, OCI_MANIFEST_V1_TYPE].freeze
     ACCEPTED_TYPES_RAW = [DOCKER_DISTRIBUTION_MANIFEST_V2_TYPE, OCI_MANIFEST_V1_TYPE, DOCKER_DISTRIBUTION_MANIFEST_LIST_V2_TYPE, OCI_DISTRIBUTION_INDEX_TYPE].freeze
 
-    RETRY_EXCEPTIONS = [Faraday::Request::Retry::DEFAULT_EXCEPTIONS, Faraday::ConnectionFailed].flatten.freeze
+    RETRY_EXCEPTIONS = [Faraday::Retry::Middleware::DEFAULT_EXCEPTIONS, Faraday::ConnectionFailed].flatten.freeze
     RETRY_OPTIONS = {
       max: 1,
       interval: 5,
diff --git a/lib/container_registry/client.rb b/lib/container_registry/client.rb
index f27bc43eee3cd..4dd262a6bf702 100644
--- a/lib/container_registry/client.rb
+++ b/lib/container_registry/client.rb
@@ -20,7 +20,7 @@ class Client < BaseClient
       limit: 3,
       cookies: [],
       callback: ->(response_env, request_env) do
-        request_env.request_headers.delete(::FaradayMiddleware::FollowRedirects::AUTH_HEADER)
+        request_env.request_headers.delete(::Faraday::FollowRedirects::Middleware::AUTH_HEADER)
 
         redirect_to = request_env.url
         unless redirect_to.scheme.in?(ALLOWED_REDIRECT_SCHEMES)
@@ -161,7 +161,7 @@ def faraday_blob
       @faraday_blob ||= faraday_base do |conn|
         initialize_connection(conn, @options)
 
-        conn.use ::FaradayMiddleware::FollowRedirects, REDIRECT_OPTIONS
+        conn.use ::Faraday::FollowRedirects::Middleware, REDIRECT_OPTIONS
       end
     end
   end
diff --git a/spec/lib/container_registry/client_spec.rb b/spec/lib/container_registry/client_spec.rb
index f82d4a85c46ec..c6c763dd283e6 100644
--- a/spec/lib/container_registry/client_spec.rb
+++ b/spec/lib/container_registry/client_spec.rb
@@ -23,7 +23,7 @@
     it 'handles network timeouts' do
       actual_retries = 0
       retry_options_with_block = retry_options.merge(
-        retry_block: ->(_, _, _, _) { actual_retries += 1 }
+        retry_block: ->(*) { actual_retries += 1 }
       )
 
       stub_const('ContainerRegistry::BaseClient::RETRY_OPTIONS', retry_options_with_block)
diff --git a/tooling/merge_request.rb b/tooling/merge_request.rb
index d0f32a611aaff..7fcf46fa10e9d 100644
--- a/tooling/merge_request.rb
+++ b/tooling/merge_request.rb
@@ -1,7 +1,6 @@
 # frozen_string_literal: true
 
 require 'faraday'
-require 'faraday_middleware'
 
 module Tooling
   class MergeRequest
-- 
GitLab