MegaLinter es una herramienta de código abierto para flujos de trabajo de CI/CD que analiza la coherencia de su código , IAC , configuración y scripts en las fuentes de su repositorio, para garantizar que todas las fuentes de sus proyectos estén limpias y formateadas, independientemente del IDE/caja de herramientas que utilicen sus desarrolladores. , impulsado por OX Security .
Admite 62 idiomas, 23 formatos, 20 formatos de herramientas y está listo para usar de inmediato , como una acción de GitHub o cualquier sistema de CI, altamente configurable y gratuito para todos los usos .
MegaLinter tiene integraciones nativas con muchas de las principales herramientas CI/CD del mercado.
Actualízate a MegaLinter v8 :)
Antes de continuar, consulte el sitio web de documentación en línea, que tiene una navegación de usuario mucho más sencilla que este archivo README.
Los proyectos deben contener código limpio para evitar la deuda técnica , que hace que el mantenimiento evolutivo sea más difícil y requiera más tiempo .
Al utilizar formateadores de código y linters de código , se asegura de que su código base sea más fácil de leer y respete las mejores prácticas , desde el inicio hasta cada paso del ciclo de vida del proyecto.
No todos los desarrolladores tienen la buena costumbre de utilizar linters en sus IDE, lo que hace que las revisiones de código sean más difíciles y más largas de procesar.
Al utilizar MegaLinter , disfrutará de los siguientes beneficios para usted y su equipo:
npx mega-linter-runner --install
para generar archivos de configuración (necesita instalar node.js)Notas :
super-linter/super-linter@v3
por oxsecurity/megalinter@v8
en su archivo YML de GitHub Action, como en este PR)Todos los linters están integrados en la imagen acoplable de MegaLinter, que se actualiza frecuentemente con sus últimas versiones.
Idioma | Linter | Adicional | |
---|---|---|---|
INTENTO | bash-exec BASH_EXEC | ||
INTENTO | chequeo de concha BASH_SHELLCHECK | ||
INTENTO | shfmt BASH_SHFMT | ||
do | cpplint C_CPPLINT | ||
do | formato clang C_CLANG_FORMAT | ||
CLOJURA | clj-kondo CLOJURE_CLJ_KONDO | ||
CLOJURA | estilo clj CLOJURE_CLJSTYLE | ||
CAFÉ | pelusa de cafe CAFÉ_CAFÉELINT | ||
C++ (CPP) | cpplint CPP_CPPLINT | ||
C++ (CPP) | formato clang CPP_CLANG_FORMAT | ||
C# (CSHARP) | formato dotnet CSHARP_DOTNET_FORMAT | ||
C# (CSHARP) | más nítido CSHARP_CSHARPIER | ||
C# (CSHARP) | roslynator CSHARP_ROSLYNATOR | ||
DARDO | dartanalyzer DART_DARTANALYZER | ||
IR | golangci-pelusa GO_GOLANGCI_LINT | ||
IR | reanimar GO_REVIVE | ||
MARAVILLOSO | npm-groovy-lint GROOVY_NPM_GROOVY_LINT | ||
JAVA | estilo de verificación JAVA_CHECKSTYLE | ||
JAVA | pmd JAVA_PMD | ||
JAVASCRIPT | eslint JAVASCRIPT_ES | ||
JAVASCRIPT | estándar JAVASCRIPT_STANDARD | ||
JAVASCRIPT | mas bonita JAVASCRIPT_PRETTIER | ||
JSX | eslint JSX_ESLINT | ||
KOTLIN | klint KOTLIN_KTLINT | ||
KOTLIN | detectar KOTLIN_DETEKT | ||
LUA | luacheck LUA_LUACHECK | ||
LUA | selene LUA_SELENE | ||
LUA | lápiz óptico LUA_STYLUA | ||
MAKEFILE | hacer cheque MAKEFILE_CHECKMAKE | ||
Perla | perlcrítico PERL_PERLCRITIC | ||
PHP | php PHP_PHPCS | ||
PHP | phpstan PHP_PHPSTAN | ||
PHP | salmo PHP_PSALM | ||
PHP | phplint PHP_PHPLINT | ||
PHP | reparador de php-cs PHP_PHPCSFIXER | ||
POWERSHELL | powershell POWERSHELL_POWERSHELL | ||
POWERSHELL | powershell_formatter POWERSHELL_POWERSHELL_FORMATER | ||
PITÓN | pylint PYTHON_PYLINT | ||
PITÓN | negro PYTHON_NEGRO | ||
PITÓN | escama8 PYTHON_FLAKE8 | ||
PITÓN | aislar PYTHON_ISORT | ||
PITÓN | bandido PYTHON_BANDIDO | ||
PITÓN | mipy PYTHON_MYPY | ||
PITÓN | derecho PYTHON_PYRIGHT | ||
PITÓN | fallar PYTHON_RUFF | ||
R | lintr R_LINTR | ||
RAKU | rakú RAKU_RAKU | ||
RUBÍ | rubocop RUBY_RUBOCOP | ||
ÓXIDO | clippy RUST_CLIPPY | ||
FUERZA DE VENTAS | escáner-sfdx-apex SALESFORCE_SFDX_SCANNER_APEX | ||
FUERZA DE VENTAS | sfdx-escáner-aura SALESFORCE_SFDX_SCANNER_AURA | ||
FUERZA DE VENTAS | escáner-sfdx-lwc SALESFORCE_SFDX_SCANNER_LWC | ||
FUERZA DE VENTAS | escáner de flujo de rayos SALESFORCE_LIGHTNING_FLOW_SCANNER | ||
SCALA | escalafix SCALA_SCALAFIX | ||
SQL | sqlfluff SQL_SQLFLUFF | ||
SQL | tsqllint SQL_TSQLLINT | ||
RÁPIDO | veloz SWIFT_SWIFTLINT | ||
TSX | eslint TSX_ESLINT | ||
MECANOGRAFIADO | eslint TIPOSCRIPT_ES | ||
MECANOGRAFIADO | ts-estándar TIPOSCRIPT_STANDARD | ||
MECANOGRAFIADO | mas bonita TYPESCRIPT_PRETTIER | ||
Visual Basic .NET (VBDOTNET) | formato dotnet VBDOTNET_DOTNET_FORMAT |
Formato | Linter | Adicional | |
---|---|---|---|
CSS | estilolint CSS_STYLELINT | ||
ENV | dotenv-linter ENV_DOTENV_LINTER | ||
GRAPHQL | Graphql-esquema-linter GRAPHQL_GRAPHQL_SCHEMA_LINTER | ||
HTML | djlint HTML_DJLINT | ||
HTML | sugerencia html HTML_HTMLHINT | ||
JSON | jsonlint JSON_JSONLINT | ||
JSON | eslint-plugin-jsonc JSON_ESLINT_PLUGIN_JSONC | ||
JSON | v8r JSON_V8R | ||
JSON | mas bonita JSON_PRETTIER | ||
JSON | paquete-npm-json-lint JSON_NPM_PACKAGE_JSON_LINT | ||
LÁTEX | chktex LATEX_CHKTEX | ||
REDUCCIÓN | rebajas MARKDOWN_MARKDOWNLINT | ||
REDUCCIÓN | comentario-pelusa MARKDOWN_REMARK_LINT | ||
REDUCCIÓN | verificación-enlace-de-rebaja MARKDOWN_MARKDOWN_LINK_CHECK | ||
REDUCCIÓN | formateador-de-tabla-de-rebaja MARKDOWN_MARKDOWN_TABLE_FORMATTER | ||
PROTOBUF | protolinto PROTOBUF_PROTOLINT | ||
primero | primera pelusa RST_RST_LINT | ||
primero | primer chequeo RST_RSTCHECK | ||
primero | primera vez RST_RSTFMT | ||
XML | xmlint XML_XMLLINT | ||
YAML | mas bonita YAML_PRETTIER | ||
YAML | yamlint YAML_YAMLLINT | ||
YAML | v8r YAML_V8R |
Formato de herramientas | Linter | Adicional | |
---|---|---|---|
ACCIÓN | acciónlint ACTION_ACTIONLINT | ||
ANSIBLE | pelusa ansible ANSIBLE_ANSIBLE_LINT | ||
API | espectral API_SPECTRAL | ||
BRAZO | brazo-ttk ARM_ARM_TTK | ||
BÍCEP | bíceps_linter BICEP_BICEP_LINTER | ||
FORMACIÓN DE LA NUBE | cfn-lint NUBEFORMACIÓN_CFN_LINT | ||
archivo docker | hadolina DOCKERFILE_HADOLINT | ||
CONFIGURACIÓN DEL EDITOR | editorconfig-checker EDITORCONFIG_EDITORCONFIG_CHECKER | ||
PEPINILLO | pelusa de pepinillo GHERKIN_GHERKIN_LINT | ||
Kubernetes | kubeconforme KUBERNETES_KUBECONFORM | ||
Kubernetes | timón KUBERNETES_HELM | ||
Kubernetes | kubescape KUBERNETES_KUBESCAPE | ||
MARIONETA | pelusa de marioneta PUPPET_PUPPET_LINT | ||
SERPIENTE | serpiente SERPIENTEMAKE_LINT | ||
SERPIENTE | serpientefmt SERPIENTEMAKE_SNAKEFMT | ||
TEKTON | tekton-pelusa TEKTON_TEKTON_LINT | ||
TERRAFORMAR | pedernal TERRAFORM_TFLINT | ||
TERRAFORMAR | terrasco TERRAFORM_TERRASCAN | ||
TERRAFORMAR | terragruñon TERRAFORM_TERRAGRUNT | ||
TERRAFORMAR | terraform-fmt TERRAFORM_TERRAFORM_FMT |
Comprobador de calidad del código | Linter | Adicional | |
---|---|---|---|
COPIAR Y PEGAR | jscpd COPYPASTE_JSCPD | ||
REPOSITORIO | chequeo REPOSITORIO_CHECKOV | ||
REPOSITORIO | devskim REPOSITORIO_DEVSKIM | ||
REPOSITORIO | ricito de polvo REPOSITORIO_DUSTILOCK | ||
REPOSITORIO | git_diff REPOSITORIO_GIT_DIFF | ||
REPOSITORIO | fugas de git REPOSITORIO_GITLEAKS | ||
REPOSITORIO | quejarse REPOSITORIO_GRYPE | ||
REPOSITORIO | patadas REPOSITORIO_KICS | ||
REPOSITORIO | ls-pelusa REPOSITORIO_LS_LINT | ||
REPOSITORIO | secreto REPOSITORIO_SECRETLINT | ||
REPOSITORIO | semgrep REPOSITORIO_SEMGREP | ||
REPOSITORIO | syft REPOSITORIO_SYFT | ||
REPOSITORIO | trivialidad REPOSITORIO_TRIVY | ||
REPOSITORIO | trivy-sbom REPOSITORIO_TRIVY_SBOM | ||
REPOSITORIO | trufa REPOSITORIO_TRUFFLEHOG | ||
DELETREAR | cspell SPELL_CSPELL | ||
DELETREAR | proselitismo SPELL_PROSELINT | ||
DELETREAR | valle SPELL_VALE | ||
DELETREAR | lychee SPELL_LYCHEE |
Simplemente ejecute npx mega-linter-runner --install
en la raíz de su repositorio y responda preguntas, generará archivos de configuración listos para usar para MegaLinter :)
Los siguientes ejemplos de instrucciones utilizan la última versión estable de MegaLinter ( v8 , siempre correspondiente a la última versión)
oxsecurity/megalinter:v8
oxsecurity/megalinter@v8
También puedes usar la versión beta (correspondiente al contenido de la rama principal)
oxsecurity/megalinter:beta
oxsecurity/megalinter@beta
.github/workflows/mega-linter.yml
NOTAS:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
en su flujo de trabajo, MegaLinter marcará el estado de cada ejecución de linter individual en la sección Comprobaciones de una solicitud de extracción. Sin esto, sólo verás el estado general de la ejecución completa. No es necesario configurar el secreto de GitHub , ya que GitHub lo establece automáticamente, solo es necesario pasarlo a la acción.GITHUB_TARGET_URL
. En su repositorio debería tener una carpeta .github/workflows
con GitHub Action similar a la siguiente:
.github/workflows/mega-linter.yml
---
# MegaLinter GitHub Action configuration file
# More info at https://megalinter.io
name : MegaLinter
on :
# Trigger mega-linter at every push. Action will also be visible from Pull Requests to main
push : # Comment this line to trigger action only on pull-requests (not recommended if you don't pay for GH Actions)
pull_request :
branches : [master, main]
env : # Comment env block if you don't want to apply fixes
# Apply linter fixes configuration
APPLY_FIXES : all # When active, APPLY_FIXES must also be defined as environment variable (in github/workflows/mega-linter.yml or other CI tool)
APPLY_FIXES_EVENT : pull_request # Decide which event triggers application of fixes in a commit or a PR (pull_request, push, all)
APPLY_FIXES_MODE : commit # If APPLY_FIXES is used, defines if the fixes are directly committed (commit) or posted in a PR (pull_request)
concurrency :
group : ${{ github.ref }}-${{ github.workflow }}
cancel-in-progress : true
jobs :
megalinter :
name : MegaLinter
runs-on : ubuntu-latest
permissions :
# Give the default GITHUB_TOKEN write permission to commit and push, comment issues & post new PR
# Remove the ones you do not need
contents : write
issues : write
pull-requests : write
steps :
# Git Checkout
- name : Checkout Code
uses : actions/checkout@v4
with :
token : ${{ secrets.PAT || secrets.GITHUB_TOKEN }}
fetch-depth : 0 # If you use VALIDATE_ALL_CODEBASE = true, you can remove this line to improve performances
# MegaLinter
- name : MegaLinter
id : ml
# You can override MegaLinter flavor used to have faster performances
# More info at https://megalinter.io/flavors/
uses : oxsecurity/megalinter@v8
env :
# All available variables are described in documentation
# https://megalinter.io/configuration/
VALIDATE_ALL_CODEBASE : ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} # Validates all source when push on main, else just the git diff with main. Override with true if you always want to lint all sources
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
# ADD YOUR CUSTOM ENV VARIABLES HERE OR DEFINE THEM IN A FILE .mega-linter.yml AT THE ROOT OF YOUR REPOSITORY
# DISABLE: COPYPASTE,SPELL # Uncomment to disable copy-paste and spell checks
# Upload MegaLinter artifacts
- name : Archive production artifacts
if : success() || failure()
uses : actions/upload-artifact@v4
with :
name : MegaLinter reports
path : |
megalinter-reports
mega-linter.log
# Create pull request if applicable (for now works only on PR from same repository, not from forks)
- name : Create Pull Request with applied fixes
id : cpr
if : steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'pull_request' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) && !contains(github.event.head_commit.message, 'skip fix')
uses : peter-evans/create-pull-request@v6
with :
token : ${{ secrets.PAT || secrets.GITHUB_TOKEN }}
commit-message : " [MegaLinter] Apply linters automatic fixes "
title : " [MegaLinter] Apply linters automatic fixes "
labels : bot
- name : Create PR output
if : steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'pull_request' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) && !contains(github.event.head_commit.message, 'skip fix')
run : |
echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}"
echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"
# Push new commit if applicable (for now works only on PR from same repository, not from forks)
- name : Prepare commit
if : steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'commit' && github.ref != 'refs/heads/main' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) && !contains(github.event.head_commit.message, 'skip fix')
run : sudo chown -Rc $UID .git/
- name : Commit and push applied linter fixes
if : steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'commit' && github.ref != 'refs/heads/main' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) && !contains(github.event.head_commit.message, 'skip fix')
uses : stefanzweifel/git-auto-commit-action@v4
with :
branch : ${{ github.event.pull_request.head.ref || github.head_ref || github.ref }}
commit_message : " [MegaLinter] Apply linters fixes "
commit_user_name : megalinter-bot
commit_user_email : [email protected]
Cree o actualice el archivo .gitlab-ci.yml
en la raíz de su repositorio
# MegaLinter GitLab CI job configuration file
# More info at https://megalinter.io/
mega-linter :
stage : test
# You can override MegaLinter flavor used to have faster performances
# More info at https://megalinter.io/flavors/
image : oxsecurity/megalinter:v8
script : [ "true" ] # if script: ["true"] doesn't work, you may try -> script: [ "/bin/bash /entrypoint.sh" ]
variables :
# All available variables are described in documentation
# https://megalinter.io/configuration/
DEFAULT_WORKSPACE : $CI_PROJECT_DIR
# ADD YOUR CUSTOM ENV VARIABLES HERE TO OVERRIDE VALUES OF .mega-linter.yml AT THE ROOT OF YOUR REPOSITORY
artifacts :
when : always
paths :
- megalinter-reports
expire_in : 1 week
Cree un token de acceso de Gitlab y defínalo en una variable GITLAB_ACCESS_TOKEN_MEGALINTER en las variables enmascaradas de CI/CD del proyecto. Asegúrese de que su token (por ejemplo, si es un token de proyecto) sea el rol apropiado para comentar una solicitud de fusión (al menos desarrollador).
Nuestros amigos de R2Devops han empaquetado un flujo de trabajo Gitlab-CI MegaLinter en su mercado de plantillas de código abierto y puede publicar los resultados de MegaLinter en Gitlab Code Quality Reports.
Utilice la siguiente plantilla YAML de Azure Pipelines
Puede configurar una política de rama de validación de compilación en un único repositorio o en todos los repositorios. Si configura en todos los repositorios, su canalización se almacena en un repositorio central.
Agregue lo siguiente a un archivo azure-pipelines.yaml
dentro de su repositorio de código:
# Run MegaLinter to detect linting and security issues
- job : MegaLinter
pool :
vmImage : ubuntu-latest
steps :
# Checkout repo
- checkout : self
# Pull MegaLinter docker image
- script : docker pull oxsecurity/megalinter:v8
displayName : Pull MegaLinter
# Run MegaLinter
- script : |
docker run -v $(System.DefaultWorkingDirectory):/tmp/lint
--env-file <(env | grep -e SYSTEM_ -e BUILD_ -e TF_ -e AGENT_)
-e SYSTEM_ACCESSTOKEN=$(System.AccessToken)
-e GIT_AUTHORIZATION_BEARER=$(System.AccessToken)
oxsecurity/megalinter:v8
displayName: Run MegaLinter
# Upload MegaLinter reports
- task : PublishPipelineArtifact@1
condition : succeededOrFailed()
displayName : Upload MegaLinter reports
inputs :
targetPath : " $(System.DefaultWorkingDirectory)/megalinter-reports/ "
artifactName : MegaLinterReport
Agregue lo siguiente a un archivo azure-pipelines.yaml
dentro de un repositorio separado, por ejemplo, el repositorio 'MegaLinter':
# Run MegaLinter to detect linting and security issues
trigger : none
pool :
vmImage : ubuntu-latest
variables :
repoName : $[ replace(split(variables['System.PullRequest.SourceRepositoryURI'], '/')[6], '%20', ' ') ]
steps :
# Checkout triggering repo
- checkout : git://$(System.TeamProject)/$(repoName)@$(System.PullRequest.SourceBranch)
displayName : Checkout Triggering Repository
# Pull MegaLinter docker image
- script : docker pull oxsecurity/megalinter:v8
displayName : Pull MegaLinter
# Run MegaLinter
- script : |
docker run -v $(System.DefaultWorkingDirectory):/tmp/lint
--env-file <(env | grep -e SYSTEM_ -e BUILD_ -e TF_ -e AGENT_)
-e SYSTEM_ACCESSTOKEN=$(System.AccessToken)
-e GIT_AUTHORIZATION_BEARER=$(System.AccessToken)
oxsecurity/megalinter:v8
displayName: Run MegaLinter
# Upload MegaLinter reports
- task : PublishPipelineArtifact@1
condition : succeededOrFailed()
displayName : MegaLinter Report
inputs :
targetPath : $(System.DefaultWorkingDirectory)/megalinter-reports/
artifactName : MegaLinterReport
Para beneficiarse de los comentarios de la solicitud de extracción, siga las instrucciones de configuración.
También puedes seguir este tutorial detallado de DonKoning
Cree un archivo bitbucket-pipelines.yml
en el directorio raíz de su repositorio
Copie y pegue la siguiente plantilla o agregue el paso a su canalización existente.
image : atlassian/default-image:3
pipelines :
default :
- parallel :
- step :
name :
Expandir