From 974199d6cc5c92ec4e468fb3244ff0b88fd200b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20L=C3=A9one?= Date: Wed, 24 Sep 2025 16:33:16 +0200 Subject: [PATCH 1/2] chore: add support for retry delay to reduce the amount of logs in the CI --- .github/workflows/nightly.yml | 2 ++ internal/acctest/acctest.go | 12 ++++++++++++ internal/acctest/domain.go | 11 ++++++----- internal/acctest/vcr.go | 3 ++- internal/env/env.go | 17 +++++++++++++++++ internal/meta/meta.go | 4 ++-- internal/services/domain/registration_test.go | 5 +++-- 7 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 internal/env/env.go diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index bb999aa1e2..1650651276 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -74,6 +74,8 @@ jobs: SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY }} SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_DEFAULT_ORGANIZATION_ID }} SCW_DEFAULT_PROJECT_ID: ${{ secrets.SCW_DEFAULT_PROJECT_ID }} + # Having long retry intervals will ensure that we have few requests done while waiting on call to complete (using time.ParseDuration) + TF_RETRY_DELAY: 30s - name: Ping on failure if: ${{ failure() }} run: | diff --git a/internal/acctest/acctest.go b/internal/acctest/acctest.go index c4cb687a5a..c6596920df 100644 --- a/internal/acctest/acctest.go +++ b/internal/acctest/acctest.go @@ -8,6 +8,7 @@ import ( "time" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/scaleway/terraform-provider-scaleway/v2/internal/env" "github.com/scaleway/terraform-provider-scaleway/v2/internal/meta" "github.com/scaleway/terraform-provider-scaleway/v2/internal/provider" "github.com/scaleway/terraform-provider-scaleway/v2/internal/transport" @@ -46,8 +47,19 @@ func NewTestTools(t *testing.T) *TestTools { require.NoError(t, err) if !*UpdateCassettes { + // If no recording is happening, the delay to retry to interactions should be 0 tmp := 0 * time.Second transport.DefaultWaitRetryInterval = &tmp + } else { + if os.Getenv(env.RetryDelay) != "" { + // Overriding the delay interval is helpful to reduce the amount of requests performed while waiting for a ressource to be available + tmp, err := time.ParseDuration(os.Getenv(env.RetryDelay)) + if err != nil { + t.Fatal(err) + } + t.Logf("delay retry set to: %v", tmp) + transport.DefaultWaitRetryInterval = &tmp + } } return &TestTools{ diff --git a/internal/acctest/domain.go b/internal/acctest/domain.go index aa747d2958..0e71f212f5 100644 --- a/internal/acctest/domain.go +++ b/internal/acctest/domain.go @@ -5,6 +5,7 @@ import ( "os" "regexp" + "github.com/scaleway/terraform-provider-scaleway/v2/internal/env" "github.com/scaleway/terraform-provider-scaleway/v2/internal/logging" ) @@ -22,11 +23,11 @@ var ( ) func init() { - testDomainPtr := flag.String("test-domain", os.Getenv("TF_TEST_DOMAIN"), "Test domain") + testDomainPtr := flag.String("test-domain", os.Getenv(env.TestDomain), "Test domain") if testDomainPtr != nil && *testDomainPtr != "" { TestDomain = *testDomainPtr } else { - logging.L.Infof("environment variable TF_TEST_DOMAIN is required") + logging.L.Infof("environment variable %s is required", env.TestDomain) return } @@ -43,18 +44,18 @@ func init() { } if isReserved { - logging.L.Warningf("TF_TEST_DOMAIN cannot be a Scaleway required domain. Please use another one.") + logging.L.Warningf("%s cannot be a Scaleway required domain. Please use another one.", env.TestDomain) return } logging.L.Infof("start domain record test with domain: %s", TestDomain) - testDomainZonePtr := flag.String("test-domain-zone", os.Getenv("TF_TEST_DOMAIN_ZONE"), "Test domain zone") + testDomainZonePtr := flag.String("test-domain-zone", os.Getenv(env.TestDomainZone), "Test domain zone") if testDomainZonePtr != nil && *testDomainZonePtr != "" { TestDomainZone = *testDomainZonePtr } else { - logging.L.Infof("environment variable TF_TEST_DOMAIN_ZONE is required") + logging.L.Infof("environment variable %s is required", env.TestDomainZone) return } diff --git a/internal/acctest/vcr.go b/internal/acctest/vcr.go index 33cc6f8641..3fd2d8423c 100644 --- a/internal/acctest/vcr.go +++ b/internal/acctest/vcr.go @@ -16,6 +16,7 @@ import ( "github.com/scaleway/scaleway-sdk-go/scw" "github.com/scaleway/scaleway-sdk-go/strcase" + "github.com/scaleway/terraform-provider-scaleway/v2/internal/env" "github.com/scaleway/terraform-provider-scaleway/v2/internal/logging" "github.com/scaleway/terraform-provider-scaleway/v2/internal/transport" "github.com/stretchr/testify/require" @@ -24,7 +25,7 @@ import ( ) // UpdateCassettes will update all cassettes of a given test -var UpdateCassettes = flag.Bool("cassettes", os.Getenv("TF_UPDATE_CASSETTES") == "true", "Record Cassettes") +var UpdateCassettes = flag.Bool("cassettes", os.Getenv(env.UpdateCassettes) == "true", "Record Cassettes") // SensitiveFields is a map with keys listing fields that should be anonymized // value will be set in place of its old value diff --git a/internal/env/env.go b/internal/env/env.go new file mode 100644 index 0000000000..997235d378 --- /dev/null +++ b/internal/env/env.go @@ -0,0 +1,17 @@ +// Package env contains a list of environment variables used to modify the behaviour of the provider +package env + +const ( + // RetryDelay is a duration string (parsed with time.ParseDuration) will change how long the SDK will wait between to attempts + RetryDelay = "TF_RETRY_DELAY" + // UpdateCassettes if set to "true" will trigger the cassettes to be recorded + UpdateCassettes = "TF_UPDATE_CASSETTES" + // TestDomain is the DNS domain used during our tests + TestDomain = "TF_TEST_DOMAIN" + // TestDomainZone is the DNS zone used during our tests + TestDomainZone = "TF_TEST_DOMAIN_ZONE" + // AppendUserAgent is appended to the user agent of the underlying SDK go + AppendUserAgent = "TF_APPEND_USER_AGENT" + // AccDomainRegistration if set to "true" will trigger acceptance test for domain registration + AccDomainRegistration = "TF_ACC_DOMAIN_REGISTRATION" +) diff --git a/internal/meta/meta.go b/internal/meta/meta.go index a3cfd60e3c..aa2effd4db 100644 --- a/internal/meta/meta.go +++ b/internal/meta/meta.go @@ -13,12 +13,12 @@ import ( "github.com/hashicorp/terraform-plugin-log/tflog" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/scaleway/scaleway-sdk-go/scw" + "github.com/scaleway/terraform-provider-scaleway/v2/internal/env" "github.com/scaleway/terraform-provider-scaleway/v2/internal/transport" "github.com/scaleway/terraform-provider-scaleway/v2/version" ) const ( - appendUserAgentEnvVar = "TF_APPEND_USER_AGENT" CredentialsSourceEnvironment = "Environment variable" CredentialsSourceDefault = "Default" CredentialsSourceActiveProfile = "Active Profile in config.yaml" @@ -197,7 +197,7 @@ type Config struct { func customizeUserAgent(providerVersion string, terraformVersion string) string { userAgent := fmt.Sprintf("terraform-provider/%s terraform/%s", providerVersion, terraformVersion) - if appendUserAgent := os.Getenv(appendUserAgentEnvVar); appendUserAgent != "" { + if appendUserAgent := os.Getenv(env.AppendUserAgent); appendUserAgent != "" { userAgent += " " + appendUserAgent } diff --git a/internal/services/domain/registration_test.go b/internal/services/domain/registration_test.go index 1cac16dd35..544d721ccd 100644 --- a/internal/services/domain/registration_test.go +++ b/internal/services/domain/registration_test.go @@ -10,6 +10,7 @@ import ( "github.com/hashicorp/terraform-plugin-testing/terraform" domainSDK "github.com/scaleway/scaleway-sdk-go/api/domain/v2beta1" "github.com/scaleway/terraform-provider-scaleway/v2/internal/acctest" + "github.com/scaleway/terraform-provider-scaleway/v2/internal/env" "github.com/scaleway/terraform-provider-scaleway/v2/internal/httperrors" "github.com/scaleway/terraform-provider-scaleway/v2/internal/services/domain" ) @@ -268,9 +269,9 @@ func testAccCheckDomainDestroy(tt *acctest.TestTools) resource.TestCheckFunc { // If `TF_UPDATE_CASSETTES=true`, the test is **only executed if `TF_ACC_DOMAIN_REGISTRATION=true`**. // Otherwise, the test is skipped to prevent unintended domain reservations. func shouldBeSkipped() bool { - if os.Getenv("TF_UPDATE_CASSETTES") == "false" { + if os.Getenv(env.UpdateCassettes) == "false" { return false } - return os.Getenv("TF_ACC_DOMAIN_REGISTRATION") != "true" + return os.Getenv(env.AccDomainRegistration) != "true" } From 74d463f3434771f3481399518154555f3c2535f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20L=C3=A9one?= Date: Wed, 24 Sep 2025 16:43:38 +0200 Subject: [PATCH 2/2] fix lint --- internal/acctest/acctest.go | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/internal/acctest/acctest.go b/internal/acctest/acctest.go index c6596920df..a74825a84f 100644 --- a/internal/acctest/acctest.go +++ b/internal/acctest/acctest.go @@ -50,16 +50,15 @@ func NewTestTools(t *testing.T) *TestTools { // If no recording is happening, the delay to retry to interactions should be 0 tmp := 0 * time.Second transport.DefaultWaitRetryInterval = &tmp - } else { - if os.Getenv(env.RetryDelay) != "" { - // Overriding the delay interval is helpful to reduce the amount of requests performed while waiting for a ressource to be available - tmp, err := time.ParseDuration(os.Getenv(env.RetryDelay)) - if err != nil { - t.Fatal(err) - } - t.Logf("delay retry set to: %v", tmp) - transport.DefaultWaitRetryInterval = &tmp + } else if os.Getenv(env.RetryDelay) != "" { + // Overriding the delay interval is helpful to reduce the amount of requests performed while waiting for a ressource to be available + tmp, err := time.ParseDuration(os.Getenv(env.RetryDelay)) + if err != nil { + t.Fatal(err) } + + t.Logf("delay retry set to: %v", tmp) + transport.DefaultWaitRetryInterval = &tmp } return &TestTools{