FROM ubi8:8-released AS stage1

ARG kubevirt_version=0.17.4
ARG kubevirt_commit=adfdb8c07830b99fc79d2fd1d004e862ef70979e
ARG kubevirt_tar=kubevirt-v2.0.0-2-31-gb91edbf.tar.gz
ARG libvirt_tar=libvirt-8850a8f442abee4fe08babdfaa7fe2d55b2c263d.tar.gz
ARG libvirt_commit=8850a8f442abee4fe08babdfaa7fe2d55b2c263d
ENV GOPATH=/go

RUN echo -e "[virt]\nname=virt\nprofiles=\nstate=enabled\nstream=8.0.0" > /etc/dnf/modules.d/virt.module && \
    dnf install -y tar gzip go-compilers-golang-compiler rsync sed libvirt-devel make git mercurial sudo gcc findutils qemu-img protobuf
COPY ${kubevirt_tar} /
RUN tar xf /${kubevirt_tar} && \
    mkdir -p /go/src/kubevirt.io/ && \
    mv kubevirt-${kubevirt_commit} /go/src/kubevirt.io/kubevirt

RUN tar xf /${libvirt_tar} && \
    mv /libvirt-${libvirt_commit} /libvirt

WORKDIR ${GOPATH}/src/kubevirt.io/kubevirt

RUN KUBEVIRT_VERSION=${kubevirt_version} \
    KUBEVIRT_SOURCE_DATE_EPOCH="$(date +%s)" \
    KUBEVIRT_GIT_COMMIT=${kubevirt_commit} \
    KUBEVIRT_GIT_VERSION=v${kubevirt_version} \
    KUBEVIRT_GIT_TREE_STATE=clean \
    ./hack/build-go.sh install cmd/virt-launcher

RUN dnf -y --setopt=tsflags=nodocs install --installroot /newroot --downloadonly --downloaddir /stage1-rpms --setopt install_weak_deps=false dnf

# Workaround for https://projects.engineering.redhat.com/browse/OSBS-7352
ENV GOPATH=/go

# ------
FROM ubi8-minimal:8-released as stage2

# This intermediate stage is designed to collect the RPMs we need for final output
# but use the dnf command vs microdnf (repository/package download issues arose with
# microdnf at the 11th hour of the CNV 2.0.0 release)

COPY --from=stage1 /stage1-rpms /stage1-rpms
RUN rm -f /stage1-rpms/coreutils-* && \
    rpm -Uv --force /stage1-rpms/*

COPY --from=stage1 /etc/dnf/modules.d/virt.module /etc/dnf/modules.d/virt.module
RUN PKGS="nettle qemu-kvm libvirt-daemon-kvm libvirt-client selinux-policy selinux-policy-targeted augeas socat genisoimage sudo edk2-ovmf" && \
    dnf -y --setopt=tsflags=nodocs install --installroot /newroot --downloadonly --downloaddir /rpms --setopt install_weak_deps=false $PKGS && \
    rm -f /rpms/coreutils-*

# ------
FROM ubi8-minimal:8-released

ARG scripts_dir=/usr/share/kubevirt/virt-launcher/
ARG project_dir=/go/src/kubevirt.io/kubevirt/cmd/virt-launcher

COPY --from=stage1 /etc/dnf/modules.d/virt.module /etc/dnf/modules.d/virt.module
COPY --from=stage2 /rpms /rpms

RUN for fn in /rpms/*; do PKGNAME=$(rpm -qi $fn | grep -e "Name\s\+:" | sed "s/.*: //"); rpm -q $PKGNAME >/dev/null && rm -vf $fn; done
RUN rpm -iv --force /rpms/*

RUN PKGS="nettle qemu-kvm libvirt-daemon-kvm libvirt-client selinux-policy selinux-policy-targeted augeas socat genisoimage sudo edk2-ovmf" && \
    microdnf clean all && \
    rpm -V $PKGS && \
    test $(id -u qemu) = 107 # make sure that the qemu user really is 107 && \
    mkdir -p /usr/share/kubevirt/virt-launcher

RUN rm -rf /rpms

COPY --from=stage1 /go/src/kubevirt.io/kubevirt/_out/cmd/virt-launcher/virt-launcher-${kubevirt_version}-linux-amd64 /usr/bin/virt-launcher
COPY --from=stage1 ${project_dir}/sock-connector ${scripts_dir}
COPY --from=stage1 /libvirt/augconf /tmp/augconf
RUN augtool -f /tmp/augconf

ENTRYPOINT [ "/usr/bin/virt-launcher" ]

LABEL com.redhat.component="virt-launcher-container" \
      name="container-native-virtualization/virt-launcher" \
      version="v2.0.0" \
      release="39" \
      upstream-version="0.17.4" \
      upstream-vcs-ref="adfdb8c07830b99fc79d2fd1d004e862ef70979e" \
      upstream-vcs-type="git" \
      summary="Hosts VM processes" \
      io.openshift.expose-services="" \
      io.openshift.tags="cnv,kubevirt,VM" \
      io.k8s.display-name="virt-launcher" \
      maintainer="The KubeVirt Project <kubevirt-dev@googlegroups.com>" \
      description="Create cgroups and namespaced and host VM process"
