func()

in sources.go [82:124]


func (w *Workflow) sourceContent(ctx context.Context, s string) (string, error) {
	src, ok := w.Sources[s]
	if !ok {
		return "", Errf("source not found: %s", s)
	}
	// Try GCS file first.
	if bkt, objPath, err := splitGCSPath(src); err == nil {
		if objPath == "" || strings.HasSuffix(objPath, "/") {
			return "", Errf("source %s appears to be a GCS 'bucket'", src)

		}
		src := w.StorageClient.Bucket(bkt).Object(objPath)
		r, err := src.NewReader(ctx)
		if err != nil {
			return "", Errf("error reading from file %s/%s: %v", bkt, objPath, err)
		}
		defer r.Close()

		if r.Size() > 1024 {
			return "", Errf("file size is too large %s/%s: %d", bkt, objPath, r.Size())
		}

		var buf bytes.Buffer
		if _, err := io.Copy(&buf, r); err != nil {
			return "", Errf("error reading from file %s/%s: %v", bkt, objPath, err)
		}

		return buf.String(), nil
	}
	// Fall back to local read.
	if !filepath.IsAbs(src) {
		src = filepath.Join(w.workflowDir, src)
	}
	if _, err := os.Stat(src); err != nil {
		return "", typedErr(fileIOError, "failed to find local file", err)
	}

	d, err := ioutil.ReadFile(src)
	if err != nil {
		return "", newErr("failed to read local file content", err)
	}
	return string(d), nil
}