# syntax=docker/dockerfile:1

FROM ghcr.io/linuxserver/baseimage-alpine:3.19 as buildstage

ARG MOD_VERSION

RUN \
  echo "**** retrieve latest docker and compose versions ****" && \
  if [ -z "${MOD_VERSION+x}" ]; then \
    DOCKER_RELEASE=$(curl -sX GET "https://api.github.com/repos/moby/moby/releases/latest" \
      | awk '/tag_name/{print $4;exit}' FS='[""]' \
      | sed 's|^v||'); \
    COMPOSE_RELEASE=$(curl -sX GET "https://api.github.com/repos/docker/compose/releases/latest" \
      | awk '/tag_name/{print $4;exit}' FS='[""]' \
      | sed 's|^v||'); \
  else \
    DOCKER_RELEASE=$(echo "${MOD_VERSION}" | sed 's|-.*||'); \
    COMPOSE_RELEASE=$(echo "${MOD_VERSION}" | sed 's|.*-||'); \
  fi && \
  echo "**** retrieve latest compose switch version ****" && \
  if [ -z ${SWITCH_RELEASE+x} ]; then \
    SWITCH_RELEASE=$(curl -sX GET "https://api.github.com/repos/docker/compose-switch/releases/latest" \
      | awk '/tag_name/{print $4;exit}' FS='[""]' \
      | sed 's|^v||'); \
  fi && \
  echo "**** retrieve latest buildx version ****" && \
  if [ -z ${BUILDX_RELEASE+x} ]; then \
    BUILDX_RELEASE=$(curl -sX GET "https://api.github.com/repos/docker/buildx/releases/latest" \
      | awk '/tag_name/{print $4;exit}' FS='[""]'); \
  fi && \
  mkdir -p \
    /root-layer/docker-bins \
    /tmp/docker && \
  if [ $(uname -m) = "x86_64" ]; then \
    echo "**** grab x86_64 tarballs and binaries ****" && \
    curl -fo \
      /tmp/docker.tgz -L \
      "https://download.docker.com/linux/static/stable/x86_64/docker-${DOCKER_RELEASE}.tgz" && \
    tar xf \
      /tmp/docker.tgz -C \
      /tmp/docker --strip-components=1 && \
    cp /tmp/docker/docker /root-layer/docker-bins/docker && \
    curl -fo \
      /root-layer/docker-bins/docker-compose -L \
      "https://github.com/docker/compose/releases/download/v${COMPOSE_RELEASE}/docker-compose-linux-x86_64" && \
    curl -fo \
      /root-layer/docker-bins/compose-switch -L \
      "https://github.com/docker/compose-switch/releases/download/v${SWITCH_RELEASE}/docker-compose-linux-amd64" && \
    curl -fo \
      /root-layer/docker-bins/docker-buildx -L \
      "https://github.com/docker/buildx/releases/download/${BUILDX_RELEASE}/buildx-${BUILDX_RELEASE}.linux-amd64"; \
  elif [ $(uname -m) = "aarch64" ]; then \
    echo "**** grab aarch64 tarballs and binaries ****" && \
    curl -fo \
      /tmp/docker.tgz -L \
      "https://download.docker.com/linux/static/stable/aarch64/docker-${DOCKER_RELEASE}.tgz" && \
    tar xf \
      /tmp/docker.tgz -C \
      /tmp/docker --strip-components=1 && \
    cp /tmp/docker/docker /root-layer/docker-bins/docker && \
    curl -fo \
      /root-layer/docker-bins/docker-compose -L \
      "https://github.com/docker/compose/releases/download/v${COMPOSE_RELEASE}/docker-compose-linux-aarch64" && \
    curl -fo \
      /root-layer/docker-bins/compose-switch -L \
      "https://github.com/docker/compose-switch/releases/download/v${SWITCH_RELEASE}/docker-compose-linux-arm64" && \
    curl -fo \
      /root-layer/docker-bins/docker-buildx -L \
      "https://github.com/docker/buildx/releases/download/${BUILDX_RELEASE}/buildx-${BUILDX_RELEASE}.linux-arm64"; \
  fi && \
  chmod +x /root-layer/docker-bins/* && \
  rm -rf /tmp/*

COPY root/ /root-layer/

# runtime stage
FROM scratch

LABEL maintainer="aptalca"

# Add files from buildstage
COPY --from=buildstage /root-layer/ /
