From e2b5a6baae83f28f7aafad640fd27b5fe5b1d2f0 Mon Sep 17 00:00:00 2001 From: Max Lacroix Date: Tue, 27 Aug 2024 22:06:39 +0200 Subject: [PATCH 1/2] feat: add support for retry_delay_ms, max_retries, retryable_errors --- internal/clients/github.go | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/internal/clients/github.go b/internal/clients/github.go index d53372c..289756c 100644 --- a/internal/clients/github.go +++ b/internal/clients/github.go @@ -40,6 +40,9 @@ const ( keyAppAuthPemFile = "pem_file" keyWriteDelayMs = "write_delay_ms" keyReadDelayMs = "read_delay_ms" + keyRetryDelayMs = "retry_delay_ms" + keyMaxRetries = "max_retries" + keyRetryableErrors = "retryable_errors" ) type appAuth struct { @@ -49,12 +52,15 @@ type appAuth struct { } type githubConfig struct { - BaseURL *string `json:"base_url,omitempty"` - Owner *string `json:"owner,omitempty"` - Token *string `json:"token,omitempty"` - AppAuth *[]appAuth `json:"app_auth,omitempty"` - WriteDelayMs *int `json:"write_delay_ms,omitempty"` - ReadDelayMs *int `json:"read_delay_ms,omitempty"` + BaseURL *string `json:"base_url,omitempty"` + Owner *string `json:"owner,omitempty"` + Token *string `json:"token,omitempty"` + AppAuth *[]appAuth `json:"app_auth,omitempty"` + WriteDelayMs *int `json:"write_delay_ms,omitempty"` + ReadDelayMs *int `json:"read_delay_ms,omitempty"` + RetryDelayMs *int `json:"retry_delay_ms,omitempty"` + MaxRetries *int `json:"max_retries,omitempty"` + RetryableErrors []int `json:"retryable_errors,omitempty"` } func terraformProviderConfigurationBuilder(creds githubConfig) (terraform.ProviderConfiguration, error) { @@ -98,6 +104,18 @@ func terraformProviderConfigurationBuilder(creds githubConfig) (terraform.Provid cnf[keyReadDelayMs] = *creds.ReadDelayMs } + if creds.RetryDelayMs != nil { + cnf[keyRetryDelayMs] = *creds.RetryDelayMs + } + + if creds.MaxRetries != nil { + cnf[keyMaxRetries] = *creds.MaxRetries + } + + if creds.RetryableErrors != nil { + cnf[keyRetryableErrors] = creds.RetryableErrors + } + return cnf, nil } From 50dcb3b6487f7cc315824ffcb244d51f24db95e2 Mon Sep 17 00:00:00 2001 From: Max Lacroix Date: Thu, 5 Sep 2024 15:31:12 +0200 Subject: [PATCH 2/2] chore(terraformProviderConfigurationBuilder): refactor function for cyclomatic complexity --- internal/clients/github.go | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/internal/clients/github.go b/internal/clients/github.go index 289756c..e52e96f 100644 --- a/internal/clients/github.go +++ b/internal/clients/github.go @@ -63,14 +63,8 @@ type githubConfig struct { RetryableErrors []int `json:"retryable_errors,omitempty"` } -func terraformProviderConfigurationBuilder(creds githubConfig) (terraform.ProviderConfiguration, error) { - - cnf := terraform.ProviderConfiguration{} - - if creds.BaseURL != nil { - cnf[keyBaseURL] = *creds.BaseURL - } - +// setCredentialConfigs will add credential type fields (Owner, Token, AppAuth) to terraform providerConfiguration +func setCredentialConfigs(creds githubConfig, cnf terraform.ProviderConfiguration) (terraform.ProviderConfiguration, error) { if creds.Owner != nil { cnf[keyOwner] = *creds.Owner } @@ -96,6 +90,11 @@ func terraformProviderConfigurationBuilder(creds githubConfig) (terraform.Provid cnf[keyAppAuth] = aaList } + return cnf, nil +} + +// setParameterConfigs will add configuration type fields (WriteDelayMs, ReadDelayMs, RetryDelayMs, MaxRetries, RetryableErrors) to terraform providerConfiguration +func setParameterConfigs(creds githubConfig, cnf terraform.ProviderConfiguration) terraform.ProviderConfiguration { if creds.WriteDelayMs != nil { cnf[keyWriteDelayMs] = *creds.WriteDelayMs } @@ -116,6 +115,24 @@ func terraformProviderConfigurationBuilder(creds githubConfig) (terraform.Provid cnf[keyRetryableErrors] = creds.RetryableErrors } + return cnf +} + +func terraformProviderConfigurationBuilder(creds githubConfig) (terraform.ProviderConfiguration, error) { + + cnf := terraform.ProviderConfiguration{} + + if creds.BaseURL != nil { + cnf[keyBaseURL] = *creds.BaseURL + } + + cnf, err := setCredentialConfigs(creds, cnf) + if err != nil { + return cnf, errors.Errorf(errTerraformProviderMissingOwner) + } + + cnf = setParameterConfigs(creds, cnf) + return cnf, nil }