VERSION 0.7
FROM alpine
# renovate: datasource=docker depName=golang
ARG --global GOLINT_VERSION=1.52.2
# renovate: datasource=docker depName=golang
ARG --global GO_VERSION=1.23-bookworm
# renovate: datasource=docker depName=cypress/base
ARG --global CYPRESS_VERSION=18.16.0

go-deps:
    ARG GO_VERSION
    FROM golang:$GO_VERSION
    RUN apt-get update && apt-get install -y rsync gcc bash git
    WORKDIR /build
    COPY . .
    RUN go mod tidy
    RUN go mod download
    RUN go mod verify

test:
    FROM +go-deps
    WORKDIR /build
    ARG TEST_PATHS=./...
    ARG LABEL_FILTER=
    ENV CGO_ENABLED=1
    RUN go run github.com/onsi/ginkgo/v2/ginkgo run -p --label-filter "$LABEL_FILTER" --covermode=atomic --coverprofile=coverage.out --race -r $TEST_PATHS
    SAVE ARTIFACT coverage.out AS LOCAL coverage.out

version:
    FROM +go-deps
    RUN --no-cache echo $(git describe --always --tags --dirty) > VERSION
    RUN --no-cache echo $(git describe --always --dirty) > COMMIT
    ARG VERSION=$(cat VERSION)
    ARG COMMIT=$(cat COMMIT)
    SAVE ARTIFACT VERSION VERSION
    SAVE ARTIFACT COMMIT COMMIT

build-kairos-agent:
    FROM +go-deps
    COPY +webui-deps/node_modules ./internal/webui/public/node_modules
    COPY github.com/kairos-io/kairos-docs:main+docs/public ./internal/webui/public/local
    COPY +version/VERSION ./
    COPY +version/COMMIT ./
    ARG VERSION=$(cat VERSION)
    ARG COMMIT=$(cat COMMIT)
    RUN --no-cache echo "Building Version: ${VERSION} and Commit: ${COMMIT}"
    ARG LDFLAGS="-s -w -X github.com/kairos-io/kairos-agent/v2/internal/common.VERSION=${VERSION} -X github.com/kairos-io/kairos-agent/v2/internal/common.gitCommit=$COMMIT"
    ENV CGO_ENABLED=0
    RUN go build -o kairos-agent -ldflags "${LDFLAGS}" main.go
    SAVE ARTIFACT kairos-agent kairos-agent AS LOCAL build/kairos-agent

build:
    BUILD +build-kairos-agent

golint:
    FROM +go-deps
    ARG GOLINT_VERSION
    RUN wget -O- -nv https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v$GOLINT_VERSION
    WORKDIR /build
    RUN bin/golangci-lint run

webui-deps:
    FROM node:19-alpine
    COPY . .
    WORKDIR ./internal/webui/public
    RUN npm install
    SAVE ARTIFACT node_modules /node_modules AS LOCAL internal/webui/public/node_modules

webui-tests:
    FROM cypress/base:$CYPRESS_VERSION
    COPY +build-kairos-agent/kairos-agent /usr/bin/kairos-agent
    COPY . src/
    WORKDIR src/
    RUN .github/cypress_tests.sh
    SAVE ARTIFACT /src/internal/webui/public/cypress/videos videos