diff --git a/card.go b/card.go index 5b8cd6bd..d89e5a0b 100644 --- a/card.go +++ b/card.go @@ -5,7 +5,6 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "os" "os/exec" "path" @@ -70,7 +69,7 @@ func writeCard(path string, card interface{}) { case path == "/dev/stderr": writeCardTo(os.Stderr, data) case path != "": - ioutil.WriteFile(path, data, 0644) + os.WriteFile(path, data, 0644) } } diff --git a/cmd/drone-acr/main.go b/cmd/drone-acr/main.go index 4688f8dd..a8525192 100644 --- a/cmd/drone-acr/main.go +++ b/cmd/drone-acr/main.go @@ -5,7 +5,6 @@ import ( "encoding/base64" "encoding/json" "fmt" - "io/ioutil" "net/http" "net/url" "os" @@ -238,7 +237,7 @@ func setupACRCert(cert, certPath string) error { if err != nil { return errors.Wrap(err, "failed to base64 decode ACR certificate") } - err = ioutil.WriteFile(certPath, decoded, 0644) + err = os.WriteFile(certPath, decoded, 0644) if err != nil { return errors.Wrap(err, "failed to write ACR certificate") } diff --git a/cmd/drone-ecr/main.go b/cmd/drone-ecr/main.go index 431b0903..a6c33095 100644 --- a/cmd/drone-ecr/main.go +++ b/cmd/drone-ecr/main.go @@ -1,9 +1,9 @@ package main import ( + "context" "encoding/base64" "fmt" - "io/ioutil" "log" "os" "os/exec" @@ -13,17 +13,18 @@ import ( "github.com/joho/godotenv" "github.com/sirupsen/logrus" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/credentials/stscreds" - "github.com/aws/aws-sdk-go/aws/session" - "github.com/aws/aws-sdk-go/service/ecr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/config" + "github.com/aws/aws-sdk-go-v2/credentials/stscreds" + "github.com/aws/aws-sdk-go-v2/service/ecr" + "github.com/aws/aws-sdk-go-v2/service/ecr/types" + "github.com/aws/aws-sdk-go-v2/service/sts" docker "github.com/drone-plugins/drone-docker" ) type ecrAPI interface { - DescribeImages(*ecr.DescribeImagesInput) (*ecr.DescribeImagesOutput, error) + DescribeImages(ctx context.Context, params *ecr.DescribeImagesInput, optFns ...func(*ecr.Options)) (*ecr.DescribeImagesOutput, error) } const defaultRegion = "us-east-1" @@ -62,13 +63,14 @@ func main() { os.Setenv("AWS_SECRET_ACCESS_KEY", secret) } - sess, err := session.NewSession(&aws.Config{Region: ®ion}) + ctx := context.Background() + cfg, err := config.LoadDefaultConfig(ctx, config.WithRegion(region)) if err != nil { - log.Fatal(fmt.Sprintf("error creating aws session: %v", err)) + log.Fatal(fmt.Sprintf("error creating aws config: %v", err)) } - svc := getECRClient(sess, assumeRole, externalId, idToken) - username, password, defaultRegistry, err := getAuthInfo(svc) + svc := getECRClient(ctx, cfg, assumeRole, externalId, idToken) + username, password, defaultRegistry, err := getAuthInfo(ctx, svc) if registry == "" { registry = defaultRegistry @@ -83,32 +85,32 @@ func main() { } if create { - err = ensureRepoExists(svc, trimHostname(repo, registry), scanOnPush) + err = ensureRepoExists(ctx, svc, trimHostname(repo, registry), scanOnPush) if err != nil { log.Fatal(fmt.Sprintf("error creating ECR repo: %v", err)) } - err = updateImageScannningConfig(svc, trimHostname(repo, registry), scanOnPush) + err = updateImageScannningConfig(ctx, svc, trimHostname(repo, registry), scanOnPush) if err != nil { log.Fatal(fmt.Sprintf("error updating scan on push for ECR repo: %v", err)) } } if lifecyclePolicy != "" { - p, err := ioutil.ReadFile(lifecyclePolicy) + p, err := os.ReadFile(lifecyclePolicy) if err != nil { log.Fatal(err) } - if err := uploadLifeCyclePolicy(svc, string(p), trimHostname(repo, registry)); err != nil { + if err := uploadLifeCyclePolicy(ctx, svc, string(p), trimHostname(repo, registry)); err != nil { log.Fatal(fmt.Sprintf("error uploading ECR lifecycle policy: %v", err)) } } if repositoryPolicy != "" { - p, err := ioutil.ReadFile(repositoryPolicy) + p, err := os.ReadFile(repositoryPolicy) if err != nil { log.Fatal(err) } - if err := uploadRepositoryPolicy(svc, string(p), trimHostname(repo, registry)); err != nil { + if err := uploadRepositoryPolicy(ctx, svc, string(p), trimHostname(repo, registry)); err != nil { log.Fatal(fmt.Sprintf("error uploading ECR repository policy. %v", err)) } } @@ -136,7 +138,7 @@ func main() { repositoryName := trimHostname(repo, registry) for _, t := range tags { - exists, err := tagExists(svc, repositoryName, t) + exists, err := tagExists(ctx, svc, repositoryName, t) if err != nil { logrus.Fatalf("Error checking if image exists for tag %s: %v", t, err) } @@ -162,13 +164,18 @@ func trimHostname(repo, registry string) string { return repo } -func ensureRepoExists(svc *ecr.ECR, name string, scanOnPush bool) (err error) { - input := &ecr.CreateRepositoryInput{} - input.SetRepositoryName(name) - input.SetImageScanningConfiguration(&ecr.ImageScanningConfiguration{ScanOnPush: &scanOnPush}) - _, err = svc.CreateRepository(input) +func ensureRepoExists(ctx context.Context, svc *ecr.Client, name string, scanOnPush bool) (err error) { + input := &ecr.CreateRepositoryInput{ + RepositoryName: aws.String(name), + ImageScanningConfiguration: &types.ImageScanningConfiguration{ + ScanOnPush: scanOnPush, + }, + } + _, err = svc.CreateRepository(ctx, input) if err != nil { - if aerr, ok := err.(awserr.Error); ok && aerr.Code() == ecr.ErrCodeRepositoryAlreadyExistsException { + // Check if repository already exists + var repoExistsErr *types.RepositoryAlreadyExistsException + if isErrorType(err, &repoExistsErr) { // eat it, we skip checking for existing to save two requests err = nil } @@ -177,38 +184,61 @@ func ensureRepoExists(svc *ecr.ECR, name string, scanOnPush bool) (err error) { return } -func updateImageScannningConfig(svc *ecr.ECR, name string, scanOnPush bool) (err error) { - input := &ecr.PutImageScanningConfigurationInput{} - input.SetRepositoryName(name) - input.SetImageScanningConfiguration(&ecr.ImageScanningConfiguration{ScanOnPush: &scanOnPush}) - _, err = svc.PutImageScanningConfiguration(input) +func isErrorType[T error](err error, target *T) bool { + if err == nil { + return false + } + for err != nil { + if matched, ok := err.(T); ok { + *target = matched + return true + } + if unwrapper, ok := err.(interface{ Unwrap() error }); ok { + err = unwrapper.Unwrap() + } else { + break + } + } + return false +} + +func updateImageScannningConfig(ctx context.Context, svc *ecr.Client, name string, scanOnPush bool) (err error) { + input := &ecr.PutImageScanningConfigurationInput{ + RepositoryName: aws.String(name), + ImageScanningConfiguration: &types.ImageScanningConfiguration{ + ScanOnPush: scanOnPush, + }, + } + _, err = svc.PutImageScanningConfiguration(ctx, input) return err } -func uploadLifeCyclePolicy(svc *ecr.ECR, lifecyclePolicy string, name string) (err error) { - input := &ecr.PutLifecyclePolicyInput{} - input.SetLifecyclePolicyText(lifecyclePolicy) - input.SetRepositoryName(name) - _, err = svc.PutLifecyclePolicy(input) +func uploadLifeCyclePolicy(ctx context.Context, svc *ecr.Client, lifecyclePolicy string, name string) (err error) { + input := &ecr.PutLifecyclePolicyInput{ + LifecyclePolicyText: aws.String(lifecyclePolicy), + RepositoryName: aws.String(name), + } + _, err = svc.PutLifecyclePolicy(ctx, input) return err } -func uploadRepositoryPolicy(svc *ecr.ECR, repositoryPolicy string, name string) (err error) { - input := &ecr.SetRepositoryPolicyInput{} - input.SetPolicyText(repositoryPolicy) - input.SetRepositoryName(name) - _, err = svc.SetRepositoryPolicy(input) +func uploadRepositoryPolicy(ctx context.Context, svc *ecr.Client, repositoryPolicy string, name string) (err error) { + input := &ecr.SetRepositoryPolicyInput{ + PolicyText: aws.String(repositoryPolicy), + RepositoryName: aws.String(name), + } + _, err = svc.SetRepositoryPolicy(ctx, input) return err } -func getAuthInfo(svc *ecr.ECR) (username, password, registry string, err error) { +func getAuthInfo(ctx context.Context, svc *ecr.Client) (username, password, registry string, err error) { var result *ecr.GetAuthorizationTokenOutput var decoded []byte - result, err = svc.GetAuthorizationToken(&ecr.GetAuthorizationTokenInput{}) + result, err = svc.GetAuthorizationToken(ctx, &ecr.GetAuthorizationTokenInput{}) if err != nil { return } @@ -247,11 +277,13 @@ func getenv(key ...string) (s string) { return } -func getECRClient(sess *session.Session, role string, externalId string, idToken string) *ecr.ECR { +func getECRClient(ctx context.Context, cfg aws.Config, role string, externalId string, idToken string) *ecr.Client { if role == "" { - return ecr.New(sess) + return ecr.NewFromConfig(cfg) } + stsClient := sts.NewFromConfig(cfg) + if idToken != "" { tempFile, err := os.CreateTemp("/tmp", "idToken-*.jwt") if err != nil { @@ -268,31 +300,34 @@ func getECRClient(sess *session.Session, role string, externalId string, idToken } // Create credentials using the path to the ID token file - creds := stscreds.NewWebIdentityCredentials(sess, role, "", tempFile.Name()) - return ecr.New(sess, &aws.Config{Credentials: creds}) + creds := stscreds.NewWebIdentityRoleProvider(stsClient, role, stscreds.IdentityTokenFile(tempFile.Name())) + cfg.Credentials = aws.NewCredentialsCache(creds) + return ecr.NewFromConfig(cfg) } else if externalId != "" { - return ecr.New(sess, &aws.Config{ - Credentials: stscreds.NewCredentials(sess, role, func(p *stscreds.AssumeRoleProvider) { - p.ExternalID = &externalId - }), + creds := stscreds.NewAssumeRoleProvider(stsClient, role, func(o *stscreds.AssumeRoleOptions) { + o.ExternalID = &externalId }) + cfg.Credentials = aws.NewCredentialsCache(creds) + return ecr.NewFromConfig(cfg) } else { - return ecr.New(sess, &aws.Config{ - Credentials: stscreds.NewCredentials(sess, role), - }) + creds := stscreds.NewAssumeRoleProvider(stsClient, role) + cfg.Credentials = aws.NewCredentialsCache(creds) + return ecr.NewFromConfig(cfg) } } -func tagExists(svc ecrAPI, repository, tag string) (bool, error) { +func tagExists(ctx context.Context, svc ecrAPI, repository, tag string) (bool, error) { input := &ecr.DescribeImagesInput{ RepositoryName: aws.String(repository), - ImageIds: []*ecr.ImageIdentifier{ + ImageIds: []types.ImageIdentifier{ {ImageTag: aws.String(tag)}, }, } - output, err := svc.DescribeImages(input) + output, err := svc.DescribeImages(ctx, input) if err != nil { - if aerr, ok := err.(awserr.Error); ok && aerr.Code() == "ImageNotFoundException" { + // Check if image not found + var imageNotFoundErr *types.ImageNotFoundException + if isErrorType(err, &imageNotFoundErr) { return false, nil } return false, err diff --git a/go.mod b/go.mod index 8fc588df..77efb5fc 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,11 @@ module github.com/drone-plugins/drone-docker require ( github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 - github.com/aws/aws-sdk-go v1.26.7 + github.com/aws/aws-sdk-go-v2 v1.32.6 + github.com/aws/aws-sdk-go-v2/config v1.28.6 + github.com/aws/aws-sdk-go-v2/credentials v1.17.47 + github.com/aws/aws-sdk-go-v2/service/ecr v1.36.6 + github.com/aws/aws-sdk-go-v2/service/sts v1.33.2 github.com/coreos/go-semver v0.3.0 github.com/dchest/uniuri v1.2.0 github.com/drone-plugins/drone-plugin-lib v0.4.1 @@ -22,6 +26,15 @@ require ( cloud.google.com/go/compute/metadata v0.3.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.24.7 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6 // indirect + github.com/aws/smithy-go v1.22.1 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/golang-jwt/jwt/v5 v5.2.1 // indirect @@ -31,7 +44,7 @@ require ( github.com/google/uuid v1.6.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.1 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect - github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pmezard/go-difflib v1.0.0 // indirect @@ -44,10 +57,7 @@ require ( google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect google.golang.org/grpc v1.59.0 // indirect google.golang.org/protobuf v1.31.0 // indirect - gopkg.in/yaml.v2 v2.2.8 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) -go 1.24 - -toolchain go1.24.11 +go 1.25 diff --git a/go.sum b/go.sum index 8fbd4cc8..6f3b90ca 100644 --- a/go.sum +++ b/go.sum @@ -15,8 +15,34 @@ github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mo github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3 h1:H5xDQaE3XowWfhZRUpnfC+rGZMEVoSiji+b+/HFAPU4= github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/aws/aws-sdk-go v1.26.7 h1:ObjEnmzvSdYy8KVd3me7v/UMyCn81inLy2SyoIPoBkg= -github.com/aws/aws-sdk-go v1.26.7/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go-v2 v1.32.6 h1:7BokKRgRPuGmKkFMhEg/jSul+tB9VvXhcViILtfG8b4= +github.com/aws/aws-sdk-go-v2 v1.32.6/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U= +github.com/aws/aws-sdk-go-v2/config v1.28.6 h1:D89IKtGrs/I3QXOLNTH93NJYtDhm8SYa9Q5CsPShmyo= +github.com/aws/aws-sdk-go-v2/config v1.28.6/go.mod h1:GDzxJ5wyyFSCoLkS+UhGB0dArhb9mI+Co4dHtoTxbko= +github.com/aws/aws-sdk-go-v2/credentials v1.17.47 h1:48bA+3/fCdi2yAwVt+3COvmatZ6jUDNkDTIsqDiMUdw= +github.com/aws/aws-sdk-go-v2/credentials v1.17.47/go.mod h1:+KdckOejLW3Ks3b0E3b5rHsr2f9yuORBum0WPnE5o5w= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21 h1:AmoU1pziydclFT/xRV+xXE/Vb8fttJCLRPv8oAkprc0= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21/go.mod h1:AjUdLYe4Tgs6kpH4Bv7uMZo7pottoyHMn4eTcIcneaY= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25 h1:s/fF4+yDQDoElYhfIVvSNyeCydfbuTKzhxSXDXCPasU= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25/go.mod h1:IgPfDv5jqFIzQSNbUEMoitNooSMXjRSDkhXv8jiROvU= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25 h1:ZntTCl5EsYnhN/IygQEUugpdwbhdkom9uHcbCftiGgA= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25/go.mod h1:DBdPrgeocww+CSl1C8cEV8PN1mHMBhuCDLpXezyvWkE= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= +github.com/aws/aws-sdk-go-v2/service/ecr v1.36.6 h1:zg+3FGHA0PBs0KM25qE/rOf2o5zsjNa1g/Qq83+SDI0= +github.com/aws/aws-sdk-go-v2/service/ecr v1.36.6/go.mod h1:ZSq54Z9SIsOTf1Efwgw1msilSs4XVEfVQiP9nYVnKpM= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhvDxB6kPvEXgsDhGaZCSC6LQET5ZHSdJozeI0Y= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6 h1:50+XsN70RS7dwJ2CkVNXzj7U2L1HKP8nqTd3XWEXBN4= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6/go.mod h1:WqgLmwY7so32kG01zD8CPTJWVWM+TzJoOVHwTg4aPug= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.7 h1:rLnYAfXQ3YAccocshIH5mzNNwZBkBo+bP6EhIxak6Hw= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.7/go.mod h1:ZHtuQJ6t9A/+YDuxOLnbryAmITtr8UysSny3qcyvJTc= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6 h1:JnhTZR3PiYDNKlXy50/pNeix9aGMo6lLpXwJ1mw8MD4= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6/go.mod h1:URronUEGfXZN1VpdktPSD1EkAL9mfrV+2F4sjH38qOY= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.2 h1:s4074ZO1Hk8qv65GqNXqDjmkf4HSQqJukaLuuW0TpDA= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.2/go.mod h1:mVggCnIWoM09jP71Wh+ea7+5gAp53q+49wDFs1SW5z8= +github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro= +github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -81,8 +107,10 @@ github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56 github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= github.com/inhies/go-bytesize v0.0.0-20210819104631-275770b98743 h1:X3Xxno5Ji8idrNiUoFc7QyXpqhSYlDRYQmc7mlpMBzU= github.com/inhies/go-bytesize v0.0.0-20210819104631-275770b98743/go.mod h1:KrtyD5PFj++GKkFS/7/RRrfnRhAMGQwy75GLCHWrCNs= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6 h1:IsMZxCuZqKuao2vNdfD82fjjgPLfyHLpR41Z88viRWs= diff --git a/internal/docker/config_test.go b/internal/docker/config_test.go index 8ce3c9a2..7f70c91d 100644 --- a/internal/docker/config_test.go +++ b/internal/docker/config_test.go @@ -2,7 +2,6 @@ package docker import ( "encoding/json" - "io/ioutil" "os" "path/filepath" "testing" @@ -28,7 +27,7 @@ func TestConfig(t *testing.T) { c.SetCredHelper(RegistryECRPublic, "ecr-login") assert.Equal(t, "ecr-login", c.CredHelpers[RegistryECRPublic]) - tempDir, err := ioutil.TempDir("", "docker-config-test") + tempDir, err := os.MkdirTemp("", "docker-config-test") assert.NoError(t, err) defer os.RemoveAll(tempDir) @@ -49,10 +48,10 @@ func TestConfig(t *testing.T) { assert.NoError(t, err) configPath := filepath.Join(tempDir, "config.json") - err = ioutil.WriteFile(configPath, jsonBytes, 0644) + err = os.WriteFile(configPath, jsonBytes, 0644) assert.NoError(t, err) - data, err := ioutil.ReadFile(configPath) + data, err := os.ReadFile(configPath) assert.NoError(t, err) var configFromFile Config