UploadVSAEnvelope uploads a VSA envelope to the configured storage backends
(ctx context.Context, envelopePath string, storageConfigs []string, signer *Signer)
| 142 | |
| 143 | // UploadVSAEnvelope uploads a VSA envelope to the configured storage backends |
| 144 | func UploadVSAEnvelope(ctx context.Context, envelopePath string, storageConfigs []string, signer *Signer) error { |
| 145 | if len(storageConfigs) == 0 { |
| 146 | log.Infof("[VSA] No storage backends configured, skipping upload") |
| 147 | return nil |
| 148 | } |
| 149 | |
| 150 | // Read envelope content |
| 151 | envelopeContent, err := os.ReadFile(envelopePath) |
| 152 | if err != nil { |
| 153 | return fmt.Errorf("failed to read VSA envelope from %s: %w", envelopePath, err) |
| 154 | } |
| 155 | |
| 156 | // Upload to each configured backend |
| 157 | for _, storageFlag := range storageConfigs { |
| 158 | config, err := ParseStorageFlag(storageFlag) |
| 159 | if err != nil { |
| 160 | log.Warnf("invalid storage config '%s': %v", storageFlag, err) |
| 161 | continue |
| 162 | } |
| 163 | |
| 164 | backend, err := CreateStorageBackend(config) |
| 165 | if err != nil { |
| 166 | log.Warnf("failed to create %s backend: %v", config.Backend, err) |
| 167 | continue |
| 168 | } |
| 169 | |
| 170 | // Upload using the appropriate method |
| 171 | var uploadErr error |
| 172 | if signerAwareUploader, ok := backend.(SignerAwareUploader); ok && signer != nil { |
| 173 | payloadHash, uploadErr := signerAwareUploader.UploadWithSigner(ctx, envelopeContent, signer) |
| 174 | if uploadErr == nil && payloadHash != "" { |
| 175 | log.WithFields(log.Fields{ |
| 176 | "backend": backend.Name(), |
| 177 | "payload_hash": payloadHash, |
| 178 | }).Debug("[VSA] Upload successful, payload hash available for retrieval") |
| 179 | } |
| 180 | } else { |
| 181 | uploadErr = backend.Upload(ctx, envelopeContent) |
| 182 | } |
| 183 | |
| 184 | if uploadErr != nil { |
| 185 | log.Warnf("failed to upload to %s: %v", backend.Name(), uploadErr) |
| 186 | continue |
| 187 | } |
| 188 | } |
| 189 | |
| 190 | return nil |
| 191 | } |