2018-04-19 02:07:10 -07:00
# Copyright 2018 The Prometheus Authors
2012-11-26 11:11:34 -08:00
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
2013-02-07 02:38:01 -08:00
#
2012-11-26 11:11:34 -08:00
# http://www.apache.org/licenses/LICENSE-2.0
2013-02-07 02:38:01 -08:00
#
2012-11-26 11:11:34 -08:00
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
2019-04-15 05:27:00 -07:00
# Needs to be defined before including Makefile.common to auto-generate targets
2020-03-29 06:11:22 -07:00
DOCKER_ARCHS ?= amd64 armv7 arm64 ppc64le s390x
2019-04-15 05:27:00 -07:00
2021-09-10 07:27:23 -07:00
UI_PATH = web/ui
2021-09-10 08:38:53 -07:00
UI_NODE_MODULES_PATH = $( UI_PATH) /node_modules
2019-10-17 05:38:09 -07:00
REACT_APP_NPM_LICENSES_TARBALL = "npm_licenses.tar.bz2"
2020-07-23 11:35:50 -07:00
PROMTOOL = ./promtool
2019-08-13 01:34:14 -07:00
TSDB_BENCHMARK_NUM_METRICS ?= 1000
2020-07-23 11:35:50 -07:00
TSDB_BENCHMARK_DATASET ?= ./tsdb/testdata/20kseries.json
TSDB_BENCHMARK_OUTPUT_DIR ?= ./benchout
2019-08-13 01:34:14 -07:00
2021-06-12 02:43:34 -07:00
GOLANGCI_LINT_OPTS ?= --timeout 4m
2024-04-30 07:22:16 -07:00
GOYACC_VERSION ?= v0.6.0
2021-02-10 05:02:26 -08:00
2018-04-19 02:07:10 -07:00
i n c l u d e M a k e f i l e . c o m m o n
2015-11-11 06:44:15 -08:00
2018-04-19 02:07:10 -07:00
DOCKER_IMAGE_NAME ?= prometheus
2015-10-09 15:49:08 -07:00
2022-04-05 02:49:22 -07:00
.PHONY : update -npm -deps
update-npm-deps :
@echo ">> updating npm dependencies"
./scripts/npm-deps.sh "minor"
.PHONY : upgrade -npm -deps
upgrade-npm-deps :
@echo ">> upgrading npm dependencies"
./scripts/npm-deps.sh "latest"
2022-06-30 03:10:10 -07:00
.PHONY : ui -bump -version
ui-bump-version :
2024-09-09 12:02:50 -07:00
version = $$ ( ./scripts/get_module_version.sh) && ./scripts/ui_release.sh --bump-version " $$ {version} "
2022-06-30 03:10:10 -07:00
cd web/ui && npm install
git add "./web/ui/package-lock.json" "./**/package.json"
2021-09-10 07:27:23 -07:00
.PHONY : ui -install
ui-install :
cd $( UI_PATH) && npm install
2024-04-18 06:00:27 -07:00
# The old React app has been separated from the npm workspaces setup to avoid
# issues with conflicting dependencies. This is a temporary solution until the
# new Mantine-based UI is fully integrated and the old app can be removed.
cd $( UI_PATH) /react-app && npm install
2019-10-17 05:38:09 -07:00
2021-09-10 07:27:23 -07:00
.PHONY : ui -build
ui-build :
2022-06-13 08:55:06 -07:00
cd $( UI_PATH) && CI = "" npm run build
2021-09-10 07:27:23 -07:00
.PHONY : ui -build -module
ui-build-module :
cd $( UI_PATH) && npm run build:module
.PHONY : ui -test
ui-test :
2022-04-05 02:49:22 -07:00
cd $( UI_PATH) && CI = true npm run test
2021-09-10 07:27:23 -07:00
.PHONY : ui -lint
ui-lint :
cd $( UI_PATH) && npm run lint
2024-04-18 06:00:27 -07:00
# The old React app has been separated from the npm workspaces setup to avoid
# issues with conflicting dependencies. This is a temporary solution until the
# new Mantine-based UI is fully integrated and the old app can be removed.
cd $( UI_PATH) /react-app && npm run lint
2019-10-17 05:38:09 -07:00
2018-06-11 08:51:28 -07:00
.PHONY : assets
2021-09-10 07:27:23 -07:00
assets : ui -install ui -build
2022-03-09 01:21:31 -08:00
.PHONY : assets -compress
2022-04-06 11:23:55 -07:00
assets-compress : assets
2022-03-09 01:21:31 -08:00
@echo '>> compressing assets'
scripts/compress_assets.sh
2022-04-06 11:23:55 -07:00
.PHONY : assets -tarball
2022-04-12 11:22:51 -07:00
assets-tarball : assets
2022-04-06 11:23:55 -07:00
@echo '>> packaging assets'
scripts/package_assets.sh
2023-03-04 07:51:39 -08:00
.PHONY : parser
parser :
@echo ">> running goyacc to generate the .go file."
2024-03-20 20:32:23 -07:00
i f e q ( , $( shell command -v goyacc 2> /dev /null ) )
2023-03-04 07:51:39 -08:00
@echo "goyacc not installed so skipping"
2024-04-30 07:22:16 -07:00
@echo " To install: \"go install golang.org/x/tools/cmd/goyacc@ $( GOYACC_VERSION) \" or run \"make install-goyacc\" "
2023-03-04 07:51:39 -08:00
e l s e
2024-04-30 07:22:16 -07:00
$( MAKE) promql/parser/generated_parser.y.go
2023-03-04 07:51:39 -08:00
e n d i f
2024-04-30 07:22:16 -07:00
promql/parser/generated_parser.y.go : promql /parser /generated_parser .y
@echo ">> running goyacc to generate the .go file."
2024-06-20 10:25:44 -07:00
@$( FIRST_GOPATH) /bin/goyacc -l -o promql/parser/generated_parser.y.go promql/parser/generated_parser.y
2024-04-30 07:22:16 -07:00
.PHONY : clean -parser
clean-parser :
@echo ">> cleaning generated parser"
@rm -f promql/parser/generated_parser.y.go
.PHONY : check -generated -parser
check-generated-parser : clean -parser promql /parser /generated_parser .y .go
@echo ">> checking generated parser"
@git diff --exit-code -- promql/parser/generated_parser.y.go || ( echo "Generated parser is out of date. Please run 'make parser' and commit the changes." && false )
.PHONY : install -goyacc
install-goyacc :
@echo " >> installing goyacc $( GOYACC_VERSION) "
@go install golang.org/x/tools/cmd/goyacc@$( GOYACC_VERSION)
2019-10-17 05:38:09 -07:00
.PHONY : test
2021-08-10 07:50:09 -07:00
# If we only want to only test go code we have to change the test target
# which is called by all.
i f e q ( $( GO_ONLY ) , 1 )
2023-12-07 04:38:31 -08:00
test : common -test check -go -mod -version
2021-08-10 07:50:09 -07:00
e l s e
2024-04-30 07:22:16 -07:00
test : check -generated -parser common -test ui -build -module ui -test ui -lint check -go -mod -version
2021-08-10 07:50:09 -07:00
e n d i f
2019-10-17 05:38:09 -07:00
.PHONY : npm_licenses
2021-09-10 07:27:23 -07:00
npm_licenses : ui -install
2019-10-17 05:38:09 -07:00
@echo ">> bundling npm licenses"
2022-12-14 07:34:36 -08:00
rm -f $( REACT_APP_NPM_LICENSES_TARBALL) npm_licenses
ln -s . npm_licenses
find npm_licenses/$( UI_NODE_MODULES_PATH) -iname "license*" | tar cfj $( REACT_APP_NPM_LICENSES_TARBALL) --files-from= -
rm -f npm_licenses
2019-10-17 05:38:09 -07:00
.PHONY : tarball
tarball : npm_licenses common -tarball
.PHONY : docker
docker : npm_licenses common -docker
2022-03-29 05:44:39 -07:00
plugins/plugins.go : plugins .yml plugins /generate .go
@echo ">> creating plugins list"
$( GO) generate -tags plugins ./plugins
.PHONY : plugins
plugins : plugins /plugins .go
2019-10-17 05:38:09 -07:00
.PHONY : build
2022-11-15 00:10:43 -08:00
build : assets npm_licenses assets -compress plugins common -build
2019-08-13 01:34:14 -07:00
2019-10-15 00:33:38 -07:00
.PHONY : bench_tsdb
2020-07-23 11:35:50 -07:00
bench_tsdb : $( PROMU )
@echo ">> building promtool"
@GO111MODULE= $( GO111MODULE) $( PROMU) build --prefix $( PREFIX) promtool
2019-08-13 01:34:14 -07:00
@echo " >> running benchmark, writing result to $( TSDB_BENCHMARK_OUTPUT_DIR) "
2020-07-23 11:35:50 -07:00
@$( PROMTOOL) tsdb bench write --metrics= $( TSDB_BENCHMARK_NUM_METRICS) --out= $( TSDB_BENCHMARK_OUTPUT_DIR) $( TSDB_BENCHMARK_DATASET)
@$( GO) tool pprof -svg $( PROMTOOL) $( TSDB_BENCHMARK_OUTPUT_DIR) /cpu.prof > $( TSDB_BENCHMARK_OUTPUT_DIR) /cpuprof.svg
@$( GO) tool pprof --inuse_space -svg $( PROMTOOL) $( TSDB_BENCHMARK_OUTPUT_DIR) /mem.prof > $( TSDB_BENCHMARK_OUTPUT_DIR) /memprof.inuse.svg
@$( GO) tool pprof --alloc_space -svg $( PROMTOOL) $( TSDB_BENCHMARK_OUTPUT_DIR) /mem.prof > $( TSDB_BENCHMARK_OUTPUT_DIR) /memprof.alloc.svg
@$( GO) tool pprof -svg $( PROMTOOL) $( TSDB_BENCHMARK_OUTPUT_DIR) /block.prof > $( TSDB_BENCHMARK_OUTPUT_DIR) /blockprof.svg
@$( GO) tool pprof -svg $( PROMTOOL) $( TSDB_BENCHMARK_OUTPUT_DIR) /mutex.prof > $( TSDB_BENCHMARK_OUTPUT_DIR) /mutexprof.svg
2023-03-11 15:18:33 -08:00
.PHONY : cli -documentation
cli-documentation :
$( GO) run ./cmd/prometheus/ --write-documentation > docs/command-line/prometheus.md
$( GO) run ./cmd/promtool/ write-documentation > docs/command-line/promtool.md
2023-12-07 04:38:31 -08:00
.PHONY : check -go -mod -version
check-go-mod-version :
@echo ">> checking go.mod version matching"
@./scripts/check-go-mod-version.sh
2023-12-07 07:56:30 -08:00
.PHONY : update -all -go -deps
update-all-go-deps :
@$( MAKE) update-go-deps
@echo ">> updating Go dependencies in ./documentation/examples/remote_storage/"
@cd ./documentation/examples/remote_storage/ && for m in $$ ( $( GO) list -mod= readonly -m -f '{{ if and (not .Indirect) (not .Main)}}{{.Path}}{{end}}' all) ; do \
$( GO) get -d $$ m; \
done
@cd ./documentation/examples/remote_storage/ && $( GO) mod tidy