MegaLinter é uma ferramenta de código aberto para fluxos de trabalho de CI/CD que analisa a consistência de seu código , IAC , configuração e scripts em suas fontes de repositório, para garantir que todas as fontes de seus projetos estejam limpas e formatadas, qualquer que seja o IDE/caixa de ferramentas usado por seus desenvolvedores , desenvolvido pela OX Security .
Suporta 62 idiomas, 23 formatos, 20 formatos de ferramentas e está pronto para uso imediato , como uma ação do GitHub ou qualquer sistema de CI, altamente configurável e gratuito para todos os usos .
MegaLinter possui integrações nativas com muitas das principais ferramentas de CI/CD do mercado.
Atualize para MegaLinter v8 :)
Antes de prosseguir, consulte o site de documentação on-line, que possui uma navegação do usuário muito mais fácil do que este README
Os projetos precisam conter código limpo, para evitar atrasos técnicos , que tornam a manutenção evolutiva mais difícil e demorada .
Ao usar formatadores e linters de código , você garante que sua base de código seja mais fácil de ler e respeite as melhores práticas , desde o início até cada etapa do ciclo de vida do projeto
Nem todos os desenvolvedores têm o bom hábito de usar linters em seus IDEs, tornando as revisões de código mais difíceis e demoradas de processar
Ao utilizar o MegaLinter , você terá os seguintes benefícios para você e sua equipe:
npx mega-linter-runner --install
para gerar arquivos de configuração (você precisa que o node.js esteja instalado)Notas :
super-linter/super-linter@v3
por oxsecurity/megalinter@v8
em seu arquivo GitHub Action YML, como neste PR)Todos os linters são integrados na imagem docker MegaLinter, que é frequentemente atualizada com suas versões mais recentes
Linguagem | Linter | Adicional | |
---|---|---|---|
BASH | bash-exec BASH_EXEC | ||
BASH | verificação de shell BASH_SHELLCHECK | ||
BASH | shfmt BASH_SHFMT | ||
C | cpplint C_CPPLINT | ||
C | formato clang C_CLANG_FORMAT | ||
CLOJURA | clj-kondo CLOJURE_CLJ_KONDO | ||
CLOJURA | estiloclj CLOJURE_CLJSTYLE | ||
CAFÉ | cafélint CAFÉ_COFFEELINT | ||
C++ (CPP) | cpplint CPP_CPPLINT | ||
C++ (CPP) | formato clang CPP_CLANG_FORMAT | ||
C# (CSHARP) | formato dotnet CSHARP_DOTNET_FORMAT | ||
C# (CSHARP) | mais nítido CSHARP_CSHARPIER | ||
C# (CSHARP) | Roslynator CSHARP_ROSLYNATOR | ||
DARDO | analisador de dardos DART_DARTANALYZER | ||
IR | golangci-lint GO_GOLANGCI_LINT | ||
IR | reviver GO_REVIVE | ||
GROOVY | npm-groovy-lint GROOVY_NPM_GROOVY_LINT | ||
JAVA | estilo de verificação JAVA_CHECKSTYLE | ||
JAVA | pmd JAVA_PMD | ||
JAVASCRIPT | Eslint JAVASCRIPT_ES | ||
JAVASCRIPT | padrão JAVASCRIPT_STANDARD | ||
JAVASCRIPT | mais bonito JAVASCRIPT_PRETTIER | ||
JSX | Eslint JSX_ESLINT | ||
KOTLIN | ktlint KOTLIN_KTLINT | ||
KOTLIN | detecção KOTLIN_DETEKT | ||
LUA | luacheck LUA_LUACHECK | ||
LUA | selene LUA_SELENE | ||
LUA | caneta LUA_STYLUA | ||
MAKEFILE | cheque MAKEFILE_CHECKMAKE | ||
PERL | perlcritico PERL_PERLCRITIC | ||
PHP | phpcs PHP_PHPCS | ||
PHP | PHPstan PHP_PHPSTAN | ||
PHP | salmo PHP_PSALM | ||
PHP | PHPlint PHP_PHPLINT | ||
PHP | php-cs-fixer PHP_PHPCSFIXER | ||
POWERSHELL | Powershell POWERSHELL_POWERSHELL | ||
POWERSHELL | powershell_formatter POWERSHELL_POWERSHELL_FORMATTER | ||
PITÃO | pilar PYTHON_PYLINT | ||
PITÃO | preto PYTHON_BLACK | ||
PITÃO | floco8 PYTHON_FLAKE8 | ||
PITÃO | isortar PYTHON_ISORT | ||
PITÃO | bandido PYTHON_BANDIT | ||
PITÃO | meu bem PYTHON_MYPY | ||
PITÃO | direitos autorais PYTHON_PYRIGHT | ||
PITÃO | rufo PYTHON_RUFF | ||
R | lint R_LINTR | ||
RAKU | raku RAKU_RAKU | ||
RUBI | rubocop RUBY_RUBOCOP | ||
FERRUGEM | clipado RUST_CLIPPY | ||
FORÇA DE VENDAS | sfdx-scanner-apex SALESFORCE_SFDX_SCANNER_APEX | ||
FORÇA DE VENDAS | sfdx-scanner-aura SALESFORCE_SFDX_SCANNER_AURA | ||
FORÇA DE VENDAS | sfdx-scanner-lwc SALESFORCE_SFDX_SCANNER_LWC | ||
FORÇA DE VENDAS | scanner de fluxo relâmpago SALESFORCE_LIGHTNING_FLOW_SCANNER | ||
ESCALA | escalafix SCALA_SCALAFIX | ||
SQL | sqlfluff SQL_SQLFLUFF | ||
SQL | tsqllint SQL_TSQLLINT | ||
Rápido | Swiftlint SWIFT_SWIFTLINT | ||
TSX | Eslint TSX_ESLINT | ||
TEXTO DATILOGADO | Eslint TYPESCRIPT_ES | ||
TEXTO DATILOGADO | padrão ts TYPESCRIPT_STANDARD | ||
TEXTO DATILOGADO | mais bonito TYPESCRIPT_PRETTIER | ||
Visual Basic .NET (VBDOTNET) | formato dotnet VBDOTNET_DOTNET_FORMAT |
Formatar | Linter | Adicional | |
---|---|---|---|
CSS | estilolint CSS_STYLELINT | ||
ENV | dotenv-linter ENV_DOTENV_LINTER | ||
GRAPHQL | graphql-schema-linter GRAPHQL_GRAPHQL_SCHEMA_LINTER | ||
HTML | djlint HTML_DJLINT | ||
HTML | dica de html HTML_HTMLHINT | ||
JSON | jsonlint JSON_JSONLINT | ||
JSON | eslint-plugin-jsonc JSON_ESLINT_PLUGIN_JSONC | ||
JSON | v8r JSON_V8R | ||
JSON | mais bonito JSON_PRETTIER | ||
JSON | pacote npm-json-lint JSON_NPM_PACKAGE_JSON_LINT | ||
LÁTEX | chktex LATEX_CHKTEX | ||
MARCAÇÃO | markdownlint MARKDOWN_MARKDOWNLINT | ||
MARCAÇÃO | observação-lint MARKDOWN_REMARK_LINT | ||
MARCAÇÃO | verificação de link de marcação MARKDOWN_MARKDOWN_LINK_CHECK | ||
MARCAÇÃO | formatador de tabela de marcação MARKDOWN_MARKDOWN_TABLE_FORMATTER | ||
PROTOBUF | protolint PROTOBUF_PROTOLINT | ||
RST | primeiro-lint RST_RST_LINT | ||
RST | primeira verificação RST_RSTCHECK | ||
RST | primeiro RST_RSTFMT | ||
XML | xmllint XML_XMLLINT | ||
YAML | mais bonito YAML_PRETTIER | ||
YAML | yamllint YAML_YAMLLINT | ||
YAML | v8r YAML_V8R |
Formato de ferramenta | Linter | Adicional | |
---|---|---|---|
AÇÃO | açãolint ACTION_ACTIONLINT | ||
ANSÍVEL | ansible-lint ANSIBLE_ANSIBLE_LINT | ||
API | espectral API_SPECTRAL | ||
BRAÇO | braço-ttk ARM_ARM_TTK | ||
BÍCEP | bíceps_linter BICEP_BICEP_LINTER | ||
NUVEMFORMAÇÃO | cfn-lint CLOUDFORMATION_CFN_LINT | ||
DOCKERFILE | hadolint DOCKERFILE_HADOLINT | ||
EDITORCONFIG | editorconfig-checker EDITORCONFIG_EDITORCONFIG_CHECKER | ||
PEIXE | pepino-lint GHERKIN_GHERKIN_LINT | ||
KUBERNETES | kubeconform KUBERNETES_KUBECONFORM | ||
KUBERNETES | leme KUBERNETES_HELM | ||
KUBERNETES | kubescape KUBERNETES_KUBESCAPE | ||
FANTOCHE | fantoche-lint PUPPET_PUPPET_LINT | ||
SERPENTE | cobra SERPENTE_LINT | ||
SERPENTE | cobrafmt SNAKEMAKE_SNAKEFMT | ||
TEKTON | tekton-lint TEKTON_TEKTON_LINT | ||
TERRAFORMA | pederneira TERRAFORM_TFINT | ||
TERRAFORMA | terraço TERRAFORM_TERRASCAN | ||
TERRAFORMA | terragrunhido TERRAFORM_TERRAGRUNT | ||
TERRAFORMA | terraform-fmt TERRAFORM_TERRAFORM_FMT |
Verificador de qualidade de código | Linter | Adicional | |
---|---|---|---|
COPIAR | jscpd COPYPASTE_JSCPD | ||
REPOSITÓRIO | chequev REPOSITÓRIO_CHECKOV | ||
REPOSITÓRIO | devskim REPOSITÓRIO_DEVSKIM | ||
REPOSITÓRIO | poeira REPOSITÓRIO_DUSTILOCK | ||
REPOSITÓRIO | git_diff REPOSITÓRIO_GIT_DIFF | ||
REPOSITÓRIO | vazamentos REPOSITÓRIO_GITLEAKS | ||
REPOSITÓRIO | raiva REPOSITÓRIO_GRYPE | ||
REPOSITÓRIO | kics REPOSITÓRIO_KICS | ||
REPOSITÓRIO | ls-lint REPOSITÓRIO_LS_LINT | ||
REPOSITÓRIO | secretlint REPOSITÓRIO_SECRETLINT | ||
REPOSITÓRIO | semgrep REPOSITÓRIO_SEMGREP | ||
REPOSITÓRIO | peneirar REPOSITÓRIO_SYFT | ||
REPOSITÓRIO | curiosidade REPOSITÓRIO_TRIVY | ||
REPOSITÓRIO | curiosidades-sbom REPOSITÓRIO_TRIVY_SBOM | ||
REPOSITÓRIO | porco-trufa REPOSITÓRIO_TRUFFLEHOG | ||
SOLETRAR | feitiço SPELL_CSPELL | ||
SOLETRAR | proselint SPELL_PROSELINT | ||
SOLETRAR | vale SPELL_VALE | ||
SOLETRAR | lichia SPELL_LYCHEE |
Basta executar npx mega-linter-runner --install
na raiz do seu repositório e responder às perguntas, ele irá gerar arquivos de configuração prontos para uso para o MegaLinter :)
Os exemplos de instruções a seguir usam a versão estável mais recente do MegaLinter ( v8 , sempre correspondendo à versão mais recente)
oxsecurity/megalinter:v8
oxsecurity/megalinter@v8
Você também pode usar a versão beta (correspondente ao conteúdo do branch principal)
oxsecurity/megalinter:beta
oxsecurity/megalinter@beta
.github/workflows/mega-linter.yml
NOTAS:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
em seu fluxo de trabalho, o MegaLinter marcará o status de cada execução de linter individual na seção Verificações de uma solicitação pull. Sem isso, você verá apenas o status geral da execução completa. Não há necessidade de definir o segredo do GitHub , pois ele é definido automaticamente pelo GitHub, ele só precisa ser passado para a ação.GITHUB_TARGET_URL
existir. Em seu repositório você deve ter uma pasta .github/workflows
com GitHub Action semelhante a abaixo:
.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]
Crie ou atualize o arquivo .gitlab-ci.yml
na raiz do seu repositório
# 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
Crie um token de acesso Gitlab e defina-o em uma variável GITLAB_ACCESS_TOKEN_MEGALINTER nas variáveis mascaradas CI/CD do projeto. Certifique-se de que seu token (por exemplo, se for um token de projeto) seja a função apropriada para comentar uma solicitação de mesclagem (pelo menos desenvolvedor).
Nossos amigos da R2Devops empacotaram um fluxo de trabalho Gitlab-CI MegaLinter em seu mercado de modelos de código aberto e podem postar resultados do MegaLinter em relatórios de qualidade de código Gitlab!
Use o seguinte modelo YAML do Azure Pipelines
Você pode configurar uma política de ramificação de validação de build em um único repositório ou em todos os repositórios. Se você configurar todos os repositórios, seu pipeline será armazenado em um repositório central.
Adicione o seguinte a um arquivo azure-pipelines.yaml
em seu repositório 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
Adicione o seguinte a um arquivo azure-pipelines.yaml
em um repositório separado, por exemplo, repositório '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 se beneficiar dos comentários do Pull Request, siga as instruções de configuração
Você também pode seguir este tutorial detalhado de DonKoning
Crie um arquivo bitbucket-pipelines.yml
no diretório raiz do seu repositório
Copie e cole o modelo a seguir ou adicione a etapa ao pipeline existente.
image : atlassian/default-image:3
pipelines :
default :
- parallel :
- step :
name :
Expandir