DOCKER_IMAGE := svrnty/dotnet
VARIANTS := runtime runtime-invariant sdk

# Default: show help
.PHONY: help
help:
	@echo "Usage:"
	@echo "  make discover          - Query .NET release metadata and show supported versions"
	@echo "  make build-apko        - Build all apko base images locally"
	@echo "  make build MAJOR=10    - Build all variants for a specific .NET major version"
	@echo "  make clean             - Remove build artifacts"

# Discover supported .NET versions from release metadata
.PHONY: discover
discover:
	@echo "Fetching .NET release metadata..."
	@curl -fsSL https://dotnetcli.azureedge.net/dotnet/release-metadata/releases-index.json | \
		jq -r '.["releases-index"][] | select(.["support-phase"] == "active" or .["support-phase"] == "go-live") | "\(.["channel-version"])\t\(.["latest-runtime"])\t\(.["latest-sdk"])\t\(.["release-type"])\t\(.["support-phase"])"' | \
		column -t -s$$'\t' -N "CHANNEL,RUNTIME,SDK,TYPE,PHASE"

# Build apko base images for a specific variant (local only)
.PHONY: build-apko
build-apko:
	@for variant in $(VARIANTS); do \
		echo "Building apko base: $$variant"; \
		for arch in x86_64 aarch64; do \
			docker run --rm -v $(PWD)/apko:/work cgr.dev/chainguard/apko build \
				--arch $$arch /work/$$variant.yaml $$variant:latest build-$$arch/$$variant.tar.gz || exit 1; \
		done; \
	done

# Build all variants for a .NET major version
.PHONY: build
build:
ifndef MAJOR
	$(error MAJOR is required, e.g. make build MAJOR=10)
endif
	@echo "Building .NET $(MAJOR) images..."
	@$(MAKE) build-variant VARIANT=runtime MAJOR=$(MAJOR)
	@$(MAKE) build-variant VARIANT=runtime-invariant MAJOR=$(MAJOR)
	@$(MAKE) build-variant VARIANT=sdk MAJOR=$(MAJOR)

# Build a single variant (internal target)
.PHONY: build-variant
build-variant:
	@echo "Building $(VARIANT)-$(MAJOR)..."
	@for arch in x86_64 aarch64; do \
		docker run --rm -v $(PWD)/apko:/work cgr.dev/chainguard/apko build \
			--arch $$arch /work/$(VARIANT).yaml $(VARIANT):latest build-$$arch/rootfs.tar.gz || exit 1; \
	done

# Clean build artifacts
.PHONY: clean
clean:
	rm -rf build-* dotnet-*
