# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# 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.

SHELL := /bin/bash -o pipefail

HUB ?= skywalking
NAME ?= skywalking-java
TAG ?= latest
AGENT_PACKAGE ?= skywalking-agent
CLI_VERSION ?= 0.13.0 # CLI version inside agent image should always use an Apache released artifact.

.PHONY: build
build:
	./mvnw --batch-mode clean package -Dmaven.test.skip=true

.PHONY: dist
dist: build
	tar czf apache-skywalking-java-agent-$(TAG).tgz $(AGENT_PACKAGE)
	gpg --armor --detach-sig apache-skywalking-java-agent-$(TAG).tgz
	shasum -a 512 apache-skywalking-java-agent-$(TAG).tgz > apache-skywalking-java-agent-$(TAG).tgz.sha512

# Docker build

base.all := alpine java8 java11 java17 java21 java25
base.each = $(word 1, $@)

base.image.alpine := alpine:3
base.image.java8 := eclipse-temurin:8-jre
base.image.java11 := eclipse-temurin:11-jre
base.image.java17 := eclipse-temurin:17-jre
base.image.java21 := eclipse-temurin:21-jre
base.image.java25 := eclipse-temurin:25-jre

docker.%: PLATFORMS =
docker.%: LOAD_OR_PUSH = --load
docker.push.%: PLATFORMS = --platform linux/amd64,linux/arm64
docker.push.%: LOAD_OR_PUSH = --push

.PHONY: $(base.all)
$(base.all:%=docker.%): BASE_IMAGE=$($(base.each:docker.%=base.image.%))
$(base.all:%=docker.%): FINAL_TAG=$(TAG)-$(base.each:docker.%=%)
$(base.all:%=docker.push.%): BASE_IMAGE=$($(base.each:docker.push.%=base.image.%))
$(base.all:%=docker.push.%): FINAL_TAG=$(TAG)-$(base.each:docker.push.%=%)
$(base.all:%=docker.%) $(base.all:%=docker.push.%): skywalking-agent
	docker buildx create --use --driver docker-container --name skywalking_main > /dev/null 2>&1 || true
	docker buildx build $(PLATFORMS) $(LOAD_OR_PUSH) \
        --no-cache \
        --build-arg BASE_IMAGE=$(BASE_IMAGE) \
        --build-arg DIST=$(AGENT_PACKAGE) \
        --build-arg SKYWALKING_CLI_VERSION=$(CLI_VERSION) \
        . -t $(HUB)/$(NAME):$(FINAL_TAG)
	docker buildx rm skywalking_main || true

.PHONY: docker docker.push
docker: $(base.all:%=docker.%)
docker.push: $(base.all:%=docker.push.%)
