Feat: Add Powershell to DockerFile

This commit is contained in:
Justin Grote 2020-06-19 15:10:34 +00:00
parent 420850fe61
commit 2e94f3c355

View file

@ -1,143 +1,178 @@
########################################### ###########################################
########################################### ###########################################
## Dockerfile to run GitHub Super-Linter ## ## Dockerfile to run GitHub Super-Linter ##
########################################### ###########################################
########################################### ###########################################
################## ##################
# Get base image # # Get base image #
################## ##################
FROM python:alpine FROM python:alpine
######################################### #########################################
# Label the instance and set maintainer # # Label the instance and set maintainer #
######################################### #########################################
LABEL com.github.actions.name="GitHub Super-Linter" \ LABEL com.github.actions.name="GitHub Super-Linter" \
com.github.actions.description="Lint your code base with GitHub Actions" \ com.github.actions.description="Lint your code base with GitHub Actions" \
com.github.actions.icon="code" \ com.github.actions.icon="code" \
com.github.actions.color="red" \ com.github.actions.color="red" \
maintainer="GitHub DevOps <github_devops@github.com>" maintainer="GitHub DevOps <github_devops@github.com>"
#################### ####################
# Run APK installs # # Run APK installs #
#################### ####################
RUN apk add --no-cache \ RUN apk add --no-cache \
bash git git-lfs musl-dev curl gcc jq file\ bash git git-lfs musl-dev curl gcc jq file\
npm nodejs \ npm nodejs \
libxml2-utils perl \ libxml2-utils perl \
ruby ruby-dev ruby-bundler ruby-rdoc make \ ruby ruby-dev ruby-bundler ruby-rdoc make \
py3-setuptools ansible-lint \ py3-setuptools ansible-lint \
go go
##################### #####################
# Run Pip3 Installs # # Run Pip3 Installs #
##################### #####################
RUN pip3 --no-cache-dir install --upgrade --no-cache-dir \ RUN pip3 --no-cache-dir install --upgrade --no-cache-dir \
yamllint pylint yq yamllint pylint yq
#################### ####################
# Run NPM Installs # # Run NPM Installs #
#################### ####################
RUN npm config set package-lock false \ RUN npm config set package-lock false \
&& npm config set loglevel error \ && npm config set loglevel error \
&& npm -g --no-cache install \ && npm -g --no-cache install \
markdownlint-cli \ markdownlint-cli \
jsonlint prettyjson \ jsonlint prettyjson \
coffeelint \ coffeelint \
typescript eslint \ typescript eslint \
standard \ standard \
babel-eslint \ babel-eslint \
@typescript-eslint/eslint-plugin \ @typescript-eslint/eslint-plugin \
@typescript-eslint/parser \ @typescript-eslint/parser \
eslint-plugin-jest \ eslint-plugin-jest \
&& npm --no-cache install \ && npm --no-cache install \
markdownlint-cli \ markdownlint-cli \
jsonlint prettyjson \ jsonlint prettyjson \
coffeelint \ coffeelint \
typescript eslint \ typescript eslint \
standard \ standard \
babel-eslint \ babel-eslint \
prettier \ prettier \
eslint-config-prettier \ eslint-config-prettier \
@typescript-eslint/eslint-plugin \ @typescript-eslint/eslint-plugin \
@typescript-eslint/parser \ @typescript-eslint/parser \
eslint-plugin-jest eslint-plugin-jest
#################################### ####################################
# Install dockerfilelint from repo # # Install dockerfilelint from repo #
#################################### ####################################
RUN git clone https://github.com/replicatedhq/dockerfilelint.git && cd /dockerfilelint && npm install RUN git clone https://github.com/replicatedhq/dockerfilelint.git && cd /dockerfilelint && npm install
# I think we could fix this with path but not sure the language... # I think we could fix this with path but not sure the language...
# https://github.com/nodejs/docker-node/blob/master/docs/BestPractices.md # https://github.com/nodejs/docker-node/blob/master/docs/BestPractices.md
#################### ####################
# Run GEM installs # # Run GEM installs #
#################### ####################
RUN gem install rubocop:0.74.0 rubocop-rails rubocop-github:0.13.0 RUN gem install rubocop:0.74.0 rubocop-rails rubocop-github:0.13.0
# Need to fix the version as it installs 'rubocop:0.85.1' as a dep, and forces the default # Need to fix the version as it installs 'rubocop:0.85.1' as a dep, and forces the default
# We then need to promot the correct verion, uninstall, and fix deps # We then need to promot the correct verion, uninstall, and fix deps
RUN sh -c 'gem install --default rubocop:0.74.0; yes | gem uninstall rubocop:0.85.1 -a -x -I; gem install rubocop:0.74.0' RUN sh -c 'gem install --default rubocop:0.74.0; yes | gem uninstall rubocop:0.85.1 -a -x -I; gem install rubocop:0.74.0'
###################### ######################
# Install shellcheck # # Install shellcheck #
###################### ######################
RUN wget -qO- "https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.linux.x86_64.tar.xz" | tar -xJv \ RUN wget -qO- "https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.linux.x86_64.tar.xz" | tar -xJv \
&& mv "shellcheck-stable/shellcheck" /usr/bin/ && mv "shellcheck-stable/shellcheck" /usr/bin/
##################### #####################
# Install Go Linter # # Install Go Linter #
##################### #####################
ARG GO_VERSION='v1.23.7' ARG GO_VERSION='v1.23.7'
RUN wget -O- -nvq https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s "$GO_VERSION" RUN wget -O- -nvq https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s "$GO_VERSION"
################## ##################
# Install TFLint # # Install TFLint #
################## ##################
RUN curl -Ls "$(curl -Ls https://api.github.com/repos/terraform-linters/tflint/releases/latest | grep -o -E "https://.+?_linux_amd64.zip")" -o tflint.zip && unzip tflint.zip && rm tflint.zip \ RUN curl -Ls "$(curl -Ls https://api.github.com/repos/terraform-linters/tflint/releases/latest | grep -o -E "https://.+?_linux_amd64.zip")" -o tflint.zip && unzip tflint.zip && rm tflint.zip \
&& mv "tflint" /usr/bin/ && mv "tflint" /usr/bin/
########################################### #########################################
# Load GitHub Env Vars for GitHub Actions # # Install Powershell + PSScriptAnalyzer #
########################################### #########################################
ENV GITHUB_SHA=${GITHUB_SHA} \ # Reference: https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-linux?view=powershell-7
GITHUB_EVENT_PATH=${GITHUB_EVENT_PATH} \ # Slightly modified to always retrieve latest stable Powershell version
GITHUB_WORKSPACE=${GITHUB_WORKSPACE} \ RUN apk add --no-cache \
VALIDATE_ALL_CODEBASE=${VALIDATE_ALL_CODEBASE} \ ca-certificates \
VALIDATE_YAML=${VALIDATE_YAML} \ less \
VALIDATE_JSON=${VALIDATE_JSON} \ ncurses-terminfo-base \
VALIDATE_XML=${VALIDATE_XML} \ krb5-libs \
VALIDATE_MD=${VALIDATE_MD} \ libgcc \
VALIDATE_BASH=${VALIDATE_BASH} \ libintl \
VALIDATE_PERL=${VALIDATE_PERL} \ libssl1.1 \
VALIDATE_PYTHON=${VALIDATE_PYTHON} \ libstdc++ \
VALIDATE_RUBY=${VALIDATE_RUBY} \ tzdata \
VALIDATE_COFFEE=${VALIDATE_COFFEE} \ userspace-rcu \
VALIDATE_ANSIBLE=${VALIDATE_ANSIBLE} \ zlib \
VALIDATE_DOCKER=${VALIDATE_DOCKER} \ icu-libs \
VALIDATE_JAVASCRIPT_ES=${VALIDATE_JAVASCRIPT_ES} \ curl \
VALIDATE_JAVASCRIPT_STANDARD=${VALIDATE_JAVASCRIPT_STANDARD} \ lttng-ust \
VALIDATE_TYPESCRIPT_ES=${VALIDATE_TYPESCRIPT_ES} \ && \
VALIDATE_TYPESCRIPT_STANDARD=${VALIDATE_TYPESCRIPT_STANDARD} \ mkdir -p /opt/microsoft/powershell/7 \
VALIDATE_GO=${VALIDATE_GO} \ && \
VALIDATE_TERRAFORM=${VALIDATE_TERRAFORM} \ curl -s https://api.github.com/repos/powershell/powershell/releases/latest \
ANSIBLE_DIRECTORY=${ANSIBLE_DIRECTORY} \ | grep browser_download_url \
RUN_LOCAL=${RUN_LOCAL} \ | grep linux-alpine-x64 \
TEST_CASE_RUN=${TEST_CASE_RUN} \ | cut -d '"' -f 4 \
ACTIONS_RUNNER_DEBUG=${ACTIONS_RUNNER_DEBUG} | xargs -n 1 wget -O - \
| tar -xzC /opt/microsoft/powershell/7 \
############################# && \
# Copy scripts to container # ln -s /opt/microsoft/powershell/7/pwsh /usr/bin/pwsh \
############################# && \
COPY lib /action/lib pwsh -c 'install-module psscriptanalyzer -force'
##################################
# Copy linter rules to container # ###########################################
################################## # Load GitHub Env Vars for GitHub Actions #
COPY TEMPLATES /action/lib/.automation ###########################################
ENV GITHUB_SHA=${GITHUB_SHA} \
###################### GITHUB_EVENT_PATH=${GITHUB_EVENT_PATH} \
# Set the entrypoint # GITHUB_WORKSPACE=${GITHUB_WORKSPACE} \
###################### VALIDATE_ALL_CODEBASE=${VALIDATE_ALL_CODEBASE} \
ENTRYPOINT ["/action/lib/linter.sh"] VALIDATE_YAML=${VALIDATE_YAML} \
VALIDATE_JSON=${VALIDATE_JSON} \
VALIDATE_XML=${VALIDATE_XML} \
VALIDATE_MD=${VALIDATE_MD} \
VALIDATE_BASH=${VALIDATE_BASH} \
VALIDATE_PERL=${VALIDATE_PERL} \
VALIDATE_PYTHON=${VALIDATE_PYTHON} \
VALIDATE_RUBY=${VALIDATE_RUBY} \
VALIDATE_COFFEE=${VALIDATE_COFFEE} \
VALIDATE_ANSIBLE=${VALIDATE_ANSIBLE} \
VALIDATE_DOCKER=${VALIDATE_DOCKER} \
VALIDATE_JAVASCRIPT_ES=${VALIDATE_JAVASCRIPT_ES} \
VALIDATE_JAVASCRIPT_STANDARD=${VALIDATE_JAVASCRIPT_STANDARD} \
VALIDATE_TYPESCRIPT_ES=${VALIDATE_TYPESCRIPT_ES} \
VALIDATE_TYPESCRIPT_STANDARD=${VALIDATE_TYPESCRIPT_STANDARD} \
VALIDATE_GO=${VALIDATE_GO} \
VALIDATE_TERRAFORM=${VALIDATE_TERRAFORM} \
ANSIBLE_DIRECTORY=${ANSIBLE_DIRECTORY} \
RUN_LOCAL=${RUN_LOCAL} \
TEST_CASE_RUN=${TEST_CASE_RUN} \
ACTIONS_RUNNER_DEBUG=${ACTIONS_RUNNER_DEBUG}
#############################
# Copy scripts to container #
#############################
COPY lib /action/lib
##################################
# Copy linter rules to container #
##################################
COPY TEMPLATES /action/lib/.automation
######################
# Set the entrypoint #
######################
ENTRYPOINT ["/action/lib/linter.sh"]