diff options
author | bojie <bojie@dexon.org> | 2018-12-28 13:15:06 +0800 |
---|---|---|
committer | Wei-Ning Huang <w@dexon.org> | 2019-04-09 21:32:55 +0800 |
commit | 9ca2a528ef0f3819b4921a33a3a2110d291707e0 (patch) | |
tree | 5520bb35b6de0ee1844f52f53a55c7b716955f49 /internal | |
parent | fe239cd01509d340d3450e0275f60f0536ec5455 (diff) | |
download | dexon-9ca2a528ef0f3819b4921a33a3a2110d291707e0.tar dexon-9ca2a528ef0f3819b4921a33a3a2110d291707e0.tar.gz dexon-9ca2a528ef0f3819b4921a33a3a2110d291707e0.tar.bz2 dexon-9ca2a528ef0f3819b4921a33a3a2110d291707e0.tar.lz dexon-9ca2a528ef0f3819b4921a33a3a2110d291707e0.tar.xz dexon-9ca2a528ef0f3819b4921a33a3a2110d291707e0.tar.zst dexon-9ca2a528ef0f3819b4921a33a3a2110d291707e0.zip |
app: use gcp storage instead of azure for builds (#81)
* vendor: add dependencies for using GCP storage
* app: use gcp storage instead of azure for builds
Diffstat (limited to 'internal')
-rw-r--r-- | internal/build/gcp.go | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/internal/build/gcp.go b/internal/build/gcp.go new file mode 100644 index 000000000..3c312a341 --- /dev/null +++ b/internal/build/gcp.go @@ -0,0 +1,82 @@ +package build + +import ( + "io" + "os" + + "cloud.google.com/go/storage" + "golang.org/x/net/context" + "google.golang.org/api/iterator" + "google.golang.org/api/option" +) + +type GCPOption struct { + CredentialPath string +} + +// GCPFileUpload upload file to GCP storage +func GCPFileUpload(path, bucket, name string, opt GCPOption) error { + ctx := context.Background() + client, err := storage.NewClient(ctx, option.WithCredentialsFile(opt.CredentialPath)) + if err != nil { + return err + } + + wc := client.Bucket(bucket).Object(name).NewWriter(ctx) + + in, err := os.Open(path) + if err != nil { + return err + } + defer in.Close() + + if _, err = io.Copy(wc, in); err != nil { + return err + } + if err := wc.Close(); err != nil { + return err + } + + return nil +} + +// GCPFileList list files from GCP storage +func GCPFileList(bucket string, opt GCPOption) ([]*storage.ObjectAttrs, error) { + ctx := context.Background() + client, err := storage.NewClient(ctx, option.WithCredentialsFile(opt.CredentialPath)) + if err != nil { + return nil, err + } + + var list []*storage.ObjectAttrs + it := client.Bucket(bucket).Objects(ctx, nil) + for { + attrs, err := it.Next() + if err == iterator.Done { + break + } + if err != nil { + return nil, err + } + list = append(list, attrs) + } + + return list, nil +} + +// GCPFileDelete delete files from GCP storage +func GCPFileDelete(bucket string, objects []*storage.ObjectAttrs, opt GCPOption) error { + ctx := context.Background() + client, err := storage.NewClient(ctx, option.WithCredentialsFile(opt.CredentialPath)) + if err != nil { + return err + } + + for _, obj := range objects { + if err := client.Bucket(bucket).Object(obj.Name).Delete(ctx); err != nil { + return err + } + } + + return nil +} |