diff --git a/Makefile b/Makefile index b88067a..e399805 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,6 @@ GOLANGCI_LINT_PACKAGE ?= github.com/golangci/golangci-lint/cmd/golangci-lint@$(G XGO_PACKAGE ?= src.techknowlogick.com/xgo@latest GOTESTSUM_PACKAGE ?= gotest.tools/gotestsum@latest -GENERATE ?= XGO_VERSION := go-1.22.x XGO_TARGETS ?= linux/amd64,linux/arm-6,linux/arm-7,linux/arm64 @@ -65,11 +64,7 @@ lint: golangci-lint .PHONY: generate generate: - $(GO) generate $(GENERATE) - -.PHONY: generate-docs -generate-docs: - $(GO) generate ./cmd/$(EXECUTABLE)/flags.go + $(GO) generate $(PACKAGES) .PHONY: test test: diff --git a/cmd/wp-s3-action/docs.go b/cmd/wp-s3-action/docs.go deleted file mode 100644 index 114fe04..0000000 --- a/cmd/wp-s3-action/docs.go +++ /dev/null @@ -1,58 +0,0 @@ -//go:build generate -// +build generate - -package main - -import ( - "bytes" - "embed" - "fmt" - "os" - "text/template" - - "github.com/thegeeklab/wp-plugin-go/docs" - wp "github.com/thegeeklab/wp-plugin-go/plugin" - wp_template "github.com/thegeeklab/wp-plugin-go/template" - "github.com/thegeeklab/wp-s3-action/plugin" - "github.com/urfave/cli/v2" -) - -//go:embed templates/docs-data.yaml.tmpl -var yamlTemplate embed.FS - -func main() { - settings := &plugin.Settings{} - app := &cli.App{ - Flags: settingsFlags(settings, wp.FlagsPluginCategory), - } - - out, err := toYAML(app) - if err != nil { - panic(err) - } - - fi, err := os.Create("../../docs/data/data-raw.yaml") - if err != nil { - panic(err) - } - defer fi.Close() - if _, err := fi.WriteString(out); err != nil { - panic(err) - } -} - -func toYAML(app *cli.App) (string, error) { - var w bytes.Buffer - - yamlTmpl, err := template.New("docs").Funcs(wp_template.LoadFuncMap()).ParseFS(yamlTemplate, "templates/docs-data.yaml.tmpl") - if err != nil { - fmt.Println(yamlTmpl) - return "", err - } - - if err := yamlTmpl.ExecuteTemplate(&w, "docs-data.yaml.tmpl", docs.GetTemplateData(app)); err != nil { - return "", err - } - - return w.String(), nil -} diff --git a/cmd/wp-s3-action/flags.go b/cmd/wp-s3-action/flags.go deleted file mode 100644 index 4966e7f..0000000 --- a/cmd/wp-s3-action/flags.go +++ /dev/null @@ -1,150 +0,0 @@ -package main - -import ( - "github.com/thegeeklab/wp-plugin-go/types" - "github.com/thegeeklab/wp-s3-action/plugin" - - "github.com/urfave/cli/v2" -) - -// settingsFlags has the cli.Flags for the plugin.Settings. -// -//go:generate go run docs.go flags.go -func settingsFlags(settings *plugin.Settings, category string) []cli.Flag { - return []cli.Flag{ - &cli.StringFlag{ - Name: "endpoint", - Usage: "endpoint for the s3 connection", - EnvVars: []string{"PLUGIN_ENDPOINT", "S3_ENDPOINT"}, - Destination: &settings.Endpoint, - Category: category, - }, - &cli.StringFlag{ - Name: "access-key", - Usage: "s3 access key", - EnvVars: []string{"PLUGIN_ACCESS_KEY", "S3_ACCESS_KEY"}, - Destination: &settings.AccessKey, - Required: true, - Category: category, - }, - &cli.StringFlag{ - Name: "secret-key", - Usage: "s3 secret key", - EnvVars: []string{"PLUGIN_SECRET_KEY", "S3_SECRET_KEY"}, - Destination: &settings.SecretKey, - Required: true, - Category: category, - }, - &cli.BoolFlag{ - Name: "path-style", - Usage: "enable path style for bucket paths", - EnvVars: []string{"PLUGIN_PATH_STYLE"}, - Destination: &settings.PathStyle, - Category: category, - }, - &cli.StringFlag{ - Name: "bucket", - Usage: "name of the bucket", - EnvVars: []string{"PLUGIN_BUCKET"}, - Destination: &settings.Bucket, - Required: true, - Category: category, - }, - &cli.StringFlag{ - Name: "region", - Usage: "s3 region", - Value: "us-east-1", - EnvVars: []string{"PLUGIN_REGION"}, - Destination: &settings.Region, - Category: category, - }, - &cli.StringFlag{ - Name: "source", - Usage: "upload source path", - Value: ".", - EnvVars: []string{"PLUGIN_SOURCE"}, - Destination: &settings.Source, - Category: category, - }, - &cli.StringFlag{ - Name: "target", - Usage: "upload target path", - Value: "/", - EnvVars: []string{"PLUGIN_TARGET"}, - Destination: &settings.Target, - Category: category, - }, - &cli.BoolFlag{ - Name: "delete", - Usage: "delete locally removed files from the target", - EnvVars: []string{"PLUGIN_DELETE"}, - Destination: &settings.Delete, - Category: category, - }, - &cli.GenericFlag{ - Name: "acl", - Usage: "access control list", - EnvVars: []string{"PLUGIN_ACL"}, - Value: &types.StringMapFlag{}, - Category: category, - }, - &cli.GenericFlag{ - Name: "content-type", - Usage: "content-type settings for uploads", - EnvVars: []string{"PLUGIN_CONTENT_TYPE"}, - Value: &types.StringMapFlag{}, - Category: category, - }, - &cli.GenericFlag{ - Name: "content-encoding", - Usage: "content-encoding settings for uploads", - EnvVars: []string{"PLUGIN_CONTENT_ENCODING"}, - Value: &types.StringMapFlag{}, - Category: category, - }, - &cli.GenericFlag{ - Name: "cache-control", - Usage: "cache-control settings for uploads", - EnvVars: []string{"PLUGIN_CACHE_CONTROL"}, - Value: &types.StringMapFlag{}, - Category: category, - }, - &cli.GenericFlag{ - Name: "metadata", - Usage: "additional metadata for uploads", - EnvVars: []string{"PLUGIN_METADATA"}, - Value: &types.DeepStringMapFlag{}, - Category: category, - }, - &cli.GenericFlag{ - Name: "redirects", - Usage: "redirects to create", - EnvVars: []string{"PLUGIN_REDIRECTS"}, - Value: &types.MapFlag{}, - Category: category, - }, - &cli.StringFlag{ - Name: "cloudfront-distribution", - Usage: "ID of cloudfront distribution to invalidate", - EnvVars: []string{"PLUGIN_CLOUDFRONT_DISTRIBUTION"}, - Destination: &settings.CloudFrontDistribution, - Category: category, - }, - &cli.BoolFlag{ - Name: "dry-run", - Usage: "dry run disables api calls", - EnvVars: []string{"DRY_RUN", "PLUGIN_DRY_RUN"}, - Destination: &settings.DryRun, - Category: category, - }, - &cli.IntFlag{ - Name: "max-concurrency", - Usage: "customize number concurrent files to process", - //nolint:gomnd - Value: 100, - EnvVars: []string{"PLUGIN_MAX_CONCURRENCY"}, - Destination: &settings.MaxConcurrency, - Category: category, - }, - } -} diff --git a/cmd/wp-s3-action/main.go b/cmd/wp-s3-action/main.go index fb0d402..18ff2e3 100644 --- a/cmd/wp-s3-action/main.go +++ b/cmd/wp-s3-action/main.go @@ -1,11 +1,7 @@ package main import ( - "fmt" - "github.com/thegeeklab/wp-s3-action/plugin" - - wp "github.com/thegeeklab/wp-plugin-go/plugin" ) //nolint:gochecknoglobals @@ -15,14 +11,5 @@ var ( ) func main() { - settings := &plugin.Settings{} - options := wp.Options{ - Name: "wp-s3-action", - Description: "Perform S3 actions", - Version: BuildVersion, - VersionMetadata: fmt.Sprintf("date=%s", BuildDate), - Flags: settingsFlags(settings, wp.FlagsPluginCategory), - } - - plugin.New(options, settings).Run() + plugin.New(nil, BuildVersion, BuildDate).Run() } diff --git a/cmd/wp-s3-action/templates/docs-data.yaml.tmpl b/cmd/wp-s3-action/templates/docs-data.yaml.tmpl deleted file mode 100644 index e453a95..0000000 --- a/cmd/wp-s3-action/templates/docs-data.yaml.tmpl +++ /dev/null @@ -1,18 +0,0 @@ ---- -{{- if .GlobalArgs }} -properties: -{{- range $v := .GlobalArgs }} - - name: {{ $v.Name }} - {{- with $v.Description }} - description: | - {{ . | ToSentence }} - {{- end }} - {{- with $v.Type }} - type: {{ . }} - {{- end }} - {{- with $v.Default }} - defaultValue: {{ . }} - {{- end }} - required: {{ default false $v.Required }} -{{ end -}} -{{ end -}} diff --git a/docs/data/data.yaml b/docs/data/data.yaml index a6709a2..f74c732 100644 --- a/docs/data/data.yaml +++ b/docs/data/data.yaml @@ -55,6 +55,20 @@ properties: type: string required: false + - name: insecure_skip_verify + description: | + Skip SSL verification. + type: bool + defaultValue: false + required: false + + - name: log_level + description: | + Plugin log level. + type: string + defaultValue: "info" + required: false + - name: max_concurrency description: | Customize number concurrent files to process. diff --git a/go.mod b/go.mod index 73d2ebf..009e2f2 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/aws/aws-sdk-go v1.51.25 github.com/rs/zerolog v1.32.0 github.com/ryanuber/go-glob v1.0.0 - github.com/thegeeklab/wp-plugin-go v1.7.1 + github.com/thegeeklab/wp-plugin-go/v2 v2.3.1 github.com/urfave/cli/v2 v2.27.2 ) @@ -28,7 +28,7 @@ require ( github.com/shopspring/decimal v1.2.0 // indirect github.com/spf13/cast v1.3.1 // indirect github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913 // indirect - golang.org/x/crypto v0.22.0 // indirect - golang.org/x/net v0.24.0 // indirect - golang.org/x/sys v0.19.0 // indirect + golang.org/x/crypto v0.23.0 // indirect + golang.org/x/net v0.25.0 // indirect + golang.org/x/sys v0.20.0 // indirect ) diff --git a/go.sum b/go.sum index 198fc7f..b335fcd 100644 --- a/go.sum +++ b/go.sum @@ -54,8 +54,8 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/thegeeklab/wp-plugin-go v1.7.1 h1:zfR/rfNPuyVhXJu1fsLfp4+Mz2pTf6WwW/mIqw9750I= -github.com/thegeeklab/wp-plugin-go v1.7.1/go.mod h1:Ixi5plt9tpFGTu6yc/Inm5DcDpp3xPTeohfr86gf2EU= +github.com/thegeeklab/wp-plugin-go/v2 v2.3.1 h1:ARwYgTPZ5iPsmOenmqcCf8TjiEe8wBOHKO7H/Xshe48= +github.com/thegeeklab/wp-plugin-go/v2 v2.3.1/go.mod h1:0t8M8txtEFiaB6RqLX8vLrxkqAo5FT5Hx7dztN592D4= github.com/urfave/cli/v2 v2.27.2 h1:6e0H+AkS+zDckwPCUrZkKX38mRaau4nL2uipkJpbkcI= github.com/urfave/cli/v2 v2.27.2/go.mod h1:g0+79LmHHATl7DAcHO99smiR/T7uGLw84w8Y42x+4eM= github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913 h1:+qGGcbkzsfDQNPPe9UDgpxAWQrhbbBXOYJFQDq/dtJw= @@ -64,15 +64,15 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5t golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= -golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= -golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -84,8 +84,8 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= -golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= @@ -93,8 +93,8 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= diff --git a/internal/doc/main.go b/internal/doc/main.go new file mode 100644 index 0000000..aac9f8f --- /dev/null +++ b/internal/doc/main.go @@ -0,0 +1,42 @@ +//go:build generate +// +build generate + +package main + +import ( + "context" + "flag" + "net/http" + "os" + "time" + + "github.com/thegeeklab/wp-plugin-go/v2/docs" + "github.com/thegeeklab/wp-plugin-go/v2/template" + "github.com/thegeeklab/wp-s3-action/plugin" +) + +func main() { + tmpl := "https://raw.githubusercontent.com/thegeeklab/woodpecker-plugins/main/templates/docs-data.yaml.tmpl" + client := http.Client{ + Timeout: 30 * time.Second, + } + + p := plugin.New(nil) + + out, err := template.Render(context.Background(), client, tmpl, docs.GetTemplateData(p.App)) + if err != nil { + panic(err) + } + + outputFile := flag.String("output", "", "Output file path") + flag.Parse() + + if *outputFile == "" { + panic("no output file specified") + } + + err = os.WriteFile(*outputFile, []byte(out), 0o644) + if err != nil { + panic(err) + } +} diff --git a/plugin/plugin.go b/plugin/plugin.go index 1e4482a..cb60b41 100644 --- a/plugin/plugin.go +++ b/plugin/plugin.go @@ -1,9 +1,15 @@ package plugin import ( - wp "github.com/thegeeklab/wp-plugin-go/plugin" + "fmt" + + wp "github.com/thegeeklab/wp-plugin-go/v2/plugin" + "github.com/thegeeklab/wp-plugin-go/v2/types" + "github.com/urfave/cli/v2" ) +//go:generate go run ../internal/doc/main.go -output=../docs/data/data-raw.yaml + // Plugin implements provide the plugin implementation. type Plugin struct { *wp.Plugin @@ -45,13 +51,172 @@ type Result struct { err error } -func New(options wp.Options, settings *Settings) *Plugin { - p := &Plugin{} +func New(e wp.ExecuteFunc, build ...string) *Plugin { + p := &Plugin{ + Settings: &Settings{}, + } - options.Execute = p.run + options := wp.Options{ + Name: "wp-s3-action", + Description: "Perform S3 actions", + Flags: Flags(p.Settings, wp.FlagsPluginCategory), + Execute: p.run, + HideWoodpeckerFlags: true, + } + + if len(build) > 0 { + options.Version = build[0] + } + + if len(build) > 1 { + options.VersionMetadata = fmt.Sprintf("date=%s", build[1]) + } + + if e != nil { + options.Execute = e + } p.Plugin = wp.New(options) - p.Settings = settings return p } + +// Flags returns a slice of CLI flags for the plugin. +func Flags(settings *Settings, category string) []cli.Flag { + return []cli.Flag{ + &cli.StringFlag{ + Name: "endpoint", + Usage: "endpoint for the s3 connection", + EnvVars: []string{"PLUGIN_ENDPOINT", "S3_ENDPOINT"}, + Destination: &settings.Endpoint, + Category: category, + }, + &cli.StringFlag{ + Name: "access-key", + Usage: "s3 access key", + EnvVars: []string{"PLUGIN_ACCESS_KEY", "S3_ACCESS_KEY"}, + Destination: &settings.AccessKey, + Required: true, + Category: category, + }, + &cli.StringFlag{ + Name: "secret-key", + Usage: "s3 secret key", + EnvVars: []string{"PLUGIN_SECRET_KEY", "S3_SECRET_KEY"}, + Destination: &settings.SecretKey, + Required: true, + Category: category, + }, + &cli.BoolFlag{ + Name: "path-style", + Usage: "enable path style for bucket paths", + EnvVars: []string{"PLUGIN_PATH_STYLE"}, + Destination: &settings.PathStyle, + Category: category, + }, + &cli.StringFlag{ + Name: "bucket", + Usage: "name of the bucket", + EnvVars: []string{"PLUGIN_BUCKET"}, + Destination: &settings.Bucket, + Required: true, + Category: category, + }, + &cli.StringFlag{ + Name: "region", + Usage: "s3 region", + Value: "us-east-1", + EnvVars: []string{"PLUGIN_REGION"}, + Destination: &settings.Region, + Category: category, + }, + &cli.StringFlag{ + Name: "source", + Usage: "upload source path", + Value: ".", + EnvVars: []string{"PLUGIN_SOURCE"}, + Destination: &settings.Source, + Category: category, + }, + &cli.StringFlag{ + Name: "target", + Usage: "upload target path", + Value: "/", + EnvVars: []string{"PLUGIN_TARGET"}, + Destination: &settings.Target, + Category: category, + }, + &cli.BoolFlag{ + Name: "delete", + Usage: "delete locally removed files from the target", + EnvVars: []string{"PLUGIN_DELETE"}, + Destination: &settings.Delete, + Category: category, + }, + &cli.GenericFlag{ + Name: "acl", + Usage: "access control list", + EnvVars: []string{"PLUGIN_ACL"}, + Value: &types.StringMapFlag{}, + Category: category, + }, + &cli.GenericFlag{ + Name: "content-type", + Usage: "content-type settings for uploads", + EnvVars: []string{"PLUGIN_CONTENT_TYPE"}, + Value: &types.StringMapFlag{}, + Category: category, + }, + &cli.GenericFlag{ + Name: "content-encoding", + Usage: "content-encoding settings for uploads", + EnvVars: []string{"PLUGIN_CONTENT_ENCODING"}, + Value: &types.StringMapFlag{}, + Category: category, + }, + &cli.GenericFlag{ + Name: "cache-control", + Usage: "cache-control settings for uploads", + EnvVars: []string{"PLUGIN_CACHE_CONTROL"}, + Value: &types.StringMapFlag{}, + Category: category, + }, + &cli.GenericFlag{ + Name: "metadata", + Usage: "additional metadata for uploads", + EnvVars: []string{"PLUGIN_METADATA"}, + Value: &types.DeepStringMapFlag{}, + Category: category, + }, + &cli.GenericFlag{ + Name: "redirects", + Usage: "redirects to create", + EnvVars: []string{"PLUGIN_REDIRECTS"}, + Value: &types.MapFlag{}, + Category: category, + }, + &cli.StringFlag{ + Name: "cloudfront-distribution", + Usage: "ID of cloudfront distribution to invalidate", + EnvVars: []string{"PLUGIN_CLOUDFRONT_DISTRIBUTION"}, + Destination: &settings.CloudFrontDistribution, + Category: category, + }, + &cli.BoolFlag{ + Name: "dry-run", + Usage: "dry run disables api calls", + EnvVars: []string{"DRY_RUN", "PLUGIN_DRY_RUN"}, + Destination: &settings.DryRun, + Category: category, + }, + &cli.IntFlag{ + Name: "max-concurrency", + Usage: "customize number concurrent files to process", + //nolint:gomnd + Value: 100, + EnvVars: []string{"PLUGIN_MAX_CONCURRENCY"}, + Destination: &settings.MaxConcurrency, + Category: category, + }, + } +}