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_SECRETLINTINT | ||
資料庫 | 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 :
展開