drone-s3-sync/main.go

135 lines
3.4 KiB
Go
Raw Normal View History

2015-10-16 20:09:45 +00:00
package main
import (
2016-08-23 20:46:57 +00:00
"fmt"
2015-10-16 20:09:45 +00:00
"os"
"github.com/Sirupsen/logrus"
"github.com/joho/godotenv"
2016-07-31 17:36:58 +00:00
"github.com/urfave/cli"
2015-10-16 20:09:45 +00:00
)
2016-08-23 20:46:57 +00:00
var build = "0" // build number set at compile-time
2015-10-16 20:09:45 +00:00
func main() {
2016-07-22 00:27:25 +00:00
app := cli.NewApp()
app.Name = "s3 sync plugin"
app.Usage = "s3 sync plugin"
app.Action = run
2016-08-23 20:46:57 +00:00
app.Version = fmt.Sprintf("1.0.%s", build)
2016-07-22 00:27:25 +00:00
app.Flags = []cli.Flag{
cli.StringFlag{
Name: "access-key",
Usage: "aws access key",
EnvVar: "PLUGIN_ACCESS_KEY,AWS_ACCESS_KEY_ID",
},
cli.StringFlag{
Name: "secret-key",
Usage: "aws secret key",
EnvVar: "PLUGIN_SECRET_KEY,AWS_SECRET_ACCESS_KEY",
},
cli.StringFlag{
Name: "bucket",
Usage: "name of bucket",
EnvVar: "PLUGIN_BUCKET",
},
cli.StringFlag{
Name: "region",
Usage: "aws region",
Value: "us-east-1",
EnvVar: "PLUGIN_REGION",
},
cli.StringFlag{
Name: "source",
Usage: "upload source path",
Value: ".",
EnvVar: "PLUGIN_SOURCE",
},
cli.StringFlag{
Name: "target",
Usage: "target path",
Value: "/",
EnvVar: "PLUGIN_TARGET",
},
cli.BoolFlag{
Name: "delete",
Usage: "delete locally removed files from the target",
EnvVar: "PLUGIN_DELETE",
},
cli.GenericFlag{
Name: "access",
Usage: "access control settings",
2016-11-19 10:57:33 +00:00
EnvVar: "PLUGIN_ACCESS,PLUGIN_ACL",
2016-07-22 00:27:25 +00:00
Value: &StringMapFlag{},
},
cli.GenericFlag{
Name: "content-type",
Usage: "content-type settings for uploads",
EnvVar: "PLUGIN_CONTENT_TYPE",
Value: &StringMapFlag{},
},
cli.GenericFlag{
Name: "content-encoding",
Usage: "content-encoding settings for uploads",
EnvVar: "PLUGIN_CONTENT_ENCODING",
Value: &StringMapFlag{},
},
2016-10-19 17:56:28 +00:00
cli.GenericFlag{
Name: "cache-control",
Usage: "cache-control settings for uploads",
EnvVar: "PLUGIN_CACHE_CONTROL",
Value: &StringMapFlag{},
},
2016-07-22 00:27:25 +00:00
cli.GenericFlag{
Name: "metadata",
Usage: "additional metadata for uploads",
EnvVar: "PLUGIN_METADATA",
Value: &DeepStringMapFlag{},
},
cli.GenericFlag{
Name: "redirects",
Usage: "redirects to create",
EnvVar: "PLUGIN_REDIRECTS",
Value: &MapFlag{},
},
cli.StringFlag{
Name: "cloudfront-distribution",
Usage: "id of cloudfront distribution to invalidate",
EnvVar: "PLUGIN_CLOUDFRONT_DISTRIBUTION",
},
cli.StringFlag{
Name: "env-file",
Usage: "source env file",
},
2016-07-22 00:27:25 +00:00
}
if err := app.Run(os.Args); err != nil {
logrus.Fatal(err)
2016-03-10 01:22:54 +00:00
}
}
2016-03-10 01:22:54 +00:00
2016-07-22 00:27:25 +00:00
func run(c *cli.Context) error {
if c.String("env-file") != "" {
_ = godotenv.Load(c.String("env-file"))
}
2016-07-22 00:27:25 +00:00
plugin := Plugin{
Key: c.String("access-key"),
Secret: c.String("secret-key"),
Bucket: c.String("bucket"),
Region: c.String("region"),
Source: c.String("source"),
Target: c.String("target"),
Delete: c.Bool("delete"),
Access: c.Generic("access").(*StringMapFlag).Get(),
2016-10-19 17:56:28 +00:00
CacheControl: c.Generic("cache-control").(*StringMapFlag).Get(),
2016-07-22 00:27:25 +00:00
ContentType: c.Generic("content-type").(*StringMapFlag).Get(),
ContentEncoding: c.Generic("content-encoding").(*StringMapFlag).Get(),
Metadata: c.Generic("metadata").(*DeepStringMapFlag).Get(),
Redirects: c.Generic("redirects").(*MapFlag).Get(),
CloudFrontDistribution: c.String("cloudfront-distribution"),
}
return plugin.Exec()
}