blob: 48585df85aa7ba49ab8857ff86920660ccccc52a [file] [log] [blame]
Joey Armstrong811e9542022-12-25 21:45:27 -05001# -*- makefile -*-
2# -----------------------------------------------------------------------
Joey Armstrong7a9af442024-01-03 19:26:36 -05003# Copyright 2016-2024 Open Networking Foundation (ONF) and the ONF Contributors
Matt Jeanneret2e3051a2019-05-11 15:01:46 -04004#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
Joey Armstrong811e9542022-12-25 21:45:27 -050016# -----------------------------------------------------------------------
17
18# ---------------------------------------------------------------------------
19# Alternates to try when APK is having repository problems.
20# http://dl-cnd.alpinelinux.org
21# http://dl-3.alpinelinux.org
22# http://dl-4.alpinelinux.org
23# ---------------------------------------------------------------------------
24#9 0.263 fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKIND4EX.tar.gz
25#9 5.269 ERROR: https://dl-cdn.alpinelinux.org/alpine/v3.13/main: temporary error (try again later)
26#9 5.269 WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.13/main: No such file or directory
27#9 5.269 fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
28# ---------------------------------------------------------------------------
Matt Jeanneret2e3051a2019-05-11 15:01:46 -040029
khenaidoocfee5f42018-07-19 22:47:38 -040030# -------------
31# Build stage
32
David K. Bainbridgefc8e1812021-04-09 16:09:49 +000033FROM --platform=linux/amd64 golang:1.16.3-alpine3.13 AS dev
Matt Jeanneret2e3051a2019-05-11 15:01:46 -040034
Joey Armstrong811e9542022-12-25 21:45:27 -050035# [TODO] update
36# FROM --platform=linux/amd64 golang:1.19.4-r0-alpine3.17 AS dev
37
Matt Jeanneret2e3051a2019-05-11 15:01:46 -040038# Install required packages
Joey Armstrong811e9542022-12-25 21:45:27 -050039
40RUN apk --update update # refresh the index
41RUN apk --update add --no-cache build-base=0.5-r3
Matt Jeanneret2e3051a2019-05-11 15:01:46 -040042
girishk5259f8e2019-10-10 18:44:44 +000043# Use Standard go build directory structure
44WORKDIR /go/src
khenaidooffe076b2019-01-15 16:08:08 -050045
Matt Jeanneret2e3051a2019-05-11 15:01:46 -040046# Copy common files.
sbarbari17d7e222019-11-05 10:02:29 -050047COPY db ./db
Matt Jeanneret2e3051a2019-05-11 15:01:46 -040048COPY vendor ./vendor
49
Joey Armstrong393daca2023-07-06 08:47:54 -040050# -----------------------------------------------------------------------
51# Chicken-n-egg problem: See Dockerfile.rw_core
52# required by testing (-coverprofile fails w/o this)
53# test output, does not exist during build
54# -----------------------------------------------------------------------
55# [TODO] Create two distinct docker files to break the artifical
56# dependency loop
57# -----------------------------------------------------------------------
Joey Armstrong811e9542022-12-25 21:45:27 -050058COPY tests/results/go-test-coverage.out ./tests/results/go-test-coverage.out
59
khenaidoocfee5f42018-07-19 22:47:38 -040060# Copy files
Matt Jeanneret85ab5082019-04-01 11:29:20 -040061COPY rw_core ./rw_core
girishk5259f8e2019-10-10 18:44:44 +000062COPY go.mod ./
63COPY go.sum ./
khenaidooffe076b2019-01-15 16:08:08 -050064
Kent Hagermanc64df642020-04-07 10:26:41 -040065ARG EXTRA_GO_BUILD_TAGS=""
66
Andrea Campanella8d4f3e32021-04-13 10:02:03 +020067ARG CGO_PARAMETER="CGO_ENABLED=0"
68
Matt Jeanneret877b5c22019-07-03 11:09:50 -040069ARG org_label_schema_version=unknown
70ARG org_label_schema_vcs_url=unknown
71ARG org_label_schema_vcs_ref=unknown
72ARG org_label_schema_build_date=unknown
73ARG org_opencord_vcs_commit_date=unknown
74ARG org_opencord_vcs_dirty=unknown
75
Matt Jeanneret85ab5082019-04-01 11:29:20 -040076# Build
girishk5259f8e2019-10-10 18:44:44 +000077WORKDIR /go/src/rw_core
David K. Bainbridge41835142021-04-01 17:26:12 +000078SHELL ["/bin/ash", "-o", "pipefail", "-c"]
79RUN \
Andrea Campanella8d4f3e32021-04-13 10:02:03 +020080export ${CGO_PARAMETER?} && go build $EXTRA_GO_BUILD_TAGS -mod=vendor -o /app/rw_core \
David K. Bainbridge41835142021-04-01 17:26:12 +000081-ldflags \
khenaidood948f772021-08-11 17:49:24 -040082"-X github.com/opencord/voltha-lib-go/v7/pkg/version.version=$org_label_schema_version \
83-X github.com/opencord/voltha-lib-go/v7/pkg/version.vcsRef=$org_label_schema_vcs_ref \
84-X github.com/opencord/voltha-lib-go/v7/pkg/version.vcsDirty=$org_opencord_vcs_dirty \
85-X github.com/opencord/voltha-lib-go/v7/pkg/version.goVersion=$(go version 2>&1 | sed -E 's/.*go([0-9]+\.[0-9]+\.[0-9]+).*/\1/g') \
86-X github.com/opencord/voltha-lib-go/v7/pkg/version.os=$(go env GOHOSTOS) \
87-X github.com/opencord/voltha-lib-go/v7/pkg/version.arch=$(go env GOHOSTARCH) \
88-X github.com/opencord/voltha-lib-go/v7/pkg/version.buildTime=$org_label_schema_build_date" \
David K. Bainbridge41835142021-04-01 17:26:12 +000089.
90
91WORKDIR /app
Matt Jeanneret85ab5082019-04-01 11:29:20 -040092
khenaidoocfee5f42018-07-19 22:47:38 -040093# -------------
94# Image creation stage
David K. Bainbridge41835142021-04-01 17:26:12 +000095FROM --platform=linux/amd64 gcr.io/distroless/static:nonroot as prod
khenaidoocfee5f42018-07-19 22:47:38 -040096
97# Set the working directory
98WORKDIR /app
99
100# Copy required files
David K. Bainbridge41835142021-04-01 17:26:12 +0000101COPY --from=dev /app/rw_core /app/rw_core
khenaidoocfee5f42018-07-19 22:47:38 -0400102
Matt Jeanneret2e3051a2019-05-11 15:01:46 -0400103# Label image
104ARG org_label_schema_version=unknown
105ARG org_label_schema_vcs_url=unknown
106ARG org_label_schema_vcs_ref=unknown
107ARG org_label_schema_build_date=unknown
108ARG org_opencord_vcs_commit_date=unknown
Kent Hagermanf4a3aab2019-05-22 14:42:34 -0400109ARG org_opencord_vcs_dirty=unknown
Matt Jeanneret2e3051a2019-05-11 15:01:46 -0400110
David K. Bainbridge41835142021-04-01 17:26:12 +0000111LABEL \
112org.label-schema.schema-version=1.0 \
113org.label-schema.name=voltha-rw-core \
114org.label-schema.version=$org_label_schema_version \
115org.label-schema.vcs-url=$org_label_schema_vcs_url \
116org.label-schema.vcs-ref=$org_label_schema_vcs_ref \
117org.label-schema.build-date=$org_label_schema_build_date \
118org.opencord.vcs-commit-date=$org_opencord_vcs_commit_date \
119org.opencord.vcs-dirty=$org_opencord_vcs_dirty
120
121USER nonroot:nonroot