mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-11-22 18:01:02 +00:00
Migrating to yaml.v3
This commit is contained in:
parent
ea725f8b11
commit
2889d3e3e6
18 changed files with 92 additions and 80 deletions
|
@ -7,7 +7,7 @@ import (
|
|||
"strings"
|
||||
|
||||
json "github.com/ghodss/yaml"
|
||||
"github.com/laszlocph/yaml"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
// paramsToEnv uses reflection to convert a map[string]interface to a list
|
||||
|
|
|
@ -6,7 +6,7 @@ import (
|
|||
"os"
|
||||
|
||||
libcompose "github.com/docker/libcompose/yaml"
|
||||
"github.com/laszlocph/yaml"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
type (
|
||||
|
|
|
@ -45,7 +45,15 @@ func TestParse(t *testing.T) {
|
|||
g.Assert(out.SkipClone).Equal(false)
|
||||
})
|
||||
|
||||
// Check to make sure variable expansion works in yaml.MapSlice
|
||||
g.It("Should handle simple yaml anchors", func() {
|
||||
out, err := ParseString(simpleYamlAnchors)
|
||||
if err != nil {
|
||||
g.Fail(err)
|
||||
}
|
||||
g.Assert(out.Pipeline.Containers[0].Name).Equal("notify_success")
|
||||
g.Assert(out.Pipeline.Containers[0].Image).Equal("plugins/slack")
|
||||
})
|
||||
|
||||
g.It("Should unmarshal variables", func() {
|
||||
out, err := ParseString(sampleVarYaml)
|
||||
if err != nil {
|
||||
|
@ -108,6 +116,14 @@ runs_on:
|
|||
- failure
|
||||
`
|
||||
|
||||
var simpleYamlAnchors = `
|
||||
vars:
|
||||
image: &image plugins/slack
|
||||
pipeline:
|
||||
notify_success:
|
||||
image: *image
|
||||
`
|
||||
|
||||
var sampleVarYaml = `
|
||||
_slack: &SLACK
|
||||
image: plugins/slack
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
package yaml
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
|
||||
libcompose "github.com/docker/libcompose/yaml"
|
||||
"github.com/laszlocph/woodpecker/cncd/pipeline/pipeline/frontend"
|
||||
"github.com/laszlocph/woodpecker/cncd/pipeline/pipeline/frontend/yaml/types"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
type (
|
||||
|
@ -85,7 +87,7 @@ func (c *Constraint) Excludes(v string) bool {
|
|||
}
|
||||
|
||||
// UnmarshalYAML unmarshals the constraint.
|
||||
func (c *Constraint) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
||||
func (c *Constraint) UnmarshalYAML(value *yaml.Node) error {
|
||||
var out1 = struct {
|
||||
Include libcompose.Stringorslice
|
||||
Exclude libcompose.Stringorslice
|
||||
|
@ -93,14 +95,20 @@ func (c *Constraint) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
|||
|
||||
var out2 libcompose.Stringorslice
|
||||
|
||||
unmarshal(&out1)
|
||||
unmarshal(&out2)
|
||||
err1 := value.Decode(&out1)
|
||||
err2 := value.Decode(&out2)
|
||||
|
||||
c.Exclude = out1.Exclude
|
||||
c.Include = append(
|
||||
out1.Include,
|
||||
out2...,
|
||||
)
|
||||
|
||||
if err1 != nil && err2 != nil {
|
||||
y, _ := yaml.Marshal(value)
|
||||
return fmt.Errorf("Could not parse condition: %s", y)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ import (
|
|||
|
||||
"github.com/laszlocph/woodpecker/cncd/pipeline/pipeline/frontend"
|
||||
|
||||
"github.com/laszlocph/yaml"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
func TestConstraint(t *testing.T) {
|
||||
|
|
|
@ -4,7 +4,7 @@ import (
|
|||
"fmt"
|
||||
|
||||
libcompose "github.com/docker/libcompose/yaml"
|
||||
"github.com/laszlocph/yaml"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
type (
|
||||
|
@ -62,23 +62,26 @@ type (
|
|||
)
|
||||
|
||||
// UnmarshalYAML implements the Unmarshaller interface.
|
||||
func (c *Containers) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
||||
slice := yaml.MapSlice{}
|
||||
if err := unmarshal(&slice); err != nil {
|
||||
func (c *Containers) UnmarshalYAML(value *yaml.Node) error {
|
||||
containers := map[string]Container{}
|
||||
err := value.Decode(&containers)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, s := range slice {
|
||||
container := Container{}
|
||||
out, _ := yaml.Marshal(s.Value)
|
||||
for i, n := range value.Content {
|
||||
if i%2 == 1 {
|
||||
container := Container{}
|
||||
err := n.Decode(&container)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := yaml.Unmarshal(out, &container); err != nil {
|
||||
return err
|
||||
if container.Name == "" {
|
||||
container.Name = fmt.Sprintf("%v", value.Content[i-1].Value)
|
||||
}
|
||||
c.Containers = append(c.Containers, &container)
|
||||
}
|
||||
if container.Name == "" {
|
||||
container.Name = fmt.Sprintf("%v", s.Key)
|
||||
}
|
||||
c.Containers = append(c.Containers, &container)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ import (
|
|||
|
||||
libcompose "github.com/docker/libcompose/yaml"
|
||||
"github.com/kr/pretty"
|
||||
"github.com/laszlocph/yaml"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
var containerYaml = []byte(`
|
||||
|
@ -54,10 +54,6 @@ volumes:
|
|||
- /var/lib/mysql
|
||||
- /opt/data:/var/lib/mysql
|
||||
- /etc/configs:/etc/configs/:ro
|
||||
ulimits:
|
||||
nofile:
|
||||
soft: 20000
|
||||
hard: 40000
|
||||
tmpfs:
|
||||
- /var/lib/test
|
||||
when:
|
||||
|
@ -102,11 +98,6 @@ func TestUnmarshalContainer(t *testing.T) {
|
|||
Privileged: true,
|
||||
ShmSize: libcompose.MemStringorInt(1024),
|
||||
Tmpfs: libcompose.Stringorslice{"/var/lib/test"},
|
||||
Ulimits: libcompose.Ulimits{
|
||||
Elements: []libcompose.Ulimit{
|
||||
libcompose.NewUlimit("nofile", 20000, 40000),
|
||||
},
|
||||
},
|
||||
Volumes: libcompose.Volumes{
|
||||
Volumes: []*libcompose.Volume{
|
||||
{Source: "", Destination: "/var/lib/mysql"},
|
||||
|
@ -179,7 +170,8 @@ func TestUnmarshalContainersErr(t *testing.T) {
|
|||
}
|
||||
for _, test := range testdata {
|
||||
in := []byte(test)
|
||||
err := yaml.Unmarshal(in, new(Containers))
|
||||
containers := new(Containers)
|
||||
err := yaml.Unmarshal(in, &containers)
|
||||
if err == nil {
|
||||
t.Errorf("wanted error for containers %q", test)
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ package matrix
|
|||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/laszlocph/yaml"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
|
@ -3,7 +3,7 @@ package yaml
|
|||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/laszlocph/yaml"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
type (
|
||||
|
@ -21,23 +21,13 @@ type (
|
|||
)
|
||||
|
||||
// UnmarshalYAML implements the Unmarshaller interface.
|
||||
func (n *Networks) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
||||
slice := yaml.MapSlice{}
|
||||
err := unmarshal(&slice)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
func (n *Networks) UnmarshalYAML(value *yaml.Node) error {
|
||||
networks := map[string]Network{}
|
||||
err := value.Decode(&networks)
|
||||
|
||||
for _, s := range slice {
|
||||
nn := Network{}
|
||||
out, _ := yaml.Marshal(s.Value)
|
||||
|
||||
err = yaml.Unmarshal(out, &nn)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for key, nn := range networks {
|
||||
if nn.Name == "" {
|
||||
nn.Name = fmt.Sprintf("%v", s.Key)
|
||||
nn.Name = fmt.Sprintf("%v", key)
|
||||
}
|
||||
if nn.Driver == "" {
|
||||
nn.Driver = "bridge"
|
||||
|
|
|
@ -5,7 +5,7 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/kr/pretty"
|
||||
"github.com/laszlocph/yaml"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
func TestUnmarshalNetwork(t *testing.T) {
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package yaml
|
||||
|
||||
import "gopkg.in/yaml.v3"
|
||||
|
||||
type (
|
||||
// Secrets defines a collection of secrets.
|
||||
Secrets struct {
|
||||
|
@ -14,9 +16,11 @@ type (
|
|||
)
|
||||
|
||||
// UnmarshalYAML implements the Unmarshaller interface.
|
||||
func (s *Secrets) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
||||
func (s *Secrets) UnmarshalYAML(value *yaml.Node) error {
|
||||
y, _ := yaml.Marshal(value)
|
||||
|
||||
var strslice []string
|
||||
err := unmarshal(&strslice)
|
||||
err := yaml.Unmarshal(y, &strslice)
|
||||
if err == nil {
|
||||
for _, str := range strslice {
|
||||
s.Secrets = append(s.Secrets, &Secret{
|
||||
|
@ -26,5 +30,5 @@ func (s *Secrets) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
|||
}
|
||||
return nil
|
||||
}
|
||||
return unmarshal(&s.Secrets)
|
||||
return yaml.Unmarshal(y, &s.Secrets)
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/kr/pretty"
|
||||
"github.com/laszlocph/yaml"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
func TestUnmarshalSecrets(t *testing.T) {
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
package types
|
||||
|
||||
import "strconv"
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
// BoolTrue is a custom Yaml boolean type that defaults to true.
|
||||
type BoolTrue struct {
|
||||
|
@ -8,16 +12,16 @@ type BoolTrue struct {
|
|||
}
|
||||
|
||||
// UnmarshalYAML implements custom Yaml unmarshaling.
|
||||
func (b *BoolTrue) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
||||
func (b *BoolTrue) UnmarshalYAML(value *yaml.Node) error {
|
||||
var s string
|
||||
err := unmarshal(&s)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
value.Decode(&s)
|
||||
|
||||
value, err := strconv.ParseBool(s)
|
||||
v, err := strconv.ParseBool(s)
|
||||
if err == nil {
|
||||
b.value = !value
|
||||
b.value = !v
|
||||
}
|
||||
if s != "" && err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/franela/goblin"
|
||||
"github.com/laszlocph/yaml"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
func TestBoolTrue(t *testing.T) {
|
||||
|
@ -44,7 +44,7 @@ func TestBoolTrue(t *testing.T) {
|
|||
})
|
||||
|
||||
g.It("should throw error when invalid", func() {
|
||||
in := []byte("{ }") // string value should fail parse
|
||||
in := []byte("abc") // string value should fail parse
|
||||
out := BoolTrue{}
|
||||
err := yaml.Unmarshal(in, &out)
|
||||
g.Assert(err != nil).IsTrue("expects error")
|
||||
|
|
|
@ -3,7 +3,7 @@ package yaml
|
|||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/laszlocph/yaml"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
type (
|
||||
|
@ -21,23 +21,18 @@ type (
|
|||
)
|
||||
|
||||
// UnmarshalYAML implements the Unmarshaller interface.
|
||||
func (v *Volumes) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
||||
slice := yaml.MapSlice{}
|
||||
err := unmarshal(&slice)
|
||||
func (v *Volumes) UnmarshalYAML(value *yaml.Node) error {
|
||||
y, _ := yaml.Marshal(value)
|
||||
|
||||
volumes := map[string]Volume{}
|
||||
err := yaml.Unmarshal(y, &volumes)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, s := range slice {
|
||||
vv := Volume{}
|
||||
out, _ := yaml.Marshal(s.Value)
|
||||
|
||||
err = yaml.Unmarshal(out, &vv)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for key, vv := range volumes {
|
||||
if vv.Name == "" {
|
||||
vv.Name = fmt.Sprintf("%v", s.Key)
|
||||
vv.Name = fmt.Sprintf("%v", key)
|
||||
}
|
||||
if vv.Driver == "" {
|
||||
vv.Driver = "local"
|
||||
|
|
|
@ -5,7 +5,7 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/kr/pretty"
|
||||
"github.com/laszlocph/yaml"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
func TestUnmarshalVolume(t *testing.T) {
|
||||
|
|
2
go.mod
2
go.mod
|
@ -34,7 +34,6 @@ require (
|
|||
github.com/joho/godotenv v0.0.0-20150907010228-4ed13390c0ac
|
||||
github.com/kr/pretty v0.0.0-20160708215748-737b74a46c4b
|
||||
github.com/kr/text v0.0.0-20160504234017-7cafcd837844 // indirect
|
||||
github.com/laszlocph/yaml v0.0.0-20191114195230-2ec4ce7a1d34
|
||||
github.com/lib/pq v0.0.0-20151015211310-83c4f410d0ae
|
||||
github.com/manucorporat/sse v0.0.0-20160126180136-ee05b128a739 // indirect
|
||||
github.com/mattn/go-sqlite3 v0.0.0-20170901084005-05548ff55570
|
||||
|
@ -59,4 +58,5 @@ require (
|
|||
google.golang.org/grpc v0.0.0-20170626232044-9cb02b885b41
|
||||
gopkg.in/go-playground/assert.v1 v1.2.1 // indirect
|
||||
gopkg.in/go-playground/validator.v8 v8.17.1 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.0-20191107175235-0b070bb63a18
|
||||
)
|
||||
|
|
4
go.sum
4
go.sum
|
@ -77,8 +77,6 @@ github.com/kr/pretty v0.0.0-20160708215748-737b74a46c4b h1:LJ9zj3Zit+pLjAQtA1gxl
|
|||
github.com/kr/pretty v0.0.0-20160708215748-737b74a46c4b/go.mod h1:Bvhd+E3laJ0AVkG0c9rmtZcnhV0HQ3+c3YxxqTvc/gA=
|
||||
github.com/kr/text v0.0.0-20160504234017-7cafcd837844 h1:kpzneEBeC0dMewP3gr/fADv1OlblH9r1goWVwpOt3TU=
|
||||
github.com/kr/text v0.0.0-20160504234017-7cafcd837844/go.mod h1:sjUstKUATFIcff4qlB53Kml0wQPtJVc/3fWrmuUmcfA=
|
||||
github.com/laszlocph/yaml v0.0.0-20191114195230-2ec4ce7a1d34 h1:+4tKButWtRq7Xw8EUpabOmZYAk2gtinHF585AmWu2Qk=
|
||||
github.com/laszlocph/yaml v0.0.0-20191114195230-2ec4ce7a1d34/go.mod h1:E1nYupUAMCOPyW4ZX78x63SP3/nKFQ5aj8tlwzMdYuo=
|
||||
github.com/lib/pq v0.0.0-20151015211310-83c4f410d0ae h1:rBqRT7VqVLePKGtyV6xDFLXeqD56CvZKEqI0XWzVTxM=
|
||||
github.com/lib/pq v0.0.0-20151015211310-83c4f410d0ae/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||
github.com/manucorporat/sse v0.0.0-20160126180136-ee05b128a739 h1:ykXz+pRRTibcSjG1yRhpdSHInF8yZY/mfn+Rz2Nd1rE=
|
||||
|
@ -158,3 +156,5 @@ gopkg.in/go-playground/validator.v8 v8.17.1 h1:W1Q1z7rfiJiNhoBkHYqb9TJAdOqPXsyNe
|
|||
gopkg.in/go-playground/validator.v8 v8.17.1/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y=
|
||||
gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
|
||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v3 v3.0.0-20191107175235-0b070bb63a18 h1:VaaR1yHVgJQaTGM1DXum4OU6He6gaZXAPII85hHgSzQ=
|
||||
gopkg.in/yaml.v3 v3.0.0-20191107175235-0b070bb63a18/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
|
|
Loading…
Reference in a new issue