package nix import ( "fmt" "strings" ) type Store interface { // Environ returns extra environment variables specified by Store. Environ() []string fmt.Stringer } // Local points to a local filesystem path containing a nix store. type Local string func (Local) Environ() []string { return nil } func (store Local) String() string { return string(store) } const ( EnvAwsSharedCredentialsFile = "AWS_SHARED_CREDENTIALS_FILE" ) // A BinaryCache holds credentials and parameters to a s3 binary cache. type BinaryCache struct { // Compression is the name of the compression algorithm to use. Example: "zstd". Compression string `json:"compression"` // ParallelCompression determines whether parallel compression is enabled. ParallelCompression bool `json:"parallel_compression,omitempty"` // Bucket is the s3 bucket name. Bucket string `json:"bucket"` // Endpoint is the s3 endpoint. Example: "s3.example.org". Endpoint string `json:"endpoint,omitempty"` // Region is the s3 region. Example: "ap-northeast-1". Region string `json:"region"` // Scheme is the s3 protocol. Example: "https". Scheme string `json:"scheme"` // CredentialsPath is the path to the s3 shared credentials file. CredentialsPath string `json:"credentials_path"` // KeyPath is the path to the nix secret key for signing all newly copied paths. KeyPath string `json:"key_path"` } func (store *BinaryCache) Environ() []string { return []string{EnvAwsSharedCredentialsFile + "=" + strings.TrimSpace(store.CredentialsPath)} } func (store *BinaryCache) String() string { return fmt.Sprintf( "s3://%s?compression=%s¶llel-compression=%t®ion=%s&scheme=%s&endpoint=%s&secret-key=%s", store.Bucket, store.Compression, store.ParallelCompression, store.Region, store.Scheme, store.Endpoint, store.KeyPath, ) }