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
|
AuthHeader string
|
||||||
AuthValue string
|
AuthValue string
|
||||||
|
|
||||||
UploadSpecs map[string]UploadSpec
|
UploadSpecs map[string]UploadSpec
|
||||||
Uploads []UploadRule
|
UploadSpecFallback bool
|
||||||
|
|
||||||
|
Uploads []UploadRule
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
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()
|
defer res.Body.Close()
|
||||||
err = GenericResponseHandler(res)
|
err = GenericResponseHandler(res)
|
||||||
}
|
}
|
||||||
if err != nil {
|
|
||||||
log.Error().Msg("unable to retrieve upload specs")
|
for {
|
||||||
return err
|
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
|
if p.UploadSpecFallback {
|
||||||
dec := json.NewDecoder(res.Body)
|
log.Warn().Msg("using fallback upload-specs")
|
||||||
err = dec.Decode(&rawspecs)
|
prepareFallbackUploadSpec()
|
||||||
if err != nil {
|
p.UploadSpecs = fallbackUploadSpec
|
||||||
log.Error().Msg("unable to decode information for upload specs")
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if len(rawspecs) == 0 {
|
|
||||||
log.Error().Msg("empty upload specs")
|
|
||||||
return &ErrEmpty{}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
p.UploadSpecs = make(map[string]UploadSpec)
|
keys := make([]string, 0, len(p.UploadSpecs))
|
||||||
for _, s := range rawspecs {
|
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)
|
s.AllFieldNames = make(map[string]bool)
|
||||||
var seen bool
|
var seen bool
|
||||||
for _, f := range s.ComponentFields {
|
for _, f := range s.ComponentFields {
|
||||||
|
@ -82,7 +108,7 @@ func (p *Plugin) getUploadSpecs(ctx context.Context) error {
|
||||||
s.AllFieldNames[f.Name] = true
|
s.AllFieldNames[f.Name] = true
|
||||||
}
|
}
|
||||||
|
|
||||||
p.UploadSpecs[s.Format] = s
|
p.UploadSpecs[k] = s
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
Loading…
Reference in New Issue
Block a user