make test error with Golang: make: *** [Makefile:47: manifests] Error 126

44 Views Asked by At

I am trying to run: make test for following git repo:

https://github.com/ray-project/kuberay/blob/master/ray-operator/DEVELOPMENT.md

My Environment values:

  • $PATH: $HOME/.goenv/bin:$HOME/.gohome/bin:/home/linuxbrew/.linuxbrew/bin:$HOME/.istioctl/bin:$HOME/.krew/bin:$HOME/.local/helmenv/bin:$HOME/.local/tfenv/bin:/opt/apache-maven-3.6.3/bin:/usr/local/bin/golang/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/bin/golang/bin
  • $GOPATH: $HOME/.gohome
  • echo "$GOENV_ROOT \n$GOPATH": $HOME/.goenv $HOME/.gohome
  • Make version: GNU Make 4.3\nBuilt for x86_64-pc-linux-gnu
  • Linux version: Linux 6.5.0-21-generic #21~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Feb 9 13:32:52 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

development of above needs go 1.20, so, I am using following to download and activate go1.20:

go install golang.org/dl/go1.20.11@latest
go1.20.11 download
export GOROOT=$(go1.20.11 env GOROOT)
export PATH="$GOROOT/bin:$PATH"

now when I execute: make test, I see following error:

$HOME/Projects/Personal/kuberay/ray-operator/bin/controller-gen "crd:maxDescLen=0,generateEmbeddedObjectMeta=true,allowDangerousTypes=true" rbac:roleName=kuberay-operator webhook paths="./..." output:crd:artifacts:config=config/crd/bases ; bash: line 1: $HOME/Projects/Personal/kuberay/ray-operator/bin/controller-gen: Permission denied make: *** [Makefile:47: manifests] Error 126

I tried manually adding chmod +x to controller-gen in make file:

chmod +x $HOME/Projects/Personal/kuberay/ray-operator/bin/controller-gen
chmod +x $HOME/Projects/Personal/kuberay/ray-operator/bin/controller-gen

Still the same error.

My updated Makefile:

BUILD_TIME      := $(shell date "+%F %T")
COMMIT_SHA1     := $(shell git rev-parse HEAD )

# Image URL to use all building/pushing image targets
IMG ?= controller:latest
# Golang forbids converting float from Json to struct. Need allowDangerousTypes=true to unblock build.
CRD_OPTIONS ?= "crd:maxDescLen=0,generateEmbeddedObjectMeta=true,allowDangerousTypes=true"

# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)
# ifeq (,$(shell go env GOBIN))
# GOBIN=$(shell go env GOPATH)/bin
# else
# GOBIN=$(shell go env GOBIN)
# endif

# Setting SHELL to bash allows bash commands to be executed by recipes.
# This is a requirement for 'setup-envtest.sh' in the test target.
# 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

# Container Engine to be used for building images
ENGINE ?= "docker"

all: build

##@ General

# The help target prints out all targets with their descriptions organized
# beneath their categories. The categories are represented by '##@' and the
# target descriptions by '##'. The awk commands is responsible for reading the
# entire set of makefiles included in this invocation, looking for lines of the
# file as xyz: ## something, and then pretty-format the target and help. Then,
# if there's a line with ##@ something, that gets pretty-printed as a category.
# More info on the usage of ANSI control characters for terminal formatting:
# https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters
# More info on the awk command:
# http://linuxcommand.org/lc3_adv_awk.php

help: ## Display this help.
    @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n  make \033[36m<target>\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf "  \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)

##@ Development

manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
    chmod +x $(CONTROLLER_GEN)
    $(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=kuberay-operator webhook paths="./..." output:crd:artifacts:config=config/crd/bases ;

generate: manifests api-docs controller-gen ## Generate code containing DeepCopy, DeepCopyInto, DeepCopyObject methods and generated client for ApplyConfiguration.
    $(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./..." ;
    ./hack/update-codegen.sh ;

helm: manifests ## Sync the CRDs into the Helm chart
    rm -r ../helm-chart/kuberay-operator/crds/ ;
    cp -r config/crd/bases/ ../helm-chart/kuberay-operator/crds/ ;

fmt: ## Run go fmt against code.
    go fmt ./... ;

vet: ## Run go vet against code.
    go vet ./... ;

fumpt: gofumpt
    $(GOFUMPT) -l -w ../ ;

test: WHAT ?= $(shell go list ./... ;| grep -v /test/) ;
test: ENVTEST_K8S_VERSION ?= 1.24.2 ;
test: manifests fmt vet envtest ## Run tests.
    KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) --bin-dir $(LOCALBIN) -p path ;) ;" go test $(WHAT) -coverprofile cover.out ;

# You can use `go test -timeout 30m -v ./test/e2e/rayjob_test.go ./test/e2e/support.go` if you only want to run tests in `rayjob_test.go`.
test-e2e: WHAT ?= ./test/e2e ;
test-e2e: manifests fmt vet ; ## Run e2e tests.
    go test -timeout 30m -v $(WHAT) ;

sync: helm api-docs
    ./hack/update-codegen.sh

##@ Build

build: fmt vet ## Build manager binary.
    go build                                    \
    -ldflags                                    \
    "                                           \
    -X 'main._buildTime_=${BUILD_TIME}'         \
    -X 'main._commitId_=${COMMIT_SHA1}'         \
    "                                           \
    -o bin/manager main.go ;
    chmod +x bin/manager

# run: manifests fmt vet
# Running the controller from your host may fail to reconcile resources. For example, when creating a RayService
# KubeRay sends HTTP requests to the Ray head using ${HEAD_SVC_FQDN}:52365 which is not reachable from outside of a K8s cluster.
# For detail, see https://docs.ray.io/en/master/cluster/kubernetes/troubleshooting/rayservice-troubleshooting.html#issue-5-fail-to-create-update-serve-applications
#   go run ./main.go -enable-leader-election=false

docker-image: ## Build image only
    ${ENGINE} build -t ${IMG} .

docker-build: build docker-image ## Build image with the manager.

docker-push: ## Push image with the manager.
    ${ENGINE} push ${IMG}

docker-multi-arch-image: # Build and push multi arch image, amd64 and arm64 currently
    ${ENGINE} buildx build --push --platform linux/amd64,linux/arm64/v8 -t ${IMG} .

##@ Deployment

install: manifests kustomize ## Install CRDs into the K8s cluster specified in ~/.kube/config.
    ($(KUSTOMIZE) build config/crd | kubectl create -f -) || ($(KUSTOMIZE) build config/crd | kubectl replace -f -)

uninstall: manifests kustomize ## Uninstall CRDs from the K8s cluster specified in ~/.kube/config.
    $(KUSTOMIZE) build config/crd | kubectl delete -f -

deploy: manifests kustomize ## Deploy controller to the K8s cluster specified in ~/.kube/config.
    cd config/default && $(KUSTOMIZE) edit set image kuberay/operator=${IMG}
    $(KUSTOMIZE) build config/default | kubectl apply --server-side=true -f -

undeploy: ## Undeploy controller from the K8s cluster specified in ~/.kube/config.
    $(KUSTOMIZE) build config/default | kubectl delete -f -

.PHONY: api-docs
api-docs: crd-ref-docs ## Generate CRD documentation.
    $(CRD_REF_DOCS) \
    --config=./hack/config.yaml \
    --source-path=./apis/ray \
    --renderer=markdown \
    --output-path=../docs/reference/api.md

certmanager:
    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.2/cert-manager.yaml ;

deploy-with-webhooks: manifests kustomize certmanager ## Deploy controller with webhooks to the K8s cluster specified in ~/.kube/config.
    cd config/default-with-webhooks && $(KUSTOMIZE) edit set image kuberay/operator=${IMG}
    ($(KUSTOMIZE) build config/default-with-webhooks | kubectl create -f -) || ($(KUSTOMIZE) build config/default-with-webhooks | kubectl replace -f -)

undeploy-with-webhooks: ## Undeploy controller with webhooks from the K8s cluster specified in ~/.kube/config.
    $(KUSTOMIZE) build config/default-with-webhooks | kubectl delete -f -

##@ Binaries

## Local bin directory
LOCALBIN ?= $(shell pwd)/bin
$(LOCALBIN):
    mkdir -p $(LOCALBIN)

CONTROLLER_GEN = $(LOCALBIN)/controller-gen
$(CONTROLLER_GEN): $(LOCALBIN)
controller-gen: $(CONTROLLER_GEN) ## Download controller-gen locally if necessary.
    test -s $(CONTROLLER_GEN) || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-tools/cmd/[email protected] ;
    chmod +x $(CONTROLLER_GEN)

KUSTOMIZE = $(LOCALBIN)/kustomize
$(KUSTOMIZE): $(LOCALBIN)
kustomize: $(KUSTOMIZE) ## Download kustomize locally if necessary.
    test -s $(KUSTOMIZE) || GOBIN=$(LOCALBIN) go install sigs.k8s.io/kustomize/kustomize/v5@latest ;

ENVTEST = $(LOCALBIN)/setup-envtest
$(ENVTEST): $(LOCALBIN)
envtest: $(ENVTEST) ## Download envtest locally if necessary.
    test -s $(ENVTEST) || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest ;

GOFUMPT = $(LOCALBIN)/gofumpt
$(GOFUMPT): $(LOCALBIN)
gofumpt: $(GOFUMPT) ## Download gofumpt locally if necessary.
    test -s $(GOFUMPT) || GOBIN=$(LOCALBIN) go install mvdan.cc/gofumpt@latest ;

CRD_REF_DOCS = $(LOCALBIN)/crd-ref-docs
$(CRD_REF_DOCS): $(LOCALBIN)
.PHONY: crd-ref-docs
crd-ref-docs: $(CRD_REF_DOCS) ## Download crd-ref-docs locally if necessary.
    test -s $(CRD_REF_DOCS) || GOBIN=$(LOCALBIN) go install github.com/elastic/crd-ref-docs@latest ;

.PHONY: clean
clean:
    rm -rf $(LOCALBIN) ;

same make command works perfectly on my Mac machine.

I tried some similar threads on SO:

Error codes are same, but, they are referring to different error.

Also looked kubebuilder issue: https://github.com/kubernetes-sigs/kubebuilder/issues/3434, but, that's not related.

Any suggestion on how to fix it or anyone facing a similar issue?

I tried some similar threads on SO:

GNU Make Error 126, C:\Program is a directory
AOSP - Android 6 Marshmallow compilation - make: *** [run_soong] Error 126

Error codes are same, but, they are referring to different error.

Also looked kubebuilder issue: https://github.com/kubernetes-sigs/kubebuilder/issues/3434, but, that's not related.

0

There are 0 best solutions below