diff --git a/Dockerfile b/Dockerfile index 54ca9dfce..78d368a83 100644 --- a/Dockerfile +++ b/Dockerfile @@ -42,7 +42,7 @@ RUN --mount=type=cache,target=/root/.cache/go-build \ GOARCH=${TARGETARCH:-amd64} \ CGO_ENABLED=0 \ GO111MODULE=on \ - go build -a -o manager main.go + go build -a -o /workspace/manager main.go ############################################################################### # Stage 2: Copy build assets to create the smallest final runtime image diff --git a/Dockerfile.develop b/Dockerfile.develop index b3f9a1ea6..b0c5b19a5 100644 --- a/Dockerfile.develop +++ b/Dockerfile.develop @@ -20,8 +20,8 @@ FROM registry.access.redhat.com/ubi8/go-toolset:1.19 # https://docs.docker.com/engine/reference/builder/#automatic-platform-args-in-the-global-scope # don't provide "default" values (e.g. 'ARG TARGETARCH=amd64') for non-buildx environments, # see https://github.com/docker/buildx/issues/510 -ARG TARGETOS=linux -ARG TARGETARCH=amd64 +ARG TARGETOS +ARG TARGETARCH ARG OPENSHIFT_VERSION=4.12 ARG KUSTOMIZE_VERSION=4.5.2 @@ -41,7 +41,8 @@ RUN --mount=type=cache,target=/root/.cache/dnf:rw \ python3 \ python3-pip \ nodejs \ - jq + jq \ + && true # Install pre-commit ENV PIP_CACHE_DIR=/root/.cache/pip @@ -75,6 +76,12 @@ RUN true \ && rm -v /tmp/kustomize.tar.gz \ && true +# Install yq 4.x +RUN true \ + && curl -L https://github.com/mikefarah/yq/releases/download/v4.33.3/yq_linux_amd64.tar.gz | tar xz -C /tmp \ + && mv /tmp/yq_linux_amd64 /usr/local/bin/yq \ + && true + # Copy the Go Modules manifests COPY .pre-commit-config.yaml go.mod go.sum ./ @@ -104,12 +111,6 @@ RUN true \ && ginkgo version \ && true -# Install yq 4.x -RUN true \ - && curl -L https://github.com/mikefarah/yq/releases/download/v4.33.3/yq_linux_amd64.tar.gz | tar xz -C /tmp \ - && mv /tmp/yq_linux_amd64 /usr/local/bin/yq \ - && true - # For GitHub Action 'lint', work around error "detected dubious ownership in repository at '/workspace'" RUN git config --system --add safe.directory /workspace diff --git a/Dockerfile.develop.ci b/Dockerfile.develop.ci new file mode 100644 index 000000000..35a3664eb --- /dev/null +++ b/Dockerfile.develop.ci @@ -0,0 +1,119 @@ +# Copyright 2021 IBM Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +############################################################################### +# Create the develop, test, and build environment +############################################################################### +FROM registry.access.redhat.com/ubi8/go-toolset:1.19 + +# https://docs.docker.com/engine/reference/builder/#automatic-platform-args-in-the-global-scope +# don't provide "default" values (e.g. 'ARG TARGETARCH=amd64') for non-buildx environments, +# see https://github.com/docker/buildx/issues/510 +ARG TARGETOS=linux +ARG TARGETARCH=amd64 + +ARG OPENSHIFT_VERSION=4.12 +ARG KUSTOMIZE_VERSION=4.5.2 +ARG KUBEBUILDER_VERSION=v3.3.0 +ARG CONTROLLER_GEN_VERSION=v0.11.4 + +ENV PATH=/usr/local/go/bin:$PATH:/usr/local/kubebuilder/bin: + +USER root +ENV HOME=/go + +WORKDIR /go/src/github.com/opendatahub-io/modelmesh-serving/ + +# Install build and dev tools +RUN --mount=type=cache,target=${HOME}/.cache/dnf:rw \ + dnf install --setopt=cachedir=${HOME}/.cache/dnf -y --nodocs \ + python3 \ + python3-pip \ + nodejs \ + jq + +# Install pre-commit +ENV PIP_CACHE_DIR=${HOME}/.cache/pip +RUN --mount=type=cache,target=${HOME}/.cache/pip \ + pip3 install pre-commit + +# First download and extract older dist of kubebuilder which includes required etcd, kube-apiserver and kubectl binaries +# Then download and overwrite kubebuilder binary with desired/latest version +RUN true \ + && curl -L https://github.com/kubernetes-sigs/kubebuilder/releases/download/v2.3.2/kubebuilder_2.3.2_${TARGETOS}_${TARGETARCH}.tar.gz | tar -xz -C /tmp/ \ + && mv /tmp/kubebuilder_*_${TARGETOS}_${TARGETARCH} /usr/local/kubebuilder \ + && curl -L https://github.com/kubernetes-sigs/kubebuilder/releases/download/${KUBEBUILDER_VERSION}/kubebuilder_${TARGETOS}_${TARGETARCH} -o /usr/local/kubebuilder/bin/kubebuilder \ + && true + +# Download openshift-cli +RUN true \ + && curl -sSLf --output /tmp/oc_client.tar.gz https://mirror.openshift.com/pub/openshift-v4/${TARGETARCH}/clients/ocp/latest-${OPENSHIFT_VERSION}/openshift-client-${TARGETOS}.tar.gz \ + && tar -xvf /tmp/oc_client.tar.gz -C /tmp \ + && mv /tmp/oc /usr/local/bin \ + && mv /tmp/kubectl /usr/local/bin \ + && chmod a+x /usr/local/bin/oc /usr/local/bin/kubectl \ + && rm -f /tmp/oc_client.tar.gz \ + && true + +# Download kustomize +RUN true \ + && curl -sSLf --output /tmp/kustomize.tar.gz https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv${KUSTOMIZE_VERSION}/kustomize_v${KUSTOMIZE_VERSION}_${TARGETOS}_${TARGETARCH}.tar.gz \ + && tar -xvf /tmp/kustomize.tar.gz -C /tmp \ + && mv /tmp/kustomize /usr/local/bin \ + && chmod a+x /usr/local/bin/kustomize \ + && rm -v /tmp/kustomize.tar.gz \ + && true + +# Install yq 4.x +RUN true \ + && curl -L https://github.com/mikefarah/yq/releases/download/v4.33.3/yq_linux_amd64.tar.gz | tar xz -C /tmp \ + && mv /tmp/yq_linux_amd64 /usr/local/bin/yq \ + && true + +# Copy the Go Modules manifests +COPY .pre-commit-config.yaml go.mod go.sum ./ + +# Download and initialize the pre-commit environments before copying the source so they will be cached +RUN true \ + && git init \ + && pre-commit install-hooks \ + && true + +# Cache dependencies before copying and building sources so that source changes +# won't invalidate earlier download layers +RUN go mod download + +# Export the Go binary path for controller-gen and ginkgo CLIs +ENV PATH=/go/bin:$HOME/go/bin:$PATH +RUN chmod -R 777 /go + +# Install controller-gen to generate util code and Kubernetes YAMLs for API changes +RUN true \ + && go install sigs.k8s.io/controller-tools/cmd/controller-gen@${CONTROLLER_GEN_VERSION} \ + && controller-gen --version \ + && true + +# Install the Ginkgo test framework +RUN true \ + && go install github.com/onsi/ginkgo/v2/ginkgo \ + && ginkgo version \ + && true + +# For GitHub Action 'lint', work around error "detected dubious ownership in repository at '/workspace'" +RUN git config --system --add safe.directory /go/src/github.com/opendatahub-io/modelmesh-serving + +# The ubi/go-toolset image doesn't define ENTRYPOINT or CMD, but we need it to run 'make develop' +CMD /bin/bash + +WORKDIR /workspace