Skip to content

Commit ff9bc8d

Browse files
committed
tests: Script container build
1 parent 21d3fb5 commit ff9bc8d

File tree

2 files changed

+136
-95
lines changed

2 files changed

+136
-95
lines changed

tests/Dockerfile

Lines changed: 8 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -2,111 +2,24 @@
22
FROM ubuntu:24.04 AS unit
33
LABEL org.opencontainers.image.source=https://github.com/elastisys/compliantkubernetes-apps
44

5-
ARG DEBIAN_FRONTEND="noninteractive"
65
ENV LANGUAGE="en"
76
ENV LANG="en_US.utf8"
8-
ARG TZ="Etc/UTC"
97

10-
RUN apt-get update && \
11-
apt-get upgrade -y && \
12-
apt-get install -y apache2-utils bats curl dnsutils gettext-base git gpg iputils-ping jq locales make net-tools pwgen s3cmd ssh unzip && \
13-
apt-get clean && \
14-
rm -rf /var/lib/apt/lists/* && \
15-
localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
16-
17-
ARG GOMPLATE_VERSION="3.11.7"
18-
RUN curl -LOs "https://github.com/hairyhenderson/gomplate/releases/download/v${GOMPLATE_VERSION}/gomplate_linux-amd64" && \
19-
install -Tm 755 gomplate_linux-amd64 /usr/local/bin/gomplate && \
20-
rm gomplate_linux-amd64
21-
22-
ARG HELM_VERSION="3.13.3"
238
ENV HELM_DATA_HOME="/usr/local/share/helm"
24-
RUN curl -LOs "https://get.helm.sh/helm-v${HELM_VERSION}-linux-amd64.tar.gz" && \
25-
tar -zxvf "helm-v${HELM_VERSION}-linux-amd64.tar.gz" linux-amd64/helm && \
26-
install -Tm 755 linux-amd64/helm /usr/local/bin/helm && \
27-
rm -rf linux-amd64 "helm-v${HELM_VERSION}-linux-amd64.tar.gz"
28-
29-
ARG HELM_DIFF_VERSION="3.9.4"
30-
RUN helm plugin install https://github.com/databus23/helm-diff --version "v${HELM_DIFF_VERSION}" > /dev/null
31-
32-
ARG HELM_SECRETS_VERSION="4.5.1"
33-
RUN helm plugin install https://github.com/jkroepke/helm-secrets --version "v${HELM_SECRETS_VERSION}" > /dev/null
34-
35-
ARG HELMFILE_VERSION="0.162.0"
36-
RUN curl -LOs "https://github.com/helmfile/helmfile/releases/download/v${HELMFILE_VERSION}/helmfile_${HELMFILE_VERSION}_linux_amd64.tar.gz" && \
37-
tar -zxvf "helmfile_${HELMFILE_VERSION}_linux_amd64.tar.gz" helmfile && \
38-
install -Tm 755 helmfile /usr/local/bin/helmfile && \
39-
rm helmfile "helmfile_${HELMFILE_VERSION}_linux_amd64.tar.gz"
40-
41-
ARG KUBECTL_VERSION="1.29.7"
42-
RUN curl -LOs "https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl" && \
43-
install -Tm 755 kubectl /usr/local/bin/kubectl && \
44-
rm kubectl
45-
46-
ARG KUBECONFORM_VERSION="0.6.3"
47-
RUN curl -LOs "https://github.com/yannh/kubeconform/releases/download/v${KUBECONFORM_VERSION}/kubeconform-linux-amd64.tar.gz" && \
48-
tar -zxvf kubeconform-linux-amd64.tar.gz kubeconform && \
49-
install -Tm 755 kubeconform /usr/local/bin/kubeconform && \
50-
rm kubeconform-linux-amd64.tar.gz kubeconform
51-
52-
ARG KUBELOGIN_VERSION="1.28.0"
53-
RUN curl -LOs "https://github.com/int128/kubelogin/releases/download/v${KUBELOGIN_VERSION}/kubelogin_linux_amd64.zip" && \
54-
unzip kubelogin_linux_amd64.zip && \
55-
install -Tm 755 kubelogin /usr/local/bin/kubectl-oidc_login && \
56-
rm kubelogin kubelogin_linux_amd64.zip LICENSE README.md
57-
58-
ARG OPA_VERSION="v0.57.1"
59-
RUN curl -LOs "https://github.com/open-policy-agent/opa/releases/download/${OPA_VERSION}/opa_linux_amd64" && \
60-
install -Tm 755 opa_linux_amd64 /usr/local/bin/opa && \
61-
rm opa_linux_amd64
62-
63-
ARG SOPS_VERSION="3.8.1"
64-
RUN curl -LOs "https://github.com/getsops/sops/releases/download/v${SOPS_VERSION}/sops-v${SOPS_VERSION}.linux.amd64" && \
65-
install -Tm 755 "sops-v${SOPS_VERSION}.linux.amd64" /usr/local/bin/sops && \
66-
rm "sops-v${SOPS_VERSION}.linux.amd64"
67-
68-
ARG YAJSV_VERSION="1.4.1"
69-
RUN curl -LOs "https://github.com/neilpa/yajsv/releases/download/v${YAJSV_VERSION}/yajsv.linux.amd64" && \
70-
install -Tm 755 yajsv.linux.amd64 /usr/local/bin/yajsv && \
71-
rm yajsv.linux.amd64
9+
ENV DOCS_PATH="/usr/local/share/docs"
10+
ENV NODE_PATH="/usr/local/lib/node_modules"
7211

73-
ARG YQ_VERSION="4.42.1"
74-
RUN curl -LOs "https://github.com/mikefarah/yq/releases/download/v${YQ_VERSION}/yq_linux_amd64" && \
75-
install -Tm 755 yq_linux_amd64 /usr/local/bin/yq4 && \
76-
rm yq_linux_amd64
12+
COPY tests/common/init.sh init.sh
7713

78-
# Currently all from main as most do not have current releases
79-
RUN git clone --depth 1 https://github.com/bats-core/bats-assert.git /usr/local/lib/bats/assert
80-
RUN git clone --depth 1 https://github.com/bats-core/bats-detik.git /usr/local/lib/bats/detik
81-
RUN git clone --depth 1 https://github.com/bats-core/bats-file.git /usr/local/lib/bats/file
82-
RUN git clone --depth 1 https://github.com/grayhemp/bats-mock.git /usr/local/lib/bats/mock
83-
RUN git clone --depth 1 https://github.com/bats-core/bats-support.git /usr/local/lib/bats/support
14+
RUN /init.sh unit-packages
15+
RUN /init.sh unit-binaries
8416

8517
# Container to run integration and end-to-end tests
8618
FROM unit AS main
8719

88-
RUN apt-get update && \
89-
apt-get install -y buildah docker.io libasound2t64 libatk1.0-0 libatk-bridge2.0-0 libcanberra-gtk-module libcanberra-gtk3-module libcups2 libgbm-dev libgbm1 libglib2.0-0 libgtk2.0-0 libgtk2.0-0t64 libgtk-3-0 libgtk-3-0t64 libnotify-dev libnss3 libxss1 libxtst6 npm podman-remote skopeo xauth xvfb && \
90-
apt-get clean && \
91-
rm -rf /var/lib/apt/lists/* && \
92-
ln -s /usr/bin/podman-remote /usr/bin/podman
93-
94-
ARG CYPRESS_VERSION="13.14.1"
9520
ENV CYPRESS_CACHE_FOLDER="/usr/local/lib/cypress"
96-
ENV NODE_PATH="/usr/local/lib/node_modules"
97-
RUN npm install --global "cypress@${CYPRESS_VERSION}"
98-
RUN chmod --recursive a+w "${CYPRESS_CACHE_FOLDER}"
9921

100-
ARG KIND_VERSION="0.23.0"
101-
RUN curl -LOs "https://github.com/kubernetes-sigs/kind/releases/download/v${KIND_VERSION}/kind-linux-amd64" && \
102-
install -Tm 755 kind-linux-amd64 /usr/local/bin/kind && \
103-
rm kind-linux-amd64
22+
COPY tests/common/init.sh init.sh
10423

105-
ARG VELERO_VERSION="1.13.0"
106-
RUN curl -LOs "https://github.com/vmware-tanzu/velero/releases/download/v${VELERO_VERSION}/velero-v${VELERO_VERSION}-linux-amd64.tar.gz" && \
107-
tar -zxvf "velero-v${VELERO_VERSION}-linux-amd64.tar.gz" "velero-v${VELERO_VERSION}-linux-amd64" && \
108-
install -Tm 755 "velero-v${VELERO_VERSION}-linux-amd64/velero" /usr/local/bin/velero && \
109-
rm -r "velero-v${VELERO_VERSION}-linux-amd64.tar.gz" "velero-v${VELERO_VERSION}-linux-amd64"
110-
111-
ENV DOCS_PATH="/usr/local/share/docs"
112-
RUN git clone --depth 1 https://github.com/elastisys/compliantkubernetes.git "${DOCS_PATH}"
24+
RUN /init.sh main-packages
25+
RUN /init.sh main-binaries

tests/common/init.sh

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
#!/usr/bin/env bash
2+
3+
set -exuo pipefail
4+
5+
export DEBIAN_FRONTEND="noninteractive"
6+
export TZ="Etc/UTC"
7+
8+
declare -a UNIT_REQUIREMENTS=(apache2-utils bats curl dnsutils gettext-base git gpg iputils-ping jq locales make net-tools npm pwgen s3cmd ssh unzip)
9+
declare -a MAIN_REQUIREMENTS=(buildah docker.io libasound2t64 libatk1.0-0 libatk-bridge2.0-0 libcanberra-gtk-module libcanberra-gtk3-module libcups2 libgbm-dev libgbm1 libglib2.0-0 libgtk2.0-0 libgtk2.0-0t64 libgtk-3-0 libgtk-3-0t64 libnotify-dev libnss3 libxss1 libxtst6 podman-remote skopeo xauth xvfb)
10+
11+
export GOMPLATE_VERSION="3.11.7"
12+
export HELM_VERSION="3.13.3"
13+
export HELM_DIFF_VERSION="3.9.4"
14+
export HELM_SECRETS_VERSION="4.5.1"
15+
export HELMFILE_VERSION="0.162.0"
16+
export JSONSCHEMA2MD_VERSION="8.0.2"
17+
export KUBECTL_VERSION="1.29.7"
18+
export KUBECONFORM_VERSION="0.6.3"
19+
export KUBELOGIN_VERSION="1.28.0"
20+
export OPA_VERSION="v0.57.1"
21+
export SOPS_VERSION="3.8.1"
22+
export YAJSV_VERSION="1.4.1"
23+
export YQ_VERSION="4.42.1"
24+
25+
export CYPRESS_VERSION="13.14.1"
26+
export KIND_VERSION="0.23.0"
27+
export VELERO_VERSION="1.13.0"
28+
29+
# <packages...>
30+
install-from-apt() {
31+
apt-get update
32+
apt-get upgrade -y
33+
apt-get install -y "${@}"
34+
apt-get clean
35+
rm -rf /var/lib/apt/lists/*
36+
}
37+
38+
# <target> <source>
39+
install-from-bin() {
40+
local target="${1}" source="${2}"
41+
42+
curl -LOs "${source}"
43+
install -Tm 755 "${source##*"/"}" "${target}"
44+
rm -rf "${source##*"/"}"
45+
}
46+
47+
# <target> <source> <intermediate>
48+
install-from-tar() {
49+
local target="${1}" source="${2}" intermediate="${3}"
50+
51+
curl -LOs "${source}"
52+
tar -zxvf "${source##*"/"}" "${intermediate}"
53+
install -Tm 755 "${intermediate}" "${target}"
54+
rm -rf "${source##*"/"}" "${intermediate%%"/"*}"
55+
}
56+
57+
# <target> <source> <intermediate>
58+
install-from-zip() {
59+
local target="${1}" source="${2}" intermediate="${3}"
60+
61+
curl -LOs "${source}"
62+
unzip "${source##*"/"}" "${intermediate}"
63+
install -Tm 755 "${intermediate}" "${target}"
64+
rm -rf "${source##*"/"}" "${intermediate%%"/"*}"
65+
}
66+
67+
unit-binaries() {
68+
install-from-bin /usr/local/bin/gomplate "https://github.com/hairyhenderson/gomplate/releases/download/v${GOMPLATE_VERSION}/gomplate_linux-amd64"
69+
install-from-tar /usr/local/bin/helm "https://get.helm.sh/helm-v${HELM_VERSION}-linux-amd64.tar.gz" linux-amd64/helm
70+
helm plugin install https://github.com/databus23/helm-diff --version "v${HELM_DIFF_VERSION}" >/dev/null
71+
helm plugin install https://github.com/jkroepke/helm-secrets --version "v${HELM_SECRETS_VERSION}" >/dev/null
72+
install-from-tar /usr/local/bin/helmfile "https://github.com/helmfile/helmfile/releases/download/v${HELMFILE_VERSION}/helmfile_${HELMFILE_VERSION}_linux_amd64.tar.gz" helmfile
73+
install-from-bin /usr/local/bin/kubectl "https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl"
74+
install-from-tar /usr/local/bin/kubeconform "https://github.com/yannh/kubeconform/releases/download/v${KUBECONFORM_VERSION}/kubeconform-linux-amd64.tar.gz" kubeconform
75+
install-from-zip /usr/local/bin/kubectl-oidc_login "https://github.com/int128/kubelogin/releases/download/v${KUBELOGIN_VERSION}/kubelogin_linux_amd64.zip" kubelogin
76+
install-from-bin /usr/local/bin/opa "https://github.com/open-policy-agent/opa/releases/download/${OPA_VERSION}/opa_linux_amd64"
77+
install-from-bin /usr/local/bin/sops "https://github.com/getsops/sops/releases/download/v${SOPS_VERSION}/sops-v${SOPS_VERSION}.linux.amd64"
78+
install-from-bin /usr/local/bin/yajsv "https://github.com/neilpa/yajsv/releases/download/v${YAJSV_VERSION}/yajsv.linux.amd64"
79+
install-from-bin /usr/local/bin/yq4 "https://github.com/mikefarah/yq/releases/download/v${YQ_VERSION}/yq_linux_amd64"
80+
81+
# Currently all from main as most do not have current releases
82+
git clone --depth 1 https://github.com/bats-core/bats-assert.git /usr/local/lib/bats/assert
83+
git clone --depth 1 https://github.com/bats-core/bats-detik.git /usr/local/lib/bats/detik
84+
git clone --depth 1 https://github.com/bats-core/bats-file.git /usr/local/lib/bats/file
85+
git clone --depth 1 https://github.com/grayhemp/bats-mock.git /usr/local/lib/bats/mock
86+
git clone --depth 1 https://github.com/bats-core/bats-support.git /usr/local/lib/bats/support
87+
88+
git clone --depth 1 https://github.com/elastisys/compliantkubernetes.git "${DOCS_PATH}"
89+
chmod --recursive a+w "${DOCS_PATH}"
90+
91+
npm install --global "@adobe/jsonschema2md@${JSONSCHEMA2MD_VERSION}"
92+
}
93+
94+
main-binaries() {
95+
npm install --global "cypress@${CYPRESS_VERSION}"
96+
chmod --recursive a+w "${CYPRESS_CACHE_FOLDER}"
97+
98+
install-from-bin /usr/local/bin/kind "https://github.com/kubernetes-sigs/kind/releases/download/v${KIND_VERSION}/kind-linux-amd64"
99+
install-from-tar /usr/local/bin/velero "https://github.com/vmware-tanzu/velero/releases/download/v${VELERO_VERSION}/velero-v${VELERO_VERSION}-linux-amd64.tar.gz" "velero-v${VELERO_VERSION}-linux-amd64/velero"
100+
}
101+
102+
# installer script for the tests container
103+
unit-packages() {
104+
install-from-apt "${UNIT_REQUIREMENTS[@]}"
105+
106+
localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
107+
}
108+
109+
main-packages() {
110+
install-from-apt "${MAIN_REQUIREMENTS[@]}"
111+
112+
localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
113+
ln -s /usr/bin/podman-remote /usr/bin/podman
114+
}
115+
116+
case "${1}" in
117+
unit-binaries | unit-packages | main-binaries | main-packages) "${1}" ;;
118+
*)
119+
echo "${0}: invalid arguments, usage:
120+
${0} <command>
121+
- unit-binaries - install all binaries used for the unit tests
122+
- unit-packages - install all packages used for the unit tests
123+
- main-binaries - install all binaries used for the integration, regression, and end-to-end tests
124+
- main-packages - install all packages used for the integration, regression, and end-to-end tests
125+
"
126+
exit 1
127+
;;
128+
esac

0 commit comments

Comments
 (0)