-
-
Notifications
You must be signed in to change notification settings - Fork 577
fix(docker): Checkov installation silently fails on docker build in arm64. Workaround till issue will be fixed in checkov itself
#635
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
5cf0ca5
63f4bef
7014fa0
3d85490
a13a983
42d77d9
f46e8f8
9b58092
3e0d679
b5c6379
54e5ea2
8798d3b
c3322d0
875999c
3481201
c4c1b16
2f00dcf
5e98ae3
1ca976a
01d0868
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -17,8 +17,10 @@ ARG PRE_COMMIT_VERSION=${PRE_COMMIT_VERSION:-latest} | |
| ARG TERRAFORM_VERSION=${TERRAFORM_VERSION:-latest} | ||
|
|
||
| # Install pre-commit | ||
| RUN [ ${PRE_COMMIT_VERSION} = "latest" ] && pip3 install --no-cache-dir pre-commit \ | ||
| || pip3 install --no-cache-dir pre-commit==${PRE_COMMIT_VERSION} | ||
| RUN if [ ${PRE_COMMIT_VERSION} = "latest" ]; \ | ||
| then pip3 install --no-cache-dir pre-commit; \ | ||
| else pip3 install --no-cache-dir pre-commit==${PRE_COMMIT_VERSION}; \ | ||
| fi | ||
|
|
||
| # Install terraform because pre-commit needs it | ||
| RUN if [ "${TERRAFORM_VERSION}" = "latest" ]; then \ | ||
|
|
@@ -66,10 +68,16 @@ RUN if [ "$INSTALL_ALL" != "false" ]; then \ | |
| RUN . /.env && \ | ||
| if [ "$CHECKOV_VERSION" != "false" ]; then \ | ||
| ( \ | ||
| apk add --no-cache gcc=~12 libffi-dev=~3 musl-dev=~1; \ | ||
| [ "$CHECKOV_VERSION" = "latest" ] && pip3 install --no-cache-dir checkov \ | ||
| || pip3 install --no-cache-dir checkov==${CHECKOV_VERSION}; \ | ||
| apk del gcc libffi-dev musl-dev \ | ||
| # cargo, gcc, git, musl-dev, rust and CARGO envvar required for compilation of [email protected], no longer required once checkov version depends on rustworkx >0.14.0 | ||
| # https://github.com/bridgecrewio/checkov/pull/6045 | ||
| # gcc libffi-dev musl-dev required for compilation of cffi, until it contains musl aarch64 | ||
| export CARGO_NET_GIT_FETCH_WITH_CLI=true && \ | ||
| apk add --no-cache cargo=~1 gcc=~12 git=~2 libffi-dev=~3 libgcc=~12 musl-dev=~1 rust=~1 ; \ | ||
| if [ "$CHECKOV_VERSION" = "latest" ]; \ | ||
| then pip3 install --no-cache-dir checkov || exit 1; \ | ||
| else pip3 install --no-cache-dir checkov==${CHECKOV_VERSION} || exit 1; \ | ||
|
Comment on lines
+77
to
+78
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. btw, we can't just add comments inside the code about it. Probably, the best place is on L73
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Out of interest why at
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Because pre-commit doesn't use rust? I prefer somehow make structured tests work for arm64, rather than add exit 1 in every possible place
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
That's kind of weird: if
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
What do you think of a single script that takes args? Like
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Problem there that they are different
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. currently, I just moving it out and implementing logic as We can discuss it in next PR :)
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Some are slightly different, whilst others use the same solutions (like extracting download URLs from GH releases API response). And also I see it odd to have a bunch of almost-the-same ten-lines shell scripts instead of one that can handle installation of all the deps one-by-one or all-at-once.
Makes sense 🤝 (apologies that I already outlined my thoughts — this helps me imprint them in memory 😺)
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @MaxymVlasov do not install distributions with pip separately because it will not take all things installed in the previous session into account when you run a new install command. Enumerate everything and let the dependency resolver know all your requirements together. Ideally, use pip-compile to produce and commit constraint files (lockfiles) and invoke it via If you do run separate pip installs, inject a |
||
| fi; \ | ||
| apk del cargo gcc git libffi-dev musl-dev rust \ | ||
| ) \ | ||
| ; fi | ||
|
|
||
|
|
@@ -78,8 +86,10 @@ RUN . /.env && \ | |
| if [ "$INFRACOST_VERSION" != "false" ]; then \ | ||
| ( \ | ||
| INFRACOST_RELEASES="https://api.github.com/repos/infracost/infracost/releases" && \ | ||
| [ "$INFRACOST_VERSION" = "latest" ] && curl -L "$(curl -s ${INFRACOST_RELEASES}/latest | grep -o -E -m 1 "https://.+?-${TARGETOS}-${TARGETARCH}.tar.gz")" > infracost.tgz \ | ||
| || curl -L "$(curl -s ${INFRACOST_RELEASES} | grep -o -E "https://.+?v${INFRACOST_VERSION}/infracost-${TARGETOS}-${TARGETARCH}.tar.gz")" > infracost.tgz \ | ||
| if [ "$INFRACOST_VERSION" = "latest" ]; \ | ||
| then curl -L "$(curl -s ${INFRACOST_RELEASES}/latest | grep -o -E -m 1 "https://.+?-${TARGETOS}-${TARGETARCH}.tar.gz")" > infracost.tgz; \ | ||
| else curl -L "$(curl -s ${INFRACOST_RELEASES} | grep -o -E "https://.+?v${INFRACOST_VERSION}/infracost-${TARGETOS}-${TARGETARCH}.tar.gz")" > infracost.tgz; \ | ||
| fi; \ | ||
| ) && tar -xzf infracost.tgz && rm infracost.tgz && mv infracost-${TARGETOS}-${TARGETARCH} infracost \ | ||
| ; fi | ||
|
|
||
|
|
@@ -88,8 +98,10 @@ RUN . /.env && \ | |
| if [ "$TERRAFORM_DOCS_VERSION" != "false" ]; then \ | ||
| ( \ | ||
| TERRAFORM_DOCS_RELEASES="https://api.github.com/repos/terraform-docs/terraform-docs/releases" && \ | ||
| [ "$TERRAFORM_DOCS_VERSION" = "latest" ] && curl -L "$(curl -s ${TERRAFORM_DOCS_RELEASES}/latest | grep -o -E -m 1 "https://.+?-${TARGETOS}-${TARGETARCH}.tar.gz")" > terraform-docs.tgz \ | ||
| || curl -L "$(curl -s ${TERRAFORM_DOCS_RELEASES} | grep -o -E "https://.+?v${TERRAFORM_DOCS_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz")" > terraform-docs.tgz \ | ||
| if [ "$TERRAFORM_DOCS_VERSION" = "latest" ]; \ | ||
| then curl -L "$(curl -s ${TERRAFORM_DOCS_RELEASES}/latest | grep -o -E -m 1 "https://.+?-${TARGETOS}-${TARGETARCH}.tar.gz")" > terraform-docs.tgz; \ | ||
| else curl -L "$(curl -s ${TERRAFORM_DOCS_RELEASES} | grep -o -E "https://.+?v${TERRAFORM_DOCS_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz")" > terraform-docs.tgz; \ | ||
| fi; \ | ||
| ) && tar -xzf terraform-docs.tgz terraform-docs && rm terraform-docs.tgz && chmod +x terraform-docs \ | ||
| ; fi | ||
|
|
||
|
|
@@ -98,8 +110,10 @@ RUN . /.env \ | |
| && if [ "$TERRAGRUNT_VERSION" != "false" ]; then \ | ||
| ( \ | ||
| TERRAGRUNT_RELEASES="https://api.github.com/repos/gruntwork-io/terragrunt/releases" && \ | ||
| [ "$TERRAGRUNT_VERSION" = "latest" ] && curl -L "$(curl -s ${TERRAGRUNT_RELEASES}/latest | grep -o -E -m 1 "https://.+?/terragrunt_${TARGETOS}_${TARGETARCH}")" > terragrunt \ | ||
| || curl -L "$(curl -s ${TERRAGRUNT_RELEASES} | grep -o -E -m 1 "https://.+?v${TERRAGRUNT_VERSION}/terragrunt_${TARGETOS}_${TARGETARCH}")" > terragrunt \ | ||
| if [ "$TERRAGRUNT_VERSION" = "latest" ]; \ | ||
| then curl -L "$(curl -s ${TERRAGRUNT_RELEASES}/latest | grep -o -E -m 1 "https://.+?/terragrunt_${TARGETOS}_${TARGETARCH}")" > terragrunt; \ | ||
| else curl -L "$(curl -s ${TERRAGRUNT_RELEASES} | grep -o -E -m 1 "https://.+?v${TERRAGRUNT_VERSION}/terragrunt_${TARGETOS}_${TARGETARCH}")" > terragrunt; \ | ||
| fi; \ | ||
| ) && chmod +x terragrunt \ | ||
| ; fi | ||
|
|
||
|
|
@@ -112,8 +126,10 @@ RUN . /.env && \ | |
| OS="$(echo ${TARGETOS} | cut -c1 | tr '[:lower:]' '[:upper:]' | xargs echo -n; echo ${TARGETOS} | cut -c2-)"; \ | ||
| ( \ | ||
| TERRASCAN_RELEASES="https://api.github.com/repos/tenable/terrascan/releases" && \ | ||
| [ "$TERRASCAN_VERSION" = "latest" ] && curl -L "$(curl -s ${TERRASCAN_RELEASES}/latest | grep -o -E -m 1 "https://.+?_${OS}_${ARCH}.tar.gz")" > terrascan.tar.gz \ | ||
| || curl -L "$(curl -s ${TERRASCAN_RELEASES} | grep -o -E "https://.+?${TERRASCAN_VERSION}_${OS}_${ARCH}.tar.gz")" > terrascan.tar.gz \ | ||
| if [ "$TERRASCAN_VERSION" = "latest" ]; \ | ||
| then curl -L "$(curl -s ${TERRASCAN_RELEASES}/latest | grep -o -E -m 1 "https://.+?_${OS}_${ARCH}.tar.gz")" > terrascan.tar.gz; \ | ||
| else curl -L "$(curl -s ${TERRASCAN_RELEASES} | grep -o -E "https://.+?${TERRASCAN_VERSION}_${OS}_${ARCH}.tar.gz")" > terrascan.tar.gz; \ | ||
| fi; \ | ||
| ) && tar -xzf terrascan.tar.gz terrascan && rm terrascan.tar.gz && \ | ||
| ./terrascan init \ | ||
| ; fi | ||
|
|
@@ -123,8 +139,10 @@ RUN . /.env && \ | |
| if [ "$TFLINT_VERSION" != "false" ]; then \ | ||
| ( \ | ||
| TFLINT_RELEASES="https://api.github.com/repos/terraform-linters/tflint/releases" && \ | ||
| [ "$TFLINT_VERSION" = "latest" ] && curl -L "$(curl -s ${TFLINT_RELEASES}/latest | grep -o -E -m 1 "https://.+?_${TARGETOS}_${TARGETARCH}.zip")" > tflint.zip \ | ||
| || curl -L "$(curl -s ${TFLINT_RELEASES} | grep -o -E "https://.+?/v${TFLINT_VERSION}/tflint_${TARGETOS}_${TARGETARCH}.zip")" > tflint.zip \ | ||
| if [ "$TFLINT_VERSION" = "latest" ]; \ | ||
| then curl -L "$(curl -s ${TFLINT_RELEASES}/latest | grep -o -E -m 1 "https://.+?_${TARGETOS}_${TARGETARCH}.zip")" > tflint.zip; \ | ||
| else curl -L "$(curl -s ${TFLINT_RELEASES} | grep -o -E "https://.+?/v${TFLINT_VERSION}/tflint_${TARGETOS}_${TARGETARCH}.zip")" > tflint.zip; \ | ||
| fi; \ | ||
| ) && unzip tflint.zip && rm tflint.zip \ | ||
| ; fi | ||
|
|
||
|
|
@@ -133,8 +151,10 @@ RUN . /.env && \ | |
| if [ "$TFSEC_VERSION" != "false" ]; then \ | ||
| ( \ | ||
| TFSEC_RELEASES="https://api.github.com/repos/aquasecurity/tfsec/releases" && \ | ||
| [ "$TFSEC_VERSION" = "latest" ] && curl -L "$(curl -s ${TFSEC_RELEASES}/latest | grep -o -E -m 1 "https://.+?/tfsec-${TARGETOS}-${TARGETARCH}")" > tfsec \ | ||
| || curl -L "$(curl -s ${TFSEC_RELEASES} | grep -o -E -m 1 "https://.+?v${TFSEC_VERSION}/tfsec-${TARGETOS}-${TARGETARCH}")" > tfsec \ | ||
| if [ "$TFSEC_VERSION" = "latest" ]; then \ | ||
| curl -L "$(curl -s ${TFSEC_RELEASES}/latest | grep -o -E -m 1 "https://.+?/tfsec-${TARGETOS}-${TARGETARCH}")" > tfsec; \ | ||
| else curl -L "$(curl -s ${TFSEC_RELEASES} | grep -o -E -m 1 "https://.+?v${TFSEC_VERSION}/tfsec-${TARGETOS}-${TARGETARCH}")" > tfsec; \ | ||
| fi; \ | ||
| ) && chmod +x tfsec \ | ||
| ; fi | ||
|
|
||
|
|
@@ -144,8 +164,10 @@ RUN . /.env && \ | |
| if [ "$TARGETARCH" != "amd64" ]; then ARCH="$TARGETARCH"; else ARCH="64bit"; fi; \ | ||
| ( \ | ||
| TRIVY_RELEASES="https://api.github.com/repos/aquasecurity/trivy/releases" && \ | ||
| [ "$TRIVY_VERSION" = "latest" ] && curl -L "$(curl -s ${TRIVY_RELEASES}/latest | grep -o -E -i -m 1 "https://.+?/trivy_.+?_${TARGETOS}-${ARCH}.tar.gz")" > trivy.tar.gz \ | ||
| || curl -L "$(curl -s ${TRIVY_RELEASES} | grep -o -E -i -m 1 "https://.+?/v${TRIVY_VERSION}/trivy_.+?_${TARGETOS}-${ARCH}.tar.gz")" > trivy.tar.gz \ | ||
| if [ "$TRIVY_VERSION" = "latest" ]; \ | ||
| then curl -L "$(curl -s ${TRIVY_RELEASES}/latest | grep -o -E -i -m 1 "https://.+?/trivy_.+?_${TARGETOS}-${ARCH}.tar.gz")" > trivy.tar.gz; \ | ||
| 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; \ | ||
| fi; \ | ||
| ) && tar -xzf trivy.tar.gz trivy && rm trivy.tar.gz \ | ||
| ; fi | ||
|
|
||
|
|
@@ -154,8 +176,10 @@ RUN . /.env && \ | |
| if [ "$TFUPDATE_VERSION" != "false" ]; then \ | ||
| ( \ | ||
| TFUPDATE_RELEASES="https://api.github.com/repos/minamijoyo/tfupdate/releases" && \ | ||
| [ "$TFUPDATE_VERSION" = "latest" ] && curl -L "$(curl -s ${TFUPDATE_RELEASES}/latest | grep -o -E -m 1 "https://.+?_${TARGETOS}_${TARGETARCH}.tar.gz")" > tfupdate.tgz \ | ||
| || curl -L "$(curl -s ${TFUPDATE_RELEASES} | grep -o -E -m 1 "https://.+?${TFUPDATE_VERSION}_${TARGETOS}_${TARGETARCH}.tar.gz")" > tfupdate.tgz \ | ||
| if [ "$TFUPDATE_VERSION" = "latest" ]; \ | ||
| then curl -L "$(curl -s ${TFUPDATE_RELEASES}/latest | grep -o -E -m 1 "https://.+?_${TARGETOS}_${TARGETARCH}.tar.gz")" > tfupdate.tgz; \ | ||
| else curl -L "$(curl -s ${TFUPDATE_RELEASES} | grep -o -E -m 1 "https://.+?${TFUPDATE_VERSION}_${TARGETOS}_${TARGETARCH}.tar.gz")" > tfupdate.tgz; \ | ||
| fi; \ | ||
| ) && tar -xzf tfupdate.tgz tfupdate && rm tfupdate.tgz \ | ||
| ; fi | ||
|
|
||
|
|
@@ -164,8 +188,10 @@ RUN . /.env && \ | |
| if [ "$HCLEDIT_VERSION" != "false" ]; then \ | ||
| ( \ | ||
| HCLEDIT_RELEASES="https://api.github.com/repos/minamijoyo/hcledit/releases" && \ | ||
| [ "$HCLEDIT_VERSION" = "latest" ] && curl -L "$(curl -s ${HCLEDIT_RELEASES}/latest | grep -o -E -m 1 "https://.+?_${TARGETOS}_${TARGETARCH}.tar.gz")" > hcledit.tgz \ | ||
| || curl -L "$(curl -s ${HCLEDIT_RELEASES} | grep -o -E -m 1 "https://.+?${HCLEDIT_VERSION}_${TARGETOS}_${TARGETARCH}.tar.gz")" > hcledit.tgz \ | ||
| if [ "$HCLEDIT_VERSION" = "latest" ]; \ | ||
| then curl -L "$(curl -s ${HCLEDIT_RELEASES}/latest | grep -o -E -m 1 "https://.+?_${TARGETOS}_${TARGETARCH}.tar.gz")" > hcledit.tgz; \ | ||
| else curl -L "$(curl -s ${HCLEDIT_RELEASES} | grep -o -E -m 1 "https://.+?${HCLEDIT_VERSION}_${TARGETOS}_${TARGETARCH}.tar.gz")" > hcledit.tgz; \ | ||
| fi; \ | ||
| ) && tar -xzf hcledit.tgz hcledit && rm hcledit.tgz \ | ||
| ; fi | ||
|
|
||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.