Skip to content

Commit 4a63a11

Browse files
committed
Remove unusued kubernetesVersion from AssetBuilder
This field is no longer used, and can be removed.
1 parent 6dfbd46 commit 4a63a11

26 files changed

+29
-48
lines changed

clusterapi/bootstrap/controllers/kopsconfig_controller.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ func (r *KopsConfigReconciler) buildBootstrapData(ctx context.Context) ([]byte,
191191
ig.Spec.Role = kops.InstanceGroupRoleNode
192192

193193
getAssets := false
194-
assetBuilder := assets.NewAssetBuilder(vfsContext, cluster.Spec.Assets, cluster.Spec.KubernetesVersion, getAssets)
194+
assetBuilder := assets.NewAssetBuilder(vfsContext, cluster.Spec.Assets, getAssets)
195195

196196
encryptionConfigSecretHash := ""
197197
// if fi.ValueOf(c.Cluster.Spec.EncryptionConfig) {

cmd/kops/create_cluster.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -651,7 +651,7 @@ func RunCreateCluster(ctx context.Context, f *util.Factory, out io.Writer, c *Cr
651651
return err
652652
}
653653

654-
assetBuilder := assets.NewAssetBuilder(clientset.VFSContext(), cluster.Spec.Assets, cluster.Spec.KubernetesVersion, false)
654+
assetBuilder := assets.NewAssetBuilder(clientset.VFSContext(), cluster.Spec.Assets, false)
655655
fullCluster, err := cloudup.PopulateClusterSpec(ctx, clientset, cluster, instanceGroups, cloud, assetBuilder)
656656
if err != nil {
657657
return err

cmd/kops/edit_cluster.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ func updateCluster(ctx context.Context, clientset simple.Clientset, oldCluster,
263263
return "", fmt.Errorf("error populating configuration: %v", err)
264264
}
265265

266-
assetBuilder := assets.NewAssetBuilder(clientset.VFSContext(), newCluster.Spec.Assets, newCluster.Spec.KubernetesVersion, false)
266+
assetBuilder := assets.NewAssetBuilder(clientset.VFSContext(), newCluster.Spec.Assets, false)
267267
fullCluster, err := cloudup.PopulateClusterSpec(ctx, clientset, newCluster, instanceGroups, cloud, assetBuilder)
268268
if err != nil {
269269
return fmt.Sprintf("error populating cluster spec: %s", err), nil

cmd/kops/edit_instancegroup.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ func updateInstanceGroup(ctx context.Context, clientset simple.Clientset, channe
295295
return "", fmt.Errorf("error populating configuration: %v", err)
296296
}
297297

298-
assetBuilder := assets.NewAssetBuilder(clientset.VFSContext(), cluster.Spec.Assets, cluster.Spec.KubernetesVersion, false)
298+
assetBuilder := assets.NewAssetBuilder(clientset.VFSContext(), cluster.Spec.Assets, false)
299299
fullCluster, err := cloudup.PopulateClusterSpec(ctx, clientset, cluster, []*api.InstanceGroup{newGroup}, cloud, assetBuilder)
300300
if err != nil {
301301
return fmt.Sprintf("error populating cluster spec: %s", err), nil

nodeup/pkg/model/kubelet_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ func BuildNodeupModelContext(model *testutils.Model) (*NodeupModelContext, error
293293
func mockedPopulateClusterSpec(ctx context.Context, c *kops.Cluster, instanceGroups []*kops.InstanceGroup, cloud fi.Cloud) (*kops.Cluster, error) {
294294
vfs.Context.ResetMemfsContext(true)
295295

296-
assetBuilder := assets.NewAssetBuilder(vfs.Context, c.Spec.Assets, c.Spec.KubernetesVersion, false)
296+
assetBuilder := assets.NewAssetBuilder(vfs.Context, c.Spec.Assets, false)
297297
basePath, err := vfs.Context.BuildVfsPath("memfs://tests")
298298
if err != nil {
299299
return nil, fmt.Errorf("error building vfspath: %v", err)

pkg/assets/builder.go

+1-13
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,11 @@ import (
2525
"strings"
2626
"time"
2727

28-
"github.com/blang/semver/v4"
2928
"github.com/google/go-containerregistry/pkg/authn"
3029
"github.com/google/go-containerregistry/pkg/crane"
3130
"k8s.io/apimachinery/pkg/util/wait"
3231
"k8s.io/klog/v2"
3332
"k8s.io/kops/pkg/apis/kops"
34-
"k8s.io/kops/pkg/apis/kops/util"
3533
"k8s.io/kops/pkg/assets/assetdata"
3634
"k8s.io/kops/pkg/featureflag"
3735
"k8s.io/kops/pkg/kubemanifest"
@@ -48,9 +46,6 @@ type AssetBuilder struct {
4846
AssetsLocation *kops.AssetsSpec
4947
GetAssets bool
5048

51-
// KubernetesVersion is the version of kubernetes we are installing
52-
KubernetesVersion semver.Version
53-
5449
// KubeletSupportedVersion is the max version of kubelet that we are currently allowed to run on worker nodes.
5550
// This is used to avoid violating the kubelet supported version skew policy,
5651
// (we are not allowed to run a newer kubelet on a worker node than the control plane)
@@ -119,20 +114,13 @@ type FileAsset struct {
119114
}
120115

121116
// NewAssetBuilder creates a new AssetBuilder.
122-
func NewAssetBuilder(vfsContext *vfs.VFSContext, assets *kops.AssetsSpec, kubernetesVersion string, getAssets bool) *AssetBuilder {
117+
func NewAssetBuilder(vfsContext *vfs.VFSContext, assets *kops.AssetsSpec, getAssets bool) *AssetBuilder {
123118
a := &AssetBuilder{
124119
vfsContext: vfsContext,
125120
AssetsLocation: assets,
126121
GetAssets: getAssets,
127122
}
128123

129-
version, err := util.ParseKubernetesVersion(kubernetesVersion)
130-
if err != nil {
131-
// This should have already been validated
132-
klog.Fatalf("unexpected error from ParseKubernetesVersion %s: %v", kubernetesVersion, err)
133-
}
134-
a.KubernetesVersion = *version
135-
136124
return a
137125
}
138126

pkg/assets/builder_test.go

-7
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222
"testing"
2323

2424
"k8s.io/kops/pkg/apis/kops"
25-
"k8s.io/kops/pkg/apis/kops/util"
2625
"k8s.io/kops/pkg/testutils/golden"
2726
)
2827

@@ -78,9 +77,7 @@ func TestValidate_RemapImage_ContainerProxy_AppliesToSimplifiedKubernetesURL(t *
7877
proxyURL := "proxy.example.com/"
7978
image := "registry.k8s.io/kube-apiserver"
8079
expected := "proxy.example.com/kube-apiserver"
81-
version, _ := util.ParseKubernetesVersion("1.10")
8280

83-
builder.KubernetesVersion = *version
8481
builder.AssetsLocation.ContainerProxy = &proxyURL
8582

8683
remapped, err := builder.RemapImage(image)
@@ -118,9 +115,7 @@ func TestValidate_RemapImage_ContainerProxy_AppliesToImagesWithTags(t *testing.T
118115
proxyURL := "proxy.example.com/"
119116
image := "registry.k8s.io/kube-apiserver:1.2.3"
120117
expected := "proxy.example.com/kube-apiserver:1.2.3"
121-
version, _ := util.ParseKubernetesVersion("1.10")
122118

123-
builder.KubernetesVersion = *version
124119
builder.AssetsLocation.ContainerProxy = &proxyURL
125120

126121
remapped, err := builder.RemapImage(image)
@@ -139,9 +134,7 @@ func TestValidate_RemapImage_ContainerRegistry_MappingMultipleTimesConverges(t *
139134
mirrorURL := "proxy.example.com"
140135
image := "kube-apiserver:1.2.3"
141136
expected := "proxy.example.com/kube-apiserver:1.2.3"
142-
version, _ := util.ParseKubernetesVersion("1.10")
143137

144-
builder.KubernetesVersion = *version
145138
builder.AssetsLocation.ContainerRegistry = &mirrorURL
146139

147140
remapped := image

pkg/commands/helpers_readwrite.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func UpdateCluster(ctx context.Context, clientset simple.Clientset, cluster *kop
4040
return fmt.Errorf("error populating configuration: %v", err)
4141
}
4242

43-
assetBuilder := assets.NewAssetBuilder(clientset.VFSContext(), cluster.Spec.Assets, cluster.Spec.KubernetesVersion, false)
43+
assetBuilder := assets.NewAssetBuilder(clientset.VFSContext(), cluster.Spec.Assets, false)
4444
fullCluster, err := cloudup.PopulateClusterSpec(ctx, clientset, cluster, instanceGroups, cloud, assetBuilder)
4545
if err != nil {
4646
return err
@@ -78,7 +78,7 @@ func UpdateInstanceGroup(ctx context.Context, clientset simple.Clientset, cluste
7878
return fmt.Errorf("error populating configuration: %v", err)
7979
}
8080

81-
assetBuilder := assets.NewAssetBuilder(clientset.VFSContext(), cluster.Spec.Assets, cluster.Spec.KubernetesVersion, false)
81+
assetBuilder := assets.NewAssetBuilder(clientset.VFSContext(), cluster.Spec.Assets, false)
8282
fullCluster, err := cloudup.PopulateClusterSpec(ctx, clientset, cluster, allInstanceGroups, cloud, assetBuilder)
8383
if err != nil {
8484
return err

pkg/instancegroups/rollingupdate_os_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func getTestSetupOS(t *testing.T, ctx context.Context) (*RollingUpdateCluster, *
5555
t.Fatalf("Failed to perform assignments: %v", err)
5656
}
5757

58-
assetBuilder := assets.NewAssetBuilder(vfs.Context, inCluster.Spec.Assets, inCluster.Spec.KubernetesVersion, false)
58+
assetBuilder := assets.NewAssetBuilder(vfs.Context, inCluster.Spec.Assets, false)
5959
basePath, _ := vfs.Context.BuildVfsPath(inCluster.Spec.ConfigStore.Base)
6060
clientset := vfsclientset.NewVFSClientset(vfs.Context, basePath)
6161
cluster, err := cloudup.PopulateClusterSpec(ctx, clientset, inCluster, nil, mockcloud, assetBuilder)

pkg/model/components/containerd_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func Test_Build_Containerd_Supported_Version(t *testing.T) {
4545
for _, v := range kubernetesVersions {
4646

4747
c := buildContainerdCluster(v)
48-
b := assets.NewAssetBuilder(vfs.Context, c.Spec.Assets, c.Spec.KubernetesVersion, false)
48+
b := assets.NewAssetBuilder(vfs.Context, c.Spec.Assets, false)
4949

5050
version, err := util.ParseKubernetesVersion(v)
5151
if err != nil {

pkg/model/components/etcdmanager/model_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func Test_RunEtcdManagerBuilder(t *testing.T) {
5353

5454
builder := EtcdManagerBuilder{
5555
KopsModelContext: kopsModelContext,
56-
AssetBuilder: assets.NewAssetBuilder(vfs.Context, kopsModelContext.Cluster.Spec.Assets, kopsModelContext.Cluster.Spec.KubernetesVersion, false),
56+
AssetBuilder: assets.NewAssetBuilder(vfs.Context, kopsModelContext.Cluster.Spec.Assets, false),
5757
}
5858

5959
if err := builder.Build(context); err != nil {

pkg/model/components/image_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func TestImage(t *testing.T) {
7878
}
7979
}
8080

81-
assetBuilder := assets.NewAssetBuilder(vfs.Context, g.Cluster.Spec.Assets, g.Cluster.Spec.KubernetesVersion, false)
81+
assetBuilder := assets.NewAssetBuilder(vfs.Context, g.Cluster.Spec.Assets, false)
8282
actual, err := Image(g.Component, &g.Cluster.Spec, assetBuilder)
8383
if err != nil {
8484
t.Errorf("unexpected error from image %q %v: %v",

pkg/model/components/kubeapiserver/model_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func Test_RunKubeApiserverBuilder(t *testing.T) {
5050

5151
builder := KubeApiserverBuilder{
5252
KopsModelContext: kopsModelContext,
53-
AssetBuilder: assets.NewAssetBuilder(vfs.Context, kopsModelContext.Cluster.Spec.Assets, kopsModelContext.Cluster.Spec.KubernetesVersion, false),
53+
AssetBuilder: assets.NewAssetBuilder(vfs.Context, kopsModelContext.Cluster.Spec.Assets, false),
5454
}
5555

5656
if err := builder.Build(context); err != nil {

pkg/model/components/kubecontrollermanager_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func Test_Build_KCM_Builder(t *testing.T) {
4747

4848
c := buildCluster()
4949
c.Spec.KubernetesVersion = v
50-
b := assets.NewAssetBuilder(vfs.Context, c.Spec.Assets, c.Spec.KubernetesVersion, false)
50+
b := assets.NewAssetBuilder(vfs.Context, c.Spec.Assets, false)
5151

5252
kcm := &KubeControllerManagerOptionsBuilder{
5353
OptionsContext: &OptionsContext{
@@ -68,7 +68,7 @@ func Test_Build_KCM_Builder(t *testing.T) {
6868

6969
func Test_Build_KCM_Builder_Change_Duration(t *testing.T) {
7070
c := buildCluster()
71-
b := assets.NewAssetBuilder(vfs.Context, c.Spec.Assets, c.Spec.KubernetesVersion, false)
71+
b := assets.NewAssetBuilder(vfs.Context, c.Spec.Assets, false)
7272

7373
kcm := &KubeControllerManagerOptionsBuilder{
7474
OptionsContext: &OptionsContext{
@@ -143,7 +143,7 @@ func Test_Build_KCM_Builder_CIDR_Mask_Size(t *testing.T) {
143143
for _, tc := range grid {
144144
t.Run(tc.PodCIDR+":"+tc.ClusterCIDR, func(t *testing.T) {
145145
c := buildCluster()
146-
b := assets.NewAssetBuilder(vfs.Context, c.Spec.Assets, c.Spec.KubernetesVersion, false)
146+
b := assets.NewAssetBuilder(vfs.Context, c.Spec.Assets, false)
147147

148148
kcm := &KubeControllerManagerOptionsBuilder{
149149
OptionsContext: &OptionsContext{

pkg/model/components/kubelet_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func buildKubeletTestCluster() *kops.Cluster {
3838
}
3939

4040
func buildOptions(cluster *kops.Cluster) error {
41-
ab := assets.NewAssetBuilder(vfs.Context, cluster.Spec.Assets, cluster.Spec.KubernetesVersion, false)
41+
ab := assets.NewAssetBuilder(vfs.Context, cluster.Spec.Assets, false)
4242

4343
ver, err := util.ParseKubernetesVersion(cluster.Spec.KubernetesVersion)
4444
if err != nil {

pkg/model/components/kubescheduler/model_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ func Test_RunKubeSchedulerBuilder(t *testing.T) {
5151

5252
builder := KubeSchedulerBuilder{
5353
KopsModelContext: kopsModelContext,
54-
AssetBuilder: assets.NewAssetBuilder(vfs.Context, kopsModelContext.Cluster.Spec.Assets, kopsModelContext.Cluster.Spec.KubernetesVersion, false),
54+
AssetBuilder: assets.NewAssetBuilder(vfs.Context, kopsModelContext.Cluster.Spec.Assets, false),
5555
}
5656

5757
if err := builder.Build(context); err != nil {

pkg/model/components/kubescheduler_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func Test_Build_Scheduler(t *testing.T) {
3131

3232
c := buildCluster()
3333
c.Spec.KubernetesVersion = v
34-
b := assets.NewAssetBuilder(vfs.Context, c.Spec.Assets, c.Spec.KubernetesVersion, false)
34+
b := assets.NewAssetBuilder(vfs.Context, c.Spec.Assets, false)
3535

3636
version, err := util.ParseKubernetesVersion(v)
3737
if err != nil {

pkg/nodemodel/wellknownassets/cni_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func Test_FindCNIAssetFromEnvironmentVariable(t *testing.T) {
3838

3939
ig := &api.InstanceGroup{}
4040

41-
assetBuilder := assets.NewAssetBuilder(vfs.Context, cluster.Spec.Assets, cluster.Spec.KubernetesVersion, false)
41+
assetBuilder := assets.NewAssetBuilder(vfs.Context, cluster.Spec.Assets, false)
4242

4343
igModel, err := kopsmodel.ForInstanceGroup(cluster, ig)
4444
if err != nil {
@@ -73,7 +73,7 @@ func Test_FindCNIAssetFromDefaults122(t *testing.T) {
7373
t.Fatalf("building instance group model: %v", err)
7474
}
7575

76-
assetBuilder := assets.NewAssetBuilder(vfs.Context, cluster.Spec.Assets, cluster.Spec.KubernetesVersion, false)
76+
assetBuilder := assets.NewAssetBuilder(vfs.Context, cluster.Spec.Assets, false)
7777

7878
asset, err := FindCNIAssets(igModel, assetBuilder, architectures.ArchitectureAmd64)
7979
if err != nil {

pkg/nodemodel/wellknownassets/crictl_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func Test_FindCrictlVersionHash(t *testing.T) {
4040
t.Fatalf("building instance group model: %v", err)
4141
}
4242

43-
assetBuilder := assets.NewAssetBuilder(vfs.Context, cluster.Spec.Assets, cluster.Spec.KubernetesVersion, false)
43+
assetBuilder := assets.NewAssetBuilder(vfs.Context, cluster.Spec.Assets, false)
4444

4545
crictlAsset, err := FindCrictlAsset(igModel, assetBuilder, architectures.ArchitectureAmd64)
4646
if err != nil {

upup/pkg/fi/cloudup/apply_cluster.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ func (c *ApplyClusterCmd) Run(ctx context.Context) (*ApplyResults, error) {
241241
clusterLifecycle = fi.LifecycleIgnore
242242
}
243243

244-
assetBuilder := assets.NewAssetBuilder(c.Clientset.VFSContext(), c.Cluster.Spec.Assets, c.Cluster.Spec.KubernetesVersion, c.GetAssets)
244+
assetBuilder := assets.NewAssetBuilder(c.Clientset.VFSContext(), c.Cluster.Spec.Assets, c.GetAssets)
245245
if len(c.ControlPlaneRunningVersion) > 0 && c.ControlPlaneRunningVersion != c.Cluster.Spec.KubernetesVersion {
246246
assetBuilder.KubeletSupportedVersion = c.ControlPlaneRunningVersion
247247
}

upup/pkg/fi/cloudup/awstasks/elastic_ip_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ func checkNoChanges(t *testing.T, ctx context.Context, cloud fi.Cloud, allTasks
117117
KubernetesVersion: "v1.9.0",
118118
},
119119
}
120-
assetBuilder := assets.NewAssetBuilder(vfs.Context, cluster.Spec.Assets, cluster.Spec.KubernetesVersion, false)
120+
assetBuilder := assets.NewAssetBuilder(vfs.Context, cluster.Spec.Assets, false)
121121
target := fi.NewCloudupDryRunTarget(assetBuilder, os.Stderr)
122122
context, err := fi.NewCloudupContext(ctx, fi.DeletionProcessingModeDeleteIncludingDeferred, target, nil, cloud, nil, nil, nil, allTasks)
123123
if err != nil {

upup/pkg/fi/cloudup/bootstrapchannelbuilder_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ func runChannelBuilderTest(t *testing.T, key string, addonManifests []string) {
164164
bcb := bootstrapchannelbuilder.NewBootstrapChannelBuilder(
165165
&kopsModel,
166166
fi.LifecycleSync,
167-
assets.NewAssetBuilder(vfs.Context, cluster.Spec.Assets, cluster.Spec.KubernetesVersion, false),
167+
assets.NewAssetBuilder(vfs.Context, cluster.Spec.Assets, false),
168168
templates,
169169
nil,
170170
)

upup/pkg/fi/cloudup/gcetasks/serviceaccount_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ func doDryRun(t *testing.T, ctx context.Context, cloud fi.Cloud, allTasks map[st
118118
KubernetesVersion: "v1.23.0",
119119
},
120120
}
121-
assetBuilder := assets.NewAssetBuilder(vfs.Context, cluster.Spec.Assets, cluster.Spec.KubernetesVersion, false)
121+
assetBuilder := assets.NewAssetBuilder(vfs.Context, cluster.Spec.Assets, false)
122122
target := fi.NewCloudupDryRunTarget(assetBuilder, os.Stderr)
123123
context, err := fi.NewCloudupContext(ctx, fi.DeletionProcessingModeDeleteIncludingDeferred, target, nil, cloud, nil, nil, nil, allTasks)
124124
if err != nil {

upup/pkg/fi/cloudup/populate_cluster_spec_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ func TestPopulateCluster_Subnets(t *testing.T) {
110110
func mockedPopulateClusterSpec(ctx context.Context, c *kopsapi.Cluster, cloud fi.Cloud) (*kopsapi.Cluster, error) {
111111
vfs.Context.ResetMemfsContext(true)
112112

113-
assetBuilder := assets.NewAssetBuilder(vfs.Context, c.Spec.Assets, c.Spec.KubernetesVersion, false)
113+
assetBuilder := assets.NewAssetBuilder(vfs.Context, c.Spec.Assets, false)
114114
basePath, err := vfs.Context.BuildVfsPath("memfs://tests")
115115
if err != nil {
116116
return nil, fmt.Errorf("error building vfspath: %v", err)

upup/pkg/fi/dryruntarget_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func (*testTask) Run(_ *CloudupContext) error {
6767
}
6868

6969
func Test_DryrunTarget_PrintReport(t *testing.T) {
70-
builder := assets.NewAssetBuilder(vfs.Context, nil, "1.17.3", false)
70+
builder := assets.NewAssetBuilder(vfs.Context, nil, false)
7171
var stdout bytes.Buffer
7272
target := newDryRunTarget[CloudupSubContext](builder, &stdout)
7373
tasks := map[string]CloudupTask{}

upup/pkg/fi/nodeup/command.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ func (c *NodeUpCommand) Run(out io.Writer) error {
348348
Cloud: cloud,
349349
}
350350
case "dryrun":
351-
assetBuilder := assets.NewAssetBuilder(vfs.Context, nil, nodeupConfig.KubernetesVersion, false)
351+
assetBuilder := assets.NewAssetBuilder(vfs.Context, nil, false)
352352
target = fi.NewNodeupDryRunTarget(assetBuilder, out)
353353
default:
354354
return fmt.Errorf("unsupported target type %q", c.Target)

0 commit comments

Comments
 (0)