Skip to content

Commit 3d80a0d

Browse files
authored
Merge pull request #1238 from aFlyBird0/feat-app-config
feat: app config && refactor config loader
2 parents 8c48ab0 + b946966 commit 3d80a0d

20 files changed

Lines changed: 1003 additions & 916 deletions

go.mod

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ require (
2020
github.com/hashicorp/go-cleanhttp v0.5.2
2121
github.com/hashicorp/go-getter v1.6.2
2222
github.com/imdario/mergo v0.3.12
23+
github.com/kr/pretty v0.3.0
2324
github.com/mitchellh/go-homedir v1.1.0
2425
github.com/mitchellh/mapstructure v1.5.0
2526
github.com/mittwald/go-helm-client v0.8.4
@@ -34,7 +35,8 @@ require (
3435
github.com/withfig/autocomplete-tools/integrations/cobra v1.2.1
3536
github.com/xanzy/go-gitlab v0.74.0
3637
go.uber.org/multierr v1.6.0
37-
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3
38+
golang.org/x/crypto v0.1.0
39+
golang.org/x/exp v0.0.0-20221114191408-850992195362
3840
golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c
3941
gopkg.in/gookit/color.v1 v1.1.6
4042
gopkg.in/yaml.v3 v3.0.1
@@ -147,6 +149,7 @@ require (
147149
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
148150
github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 // indirect
149151
github.com/klauspost/compress v1.13.6 // indirect
152+
github.com/kr/text v0.2.0 // indirect
150153
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect
151154
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect
152155
github.com/leodido/go-urn v1.2.1 // indirect
@@ -202,17 +205,15 @@ require (
202205
go.opencensus.io v0.23.0 // indirect
203206
go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect
204207
go.uber.org/atomic v1.9.0 // indirect
205-
golang.org/x/exp v0.0.0-20210901193431-a062eea981d2 // indirect
206208
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect
207-
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect
208-
golang.org/x/net v0.0.0-20220805013720-a33c5aa5df48 // indirect
209+
golang.org/x/mod v0.6.0 // indirect
210+
golang.org/x/net v0.1.0 // indirect
209211
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
210-
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 // indirect
211-
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
212-
golang.org/x/text v0.3.7 // indirect
212+
golang.org/x/sys v0.1.0 // indirect
213+
golang.org/x/term v0.1.0 // indirect
214+
golang.org/x/text v0.4.0 // indirect
213215
golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 // indirect
214-
golang.org/x/tools v0.1.10 // indirect
215-
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
216+
golang.org/x/tools v0.2.0 // indirect
216217
google.golang.org/api v0.44.0 // indirect
217218
google.golang.org/appengine v1.6.7 // indirect
218219
google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf // indirect

go.sum

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1446,8 +1446,9 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm
14461446
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
14471447
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
14481448
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
1449-
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 h1:0es+/5331RGQPcXlMfP+WrnIIS6dNnNRe0WB02W0F4M=
14501449
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
1450+
golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU=
1451+
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
14511452
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
14521453
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
14531454
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -1464,8 +1465,9 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0
14641465
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
14651466
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
14661467
golang.org/x/exp v0.0.0-20210220032938-85be41e4509f/go.mod h1:I6l2HNBLBZEcrOoCpyKLdY2lHoRZ8lI4x60KMCQDft4=
1467-
golang.org/x/exp v0.0.0-20210901193431-a062eea981d2 h1:Or4Ra3AAlhUlNn8WmIzw2Yq2vUHSkrP6E2e/FIESpF8=
14681468
golang.org/x/exp v0.0.0-20210901193431-a062eea981d2/go.mod h1:a3o/VtDNHN+dCVLEpzjjUHOzR+Ln3DHX056ZPzoZGGA=
1469+
golang.org/x/exp v0.0.0-20221114191408-850992195362 h1:NoHlPRbyl1VFI6FjwHtPQCN7wAMXI6cKcqrmXhOOfBQ=
1470+
golang.org/x/exp v0.0.0-20221114191408-850992195362/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
14691471
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
14701472
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
14711473
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
@@ -1497,8 +1499,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
14971499
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
14981500
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
14991501
golang.org/x/mod v0.5.1-0.20210830214625-1b1db11ec8f4/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
1500-
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o=
1501-
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
1502+
golang.org/x/mod v0.6.0 h1:b9gGHsz9/HhJ3HF5DHQytPpuwocVTChQJK3AvoLRD5I=
1503+
golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
15021504
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
15031505
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
15041506
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -1559,8 +1561,8 @@ golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qx
15591561
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
15601562
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
15611563
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
1562-
golang.org/x/net v0.0.0-20220805013720-a33c5aa5df48 h1:N9Vc/rorQUDes6B9CNdIxAn5jODGj2wzfrei2x4wNj4=
1563-
golang.org/x/net v0.0.0-20220805013720-a33c5aa5df48/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
1564+
golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0=
1565+
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
15641566
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
15651567
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
15661568
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -1690,14 +1692,15 @@ golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBc
16901692
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
16911693
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
16921694
golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
1693-
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 h1:WIoqL4EROvwiPdUtaip4VcDdpZ4kha7wBWZrbVKCIZg=
1694-
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
1695+
golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=
1696+
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
16951697
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
16961698
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
16971699
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
16981700
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
1699-
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
17001701
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
1702+
golang.org/x/term v0.1.0 h1:g6Z6vPFA9dYBAF7DWcH6sCcOntplXsDKcliusYijMlw=
1703+
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
17011704
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
17021705
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
17031706
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1706,8 +1709,9 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
17061709
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
17071710
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
17081711
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
1709-
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
17101712
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
1713+
golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg=
1714+
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
17111715
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
17121716
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
17131717
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -1785,12 +1789,11 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f
17851789
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
17861790
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
17871791
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
1788-
golang.org/x/tools v0.1.10 h1:QjFRCZxdOhBJ/UNgnBZLbNV13DlbnK0quyivTnXJM20=
1789-
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
1792+
golang.org/x/tools v0.2.0 h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE=
1793+
golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=
17901794
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
17911795
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
17921796
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
1793-
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
17941797
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
17951798
gomodules.xyz/jsonpatch/v2 v2.1.0/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU=
17961799
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=

internal/pkg/backend/s3/validate_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"github.com/devstream-io/devstream/internal/pkg/backend/types"
88
)
99

10-
var _ = Describe("Validate", func() {
10+
var _ = Describe("validate", func() {
1111
It("should return error s3 option not config", func() {
1212
err := validate("", "", "")
1313
Expect(err).Error().Should(HaveOccurred())

internal/pkg/configmanager/app.go

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package configmanager
2+
3+
type (
4+
App struct {
5+
Name string `yaml:"name" mapstructure:"name"`
6+
Spec RawOptions `yaml:"spec" mapstructure:"spec"`
7+
Repo *Repo `yaml:"repo" mapstructure:"repo"`
8+
RepoTemplate *RepoTemplate `yaml:"repoTemplate" mapstructure:"repoTemplate"`
9+
CIPipelines []PipelineTemplate `yaml:"ci" mapstructure:"ci"`
10+
CDPipelines []PipelineTemplate `yaml:"cd" mapstructure:"cd"`
11+
}
12+
Apps []App
13+
14+
// AppInConfig is the raw structured data in config file.
15+
// The main difference between App and AppInConfig is "CI" and "CD" field.
16+
// The "CIRawConfigs" is the raw data of "CI" field defined in config file,
17+
// which will be rendered to "CIPipelines" field in App with "PipelineTemplates".
18+
// The "CDRawConfigs" is similar to "CIRawConfigs".
19+
AppInConfig struct {
20+
Name string `yaml:"name" mapstructure:"name"`
21+
Spec RawOptions `yaml:"spec" mapstructure:"spec"`
22+
Repo *Repo `yaml:"repo" mapstructure:"repo"`
23+
RepoTemplate *RepoTemplate `yaml:"repoTemplate" mapstructure:"repoTemplate"`
24+
CIRawConfigs []CICD `yaml:"ci" mapstructure:"ci"`
25+
CDRawConfigs []CICD `yaml:"cd" mapstructure:"cd"`
26+
}
27+
28+
CICD struct {
29+
Type string `yaml:"type" mapstructure:"type"`
30+
TemplateName string `yaml:"templateName" mapstructure:"templateName"`
31+
Options RawOptions `yaml:"options" mapstructure:"options"`
32+
Vars RawOptions `yaml:"vars" mapstructure:"vars"`
33+
}
34+
)
35+
36+
func (apps Apps) validate() (errs []error) {
37+
for _, app := range apps {
38+
if err := app.validate(); err != nil {
39+
errs = append(errs, err)
40+
}
41+
}
42+
return errs
43+
}
44+
45+
func (app *App) validate() error {
46+
if app.Repo.RepoInfo != nil && app.Repo.RepoInfo.Name == "" {
47+
app.Repo.RepoInfo.Name = app.Name
48+
}
49+
50+
err := app.Repo.FillAndValidate()
51+
if err != nil {
52+
return err
53+
}
54+
55+
if app.RepoTemplate != nil {
56+
err = app.RepoTemplate.FillAndValidate()
57+
if err != nil {
58+
return err
59+
}
60+
}
61+
62+
return nil
63+
}
64+
65+
func (config *ConfigRaw) constructApps(ciPipelines, cdPipelines [][]PipelineTemplate) *Config {
66+
configFinal := &Config{}
67+
configFinal.PluginDir = config.PluginDir
68+
configFinal.State = config.State
69+
configFinal.Tools = config.Tools
70+
71+
for i, app := range config.AppsInConfig {
72+
appFinal := App{
73+
Name: app.Name,
74+
Spec: app.Spec,
75+
Repo: app.Repo,
76+
RepoTemplate: app.RepoTemplate,
77+
}
78+
appFinal.CIPipelines = ciPipelines[i]
79+
appFinal.CDPipelines = cdPipelines[i]
80+
configFinal.Apps = append(configFinal.Apps, appFinal)
81+
}
82+
83+
return configFinal
84+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package configmanager
2+
3+
import (
4+
"fmt"
5+
"runtime"
6+
)
7+
8+
var (
9+
GOOS string = runtime.GOOS
10+
GOARCH string = runtime.GOARCH
11+
)
12+
13+
// Config records rendered config values and is used as a general config in DevStream.
14+
type Config struct {
15+
// Command line flag have a higher priority than the config file.
16+
// If you used the `--plugin-dir` flag with `dtm`, then the "pluginDir" in the config file will be ignored.
17+
PluginDir string
18+
Tools Tools `yaml:"tools"`
19+
Apps Apps `yaml:"apps"`
20+
State *State
21+
}
22+
23+
// ConfigRaw is used to describe original raw configs read from files
24+
type ConfigRaw struct {
25+
VarFile string `yaml:"varFile"`
26+
ToolFile string `yaml:"toolFile"`
27+
AppFile string `yaml:"appFile"`
28+
TemplateFile string `yaml:"templateFile"`
29+
PluginDir string `yaml:"pluginDir"`
30+
State *State `yaml:"state"`
31+
Tools []Tool `yaml:"tools"`
32+
AppsInConfig []AppInConfig `yaml:"apps"`
33+
PipelineTemplates []PipelineTemplate `yaml:"pipelineTemplates"`
34+
GlobalVars map[string]any `yaml:"-"`
35+
}
36+
37+
// State is the struct for reading the state configuration in the config file.
38+
// It defines how the state is stored, specifies the type of backend and related options.
39+
type State struct {
40+
Backend string `yaml:"backend"`
41+
Options StateConfigOptions `yaml:"options"`
42+
}
43+
44+
// StateConfigOptions is the struct for reading the options of the state backend.
45+
type StateConfigOptions struct {
46+
// for s3 backend
47+
Bucket string `yaml:"bucket"`
48+
Region string `yaml:"region"`
49+
Key string `yaml:"key"`
50+
// for local backend
51+
StateFile string `yaml:"stateFile"`
52+
// for ConfigMap backend
53+
Namespace string `yaml:"namespace"`
54+
ConfigMap string `yaml:"configmap"`
55+
}
56+
57+
func (c *Config) Validate() (errs []error) {
58+
errs = append(errs, c.Tools.validate()...)
59+
errs = append(errs, c.Tools.validateDependency()...)
60+
errs = append(errs, c.Apps.validate()...)
61+
62+
if c.State == nil {
63+
errs = append(errs, fmt.Errorf("state is not defined"))
64+
}
65+
66+
return errs
67+
}

0 commit comments

Comments
 (0)