From 63942d9a9783360241fa82bf08d5d9eddc0aaf10 Mon Sep 17 00:00:00 2001
From: Adam Heath <doogie@brainfood.com>
Date: Mon, 13 Jan 2025 15:15:54 -0600
Subject: [PATCH] Initial set of brainfood-tools docker image.

---
 .dockerignore |  1 +
 Dockerfile    | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 entrypoint.sh | 25 +++++++++++++++++++++++++
 3 files changed, 105 insertions(+), 0 deletions(-)
 create mode 100644 .dockerignore
 create mode 100644 Dockerfile
 create mode 100755 entrypoint.sh

diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..3268211
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1 @@
+.*.sw?
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..fd8caac
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,79 @@
+FROM scratch AS helm-remote
+ARG HELM_VERSION=3.16.4
+ADD https://get.helm.sh/helm-v${HELM_VERSION}-linux-amd64.tar.gz /srv/helm-linux-amd64.tar.gz
+
+FROM scratch AS helm-diff-remote
+ARG HELM_DIFF_VERSION=3.5.0
+ADD https://github.com/databus23/helm-diff/releases/download/v${HELM_DIFF_VERSION}/helm-diff-linux-amd64.tgz /srv/helm-diff-linux-amd64.tgz
+
+FROM scratch AS helm-git-remote
+ARG HELM_GIT_VERSION=1.3.0
+ADD https://github.com/aslafy-z/helm-git/archive/refs/tags/v${HELM_GIT_VERSION}.tar.gz /srv/helm-git.tar.gz
+
+FROM scratch AS helmfile-remote
+ARG HELMFILE_VERSION=0.149.0
+ADD https://github.com/helmfile/helmfile/releases/download/v${HELMFILE_VERSION}/helmfile_${HELMFILE_VERSION}_linux_amd64.tar.gz /srv/helmfile_linux_amd64.tar.gz
+
+FROM scratch AS kubectl-remote
+ARG KUBECTL_VERSION=1.24.1
+ADD https://dl.k8s.io/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl /srv/kubectl
+
+FROM scratch AS kustomize-remote
+ARG KUSTOMIZE_VERSION=3.8.0
+#ARG KUSTOMIZE_VERSION=5.5.0
+ADD https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv${KUSTOMIZE_VERSION}/kustomize_v${KUSTOMIZE_VERSION}_linux_amd64.tar.gz /srv/kustomize_linux_amd64.tar.gz
+
+FROM debian:bookworm-20241223-slim AS host-base-tools
+
+RUN	true && \
+	apt-get update && \
+	apt-get install -y git && \
+	adduser tool && \
+	getent passwd && \
+	true
+
+FROM host-base-tools as host-build-tools
+COPY --from=helm-remote /srv/helm-linux-amd64.tar.gz /srv/helm-linux-amd64.tar.gz
+COPY --from=helm-diff-remote /srv/helm-diff-linux-amd64.tgz /srv/helm-diff-linux-amd64.tgz
+COPY --from=helm-git-remote /srv/helm-git.tar.gz /srv/helm-git.tar.gz
+COPY --from=helmfile-remote /srv/helmfile_linux_amd64.tar.gz /srv/helmfile_linux_amd64.tar.gz
+COPY --from=kubectl-remote /srv/kubectl /usr/local/bin/kubectl
+COPY --from=kustomize-remote /srv/kustomize_linux_amd64.tar.gz /srv/kustomize_linux_amd64.tar.gz
+
+RUN	true && set -x && \
+	chown tool:tool /srv/* && \
+	chmod +x /usr/local/bin/kubectl && \
+	cd /tmp && \
+	mkdir install && cd install && \
+	tar -zxvf /srv/helm-linux-amd64.tar.gz && \
+	mv linux-amd64/helm /usr/local/bin/helm && \
+	cd .. && rm -rf install && \
+	mkdir install && cd install && \
+	tar -zxvf /srv/helmfile_linux_amd64.tar.gz && \
+	mv helmfile /usr/local/bin/helmfile && \
+	cd .. && rm -rf install && \
+	mkdir install && cd install && \
+	tar -zxvf /srv/kustomize_linux_amd64.tar.gz && \
+	mv kustomize /usr/local/bin/kustomize && \
+	cd .. && rm -rf install && \
+	true
+
+USER	tool:tool
+RUN	true && set -x && \
+	cd /home/tool && \
+	helm env > /tmp/.helm-env && . /tmp/.helm-env && rm /tmp/.helm-env && \
+	mkdir -p $HELM_PLUGINS && \
+	tar -C $HELM_PLUGINS -xf /srv/helm-diff-linux-amd64.tgz && \
+	tar -C $HELM_PLUGINS -xf /srv/helm-git.tar.gz && \
+	helm version && helm plugin list && \
+	helmfile version && \
+	mkdir -p .config/kustomize/plugins && \
+	mkdir .ssh && chmod 700 .ssh && \
+	true
+
+FROM host-base-tools as final-output
+COPY --from=host-build-tools /home/tool/ /home/tool/ 
+COPY --from=host-build-tools /usr/local/bin/ /usr/local/bin/
+COPY --from=host-build-tools /usr/local/sbin/ /usr/local/sbin/
+COPY entrypoint.sh /usr/local/sbin/entrypoint.sh
+ENTRYPOINT ["entrypoint.sh"]
diff --git a/entrypoint.sh b/entrypoint.sh
new file mode 100755
index 0000000..d46210b
--- /dev/null
+++ b/entrypoint.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+set -ex
+
+configure_ssh_known_hosts() {
+	if [[ -z $SSH_KNOWN_HOSTS ]]; then return; fi
+	for host in $SSH_KNOWN_HOSTS; do
+		ssh-keyscan $host 2>/dev/null
+	done > "/home/tool/.ssh/known_hosts"
+	chown tool:tool "/home/tool/.ssh/known_hosts"
+}
+
+configure_ssh_config() {
+	{
+		echo "Host *"
+		echo " PubkeyAcceptedAlgorithms +ssh-rsa"
+	} > "/home/tool/.ssh/config"
+	chown tool:tool "/home/tool/.ssh/config"
+}
+
+configure_ssh_known_hosts
+configure_ssh_config
+
+[[ $# -eq 0 ]] && set -- "bash"
+exec "$@"
--
libgit2 0.24.0