-
Notifications
You must be signed in to change notification settings - Fork 2.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improve build-ui
Makefile target and fix dependencies
#2573
Changes from 2 commits
be71f2b
4a3cb32
0ba8144
8a96682
4be4e8d
d611b87
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -87,7 +87,9 @@ md-to-godoc-gen: | |
|
||
.PHONY: clean | ||
clean: | ||
rm -rf cover.out .cover/ cover.html lint.log fmt.log | ||
rm -rf cover.out .cover/ cover.html lint.log fmt.log \ | ||
cmd/query/app/ui/actual/gen_assets.go \ | ||
cmd/query/app/ui/placeholder/gen_assets.go | ||
|
||
.PHONY: test | ||
test: go-gen test-otel | ||
|
@@ -222,29 +224,53 @@ docker-hotrod: | |
docker build -t $(DOCKER_NAMESPACE)/example-hotrod:${DOCKER_TAG} ./examples/hotrod --build-arg TARGETARCH=$(GOARCH) | ||
|
||
.PHONY: run-all-in-one | ||
run-all-in-one: | ||
run-all-in-one: build-ui | ||
go run -tags ui ./cmd/all-in-one --log-level debug | ||
|
||
# Be explicit about exactly what assets we want, as asset files could be partially deleted | ||
# after initial generation; which is the case in Travis CI builds (DOCKER + DEPLOY). | ||
EXPECT_ASSETS := cmd/query/app/ui/actual/gen_assets.go \ | ||
cmd/query/app/ui/placeholder/gen_assets.go | ||
FOUND_ASSETS := $(wildcard $(EXPECT_ASSETS)) | ||
.PHONY: build-ui | ||
build-ui: | ||
# The `jaeger-ui` submodule contains the source code for the UI assets (requires Node.js 6+). | ||
albertteoh marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# The assets must be compiled first with `make build-ui`, which runs Node.js build and then | ||
# packages the assets into a Go file that is `.gitignore`-ed. | ||
# | ||
# The packaged assets can be enabled by providing a build tag `ui`; for example: | ||
# $ go run -tags ui ./cmd/all-in-one/main.go | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think CONTRIBUTING file is a better place for this documentation than a makefile, nobody would look here, especially when reading instructions in CONTRIBUTING |
||
# | ||
# To reduce `build-ui` execution times, no work will be done if the resulting UI assets exist. | ||
# These expected assets are cmd/query/app/ui/(actual|placeholder)/gen_assets.go. | ||
# | ||
# To force a rebuild of UI assets, run `make clean` which deletes any files matching the | ||
# above glob pattern. | ||
@echo "Expect UI assets: $(EXPECT_ASSETS)" | ||
@echo "Found UI assets: $(FOUND_ASSETS)" | ||
|
||
ifeq ($(FOUND_ASSETS), $(EXPECT_ASSETS)) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm open to suggestions of a better approach to checking if There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is what Make was built for - we can to define the files as dependencies of a target. However, the trick is that the files themselves should also be dependency-tracked. I.e. something like this:
But, there are still two problems with this:
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ah yes, good suggestion re: make on file dependencies.
Could we solve this with the following make target spec? I suspect you are suggesting that there's more to consider that I haven't picked up on:
Forgive me for not understanding and my ignorance; what specifically about this set-up requires a real UI build? I thought
In this PR, I made sure the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
The main idea of Make is to execute targets when dependencies change. When the target itself is a file AND has no dependencies, then once that file exists the command will never be run:
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We could add the
From a fresh clone, I performed the following test:
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sounds good. I would change I don't think you need to include |
||
@echo "Skipping building UI assets as all expected files were found." | ||
else | ||
cd jaeger-ui && yarn install --frozen-lockfile && cd packages/jaeger-ui && yarn build | ||
esc -pkg assets -o cmd/query/app/ui/actual/gen_assets.go -prefix jaeger-ui/packages/jaeger-ui/build jaeger-ui/packages/jaeger-ui/build | ||
esc -pkg assets -o cmd/query/app/ui/placeholder/gen_assets.go -prefix cmd/query/app/ui/placeholder/public cmd/query/app/ui/placeholder/public | ||
endif | ||
|
||
.PHONY: build-all-in-one-linux | ||
build-all-in-one-linux: build-ui | ||
build-all-in-one-linux: | ||
GOOS=linux $(MAKE) build-all-in-one | ||
|
||
.PHONY: build-all-in-one | ||
build-all-in-one: elasticsearch-mappings | ||
build-all-in-one: build-ui elasticsearch-mappings | ||
$(GOBUILD) -tags ui -o ./cmd/all-in-one/all-in-one-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/all-in-one/main.go | ||
|
||
.PHONY: build-agent | ||
build-agent: | ||
$(GOBUILD) -o ./cmd/agent/agent-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/agent/main.go | ||
|
||
.PHONY: build-query | ||
build-query: | ||
build-query: build-ui | ||
$(GOBUILD) -tags ui -o ./cmd/query/query-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/query/main.go | ||
|
||
.PHONY: build-collector | ||
|
@@ -264,15 +290,15 @@ build-otel-ingester: | |
cd ${OTEL_COLLECTOR_DIR}/cmd/ingester && $(GOBUILD) -o ./opentelemetry-ingester-$(GOOS)-$(GOARCH) $(BUILD_INFO) main.go | ||
|
||
.PHONY: build-otel-all-in-one | ||
build-otel-all-in-one: | ||
build-otel-all-in-one: build-ui | ||
cd ${OTEL_COLLECTOR_DIR}/cmd/all-in-one && $(GOBUILD) -tags ui -o ./opentelemetry-all-in-one-$(GOOS)-$(GOARCH) $(BUILD_INFO) main.go | ||
|
||
.PHONY: build-ingester | ||
build-ingester: | ||
$(GOBUILD) -o ./cmd/ingester/ingester-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/ingester/main.go | ||
|
||
.PHONY: docker | ||
docker: build-ui build-binaries-linux docker-images-only | ||
docker: build-binaries-linux docker-images-only | ||
|
||
.PHONY: build-binaries-linux | ||
build-binaries-linux: | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this file is checked in, I don't think
clean
should be removing it.