From 9ca2a528ef0f3819b4921a33a3a2110d291707e0 Mon Sep 17 00:00:00 2001
From: bojie <bojie@dexon.org>
Date: Fri, 28 Dec 2018 13:15:06 +0800
Subject: 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
---
 internal/build/gcp.go | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 82 insertions(+)
 create mode 100644 internal/build/gcp.go

(limited to 'internal')

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
+}
-- 
cgit v1.2.3