MegaLinter 是一款用于CI/CD 工作流程的开源工具,可分析存储库源中的代码、 IAC 、配置和脚本的一致性,以确保所有项目源都是干净且格式化的,无论开发人员使用什么 IDE/工具箱,由OX Security提供支持。
支持62 种语言、 23 种格式、 20 种工具格式,开箱即用,作为 GitHub 操作或任何 CI 系统,高度可配置且免费供所有用途。
MegaLinter 与市场上许多主要 CI/CD 工具进行了本机集成。
升级到 MegaLinter v8 :)
在继续阅读下文之前,请参阅在线文档网站,该网站的用户导航比本自述文件要容易得多
项目需要包含干净的代码,以避免技术债务,这使得渐进式维护变得更加困难且耗时。
通过使用代码格式化程序和代码检查器,您可以确保您的代码库更易于阅读并遵循最佳实践,从项目生命周期的启动到每个步骤。
并非所有开发人员都有在 IDE 中使用 linter 的好习惯,这使得代码审查变得更加困难且处理时间更长
通过使用MegaLinter ,您和您的团队将享受到以下好处:
npx mega-linter-runner --install
生成配置文件(需要安装node.js)注意事项:
super-linter/super-linter@v3
替换为oxsecurity/megalinter@v8
,如本 PR 所示)所有 linter 都集成在 MegaLinter docker 镜像中,该镜像经常升级为最新版本
语言 | 短绒 | 额外的 | |
---|---|---|---|
巴什 | bash执行 BASH_执行 | ||
巴什 | 外壳检查 BASH_SHELLCHECK | ||
巴什 | 转移 BASH_SHFMT | ||
C | cplint C_CPPLINT | ||
C | clang 格式 C_CLANG_FORMAT | ||
克罗朱尔 | CLJ近藤 CLOJURE_CLJ_KONDO | ||
克罗朱尔 | CLJ风格 CLOJURE_CLJSTYLE | ||
咖啡 | 咖啡棉 COFFEE_COFFEELINT | ||
C++ (CPP) | cplint CPP_CPPLINT | ||
C++ (CPP) | clang 格式 CPP_CLANG_FORMAT | ||
C# (CSHARP) | 点网格式 CSHARP_DOTNET_FORMAT | ||
C# (CSHARP) | 夏皮尔 CSHARP_CSHARPIER | ||
C# (CSHARP) | 罗斯林纳特 CSHARP_ROSLYNATOR | ||
镖 | 达塔分析仪 DART_DARTANALYZER | ||
去 | 戈朗吉林特 GO_GOLANGCI_LINT | ||
去 | 复活 GO_REVIVE | ||
格罗维 | npm-groovy-lint GROOVY_NPM_GROOVY_LINT | ||
爪哇 | 格子风格 JAVA_CHECKSTYLE | ||
爪哇 | PMD JAVA_PMD | ||
脚本语言 | 埃斯林特 JAVASCRIPT_ES | ||
脚本语言 | 标准 JAVASCRIPT_STANDARD | ||
脚本语言 | 更漂亮 JAVASCRIPT_PRETTIER | ||
JSX | 埃斯林特 JSX_ESLINT | ||
科特林 | 克特林特 KOTLIN_KTLINT | ||
科特林 | 检测 KOTLIN_DETEKT | ||
路亚 | 卢阿检查 LUA_LUACHECK | ||
路亚 | 硒 LUA_SELENE | ||
路亚 | 手写笔 LUA_STYLUA | ||
生成文件 | 支票 MAKEFILE_CHECKMAKE | ||
PERL | 批评家 PERL_PERLCRITIC | ||
PHP | phpcs PHP_PHPCS | ||
PHP | php斯坦 PHP_PHPSTAN | ||
PHP | 诗篇 PHP_PSLM | ||
PHP | phplint PHP_PHPLINT | ||
PHP | php-cs-修复程序 PHP_PHPCSFIXER | ||
电源外壳 | 电源外壳 POWERSHELL_POWERSHELL | ||
电源外壳 | powershell_formatter POWERSHELL_POWERSHELL_FORMATTER | ||
PYTHON | 皮林特 PYTHON_PYLINT | ||
PYTHON | 黑色的 蟒蛇_黑色 | ||
PYTHON | 薄片8 PYTHON_FLAKE8 | ||
PYTHON | 伊索特 PYTHON_ISORT | ||
PYTHON | 土匪 PYTHON_BANDIT | ||
PYTHON | 米皮 PYTHON_MYPY | ||
PYTHON | 皮赖特 PYTHON_PYRIGHT | ||
PYTHON | 领子 蟒蛇_拉夫 | ||
右 | 林特尔 R_LINTR | ||
乐库 | 乐 RAKU_RAKU | ||
红宝石 | 鲁博科普 RUBY_RUBOCOP | ||
锈 | 剪辑的 RUST_CLIPPY | ||
销售队伍 | sfdx-扫描仪-apex SALESFORCE_SFDX_SCANNER_APEX | ||
销售队伍 | sfdx-扫描仪-光环 SALESFORCE_SFDX_SCANNER_AURA | ||
销售队伍 | sfdx-扫描仪-lwc SALESFORCE_SFDX_SCANNER_LWC | ||
销售队伍 | 闪电流扫描仪 SALESFORCE_LIGHTNING_FLOW_SCANNER | ||
斯卡拉 | 斯卡拉菲克斯 SCALA_SCALAFIX | ||
SQL | sqlfluff SQL_SQLFLUFF | ||
SQL | tsqllint SQL_TSQLLINT | ||
迅速 | 斯威夫特林特 SWIFT_SWIFTLINT | ||
多伦多证券交易所 | 埃斯林特 TSX_ESLINT | ||
打字稿 | 埃斯林特 TYPESCRIPT_ES | ||
打字稿 | ts-标准 TYPESCRIPT_STANDARD | ||
打字稿 | 更漂亮 TYPESCRIPT_PRETTIER | ||
Visual Basic .NET (VBDOTNET) | 点网格式 VBDOTNET_DOTNET_FORMAT |
格式 | 短绒 | 额外的 | |
---|---|---|---|
CSS | 风格林特 CSS_STYLINT | ||
环境电压 | dotenv-linter ENV_DOTENV_LINTER | ||
图形查询语言 | graphql-schema-linter GRAPHQL_GRAPHQL_SCHEMA_LINTER | ||
超文本标记语言 | DJ林特 HTML_DJLINT | ||
超文本标记语言 | html提示 HTML_HTMLHINT | ||
JSON | jsonlint JSON_JSONLINT | ||
JSON | eslint-插件-jsonc JSON_ESLINT_PLUGIN_JSONC | ||
JSON | v8r JSON_V8R | ||
JSON | 更漂亮 JSON_PRETTIER | ||
JSON | npm-package-json-lint JSON_NPM_PACKAGE_JSON_LINT | ||
乳胶 | chktex LATEX_CHKTEX | ||
降价 | 降价林特 MARKDOWN_MARKDOWNLINT | ||
降价 | 备注-lint MARKDOWN_REMARK_LINT | ||
降价 | 降价链接检查 MARKDOWN_MARKDOWN_LINK_CHECK | ||
降价 | Markdown 表格格式化程序 MARKDOWN_MARKDOWN_TABLE_FORMATTER | ||
协议缓冲区 | 原石 PROTOBUF_PROTOLINT | ||
快速恢复时间 | 首个 lint RST_RST_LINT | ||
快速恢复时间 | 首次检查 RST_RSTCHECK | ||
快速恢复时间 | rstfmt RST_RSTFMT | ||
XML | xmllint XML_XMLLINT | ||
YAML | 更漂亮 YAML_PRETTIER | ||
YAML | 亚姆林特 YAML_YAMLLINT | ||
YAML | v8r YAML_V8R |
工装形式 | 短绒 | 额外的 | |
---|---|---|---|
行动 | 行动林特 ACTION_ACTIONLINT | ||
ANSIBLE | ansible-lint ANSIBLE_ANSIBLE_LINT | ||
应用程序编程接口 | 光谱 API_光谱 | ||
手臂 | ARM-TTK ARM_ARM_TTK | ||
BICEP | 二头肌绒毛 BICEP_BICEP_LINTER | ||
云形成 | cfn-lint CLOUDFORMATION_CFN_LINT | ||
Dockerfile | 哈德林特 DOCKERFILE_HADOLINT | ||
编辑器配置 | 编辑器配置检查器 EDITORCONFIG_EDITORCONFIG_CHECKER | ||
小黄瓜 | 小黄瓜皮 GHERKIN_GHERKIN_LINT | ||
库伯内特斯 | 库贝一致 KUBERNETES_KUBECONFORM | ||
库伯内特斯 | 舵 KUBERNETES_HELM | ||
库伯内特斯 | 库贝景观 KUBERNETES_KUBESCAPE | ||
木偶 | 木偶皮棉 PUPPET_PUPPET_LINT | ||
蛇形 | 蛇形 SNAKEMAKE_LINT | ||
蛇形 | 蛇形 SNAKEMAKE_SNAKEFMT | ||
泰克顿 | 泰克顿林特 TEKTON_TEKTON_LINT | ||
地形 | 特弗林特 TERRAFORM_TFLINT | ||
地形 | 特拉扫描 TERRAFORM_TERRASCAN | ||
地形 | 特拉格伦特 TERRAFORM_TERRAGRUNT | ||
地形 | terraform-fmt TERRAFORM_TERRAFORM_FMT |
代码质量检查器 | 短绒 | 额外的 | |
---|---|---|---|
复制粘贴 | jscpd 复制粘贴_JSCPD | ||
资料库 | 切科夫 REPOSITORY_CHECKOV | ||
资料库 | 德夫斯基姆 REPOSITORY_DEVSKIM | ||
资料库 | 防尘锁 REPOSITORY_DUSTILOCK | ||
资料库 | git_diff REPOSITORY_GIT_DIFF | ||
资料库 | 吉特泄漏 REPOSITORY_GITLEAKS | ||
资料库 | 格赖佩 存储库_GRYPE | ||
资料库 | 基克斯 存储库_KICS | ||
资料库 | ls-lint REPOSITORY_LS_LINT | ||
资料库 | 密林特 REPOSITORY_SECRETLINT | ||
资料库 | semgrep REPOSITORY_SEMGREP | ||
资料库 | 系统 存储库_SYFT | ||
资料库 | 琐碎的 存储库_TRIVY | ||
资料库 | 特里维·斯博姆 REPOSITORY_TRIVY_SBOM | ||
资料库 | 松露猪 REPOSITORY_TRUFFLEHOG | ||
拼写 | 拼写 SPELL_CSPELL | ||
拼写 | 普塞林特 SPELL_PROSELINT | ||
拼写 | 谷 法术值 | ||
拼写 | 荔枝 SPELL_LYCHEE |
只需在存储库的根目录运行npx mega-linter-runner --install
并回答问题,它将生成可供使用的 MegaLinter 配置文件:)
以下说明示例使用最新的 MegaLinter 稳定版本( v8 ,始终对应最新版本)
oxsecurity/megalinter:v8
oxsecurity/megalinter@v8
也可以使用beta版本(对应主分支的内容)
oxsecurity/megalinter:beta
oxsecurity/megalinter@beta
.github/workflows/mega-linter.yml
的新文件笔记:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
,则MegaLinter将标记拉取请求的检查部分中运行的每个单独 linter 的状态。如果没有这个,您将只能看到完整运行的总体状态。无需设置GitHub Secret,因为它是由 GitHub 自动设置的,只需将其传递给操作即可。GITHUB_TARGET_URL
环境变量存在,则可以在 Github Pull Request 上获得状态。在您的存储库中,您应该有一个.github/workflows
文件夹,其中包含类似于以下内容的GitHub Action:
.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]
在存储库的根目录中创建或更新.gitlab-ci.yml
文件
# 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
创建一个 Gitlab 访问令牌并将其定义在项目 CI/CD 屏蔽变量中的变量GITLAB_ACCESS_TOKEN_MEGALINTER中。确保您的令牌(例如,如果是项目令牌)作为评论合并请求的适当角色(至少是开发人员)。
我们 R2Devops 的朋友在他们的开源模板市场上打包了 Gitlab-CI MegaLinter 工作流程,它可以在 Gitlab 代码质量报告中发布 MegaLinter 结果!
使用以下 Azure Pipelines YAML 模板
您可以针对单个存储库或跨所有存储库配置构建验证分支策略。如果您跨所有存储库进行配置,那么您的管道将存储在中央存储库中。
将以下内容添加到代码存储库中的azure-pipelines.yaml
文件中:
# 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
将以下内容添加到单独存储库(例如“MegaLinter”存储库)内的azure-pipelines.yaml
文件中:
# 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
要从 Pull Request 评论中受益,请遵循配置说明
您还可以按照 DonKoning 的详细教程进行操作
在存储库的根目录中创建bitbucket-pipelines.yml
文件
复制并粘贴以下模板或将该步骤添加到现有管道中。
image : atlassian/default-image:3
pipelines :
default :
- parallel :
- step :
name :
展开