diff --git a/eng/pipelines/mgmt-auto-release.yml b/eng/pipelines/mgmt-auto-release.yml index 0d3d2e294e2c..dfd10d30b63e 100644 --- a/eng/pipelines/mgmt-auto-release.yml +++ b/eng/pipelines/mgmt-auto-release.yml @@ -23,7 +23,7 @@ stages: - task: GoTool@0 inputs: - version: '1.19' + version: '1.20' - task: ShellScript@2 inputs: diff --git a/eng/pipelines/templates/jobs/archetype-sdk-client-samples.yml b/eng/pipelines/templates/jobs/archetype-sdk-client-samples.yml index 5233f298d52b..a49c20f8b345 100644 --- a/eng/pipelines/templates/jobs/archetype-sdk-client-samples.yml +++ b/eng/pipelines/templates/jobs/archetype-sdk-client-samples.yml @@ -18,19 +18,27 @@ stages: Linux_Go118: pool.name: azsdk-pool-mms-ubuntu-2004-general image.name: MMSUbuntu20.04 - go.version: '1.18.5' + go.version: '1.18.10' Windows_Go118: pool.name: azsdk-pool-mms-win-2022-general image.name: MMS2022 - go.version: '1.18.5' + go.version: '1.18.10' Linux_Go119: pool.name: azsdk-pool-mms-ubuntu-2004-general image.name: MMSUbuntu20.04 - go.version: '1.19' + go.version: '1.19.5' Windows_Go119: pool.name: azsdk-pool-mms-win-2022-general image.name: MMS2022 - go.version: '1.19' + go.version: '1.19.5' + Linux_Go120: + pool.name: azsdk-pool-mms-ubuntu-2004-general + image.name: MMSUbuntu20.04 + go.version: '1.20' + Windows_Go120: + pool.name: azsdk-pool-mms-win-2022-general + image.name: MMS2022 + go.version: '1.20' pool: name: $(pool.name) vmImage: $(image.name) @@ -63,7 +71,7 @@ stages: steps: - task: GoTool@0 inputs: - version: '1.19' + version: '1.20' displayName: "Select Go Version" - template: ../steps/create-go-workspace.yml diff --git a/eng/pipelines/templates/jobs/archetype-sdk-client.yml b/eng/pipelines/templates/jobs/archetype-sdk-client.yml index a8ada194cf36..b7d86177b8e6 100644 --- a/eng/pipelines/templates/jobs/archetype-sdk-client.yml +++ b/eng/pipelines/templates/jobs/archetype-sdk-client.yml @@ -85,11 +85,11 @@ stages: Linux_Go118: pool.name: azsdk-pool-mms-ubuntu-2004-general image.name: MMSUbuntu20.04 - go.version: '1.18.5' + go.version: '1.18.10' Windows_Go118: pool.name: azsdk-pool-mms-win-2022-general image.name: MMS2022 - go.version: '1.18.5' + go.version: '1.18.10' Linux_Go119: pool.name: azsdk-pool-mms-ubuntu-2004-general image.name: MMSUbuntu20.04 @@ -97,7 +97,15 @@ stages: Windows_Go119: pool.name: azsdk-pool-mms-win-2022-general image.name: MMS2022 - go.version: '1.19' + go.version: '1.19' + Linux_Go120: + pool.name: azsdk-pool-mms-ubuntu-2004-general + image.name: MMSUbuntu20.04 + go.version: '1.20' + Windows_Go120: + pool.name: azsdk-pool-mms-win-2022-general + image.name: MMS2022 + go.version: '1.20' generate.bom: true pool: name: $(pool.name) @@ -141,7 +149,7 @@ stages: - task: GoTool@0 inputs: - version: '1.19' + version: '1.20' displayName: "Select Go Version" - template: ../steps/create-go-workspace.yml diff --git a/eng/pipelines/templates/jobs/archetype-sdk-eng-client.yml b/eng/pipelines/templates/jobs/archetype-sdk-eng-client.yml index 4bba57e892a0..8d1d50d1700e 100644 --- a/eng/pipelines/templates/jobs/archetype-sdk-eng-client.yml +++ b/eng/pipelines/templates/jobs/archetype-sdk-eng-client.yml @@ -28,19 +28,27 @@ stages: Linux_Go118: pool.name: azsdk-pool-mms-ubuntu-2004-general image.name: MMSUbuntu20.04 - go.version: '1.18.5' + go.version: '1.18.10' Windows_Go118: pool.name: azsdk-pool-mms-win-2022-general image.name: MMS2022 - go.version: '1.18.5' + go.version: '1.18.10' Linux_Go119: pool.name: azsdk-pool-mms-ubuntu-2004-general image.name: MMSUbuntu20.04 - go.version: '1.19' + go.version: '1.19.5' Windows_Go119: pool.name: azsdk-pool-mms-win-2022-general image.name: MMS2022 - go.version: '1.19' + go.version: '1.19.5' + Linux_Go120: + pool.name: azsdk-pool-mms-ubuntu-2004-general + image.name: MMSUbuntu20.04 + go.version: '1.20' + Windows_Go120: + pool.name: azsdk-pool-mms-win-2022-general + image.name: MMS2022 + go.version: '1.20' generate.bom: true pool: name: $(pool.name) @@ -79,7 +87,7 @@ stages: - task: GoTool@0 inputs: - version: '1.19' + version: '1.20' displayName: "Select Go Version" - template: ../steps/create-go-workspace.yml diff --git a/eng/pipelines/templates/jobs/mgmt-mock-test.yml b/eng/pipelines/templates/jobs/mgmt-mock-test.yml index d0eda1553772..6ac45250fd55 100644 --- a/eng/pipelines/templates/jobs/mgmt-mock-test.yml +++ b/eng/pipelines/templates/jobs/mgmt-mock-test.yml @@ -14,7 +14,7 @@ jobs: displayName: 'Install autorest' - task: GoTool@0 inputs: - version: '1.19' + version: '1.20' displayName: "Select Go Version" - template: /eng/pipelines/templates/steps/create-go-workspace.yml diff --git a/eng/pipelines/templates/stages/platform-matrix.json b/eng/pipelines/templates/stages/platform-matrix.json index fb9df86651f8..c1f1c63729e9 100644 --- a/eng/pipelines/templates/stages/platform-matrix.json +++ b/eng/pipelines/templates/stages/platform-matrix.json @@ -11,7 +11,9 @@ } }, "GoVersion": [ - "1.18.2" + "1.18.10", + "1.19.5", + "1.20" ] } } diff --git a/eng/pipelines/templates/variables/globals.yml b/eng/pipelines/templates/variables/globals.yml index 1010bf70cd16..071313330e97 100644 --- a/eng/pipelines/templates/variables/globals.yml +++ b/eng/pipelines/templates/variables/globals.yml @@ -1,5 +1,5 @@ variables: - GoLintCLIVersion: 'v1.48.0' + GoLintCLIVersion: 'v1.51.1' Package.EnableSBOMSigning: true # Enable go native component governance detection # https://docs.opensource.microsoft.com/tools/cg/index.html diff --git a/eng/scripts/automation_init.sh b/eng/scripts/automation_init.sh index ca6c73ca6917..c5bb546012c0 100644 --- a/eng/scripts/automation_init.sh +++ b/eng/scripts/automation_init.sh @@ -17,10 +17,10 @@ outputFile="$(realpath $outputFile)" echo "output json file: $outputFile" TMPDIR="/tmp" -if [ ! "$(go version | awk '{print $3}' | cut -c 3-6)" = "1.19" ] +if [ ! "$(go version | awk '{print $3}' | cut -c 3-6)" = "1.20" ] then - wget https://golang.org/dl/go1.19.linux-amd64.tar.gz - tar -C $TMPDIR -xzf go1.19.linux-amd64.tar.gz + wget https://golang.org/dl/go1.20.linux-amd64.tar.gz + tar -C $TMPDIR -xzf go1.20.linux-amd64.tar.gz export GOROOT=$TMPDIR/go export PATH=$GOROOT/bin:$PATH fi diff --git a/sdk/resourcemanager/internal/go.mod b/sdk/resourcemanager/internal/go.mod index 3eb23e49e6fa..cc6d02a5dc22 100644 --- a/sdk/resourcemanager/internal/go.mod +++ b/sdk/resourcemanager/internal/go.mod @@ -5,7 +5,7 @@ go 1.18 require ( github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.0 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.0.0 - github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 + github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.2 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.0.0 github.com/stretchr/testify v1.7.0 ) diff --git a/sdk/resourcemanager/internal/go.sum b/sdk/resourcemanager/internal/go.sum index 9a8fa60437af..87790b562164 100644 --- a/sdk/resourcemanager/internal/go.sum +++ b/sdk/resourcemanager/internal/go.sum @@ -2,8 +2,8 @@ github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.0 h1:Ut0ZGdOwJDw0npYEg+TLlPls3 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.0/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.0.0 h1:Yoicul8bnVdQrhDMTHxdEckRGX01XvwXDHUT9zYZ3k0= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.0.0/go.mod h1:+6sju8gk8FRmSajX3Oz4G5Gm7P+mbqE9FVaXXFYTkCM= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.2 h1:+5VZ72z0Qan5Bog5C+ZkgSqUbeVUd9wgtHOrIKuc5b8= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.2/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.0.0 h1:ECsQtyERDVz3NP3kvDOTLvbQhqWp/x9EsGKtb4ogUr8= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.0.0/go.mod h1:s1tW/At+xHqjNFvWU4G0c0Qv33KOhvbGNj0RCTQDV8s= github.com/AzureAD/microsoft-authentication-library-for-go v0.4.0 h1:WVsrXCnHlDDX8ls+tootqRE87/hL9S/g4ewig9RsD/c= diff --git a/sdk/resourcemanager/internal/testutil/helper.go b/sdk/resourcemanager/internal/testutil/helper.go index 68c17844baa1..35b8f188cd29 100644 --- a/sdk/resourcemanager/internal/testutil/helper.go +++ b/sdk/resourcemanager/internal/testutil/helper.go @@ -34,8 +34,8 @@ func GetEnv(key, fallback string) string { // a delegate function to delete the created resource group which can be used for clean up // and any error during the creation. func CreateResourceGroup(ctx context.Context, subscriptionId string, cred azcore.TokenCredential, options *arm.ClientOptions, location string) (*armresources.ResourceGroup, func() (*runtime.Poller[armresources.ResourceGroupsClientDeleteResponse], error), error) { - rand.Seed(time.Now().UnixNano()) - resourceGroupName := fmt.Sprintf("go-sdk-test-%d", rand.Intn(1000)) + r := rand.New(rand.NewSource(time.Now().UnixNano())) + resourceGroupName := fmt.Sprintf("go-sdk-test-%d", r.Intn(1000)) rgClient, err := armresources.NewResourceGroupsClient(subscriptionId, cred, options) if err != nil { return nil, nil, err diff --git a/sdk/resourcemanager/internal/testutil/recording.go b/sdk/resourcemanager/internal/testutil/recording.go index 9ba00fd0e15c..0b49b309ba9e 100644 --- a/sdk/resourcemanager/internal/testutil/recording.go +++ b/sdk/resourcemanager/internal/testutil/recording.go @@ -11,6 +11,7 @@ import ( "math/rand" "net/http" "strconv" + "strings" "testing" "time" @@ -21,8 +22,24 @@ import ( const recordingRandomSeedVariableName = "recordingRandomSeed" var ( - recordingRandomSeed int64 - letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") + recordingSeed int64 + recordingRandomSource rand.Source +) + +const ( + alphanumericBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" + alphanumericLowercaseBytes = "abcdefghijklmnopqrstuvwxyz1234567890" + randomSeedVariableName = "randomSeed" + nowVariableName = "now" + ModeEnvironmentVariableName = "AZURE_TEST_MODE" + recordingAssetConfigName = "assets.json" +) + +// Inspired by https://stackoverflow.com/questions/22892120/how-to-generate-a-random-string-of-a-fixed-length-in-go +const ( + letterIdxBits = 6 // 6 bits to represent a letter index + letterIdxMask = 1<= 0; { + if remain == 0 { + cache, remain = recordingRandomSource.Int63(), letterIdxMax + } + if lowercaseOnly { + if idx := int(cache & letterIdxMask); idx < len(alphanumericLowercaseBytes) { + sb.WriteByte(alphanumericLowercaseBytes[idx]) + i-- } - if recordingRandomSeed == 0 { - recordingRandomSeed = time.Now().Unix() + } else { + if idx := int(cache & letterIdxMask); idx < len(alphanumericBytes) { + sb.WriteByte(alphanumericBytes[idx]) + i-- } } - rand.Seed(recordingRandomSeed) - } else { - rand.Seed(time.Now().Unix()) - } - b := make([]rune, length) - for i := range b { - b[i] = letterRunes[rand.Intn(len(letterRunes))] + cache >>= letterIdxBits + remain-- } - return prefix + string(b) + str := sb.String() + return str } diff --git a/sdk/resourcemanager/internal/testutil/recording_test.go b/sdk/resourcemanager/internal/testutil/recording_test.go index 4e07ca4add5a..cd5b65b6c8fe 100644 --- a/sdk/resourcemanager/internal/testutil/recording_test.go +++ b/sdk/resourcemanager/internal/testutil/recording_test.go @@ -27,8 +27,8 @@ func TestRecordingPolicy(t *testing.T) { require.NoError(t, err) resp, err := pl.Do(req) require.NoError(t, err) - require.Equal(t, resp.StatusCode, http.StatusBadRequest) - require.Equal(t, resp.Request.URL.String(), testEndpoint) + require.Equal(t, http.StatusBadRequest, resp.StatusCode) + require.Equal(t, testEndpoint, resp.Request.URL.String()) } func TestStartStopRecording(t *testing.T) { @@ -39,6 +39,6 @@ func TestStartStopRecording(t *testing.T) { func TestGenerateAlphaNumericID(t *testing.T) { stop := StartRecording(t, pathToPackage) rnd := GenerateAlphaNumericID(t, "test", 6) - require.Equal(t, rnd, "testsUJVGl") + require.Equal(t, "testNlDAa8", rnd) defer stop() }