# syntax=docker/dockerfile:1

# build latest tagged gaia
FROM golang:1.20-alpine AS gaia-builder 
# WORKDIR is set to /go by default
ARG USE_GAIA_TAG
ENV GAIA_TAG=${USE_GAIA_TAG}

ENV PACKAGES curl make git libc-dev bash gcc linux-headers
RUN apk add --no-cache $PACKAGES

ENV CGO_ENABLED=0
ENV GOOS=linux
ENV GOFLAGS="-buildvcs=false"

# cache go modules - done before the files are copied to allow docker to better cache
COPY go.mod /go.mod
COPY go.sum /go.sum
RUN go mod download

# Copy host machine's working directory into the container under /interchain-security
ADD . /interchain-security

RUN git clone https://github.com/cosmos/gaia.git
WORKDIR /go/gaia

# fetch gaia from tag and build it
RUN if [ -n "${GAIA_TAG}" ]; \
    then git checkout "${GAIA_TAG}"; \
    # if GAIA_TAG is not set, build the latest tagged version
    else \
    git checkout $(git tag | sort -Vr | head -n1); \
    fi 

# Also replace sdk version in the go.mod if specified
RUN if [ -d "/interchain-security/cosmos-sdk" ]; then \
    go mod edit -replace github.com/cosmos/cosmos-sdk=/interchain-security/cosmos-sdk && \
    echo "local sdk version used in gaia build"; \
    fi

RUN go mod tidy
# Print the version of the sdk used in the build
RUN go list -m github.com/cosmos/cosmos-sdk 
RUN make build

FROM golang:1.20-alpine AS is-builder

ENV PACKAGES curl make git libc-dev bash gcc linux-headers
RUN apk add --no-cache $PACKAGES

ENV CGO_ENABLED=0
ENV GOOS=linux
ENV GOFLAGS="-buildvcs=false"

# Copy in the repo under test
ADD . /interchain-security

WORKDIR /interchain-security

# Install interchain security binary
RUN make install

# Get Hermes build
FROM ghcr.io/informalsystems/hermes:1.4.1 AS hermes-builder

FROM --platform=linux/amd64 fedora:36
RUN dnf update -y
RUN dnf install -y which iproute iputils procps-ng vim-minimal tmux net-tools htop jq
USER root

COPY --from=hermes-builder /usr/bin/hermes /usr/local/bin/

# swap interchain-security-pd binary with gaia binary but keep the name
COPY --from=gaia-builder /go/gaia/build/gaiad /usr/local/bin/interchain-security-pd
COPY --from=is-builder /go/bin/interchain-security-cd /usr/local/bin/interchain-security-cd
COPY --from=is-builder /go/bin/interchain-security-cdd /usr/local/bin/interchain-security-cdd
COPY --from=is-builder /go/bin/interchain-security-sd /usr/local/bin/interchain-security-sd

# Copy in the shell scripts that run the testnet
ADD ./tests/e2e/testnet-scripts /testnet-scripts

# Copy in the hermes config
ADD ./tests/e2e/testnet-scripts/hermes-config.toml /root/.hermes/config.toml