diff options
Diffstat (limited to 'internal/build/gcp.go')
-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 +} |