go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/Makefile (about)

     1  NAMESPACE=mondoo
     2  
     3  ifndef LATEST_VERSION_TAG
     4  # echo "read LATEST_VERSION_TAG from git"
     5  LATEST_VERSION_TAG=$(shell git describe --abbrev=0 --tags)
     6  endif
     7  
     8  ifndef MANIFEST_VERSION
     9  # echo "read MANIFEST_VERSION from git"
    10  MANIFEST_VERSION=$(shell git describe --abbrev=0 --tags)
    11  endif
    12  
    13  ifndef TAG
    14  # echo "read TAG from git"
    15  TAG=$(shell git log --pretty=format:'%h' -n 1)
    16  endif
    17  
    18  ifndef VERSION
    19  # echo "read VERSION from git"
    20  VERSION=${LATEST_VERSION_TAG}+$(shell git rev-list --count HEAD)
    21  endif
    22  
    23  ifndef TARGETOS
    24  	TARGETOS = $(shell go env GOOS)
    25  endif
    26  
    27  BIN_SUFFIX = ""
    28  ifeq ($(TARGETOS),windows)
    29  	BIN_SUFFIX=".exe"
    30  endif
    31  
    32  LDFLAGS=-ldflags "-s -w -X go.mondoo.com/cnquery.Version=${VERSION} -X go.mondoo.com/cnquery.Build=${TAG}" # -linkmode external -extldflags=-static
    33  LDFLAGSDIST=-tags production -ldflags "-s -w -X go.mondoo.com/cnquery.Version=${LATEST_VERSION_TAG} -X go.mondoo.com/cnquery.Build=${TAG} -s -w"
    34  
    35  .PHONY: info/ldflags
    36  info/ldflags:
    37  	$(info go run ${LDFLAGS} apps/cnquery/cnquery.go)
    38  	@:
    39  
    40  #   ๐Ÿงน CLEAN   #
    41  
    42  clean/proto:
    43  	find . -not -path './.*' \( -name '*.ranger.go' -or -name '*.pb.go' -or -name '*.actions.go' -or -name '*-packr.go' -or -name '*.swagger.json' \) -delete
    44  
    45  .PHONY: version
    46  version:
    47  	@echo $(VERSION)
    48  
    49  #   ๐Ÿ”จ TOOLS       #
    50  
    51  prep: prep/tools
    52  
    53  prep/tools/windows:
    54  	go get -u google.golang.org/protobuf
    55  	go get -u gotest.tools/gotestsum
    56  
    57  prep/tools:
    58  	# protobuf tooling
    59  	go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
    60  	go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
    61  	go install go.mondoo.com/ranger-rpc/protoc-gen-rangerrpc@latest
    62  	go install go.mondoo.com/ranger-rpc/protoc-gen-rangerrpc-swagger@latest
    63  	# additional helper
    64  	go install gotest.tools/gotestsum@latest
    65  	go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
    66  	go install github.com/hashicorp/copywrite@latest
    67  
    68  #   ๐ŸŒ™ MQL/MOTOR   #
    69  
    70  cnquery/generate: clean/proto llx/generate shared/generate providers explorer/generate
    71  
    72  define buildProvider
    73  	$(eval $@_HOME = $(1))
    74  	$(eval $@_NAME = $(shell basename ${$@_HOME}))
    75  	$(eval $@_DIST = "${$@_HOME}"/dist)
    76  	$(eval $@_DIST_BIN = "./dist/${$@_NAME}")
    77  	$(eval $@_BIN = "${$@_DIST}"/"${$@_NAME}")
    78  	echo "--> [${$@_NAME}] process resources"
    79  	./lr go ${$@_HOME}/resources/${$@_NAME}.lr --dist ${$@_DIST}
    80  	./lr docs yaml ${$@_HOME}/resources/${$@_NAME}.lr --docs-file ${$@_HOME}/resources/${$@_NAME}.lr.manifest.yaml
    81  	./lr docs json ${$@_HOME}/resources/${$@_NAME}.lr.manifest.yaml
    82  	echo "--> [${$@_NAME}] generate CLI json"
    83  	cd ${$@_HOME} && go run ./gen/main.go .
    84  	echo "--> [${$@_NAME}] creating ${$@_BIN}"
    85  	cd ${$@_HOME} && GOOS=${TARGETOS} go build -o ${$@_DIST_BIN}${BIN_SUFFIX} ./main.go
    86  endef
    87  
    88  define buildProviderDist
    89  	$(eval $@_HOME = $(1))
    90  	$(eval $@_NAME = $(shell basename ${$@_HOME}))
    91  	$(eval $@_DIST = "${$@_HOME}"/dist)
    92  	$(eval $@_DIST_BIN = "./dist/${$@_NAME}")
    93  	$(eval $@_BIN = "${$@_DIST}"/"${$@_NAME}")
    94  	echo "--> [${$@_NAME}] process resources"
    95  	./lr go ${$@_HOME}/resources/${$@_NAME}.lr --dist ${$@_DIST}
    96  	./lr docs yaml ${$@_HOME}/resources/${$@_NAME}.lr --docs-file ${$@_HOME}/resources/${$@_NAME}.lr.manifest.yaml
    97  	./lr docs json ${$@_HOME}/resources/${$@_NAME}.lr.manifest.yaml
    98  	echo "--> [${$@_NAME}] generate CLI json"
    99  	cd ${$@_HOME} && go run ./gen/main.go .
   100  	echo "--> [${$@_NAME}] creating ${$@_BIN}"
   101  	cd ${$@_HOME} && CGO_ENABLED=0 GOOS=${TARGETOS} go build ${LDFLAGSDIST} -o ${$@_DIST_BIN}${BIN_SUFFIX} ./main.go
   102  endef
   103  
   104  define installProvider
   105  	$(eval $@_HOME = $(1))
   106  	$(eval $@_NAME = $(shell basename ${$@_HOME}))
   107  	$(eval $@_DIST = "${$@_HOME}"/dist)
   108  	$(eval $@_BIN = "${$@_DIST}"/"${$@_NAME}")
   109  	$(eval $@_DST = "$(HOME)/.config/mondoo/providers/${$@_NAME}")
   110  	echo "--> install ${$@_NAME}"
   111  	install -d "${$@_DST}"
   112  	install -m 755 ./${$@_DIST}/${$@_NAME} ${$@_DST}/
   113  	install -m 644 ./${$@_DIST}/${$@_NAME}.json ${$@_DST}/
   114  	install -m 644 ./${$@_DIST}/${$@_NAME}.resources.json ${$@_DST}/
   115  endef
   116  
   117  define bundleProvider
   118  	$(eval $@_HOME = $(1))
   119  	$(eval $@_NAME = $(shell basename ${$@_HOME}))
   120  	$(eval $@_DIST = "${$@_HOME}"/dist)
   121  	$(eval $@_DST = "${$@_DIST}/${$@_NAME}.tar.xz")
   122  	echo "--> bundle ${$@_NAME} to ${$@_DST} (this may take a while)"
   123  	tar -cf ${$@_DST} --no-same-owner \
   124  		--use-compress-program='xz -9v' \
   125  		-C ${$@_DIST} \
   126  		${$@_NAME} ${$@_NAME}.json ${$@_NAME}.resources.json
   127  	ls -lha ${$@_DST}
   128  endef
   129  
   130  define testProvider
   131  	$(eval $@_HOME = $(1))
   132  	$(eval $@_NAME = $(shell basename ${$@_HOME}))
   133  	$(eval $@_PKGS = $(shell go list ./${$@_HOME}/...))
   134  	echo "--> test ${$@_NAME} in ${$@_HOME}"
   135  	gotestsum --junitfile ./report_${$@_NAME}.xml --format pkgname -- -cover ${$@_PKGS}
   136  endef
   137  
   138  define testGoModProvider
   139  	$(eval $@_HOME = $(1))
   140  	$(eval $@_NAME = $(shell basename ${$@_HOME}))
   141  	$(eval $@_PKGS = $(shell bash -c "cd ${$@_HOME} && go list ./..."))
   142  	echo "--> test ${$@_NAME} in ${$@_HOME}"
   143  	cd ${$@_HOME} && gotestsum --junitfile ../../report_${$@_NAME}.xml --format pkgname -- -cover ${$@_PKGS}
   144  endef
   145  
   146  .PHONY: providers
   147  providers: providers/proto providers/config providers/build
   148  
   149  .PHONY: providers/proto
   150  providers/proto:
   151  	go generate .
   152  	go generate ./providers-sdk/v1/vault
   153  	go generate ./providers-sdk/v1/resources
   154  	go generate ./providers-sdk/v1/inventory
   155  	go generate ./providers-sdk/v1/plugin
   156  
   157  .PHONY: providers/config
   158  providers/config:
   159  	go run ./providers-sdk/v1/util/configure/configure.go -f providers.yaml -o providers/builtin_dev.go
   160  
   161  .PHONY: providers/lr
   162  providers/lr:
   163  	go build -o lr ./providers-sdk/v1/lr/cli/main.go
   164  
   165  .PHONY: providers/build
   166  # Note we need \ to escape the target line into multiple lines
   167  providers/build: providers/build/mock \
   168  	providers/build/core \
   169  	providers/build/network \
   170  	providers/build/os \
   171  	providers/build/ipmi \
   172  	providers/build/oci \
   173  	providers/build/slack \
   174  	providers/build/github \
   175  	providers/build/gitlab \
   176  	providers/build/terraform \
   177  	providers/build/vsphere \
   178  	providers/build/opcua \
   179  	providers/build/okta \
   180  	providers/build/google-workspace \
   181  	providers/build/arista \
   182  	providers/build/equinix \
   183  	providers/build/vcd \
   184  	providers/build/gcp \
   185  	providers/build/k8s \
   186  	providers/build/azure \
   187  	providers/build/ms365 \
   188  	providers/build/aws
   189  
   190  providers/build/mock: providers/lr
   191  	./lr go providers-sdk/v1/testutils/mockprovider/resources/mockprovider.lr
   192  
   193  providers/build/core: providers/lr
   194  	@$(call buildProvider, providers/core)
   195  
   196  providers/build/network: providers/lr
   197  	@$(call buildProvider, providers/network)
   198  
   199  providers/build/os: providers/lr
   200  	@$(call buildProvider, providers/os)
   201  
   202  providers/build/ipmi: providers/lr
   203  	@$(call buildProvider, providers/ipmi)
   204  	
   205  providers/build/oci: providers/lr
   206  	@$(call buildProvider, providers/oci)
   207  
   208  providers/build/slack: providers/lr
   209  	@$(call buildProvider, providers/slack)
   210  
   211  providers/build/github: providers/lr
   212  	@$(call buildProvider, providers/github)
   213  
   214  providers/build/gitlab: providers/lr
   215  	@$(call buildProvider, providers/gitlab)
   216  
   217  providers/build/terraform: providers/lr
   218  	@$(call buildProvider, providers/terraform)
   219  
   220  providers/build/vsphere: providers/lr
   221  	@$(call buildProvider, providers/vsphere)
   222  
   223  providers/build/opcua: providers/lr
   224  	@$(call buildProvider, providers/opcua)
   225  
   226  providers/build/okta: providers/lr
   227  	@$(call buildProvider, providers/okta)
   228  
   229  providers/build/google-workspace: providers/lr
   230  	@$(call buildProvider, providers/google-workspace)
   231  
   232  providers/build/arista: providers/lr
   233  	@$(call buildProvider, providers/arista)
   234  
   235  providers/build/equinix: providers/lr
   236  	@$(call buildProvider, providers/equinix)
   237  
   238  providers/build/vcd: providers/lr
   239  	@$(call buildProvider, providers/vcd)
   240  
   241  providers/build/k8s: providers/lr
   242  	@$(call buildProvider, providers/k8s)
   243  
   244  providers/build/gcp: providers/lr
   245  	@$(call buildProvider, providers/gcp)
   246  
   247  providers/build/azure: providers/lr
   248  	@$(call buildProvider, providers/azure)
   249  	
   250  providers/build/aws: providers/lr
   251  	@$(call buildProvider, providers/aws)
   252  
   253  providers/build/ms365: providers/lr
   254  	@$(call buildProvider, providers/ms365)
   255  
   256  providers/dist:
   257  	@$(call buildProviderDist, providers/network)
   258  	@$(call buildProviderDist, providers/os)
   259  	@$(call buildProviderDist, providers/ipmi)
   260  	@$(call buildProviderDist, providers/oci)
   261  	@$(call buildProviderDist, providers/slack)
   262  	@$(call buildProviderDist, providers/github)
   263  	@$(call buildProviderDist, providers/gitlab)
   264  	@$(call buildProviderDist, providers/terraform)
   265  	@$(call buildProviderDist, providers/vsphere)
   266  	@$(call buildProviderDist, providers/opcua)
   267  	@$(call buildProviderDist, providers/okta)
   268  	@$(call buildProviderDist, providers/google-workspace)
   269  	@$(call buildProviderDist, providers/arista)
   270  	@$(call buildProviderDist, providers/equinix)
   271  	@$(call buildProviderDist, providers/vcd)
   272  	@$(call buildProviderDist, providers/gcp)
   273  	@$(call buildProviderDist, providers/k8s)
   274  	@$(call buildProviderDist, providers/azure)
   275  	@$(call buildProviderDist, providers/ms365)
   276  	@$(call buildProviderDist, providers/aws)
   277  
   278  providers/install:
   279  #	@$(call installProvider, providers/core)
   280  	@$(call installProvider, providers/network)
   281  	@$(call installProvider, providers/os)
   282  	@$(call installProvider, providers/ipmi)
   283  	@$(call installProvider, providers/oci)
   284  	@$(call installProvider, providers/slack)
   285  	@$(call installProvider, providers/github)
   286  	@$(call installProvider, providers/gitlab)
   287  	@$(call installProvider, providers/terraform)
   288  	@$(call installProvider, providers/vsphere)
   289  	@$(call installProvider, providers/opcua)
   290  	@$(call installProvider, providers/okta)
   291  	@$(call installProvider, providers/google-workspace)
   292  	@$(call installProvider, providers/arista)
   293  	@$(call installProvider, providers/equinix)
   294  	@$(call installProvider, providers/vcd)
   295  	@$(call installProvider, providers/gcp)
   296  	@$(call installProvider, providers/k8s)
   297  	@$(call installProvider, providers/azure)
   298  	@$(call installProvider, providers/ms365)
   299  	@$(call installProvider, providers/aws)
   300  
   301  providers/bundle:
   302  	@$(call bundleProvider, providers/network)
   303  	@$(call bundleProvider, providers/os)
   304  	@$(call bundleProvider, providers/ipmi)
   305  	@$(call bundleProvider, providers/oci)
   306  	@$(call bundleProvider, providers/slack)
   307  	@$(call bundleProvider, providers/github)
   308  	@$(call bundleProvider, providers/gitlab)
   309  	@$(call bundleProvider, providers/terraform)
   310  	@$(call bundleProvider, providers/vsphere)
   311  	@$(call bundleProvider, providers/opcua)
   312  	@$(call bundleProvider, providers/okta)
   313  	@$(call bundleProvider, providers/google-workspace)
   314  	@$(call bundleProvider, providers/arista)
   315  	@$(call bundleProvider, providers/equinix)
   316  	@$(call bundleProvider, providers/vcd)
   317  	@$(call bundleProvider, providers/gcp)
   318  	@$(call bundleProvider, providers/k8s)
   319  	@$(call bundleProvider, providers/azure)
   320  	@$(call bundleProvider, providers/ms365)
   321  	@$(call bundleProvider, providers/aws)
   322  
   323  providers/test:
   324  	@$(call testProvider, providers/core)
   325  	@$(call testProvider, providers/network)
   326  	@$(call testProvider, providers/os)
   327  	@$(call testGpModProvider, providers/ipmi)
   328  	@$(call testGpModProvider, providers/oci)
   329  	@$(call testGpModProvider, providers/slack)
   330  	@$(call testGpModProvider, providers/github)
   331  	@$(call testGpModProvider, providers/gitlab)
   332  	@$(call testGpModProvider, providers/terraform)
   333  	@$(call testGpModProvider, providers/vsphere)
   334  	@$(call testGpModProvider, providers/opcua)
   335  	@$(call testGpModProvider, providers/okta)
   336  	@$(call testGpModProvider, providers/google-workspace)
   337  	@$(call testGpModProvider, providers/arista)
   338  	@$(call testGpModProvider, providers/equinix)
   339  	@$(call testGpModProvider, providers/vcd)
   340  	@$(call testGpModProvider, providers/gcp)
   341  	@$(call testGpModProvider, providers/k8s)
   342  	@$(call testGpModProvider, providers/azure)
   343  	@$(call testGpModProvider, providers/ms365)
   344  	@$(call testGpModProvider, providers/aws)
   345  
   346  lr/test:
   347  	go test ./resources/lr/...
   348  
   349  # TODO: migrate
   350  .PHONY: lr/docs/serve
   351  lr/docs/serve:
   352  	cd resources/docs && yarn
   353  	cd resources/docs && $(shell cd resources/docs && npm bin)/parcel -p 1235 index.html
   354  
   355  # TODO: migrate
   356  .PHONY: lr/docs/markdown
   357  lr/docs/markdown: providers/lr
   358  	./lr markdown providers/arista/resources/arista.lr \
   359  		--pack-name "Arista EOS" \
   360  		--description "The Arista EOS resource pack lets you use MQL to query and assess the security of your Arista EOS network devices." \
   361  		--docs-file providers/arista/resources/arista.lr.manifest.yaml \
   362  		--output ../docs/docs/mql/resources/arista-pack
   363  	./lr markdown providers/aws/resources/aws.lr \
   364      --pack-name "Amazon Web Services (AWS)" \
   365  		--description "The Amazon Web Services (AWS) resource pack lets you use MQL to query and assess the security of your AWS cloud services." \
   366  		--docs-file providers/aws/resources/aws.lr.manifest.yaml \
   367  		--output ../docs/docs/mql/resources/aws-pack
   368  	./lr markdown providers/azure/resources/azure.lr \
   369  		--pack-name "Azure" \
   370  		--description "The Azure resource pack lets you use MQL to query and assess the security of your Azure cloud services." \
   371  		--docs-file providers/azure/resources/azure.lr.manifest.yaml \
   372  		--output ../docs/docs/mql/resources/azure-pack
   373  	./lr markdown providers/core/resources/core.lr \
   374  		--pack-name "Core" \
   375  		--description "The Core pack provides basic MQL resources that let you query and assess the security." \
   376  		--docs-file providers/core/resources/core.lr.manifest.yaml \
   377  		--output ../docs/docs/mql/resources/core-pack
   378  	./lr markdown providers/equinix/resources/equinix.lr \
   379  		--pack-name "Equinix" \
   380  		--description "The Equinix resource pack lets you use MQL to query and assess the security of your Equinix Metal services." \
   381  		--docs-file providers/equinix/resources/equinix.lr.manifest.yaml \
   382  		--output ../docs/docs/mql/resources/equinix-pack
   383  	./lr markdown providers/gcp/resources/gcp.lr \
   384  		--pack-name "Google Cloud Platform (GCP)" \
   385  		--description "The Google Cloud Platform (GCP) resource pack lets you use MQL to query and assess the security of your GCP cloud services." \
   386  		--docs-file providers/gcp/resources/gcp.lr.manifest.yaml \
   387  		--output ../docs/docs/mql/resources/gcp-pack
   388  	./lr markdown providers/github/resources/github.lr \
   389  		--pack-name "GitHub" \
   390  		--description "The GitHub resource pack lets you use MQL to query and assess the security of your GitHub organization and repositories." \
   391  		--docs-file providers/github/resources/github.lr.manifest.yaml \
   392  		--output ../docs/docs/mql/resources/github-pack
   393  	./lr markdown providers/gitlab/resources/gitlab.lr \
   394  		--pack-name "GitLab" \
   395  		--description "The GitLab resource pack lets you use MQL to query and assess the security of your GitLab organization and repositories." \
   396  		--docs-file providers/gitlab/resources/gitlab.lr.manifest.yaml \
   397  		--output ../docs/docs/mql/resources/gitlab-pack
   398  	./lr markdown providers/googleworkspace/resources/googleworkspace.lr \
   399  		--pack-name "Google Workspace" \
   400  		--description "The Google Workspace resource pack lets you use MQL to query and assess the security of your Google Workspace identities and configuration." \
   401  		--docs-file providers/google-workspace/resources/google-workspace.lr.manifest.yaml \
   402  		--output ../docs/docs/mql/resources/google-workspace-pack
   403  	./lr markdown providers/ipmi/resources/ipmi.lr \
   404  		--pack-name "IPMI" \
   405  		--description "The IPMI resource pack lets you use MQL to query and assess the security of your IPMI devices." \
   406  		--docs-file providers/ipmi/resources/ipmi.lr.manifest.yaml \
   407  		--output ../docs/docs/mql/resources/ipmi-pack
   408  	./lr markdown providers/k8s/resources/k8s.lr \
   409  		--pack-name "Kubernetes (K8s)" \
   410  		--description "The Kubernetes resource pack lets you use MQL to query and assess the security of your Kubernetes cluster and workloads." \
   411  		--docs-file providers/k8s/resources/k8s.lr.manifest.yaml \
   412  		--output ../docs/docs/mql/resources/k8s-pack
   413  	./lr markdown providers/ms365/resources/ms365.lr \
   414  		--pack-name "Microsoft 365 (MS365)" \
   415  		--description "The Microsoft 365 (MS365) resource pack lets you use MQL to query and assess the security of your Microsoft 365 identities and configuration." \
   416  		--docs-file providers/ms365/ms365.lr.manifest.yaml \
   417  		--output ../docs/docs/mql/resources/ms365-pack
   418  	./lr markdown providers/network/resources/network.lr \
   419  		--pack-name "Network" \
   420  		--description "The network resource pack lets you use MQL to query and assess the security of domains and network services." \
   421  		--docs-file providers/network/resources/network.lr.manifest.yaml \
   422  		--output ../docs/docs/mql/resources/network-pack
   423  	./lr markdown providers/oci/resources/oci.lr \
   424  		--pack-name "Oracle Cloud Infrastructure (OCI)" \
   425  		--description "The Oracle Cloud Infrastructure (OCI) resource pack lets you use MQL to query and assess the security of your OCI cloud services." \
   426  		--docs-file providers/oci/resources/oci.lr.manifest.yaml \
   427  		--output ../docs/docs/mql/resources/oci-pack
   428  	./lr markdown providers/okta/resources/okta.lr \
   429  		--pack-name "Okta" \
   430  		--description "The Okta resource pack lets you use MQL to query and assess the security of your Okta identities and configuration." \
   431  		--docs-file providers/okta/resources/okta.lr.manifest.yaml \
   432  		--output ../docs/docs/mql/resources/okta-pack
   433  	./lr markdown providers/opcua/resources/opcua.lr \
   434  		--pack-name "OPC UA" \
   435  		--description "The OPC-UA resource pack lets you use MQL to query and assess the security of your OPC-UA servers." \
   436  		--docs-file providers/opcua/resources/opcua.lr.manifest.yaml \
   437  		--output ../docs/docs/mql/resources/opcua-pack
   438  	./lr markdown providers/os/resources/os.lr \
   439  		--pack-name "Operating Systems (OS)" \
   440  		--description "The Operating Systems (OS) resource pack lets you use MQL to query and assess the security of your operating system packages and configuration." \
   441  		--docs-file providers/os/os.lr.manifest.yaml \
   442  		--output ../docs/docs/mql/resources/os-pack
   443  	./lr markdown providers/slack/resources/slack.lr \
   444  		--pack-name "Slack" \
   445  		--description "The Slack resource pack lets you use MQL to query and assess the security of your Slack identities and configuration." \
   446  		--docs-file providers/slack/resources/slack.lr.manifest.yaml \
   447  		--output ../docs/docs/mql/resources/slack-pack
   448  	./lr markdown providers/terraform/resources/terraform.lr \
   449  		--pack-name "Terraform IaC" \
   450  		--description "The Terraform IaC resource pack lets you use MQL to query and assess the security of your Terraform HCL, plan and state resources." \
   451  		--docs-file providers/terraform/resources/terraform.lr.manifest.yaml \
   452  		--output ../docs/docs/mql/resources/terraform-pack
   453  	./lr markdown providers/vcd/resources/vcd.lr \
   454  		--pack-name "VMware Cloud Director" \
   455  		--description "The VMware Cloud Director resource pack lets you use MQL to query and assess the security of your VMware Cloud Director configuration." \
   456  		--docs-file providers/vcd/resources/vcd.lr.manifest.yaml \
   457  		--output ../docs/docs/mql/resources/vcd-pack
   458  	./lr markdown providers/vsphere/resources/vsphere.lr \
   459  		--pack-name "VMware vSphere" \
   460  		--description "The VMware vSphere resource pack lets you use MQL to query and assess the security of your VMware vSphere hosts and services." \
   461  		--docs-file providers/vsphere/resources/vsphere.lr.manifest.yaml \
   462  		--output ../docs/docs/mql/resources/vsphere-pack
   463  
   464  llx/generate:
   465  	go generate ./llx
   466  
   467  .PHONY: llx
   468  llx: | llx/generate llx/test
   469  
   470  llx/test:
   471  	go test -timeout 5s $(shell go list ./llx/... | grep -v '/vendor/')
   472  
   473  .PHONY: mqlc
   474  mqlc: | llx mqlc/test
   475  
   476  mqlc/test:
   477  	go test -timeout 5s $(shell go list ./mqlc/... | grep -v '/vendor/')
   478  
   479  explorer/generate:
   480  	go generate ./explorer
   481  	go generate ./explorer/scan
   482  
   483  #   ๐Ÿ— Binary / Build   #
   484  
   485  .PHONY: cnquery/build
   486  cnquery/build:
   487  	go build ${LDFLAGSDIST} apps/cnquery/cnquery.go
   488  
   489  .PHONY: cnquery/build/linux
   490  cnquery/build/linux:
   491  	GOOS=linux GOARCH=amd64 go build ${LDFLAGSDIST} apps/cnquery/cnquery.go
   492  
   493  .PHONY: cnquery/build/windows
   494  cnquery/build/windows:
   495  	GOOS=windows GOARCH=amd64 go build ${LDFLAGSDIST} apps/cnquery/cnquery.go
   496  
   497  cnquery/build/darwin:
   498  	GOOS=darwin go build ${LDFLAGSDIST} apps/cnquery/cnquery.go
   499  
   500  .PHONY: cnquery/install
   501  cnquery/install:
   502  	GOBIN=${GOPATH}/bin go install ${LDFLAGSDIST} apps/cnquery/cnquery.go
   503  
   504  cnquery/dist/goreleaser/stable:
   505  	goreleaser release --clean --skip-publish --skip-validate	-f .goreleaser.yml --timeout 120m
   506  
   507  cnquery/dist/goreleaser/edge:
   508  	goreleaser release --clean --skip-publish --skip-validate	-f .goreleaser.yml --timeout 120m --snapshot
   509  
   510  shared/generate:
   511  	go generate ./shared/proto/.
   512  	go generate ./providers-sdk/v1/upstream/
   513  	go generate ./providers-sdk/v1/upstream/health
   514  	go generate ./providers-sdk/v1/upstream/mvd/cvss
   515  	go generate ./providers-sdk/v1/upstream/mvd
   516  
   517  #   โ›น๐Ÿฝโ€ Testing   #
   518  
   519  test/lint: test/lint/golangci-lint/run
   520  
   521  test: test/go test/lint
   522  
   523  test/go: cnquery/generate test/go/plain
   524  
   525  test/go/plain:
   526  	go test -cover $(shell go list ./... | grep -v '/providers/')
   527  
   528  test/go/plain-ci: prep/tools providers/build providers/test
   529  	gotestsum --junitfile report.xml --format pkgname -- -cover $(shell go list ./... | grep -v '/vendor/' | grep -v '/providers/')
   530  
   531  .PHONY: test/lint/staticcheck
   532  test/lint/staticcheck:
   533  	staticcheck $(shell go list ./... | grep -v /providers/slack)
   534  
   535  .PHONY: test/lint/govet
   536  test/lint/govet:
   537  	go vet $(shell go list ./... | grep -v /providers/slack)
   538  
   539  .PHONY: test/lint/golangci-lint/run
   540  test/lint/golangci-lint/run: prep/tools
   541  	golangci-lint --version
   542  	golangci-lint run
   543  
   544  license: license/headers/check
   545  
   546  license/headers/check:
   547  	copywrite headers --plan
   548  
   549  license/headers/apply:
   550  	copywrite headers