provide fallback upload-spec
just in case
This commit is contained in:
parent
19d2dcd19b
commit
1f8607b0a7
6
main.go
6
main.go
|
@ -19,8 +19,10 @@ type Plugin struct {
|
|||
AuthHeader string
|
||||
AuthValue string
|
||||
|
||||
UploadSpecs map[string]UploadSpec
|
||||
Uploads []UploadRule
|
||||
UploadSpecs map[string]UploadSpec
|
||||
UploadSpecFallback bool
|
||||
|
||||
Uploads []UploadRule
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
|
115
upload-spec-fallback.go
Normal file
115
upload-spec-fallback.go
Normal file
|
@ -0,0 +1,115 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
var (
|
||||
// keep map keys sorted
|
||||
|
||||
fallbackUploadSpec = map[string]UploadSpec{
|
||||
"maven2": {
|
||||
MultipleUpload: true,
|
||||
ComponentFields: []UploadField{
|
||||
{
|
||||
Name: "groupId",
|
||||
Type: String,
|
||||
},
|
||||
{
|
||||
Name: "artifactId",
|
||||
Type: String,
|
||||
},
|
||||
{
|
||||
Name: "version",
|
||||
Type: String,
|
||||
},
|
||||
{
|
||||
Name: "generate-pom",
|
||||
Type: Boolean,
|
||||
Optional: true,
|
||||
},
|
||||
{
|
||||
Name: "packaging",
|
||||
Type: String,
|
||||
Optional: true,
|
||||
},
|
||||
},
|
||||
AssetFields: []UploadField{
|
||||
{
|
||||
Name: "extension",
|
||||
Type: String,
|
||||
},
|
||||
{
|
||||
Name: "classifier",
|
||||
Type: String,
|
||||
Optional: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
"r": {
|
||||
AssetFields: []UploadField{
|
||||
{
|
||||
Name: "pathId",
|
||||
Type: String,
|
||||
},
|
||||
},
|
||||
},
|
||||
"raw": {
|
||||
MultipleUpload: true,
|
||||
ComponentFields: []UploadField{
|
||||
{
|
||||
Name: "directory",
|
||||
Type: String,
|
||||
},
|
||||
},
|
||||
AssetFields: []UploadField{
|
||||
{
|
||||
Name: "filename",
|
||||
Type: String,
|
||||
},
|
||||
},
|
||||
},
|
||||
"yum": {
|
||||
ComponentFields: []UploadField{
|
||||
{
|
||||
Name: "directory",
|
||||
Type: String,
|
||||
Optional: true,
|
||||
},
|
||||
},
|
||||
AssetFields: []UploadField{
|
||||
{
|
||||
Name: "filename",
|
||||
Type: String,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// keep array values sorted
|
||||
|
||||
fallbackSimpleSpecs = []string{
|
||||
"apt",
|
||||
"docker",
|
||||
"helm",
|
||||
"npm",
|
||||
"nuget",
|
||||
"pypi",
|
||||
"rubygems",
|
||||
}
|
||||
)
|
||||
|
||||
func prepareFallbackUploadSpec() {
|
||||
for _, t := range fallbackSimpleSpecs {
|
||||
_, seen := fallbackUploadSpec[t]
|
||||
if seen {
|
||||
log.Warn().Msgf("fallback upload-spec for %q is already present!", t)
|
||||
continue
|
||||
}
|
||||
fallbackUploadSpec[t] = UploadSpec{}
|
||||
}
|
||||
|
||||
for t, spec := range fallbackUploadSpec {
|
||||
spec.Format = t
|
||||
}
|
||||
}
|
|
@ -46,25 +46,51 @@ func (p *Plugin) getUploadSpecs(ctx context.Context) error {
|
|||
defer res.Body.Close()
|
||||
err = GenericResponseHandler(res)
|
||||
}
|
||||
if err != nil {
|
||||
log.Error().Msg("unable to retrieve upload specs")
|
||||
return err
|
||||
|
||||
for {
|
||||
if err != nil {
|
||||
p.UploadSpecFallback = true
|
||||
log.Error().Msg("unable to retrieve upload-specs")
|
||||
break
|
||||
}
|
||||
|
||||
var rawspecs []UploadSpec
|
||||
dec := json.NewDecoder(res.Body)
|
||||
err = dec.Decode(&rawspecs)
|
||||
if err != nil {
|
||||
p.UploadSpecFallback = true
|
||||
log.Error().Msg("unable to decode information for upload-specs")
|
||||
break
|
||||
}
|
||||
|
||||
if len(rawspecs) == 0 {
|
||||
p.UploadSpecFallback = true
|
||||
log.Error().Msg("empty upload-specs")
|
||||
break
|
||||
}
|
||||
|
||||
p.UploadSpecs = make(map[string]UploadSpec)
|
||||
for _, s := range rawspecs {
|
||||
p.UploadSpecs[s.Format] = s
|
||||
}
|
||||
//lint:ignore SA4004 this is correct
|
||||
break
|
||||
}
|
||||
|
||||
var rawspecs []UploadSpec
|
||||
dec := json.NewDecoder(res.Body)
|
||||
err = dec.Decode(&rawspecs)
|
||||
if err != nil {
|
||||
log.Error().Msg("unable to decode information for upload specs")
|
||||
return err
|
||||
}
|
||||
if len(rawspecs) == 0 {
|
||||
log.Error().Msg("empty upload specs")
|
||||
return &ErrEmpty{}
|
||||
if p.UploadSpecFallback {
|
||||
log.Warn().Msg("using fallback upload-specs")
|
||||
prepareFallbackUploadSpec()
|
||||
p.UploadSpecs = fallbackUploadSpec
|
||||
}
|
||||
|
||||
p.UploadSpecs = make(map[string]UploadSpec)
|
||||
for _, s := range rawspecs {
|
||||
keys := make([]string, 0, len(p.UploadSpecs))
|
||||
for k := range p.UploadSpecs {
|
||||
keys = append(keys, k)
|
||||
}
|
||||
|
||||
// refill UploadSpecs
|
||||
for _, k := range keys {
|
||||
s := p.UploadSpecs[k]
|
||||
s.AllFieldNames = make(map[string]bool)
|
||||
var seen bool
|
||||
for _, f := range s.ComponentFields {
|
||||
|
@ -82,7 +108,7 @@ func (p *Plugin) getUploadSpecs(ctx context.Context) error {
|
|||
s.AllFieldNames[f.Name] = true
|
||||
}
|
||||
|
||||
p.UploadSpecs[s.Format] = s
|
||||
p.UploadSpecs[k] = s
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
Loading…
Reference in New Issue
Block a user