|
1 | | -# Dockerfile.tools - Docker image for individual tool execution |
2 | | -ARG BASE_IMAGE |
3 | | -# hadolint ignore=DL3006 |
4 | | -FROM ${BASE_IMAGE} |
| 1 | + |
| 2 | +# Dockerfile.tools - Standalone Docker image for individual tool execution |
| 3 | +FROM python:3.12-alpine@sha256:9b8808206f4a956130546a32cbdd8633bc973b19db2923b7298e6f90cc26db08 AS python_base |
| 4 | + |
| 5 | +FROM python_base AS builder |
| 6 | +ARG TARGETOS |
| 7 | +ARG TARGETARCH |
| 8 | +WORKDIR /bin_dir |
| 9 | +RUN apk add --no-cache \ |
| 10 | + bash=~5 \ |
| 11 | + curl=~8 && \ |
| 12 | + python3 -m pip install --no-cache-dir --upgrade \ |
| 13 | + pip~=25.0 \ |
| 14 | + setuptools~=75.8 |
| 15 | +COPY tools/install/ /install/ |
| 16 | +ARG PRE_COMMIT_VERSION=${PRE_COMMIT_VERSION:-latest} |
| 17 | +RUN touch /.env && \ |
| 18 | + if [ "$PRE_COMMIT_VERSION" = "false" ]; then \ |
| 19 | + echo "Vital software can't be skipped" && exit 1; \ |
| 20 | + fi |
| 21 | +RUN /install/pre-commit.sh |
| 22 | +ARG OPENTOFU_VERSION=${OPENTOFU_VERSION:-false} |
| 23 | +ARG TERRAFORM_VERSION=${TERRAFORM_VERSION:-false} |
| 24 | +ARG CHECKOV_VERSION=${CHECKOV_VERSION:-false} |
| 25 | +ARG HCLEDIT_VERSION=${HCLEDIT_VERSION:-false} |
| 26 | +ARG INFRACOST_VERSION=${INFRACOST_VERSION:-false} |
| 27 | +ARG TERRAFORM_DOCS_VERSION=${TERRAFORM_DOCS_VERSION:-false} |
| 28 | +ARG TERRAGRUNT_VERSION=${TERRAGRUNT_VERSION:-false} |
| 29 | +ARG TERRASCAN_VERSION=${TERRASCAN_VERSION:-false} |
| 30 | +ARG TFLINT_VERSION=${TFLINT_VERSION:-false} |
| 31 | +ARG TFSEC_VERSION=${TFSEC_VERSION:-false} |
| 32 | +ARG TFUPDATE_VERSION=${TFUPDATE_VERSION:-false} |
| 33 | +ARG TRIVY_VERSION=${TRIVY_VERSION:-false} |
| 34 | +ARG INSTALL_ALL=${INSTALL_ALL:-false} |
| 35 | +RUN if [ "$INSTALL_ALL" != "false" ]; then \ |
| 36 | + echo "OPENTOFU_VERSION=latest" >> /.env && \ |
| 37 | + echo "TERRAFORM_VERSION=latest" >> /.env && \ |
| 38 | + echo "CHECKOV_VERSION=latest" >> /.env && \ |
| 39 | + echo "HCLEDIT_VERSION=latest" >> /.env && \ |
| 40 | + echo "INFRACOST_VERSION=latest" >> /.env && \ |
| 41 | + echo "TERRAFORM_DOCS_VERSION=latest" >> /.env && \ |
| 42 | + echo "TERRAGRUNT_VERSION=latest" >> /.env && \ |
| 43 | + echo "TERRASCAN_VERSION=latest" >> /.env && \ |
| 44 | + echo "TFLINT_VERSION=latest" >> /.env && \ |
| 45 | + echo "TFSEC_VERSION=latest" >> /.env && \ |
| 46 | + echo "TFUPDATE_VERSION=latest" >> /.env && \ |
| 47 | + echo "TRIVY_VERSION=latest" >> /.env \ |
| 48 | + ; fi |
| 49 | +RUN /install/opentofu.sh |
| 50 | +RUN /install/terraform.sh |
| 51 | +RUN /install/checkov.sh |
| 52 | +RUN /install/hcledit.sh |
| 53 | +RUN /install/infracost.sh |
| 54 | +RUN /install/terraform-docs.sh |
| 55 | +RUN /install/terragrunt.sh |
| 56 | +RUN /install/terrascan.sh |
| 57 | +RUN /install/tflint.sh |
| 58 | +RUN /install/tfsec.sh |
| 59 | +RUN /install/tfupdate.sh |
| 60 | +RUN /install/trivy.sh |
| 61 | + |
| 62 | +FROM python_base |
| 63 | +RUN apk add --no-cache \ |
| 64 | + git=~2 \ |
| 65 | + bash=~5 \ |
| 66 | + musl-dev=~1 \ |
| 67 | + gcc=~14 \ |
| 68 | + su-exec=~0.2 \ |
| 69 | + openssh-client=~10 |
| 70 | +COPY --from=builder /usr/local/bin/pre-commit /usr/local/bin/checkov* /usr/bin/ |
| 71 | +COPY --from=builder /bin_dir/ /usr/bin/ |
| 72 | +COPY --from=builder /usr/local/lib/python3.12/site-packages/ /usr/local/lib/python3.12/site-packages/ |
| 73 | +COPY --from=builder /root/ /root/ |
| 74 | +COPY hooks/ /usr/local/bin/hooks/ |
| 75 | +COPY lib_getopt /usr/local/bin/ |
| 76 | +COPY src/pre_commit_terraform/ /usr/local/lib/python3.12/site-packages/pre_commit_terraform/ |
| 77 | +RUN if [ "$(grep -o '^terraform-docs SKIPPED$' /usr/bin/tools_versions_info)" = "" ]; then \ |
| 78 | + apk add --no-cache perl=~5 \ |
| 79 | + ; fi && \ |
| 80 | + if [ "$(grep -o '^infracost SKIPPED$' /usr/bin/tools_versions_info)" = "" ]; then \ |
| 81 | + apk add --no-cache jq=~1 \ |
| 82 | + ; fi && \ |
| 83 | + git config --global --add safe.directory /lint |
| 84 | +COPY tools/entrypoint.sh /entrypoint.sh |
| 85 | +COPY hooks/ /usr/bin/hooks/ |
| 86 | +COPY lib_getopt /usr/bin/lib_getopt |
| 87 | +RUN chmod +x /usr/bin/hooks/*.sh |
| 88 | +ENV PRE_COMMIT_COLOR=${PRE_COMMIT_COLOR:-always} |
| 89 | +ENV INFRACOST_API_KEY=${INFRACOST_API_KEY:-} |
| 90 | +ENV INFRACOST_SKIP_UPDATE_CHECK=${INFRACOST_SKIP_UPDATE_CHECK:-false} |
5 | 91 |
|
6 | 92 | # Override entrypoint to allow direct tool execution |
7 | 93 | ENTRYPOINT [] |
|
0 commit comments