MCPcopy Index your code
hub / github.com/chartmuseum/storage

github.com/chartmuseum/storage @v0.16.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.16.0 ↗ · + Follow
169 symbols 444 edges 22 files 66 documented · 39% 1 cross-repo links
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

chartmuseum/storage

GitHub Actions status Go Report Card GoDoc

Go library providing a common interface for working across multiple storage backends.

Supported storage backends:

This code was originally part of the Helm project: ChartMuseum, but has since been released as a standalone package for others to use in their own projects.

Primary Components

Backend (interface)

Backend is a common interface that is implemented by all the supported storage backends and their associated types:

type Backend interface {
    ListObjects(prefix string) ([]Object, error)
    GetObject(path string) (Object, error)
    PutObject(path string, content []byte) error
    DeleteObject(path string) error
}

Object (struct)

Object is a struct that represents a single storage object:

type Object struct {
    Path         string
    Content      []byte
    LastModified time.Time
}

ObjectSliceDiff (struct)

ObjectSliceDiff is a struct that represents overall changes between two Object slices:

type ObjectSliceDiff struct {
    Change  bool
    Removed []Object
    Added   []Object
    Updated []Object
}

GetObjectSliceDiff (function)

GetObjectSliceDiff is a function that takes two Object slices, compares them, and returns an ObjectSliceDiff:

func GetObjectSliceDiff(prev []Object, curr []Object, timestampTolerance time.Duration) ObjectSliceDiff

Usage

Simple example

The following is a simple program that will upload a file either to an Azure Blob Storage bucket (container) or a Google Cloud Storage bucket based on the command line options provided:

// Usage: go run example.go <cloud> <bucket> <file>

package main

import (
    "fmt"
    "io/ioutil"
    "os"
    "path/filepath"

    "github.com/chartmuseum/storage"
)

type (
    Uploader struct {
        Backend storage.Backend
    }
)

func NewUploader(cloud string, bucket string) *Uploader {
    var backend storage.Backend
    switch cloud {
    case "azure":
        backend = storage.NewMicrosoftBlobBackend(bucket, "")
    case "google":
        backend = storage.NewGoogleCSBackend(bucket, "")
    default:
        panic("cloud provider " + cloud + " not supported")
    }
    uploader := Uploader{Backend: backend}
    fmt.Printf("uploader created (cloud: %s, bucket: %s)\n", cloud, bucket)
    return &uploader
}

func (uploader *Uploader) Upload(filename string) {
    basename := filepath.Base(filename)
    content, err := ioutil.ReadFile(filename)
    if err != nil {
        panic(err)
    }
    err = uploader.Backend.PutObject(basename, content)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%s successfully uploaded\n", basename)
}

func main() {
    args := os.Args[1:]
    uploader := NewUploader(args[0], args[1])
    uploader.Upload(args[2])
}

Example of using to upload the file index.html to an Azure bucket:

go run example.go azure mycontainer index.html

Example of using to upload the file index.html to a Google Cloud bucket:

go run example.go google mybucket index.html

Per backend

Each supported storage backend has its own type that implements the Backend interface. All available types are described in detail on GoDoc.

In addition, authentication methods are based on the runtime environment and vary from cloud to cloud.

Extension points exported contracts — how you extend this code

Backend (Interface)
Backend is a generic interface for storage backends [10 implementers]
storage.go

Core symbols most depended-on inside this repo

PutObject
called by 30
storage.go
ListObjects
called by 26
storage.go
DeleteObject
called by 19
storage.go
GetObject
called by 16
storage.go
removePrefixFromObjectPath
called by 9
storage.go
objectPathIsInvalid
called by 9
storage.go
cleanPrefix
called by 8
storage.go
GetObjectSliceDiff
called by 6
storage.go

Shape

Method 107
Function 34
Struct 27
Interface 1

Languages

Go100%

Modules by API surface

storage.go13 symbols
etcd.go13 symbols
openstack.go10 symbols
storage_test.go9 symbols
microsoft_test.go9 symbols
amazon.go9 symbols
oracle.go8 symbols
tencent_test.go7 symbols
oracle_test.go7 symbols
openstack_test.go7 symbols
microsoft.go7 symbols
google_test.go7 symbols

Used by 1 indexed graphs manifest dependencies, hub-wide

For agents

$ claude mcp add storage \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact