From 36c936bf2f376ab4bcf03f157c77601e781911ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Brachth=C3=A4user?= Date: Mon, 25 Sep 2023 08:35:43 +0200 Subject: [PATCH] Add fetch_git_notes and adjust image version Fetch function added to get git notes and update callbacks for the repository. This improves the GitController by allowing to authenticate and fetch git note references. The image version of the main_container in `pulumi-operator-kubernetes/src/stack/service.rs` has been updated from 1.0.20 to 1.0.21 for the pulumi operator kubernetes job. --- .../src/git/service.rs | 31 +++++++++++++++++-- .../src/stack/service.rs | 2 +- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/pulumi-operator-kubernetes-job/src/git/service.rs b/pulumi-operator-kubernetes-job/src/git/service.rs index 967180d..e148963 100644 --- a/pulumi-operator-kubernetes-job/src/git/service.rs +++ b/pulumi-operator-kubernetes-job/src/git/service.rs @@ -7,7 +7,7 @@ use std::{ use git2::cert::{CertHostkey, SshHostKeyType}; use git2::{ build::RepoBuilder, CertificateCheckStatus, Cred, FetchOptions, - RemoteCallbacks, + RemoteCallbacks, Repository, }; use k8s_openapi::{api::core::v1::Secret, ByteString}; use kube::core::ObjectMeta; @@ -98,7 +98,18 @@ impl GitService { } builder.fetch_options(fo); - builder.clone(spec.repository.as_str(), Path::new("./source"))?; + let repo = + builder.clone(spec.repository.as_str(), Path::new("./source"))?; + + let mut callback = RemoteCallbacks::new(); + + if let Some(auth) = &spec.auth { + let data = git_controller.get_secret(&namespace, &auth).await?; + git_controller.build_callback(auth, &data, &mut callback)?; + } + + fetch_git_notes(&repo, callback)?; + panic!(); Ok::<&str, GitError>("./source") } @@ -113,6 +124,22 @@ impl GitService { } } +fn fetch_git_notes( + repo: &Repository, + callback: RemoteCallbacks, +) -> Result<(), git2::Error> { + let mut remote = repo.find_remote("origin")?; + let refspec = "refs/notes/*:refs/notes/*"; + + // Setup FetchOptions with your callback + let mut fetch_options = FetchOptions::new(); + fetch_options.remote_callbacks(callback); + + remote.fetch(&[refspec], Some(&mut fetch_options), None)?; + + Ok(()) +} + struct GitController { kubernetes_service: Inst, } diff --git a/pulumi-operator-kubernetes/src/stack/service.rs b/pulumi-operator-kubernetes/src/stack/service.rs index 1f21e2c..8e72509 100644 --- a/pulumi-operator-kubernetes/src/stack/service.rs +++ b/pulumi-operator-kubernetes/src/stack/service.rs @@ -58,7 +58,7 @@ impl KubernetesPulumiStackService { let mut main_container: Container = serde_json::from_value(json!({ "name": "pulumi", - "image": "ghcr.io/stromee/pulumi-operator/pulumi-operator-kubernetes-job:1.0.20", + "image": "ghcr.io/stromee/pulumi-operator/pulumi-operator-kubernetes-job:1.0.21", "env": [{ "name": "PULUMI_STACK", "value": name