FROM ubuntu:latest AS builder

# ------------------
# Install Packer
# ------------------
ARG PACKER_VERSION=1.7.10

RUN apt-get clean && apt-get update && apt-get install -y curl unzip git && \
    curl -L -O https://releases.hashicorp.com/packer/${PACKER_VERSION}/packer_${PACKER_VERSION}_linux_amd64.zip && \
    unzip packer_${PACKER_VERSION}_linux_amd64.zip && \
    mv packer /usr/bin && \
    rm packer_${PACKER_VERSION}_linux_amd64.zip && \
    packer -version

# ------------------
# Install Vault
# ------------------
ARG VAULT_VERSION=1.5.2

RUN curl -L -O https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip && \
    unzip vault_${VAULT_VERSION}_linux_amd64.zip && \
    mv vault /usr/bin && \
    rm vault_${VAULT_VERSION}_linux_amd64.zip && \
    vault -version

# ------------------
# Install govc
# ------------------
ARG GOVC_VERSION=0.23.0

RUN curl -L -O https://github.com/vmware/govmomi/releases/download/v${GOVC_VERSION}/govc_linux_amd64.gz && \
    gunzip govc_linux_amd64.gz && \
    mv govc_linux_amd64 /usr/bin/govc && \
    chmod 755 /usr/bin/govc && \
    govc version

# ------------------
# Install tfswitch
# ------------------
RUN curl -Lo tfswitch_install.sh https://raw.githubusercontent.com/warrensbox/terraform-switcher/release/install.sh && \
    chmod +x ./tfswitch_install.sh && \
    ./tfswitch_install.sh -b /usr/local/bin && \
    tfswitch --version

# ------------------
# Install aws-iam-authenticator
# ------------------
ARG AWS_IAM_AUTHENTICATOR_VERSION=0.5.9

RUN curl -Lo aws-iam-authenticator https://github.com/kubernetes-sigs/aws-iam-authenticator/releases/download/v${AWS_IAM_AUTHENTICATOR_VERSION}/aws-iam-authenticator_${AWS_IAM_AUTHENTICATOR_VERSION}_linux_amd64 && \
    mv aws-iam-authenticator /usr/bin/aws-iam-authenticator && \
    chmod +x /usr/bin/aws-iam-authenticator && \
    aws-iam-authenticator version

# ------------------
# Install flux cli
# ------------------
RUN curl -Lo flux_install.sh https://fluxcd.io/install.sh && \
    chmod +x ./flux_install.sh && \
    ./flux_install.sh

# ------------------
# Install kubeseal
# ------------------
ARG KUBESEAL_VERSION=0.26.2

RUN curl -Lo kubeseal-${KUBESEAL_VERSION}-linux-amd64.tar.gz \
    https://github.com/bitnami-labs/sealed-secrets/releases/download/v${KUBESEAL_VERSION}/kubeseal-${KUBESEAL_VERSION}-linux-amd64.tar.gz && \
    tar -xvzf kubeseal-${KUBESEAL_VERSION}-linux-amd64.tar.gz kubeseal && \
    chmod +x kubeseal && \
    mv kubeseal /usr/local/bin/kubeseal

# ------------------
# Install eksctl and eksctl-anywhere
# ------------------
RUN curl -sLO "https://anywhere-assets.eks.amazonaws.com/releases/eks-a/1/artifacts/eks-a/v0.5.0/linux/eksctl-anywhere-v0.5.0-linux-amd64.tar.gz" && \
    tar -xzf eksctl-anywhere-v0.5.0-linux-amd64.tar.gz -C /usr/local/bin && \
    curl -sLO "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_linux_amd64.tar.gz" && \
    tar -xzf eksctl_linux_amd64.tar.gz -C /usr/local/bin

# ------------------
# Install kubent
# ------------------
ARG KUBENT_VERSION=0.7.0

RUN curl -sLO "https://github.com/doitintl/kube-no-trouble/releases/download/${KUBENT_VERSION}/kubent-${KUBENT_VERSION}-linux-amd64.tar.gz" && \
    tar -xzf kubent-${KUBENT_VERSION}-linux-amd64.tar.gz -C /usr/local/bin

# ------------------
# Install kubectx and kubens
# ------------------
RUN git clone https://github.com/ahmetb/kubectx && \
    mv kubectx/kubectx kubectx/kubens /usr/local/bin/ && \
    chmod +x /usr/local/bin/kubectx /usr/local/bin/kubens

# ------------------
# Install starship
# ------------------
RUN curl -sLO "https://github.com/starship/starship/releases/latest/download/starship-x86_64-unknown-linux-gnu.tar.gz" && \
    tar -xzf starship-x86_64-unknown-linux-gnu.tar.gz -C /usr/local/bin


# ------------------
# Install base
# ------------------
FROM ubuntu:jammy

COPY entrypoint.sh /

# ------------------
# Install packages
# ------------------
COPY requirements.txt /tmp

RUN apt-get clean && apt-get update && apt-get install -y curl unzip locales sshpass git jq vim sudo apt-transport-https \
    dnsutils inetutils-traceroute inetutils-ping netcat gnupg wget \
    ca-certificates uuid-runtime openconnect python3 python3-pkg-resources python3-distutils python3-pip tmux zsh zsh-autosuggestions && \
    curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg 1> /dev/null && \
    chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg && \
    echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.list && \
    chmod 644 /etc/apt/sources.list.d/kubernetes.list && \
    curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | tee /etc/apt/trusted.gpg.d/helm.gpg 1> /dev/null && \
    echo "deb https://baltocdn.com/helm/stable/debian/ all main" | tee /etc/apt/sources.list.d/helm-stable-debian.list && \
    curl https://proget.makedeb.org/debian-feeds/prebuilt-mpr.pub | gpg --dearmor | tee /etc/apt/trusted.gpg.d/prebuilt-mpr-archive-keyring.gpg 1> /dev/null && \
    echo "deb https://proget.makedeb.org prebuilt-mpr jammy" | tee /etc/apt/sources.list.d/prebuilt-mpr.list && \
    curl https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | tee /etc/apt/trusted.gpg.d/trivy.gpg 1> /dev/null && \
    echo "deb https://aquasecurity.github.io/trivy-repo/deb jammy main" | tee -a /etc/apt/sources.list.d/trivy.list && \
    apt-get clean && apt-get update && apt-get install -y kubectl \
    git jq ca-certificates vim sudo uuid-runtime openconnect python3 python3-pkg-resources python3-distutils python3-pip \
    curl unzip locales sshpass silversearcher-ag helm glab trivy pinentry-tty bash-completion && \
    pip3 install -r /tmp/requirements.txt && \
    apt-mark hold kubelet kubeadm kubectl

# ------------------
# Install vmware-ovftool
# ------------------
COPY VMware-ovftool-4.4.0-16360108-lin.x86_64.bundle /tmp

RUN locale-gen en_US.UTF-8 && \
    /tmp/VMware-ovftool-4.4.0-16360108-lin.x86_64.bundle --console --required --eulas-agreed && \
    rm -f /tmp/VMware-ovftool-4.4.0-16360108-lin.x86_64.bundle

# ------------------
# Install saml2aws
# ------------------

COPY saml2aws /usr/local/bin

# ------------------
# Install aws-sts-client
# ------------------

COPY aws-sts-client.sh /etc/profile.d/

# ------------------
# Install vcommands
# ------------------

COPY vcommands.sh /etc/profile.d/

# ------------------
# Copy tools from builder
# ------------------

COPY --from=builder /usr/bin/packer /usr/bin
COPY --from=builder /usr/bin/vault /usr/bin
COPY --from=builder /usr/local/bin /usr/local/bin
COPY --from=builder /usr/bin/govc /usr/bin
COPY --from=builder /usr/bin/aws-iam-authenticator /usr/bin

ENTRYPOINT ["/entrypoint.sh"]