Files
netbird-kubernetes-operator/Makefile
T
Philip LaineandGitHub 84e9bff602 Add Gateway API CRDs to controller test data (#340)
The PR #335 is adding controller tests for the HTTP route which means it
needs the CRDs. So simplify future testing work we will vendor the CRDs
from the release inside of the testdata directory. This is setup so that
changes to the GW API version will force generate to be run again.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Chores**
* Updated the generated Gateway API artifacts used in the build pipeline
to ensure the latest `standard-install.yaml` content is bundled.
* Kept the bundled Gateway API version synchronized automatically by
deriving it from the project’s module version and regenerating the asset
when dependencies change.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-06-25 10:45:09 +02:00

127 lines
4.9 KiB
Makefile

# Setting SHELL to bash allows bash commands to be executed by recipes.
# Options are set to exit when a recipe line exits non-zero or a piped command fails.
SHELL = /usr/bin/env bash -o pipefail
.SHELLFLAGS = -ec
ifeq (,$(shell go env GOBIN))
GOBIN = $(shell go env GOPATH)/bin
else
GOBIN = $(shell go env GOBIN)
endif
IMG_REGISTRY ?= ghcr.io
IMG_REPOSITORY ?= netbirdio/netbird-operator
IMG_TAG ?= dev
IMG_REF := $(IMG_REGISTRY)/$(IMG_REPOSITORY):$(IMG_TAG)
.PHONY: generate
generate: api/v1/zz_generated.deepcopy.go api/v1alpha1/zz_generated.deepcopy.go pkg/applyconfigurations config/crd/bases charts/netbird-operator/crds docs/api-reference.md internal/controller/testdata/crd/gateway-api.yaml
api/v1/zz_generated.deepcopy.go api/v1alpha1/zz_generated.deepcopy.go: $(shell find api -not -name 'zz_generated*') hack/boilerplate.go.txt
@go tool controller-gen object:headerFile="hack/boilerplate.go.txt" paths="./..."
pkg/applyconfigurations: $(shell find api -not -name 'zz_generated*') hack/boilerplate.go.txt
@go tool controller-gen applyconfiguration:headerFile="hack/boilerplate.go.txt" object:headerFile="hack/boilerplate.go.txt" paths="./..."
@touch pkg/applyconfigurations
config/crd/bases: $(shell find api)
@go tool controller-gen crd paths="./..." output:crd:artifacts:config=config/crd/bases
@touch config/crd/bases
charts/netbird-operator/crds: $(GENERATED_CRDS)
@rm -rf $@
@mkdir -p $@
@cp config/crd/bases/* $@
docs/api-reference.md: $(shell find api) docs/.crd-ref-docs.yaml
@go tool crd-ref-docs --log-level error --output-path docs/api-reference.md --renderer markdown --source-path api/v1alpha1 --config docs/.crd-ref-docs.yaml
GATEWAY_API_VERSION = $(shell go list -m -f '{{.Version}}' sigs.k8s.io/gateway-api)
internal/controller/testdata/crd/gateway-api.yaml: go.mod
@curl -L https://github.com/kubernetes-sigs/gateway-api/releases/download/$(GATEWAY_API_VERSION)/standard-install.yaml -o internal/controller/testdata/crd/gateway-api.yaml
.PHONY: lint
lint:
@golangci-lint run ./...
.PHONY: test-unit
test-unit: setup-envtest
KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) --bin-dir $(LOCALBIN) -p path)" go test -v ./... -coverprofile=coverage.txt
test-e2e: build-image
cd ./test/e2e && IMG_REF=${IMG_REF} go test ./... -v -count 1
.PHONY: build
build: generate bin/linux-$(shell go env GOARCH)/netbird-operator
bin/linux-%/netbird-operator: $(shell find api cmd internal pkg) go.mod go.sum
@CGO_ENABLED=0 GOOS=linux GOARCH=$* go build -ldflags="-w -s" -trimpath -o $@ cmd/main.go
.PHONY: build-image
build-image: build
@DOCKER_BUILDKIT=1 docker build -t ${IMG_REF} .
@echo ${IMG_REF}
.PHONY: build-image-multiarch
build-image-multiarch: generate bin/linux-amd64/netbird-operator bin/linux-arm64/netbird-operator
@DOCKER_BUILDKIT=1 docker build --platform linux/amd64,linux/arm64 -t ${IMG_REF} .
@echo ${IMG_REF}
.PHONY: install
install: generate
kustomize build config/crd | kubectl apply -f -
.PHONY: uninstall
uninstall:
kustomize build config/crd | kubectl delete -f -
.PHONY: run
run: install
kubectl create namespace netbird --dry-run=client -o yaml | kubectl apply -f -
go run cmd/main.go --enable-webhooks=false --netbird-api-key=$${NB_API_KEY} --runtime-namespace netbird
##@ Dependencies
## Location to install dependencies to
LOCALBIN ?= $(shell pwd)/bin
$(LOCALBIN):
mkdir -p $(LOCALBIN)
## Tool Binaries
ENVTEST ?= $(LOCALBIN)/setup-envtest
#ENVTEST_VERSION is the version of controller-runtime release branch to fetch the envtest setup script (i.e. release-0.20)
ENVTEST_VERSION ?= $(shell go list -m -f "{{ .Version }}" sigs.k8s.io/controller-runtime | awk -F'[v.]' '{printf "release-%d.%d", $$2, $$3}')
#ENVTEST_K8S_VERSION is the version of Kubernetes to use for setting up ENVTEST binaries (i.e. 1.31)
ENVTEST_K8S_VERSION ?= $(shell go list -m -f "{{ .Version }}" k8s.io/api | awk -F'[v.]' '{printf "1.%d", $$3}')
.PHONY: setup-envtest
setup-envtest: envtest ## Download the binaries required for ENVTEST in the local bin directory.
@echo "Setting up envtest binaries for Kubernetes version $(ENVTEST_K8S_VERSION)..."
@$(ENVTEST) use $(ENVTEST_K8S_VERSION) --bin-dir $(LOCALBIN) -p path || { \
echo "Error: Failed to set up envtest binaries for version $(ENVTEST_K8S_VERSION)."; \
exit 1; \
}
.PHONY: envtest
envtest: $(ENVTEST) ## Download setup-envtest locally if necessary.
$(ENVTEST): $(LOCALBIN)
$(call go-install-tool,$(ENVTEST),sigs.k8s.io/controller-runtime/tools/setup-envtest,$(ENVTEST_VERSION))
# go-install-tool will 'go install' any package with custom target and name of binary, if it doesn't exist
# $1 - target path with name of binary
# $2 - package url which can be installed
# $3 - specific version of package
define go-install-tool
@[ -f "$(1)-$(3)" ] || { \
set -e; \
package=$(2)@$(3) ;\
echo "Downloading $${package}" ;\
rm -f $(1) || true ;\
GOBIN=$(LOCALBIN) go install $${package} ;\
mv $(1) $(1)-$(3) ;\
} ;\
ln -sf $(1)-$(3) $(1)
endef