MegaLinter adalah alat Sumber Terbuka untuk alur kerja CI/CD yang menganalisis konsistensi kode , IAC , konfigurasi , dan skrip Anda di sumber repositori Anda, untuk memastikan semua sumber proyek Anda bersih dan diformat apa pun IDE/kotak alat yang digunakan oleh pengembangnya , didukung oleh OX Security .
Mendukung 62 bahasa, 23 format, 20 format perkakas dan siap digunakan , sebagai tindakan GitHub atau sistem CI apa pun, sangat dapat dikonfigurasi dan gratis untuk semua penggunaan .
MegaLinter memiliki integrasi asli dengan banyak alat CI/CD utama di pasar.
Tingkatkan ke MegaLinter v8 :)
Sebelum masuk ke bawah, lihat Situs Web Dokumentasi Online yang memiliki navigasi pengguna jauh lebih mudah daripada README ini
Proyek harus berisi kode yang bersih, untuk menghindari hutang teknis , yang membuat pemeliharaan evolusioner menjadi lebih sulit dan memakan waktu .
Dengan menggunakan pemformat kode dan linter kode , Anda memastikan bahwa basis kode Anda lebih mudah dibaca dan menghormati praktik terbaik , mulai dari awal hingga setiap langkah siklus hidup proyek
Tidak semua pengembang memiliki kebiasaan baik untuk menggunakan linter dalam IDE mereka, sehingga peninjauan kode menjadi lebih sulit dan lebih lama untuk diproses
Dengan menggunakan MegaLinter , Anda akan menikmati manfaat berikut untuk Anda dan tim Anda:
npx mega-linter-runner --install
untuk menghasilkan file konfigurasi (Anda memerlukan node.js untuk diinstal)Catatan :
super-linter/super-linter@v3
dengan oxsecurity/megalinter@v8
di file GitHub Action YML Anda, seperti pada PR ini)Semua linter terintegrasi dalam image buruh pelabuhan MegaLinter, yang sering ditingkatkan dengan versi terbarunya
Bahasa | Linter | Tambahan | |
---|---|---|---|
PESTA | bash-exec BASH_EXEC | ||
PESTA | periksa cangkang BASH_SHELLCHECK | ||
PESTA | shfmt BASH_SHFMT | ||
C | cpplint C_CPPLINT | ||
C | format dentang C_CLANG_FORMAT | ||
CLOJURE | clj-kondo CLOJURE_CLJ_KODO | ||
CLOJURE | gaya klasik CLOJURE_CLJSTYLE | ||
KOPI | kopilint KOPI_COFFEELINT | ||
C++ (CPP) | cpplint CPP_CPPLINT | ||
C++ (CPP) | format dentang CPP_CLANG_FORMAT | ||
C# (CSHARP) | format dotnet CSHARP_DOTNET_FORMAT | ||
C# (CSHARP) | lebih tajam CSHARP_CSHARPIER | ||
C# (CSHARP) | roslynator CSHARP_ROSLYNATOR | ||
ANAK PANAH | penganalisis dart DART_DARTANALYZER | ||
PERGI | golangci-lint GO_GOLANGCI_LINT | ||
PERGI | membangkitkan GO_REVIVE | ||
asyik | npm-groovy-lint GROOVY_NPM_GROOVY_LINT | ||
JAWA | gaya periksa JAVA_CHECKSTYLE | ||
JAWA | pmd JAVA_PMD | ||
JAVASCRIPT | eslint JAVASCRIPT_ES | ||
JAVASCRIPT | standar JAVASCRIPT_STANDARD | ||
JAVASCRIPT | lebih cantik JAVASCRIPT_PRETTIER | ||
BEJ | eslint JSX_ESLINT | ||
KOTLIN | ktlint KOTLIN_KTLINT | ||
KOTLIN | mendeteksi KOTLIN_DETEKT | ||
LUA | luacheck LUA_LUACHECK | ||
LUA | selene LUA_SELENE | ||
LUA | gaya LUA_STYLUA | ||
MEMBUAT FILE | pemeriksaan MAKEFILE_CHECKMAKE | ||
PERL | perlcritic PERL_PERLCRITIC | ||
PHP | phpcs PHP_PHPCS | ||
PHP | phpstan PHP_PHPSTAN | ||
PHP | mazmur PHP_PSALM | ||
PHP | phplint PHP_PHPLINT | ||
PHP | pemecah masalah php-cs PHP_PHPCSFIXER | ||
KEKUATAN | PowerShell POWERSHELL_POWERSHELL | ||
KEKUATAN | powershell_formatter POWERSHELL_POWERSHELL_FORMATTER | ||
PYTHON | tiang PYTHON_PYLINT | ||
PYTHON | hitam PYTHON_BLACK | ||
PYTHON | serpihan8 PYTHON_FLAKE8 | ||
PYTHON | memilah PYTHON_ISORT | ||
PYTHON | bandit PYTHON_BANDIT | ||
PYTHON | mypy PYTHON_MYPY | ||
PYTHON | api PYTHON_PYRIGHT | ||
PYTHON | ruff PYTHON_RUFF | ||
R | serat R_LINTR | ||
RAKU | raku RAKU_RAKU | ||
RUBI | rubocop RUBY_RUBOCOP | ||
KARAT | tajam RUST_CLIPPY | ||
TENAGA PENJUALAN | sfdx-scanner-apex SALESFORCE_SFDX_SCANNER_APEX | ||
TENAGA PENJUALAN | sfdx-scanner-aura SALESFORCE_SFDX_SCANNER_AURA | ||
TENAGA PENJUALAN | sfdx-scanner-lwc SALESFORCE_SFDX_SCANNER_LWC | ||
TENAGA PENJUALAN | pemindai aliran petir SALESFORCE_LIGHTNING_FLOW_SCANNER | ||
SKALA | scalafix SCALA_SCALAFIX | ||
SQL | sqlfluff SQL_SQLFLUFF | ||
SQL | tsqllint SQL_TSQLLINT | ||
CEPAT | garis cepat SWIFT_SWIFTLINT | ||
TSX | eslint TSX_ESLINT | ||
KETIK | eslint TYPESCRIPT_ES | ||
KETIK | ts-standar TYPESCRIPT_STANDARD | ||
KETIK | lebih cantik TYPESCRIPT_PRETTIER | ||
Visual Basic.NET (VBDOTNET) | format dotnet VBDOTNET_DOTNET_FORMAT |
Format | Linter | Tambahan | |
---|---|---|---|
CSS | gayalint CSS_STYLELINT | ||
ENV | dotenv-linter ENV_DOTENV_LINTER | ||
GRAFIK | graphql-skema-linter GRAPHQL_GRAPHQL_SCHEMA_LINTER | ||
HTML | DJlint HTML_DJLINT | ||
HTML | htmlpetunjuk HTML_HTML PETUNJUK | ||
JSON | jsonlint JSON_JSONLINT | ||
JSON | eslint-plugin-jsonc JSON_ESLINT_PLUGIN_JSONC | ||
JSON | v8r JSON_V8R | ||
JSON | lebih cantik JSON_PRETTIER | ||
JSON | npm-package-json-lint JSON_NPM_PACKAGE_JSON_LINT | ||
GETAH | chktex LATEX_CHKTEX | ||
PENURUNAN HARGA | penurunan harga MARKDOWN_MARKDOWNLINT | ||
PENURUNAN HARGA | komentar-lint MARKDOWN_REMARK_LINT | ||
PENURUNAN HARGA | pemeriksaan tautan penurunan harga MARKDOWN_MARKDOWN_LINK_CHECK | ||
PENURUNAN HARGA | pemformat tabel penurunan harga MARKDOWN_MARKDOWN_TABLE_FORMATTER | ||
PROTOBUF | protolint PROTOBUF_PROTOLINT | ||
Pertama | serat pertama RST_RST_LINT | ||
Pertama | pemeriksaan pertama RST_RSTCHECK | ||
Pertama | pertama RST_RSTFMT | ||
XML | xmllint XML_XMLINT | ||
YAML | lebih cantik YAML_PRETTIER | ||
YAML | yamllint YAML_YAMLLINT | ||
YAML | v8r YAML_V8R |
Format perkakas | Linter | Tambahan | |
---|---|---|---|
TINDAKAN | garis tindakan ACTION_ACTIONLINT | ||
MUNGKIN | serat yang mungkin ANSIBLE_ANSIBLE_LINT | ||
API | spektral API_SPECTRAL | ||
LENGAN | lengan-ttk ARM_ARM_TTK | ||
BICEP | bisep_linter BICEP_BICEP_LINTER | ||
CLOUDFORMASI | cfn-lint CLOUDFORMATION_CFN_LINT | ||
FILE DOCKER | hadolint DOCKERFILE_HADOLINT | ||
KONFIGURASI EDITOR | editorconfig-pemeriksa EDITORCONFIG_EDITORCONFIG_CHECKER | ||
KETIMUN | ketimun-serat GHERKIN_GHERKIN_LINT | ||
KUBERNET | kubeconform KUBERNETES_KUBECONFORM | ||
KUBERNET | kemudi KUBERNETES_HELM | ||
KUBERNET | kubescape KUBERNETES_KUBESCAPE | ||
WAYANG | serat boneka PUPPET_PUPPET_LINT | ||
PEMBUAT ULAR | pembuat ular SNAKEMAKE_LINT | ||
PEMBUAT ULAR | ularfmt SNAKEMAKE_SNAKEFMT | ||
Tekton | tekton-lint TEKTON_TEKTON_LINT | ||
TERRAFORM | batu api TERRAFORM_TFLINT | ||
TERRAFORM | terasana TERRAFORM_TERRASCAN | ||
TERRAFORM | terragrunt TERRAFORM_TERRAGRUNT | ||
TERRAFORM | terraform-fmt TERRAFORM_TERRAFORM_FMT |
Pemeriksa kualitas kode | Linter | Tambahan | |
---|---|---|---|
SALINAN | jscpd COPYPASTE_JSCPD | ||
GUDANG | periksa REPOSITORY_CHECKOV | ||
GUDANG | devskim REPOSITORY_DEVSKIM | ||
GUDANG | kunci debu REPOSITORY_DUSTILOCK | ||
GUDANG | git_diff REPOSITORY_GIT_DIFF | ||
GUDANG | gitleaks REPOSITORY_GITLEAKS | ||
GUDANG | mengeluh REPOSITORY_GRYPE | ||
GUDANG | kiks REPOSITORY_KICS | ||
GUDANG | ls-lint REPOSITORY_LS_LINT | ||
GUDANG | rahasia REPOSITORY_SECRETLINT | ||
GUDANG | segrep REPOSITORY_SEMGREP | ||
GUDANG | syft REPOSITORY_SYFT | ||
GUDANG | sepele REPOSITORY_TRIVY | ||
GUDANG | trivy-sbom REPOSITORY_TRIVY_SBOM | ||
GUDANG | babi truffle REPOSITORY_TRUFFLEHOG | ||
MENGEJA | mantra SPELL_CSPELL | ||
MENGEJA | proselint SPELL_PROSELINT | ||
MENGEJA | lembah SPELL_VALE | ||
MENGEJA | leci SPELL_LYCHEE |
Jalankan saja npx mega-linter-runner --install
di root repositori Anda dan jawab pertanyaan, itu akan menghasilkan file konfigurasi siap pakai untuk MegaLinter :)
Contoh instruksi berikut menggunakan versi stabil MegaLinter terbaru ( v8 , selalu sesuai dengan rilis terbaru)
oxsecurity/megalinter:v8
oxsecurity/megalinter@v8
Anda juga dapat menggunakan versi beta (sesuai dengan konten cabang utama)
oxsecurity/megalinter:beta
oxsecurity/megalinter@beta
.github/workflows/mega-linter.yml
CATATAN:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
dalam alur kerja Anda, maka MegaLinter akan menandai status setiap linter yang dijalankan di bagian Pemeriksaan pada permintaan penarikan. Tanpa ini, Anda hanya akan melihat status keseluruhan dari proses penuh. Tidak perlu mengatur Rahasia GitHub karena sudah diatur secara otomatis oleh GitHub, hanya perlu diteruskan ke tindakan.GITHUB_TARGET_URL
ada. Di repositori Anda, Anda harus memiliki folder .github/workflows
dengan GitHub Action seperti di bawah ini:
.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]
Buat atau perbarui file .gitlab-ci.yml
di root repositori Anda
# 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
Buat token akses Gitlab dan tentukan dalam variabel GITLAB_ACCESS_TOKEN_MEGALINTER dalam variabel bertopeng CI/CD proyek. Pastikan token Anda (misalnya jika token proyek) memiliki peran yang sesuai untuk mengomentari permintaan penggabungan (setidaknya pengembang).
Teman-teman kami di R2Devops telah mengemas alur kerja Gitlab-CI MegaLinter di pasar templat sumber terbuka mereka, dan dapat memposting hasil MegaLinter di Laporan Kualitas Kode Gitlab!
Gunakan templat YAML Azure Pipelines berikut
Anda dapat mengonfigurasi kebijakan cabang validasi build terhadap satu repositori atau di semua repositori. Jika Anda mengonfigurasi di semua repositori, maka pipeline Anda disimpan di repositori pusat.
Tambahkan yang berikut ini ke file azure-pipelines.yaml
dalam repositori kode Anda:
# 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
Tambahkan yang berikut ini ke file azure-pipelines.yaml
dalam repositori terpisah, misalnya repositori '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
Untuk memanfaatkan komentar Permintaan Tarik, ikuti petunjuk konfigurasi
Anda juga dapat mengikuti tutorial mendetail dari DonKoning ini
Buat file bitbucket-pipelines.yml
di direktori root repositori Anda
Salin dan tempel templat berikut atau tambahkan langkah tersebut ke alur Anda yang sudah ada.
image : atlassian/default-image:3
pipelines :
default :
- parallel :
- step :
name :
Memperluas