blob: f7147dea67ab68b8fd24b89881cf7e8152b5f2f3 [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
Akash Reddy Kankanala929cc002025-04-08 15:05:21 +053033FROM golang:1.23.1-alpine3.20 AS dev
Joey Armstrong811e9542022-12-25 21:45:27 -050034
Matt Jeanneret2e3051a2019-05-11 15:01:46 -040035# Install required packages
Joey Armstrong811e9542022-12-25 21:45:27 -050036
Akash Reddy Kankanala929cc002025-04-08 15:05:21 +053037RUN apk --update update && \
38 apk --update add --no-cache build-base=0.5-r3
Matt Jeanneret2e3051a2019-05-11 15:01:46 -040039
girishk5259f8e2019-10-10 18:44:44 +000040# Use Standard go build directory structure
41WORKDIR /go/src
khenaidooffe076b2019-01-15 16:08:08 -050042
Matt Jeanneret2e3051a2019-05-11 15:01:46 -040043# Copy common files.
sbarbari17d7e222019-11-05 10:02:29 -050044COPY db ./db
Matt Jeanneret2e3051a2019-05-11 15:01:46 -040045COPY vendor ./vendor
46
Joey Armstrong393daca2023-07-06 08:47:54 -040047# -----------------------------------------------------------------------
48# Chicken-n-egg problem: See Dockerfile.rw_core
49# required by testing (-coverprofile fails w/o this)
50# test output, does not exist during build
51# -----------------------------------------------------------------------
52# [TODO] Create two distinct docker files to break the artifical
53# dependency loop
54# -----------------------------------------------------------------------
Joey Armstrong811e9542022-12-25 21:45:27 -050055COPY tests/results/go-test-coverage.out ./tests/results/go-test-coverage.out
56
khenaidoocfee5f42018-07-19 22:47:38 -040057# Copy files
Matt Jeanneret85ab5082019-04-01 11:29:20 -040058COPY rw_core ./rw_core
girishk5259f8e2019-10-10 18:44:44 +000059COPY go.mod ./
60COPY go.sum ./
khenaidooffe076b2019-01-15 16:08:08 -050061
Kent Hagermanc64df642020-04-07 10:26:41 -040062ARG EXTRA_GO_BUILD_TAGS=""
63
Andrea Campanella8d4f3e32021-04-13 10:02:03 +020064ARG CGO_PARAMETER="CGO_ENABLED=0"
65
Matt Jeanneret877b5c22019-07-03 11:09:50 -040066ARG org_label_schema_version=unknown
67ARG org_label_schema_vcs_url=unknown
68ARG org_label_schema_vcs_ref=unknown
69ARG org_label_schema_build_date=unknown
70ARG org_opencord_vcs_commit_date=unknown
71ARG org_opencord_vcs_dirty=unknown
72
Matt Jeanneret85ab5082019-04-01 11:29:20 -040073# Build
girishk5259f8e2019-10-10 18:44:44 +000074WORKDIR /go/src/rw_core
David K. Bainbridge41835142021-04-01 17:26:12 +000075SHELL ["/bin/ash", "-o", "pipefail", "-c"]
76RUN \
Andrea Campanella8d4f3e32021-04-13 10:02:03 +020077export ${CGO_PARAMETER?} && go build $EXTRA_GO_BUILD_TAGS -mod=vendor -o /app/rw_core \
David K. Bainbridge41835142021-04-01 17:26:12 +000078-ldflags \
khenaidood948f772021-08-11 17:49:24 -040079"-X github.com/opencord/voltha-lib-go/v7/pkg/version.version=$org_label_schema_version \
80-X github.com/opencord/voltha-lib-go/v7/pkg/version.vcsRef=$org_label_schema_vcs_ref \
81-X github.com/opencord/voltha-lib-go/v7/pkg/version.vcsDirty=$org_opencord_vcs_dirty \
82-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') \
83-X github.com/opencord/voltha-lib-go/v7/pkg/version.os=$(go env GOHOSTOS) \
84-X github.com/opencord/voltha-lib-go/v7/pkg/version.arch=$(go env GOHOSTARCH) \
85-X github.com/opencord/voltha-lib-go/v7/pkg/version.buildTime=$org_label_schema_build_date" \
David K. Bainbridge41835142021-04-01 17:26:12 +000086.
87
88WORKDIR /app
Matt Jeanneret85ab5082019-04-01 11:29:20 -040089
khenaidoocfee5f42018-07-19 22:47:38 -040090# -------------
91# Image creation stage
Akash Reddy Kankanala929cc002025-04-08 15:05:21 +053092FROM gcr.io/distroless/static:nonroot as prod
khenaidoocfee5f42018-07-19 22:47:38 -040093
94# Set the working directory
95WORKDIR /app
96
97# Copy required files
David K. Bainbridge41835142021-04-01 17:26:12 +000098COPY --from=dev /app/rw_core /app/rw_core
khenaidoocfee5f42018-07-19 22:47:38 -040099
Matt Jeanneret2e3051a2019-05-11 15:01:46 -0400100# Label image
101ARG org_label_schema_version=unknown
102ARG org_label_schema_vcs_url=unknown
103ARG org_label_schema_vcs_ref=unknown
104ARG org_label_schema_build_date=unknown
105ARG org_opencord_vcs_commit_date=unknown
Kent Hagermanf4a3aab2019-05-22 14:42:34 -0400106ARG org_opencord_vcs_dirty=unknown
Matt Jeanneret2e3051a2019-05-11 15:01:46 -0400107
David K. Bainbridge41835142021-04-01 17:26:12 +0000108LABEL \
109org.label-schema.schema-version=1.0 \
110org.label-schema.name=voltha-rw-core \
111org.label-schema.version=$org_label_schema_version \
112org.label-schema.vcs-url=$org_label_schema_vcs_url \
113org.label-schema.vcs-ref=$org_label_schema_vcs_ref \
114org.label-schema.build-date=$org_label_schema_build_date \
115org.opencord.vcs-commit-date=$org_opencord_vcs_commit_date \
116org.opencord.vcs-dirty=$org_opencord_vcs_dirty
117
118USER nonroot:nonroot