@@ -21,7 +21,6 @@ import (
2121 "buf.build/go/bufplugin/option"
2222 "buf.build/go/standard/xslices"
2323 "github.com/bufbuild/buf/private/bufpkg/bufcas"
24- "github.com/bufbuild/buf/private/bufpkg/bufconfig"
2524 "github.com/bufbuild/buf/private/bufpkg/bufparse"
2625 "github.com/bufbuild/buf/private/bufpkg/bufpolicy"
2726)
@@ -50,8 +49,75 @@ func V1Beta1ProtoToDigest(protoDigest *policyv1beta1.Digest) (bufpolicy.Digest,
5049
5150// V1Beta1ProtoToPolicyConfig converts the given proto PolicyConfig to a PolicyConfig.
5251// The registry is used to resolve plugin references.
53- func V1Beta1ProtoToPolicyConfig (registry string , protoPolicyConfig * policyv1beta1.PolicyConfig ) (bufpolicy.PolicyConfig , error ) {
54- return newPolicyConfig (registry , protoPolicyConfig )
52+ func V1Beta1ProtoToPolicyConfig (registry string , policyConfigV1Beta1 * policyv1beta1.PolicyConfig ) (bufpolicy.PolicyConfig , error ) {
53+ lintConfig , err := getLintConfigForV1Beta1LintConfig (policyConfigV1Beta1 .GetLint ())
54+ if err != nil {
55+ return nil , err
56+ }
57+ breakingConfig , err := getBreakingConfigForV1Beta1BreakingConfig (policyConfigV1Beta1 .GetBreaking ())
58+ if err != nil {
59+ return nil , err
60+ }
61+ pluginConfigs , err := xslices .MapError (
62+ policyConfigV1Beta1 .GetPlugins (),
63+ func (pluginConfigV1Beta1 * policyv1beta1.PolicyConfig_CheckPluginConfig ) (bufpolicy.PluginConfig , error ) {
64+ return getPluginConfigForV1Beta1PluginConfig (registry , pluginConfigV1Beta1 )
65+ },
66+ )
67+ if err != nil {
68+ return nil , err
69+ }
70+ return bufpolicy .NewPolicyConfig (
71+ lintConfig ,
72+ breakingConfig ,
73+ pluginConfigs ,
74+ )
75+ }
76+
77+ // PolicyConfigToV1Beta1Proto converts the given PolicyConfig to a proto PolicyConfig.
78+ func PolicyConfigToV1Beta1Proto (policyConfig bufpolicy.PolicyConfig ) (* policyv1beta1.PolicyConfig , error ) {
79+ pluginConfigs , err := xslices .MapError (
80+ policyConfig .PluginConfigs (),
81+ func (pluginConfig bufpolicy.PluginConfig ) (* policyv1beta1.PolicyConfig_CheckPluginConfig , error ) {
82+ pluginRef := pluginConfig .Ref ()
83+ if pluginRef == nil {
84+ return nil , fmt .Errorf ("plugin config %q has no reference" , pluginConfig .Name ())
85+ }
86+ pluginOptions , err := pluginConfig .Options ().ToProto ()
87+ if err != nil {
88+ return nil , err
89+ }
90+ return & policyv1beta1.PolicyConfig_CheckPluginConfig {
91+ Name : & policyv1beta1.PolicyConfig_CheckPluginConfig_Name {
92+ Owner : pluginRef .FullName ().Owner (),
93+ Plugin : pluginRef .FullName ().Name (),
94+ Ref : pluginRef .Ref (),
95+ },
96+ Options : pluginOptions ,
97+ Args : pluginConfig .Args (),
98+ }, nil
99+ },
100+ )
101+ if err != nil {
102+ return nil , err
103+ }
104+ return & policyv1beta1.PolicyConfig {
105+ Lint : & policyv1beta1.PolicyConfig_LintConfig {
106+ Use : policyConfig .LintConfig ().UseIDsAndCategories (),
107+ Except : policyConfig .LintConfig ().ExceptIDsAndCategories (),
108+ EnumZeroValueSuffix : policyConfig .LintConfig ().EnumZeroValueSuffix (),
109+ RpcAllowSameRequestResponse : policyConfig .LintConfig ().RPCAllowSameRequestResponse (),
110+ RpcAllowGoogleProtobufEmptyRequests : policyConfig .LintConfig ().RPCAllowGoogleProtobufEmptyRequests (),
111+ RpcAllowGoogleProtobufEmptyResponses : policyConfig .LintConfig ().RPCAllowGoogleProtobufEmptyResponses (),
112+ ServiceSuffix : policyConfig .LintConfig ().ServiceSuffix (),
113+ },
114+ Breaking : & policyv1beta1.PolicyConfig_BreakingConfig {
115+ Use : policyConfig .BreakingConfig ().UseIDsAndCategories (),
116+ Except : policyConfig .BreakingConfig ().ExceptIDsAndCategories (),
117+ IgnoreUnstablePackages : policyConfig .BreakingConfig ().IgnoreUnstablePackages (),
118+ },
119+ Plugins : pluginConfigs ,
120+ }, nil
55121}
56122
57123// *** PRIVATE ***
@@ -75,108 +141,34 @@ func v1beta1ProtoToDigestType(protoDigestType policyv1beta1.DigestType) (bufpoli
75141 return digestType , nil
76142}
77143
78- // policyConfig implements bufpolicy.PolicyConfig.
79- type policyConfig struct {
80- lintConfig bufconfig.LintConfig
81- breakingConfig bufconfig.BreakingConfig
82- pluginConfigs []bufconfig.PluginConfig
83- }
84-
85- func newPolicyConfig (
86- registry string ,
87- policyConfigV1Beta1 * policyv1beta1.PolicyConfig ,
88- ) (* policyConfig , error ) {
89- if policyConfigV1Beta1 == nil {
90- return nil , fmt .Errorf ("policyConfigV1Beta1 must not be nil" )
91- }
92- lintConfig , err := getLintConfigForV1Beta1LintConfig (policyConfigV1Beta1 .Lint )
93- if err != nil {
94- return nil , err
95- }
96- breakingConfig , err := getBreakingConfigForV1Beta1BreakingConfig (policyConfigV1Beta1 .Breaking )
97- if err != nil {
98- return nil , err
99- }
100- pluginConfigs , err := xslices .MapError (
101- policyConfigV1Beta1 .Plugins ,
102- func (pluginConfigV1Beta1 * policyv1beta1.PolicyConfig_CheckPluginConfig ) (bufconfig.PluginConfig , error ) {
103- return getPluginConfigForV1Beta1PluginConfig (registry , pluginConfigV1Beta1 )
104- },
105- )
106- if err != nil {
107- return nil , err
108- }
109- return & policyConfig {
110- lintConfig : lintConfig ,
111- breakingConfig : breakingConfig ,
112- pluginConfigs : pluginConfigs ,
113- }, nil
114- }
115-
116- // LintConfig returns the LintConfig for the File.
117- func (p * policyConfig ) LintConfig () bufconfig.LintConfig {
118- return p .lintConfig
119- }
120-
121- // BreakingConfig returns the BreakingConfig for the File.
122- func (p * policyConfig ) BreakingConfig () bufconfig.BreakingConfig {
123- return p .breakingConfig
124- }
125-
126- // PluginConfigs returns the PluginConfigs for the File.
127- func (p * policyConfig ) PluginConfigs () []bufconfig.PluginConfig {
128- return p .pluginConfigs
129- }
130-
131144func getLintConfigForV1Beta1LintConfig (
132145 lintConfigV1Beta1 * policyv1beta1.PolicyConfig_LintConfig ,
133- ) (bufconfig.LintConfig , error ) {
134- checkConfig , err := bufconfig .NewEnabledCheckConfig (
135- bufconfig .FileVersionV2 ,
146+ ) (bufpolicy.LintConfig , error ) {
147+ return bufpolicy .NewLintConfig (
136148 lintConfigV1Beta1 .GetUse (),
137149 lintConfigV1Beta1 .GetExcept (),
138- nil ,
139- nil ,
140- false ,
141- )
142- if err != nil {
143- return nil , err
144- }
145- return bufconfig .NewLintConfig (
146- checkConfig ,
147150 lintConfigV1Beta1 .GetEnumZeroValueSuffix (),
148151 lintConfigV1Beta1 .GetRpcAllowSameRequestResponse (),
149152 lintConfigV1Beta1 .GetRpcAllowGoogleProtobufEmptyRequests (),
150153 lintConfigV1Beta1 .GetRpcAllowGoogleProtobufEmptyResponses (),
151154 lintConfigV1Beta1 .GetServiceSuffix (),
152- false , // Comment ignores are not allowed in Policy files.
153- ), nil
155+ )
154156}
155157
156158func getBreakingConfigForV1Beta1BreakingConfig (
157159 breakingConfigV1Beta1 * policyv1beta1.PolicyConfig_BreakingConfig ,
158- ) (bufconfig.BreakingConfig , error ) {
159- checkConfig , err := bufconfig .NewEnabledCheckConfig (
160- bufconfig .FileVersionV2 ,
160+ ) (bufpolicy.BreakingConfig , error ) {
161+ return bufpolicy .NewBreakingConfig (
161162 breakingConfigV1Beta1 .GetUse (),
162163 breakingConfigV1Beta1 .GetExcept (),
163- nil ,
164- nil ,
165- false ,
166- )
167- if err != nil {
168- return nil , err
169- }
170- return bufconfig .NewBreakingConfig (
171- checkConfig ,
172164 breakingConfigV1Beta1 .GetIgnoreUnstablePackages (),
173- ), nil
165+ )
174166}
175167
176168func getPluginConfigForV1Beta1PluginConfig (
177169 registry string ,
178170 pluginConfigV1Beta1 * policyv1beta1.PolicyConfig_CheckPluginConfig ,
179- ) (bufconfig .PluginConfig , error ) {
171+ ) (bufpolicy .PluginConfig , error ) {
180172 nameV1Beta1 := pluginConfigV1Beta1 .GetName ()
181173 pluginRef , err := bufparse .NewRef (
182174 registry ,
@@ -187,17 +179,14 @@ func getPluginConfigForV1Beta1PluginConfig(
187179 if err != nil {
188180 return nil , err
189181 }
190- options , err := option .OptionsForProtoOptions (pluginConfigV1Beta1 .GetOptions ())
182+ pluginOptions , err := option .OptionsForProtoOptions (pluginConfigV1Beta1 .GetOptions ())
191183 if err != nil {
192184 return nil , err
193185 }
194- optionsMap := make (map [string ]any )
195- options .Range (func (key string , value any ) {
196- optionsMap [key ] = value
197- })
198- return bufconfig .NewRemoteWasmPluginConfig (
186+ return bufpolicy .NewPluginConfig (
187+ nameV1Beta1 .String (),
199188 pluginRef ,
200- optionsMap ,
189+ pluginOptions ,
201190 pluginConfigV1Beta1 .GetArgs (),
202191 )
203192}
0 commit comments