3333ifdef race
3434 $(eval testintegargs += "-race")
3535endif
36- $(eval testintegargs += "-cover" "-tags=$(testintegtags)" "-timeout=1h" "./..." "-args" "-test.gocoverdir=$(PWD)/tmp/integration")
36+ $(eval TEST_PARALLEL ?= $(shell ncpu=$$(go env GOMAXPROCS 2>/dev/null); [ -z "$$ncpu" ] && ncpu=$$(sysctl -n hw.ncpu 2>/dev/null || nproc 2>/dev/null || echo 4); parallel=$$((ncpu - 1)); [ $$parallel -lt 1 ] && parallel=1; echo $$parallel))
37+ $(eval testintegargs += "-cover" "-tags=$(testintegtags)" "-timeout=10m" "-parallel=$(TEST_PARALLEL)" "./..." "-args" "-test.gocoverdir=$(PWD)/tmp/integration")
3738 @mkdir -p $(PWD)/tmp/integration
3839 @echo "go test -v" $(testintegargs); \
3940 go test -v $(testintegargs);
@@ -126,10 +127,10 @@ lint.markdown:
126127 npm install -g $(package ) --no-shrinkwrap; \
127128 fi
128129 @printf " \033[2m-> Running markdown lint...\033[0m\n"
129- if npx $( package) --prose-wrap never --check ** /* .md; [[ $$ ? -ne 0 ] ]; then \
130+ if npx $( package) --prose-wrap never --check ** /* .md; [ $$ ? -ne 0 ]; then \
130131 echo -e " \033[32m-> Found invalid files. Want to auto-format invalid files? (y/n) \033[0m" ; \
131132 read RESP; \
132- if [[ $$ RESP = " y" || $$ RESP = " Y" ] ]; then \
133+ if [ " $$ RESP" = " y" ] || [ " $$ RESP" = " Y" ]; then \
133134 echo -e " \033[33m Formatting...\033[0m" ; \
134135 npx $(package ) --prose-wrap never --write ** /* .md; \
135136 echo -e " \033[34m \nAll invalid files are formatted\033[0m" ; \
@@ -197,7 +198,7 @@ endif
197198 set -e -o pipefail; \
198199 printf "\033[2m-> Commit and create Git tag? (y/n): \033[0m\c"; \
199200 read continue; \
200- if [[ $$continue == "y" ] ]; then \
201+ if [ " $$continue" = "y" ]; then \
201202 git add internal/version/version.go && \
202203 git commit --no-status --quiet --message "Release $(version)" && \
203204 git tag --annotate v$(version) --message 'Release $(version)'; \
@@ -225,14 +226,57 @@ godoc: ## Display documentation for the package
225226 godoc --http=localhost:6060 --play
226227
227228cluster.build :
228- docker compose --project-directory .ci/opensearch build --pull ;
229+ @ $( MAKE ) cluster.docker-build
229230
230231cluster.start :
231- docker compose --project-directory .ci/opensearch up -d;
232+ @$(MAKE ) cluster.docker-up
233+ @$(MAKE ) cluster.get-cert
232234
233235cluster.stop :
234236 docker compose --project-directory .ci/opensearch down;
235237
238+ cluster.docker-build :
239+ @# Determine version-specific settings
240+ $(eval OPENSEARCH_VERSION ?= latest)
241+ $(eval version_major := $(shell \
242+ if [ " $( OPENSEARCH_VERSION) " = " latest" ]; then \
243+ echo " 2" ; \
244+ else \
245+ echo " $( OPENSEARCH_VERSION) " | awk -F. ' {print $$1}' ; \
246+ fi \
247+ ))
248+ $(eval manager_role := $(shell \
249+ if [ " $( version_major) " = " 1" ]; then \
250+ echo " master" ; \
251+ else \
252+ echo " cluster_manager" ; \
253+ fi \
254+ ))
255+ @echo " Building OpenSearch $( OPENSEARCH_VERSION) with role: $( manager_role) "
256+ OPENSEARCH_MANAGER_ROLE=$(manager_role ) OPENSEARCH_MANAGER_SETTING=$(manager_role ) \
257+ docker compose --project-directory .ci/opensearch build --pull
258+
259+ cluster.docker-up :
260+ @# Determine version-specific settings
261+ $(eval OPENSEARCH_VERSION ?= latest)
262+ $(eval version_major := $(shell \
263+ if [ " $( OPENSEARCH_VERSION) " = " latest" ]; then \
264+ echo " 2" ; \
265+ else \
266+ echo " $( OPENSEARCH_VERSION) " | awk -F. ' {print $$1}' ; \
267+ fi \
268+ ))
269+ $(eval manager_role := $(shell \
270+ if [ " $( version_major) " = " 1" ]; then \
271+ echo " master" ; \
272+ else \
273+ echo " cluster_manager" ; \
274+ fi \
275+ ))
276+ @echo " Starting OpenSearch $( OPENSEARCH_VERSION) with role: $( manager_role) "
277+ OPENSEARCH_MANAGER_ROLE=$(manager_role ) OPENSEARCH_MANAGER_SETTING=$(manager_role ) \
278+ docker compose --project-directory .ci/opensearch up -d
279+
236280cluster.scale.1 : # # Start single-node cluster
237281 docker compose --project-directory .ci/opensearch up -d --scale opensearch-node2=0 --scale opensearch-node3=0;
238282
@@ -243,14 +287,24 @@ cluster.scale.3: ## Start full 3-node cluster
243287 docker compose --project-directory .ci/opensearch up -d --scale opensearch-node1=1 --scale opensearch-node2=1 --scale opensearch-node3=1;
244288
245289cluster.get-cert :
246- @if [[ -v SECURE_INTEGRATION ]] && [[ $$ SECURE_INTEGRATION == " true" ]]; then \
247- docker cp $$(docker compose --project-directory .ci/opensearch ps --format '{{.Name}}' | head -1 ) :/usr/share/opensearch/config/kirk.pem admin.pem && \
248- docker cp $$(docker compose --project-directory .ci/opensearch ps --format '{{.Name}}' | head -1 ) :/usr/share/opensearch/config/kirk-key.pem admin.key; \
290+ @if [ -n " $$ {SECURE_INTEGRATION}" ] && [ " $$ {SECURE_INTEGRATION}" = " true" ]; then \
291+ CONTAINER=$$(docker compose --project-directory .ci/opensearch ps --format '{{.Name}}' | head -1 ) ; \
292+ if [ -z " $$ CONTAINER" ]; then \
293+ echo " Error: No OpenSearch containers running. Start cluster first with 'make cluster.start'" ; \
294+ exit 1; \
295+ fi ; \
296+ docker cp $$ CONTAINER:/usr/share/opensearch/config/kirk.pem admin.pem && \
297+ docker cp $$ CONTAINER:/usr/share/opensearch/config/kirk-key.pem admin.key; \
249298 fi
250299
251300
252301cluster.clean : # # Remove unused Docker volumes and networks
253302 @printf " \033[2m-> Cleaning up Docker assets...\033[0m\n"
303+ @# Remove OpenSearch built images to ensure clean rebuilds when switching versions
304+ @docker images -q opensearch-opensearch-node* | xargs -r docker rmi -f || true
305+ @# Remove OpenSearch volumes to clear stale data
306+ @docker volume ls -q --filter " name=opensearch" | xargs -r docker volume rm || true
307+ @# Clean up unused Docker resources
254308 docker volume prune --force
255309 docker network prune --force
256310 docker system prune --volumes --force
@@ -281,5 +335,5 @@ help: ## Display help
281335# ------------- <https://suva.sh/posts/well-documented-makefiles> --------------
282336
283337.DEFAULT_GOAL := help
284- .PHONY : help backport cluster cluster.clean coverage godoc lint lint.local release test test-all test-race test-bench test-integ test-unit linters linters.install
338+ .PHONY : help backport cluster.build cluster.start cluster.stop cluster.docker-build cluster.docker-up cluster.clean coverage godoc lint lint.local release test test-all test-race test-bench test-integ test-unit linters linters.install
285339.SILENT : lint.markdown
0 commit comments