From 1878b1ca39b4461b32ed5b197d6c4a889762a520 Mon Sep 17 00:00:00 2001
From: Timo Furrer <tfurrer@gitlab.com>
Date: Fri, 5 May 2023 08:02:39 +0000
Subject: [PATCH] Upgrade `kas-grpc` gem to `0.1.0`

This version contains the new gRPC method

Changelog: changed
MR: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/119077
---
 Gemfile                            |  2 +-
 Gemfile.checksum                   |  2 +-
 Gemfile.lock                       |  4 ++--
 lib/gitlab/kas/client.rb           | 15 ++++++++++++++-
 spec/lib/gitlab/kas/client_spec.rb | 29 +++++++++++++++++++++++++++++
 5 files changed, 47 insertions(+), 5 deletions(-)

diff --git a/Gemfile b/Gemfile
index 297b302550771..b5ee4b152d61c 100644
--- a/Gemfile
+++ b/Gemfile
@@ -510,7 +510,7 @@ gem 'spamcheck', '~> 1.3.0'
 gem 'gitaly', '~> 15.9.0-rc3'
 
 # KAS GRPC protocol definitions
-gem 'kas-grpc', '~> 0.0.2'
+gem 'kas-grpc', '~> 0.1.0'
 
 gem 'grpc', '~> 1.42.0'
 
diff --git a/Gemfile.checksum b/Gemfile.checksum
index 29417b7a380ea..0ff91f5bfd661 100644
--- a/Gemfile.checksum
+++ b/Gemfile.checksum
@@ -322,7 +322,7 @@
 {"name":"kaminari-actionview","version":"1.2.2","platform":"ruby","checksum":"1330f6fc8b59a4a4ef6a549ff8a224797289ebf7a3a503e8c1652535287cc909"},
 {"name":"kaminari-activerecord","version":"1.2.2","platform":"ruby","checksum":"0dd3a67bab356a356f36b3b7236bcb81cef313095365befe8e98057dd2472430"},
 {"name":"kaminari-core","version":"1.2.2","platform":"ruby","checksum":"3bd26fec7370645af40ca73b9426a448d09b8a8ba7afa9ba3c3e0d39cdbb83ff"},
-{"name":"kas-grpc","version":"0.0.2","platform":"ruby","checksum":"111ff7515952e939f491297ba4c69a218b72d9d0ef8e5bff80a5df6a56df9a16"},
+{"name":"kas-grpc","version":"0.1.0","platform":"ruby","checksum":"b219c79b7bddf1f3ac6a78119e25b0b52c0c29608b3a80c75929c47f32a50dda"},
 {"name":"knapsack","version":"1.21.1","platform":"ruby","checksum":"82f70422adebcacec1b514f6ebff65265fc85d836e3c320718a160d8ac41cf14"},
 {"name":"kramdown","version":"2.3.2","platform":"ruby","checksum":"cb4530c2e9d16481591df2c9336723683c354e5416a5dd3e447fa48215a6a71c"},
 {"name":"kramdown-parser-gfm","version":"1.1.0","platform":"ruby","checksum":"fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729"},
diff --git a/Gemfile.lock b/Gemfile.lock
index e4f49206276c4..b44f3d55445f9 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -871,7 +871,7 @@ GEM
       activerecord
       kaminari-core (= 1.2.2)
     kaminari-core (1.2.2)
-    kas-grpc (0.0.2)
+    kas-grpc (0.1.0)
       grpc (~> 1.0)
     knapsack (1.21.1)
       rake
@@ -1809,7 +1809,7 @@ DEPENDENCIES
   json_schemer (~> 0.2.18)
   jwt (~> 2.5)
   kaminari (~> 1.2.2)
-  kas-grpc (~> 0.0.2)
+  kas-grpc (~> 0.1.0)
   knapsack (~> 1.21.1)
   kramdown (~> 2.3.1)
   kubeclient (~> 4.11.0)
diff --git a/lib/gitlab/kas/client.rb b/lib/gitlab/kas/client.rb
index 768810d5545dd..43546d04087ce 100644
--- a/lib/gitlab/kas/client.rb
+++ b/lib/gitlab/kas/client.rb
@@ -8,7 +8,8 @@ class Client
 
       STUB_CLASSES = {
         agent_tracker: Gitlab::Agent::AgentTracker::Rpc::AgentTracker::Stub,
-        configuration_project: Gitlab::Agent::ConfigurationProject::Rpc::ConfigurationProject::Stub
+        configuration_project: Gitlab::Agent::ConfigurationProject::Rpc::ConfigurationProject::Stub,
+        notifications: Gitlab::Agent::Notifications::Rpc::Notifications::Stub
       }.freeze
 
       ConfigurationError = Class.new(StandardError)
@@ -39,6 +40,18 @@ def list_agent_config_files(project:)
           .to_a
       end
 
+      def send_git_push_event(project:)
+        request = Gitlab::Agent::Notifications::Rpc::GitPushEventRequest.new(
+          project: Gitlab::Agent::Notifications::Rpc::Project.new(
+            id: project.id,
+            full_path: project.full_path
+          )
+        )
+
+        stub_for(:notifications)
+          .git_push_event(request, metadata: metadata)
+      end
+
       private
 
       def stub_for(service)
diff --git a/spec/lib/gitlab/kas/client_spec.rb b/spec/lib/gitlab/kas/client_spec.rb
index 9a0fa6c4067a1..5668c26561180 100644
--- a/spec/lib/gitlab/kas/client_spec.rb
+++ b/spec/lib/gitlab/kas/client_spec.rb
@@ -109,6 +109,35 @@
       it { expect(subject).to eq(agent_configurations) }
     end
 
+    describe '#send_git_push_event' do
+      let(:stub) { instance_double(Gitlab::Agent::Notifications::Rpc::Notifications::Stub) }
+      let(:request) { instance_double(Gitlab::Agent::Notifications::Rpc::GitPushEventRequest) }
+      let(:project_param) { instance_double(Gitlab::Agent::Notifications::Rpc::Project) }
+      let(:response) { double(Gitlab::Agent::Notifications::Rpc::GitPushEventResponse) }
+
+      subject { described_class.new.send_git_push_event(project: project) }
+
+      before do
+        expect(Gitlab::Agent::Notifications::Rpc::Notifications::Stub).to receive(:new)
+          .with('example.kas.internal', :this_channel_is_insecure, timeout: described_class::TIMEOUT)
+          .and_return(stub)
+
+        expect(Gitlab::Agent::Notifications::Rpc::Project).to receive(:new)
+          .with(id: project.id, full_path: project.full_path)
+          .and_return(project_param)
+
+        expect(Gitlab::Agent::Notifications::Rpc::GitPushEventRequest).to receive(:new)
+          .with(project: project_param)
+          .and_return(request)
+
+        expect(stub).to receive(:git_push_event)
+          .with(request, metadata: { 'authorization' => 'bearer test-token' })
+          .and_return(response)
+      end
+
+      it { expect(subject).to eq(response) }
+    end
+
     describe 'with grpcs' do
       let(:stub) { instance_double(Gitlab::Agent::ConfigurationProject::Rpc::ConfigurationProject::Stub) }
       let(:credentials) { instance_double(GRPC::Core::ChannelCredentials) }
-- 
GitLab