From 7e520461afc711683bf0924ff95dd398c992accf Mon Sep 17 00:00:00 2001 From: Joel Speed Date: Fri, 24 Jul 2026 14:02:55 +0100 Subject: [PATCH] Make BigQuery optional for local development --- pkg/cmd/release-payload-controller/cmd.go | 34 +++++++++---------- .../jira_escalations_controller_test.go | 29 ++++++++++++++++ 2 files changed, 45 insertions(+), 18 deletions(-) diff --git a/pkg/cmd/release-payload-controller/cmd.go b/pkg/cmd/release-payload-controller/cmd.go index 0bb389b5d..42b0b1f5e 100644 --- a/pkg/cmd/release-payload-controller/cmd.go +++ b/pkg/cmd/release-payload-controller/cmd.go @@ -2,7 +2,6 @@ package release_payload_controller import ( "context" - "errors" "flag" "fmt" "os" @@ -83,12 +82,6 @@ func (o *Options) AddFlags(fs *pflag.FlagSet) { } func (o *Options) Validate(_ context.Context) error { - if len(o.GoogleProjectID) == 0 { - return errors.New("--google-project-id flag must be set") - } - if len(o.GoogleServiceAccountCredentialFile) == 0 { - return errors.New("--google-service-account-credential-file flag must be set") - } if err := o.jira.Validate(false); err != nil { return fmt.Errorf("invalid jira options: %w", err) } @@ -151,17 +144,22 @@ func (o *Options) Run(ctx context.Context) error { } } - // BigQuery Client - bqc, err := bigquery.NewBigQueryClient(o.GoogleProjectID, o.GoogleServiceAccountCredentialFile) - if err != nil { - klog.Fatalf("Unable to configure bigquery client: %v", err) - } - defer bqc.Close() - - var bqClient bigquery.ClientInterface = bqc - if o.BigQueryCacheTTL > 0 { - bqClient = bigquery.NewCachedClient(bqc, o.BigQueryCacheTTL) - klog.Infof("BigQuery caching enabled with TTL: %s", o.BigQueryCacheTTL) + // BigQuery Client (optional) + var bqClient bigquery.ClientInterface + if o.GoogleProjectID != "" && o.GoogleServiceAccountCredentialFile != "" { + bqc, err := bigquery.NewBigQueryClient(o.GoogleProjectID, o.GoogleServiceAccountCredentialFile) + if err != nil { + klog.Infof("BigQuery client not configured, job history lookups will be unavailable: %v", err) + } else { + defer bqc.Close() + bqClient = bqc + if o.BigQueryCacheTTL > 0 { + bqClient = bigquery.NewCachedClient(bqc, o.BigQueryCacheTTL) + klog.Infof("BigQuery caching enabled with TTL: %s", o.BigQueryCacheTTL) + } + } + } else { + klog.Infof("BigQuery client not configured, job history lookups will be unavailable") } // Jira Client (optional) diff --git a/pkg/cmd/release-payload-controller/jira_escalations_controller_test.go b/pkg/cmd/release-payload-controller/jira_escalations_controller_test.go index 1a06b79fe..b00ea450d 100644 --- a/pkg/cmd/release-payload-controller/jira_escalations_controller_test.go +++ b/pkg/cmd/release-payload-controller/jira_escalations_controller_test.go @@ -69,6 +69,35 @@ func TestNewJiraEscalationsController(t *testing.T) { } } +func TestNewJiraEscalationsControllerWithNilBigQueryClient(t *testing.T) { + t.Parallel() + + objs := []runtime.Object{} + client := releasepayloadclient.NewSimpleClientset(objs...) + informerFactory := releasepayloadinformers.NewSharedInformerFactory(client, 0) + releasePayloadInformer := informerFactory.Release().V1alpha1().ReleasePayloads() + + eventRecorder := events.NewInMemoryRecorder("test", clock.RealClock{}) + configAccessor := &mockConfigAccessor{} + + controller, err := NewJiraEscalationsController( + releasePayloadInformer, + client.ReleaseV1alpha1(), + eventRecorder, + configAccessor, + nil, + nil, + ) + + if err != nil { + t.Fatalf("Failed to create controller: %v", err) + } + + if controller == nil { + t.Fatal("Expected non-nil controller") + } +} + func TestGetWindowSize(t *testing.T) { t.Parallel()