Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package digger-cli for openSUSE:Factory checked in at 2025-02-12 21:35:49 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/digger-cli (Old) and /work/SRC/openSUSE:Factory/.digger-cli.new.8181 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "digger-cli" Wed Feb 12 21:35:49 2025 rev:6 rq:1245227 version:0.6.85 Changes: -------- --- /work/SRC/openSUSE:Factory/digger-cli/digger-cli.changes 2025-02-07 23:12:51.892954969 +0100 +++ /work/SRC/openSUSE:Factory/.digger-cli.new.8181/digger-cli.changes 2025-02-12 21:36:50.291365611 +0100 @@ -1,0 +2,7 @@ +Wed Feb 12 06:43:30 UTC 2025 - opensuse_buildserv...@ojkastl.de + +- Update to version 0.6.85: + * support encrypted s3 bucket for plan uploads (#1882) + * remove unused methods (#1881) + +------------------------------------------------------------------- Old: ---- digger-cli-0.6.84.obscpio New: ---- digger-cli-0.6.85.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ digger-cli.spec ++++++ --- /var/tmp/diff_new_pack.1fICgw/_old 2025-02-12 21:36:52.295448213 +0100 +++ /var/tmp/diff_new_pack.1fICgw/_new 2025-02-12 21:36:52.299448379 +0100 @@ -19,7 +19,7 @@ %define executable_name digger Name: digger-cli -Version: 0.6.84 +Version: 0.6.85 Release: 0 Summary: CLI for the digger open source IaC orchestration tool License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.1fICgw/_old 2025-02-12 21:36:52.335449862 +0100 +++ /var/tmp/diff_new_pack.1fICgw/_new 2025-02-12 21:36:52.339450027 +0100 @@ -6,7 +6,7 @@ <param name="exclude">go.mod</param> <param name="exclude">go.work</param> <param name="exclude">go.work.sum</param> - <param name="revision">v0.6.84</param> + <param name="revision">v0.6.85</param> <param name="match-tag">v*</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.1fICgw/_old 2025-02-12 21:36:52.363451016 +0100 +++ /var/tmp/diff_new_pack.1fICgw/_new 2025-02-12 21:36:52.367451182 +0100 @@ -1,7 +1,7 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/diggerhq/digger</param> - <param name="changesrevision">7deabf0b5ed958526064be735c821fc5cfda6361</param></service><service name="tar_scm"> + <param name="changesrevision">ba401407d70a06fcd7f1020c368387465f6e2a93</param></service><service name="tar_scm"> <param name="url">https://github.com/johanneskastl/digger</param> <param name="changesrevision">8fe377068e53e2050ff4c745388d8428d2b13bb0</param></service></servicedata> (No newline at EOF) ++++++ digger-cli-0.6.84.obscpio -> digger-cli-0.6.85.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/digger-cli-0.6.84/action.yml new/digger-cli-0.6.85/action.yml --- old/digger-cli-0.6.84/action.yml 2025-02-04 19:48:40.000000000 +0100 +++ new/digger-cli-0.6.85/action.yml 2025-02-11 20:27:13.000000000 +0100 @@ -100,6 +100,18 @@ upload-plan-destination-s3-bucket: description: Name of the destination bucket for AWS S3. Should be provided if destination == aws required: false + upload-plan-destination-s3-encryption-enabled: + description: If encryption is to be enabled for s3 bucket + required: false + default: "false" + upload-plan-destination-s3-encryption-type: + description: the type of encryption to use for the S3 bucket, either AES256 or KMS + required: false + default: "AES256" + upload-plan-destination-s3-encryption-kms-key-id: + description: for encryption of type KMS you need to specify the KMS key ID to use + required: false + upload-plan-destination-gcp-bucket: description: Name of the destination bucket for a GCP bucket. Should be provided if destination == gcp required: false @@ -367,6 +379,9 @@ shell: bash env: PLAN_UPLOAD_DESTINATION: ${{ inputs.upload-plan-destination }} + PLAN_UPLOAD_S3_ENCRYPTION_ENABLED: ${{ inputs.upload-plan-destination-s3-encryption-enabled }} + PLAN_UPLOAD_S3_ENCRYPTION_TYPE: ${{ inputs.upload-plan-destination-s3-encryption-type }} + PLAN_UPLOAD_S3_ENCRYPTION_KMS_ID: ${{ inputs.upload-plan-destination-s3-encryption-kms-key-id }} GOOGLE_STORAGE_LOCK_BUCKET: ${{ inputs.google-lock-bucket }} GOOGLE_STORAGE_PLAN_ARTEFACT_BUCKET: ${{ inputs.upload-plan-destination-gcp-bucket }} AWS_S3_BUCKET: ${{ inputs.upload-plan-destination-s3-bucket }} @@ -404,6 +419,9 @@ env: actionref: ${{ github.action_ref }} PLAN_UPLOAD_DESTINATION: ${{ inputs.upload-plan-destination }} + PLAN_UPLOAD_S3_ENCRYPTION_ENABLED: ${{ inputs.upload-plan-destination-s3-encryption-enabled }} + PLAN_UPLOAD_S3_ENCRYPTION_TYPE: ${{ inputs.upload-plan-destination-s3-encryption-type }} + PLAN_UPLOAD_S3_ENCRYPTION_KMS_ID: ${{ inputs.upload-plan-destination-s3-encryption-kms-key-id }} GOOGLE_STORAGE_LOCK_BUCKET: ${{ inputs.google-lock-bucket }} GOOGLE_STORAGE_PLAN_ARTEFACT_BUCKET: ${{ inputs.upload-plan-destination-gcp-bucket }} AWS_S3_BUCKET: ${{ inputs.upload-plan-destination-s3-bucket }} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/digger-cli-0.6.84/cli/cmd/digger/main.go new/digger-cli-0.6.85/cli/cmd/digger/main.go --- old/digger-cli-0.6.84/cli/cmd/digger/main.go 2025-02-04 19:48:40.000000000 +0100 +++ new/digger-cli-0.6.85/cli/cmd/digger/main.go 2025-02-11 20:27:13.000000000 +0100 @@ -2,57 +2,11 @@ import ( "fmt" - "github.com/diggerhq/digger/cli/pkg/digger" "github.com/diggerhq/digger/cli/pkg/usage" - core_backend "github.com/diggerhq/digger/libs/backendapi" - "github.com/diggerhq/digger/libs/ci" - "github.com/diggerhq/digger/libs/comment_utils/reporting" - "github.com/diggerhq/digger/libs/comment_utils/summary" - "github.com/diggerhq/digger/libs/digger_config" - core_locking "github.com/diggerhq/digger/libs/locking" - core_policy "github.com/diggerhq/digger/libs/policy" - "github.com/diggerhq/digger/libs/scheduler" - "github.com/diggerhq/digger/libs/storage" "log" "os" ) -func exec(actor string, projectName string, repoNamespace string, command string, prNumber int, lock core_locking.Lock, policyChecker core_policy.Checker, prService ci.PullRequestService, orgService ci.OrgService, reporter reporting.Reporter, backendApi core_backend.Api) { - - //SCMOrganisation, SCMrepository := utils.ParseRepoNamespace(runConfig.RepoNamespace) - currentDir, err := os.Getwd() - if err != nil { - - usage.ReportErrorAndExit(actor, fmt.Sprintf("Failed to get current dir. %s", err), 4) - - } - - planStorage, err := storage.NewPlanStorage("", "", "", nil) - if err != nil { - - usage.ReportErrorAndExit(actor, fmt.Sprintf("Failed to get plan storage. %s", err), 4) - - } - - changedFiles, err := prService.GetChangedFiles(prNumber) - if err != nil { - usage.ReportErrorAndExit(actor, fmt.Sprintf("could not get changed files: %v", err), 1) - } - diggerConfig, _, dependencyGraph, err := digger_config.LoadDiggerConfig("./", true, changedFiles) - if err != nil { - usage.ReportErrorAndExit(actor, fmt.Sprintf("Failed to load digger config. %s", err), 4) - } - //impactedProjects := diggerConfig.GetModifiedProjects(strings.Split(runConfig.FilesChanged, ",")) - impactedProjects := diggerConfig.GetProjects(projectName) - jobs, _, err := scheduler.ConvertProjectsToJobs(actor, repoNamespace, command, prNumber, impactedProjects, nil, diggerConfig.Workflows) - if err != nil { - usage.ReportErrorAndExit(actor, fmt.Sprintf("Failed to convert impacted projects to commands. %s", err), 4) - } - - jobs = digger.SortedCommandsByDependency(jobs, &dependencyGraph) - _, _, err = digger.RunJobs(jobs, prService, orgService, lock, reporter, planStorage, policyChecker, comment_updater.NoopCommentUpdater{}, backendApi, "", false, false, "123", currentDir) -} - /* Exit codes: 0 - No errors @@ -77,26 +31,6 @@ } -func getImpactedProjectsAsString(projects []digger_config.Project, prNumber int) string { - msg := fmt.Sprintf("Following projects are impacted by pull request #%d\n", prNumber) - for _, p := range projects { - msg += fmt.Sprintf("- %s\n", p.Name) - } - return msg -} - -func logCommands(projectCommands []scheduler.Job) { - logMessage := fmt.Sprintf("Following commands are going to be executed:\n") - for _, pc := range projectCommands { - logMessage += fmt.Sprintf("project: %s: commands: ", pc.ProjectName) - for _, c := range pc.Commands { - logMessage += fmt.Sprintf("\"%s\", ", c) - } - logMessage += "\n" - } - log.Print(logMessage) -} - func init() { log.SetOutput(os.Stdout) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/digger-cli-0.6.84/libs/storage/aws_plan_storage.go new/digger-cli-0.6.85/libs/storage/aws_plan_storage.go --- old/digger-cli-0.6.84/libs/storage/aws_plan_storage.go 2025-02-04 19:48:40.000000000 +0100 +++ new/digger-cli-0.6.85/libs/storage/aws_plan_storage.go 2025-02-11 20:27:13.000000000 +0100 @@ -24,12 +24,53 @@ DeleteObject(ctx context.Context, params *s3.DeleteObjectInput, optFns ...func(*s3.Options)) (*s3.DeleteObjectOutput, error) } +type AwsS3EncryptionType string + +const ( + ServerSideEncryptionAes256 AwsS3EncryptionType = "AES256" + ServerSideEncryptionAwsKms AwsS3EncryptionType = "aws:kms" +) + type PlanStorageAWS struct { - Client S3Client - Bucket string - Context context.Context + Client S3Client + Bucket string + Context context.Context + EncryptionEnabled bool + EncryptionType AwsS3EncryptionType + KMSEncryptionId string } +func NewAWSPlanStorage(bucketName string, encryptionEnabled bool, encryptionType string, KMSEncryptionId string) (*PlanStorageAWS, error) { + if bucketName == "" { + return nil, fmt.Errorf("AWS_S3_BUCKET is not defined") + } + ctx, client, err := GetAWSStorageClient() + if err != nil { + return nil, fmt.Errorf("could not retrieve aws storage client") + } + planStorage := &PlanStorageAWS{ + Context: ctx, + Client: client, + Bucket: bucketName, + } + if encryptionEnabled { + planStorage.EncryptionEnabled = true + if encryptionType == "AES256" { + planStorage.EncryptionType = ServerSideEncryptionAes256 + } else if encryptionType == "KMS" { + if KMSEncryptionId == "" { + return nil, fmt.Errorf("KMS encryption requested but no KMS key specified") + } + planStorage.EncryptionType = ServerSideEncryptionAwsKms + planStorage.KMSEncryptionId = KMSEncryptionId + } else { + return nil, fmt.Errorf("unknown encryption type specified for aws plan bucket: %v", encryptionType) + } + } + + return planStorage, nil + +} func (psa *PlanStorageAWS) PlanExists(artifactName, storedPlanFilePath string) (bool, error) { input := &s3.HeadObjectInput{ Bucket: aws.String(psa.Bucket), @@ -59,6 +100,15 @@ Bucket: aws.String(psa.Bucket), Key: aws.String(fileName), } + + // support for encryption + if psa.EncryptionEnabled { + input.ServerSideEncryption = types.ServerSideEncryption(psa.EncryptionType) + if psa.EncryptionType == ServerSideEncryptionAwsKms { + input.SSEKMSKeyId = aws.String(psa.KMSEncryptionId) + } + } + _, err := psa.Client.PutObject(psa.Context, input) if err != nil { log.Printf("Failed to write file to bucket: %v", err) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/digger-cli-0.6.84/libs/storage/plan_storage.go new/digger-cli-0.6.85/libs/storage/plan_storage.go --- old/digger-cli-0.6.84/libs/storage/plan_storage.go 2025-02-04 19:48:40.000000000 +0100 +++ new/digger-cli-0.6.85/libs/storage/plan_storage.go 2025-02-11 20:27:13.000000000 +0100 @@ -235,18 +235,14 @@ Context: ctx, } case uploadDestination == "aws": - ctx, client, err := GetAWSStorageClient() - if err != nil { - return nil, fmt.Errorf(fmt.Sprintf("Failed to create AWS storage client: %s", err)) - } bucketName := strings.ToLower(os.Getenv("AWS_S3_BUCKET")) - if bucketName == "" { - return nil, fmt.Errorf("AWS_S3_BUCKET is not defined") - } - planStorage = &PlanStorageAWS{ - Context: ctx, - Client: client, - Bucket: bucketName, + encryptionEnabled := os.Getenv("PLAN_UPLOAD_S3_ENCRYPTION_ENABLED") == "true" + encryptionType := os.Getenv("PLAN_UPLOAD_S3_ENCRYPTION_TYPE") + encryptionKmsId := os.Getenv("PLAN_UPLOAD_S3_ENCRYPTION_KMS_ID") + var err error + planStorage, err = NewAWSPlanStorage(bucketName, encryptionEnabled, encryptionType, encryptionKmsId) + if err != nil { + return nil, fmt.Errorf("error while creating AWS plan storage: %v", err) } case uploadDestination == "gitlab": //TODO implement me ++++++ digger-cli.obsinfo ++++++ --- /var/tmp/diff_new_pack.1fICgw/_old 2025-02-12 21:36:53.219486300 +0100 +++ /var/tmp/diff_new_pack.1fICgw/_new 2025-02-12 21:36:53.219486300 +0100 @@ -1,5 +1,5 @@ name: digger-cli -version: 0.6.84 -mtime: 1738694920 -commit: 7deabf0b5ed958526064be735c821fc5cfda6361 +version: 0.6.85 +mtime: 1739302033 +commit: ba401407d70a06fcd7f1020c368387465f6e2a93 ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/digger-cli/vendor.tar.gz /work/SRC/openSUSE:Factory/.digger-cli.new.8181/vendor.tar.gz differ: char 5, line 1