2018-04-19 09:07:10 +00:00
# Copyright 2018 The Prometheus Authors
2012-11-26 19:11:34 +00: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 10:38:01 +00:00
#
2012-11-26 19:11:34 +00:00
# http://www.apache.org/licenses/LICENSE-2.0
2013-02-07 10:38:01 +00:00
#
2012-11-26 19:11:34 +00: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 12:27:00 +00:00
# Needs to be defined before including Makefile.common to auto-generate targets
2020-03-29 13:11:22 +00:00
DOCKER_ARCHS ?= amd64 armv7 arm64 ppc64le s390x
2019-04-15 12:27:00 +00:00
2021-09-10 14:27:23 +00:00
UI_PATH = web/ui
2021-09-10 15:38:53 +00:00
UI_NODE_MODULES_PATH = $( UI_PATH) /node_modules
2019-10-17 12:38:09 +00:00
REACT_APP_NPM_LICENSES_TARBALL = "npm_licenses.tar.bz2"
2020-07-23 18:35:50 +00:00
PROMTOOL = ./promtool
2019-08-13 08:34:14 +00:00
TSDB_BENCHMARK_NUM_METRICS ?= 1000
2020-07-23 18:35:50 +00:00
TSDB_BENCHMARK_DATASET ?= ./tsdb/testdata/20kseries.json
TSDB_BENCHMARK_OUTPUT_DIR ?= ./benchout
2019-08-13 08:34:14 +00:00
2021-06-12 09:43:34 +00:00
GOLANGCI_LINT_OPTS ?= --timeout 4m
2024-04-30 14:22:16 +00:00
GOYACC_VERSION ?= v0.6.0
2021-02-10 13:02:26 +00:00
2018-04-19 09:07:10 +00: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 14:44:15 +00:00
2018-04-19 09:07:10 +00:00
DOCKER_IMAGE_NAME ?= prometheus
2015-10-09 22:49:08 +00:00
2022-04-05 09:49:22 +00: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 10:10:10 +00:00
.PHONY : ui -bump -version
ui-bump-version :
version = $$ ( sed s/2/0/ < VERSION) && ./scripts/ui_release.sh --bump-version " $$ {version} "
cd web/ui && npm install
git add "./web/ui/package-lock.json" "./**/package.json"
2021-09-10 14:27:23 +00:00
.PHONY : ui -install
ui-install :
cd $( UI_PATH) && npm install
2024-04-18 13:00:27 +00: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 12:38:09 +00:00
2021-09-10 14:27:23 +00:00
.PHONY : ui -build
ui-build :
2022-06-13 15:55:06 +00:00
cd $( UI_PATH) && CI = "" npm run build
2021-09-10 14:27:23 +00:00
.PHONY : ui -build -module
ui-build-module :
cd $( UI_PATH) && npm run build:module
.PHONY : ui -test
ui-test :
2022-04-05 09:49:22 +00:00
cd $( UI_PATH) && CI = true npm run test
2021-09-10 14:27:23 +00:00
.PHONY : ui -lint
ui-lint :
cd $( UI_PATH) && npm run lint
2024-04-18 13:00:27 +00: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 12:38:09 +00:00
2018-06-11 15:51:28 +00:00
.PHONY : assets
2021-09-10 14:27:23 +00:00
assets : ui -install ui -build
2022-03-09 09:21:31 +00:00
.PHONY : assets -compress
2022-04-06 18:23:55 +00:00
assets-compress : assets
2022-03-09 09:21:31 +00:00
@echo '>> compressing assets'
scripts/compress_assets.sh
2022-04-06 18:23:55 +00:00
.PHONY : assets -tarball
2022-04-12 18:22:51 +00:00
assets-tarball : assets
2022-04-06 18:23:55 +00:00
@echo '>> packaging assets'
scripts/package_assets.sh
2023-03-04 15:51:39 +00:00
.PHONY : parser
parser :
@echo ">> running goyacc to generate the .go file."
2024-03-21 03:32:23 +00:00
i f e q ( , $( shell command -v goyacc 2> /dev /null ) )
2023-03-04 15:51:39 +00:00
@echo "goyacc not installed so skipping"
2024-04-30 14:22:16 +00:00
@echo " To install: \"go install golang.org/x/tools/cmd/goyacc@ $( GOYACC_VERSION) \" or run \"make install-goyacc\" "
2023-03-04 15:51:39 +00:00
e l s e
2024-04-30 14:22:16 +00:00
$( MAKE) promql/parser/generated_parser.y.go
2023-03-04 15:51:39 +00:00
e n d i f
2024-04-30 14:22:16 +00:00
promql/parser/generated_parser.y.go : promql /parser /generated_parser .y
@echo ">> running goyacc to generate the .go file."
2024-06-20 17:25:44 +00:00
@$( FIRST_GOPATH) /bin/goyacc -l -o promql/parser/generated_parser.y.go promql/parser/generated_parser.y
2024-04-30 14:22:16 +00: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 12:38:09 +00:00
.PHONY : test
2021-08-10 14:50:09 +00: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 12:38:31 +00:00
test : common -test check -go -mod -version
2021-08-10 14:50:09 +00:00
e l s e
2024-04-30 14:22:16 +00:00
test : check -generated -parser common -test ui -build -module ui -test ui -lint check -go -mod -version
2021-08-10 14:50:09 +00:00
e n d i f
2019-10-17 12:38:09 +00:00
.PHONY : npm_licenses
2021-09-10 14:27:23 +00:00
npm_licenses : ui -install
2019-10-17 12:38:09 +00:00
@echo ">> bundling npm licenses"
2022-12-14 15:34:36 +00: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 12:38:09 +00:00
.PHONY : tarball
tarball : npm_licenses common -tarball
.PHONY : docker
docker : npm_licenses common -docker
2022-03-29 12:44:39 +00: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 12:38:09 +00:00
.PHONY : build
2022-11-15 08:10:43 +00:00
build : assets npm_licenses assets -compress plugins common -build
2019-08-13 08:34:14 +00:00
2019-10-15 07:33:38 +00:00
.PHONY : bench_tsdb
2020-07-23 18:35:50 +00:00
bench_tsdb : $( PROMU )
@echo ">> building promtool"
@GO111MODULE= $( GO111MODULE) $( PROMU) build --prefix $( PREFIX) promtool
2019-08-13 08:34:14 +00:00
@echo " >> running benchmark, writing result to $( TSDB_BENCHMARK_OUTPUT_DIR) "
2020-07-23 18:35:50 +00: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 23:18:33 +00: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 12:38:31 +00: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 15:56:30 +00: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