-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
137 lines (114 loc) · 5.95 KB
/
Copy pathDockerfile
File metadata and controls
137 lines (114 loc) · 5.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# renovate: datasource=docker depName=eclipse-temurin allowedVersions=<18.0.0
ARG JDK17_VERSION=17.0.20_8-jdk
FROM eclipse-temurin:$JDK17_VERSION as jdk17
FROM eclipse-temurin:21.0.12_8-jdk as jdk21
FROM bats/bats:1.14.0 as bats-cli
FROM eclipse-temurin:25.0.4_7-jdk as jdk25
FROM ghcr.io/helmfile/helmfile:v1.7.4 as helmfile
FROM gitlab/glab:v1.114.0 as glab-cli
FROM jnorwood/helm-docs:v1.14.2 as helm-docs
FROM cloudtooling/dev-buildbox-base:0.1.47
ARG BUILD_DATE
ARG IMAGE_VERSION
LABEL org.opencontainers.image.authors='Martin Reinhardt (martin@m13t.de)' \
org.opencontainers.image.created=$BUILD_DATE \
org.opencontainers.image.version=$IMAGE_VERSION \
org.opencontainers.image.url='https://github.com/CloudTooling/dev-buildbox' \
org.opencontainers.image.documentation='https://github.com/CloudTooling/dev-buildbox' \
org.opencontainers.image.source='https://github.com/CloudTooling/dev-buildbox.git' \
org.opencontainers.image.licenses='MIT'
ENV BUILD_DATE=$BUILD_DATE
ENV IMAGE_VERSION=$IMAGE_VERSION
ENV PIP_BREAK_SYSTEM_PACKAGES="1"
ENV JAVA_17_HOME="/opt/java/openjdk17"
ENV JAVA_21_HOME="/opt/java/openjdk21"
ENV JAVA_25_HOME="/opt/java/openjdk25"
ENV JAVA_HOME="$JAVA_17_HOME"
# renovate: datasource=maven depName=org.owasp:dependency-check-maven versioning=maven
ARG MAVEN_OWASP_DEPENDENCY_CHECK_PLUGIN_VERSION="13.0.0"
# renovate: datasource=github-tags depName=google/go-containerregistry extractVersion=^v(?<version>.*)$
ARG GCR_TOOLS_VERSION="0.21.9"
# renovate: datasource=github-tags depName=kubernetes/kubernetes extractVersion=^v(?<version>.*)$
ARG KUBECTL_VERSION="1.36.4"
# renovate: datasource=docker depName=node
ARG NODE_MAJOR_VERSION="24.19.0"
# renovate: datasource=github-tags depName=nvm-sh/nvm
ARG NVM_VERSION="0.40.7"
# renovate: datasource=github-tags depName=orhun/git-cliff
ARG GIT_CLIFF_VERSION="2.13.1"
# Add JDK 17
RUN mkdir -p $JAVA_17_HOME
COPY --from=jdk17 /opt/java/openjdk $JAVA_17_HOME
# Add JDK 21
RUN mkdir -p $JAVA_21_HOME
COPY --from=jdk21 /opt/java/openjdk $JAVA_21_HOME
# Add JDK 25
RUN mkdir -p $JAVA_25_HOME
COPY --from=jdk25 /opt/java/openjdk $JAVA_25_HOME
# Create a script file sourced by both interactive and non-interactive bash shells
ENV BASH_ENV=/root/.bash_env
RUN touch "${BASH_ENV}"
RUN echo '. "${BASH_ENV}"' >> ~/.bashrc
# Base tools
RUN apt-get update -y &&\
apt-get install -y wget zip ruby-full git dos2unix curl maven && gem install bundler-audit &&\
# Install Go Containerregistry Tool, e.g. cran
curl -sL "https://github.com/google/go-containerregistry/releases/download/v${GCR_TOOLS_VERSION}/go-containerregistry_Linux_x86_64.tar.gz" > go-containerregistry.tar.gz &&\
tar -zxvf go-containerregistry.tar.gz -C /usr/local/bin/ crane && chmod +x /usr/local/bin/crane && rm go-containerregistry.tar.gz &&\
# kubectl
curl -LO "https://dl.k8s.io/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl" && mv kubectl /usr/local/bin/kubectl && chmod +x /usr/local/bin/kubectl &&\
# helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-4 | bash &&\
helm plugin install https://github.com/databus23/helm-diff --verify=false &&\
helm plugin install https://github.com/jkroepke/helm-secrets --verify=false &&\
helm plugin install https://github.com/hypnoglow/helm-s3 --verify=false &&\
helm plugin install https://github.com/aslafy-z/helm-git --verify=false &&\
helm plugin install https://github.com/helm-unittest/helm-unittest.git --verify=false &&\
# Adding Maven
apt install -y maven &&\
# install ansible
python3 -m pip install ansible molecule docker &&\
# Ansible documentation tooling
python3 -m pip install ansible-docsmith ansible-argument-spec-generator &&\
# git cliff for changelog generation
curl -LO "https://github.com/orhun/git-cliff/releases/download/v${GIT_CLIFF_VERSION}/git-cliff-${GIT_CLIFF_VERSION}-x86_64-unknown-linux-gnu.tar.gz" &&\
tar -zxvf "git-cliff-${GIT_CLIFF_VERSION}-x86_64-unknown-linux-gnu.tar.gz" -C /usr/local/bin/ --strip-components=1 "git-cliff-${GIT_CLIFF_VERSION}/git-cliff" &&\
rm "git-cliff-${GIT_CLIFF_VERSION}-x86_64-unknown-linux-gnu.tar.gz" &&\
# clean up to slim image
apt-get clean autoclean && apt-get autoremove --yes && rm -rf /var/lib/{apt,dpkg,cache,log}/
# Adding doc generation tools
COPY --from=helm-docs /usr/bin/helm-docs /usr/local/bin/helm-docs
RUN apt-get update -y &&\
apt-get install -y pandoc &&\
# clean up to slim image
apt-get clean autoclean && apt-get autoremove --yes && rm -rf /var/lib/{apt,dpkg,cache,log}/
# Add NodeJS & nvm
RUN cd ~ &&\
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v${NVM_VERSION}/install.sh | PROFILE="${BASH_ENV}" bash &&\
export NVM_DIR="$HOME/.nvm" && . "$NVM_DIR/nvm.sh" && echo node > .nvmrc && nvm install ${NODE_MAJOR_VERSION} && \
# install changelog cli, yarn & json lint
npm install -g conventional-changelog-cli jsonlint yarn &&\
# nx cli
npm add --global nx@latest &&\
# symlink node/npm/npx and all globally installed CLIs onto PATH so they work
# regardless of shell (sh/bash, interactive/non-interactive) or entrypoint,
# e.g. when GitLab CI overrides the image ENTRYPOINT to run job scripts
ln -sf "$NVM_DIR/versions/node/$(nvm version ${NODE_MAJOR_VERSION})"/bin/* /usr/local/bin/ &&\
# clean up to slim image
apt-get clean autoclean && apt-get autoremove --yes && rm -rf /var/lib/{apt,dpkg,cache,log}/
# Add custom entrypoint
ADD --chown=root:root src/docker/entrypoint.sh /usr/local/bin/
# Copy Glab CLI
COPY --from=glab-cli /usr/bin/glab /usr/local/bin/glab
# Copy Helmfile CLI
COPY --from=helmfile /usr/local/bin/helmfile /usr/local/bin/helmfile
# Copy bats
COPY --from=bats-cli /usr/local/bin/bats /usr/local/bin/bats
COPY --from=bats-cli /opt/bats/libexec/bats-core /usr/local/libexec/bats-core
COPY --from=bats-cli /opt/bats/lib/bats-core /usr/local/lib/bats-core
# update
RUN apt-get update -y &&\
# upgrade
apt-get upgrade -y && \
# clean up to slim image
apt-get clean autoclean && apt-get autoremove --yes && rm -rf /var/lib/{apt,dpkg,cache,log}/