Skip to content

Commit 59c1655

Browse files
feat(cli): CLI image with bash (#1946)
# Description Create cli image that supports bash ## Checklist - [ ] I have read the [contributing documentation](https://retina.sh/docs/Contributing/overview). - [ ] I signed and signed-off the commits (`git commit -S -s ...`). See [this documentation](https://docs.github.com/en/authentication/managing-commit-signature-verification/about-commit-signature-verification) on signing commits. - [ ] I have correctly attributed the author(s) of the code. - [ ] I have tested the changes locally. - [ ] I have followed the project's style guidelines. - [ ] I have updated the documentation, if necessary. - [ ] I have added tests, if applicable. ## Screenshots (if applicable) or Testing Completed Please add any relevant screenshots or GIFs to showcase the changes made. ## Additional Notes Add any additional notes or context about the pull request here. --- Please refer to the [CONTRIBUTING.md](../CONTRIBUTING.md) file for more information on how to contribute to this project. --------- Signed-off-by: Kamil <[email protected]> Co-authored-by: Kamil <[email protected]>
1 parent f4a818e commit 59c1655

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

Makefile

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ RETINA_INIT_IMAGE = $(IMAGE_NAMESPACE)/retina-init
172172
RETINA_OPERATOR_IMAGE = $(IMAGE_NAMESPACE)/retina-operator
173173
RETINA_SHELL_IMAGE = $(IMAGE_NAMESPACE)/retina-shell
174174
KUBECTL_RETINA_IMAGE = $(IMAGE_NAMESPACE)/kubectl-retina
175+
KUBECTL_RETINA_SHELL_IMAGE = $(IMAGE_NAMESPACE)/kubectl-retina-shell
175176
RETINA_INTEGRATION_TEST_IMAGE = $(IMAGE_NAMESPACE)/retina-integration-test
176177
RETINA_PROTO_IMAGE = $(IMAGE_NAMESPACE)/retina-proto-gen
177178
RETINA_GO_GEN_IMAGE = $(IMAGE_NAMESPACE)/retina-go-gen
@@ -315,6 +316,20 @@ kubectl-retina-image:
315316
CONTEXT_DIR=$(REPO_ROOT) \
316317
EXTRA_BUILD_ARGS=$(EXTRA_BUILD_ARGS)
317318

319+
kubectl-retina-shell-image:
320+
echo "Building shell-enabled kubectl-retina for $(PLATFORM)"
321+
set -e ; \
322+
$(MAKE) container-$(CONTAINER_BUILDER) \
323+
PLATFORM=$(PLATFORM) \
324+
DOCKERFILE=cli/Dockerfile \
325+
REGISTRY=$(IMAGE_REGISTRY) \
326+
IMAGE=$(KUBECTL_RETINA_SHELL_IMAGE) \
327+
VERSION=$(TAG) \
328+
TAG=$(RETINA_PLATFORM_TAG) \
329+
CONTEXT_DIR=$(REPO_ROOT) \
330+
TARGET=shell-target \
331+
EXTRA_BUILD_ARGS=$(EXTRA_BUILD_ARGS)
332+
318333
kapinger-image:
319334
docker buildx build --builder retina --platform windows/amd64 --target windows-amd64 -t $(IMAGE_REGISTRY)/$(KAPINGER_IMAGE):$(TAG)-windows-amd64 ./hack/tools/kapinger/ --push
320335
docker buildx build --builder retina --platform linux/amd64 --target linux-amd64 -t $(IMAGE_REGISTRY)/$(KAPINGER_IMAGE):$(TAG)-linux-amd64 ./hack/tools/kapinger/ --push
@@ -370,6 +385,10 @@ manifest-kubectl-retina-image:
370385
$(eval FULL_IMAGE_NAME=$(IMAGE_REGISTRY)/$(KUBECTL_RETINA_IMAGE):$(TAG))
371386
docker buildx imagetools create -t $(FULL_IMAGE_NAME) $(foreach platform,linux/amd64 linux/arm64, $(FULL_IMAGE_NAME)-$(subst /,-,$(platform)))
372387

388+
manifest-kubectl-retina-shell-image:
389+
$(eval FULL_IMAGE_NAME=$(IMAGE_REGISTRY)/$(KUBECTL_RETINA_SHELL_IMAGE):$(TAG))
390+
docker buildx imagetools create -t $(FULL_IMAGE_NAME) $(foreach platform,linux/amd64 linux/arm64, $(FULL_IMAGE_NAME)-$(subst /,-,$(platform)))
391+
373392
manifest:
374393
echo "Building for $(COMPONENT)"
375394
if [ "$(COMPONENT)" = "retina" ]; then \
@@ -380,6 +399,8 @@ manifest:
380399
$(MAKE) manifest-shell-image; \
381400
elif [ "$(COMPONENT)" = "kubectl-retina" ]; then \
382401
$(MAKE) manifest-kubectl-retina-image; \
402+
elif [ "$(COMPONENT)" = "kubectl-retina-shell" ]; then \
403+
$(MAKE) manifest-kubectl-retina-shell-image; \
383404
fi
384405

385406
##@ Tests

cli/Dockerfile

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,19 @@ RUN --mount=type=cache,target="/root/.cache/go-build" \
2222
-X "github.com/microsoft/retina/internal/buildinfo.RetinaAgentImageName"="$AGENT_IMAGE_NAME"" \
2323
-a -o kubectl-retina cli/main.go
2424

25+
# Target 1: Distroless (secure, minimal)
2526
# skopeo inspect docker://mcr.microsoft.com/azurelinux/distroless/minimal:3.0 --format "{{.Name}}@{{.Digest}}"
26-
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/azurelinux/distroless/minimal@sha256:0801b80a0927309572b9adc99bd1813bc680473175f6e8175cd4124d95dbd50c
27+
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/azurelinux/distroless/minimal@sha256:0801b80a0927309572b9adc99bd1813bc680473175f6e8175cd4124d95dbd50c AS distroless-target
2728
WORKDIR /
2829
COPY --from=builder /workspace/kubectl-retina .
2930

31+
# Target 2: Shell-enabled (operational, init container support)
32+
# skopeo inspect docker://mcr.microsoft.com/cbl-mariner/base/core:2.0 --format "{{.Name}}@{{.Digest}}"
33+
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/cbl-mariner/base/core@sha256:4d97d662d71c1fda938ed9df36d8f490d9107cff37e89c0efa932d073285ad85 AS shell-target
34+
WORKDIR /
35+
COPY --from=builder /workspace/kubectl-retina /bin/kubectl-retina
36+
RUN chmod +x /bin/kubectl-retina
37+
38+
# Default target (distroless for backward compatibility)
39+
FROM distroless-target
40+

0 commit comments

Comments
 (0)