diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c875fbd --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.idea/ +bin/ diff --git a/Gopkg.lock b/Gopkg.lock new file mode 100644 index 0000000..25044fb --- /dev/null +++ b/Gopkg.lock @@ -0,0 +1,549 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + digest = "1:08636edd4ac1b095a9689b7a07763aa70e035068e0ff0e9dbfe2b6299b98e498" + name = "cloud.google.com/go" + packages = [ + "compute/metadata", + "iam", + "internal", + "internal/optional", + "internal/trace", + "internal/version", + "storage", + ] + pruneopts = "UT" + revision = "0ebda48a7f143b1cce9eb37a8c1106ac762a3430" + version = "v0.34.0" + +[[projects]] + digest = "1:b92928b73320648b38c93cacb9082c0fe3f8ac3383ad9bd537eef62c380e0e7a" + name = "contrib.go.opencensus.io/exporter/ocagent" + packages = ["."] + pruneopts = "UT" + revision = "00af367e65149ff1f2f4b93bbfbb84fd9297170d" + version = "v0.2.0" + +[[projects]] + digest = "1:227964d777ac9173bb8dd54b6263f0e8422cb8855c2bf25a5bfff1189f4aa782" + name = "github.com/Azure/azure-sdk-for-go" + packages = [ + "storage", + "version", + ] + pruneopts = "UT" + revision = "199e71492c8f8ffb9d1d9432d425a1c8731fba19" + version = "v23.2.0" + +[[projects]] + digest = "1:e6c692a2dd5f978216331f2ab41b45dfdf01d5b2a74c596a9f69bcef77b7d67b" + name = "github.com/Azure/go-autorest" + packages = [ + "autorest", + "autorest/adal", + "autorest/azure", + "autorest/date", + "logger", + "tracing", + ] + pruneopts = "UT" + revision = "be17756531f50014397912b7aa557ec335e39b98" + version = "v11.3.0" + +[[projects]] + digest = "1:ff9e31957c708496aab0d0414b6c714ce1d1cb5680c71a5042808d5cac11bb3d" + name = "github.com/aliyun/aliyun-oss-go-sdk" + packages = ["oss"] + pruneopts = "UT" + revision = "6a25665e652ab9d931e957f9c5d47aca81a2fbf1" + version = "1.9.3" + +[[projects]] + digest = "1:93cfabd8a17236b9797b7d1f49688587aa4b93ca8f3651ea4f55a60e7dd9fcde" + name = "github.com/aws/aws-sdk-go" + packages = [ + "aws", + "aws/awserr", + "aws/awsutil", + "aws/client", + "aws/client/metadata", + "aws/corehandlers", + "aws/credentials", + "aws/credentials/ec2rolecreds", + "aws/credentials/endpointcreds", + "aws/credentials/processcreds", + "aws/credentials/stscreds", + "aws/csm", + "aws/defaults", + "aws/ec2metadata", + "aws/endpoints", + "aws/request", + "aws/session", + "aws/signer/v4", + "internal/ini", + "internal/s3err", + "internal/sdkio", + "internal/sdkrand", + "internal/sdkuri", + "internal/shareddefaults", + "private/protocol", + "private/protocol/eventstream", + "private/protocol/eventstream/eventstreamapi", + "private/protocol/query", + "private/protocol/query/queryutil", + "private/protocol/rest", + "private/protocol/restxml", + "private/protocol/xml/xmlutil", + "service/s3", + "service/s3/s3iface", + "service/s3/s3manager", + "service/sts", + ] + pruneopts = "UT" + revision = "aabf189db35ba7eb5a35afe6d681fc0f70954fca" + version = "v1.16.18" + +[[projects]] + digest = "1:65b0d980b428a6ad4425f2df4cd5410edd81f044cf527bd1c345368444649e58" + name = "github.com/census-instrumentation/opencensus-proto" + packages = [ + "gen-go/agent/common/v1", + "gen-go/agent/trace/v1", + "gen-go/resource/v1", + "gen-go/trace/v1", + ] + pruneopts = "UT" + revision = "7f2434bc10da710debe5c4315ed6d4df454b4024" + version = "v0.1.0" + +[[projects]] + digest = "1:55cf369f451dacdc745ea339171e59c30e7c02b6d4dae1963c64c81d8bc6af07" + name = "github.com/chartmuseum/storage" + packages = ["."] + pruneopts = "UT" + revision = "1b93b965ed4312faba0edd08c0b2ca3e8a86b175" + version = "v0.2.0" + +[[projects]] + digest = "1:76dc72490af7174349349838f2fe118996381b31ea83243812a97e5a0fd5ed55" + name = "github.com/dgrijalva/jwt-go" + packages = ["."] + pruneopts = "UT" + revision = "06ea1031745cb8b3dab3f6a236daf2b0aa468b7e" + version = "v3.2.0" + +[[projects]] + digest = "1:abeb38ade3f32a92943e5be54f55ed6d6e3b6602761d74b4aab4c9dd45c18abd" + name = "github.com/fsnotify/fsnotify" + packages = ["."] + pruneopts = "UT" + revision = "c2828203cd70a50dcccfb2761f8b1f8ceef9a8e9" + version = "v1.4.7" + +[[projects]] + digest = "1:ad53d1f710522a38d1f0e5e0a55a194b1c6b2cd8e84313568e43523271f0cf62" + name = "github.com/go-redis/redis" + packages = [ + ".", + "internal", + "internal/consistenthash", + "internal/hashtag", + "internal/pool", + "internal/proto", + "internal/util", + ] + pruneopts = "UT" + revision = "22be8a3eaf992c828cecb69dc07348313bf08d2e" + version = "v6.15.1" + +[[projects]] + digest = "1:588beb9f80d2b0afddf05663b32d01c867da419458b560471d81cca0286e76b8" + name = "github.com/golang/protobuf" + packages = [ + "proto", + "protoc-gen-go/descriptor", + "ptypes", + "ptypes/any", + "ptypes/duration", + "ptypes/timestamp", + "ptypes/wrappers", + ] + pruneopts = "UT" + revision = "aa810b61a9c79d51363740d207bb46cf8e620ed5" + version = "v1.2.0" + +[[projects]] + digest = "1:cd9864c6366515827a759931746738ede6079faa08df9c584596370d6add135c" + name = "github.com/googleapis/gax-go" + packages = [ + ".", + "v2", + ] + pruneopts = "UT" + revision = "c8a15bac9b9fe955bd9f900272f9a306465d28cf" + version = "v2.0.3" + +[[projects]] + branch = "master" + digest = "1:fc8536ac84519a1cb7aeae390921f92debc96ed42d222976790bf9c82bb01e8d" + name = "github.com/gophercloud/gophercloud" + packages = [ + ".", + "openstack", + "openstack/identity/v2/tenants", + "openstack/identity/v2/tokens", + "openstack/identity/v3/tokens", + "openstack/objectstorage/v1/accounts", + "openstack/objectstorage/v1/objects", + "openstack/utils", + "pagination", + ] + pruneopts = "UT" + revision = "b9ea9cb68cf5803ea1567c404b549a783c8264b2" + +[[projects]] + digest = "1:c0d19ab64b32ce9fe5cf4ddceba78d5bc9807f0016db6b1183599da3dcc24d10" + name = "github.com/hashicorp/hcl" + packages = [ + ".", + "hcl/ast", + "hcl/parser", + "hcl/printer", + "hcl/scanner", + "hcl/strconv", + "hcl/token", + "json/parser", + "json/scanner", + "json/token", + ] + pruneopts = "UT" + revision = "8cb6e5b959231cc1119e43259c4a608f9c51a241" + version = "v1.0.0" + +[[projects]] + digest = "1:b83c16cd8ec7a698a95b8e19d201bdad16f16d3953ee8e4de6acaac7476b4e40" + name = "github.com/helm/chartmuseum" + packages = [ + "pkg/cache", + "pkg/config", + ] + pruneopts = "UT" + revision = "76bd6ee936e68485dad8b44c2ef071bf36645689" + version = "v0.8.0" + +[[projects]] + digest = "1:bb81097a5b62634f3e9fec1014657855610c82d19b9a40c17612e32651e35dca" + name = "github.com/jmespath/go-jmespath" + packages = ["."] + pruneopts = "UT" + revision = "c2b33e84" + +[[projects]] + digest = "1:c568d7727aa262c32bdf8a3f7db83614f7af0ed661474b24588de635c20024c7" + name = "github.com/magiconair/properties" + packages = ["."] + pruneopts = "UT" + revision = "c2353362d570a7bfa228149c62842019201cfb71" + version = "v1.8.0" + +[[projects]] + digest = "1:4e878df5f4e9fd625bf9c9aac77ef7cbfa4a74c01265505527c23470c0e40300" + name = "github.com/marstr/guid" + packages = ["."] + pruneopts = "UT" + revision = "8bd9a64bf37eb297b492a4101fb28e80ac0b290f" + version = "v1.1.0" + +[[projects]] + digest = "1:53bc4cd4914cd7cd52139990d5170d6dc99067ae31c56530621b18b35fc30318" + name = "github.com/mitchellh/mapstructure" + packages = ["."] + pruneopts = "UT" + revision = "3536a929edddb9a5b34bd6861dc4a9647cb459fe" + version = "v1.1.2" + +[[projects]] + digest = "1:13cef5ff0a8e0ebac1cc7214ec611dc4d2d3530111a997e50639a1015b89a0c9" + name = "github.com/oracle/oci-go-sdk" + packages = [ + "common", + "common/auth", + "objectstorage", + ] + pruneopts = "UT" + revision = "ed3815483589bcd6598fddfd86cfd09756818653" + version = "v3.4.0" + +[[projects]] + digest = "1:95741de3af260a92cc5c7f3f3061e85273f5a81b5db20d4bd68da74bd521675e" + name = "github.com/pelletier/go-toml" + packages = ["."] + pruneopts = "UT" + revision = "c01d1270ff3e442a8a57cddc1c92dc1138598194" + version = "v1.2.0" + +[[projects]] + digest = "1:274f67cb6fed9588ea2521ecdac05a6d62a8c51c074c1fccc6a49a40ba80e925" + name = "github.com/satori/go.uuid" + packages = ["."] + pruneopts = "UT" + revision = "f58768cc1a7a7e77a3bd49e98cdd21419399b6a3" + version = "v1.2.0" + +[[projects]] + digest = "1:d707dbc1330c0ed177d4642d6ae102d5e2c847ebd0eb84562d0dc4f024531cfc" + name = "github.com/spf13/afero" + packages = [ + ".", + "mem", + ] + pruneopts = "UT" + revision = "a5d6946387efe7d64d09dcba68cdd523dc1273a3" + version = "v1.2.0" + +[[projects]] + digest = "1:08d65904057412fc0270fc4812a1c90c594186819243160dc779a402d4b6d0bc" + name = "github.com/spf13/cast" + packages = ["."] + pruneopts = "UT" + revision = "8c9545af88b134710ab1cd196795e7f2388358d7" + version = "v1.3.0" + +[[projects]] + digest = "1:68ea4e23713989dc20b1bded5d9da2c5f9be14ff9885beef481848edd18c26cb" + name = "github.com/spf13/jwalterweatherman" + packages = ["."] + pruneopts = "UT" + revision = "4a4406e478ca629068e7768fc33f3f044173c0a6" + version = "v1.0.0" + +[[projects]] + digest = "1:c1b1102241e7f645bc8e0c22ae352e8f0dc6484b6cb4d132fa9f24174e0119e2" + name = "github.com/spf13/pflag" + packages = ["."] + pruneopts = "UT" + revision = "298182f68c66c05229eb03ac171abe6e309ee79a" + version = "v1.0.3" + +[[projects]] + digest = "1:de37e343c64582d7026bf8ab6ac5b22a72eac54f3a57020db31524affed9f423" + name = "github.com/spf13/viper" + packages = ["."] + pruneopts = "UT" + revision = "6d33b5a963d922d182c91e8a1c88d81fd150cfd4" + version = "v1.3.1" + +[[projects]] + digest = "1:b24d38b282bacf9791408a080f606370efa3d364e4b5fd9ba0f7b87786d3b679" + name = "github.com/urfave/cli" + packages = ["."] + pruneopts = "UT" + revision = "cfb38830724cc34fedffe9a2a29fb54fa9169cd1" + version = "v1.20.0" + +[[projects]] + digest = "1:2ae8314c44cd413cfdb5b1df082b350116dd8d2fff973e62c01b285b7affd89e" + name = "go.opencensus.io" + packages = [ + ".", + "exemplar", + "internal", + "internal/tagencoding", + "plugin/ochttp", + "plugin/ochttp/propagation/b3", + "plugin/ochttp/propagation/tracecontext", + "stats", + "stats/internal", + "stats/view", + "tag", + "trace", + "trace/internal", + "trace/propagation", + "trace/tracestate", + ] + pruneopts = "UT" + revision = "b7bf3cdb64150a8c8c53b769fdeb2ba581bd4d4b" + version = "v0.18.0" + +[[projects]] + branch = "master" + digest = "1:470efb06ada11351d90ee09868d84c622cc949a59c165b99d33d555dacbde74b" + name = "golang.org/x/net" + packages = [ + "context", + "context/ctxhttp", + "http/httpguts", + "http2", + "http2/hpack", + "idna", + "internal/timeseries", + "trace", + ] + pruneopts = "UT" + revision = "915654e7eabcea33ae277abbecf52f0d8b7a9fdc" + +[[projects]] + branch = "master" + digest = "1:c58bbfb91df5a7eae08cb9894f9897165f254e459f07666986cd448f9be4ad35" + name = "golang.org/x/oauth2" + packages = [ + ".", + "google", + "internal", + "jws", + "jwt", + ] + pruneopts = "UT" + revision = "36a7019397c4c86cf59eeab3bc0d188bac444277" + +[[projects]] + branch = "master" + digest = "1:75515eedc0dc2cb0b40372008b616fa2841d831c63eedd403285ff286c593295" + name = "golang.org/x/sync" + packages = ["semaphore"] + pruneopts = "UT" + revision = "37e7f081c4d4c64e13b10787722085407fe5d15f" + +[[projects]] + branch = "master" + digest = "1:91137b48dc3eb34409f731b49f63a5ebf73218168a065e1a93af24eb5b2f99e8" + name = "golang.org/x/sys" + packages = ["unix"] + pruneopts = "UT" + revision = "48ac38b7c8cbedd50b1613c0fccacfc7d88dfcdf" + +[[projects]] + digest = "1:a2ab62866c75542dd18d2b069fec854577a20211d7c0ea6ae746072a1dccdd18" + name = "golang.org/x/text" + packages = [ + "collate", + "collate/build", + "internal/colltab", + "internal/gen", + "internal/tag", + "internal/triegen", + "internal/ucd", + "language", + "secure/bidirule", + "transform", + "unicode/bidi", + "unicode/cldr", + "unicode/norm", + "unicode/rangetable", + ] + pruneopts = "UT" + revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" + version = "v0.3.0" + +[[projects]] + branch = "master" + digest = "1:a1cf8d8998e00f48726bbf95dc969621439477ad7e2aa10f60330a0b0d35c937" + name = "google.golang.org/api" + packages = [ + "gensupport", + "googleapi", + "googleapi/internal/uritemplates", + "googleapi/transport", + "internal", + "iterator", + "option", + "storage/v1", + "support/bundler", + "transport/http", + "transport/http/internal/propagation", + ] + pruneopts = "UT" + revision = "455dee39f703f70d67ceea7c56a61041712c1447" + +[[projects]] + digest = "1:fa026a5c59bd2df343ec4a3538e6288dcf4e2ec5281d743ae82c120affe6926a" + name = "google.golang.org/appengine" + packages = [ + ".", + "internal", + "internal/app_identity", + "internal/base", + "internal/datastore", + "internal/log", + "internal/modules", + "internal/remote_api", + "internal/urlfetch", + "urlfetch", + ] + pruneopts = "UT" + revision = "e9657d882bb81064595ca3b56cbe2546bbabf7b1" + version = "v1.4.0" + +[[projects]] + branch = "master" + digest = "1:a7d48ca460ca1b4f6ccd8c95502443afa05df88aee84de7dbeb667a8754e8fa6" + name = "google.golang.org/genproto" + packages = [ + "googleapis/api/annotations", + "googleapis/iam/v1", + "googleapis/rpc/code", + "googleapis/rpc/status", + ] + pruneopts = "UT" + revision = "db91494dd46c1fdcbbde05e5ff5eb56df8f7d79a" + +[[projects]] + digest = "1:9edd250a3c46675d0679d87540b30c9ed253b19bd1fd1af08f4f5fb3c79fc487" + name = "google.golang.org/grpc" + packages = [ + ".", + "balancer", + "balancer/base", + "balancer/roundrobin", + "binarylog/grpc_binarylog_v1", + "codes", + "connectivity", + "credentials", + "credentials/internal", + "encoding", + "encoding/proto", + "grpclog", + "internal", + "internal/backoff", + "internal/binarylog", + "internal/channelz", + "internal/envconfig", + "internal/grpcrand", + "internal/grpcsync", + "internal/syscall", + "internal/transport", + "keepalive", + "metadata", + "naming", + "peer", + "resolver", + "resolver/dns", + "resolver/passthrough", + "stats", + "status", + "tap", + ] + pruneopts = "UT" + revision = "df014850f6dee74ba2fc94874043a9f3f75fbfd8" + version = "v1.17.0" + +[[projects]] + digest = "1:4d2e5a73dc1500038e504a8d78b986630e3626dc027bc030ba5c75da257cdb96" + name = "gopkg.in/yaml.v2" + packages = ["."] + pruneopts = "UT" + revision = "51d6538a90f86fe93ac480b35f37b2be17fef232" + version = "v2.2.2" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + input-imports = [ + "github.com/chartmuseum/storage", + "github.com/helm/chartmuseum/pkg/cache", + "github.com/helm/chartmuseum/pkg/config", + "github.com/urfave/cli", + ] + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml new file mode 100644 index 0000000..b15793b --- /dev/null +++ b/Gopkg.toml @@ -0,0 +1,15 @@ +[[constraint]] + name = "github.com/helm/chartmuseum" + version = "0.8.0" + +[[constraint]] + name = "github.com/chartmuseum/storage" + version = "0.2.0" + +[[constraint]] + name = "github.com/urfave/cli" + version = "1.20.0" + +[prune] + go-tests = true + unused-packages = true diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5d38df4 --- /dev/null +++ b/Makefile @@ -0,0 +1,31 @@ +VERSION=0.1.0 +REVISION := $(shell git rev-parse --short HEAD;) + +CLI_EXE=chart-scanner +CLI_PKG=github.com/jdolitsky/chart-scanner/cmd/chart-scanner + +.PHONY: build +build: build-linux build-mac build-windows + +build-windows: + GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go build -v \ + --ldflags="-w -X main.Version=$(VERSION) -X main.Revision=$(REVISION)" \ + -o bin/windows/amd64/$(CLI_EXE) $(CLI_PKG) # windows + +build-linux: + GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -v \ + --ldflags="-w -X main.Version=$(VERSION) -X main.Revision=$(REVISION)" \ + -o bin/linux/amd64/$(CLI_EXE) $(CLI_PKG) # linux + +build-mac: + GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 go build -v \ + --ldflags="-w -X main.Version=$(VERSION) -X main.Revision=$(REVISION)" \ + -o bin/darwin/amd64/$(CLI_EXE) $(CLI_PKG) # mac osx + +.PHONY: clean +clean: + git status --ignored --short | grep '^!! ' | sed 's/!! //' | xargs rm -rf + +.PHONY: get-version +get-version: + @echo $(VERSION) diff --git a/cmd/chart-scanner/backends.go b/cmd/chart-scanner/backends.go new file mode 100644 index 0000000..d5fae18 --- /dev/null +++ b/cmd/chart-scanner/backends.go @@ -0,0 +1,121 @@ +package main + +// Pretty much copy-paste from chartmuseum cmd/ + +import ( + "fmt" + "log" + "strings" + + "github.com/chartmuseum/storage" + "github.com/helm/chartmuseum/pkg/config" +) + +func backendFromConfig(conf *config.Config) storage.Backend { + crashIfConfigMissingVars(conf, []string{"storage.backend"}) + + var backend storage.Backend + + storageFlag := strings.ToLower(conf.GetString("storage.backend")) + switch storageFlag { + case "local": + backend = localBackendFromConfig(conf) + case "amazon": + backend = amazonBackendFromConfig(conf) + case "google": + backend = googleBackendFromConfig(conf) + case "oracle": + backend = oracleBackendFromConfig(conf) + case "microsoft": + backend = microsoftBackendFromConfig(conf) + case "alibaba": + backend = alibabaBackendFromConfig(conf) + case "openstack": + backend = openstackBackendFromConfig(conf) + default: + log.Fatal("Unsupported storage backend: ", storageFlag) + } + + return backend +} + +func localBackendFromConfig(conf *config.Config) storage.Backend { + crashIfConfigMissingVars(conf, []string{"storage.local.rootdir"}) + return storage.Backend(storage.NewLocalFilesystemBackend( + conf.GetString("storage.local.rootdir"), + )) +} + +func amazonBackendFromConfig(conf *config.Config) storage.Backend { + // If using alternative s3 endpoint (e.g. Minio) default region to us-east-1 + if conf.GetString("storage.amazon.endpoint") != "" && conf.GetString("storage.amazon.region") == "" { + conf.Set("storage.amazon.region", "us-east-1") + } + crashIfConfigMissingVars(conf, []string{"storage.amazon.bucket", "storage.amazon.region"}) + return storage.Backend(storage.NewAmazonS3Backend( + conf.GetString("storage.amazon.bucket"), + conf.GetString("storage.amazon.prefix"), + conf.GetString("storage.amazon.region"), + conf.GetString("storage.amazon.endpoint"), + conf.GetString("storage.amazon.sse"), + )) +} + +func googleBackendFromConfig(conf *config.Config) storage.Backend { + crashIfConfigMissingVars(conf, []string{"storage.google.bucket"}) + return storage.Backend(storage.NewGoogleCSBackend( + conf.GetString("storage.google.bucket"), + conf.GetString("storage.google.prefix"), + )) +} + +func oracleBackendFromConfig(conf *config.Config) storage.Backend { + crashIfConfigMissingVars(conf, []string{"storage.oracle.bucket", "storage.oracle.compartmentid"}) + return storage.Backend(storage.NewOracleCSBackend( + conf.GetString("storage.oracle.bucket"), + conf.GetString("storage.oracle.prefix"), + conf.GetString("storage.oracle.region"), + conf.GetString("storage.oracle.compartmentid"), + )) +} + +func microsoftBackendFromConfig(conf *config.Config) storage.Backend { + crashIfConfigMissingVars(conf, []string{"storage.microsoft.container"}) + return storage.Backend(storage.NewMicrosoftBlobBackend( + conf.GetString("storage.microsoft.container"), + conf.GetString("storage.microsoft.prefix"), + )) +} + +func alibabaBackendFromConfig(conf *config.Config) storage.Backend { + crashIfConfigMissingVars(conf, []string{"storage.alibaba.bucket"}) + return storage.Backend(storage.NewAlibabaCloudOSSBackend( + conf.GetString("storage.alibaba.bucket"), + conf.GetString("storage.alibaba.prefix"), + conf.GetString("storage.alibaba.endpoint"), + conf.GetString("storage.alibaba.sse"), + )) +} + +func openstackBackendFromConfig(conf *config.Config) storage.Backend { + crashIfConfigMissingVars(conf, []string{"storage.openstack.container", "storage.openstack.region"}) + return storage.Backend(storage.NewOpenstackOSBackend( + conf.GetString("storage.openstack.container"), + conf.GetString("storage.openstack.prefix"), + conf.GetString("storage.openstack.region"), + conf.GetString("storage.openstack.cacert"), + )) +} + +func crashIfConfigMissingVars(conf *config.Config, vars []string) { + missing := []string{} + for _, v := range vars { + if conf.GetString(v) == "" { + flag := config.GetCLIFlagFromVarName(v) + missing = append(missing, fmt.Sprintf("--%s", flag)) + } + } + if len(missing) > 0 { + log.Fatal("Missing required flags(s): ", strings.Join(missing, ", ")) + } +} diff --git a/cmd/chart-scanner/main.go b/cmd/chart-scanner/main.go new file mode 100644 index 0000000..10dd3a4 --- /dev/null +++ b/cmd/chart-scanner/main.go @@ -0,0 +1,38 @@ +package main + +import ( + "fmt" + "log" + "os" + + "github.com/helm/chartmuseum/pkg/config" + "github.com/urfave/cli" +) + +var ( + // Version is the semantic version (added at compile time) + Version string + + // Revision is the git commit id (added at compile time) + Revision string +) + +func main() { + app := cli.NewApp() + app.Name = "chart-scanner" + app.Version = fmt.Sprintf("%s (build %s)", Version, Revision) + app.Usage = "checks a storage directory for evil charts" + app.Action = cliHandler + app.Flags = config.CLIFlags + app.Run(os.Args) +} + +func cliHandler(c *cli.Context) { + conf := config.NewConfig() + err := conf.UpdateFromCLIContext(c) + if err != nil { + log.Fatal(err) + } + backend := backendFromConfig(conf) + fmt.Println(backend) +}