Skip to content

Commit e18e2fb

Browse files
committed
added local Dockerfile for heighliner builds
1 parent ac18e76 commit e18e2fb

1 file changed

Lines changed: 171 additions & 0 deletions

File tree

local.Dockerfile

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
ARG BASE_VERSION=1.24-alpine3.23
2+
FROM golang:${BASE_VERSION} AS init-env
3+
4+
RUN apk add --update --no-cache curl make git libc-dev bash gcc linux-headers eudev-dev ncurses-dev
5+
6+
ARG TARGETARCH
7+
ARG BUILDARCH
8+
ARG GITHUB_ORGANIZATION
9+
ARG REPO_HOST
10+
ARG GITHUB_REPO
11+
ARG WASMVM_VERSION
12+
13+
WORKDIR /go/src/${REPO_HOST}/${GITHUB_ORGANIZATION}/${GITHUB_REPO}
14+
15+
# Download CosmWasm libwasmvm if found
16+
RUN set -eux; \
17+
export ARCH=$(uname -m); \
18+
if [ ! -z "${WASMVM_VERSION}" ]; then\
19+
WASMVM_REPO=$(echo $WASMVM_VERSION | awk '{print $1}');\
20+
WASMVM_VERS=$(echo $WASMVM_VERSION | awk '{print $2}');\
21+
wget -O /lib/libwasmvm_muslc.a https://${WASMVM_REPO}/releases/download/${WASMVM_VERS}/libwasmvm_muslc.$(uname -m).a;\
22+
ln /lib/libwasmvm_muslc.a /lib/libwasmvm_muslc.$(uname -m).a;\
23+
fi;
24+
25+
ARG BUILD_DIR
26+
27+
ADD ${BUILD_DIR}/go.mod ${BUILD_DIR}/go.sum ./
28+
29+
ARG CLONE_KEY
30+
31+
RUN if [ ! -z "${CLONE_KEY}" ]; then\
32+
mkdir -p ~/.ssh;\
33+
echo "${CLONE_KEY}" | base64 -d > ~/.ssh/id_ed25519;\
34+
chmod 600 ~/.ssh/id_ed25519;\
35+
apk add openssh;\
36+
git config --global --add url."ssh://git@github.com/".insteadOf "https://github.com/";\
37+
ssh-keyscan github.com >> ~/.ssh/known_hosts;\
38+
fi
39+
40+
ARG VENDOR
41+
42+
# Download go mod dependencies
43+
RUN set -eux; \
44+
if [[ "${BUILD_DIR}" == "." && "${VENDOR}" == "false" ]]; then\
45+
go mod download;\
46+
fi;
47+
48+
# Use minimal busybox from infra-toolkit image
49+
FROM ghcr.io/strangelove-ventures/infra-toolkit:v0.1.12 AS infra-toolkit
50+
RUN addgroup --gid 1025 -S heighliner && adduser --uid 1025 -S heighliner -G heighliner
51+
52+
# Use alpine to source CA certificates
53+
FROM alpine:3 as alpine-3
54+
55+
# Build binary from local source
56+
FROM init-env AS build-env
57+
58+
ARG BUILD_TARGET
59+
ARG BUILD_ENV
60+
ARG BUILD_TAGS
61+
ARG PRE_BUILD
62+
ARG BUILD_DIR
63+
64+
ADD . .
65+
66+
RUN set -eux; \
67+
export CGO_ENABLED=1 LDFLAGS='-linkmode external -extldflags "-static"'; \
68+
if [ ! -z "$PRE_BUILD" ]; then sh -c "${PRE_BUILD}"; fi; \
69+
if [ ! -z "$BUILD_TARGET" ]; then \
70+
if [ ! -z "$BUILD_ENV" ]; then export ${BUILD_ENV}; fi; \
71+
if [ ! -z "$BUILD_TAGS" ]; then export "${BUILD_TAGS}"; fi; \
72+
if [ ! -z "$BUILD_DIR" ]; then cd "${BUILD_DIR}"; fi; \
73+
sh -c "${BUILD_TARGET}"; \
74+
fi
75+
76+
# Collect binaries
77+
RUN mkdir /root/bin
78+
ARG RACE
79+
ARG BINARIES
80+
ENV BINARIES_ENV ${BINARIES}
81+
82+
RUN bash -c 'set -eux;\
83+
BINARIES_ARR=();\
84+
IFS=, read -ra BINARIES_ARR <<< "$BINARIES_ENV";\
85+
for BINARY in "${BINARIES_ARR[@]}"; do\
86+
BINSPLIT=();\
87+
IFS=: read -ra BINSPLIT <<< "$BINARY";\
88+
BINPATH=${BINSPLIT[1]+"${BINSPLIT[1]}"};\
89+
BIN="$(eval "echo "${BINSPLIT[0]+"${BINSPLIT[0]}"}"")";\
90+
if [ ! -z "$RACE" ] && GOVERSIONOUT=$(go version -m $BIN); then\
91+
if echo $GOVERSIONOUT | grep build | grep "-race=true"; then\
92+
echo "Race detection is enabled in binary";\
93+
else\
94+
echo "Race detection not enabled in binary!";\
95+
exit 1;\
96+
fi;\
97+
fi;\
98+
if [ ! -z "$BINPATH" ]; then\
99+
if [[ $BINPATH == *"/"* ]]; then\
100+
mkdir -p "$(dirname "${BINPATH}")";\
101+
cp "$BIN" "${BINPATH}";\
102+
else\
103+
cp "$BIN" "/root/bin/${BINPATH}";\
104+
fi;\
105+
else\
106+
cp "$BIN" /root/bin/;\
107+
fi;\
108+
done'
109+
110+
# Libraries
111+
RUN mkdir -p /root/lib
112+
ARG LIBRARIES
113+
ENV LIBRARIES_ENV ${LIBRARIES}
114+
115+
RUN bash -c 'set -eux;\
116+
LIBRARIES_ARR=($LIBRARIES_ENV); \
117+
for LIBRARY in "${LIBRARIES_ARR[@]}"; do cp $LIBRARY /root/lib/; done'
118+
119+
# Directories
120+
RUN mkdir -p /root/dir_abs && touch /root/dir_abs.list
121+
ARG DIRECTORIES
122+
ENV DIRECTORIES_ENV ${DIRECTORIES}
123+
124+
RUN bash -c 'set -eux;\
125+
DIRECTORIES_ARR=($DIRECTORIES_ENV);\
126+
i=0;\
127+
for DIRECTORY in "${DIRECTORIES_ARR[@]}"; do \
128+
cp -R $DIRECTORY /root/dir_abs/$i;\
129+
echo $DIRECTORY >> /root/dir_abs.list;\
130+
((i = i + 1));\
131+
done'
132+
133+
# Final image
134+
FROM scratch
135+
136+
LABEL org.opencontainers.image.source="https://github.com/strangelove-ventures/heighliner"
137+
138+
WORKDIR /bin
139+
140+
COPY --from=infra-toolkit /busybox/busybox /bin/sh
141+
COPY --from=infra-toolkit /busybox/busybox /bin/ln
142+
COPY --from=infra-toolkit /usr/local/bin/jq /bin/
143+
144+
RUN for b in \
145+
cat date df dirname du env grep head less ls md5sum mkdir mv pwd rm sed \
146+
sha1sum sha256sum sha3sum sha512sum sleep stty tail tar tee tr vi watch which \
147+
; do ln ln $b; done; \
148+
rm -rf sh; \
149+
ln ln sh;
150+
151+
COPY --from=build-env /root/dir_abs /root/dir_abs
152+
COPY --from=build-env /root/dir_abs.list /root/dir_abs.list
153+
154+
RUN sh -c 'i=0; while read DIR; do\
155+
PLACEDIR="$(dirname "$DIR")";\
156+
mkdir -p "$PLACEDIR";\
157+
mv /root/dir_abs/$i $DIR;\
158+
i=$((i+1));\
159+
done < /root/dir_abs.list'
160+
161+
COPY --from=alpine-3 /etc/ssl/cert.pem /etc/ssl/cert.pem
162+
163+
COPY --from=infra-toolkit /etc/passwd /etc/passwd
164+
COPY --from=infra-toolkit --chown=1025:1025 /home/heighliner /home/heighliner
165+
COPY --from=infra-toolkit --chown=1025:1025 /tmp /tmp
166+
167+
COPY --from=build-env /root/bin /bin
168+
COPY --from=build-env /root/lib /lib
169+
170+
WORKDIR /home/heighliner
171+
USER heighliner

0 commit comments

Comments
 (0)