@@ -7,209 +7,89 @@ WORKDIR /bin_dir
7
7
8
8
RUN apk add --no-cache \
9
9
# Builder deps
10
+ bash=~5 \
10
11
curl=~8 && \
11
12
# Upgrade packages for be able get latest Checkov
12
13
python3 -m pip install --no-cache-dir --upgrade \
13
14
pip \
14
15
setuptools
15
16
17
+ COPY tools/install/ /install/
18
+
19
+ #
20
+ # Install required tools
21
+ #
16
22
ARG PRE_COMMIT_VERSION=${PRE_COMMIT_VERSION:-latest}
17
23
ARG TERRAFORM_VERSION=${TERRAFORM_VERSION:-latest}
18
24
19
- # Install pre-commit
20
- RUN if [ ${PRE_COMMIT_VERSION} = "latest" ]; \
21
- then pip3 install --no-cache-dir pre-commit; \
22
- else pip3 install --no-cache-dir pre-commit==${PRE_COMMIT_VERSION}; \
25
+ RUN touch /.env && \
26
+ if [ "$PRE_COMMIT_VERSION" = "false" ] || [ "$TERRAFORM_VERSION" = "false" ]; then \
27
+ echo "Vital software can't be skipped" && exit 1; \
23
28
fi
24
29
25
- # Install terraform because pre-commit needs it
26
- RUN if [ "${TERRAFORM_VERSION}" = "latest" ]; then \
27
- TERRAFORM_VERSION="$(curl -s https://api.github.com/repos/hashicorp/terraform/releases/latest | grep tag_name | grep -o -E -m 1 " [0-9.]+")" \
28
- ; fi && \
29
- curl -L "https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_${TARGETOS}_${TARGETARCH}.zip" > terraform.zip && \
30
- unzip terraform.zip terraform && rm terraform.zip
30
+
31
+ RUN /install/pre-commit.sh
32
+ RUN /install/terraform.sh
31
33
32
34
#
33
35
# Install tools
34
36
#
35
37
ARG CHECKOV_VERSION=${CHECKOV_VERSION:-false}
38
+ ARG HCLEDIT_VERSION=${HCLEDIT_VERSION:-false}
36
39
ARG INFRACOST_VERSION=${INFRACOST_VERSION:-false}
37
40
ARG TERRAFORM_DOCS_VERSION=${TERRAFORM_DOCS_VERSION:-false}
38
41
ARG TERRAGRUNT_VERSION=${TERRAGRUNT_VERSION:-false}
39
42
ARG TERRASCAN_VERSION=${TERRASCAN_VERSION:-false}
40
43
ARG TFLINT_VERSION=${TFLINT_VERSION:-false}
41
44
ARG TFSEC_VERSION=${TFSEC_VERSION:-false}
42
- ARG TRIVY_VERSION=${TRIVY_VERSION:-false}
43
45
ARG TFUPDATE_VERSION=${TFUPDATE_VERSION:-false}
44
- ARG HCLEDIT_VERSION =${HCLEDIT_VERSION :-false}
46
+ ARG TRIVY_VERSION =${TRIVY_VERSION :-false}
45
47
46
48
47
49
# Tricky thing to install all tools by set only one arg.
48
50
# In RUN command below used `. /.env` <- this is sourcing vars that
49
51
# specified in step below
50
52
ARG INSTALL_ALL=${INSTALL_ALL:-false}
51
53
RUN if [ "$INSTALL_ALL" != "false" ]; then \
52
- echo "export CHECKOV_VERSION=latest" >> /.env && \
53
- echo "export INFRACOST_VERSION=latest" >> /.env && \
54
- echo "export TERRAFORM_DOCS_VERSION=latest" >> /.env && \
55
- echo "export TERRAGRUNT_VERSION=latest" >> /.env && \
56
- echo "export TERRASCAN_VERSION=latest" >> /.env && \
57
- echo "export TFLINT_VERSION=latest" >> /.env && \
58
- echo "export TFSEC_VERSION=latest" >> /.env && \
59
- echo "export TRIVY_VERSION=latest" >> /.env && \
60
- echo "export TFUPDATE_VERSION=latest" >> /.env && \
61
- echo "export HCLEDIT_VERSION=latest" >> /.env \
62
- ; else \
63
- touch /.env \
54
+ echo "CHECKOV_VERSION=latest" >> /.env && \
55
+ echo "HCLEDIT_VERSION=latest" >> /.env && \
56
+ echo "INFRACOST_VERSION=latest" >> /.env && \
57
+ echo "TERRAFORM_DOCS_VERSION=latest" >> /.env && \
58
+ echo "TERRAGRUNT_VERSION=latest" >> /.env && \
59
+ echo "TERRASCAN_VERSION=latest" >> /.env && \
60
+ echo "TFLINT_VERSION=latest" >> /.env && \
61
+ echo "TFSEC_VERSION=latest" >> /.env && \
62
+ echo "TFUPDATE_VERSION=latest" >> /.env && \
63
+ echo "TRIVY_VERSION=latest" >> /.env \
64
64
; fi
65
65
66
-
67
- # Checkov
68
- RUN . /.env && \
69
- if [ "$CHECKOV_VERSION" != "false" ]; then \
70
- ( \
71
- # cargo, gcc, git, musl-dev, rust and CARGO envvar required for compilation of rustworkx@0.13.2, no longer required once checkov version depends on rustworkx >0.14.0
72
- # https://github.com/bridgecrewio/checkov/pull/6045
73
- # gcc libffi-dev musl-dev required for compilation of cffi, until it contains musl aarch64
74
- export CARGO_NET_GIT_FETCH_WITH_CLI=true && \
75
- apk add --no-cache cargo=~1 gcc=~12 git=~2 libffi-dev=~3 libgcc=~12 musl-dev=~1 rust=~1 ; \
76
- if [ "$CHECKOV_VERSION" = "latest" ]; \
77
- then pip3 install --no-cache-dir checkov || exit 1; \
78
- else pip3 install --no-cache-dir checkov==${CHECKOV_VERSION} || exit 1; \
79
- fi; \
80
- apk del cargo gcc git libffi-dev musl-dev rust \
81
- ) \
82
- ; fi
83
-
84
- # infracost
85
- RUN . /.env && \
86
- if [ "$INFRACOST_VERSION" != "false" ]; then \
87
- ( \
88
- INFRACOST_RELEASES="https://api.github.com/repos/infracost/infracost/releases" && \
89
- if [ "$INFRACOST_VERSION" = "latest" ]; \
90
- then curl -L "$(curl -s ${INFRACOST_RELEASES}/latest | grep -o -E -m 1 " https://.+?-${TARGETOS}-${TARGETARCH}.tar.gz")" > infracost.tgz; \
91
- else curl -L "$(curl -s ${INFRACOST_RELEASES} | grep -o -E " https://.+?v${INFRACOST_VERSION}/infracost-${TARGETOS}-${TARGETARCH}.tar.gz")" > infracost.tgz; \
92
- fi; \
93
- ) && tar -xzf infracost.tgz && rm infracost.tgz && mv infracost-${TARGETOS}-${TARGETARCH} infracost \
94
- ; fi
95
-
96
- # Terraform docs
97
- RUN . /.env && \
98
- if [ "$TERRAFORM_DOCS_VERSION" != "false" ]; then \
99
- ( \
100
- TERRAFORM_DOCS_RELEASES="https://api.github.com/repos/terraform-docs/terraform-docs/releases" && \
101
- if [ "$TERRAFORM_DOCS_VERSION" = "latest" ]; \
102
- then curl -L "$(curl -s ${TERRAFORM_DOCS_RELEASES}/latest | grep -o -E -m 1 " https://.+?-${TARGETOS}-${TARGETARCH}.tar.gz")" > terraform-docs.tgz; \
103
- else curl -L "$(curl -s ${TERRAFORM_DOCS_RELEASES} | grep -o -E " https://.+?v${TERRAFORM_DOCS_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz")" > terraform-docs.tgz; \
104
- fi; \
105
- ) && tar -xzf terraform-docs.tgz terraform-docs && rm terraform-docs.tgz && chmod +x terraform-docs \
106
- ; fi
107
-
108
- # Terragrunt
109
- RUN . /.env \
110
- && if [ "$TERRAGRUNT_VERSION" != "false" ]; then \
111
- ( \
112
- TERRAGRUNT_RELEASES="https://api.github.com/repos/gruntwork-io/terragrunt/releases" && \
113
- if [ "$TERRAGRUNT_VERSION" = "latest" ]; \
114
- then curl -L "$(curl -s ${TERRAGRUNT_RELEASES}/latest | grep -o -E -m 1 " https://.+?/terragrunt_${TARGETOS}_${TARGETARCH}")" > terragrunt; \
115
- else curl -L "$(curl -s ${TERRAGRUNT_RELEASES} | grep -o -E -m 1 " https://.+?v${TERRAGRUNT_VERSION}/terragrunt_${TARGETOS}_${TARGETARCH}")" > terragrunt; \
116
- fi; \
117
- ) && chmod +x terragrunt \
118
- ; fi
66
+ RUN /install/checkov.sh
67
+ RUN /install/hcledit.sh
68
+ RUN /install/infracost.sh
69
+ RUN /install/terraform-docs.sh
70
+ RUN /install/terragrunt.sh
71
+ RUN /install/terrascan.sh
72
+ RUN /install/tflint.sh
73
+ RUN /install/tfsec.sh
74
+ RUN /install/tfupdate.sh
75
+ RUN /install/trivy.sh
119
76
120
77
121
- # Terrascan
122
- RUN . /.env && \
123
- if [ "$TERRASCAN_VERSION" != "false" ]; then \
124
- if [ "$TARGETARCH" != "amd64" ]; then ARCH="$TARGETARCH" ; else ARCH="x86_64" ; fi; \
125
- # Convert the first letter to Uppercase
126
- OS="$(echo ${TARGETOS} | cut -c1 | tr '[:lower:]' '[:upper:]' | xargs echo -n; echo ${TARGETOS} | cut -c2-)" ; \
127
- ( \
128
- TERRASCAN_RELEASES="https://api.github.com/repos/tenable/terrascan/releases" && \
129
- if [ "$TERRASCAN_VERSION" = "latest" ]; \
130
- then curl -L "$(curl -s ${TERRASCAN_RELEASES}/latest | grep -o -E -m 1 " https://.+?_${OS}_${ARCH}.tar.gz")" > terrascan.tar.gz; \
131
- else curl -L "$(curl -s ${TERRASCAN_RELEASES} | grep -o -E " https://.+?${TERRASCAN_VERSION}_${OS}_${ARCH}.tar.gz")" > terrascan.tar.gz; \
132
- fi; \
133
- ) && tar -xzf terrascan.tar.gz terrascan && rm terrascan.tar.gz && \
134
- ./terrascan init \
135
- ; fi
136
-
137
- # TFLint
138
- RUN . /.env && \
139
- if [ "$TFLINT_VERSION" != "false" ]; then \
140
- ( \
141
- TFLINT_RELEASES="https://api.github.com/repos/terraform-linters/tflint/releases" && \
142
- if [ "$TFLINT_VERSION" = "latest" ]; \
143
- then curl -L "$(curl -s ${TFLINT_RELEASES}/latest | grep -o -E -m 1 " https://.+?_${TARGETOS}_${TARGETARCH}.zip")" > tflint.zip; \
144
- else curl -L "$(curl -s ${TFLINT_RELEASES} | grep -o -E " https://.+?/v${TFLINT_VERSION}/tflint_${TARGETOS}_${TARGETARCH}.zip")" > tflint.zip; \
145
- fi; \
146
- ) && unzip tflint.zip && rm tflint.zip \
147
- ; fi
148
-
149
- # TFSec
150
- RUN . /.env && \
151
- if [ "$TFSEC_VERSION" != "false" ]; then \
152
- ( \
153
- TFSEC_RELEASES="https://api.github.com/repos/aquasecurity/tfsec/releases" && \
154
- if [ "$TFSEC_VERSION" = "latest" ]; then \
155
- curl -L "$(curl -s ${TFSEC_RELEASES}/latest | grep -o -E -m 1 " https://.+?/tfsec-${TARGETOS}-${TARGETARCH}")" > tfsec; \
156
- else curl -L "$(curl -s ${TFSEC_RELEASES} | grep -o -E -m 1 " https://.+?v${TFSEC_VERSION}/tfsec-${TARGETOS}-${TARGETARCH}")" > tfsec; \
157
- fi; \
158
- ) && chmod +x tfsec \
159
- ; fi
160
-
161
- # Trivy
162
- RUN . /.env && \
163
- if [ "$TRIVY_VERSION" != "false" ]; then \
164
- if [ "$TARGETARCH" != "amd64" ]; then ARCH="$TARGETARCH" ; else ARCH="64bit" ; fi; \
165
- ( \
166
- TRIVY_RELEASES="https://api.github.com/repos/aquasecurity/trivy/releases" && \
167
- if [ "$TRIVY_VERSION" = "latest" ]; \
168
- then curl -L "$(curl -s ${TRIVY_RELEASES}/latest | grep -o -E -i -m 1 " https://.+?/trivy_.+?_${TARGETOS}-${ARCH}.tar.gz")" > trivy.tar.gz; \
169
- else curl -L "$(curl -s ${TRIVY_RELEASES} | grep -o -E -i -m 1 " https://.+?/v${TRIVY_VERSION}/trivy_.+?_${TARGETOS}-${ARCH}.tar.gz")" > trivy.tar.gz; \
170
- fi; \
171
- ) && tar -xzf trivy.tar.gz trivy && rm trivy.tar.gz \
172
- ; fi
173
-
174
- # TFUpdate
175
- RUN . /.env && \
176
- if [ "$TFUPDATE_VERSION" != "false" ]; then \
177
- ( \
178
- TFUPDATE_RELEASES="https://api.github.com/repos/minamijoyo/tfupdate/releases" && \
179
- if [ "$TFUPDATE_VERSION" = "latest" ]; \
180
- then curl -L "$(curl -s ${TFUPDATE_RELEASES}/latest | grep -o -E -m 1 " https://.+?_${TARGETOS}_${TARGETARCH}.tar.gz")" > tfupdate.tgz; \
181
- else curl -L "$(curl -s ${TFUPDATE_RELEASES} | grep -o -E -m 1 " https://.+?${TFUPDATE_VERSION}_${TARGETOS}_${TARGETARCH}.tar.gz")" > tfupdate.tgz; \
182
- fi; \
183
- ) && tar -xzf tfupdate.tgz tfupdate && rm tfupdate.tgz \
184
- ; fi
185
-
186
- # hcledit
187
- RUN . /.env && \
188
- if [ "$HCLEDIT_VERSION" != "false" ]; then \
189
- ( \
190
- HCLEDIT_RELEASES="https://api.github.com/repos/minamijoyo/hcledit/releases" && \
191
- if [ "$HCLEDIT_VERSION" = "latest" ]; \
192
- then curl -L "$(curl -s ${HCLEDIT_RELEASES}/latest | grep -o -E -m 1 " https://.+?_${TARGETOS}_${TARGETARCH}.tar.gz")" > hcledit.tgz; \
193
- else curl -L "$(curl -s ${HCLEDIT_RELEASES} | grep -o -E -m 1 " https://.+?${HCLEDIT_VERSION}_${TARGETOS}_${TARGETARCH}.tar.gz")" > hcledit.tgz; \
194
- fi; \
195
- ) && tar -xzf hcledit.tgz hcledit && rm hcledit.tgz \
196
- ; fi
197
-
198
78
# Checking binaries versions and write it to debug file
199
79
RUN . /.env && \
200
80
F=tools_versions_info && \
201
81
pre-commit --version >> $F && \
202
82
./terraform --version | head -n 1 >> $F && \
203
83
(if [ "$CHECKOV_VERSION" != "false" ]; then echo "checkov $(checkov --version)" >> $F; else echo "checkov SKIPPED" >> $F ; fi) && \
84
+ (if [ "$HCLEDIT_VERSION" != "false" ]; then echo "hcledit $(./hcledit version)" >> $F; else echo "hcledit SKIPPED" >> $F ; fi) && \
204
85
(if [ "$INFRACOST_VERSION" != "false" ]; then echo "$(./infracost --version)" >> $F; else echo "infracost SKIPPED" >> $F ; fi) && \
205
86
(if [ "$TERRAFORM_DOCS_VERSION" != "false" ]; then ./terraform-docs --version >> $F; else echo "terraform-docs SKIPPED" >> $F ; fi) && \
206
87
(if [ "$TERRAGRUNT_VERSION" != "false" ]; then ./terragrunt --version >> $F; else echo "terragrunt SKIPPED" >> $F ; fi) && \
207
88
(if [ "$TERRASCAN_VERSION" != "false" ]; then echo "terrascan $(./terrascan version)" >> $F; else echo "terrascan SKIPPED" >> $F ; fi) && \
208
89
(if [ "$TFLINT_VERSION" != "false" ]; then ./tflint --version >> $F; else echo "tflint SKIPPED" >> $F ; fi) && \
209
90
(if [ "$TFSEC_VERSION" != "false" ]; then echo "tfsec $(./tfsec --version)" >> $F; else echo "tfsec SKIPPED" >> $F ; fi) && \
210
- (if [ "$TRIVY_VERSION" != "false" ]; then echo "trivy $(./trivy --version)" >> $F; else echo "trivy SKIPPED" >> $F ; fi) && \
211
91
(if [ "$TFUPDATE_VERSION" != "false" ]; then echo "tfupdate $(./tfupdate --version)" >> $F; else echo "tfupdate SKIPPED" >> $F ; fi) && \
212
- (if [ "$HCLEDIT_VERSION " != "false" ]; then echo "hcledit $(./hcledit version)" >> $F; else echo "hcledit SKIPPED" >> $F ; fi) && \
92
+ (if [ "$TRIVY_VERSION " != "false" ]; then echo "trivy $(./trivy -- version)" >> $F; else echo "trivy SKIPPED" >> $F ; fi) && \
213
93
echo -e "\n\n " && cat $F && echo -e "\n\n "
214
94
215
95
0 commit comments