Skip to content

Commit 9c797cc

Browse files
authored
Merge pull request #13 from gianlucam76/v0.3.0
Prepare for release v0.3.0
2 parents 49e85f5 + c175fcd commit 9c797cc

17 files changed

+415
-805
lines changed

.golangci.yaml

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,7 @@ linters-settings:
3636
goimports:
3737
local-prefixes: github.com/projectsveltos
3838
gomnd:
39-
settings:
40-
mnd:
41-
# don't include the "operation" and "assign"
42-
checks: argument,case,condition,return
39+
checks: argument,case,condition,return
4340
gomodguard:
4441
# Although this is almost empty, we will evolve the list below with the
4542
# modules we shouldn't use for technical and/or security reasons.
@@ -51,7 +48,7 @@ linters-settings:
5148
# Don't merge replace directives using local path.
5249
local_replace_directives: true
5350
govet:
54-
check-shadowing: true
51+
shadow: true
5552
settings:
5653
printf:
5754
funcs:
@@ -177,6 +174,4 @@ run:
177174
allow-parallel-runners: true
178175
# Timeout for analysis
179176
timeout: 5m
180-
# files to skip: they will be analyzed, but issues from them won't be reported.
181-
skip-dirs:
182-
- cmd/example/gen
177+

Dockerfile

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# Build the manager binary
2-
FROM golang:1.21 as builder
2+
FROM golang:1.22 as builder
3+
4+
ARG BUILDOS
5+
ARG TARGETARCH
36

47
WORKDIR /workspace
58
# Copy the Go Modules manifests
@@ -15,7 +18,7 @@ COPY api/ api/
1518
COPY controllers/ controllers/
1619

1720
# Build
18-
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o manager main.go
21+
RUN CGO_ENABLED=0 GOOS=$BUILDOS GOARCH=$TARGETARCH go build -a -o manager main.go
1922

2023
# Use distroless as minimal base image to package the manager binary
2124
# Refer to https://github.com/GoogleContainerTools/distroless for more details

Makefile

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# Image URL to use all building/pushing image targets
33
IMG ?= controller:latest
44
# KUBEBUILDER_ENVTEST_KUBERNETES_VERSION refers to the version of kubebuilder assets to be downloaded by envtest binary.
5-
KUBEBUILDER_ENVTEST_KUBERNETES_VERSION = 1.28.0
5+
KUBEBUILDER_ENVTEST_KUBERNETES_VERSION = 1.30.0
66

77
# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)
88
ifeq (,$(shell go env GOBIN))
@@ -25,7 +25,7 @@ ARCH ?= amd64
2525
OS ?= $(shell uname -s | tr A-Z a-z)
2626
K8S_LATEST_VER ?= $(shell curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)
2727
export CONTROLLER_IMG ?= $(REGISTRY)/$(IMAGE_NAME)
28-
TAG ?= main
28+
TAG ?= v0.3.0
2929

3030
.PHONY: all
3131
all: build
@@ -62,14 +62,31 @@ CONTROLLER_GEN := $(TOOLS_BIN_DIR)/controller-gen
6262
ENVSUBST := $(TOOLS_BIN_DIR)/envsubst
6363
GOIMPORTS := $(TOOLS_BIN_DIR)/goimports
6464
GOLANGCI_LINT := $(TOOLS_BIN_DIR)/golangci-lint
65-
KUSTOMIZE := $(TOOLS_BIN_DIR)/kustomize
6665
GINKGO := $(TOOLS_BIN_DIR)/ginkgo
67-
SETUP_ENVTEST := $(TOOLS_BIN_DIR)/setup_envs
6866
KIND := $(TOOLS_BIN_DIR)/kind
6967
KUBECTL := $(TOOLS_BIN_DIR)/kubectl
7068

71-
GOLANGCI_LINT_VERSION := "v1.55.2"
72-
CLUSTERCTL_VERSION := "v1.6.1"
69+
GOLANGCI_LINT_VERSION := "v1.57.2"
70+
CLUSTERCTL_VERSION := "v1.7.2"
71+
72+
KUSTOMIZE_VER := v4.5.2
73+
KUSTOMIZE_BIN := kustomize
74+
KUSTOMIZE := $(abspath $(TOOLS_BIN_DIR)/$(KUSTOMIZE_BIN)-$(KUSTOMIZE_VER))
75+
KUSTOMIZE_PKG := sigs.k8s.io/kustomize/kustomize/v4
76+
$(KUSTOMIZE): # Build kustomize from tools folder.
77+
CGO_ENABLED=0 GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) $(KUSTOMIZE_PKG) $(KUSTOMIZE_BIN) $(KUSTOMIZE_VER)
78+
79+
SETUP_ENVTEST_VER := v0.0.0-20240215143116-d0396a3d6f9f
80+
SETUP_ENVTEST_BIN := setup-envtest
81+
SETUP_ENVTEST := $(abspath $(TOOLS_BIN_DIR)/$(SETUP_ENVTEST_BIN)-$(SETUP_ENVTEST_VER))
82+
SETUP_ENVTEST_PKG := sigs.k8s.io/controller-runtime/tools/setup-envtest
83+
setup-envtest: $(SETUP_ENVTEST) ## Set up envtest (download kubebuilder assets)
84+
@echo KUBEBUILDER_ASSETS=$(KUBEBUILDER_ASSETS)
85+
86+
$(SETUP_ENVTEST_BIN): $(SETUP_ENVTEST) ## Build a local copy of setup-envtest.
87+
88+
$(SETUP_ENVTEST): # Build setup-envtest from tools folder.
89+
GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) $(SETUP_ENVTEST_PKG) $(SETUP_ENVTEST_BIN) $(SETUP_ENVTEST_VER)
7390

7491
$(CONTROLLER_GEN): $(TOOLS_DIR)/go.mod # Build controller-gen from tools folder.
7592
cd $(TOOLS_DIR); $(GOBUILD) -tags=tools -o $(subst $(TOOLS_DIR)/hack/tools/,,$@) sigs.k8s.io/controller-tools/cmd/controller-gen
@@ -80,9 +97,6 @@ $(ENVSUBST): $(TOOLS_DIR)/go.mod # Build envsubst from tools folder.
8097
$(GOLANGCI_LINT): # Build golangci-lint from tools folder.
8198
cd $(TOOLS_DIR); ./get-golangci-lint.sh $(GOLANGCI_LINT_VERSION)
8299

83-
$(SETUP_ENVTEST): $(TOOLS_DIR)/go.mod # Build setup-envtest from tools folder.
84-
cd $(TOOLS_DIR); $(GOBUILD) -tags=tools -o $(subst $(TOOLS_DIR)/hack/tools/,,$@) sigs.k8s.io/controller-runtime/tools/setup-envtest
85-
86100
$(GOIMPORTS):
87101
cd $(TOOLS_DIR); $(GOBUILD) -tags=tools -o $(subst $(TOOLS_DIR)/hack/tools/,,$@) golang.org/x/tools/cmd/goimports
88102

@@ -101,13 +115,6 @@ $(KUBECTL):
101115
curl -L https://storage.googleapis.com/kubernetes-release/release/$(K8S_LATEST_VER)/bin/$(OS)/$(ARCH)/kubectl -o $@
102116
chmod +x $@
103117

104-
KUSTOMIZE_VER := v4.5.2
105-
KUSTOMIZE_BIN := kustomize
106-
KUSTOMIZE := $(abspath $(TOOLS_BIN_DIR)/$(KUSTOMIZE_BIN)-$(KUSTOMIZE_VER))
107-
KUSTOMIZE_PKG := sigs.k8s.io/kustomize/kustomize/v4
108-
$(KUSTOMIZE): # Build kustomize from tools folder.
109-
CGO_ENABLED=0 GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) $(KUSTOMIZE_PKG) $(KUSTOMIZE_BIN) $(KUSTOMIZE_VER)
110-
111118
.PHONY: tools
112119
tools: $(CONTROLLER_GEN) $(ENVSUBST) $(KUSTOMIZE) $(GOLANGCI_LINT) $(SETUP_ENVTEST) $(GOIMPORTS) $(GINKGO) $(KIND) $(KUBECTL) ## build all tools
113120

@@ -122,7 +129,7 @@ clean: ## Remove all built tools
122129
.PHONY: manifests
123130
manifests: $(CONTROLLER_GEN) $(KUSTOMIZE) $(ENVSUBST) fmt generate ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
124131
$(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases
125-
MANIFEST_IMG=$(CONTROLLER_IMG)-$(ARCH) MANIFEST_TAG=$(TAG) $(MAKE) set-manifest-image
132+
MANIFEST_IMG=$(CONTROLLER_IMG) MANIFEST_TAG=$(TAG) $(MAKE) set-manifest-image
126133
$(KUSTOMIZE) build config/default | $(ENVSUBST) > manifest/manifest.yaml
127134

128135
.PHONY: generate
@@ -158,7 +165,7 @@ endif
158165
# K8S_VERSION for the Kind cluster can be set as environment variable. If not defined,
159166
# this default value is used
160167
ifndef K8S_VERSION
161-
K8S_VERSION := v1.28.0
168+
K8S_VERSION := v1.30.0
162169
endif
163170

164171
KIND_CONFIG ?= kind-cluster.yaml
@@ -229,17 +236,21 @@ run: manifests generate fmt vet ## Run a controller from your host.
229236
.PHONY: docker-build
230237
docker-build: ## Build docker image with the manager.
231238
go generate
232-
docker build -t $(CONTROLLER_IMG)-$(ARCH):$(TAG) .
233-
MANIFEST_IMG=$(CONTROLLER_IMG)-$(ARCH) MANIFEST_TAG=$(TAG) $(MAKE) set-manifest-image
234-
$(MAKE) set-manifest-pull-policy
239+
docker build --load --build-arg BUILDOS=linux --build-arg TARGETARCH=amd64 -t $(CONTROLLER_IMG):$(TAG) .
240+
MANIFEST_IMG=$(CONTROLLER_IMG) MANIFEST_TAG=$(TAG) $(MAKE) set-manifest-image
241+
$(MAKE) set-manifest-pull-policy
235242

236243
.PHONY: docker-push
237244
docker-push: ## Push docker image with the manager.
238-
docker push $(CONTROLLER_IMG)-$(ARCH):$(TAG)
245+
docker push $(CONTROLLER_IMG):$(TAG)
246+
247+
.PHONY: docker-buildx
248+
docker-buildx: ## docker build for multiple arch and push to docker hub
249+
docker buildx build --push --platform linux/amd64,linux/arm64 -t $(CONTROLLER_IMG):$(TAG) .
239250

240251
.PHONY: load-image
241252
load-image: docker-build $(KIND)
242-
$(KIND) load docker-image $(CONTROLLER_IMG)-$(ARCH):$(TAG) --name $(CONTROL_CLUSTER_NAME)
253+
$(KIND) load docker-image $(CONTROLLER_IMG):$(TAG) --name $(CONTROL_CLUSTER_NAME)
243254

244255
##@ Deployment
245256

config/crd/bases/extension.projectsveltos.io_jsonnetsources.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
33
kind: CustomResourceDefinition
44
metadata:
55
annotations:
6-
controller-gen.kubebuilder.io/version: v0.14.0
6+
controller-gen.kubebuilder.io/version: v0.15.0
77
name: jsonnetsources.extension.projectsveltos.io
88
spec:
99
group: extension.projectsveltos.io

config/default/manager_image_patch.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ spec:
88
spec:
99
containers:
1010
# Change the value of image field below to your controller image URL
11-
- image: projectsveltos/jsonnet-controller-amd64:main
11+
- image: projectsveltos/jsonnet-controller:v0.3.0
1212
name: manager

controllers/export_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ var (
2121
)
2222

2323
var (
24-
RequeueJsonnetSourceForReference = (*JsonnetSourceReconciler).requeueJsonnetSourceForReference
25-
RequeueJsonnetSourceForFluxSources = (*JsonnetSourceReconciler).requeueJsonnetSourceForFluxSources
24+
RequeueJsonnetSourceForReference = (*JsonnetSourceReconciler).requeueJsonnetSourceForReference
25+
RequeueJsonnetSourceForFluxGitRepository = (*JsonnetSourceReconciler).requeueJsonnetSourceForFluxGitRepository
2626
)
2727

2828
var (

controllers/jsonnetsource_controller.go

Lines changed: 40 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import (
4141
"k8s.io/apimachinery/pkg/types"
4242
"sigs.k8s.io/cluster-api/util/patch"
4343
ctrl "sigs.k8s.io/controller-runtime"
44+
"sigs.k8s.io/controller-runtime/pkg/builder"
4445
"sigs.k8s.io/controller-runtime/pkg/client"
4546
"sigs.k8s.io/controller-runtime/pkg/controller"
4647
"sigs.k8s.io/controller-runtime/pkg/handler"
@@ -212,55 +213,61 @@ func (r *JsonnetSourceReconciler) SetupWithManager(mgr ctrl.Manager,
212213
WithOptions(controller.Options{
213214
MaxConcurrentReconciles: 5,
214215
}).
216+
Watches(&corev1.ConfigMap{},
217+
handler.EnqueueRequestsFromMapFunc(r.requeueJsonnetSourceForReference),
218+
builder.WithPredicates(
219+
ConfigMapPredicates(mgr.GetLogger().WithValues("predicate", "configmappredicate")),
220+
),
221+
).
222+
Watches(&corev1.Secret{},
223+
handler.EnqueueRequestsFromMapFunc(r.requeueJsonnetSourceForReference),
224+
builder.WithPredicates(
225+
SecretPredicates(mgr.GetLogger().WithValues("predicate", "secretpredicate")),
226+
),
227+
).
215228
Build(r)
216229
if err != nil {
217230
return nil, errors.Wrap(err, "error creating controller")
218231
}
219232

220-
// When ConfigMap changes, according to ConfigMapPredicates,
221-
// one or more ClusterSummaries need to be reconciled.
222-
err = c.Watch(source.Kind(mgr.GetCache(), &corev1.ConfigMap{}),
223-
handler.EnqueueRequestsFromMapFunc(r.requeueJsonnetSourceForReference),
224-
ConfigMapPredicates(mgr.GetLogger().WithValues("predicate", "configmappredicate")),
225-
)
226-
if err != nil {
227-
return nil, err
228-
}
229-
230-
// When Secret changes, according to SecretPredicates,
231-
// one or more ClusterSummaries need to be reconciled.
232-
err = c.Watch(source.Kind(mgr.GetCache(), &corev1.Secret{}),
233-
handler.EnqueueRequestsFromMapFunc(r.requeueJsonnetSourceForReference),
234-
SecretPredicates(mgr.GetLogger().WithValues("predicate", "secretpredicate")),
235-
)
236-
237233
return c, err
238234
}
239235

240236
func (r *JsonnetSourceReconciler) WatchForFlux(mgr ctrl.Manager, c controller.Controller) error {
241237
// When a Flux source (GitRepository/OCIRepository/Bucket) changes, one or more ClusterSummaries
242238
// need to be reconciled.
243239

244-
err := c.Watch(source.Kind(mgr.GetCache(), &sourcev1.GitRepository{}),
245-
handler.EnqueueRequestsFromMapFunc(r.requeueJsonnetSourceForFluxSources),
246-
FluxSourcePredicates(r.Scheme, mgr.GetLogger().WithValues("predicate", "fluxsourcepredicate")),
240+
sourceGitRepository := source.Kind[*sourcev1.GitRepository](
241+
mgr.GetCache(),
242+
&sourcev1.GitRepository{},
243+
handler.TypedEnqueueRequestsFromMapFunc(r.requeueJsonnetSourceForFluxGitRepository),
244+
FluxGitRepositoryPredicate{Logger: mgr.GetLogger().WithValues("predicate", "fluxsourcepredicate")},
247245
)
248-
if err != nil {
246+
if err := c.Watch(sourceGitRepository); err != nil {
249247
return err
250248
}
251249

252-
err = c.Watch(source.Kind(mgr.GetCache(), &sourcev1b2.OCIRepository{}),
253-
handler.EnqueueRequestsFromMapFunc(r.requeueJsonnetSourceForFluxSources),
254-
FluxSourcePredicates(r.Scheme, mgr.GetLogger().WithValues("predicate", "fluxsourcepredicate")),
250+
sourceOCIRepository := source.Kind[*sourcev1b2.OCIRepository](
251+
mgr.GetCache(),
252+
&sourcev1b2.OCIRepository{},
253+
handler.TypedEnqueueRequestsFromMapFunc(r.requeueJsonnetSourceForFluxOCIRepository),
254+
FluxOCIRepositoryPredicate{Logger: mgr.GetLogger().WithValues("predicate", "fluxsourcepredicate")},
255255
)
256-
if err != nil {
256+
if err := c.Watch(sourceOCIRepository); err != nil {
257257
return err
258258
}
259259

260-
return c.Watch(source.Kind(mgr.GetCache(), &sourcev1b2.Bucket{}),
261-
handler.EnqueueRequestsFromMapFunc(r.requeueJsonnetSourceForFluxSources),
262-
FluxSourcePredicates(r.Scheme, mgr.GetLogger().WithValues("predicate", "fluxsourcepredicate")),
260+
sourceBucket := source.Kind[*sourcev1b2.Bucket](
261+
mgr.GetCache(),
262+
&sourcev1b2.Bucket{},
263+
handler.TypedEnqueueRequestsFromMapFunc(r.requeueJsonnetSourceForFluxBucket),
264+
FluxBucketPredicate{Logger: mgr.GetLogger().WithValues("predicate", "fluxsourcepredicate")},
263265
)
266+
if err := c.Watch(sourceBucket); err != nil {
267+
return err
268+
}
269+
270+
return nil
264271
}
265272

266273
func (r *JsonnetSourceReconciler) getReferenceMapForEntry(entry *corev1.ObjectReference) *libsveltosset.Set {
@@ -428,12 +435,11 @@ func prepareFileSystemWithFluxSource(ctx context.Context, c client.Client,
428435
return "", err
429436
}
430437

431-
artifactFetcher := fetch.NewArchiveFetcher(
432-
1,
433-
tar.UnlimitedUntarSize,
434-
tar.UnlimitedUntarSize,
435-
os.Getenv("SOURCE_CONTROLLER_LOCALHOST"),
436-
)
438+
artifactFetcher := fetch.New(
439+
fetch.WithRetries(1),
440+
fetch.WithMaxDownloadSize(tar.UnlimitedUntarSize),
441+
fetch.WithUntar(tar.WithMaxUntarSize(tar.UnlimitedUntarSize)),
442+
fetch.WithHostnameOverwrite(os.Getenv("SOURCE_CONTROLLER_LOCALHOST")))
437443

438444
// Download artifact and extract files to the tmp dir.
439445
err = artifactFetcher.Fetch(fluxSource.GetArtifact().URL, fluxSource.GetArtifact().Digest, tmpDir)

0 commit comments

Comments
 (0)