diff --git a/go.mod b/go.mod index 10938b4..a1119b9 100644 --- a/go.mod +++ b/go.mod @@ -2,6 +2,7 @@ module github.com/drone-plugins/drone-s3 require ( github.com/aws/aws-sdk-go v1.16.17 + github.com/bmatcuk/doublestar v1.1.1 github.com/joho/godotenv v1.3.0 github.com/mattn/go-zglob v0.0.1 github.com/sirupsen/logrus v1.3.0 diff --git a/go.sum b/go.sum index 0745407..2aa1ac9 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ github.com/aws/aws-sdk-go v1.16.17 h1:hHRKZhoB4qEY17aGNp71UxQFyYpx6WZXGMUzx9y/A4w= github.com/aws/aws-sdk-go v1.16.17/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/bmatcuk/doublestar v1.1.1 h1:YroD6BJCZBYx06yYFEWvUuKVWQn3vLLQAVmDmvTSaiQ= +github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= diff --git a/main.go b/main.go index 39e1158..1013825 100644 --- a/main.go +++ b/main.go @@ -100,7 +100,7 @@ func main() { }, cli.StringFlag{ Name: "target-remove", - Usage: "regex for which files to remove from target", + Usage: "glob for which files to remove from target", EnvVar: "PLUGIN_TARGET_REMOVE", }, } diff --git a/plugin.go b/plugin.go index 8bc529d..ad51aa0 100644 --- a/plugin.go +++ b/plugin.go @@ -4,7 +4,6 @@ import ( "mime" "os" "path/filepath" - "regexp" "strings" "github.com/aws/aws-sdk-go/aws" @@ -12,6 +11,7 @@ import ( "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3" "github.com/mattn/go-zglob" + "github.com/bmatcuk/doublestar" log "github.com/sirupsen/logrus" ) @@ -75,7 +75,7 @@ type Plugin struct { PathStyle bool // Dry run without uploading/ DryRun bool - // Regex for which files to remove from target + // Glob for which files to remove from target TargetRemove string } @@ -118,21 +118,13 @@ func (p *Plugin) Exec() error { } if len(p.TargetRemove) != 0 { - reg, regexperr := regexp.Compile(p.TargetRemove) - if regexperr != nil { - log.WithFields(log.Fields{ - "error": regexperr, - "regexp": p.TargetRemove, - }).Error("Regular expression failed to compile") - return regexperr - } log.WithFields(log.Fields{ - "regexp": p.TargetRemove, - }).Info("Deleting files according to regexp") + "glob": p.TargetRemove, + }).Info("Deleting files according to glob") - log.Info("Listing files in bucket") // @ToDo: Log.Debug + log.Info("Listing files in bucket") list_input := &s3.ListObjectsInput{ Bucket: &p.Bucket, } @@ -148,7 +140,18 @@ func (p *Plugin) Exec() error { var to_remove []string for _, object := range s3_objects.Contents { filename := object.Key - if reg.MatchString(*filename) { + + globmatch, globerr := doublestar.PathMatch(p.TargetRemove, *filename) + + if (globerr != nil) { + log.WithFields(log.Fields{ + "error": globerr, + "glob": p.TargetRemove, + }).Error("Error with provided glob") + return globerr + } + + if (globmatch) { to_remove = append(to_remove, *filename) } }