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
makefile: Add support for skipping UI build when prebuilt assets are provided
This commit introduces the ability to skip the UI build in the Makefile by
providing prebuilt UI assets, addressing the needs of users who may not have npm
installed or who do not want to go through the front-end build process.
To achieve this, we added the `PREBUILT_ASSETS_STATIC_DIR` environment variable.
If this variable is set, the Makefile will skip the UI build and related tasks,
such as bundling npm licenses. Instead, it will use the prebuilt assets from
the specified directory.
We already publish prebuilt UI assets as part of our release artifacts
(e.g., `prometheus-web-ui-3.0.0-beta.0.tar.gz`). Users can download this tarball,
extract it, and point the `PREBUILT_ASSETS_STATIC_DIR` to the extracted folder.
This reduces build complexity, especially for users who don't have a development
environment for front-end builds.
For example, you can use the command:
`make PREBUILT_ASSETS_STATIC_DIR=static build`
where `static` refers to the directory containing the prebuilt UI files.
This change simplifies the build process while still allowing users to use a
prebuilt UI if desired.
This solution is particularly useful for users who don't need to modify the UI
and prefer to use the prebuilt version that we provide with each release.
Signed-off-by: Julien <roidelapluie@o11y.eu>
2024-09-12 03:20:24 -07:00
# Only build UI if PREBUILT_ASSETS_STATIC_DIR is not set
i f d e f P R E B U I L T _ A S S E T S _ S T A T I C _ D I R
SKIP_UI_BUILD = true
e n d i f
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
makefile: Add support for skipping UI build when prebuilt assets are provided
This commit introduces the ability to skip the UI build in the Makefile by
providing prebuilt UI assets, addressing the needs of users who may not have npm
installed or who do not want to go through the front-end build process.
To achieve this, we added the `PREBUILT_ASSETS_STATIC_DIR` environment variable.
If this variable is set, the Makefile will skip the UI build and related tasks,
such as bundling npm licenses. Instead, it will use the prebuilt assets from
the specified directory.
We already publish prebuilt UI assets as part of our release artifacts
(e.g., `prometheus-web-ui-3.0.0-beta.0.tar.gz`). Users can download this tarball,
extract it, and point the `PREBUILT_ASSETS_STATIC_DIR` to the extracted folder.
This reduces build complexity, especially for users who don't have a development
environment for front-end builds.
For example, you can use the command:
`make PREBUILT_ASSETS_STATIC_DIR=static build`
where `static` refers to the directory containing the prebuilt UI files.
This change simplifies the build process while still allowing users to use a
prebuilt UI if desired.
This solution is particularly useful for users who don't need to modify the UI
and prefer to use the prebuilt version that we provide with each release.
Signed-off-by: Julien <roidelapluie@o11y.eu>
2024-09-12 03:20:24 -07:00
i f n d e f S K I P _ U I _ B U I L D
2021-09-10 07:27:23 -07:00
assets : ui -install ui -build
2022-03-09 01:21:31 -08:00
makefile: Add support for skipping UI build when prebuilt assets are provided
This commit introduces the ability to skip the UI build in the Makefile by
providing prebuilt UI assets, addressing the needs of users who may not have npm
installed or who do not want to go through the front-end build process.
To achieve this, we added the `PREBUILT_ASSETS_STATIC_DIR` environment variable.
If this variable is set, the Makefile will skip the UI build and related tasks,
such as bundling npm licenses. Instead, it will use the prebuilt assets from
the specified directory.
We already publish prebuilt UI assets as part of our release artifacts
(e.g., `prometheus-web-ui-3.0.0-beta.0.tar.gz`). Users can download this tarball,
extract it, and point the `PREBUILT_ASSETS_STATIC_DIR` to the extracted folder.
This reduces build complexity, especially for users who don't have a development
environment for front-end builds.
For example, you can use the command:
`make PREBUILT_ASSETS_STATIC_DIR=static build`
where `static` refers to the directory containing the prebuilt UI files.
This change simplifies the build process while still allowing users to use a
prebuilt UI if desired.
This solution is particularly useful for users who don't need to modify the UI
and prefer to use the prebuilt version that we provide with each release.
Signed-off-by: Julien <roidelapluie@o11y.eu>
2024-09-12 03:20:24 -07:00
.PHONY : npm_licenses
npm_licenses : ui -install
@echo ">> bundling npm licenses"
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
e l s e
assets :
@echo '>> skipping assets build, pre-built assets provided'
npm_licenses :
@echo '>> skipping assets npm licenses, pre-built assets provided'
e n d i f
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 : 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