[System]
You are a helpful assistant that answers strictly in JSON. Here's the JSON schema you must adhere to:
<schema>
{"$id":"http://github.com/oxsecurity/megalinter-descriptor.json","$schema":"http://json-schema.org/draft-07/schema","additionalProperties":false,"definitions":{"command_info":{"description":"Command information","properties":{"command":{"examples":["npm run test","echo \"This is a custom command\""],"title":"Bash command to run","type":"string"},"continue_if_failed":{"Description":"If command fails, continue MegaLinter process or not","default":true,"title":"Continue if failed","type":"boolean"},"cwd":{"enum":["root","workspace"],"examples":["root","workspace"],"title":"Folder where to run the command","type":"string"}},"required":[],"title":"Command","type":"object"},"enum_flavors":{"enum":["all_flavors","all","c_cpp","ci_light","cupcake","documentation","dotnet","dotnetweb","formatters","go","java","javascript","php","python","ruby","rust","salesforce","security","swift","terraform"],"type":"string"},"linter_command_info":{"$ref":"#/definitions/command_info","description":"Command information","properties":{"run_after_linters":{"default":false,"title":"Process command after running linters","type":"boolean"},"run_before_linters":{"default":false,"title":"Process command before running linters","type":"boolean"}},"required":[],"title":"Command","type":"object"}},"description":"Descriptor definition for MegaLinter","properties":{"active_only_if_file_found":{"$id":"#/properties/active_only_if_file_found","description":"Names of the config files to be found (at least one), else descriptor will be deactivated. Search in workspace, linter rules path, and files_sub_directory","examples":[[".editorconfig",".eslintrc.json"]],"items":{"type":"string"},"title":"Active if one of file names found","type":"array"},"descriptor_flavors":{"$id":"#/properties/descriptor_flavors","default":[],"description":"MegaLinter flavors matching this descriptor","examples":[["all_flavors","java","php"]],"items":{"$ref":"#/definitions/enum_flavors"},"title":"Flavors","type":"array"},"descriptor_flavors_exclude":{"$id":"#/properties/descriptor_flavors_exclude","default":[],"description":"MegaLinter flavors that must not contain this descriptor","examples":[["all_flavors","java","php"]],"items":{"$ref":"#/definitions/enum_flavors"},"title":"Flavors","type":"array"},"descriptor_id":{"$id":"#/properties/descriptor_id","default":"","description":"Uppercase unique identifier for the language, tooling format or identifier","examples":["PYTHON","XML","OPENAPI"],"title":"Descriptor unique identifier","type":"string"},"descriptor_label":{"$id":"#/properties/descriptor_label","default":"","description":"Label for descriptor documentation, if different from Id. Ex: C++ for CPP","examples":["C++","Visual Basic .NET"],"title":"Descriptor label","type":"string"},"descriptor_type":{"$id":"#/properties/descriptor_type","default":"","description":"Descriptor type: language, format or tooling format","enum":["language","format","tooling_format","other"],"examples":["language","format","tooling_format","other"],"title":"Descriptor type","type":"string"},"file_contains_regex":{"$id":"#/properties/file_contains_regex","default":[],"description":"Regular expression list for filtering files by their content","examples":[["AWSTemplateFormatVersion","(AWS|Alexa|Custom)::"]],"items":{"type":"string"},"title":"File content regex filters","type":"array"},"file_contains_regex_extensions":{"$id":"#/properties/file_contains_regex_extensions","default":[],"description":"If file_contains_regex is set, use this property to filter extensions of the files that will be checked","examples":[["",".json"]],"items":{"type":"string"},"title":"File contain regex extensions filters","type":"array"},"file_extensions":{"$id":"#/properties/file_extensions","default":[],"description":"File extension filters. Empty list excludes all files. Can be overridden at linter level","examples":[[".py",""]],"items":{"type":"string"},"title":"Allowed file extensions","type":"array"},"file_names_not_ends_with":{"$id":"#/properties/file_names_not_ends_with","default":[],"description":"List of strings to filter the files according to their end of file name","examples":[["vault.yml","galaxy.xml"]],"items":{"type":"string"},"title":"Filter on end of file name","type":"array"},"file_names_regex":{"$id":"#/properties/file_names_regex","default":[],"description":"Regular expression list for filtering files by their base names using regex full match. Empty list includes all files. Can be overridden at linter level","examples":[["Dockerfile(-.+)?","Jenkinsfile"]],"items":{"type":"string"},"title":"File name regex filters","type":"array"},"files_sub_directory":{"$id":"#/properties/files_sub_directory","description":"Set when a linter only lints a sub-directory","examples":[["ansible","kubernetes"]],"title":"Files sub-directory","type":"string"},"install":{"$id":"#/properties/install","default":{},"description":"List of apk, dockerfile instructions, npm/pip/gem packages required to use the descriptor linters","examples":[{"apk":["openjdk11"]},{"dockerfile":["ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk","ENV PATH=\"$JAVA_HOME/bin:${PATH}\""]},{"npm":["sfdx-cli"]}],"properties":{"apk":{"$id":"#/properties/install/properties/apk","description":"APK packages identifiers (with or without version)","examples":[["openjdk11"]],"items":{"$id":"#/properties/install/properties/apk/items","type":"string"},"title":"List of APK packages (Linux)","type":"array"},"cargo":{"$id":"#/properties/install/properties/cargo","description":"Cargo packages identifiers (with or without version)","items":{"$id":"#/properties/install/properties/cargo/items","type":"string"},"title":"List of Cargo packages (Rust)","type":"array"},"dockerfile":{"$id":"#/properties/install/properties/dockerfile","description":"Will be automatically integrated in generated Dockerfile","examples":[["ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk","ENV PATH=\"$JAVA_HOME/bin:${PATH}\""]],"items":{"$id":"#/properties/install/properties/dockerfile/items","type":"string"},"title":"List of Dockerfile instructions packages","type":"array"},"gem":{"$id":"#/properties/install/properties/gem","description":"GEM packages identifiers (with or without version)","items":{"$id":"#/properties/install/properties/gem/items","type":"string"},"title":"List of GEM packages (Ruby)","type":"array"},"npm":{"$id":"#/properties/install/properties/npm","description":"NPM packages identifiers (with or without version)","examples":[["sfdx-cli"]],"items":{"$id":"#/properties/install/properties/npm/items","type":"string"},"title":"List of NPM packages (Node.js)","type":"array"},"pip":{"$id":"#/properties/install/properties/pip","description":"PIP packages identifiers (with or without version)","items":{"$id":"#/properties/install/properties/pip/items","type":"string"},"title":"List of PIP packages (Python)","type":"array"}},"title":"Installation requirements","type":"object"},"lint_all_files":{"$id":"#/properties/lint_all_files","default":false,"description":"If set to true, this descriptor linters will always lint all files, undepending their name/extensions/content","title":"Lint all files","type":"boolean"},"lint_all_other_linters_files":{"$id":"#/properties/lint_all_other_linters_files","default":false,"description":"If set to true, this descriptor linters will lint one by one all files collected by all other linters","title":"Lint all other linters files","type":"boolean"},"linters":{"$id":"#/properties/linters","description":"List of linter definitions associated to the descriptor","examples":[[{"cli_config_extra_args":["--no-eslintrc","--no-ignore"],"config_file_name":".eslintrc.yml","examples":["eslint myfile.js","eslint -c .eslintrc.yml --no-eslintrc --no-ignore myfile.js"],"install":{"npm":["eslint","eslint-config-airbnb","eslint-config-prettier","eslint-plugin-jest","eslint-plugin-prettier","@babel/eslint-parser"]},"linter_banner_image_url":"https://d33wubrfki0l68.cloudfront.net/3b5ac7586466159bb6f237b633bfc4f5a8d5acf8/ee0a1/assets/img/posts/eslint-collective.png","linter_name":"eslint","linter_url":"https://eslint.org","name":"JAVASCRIPT_ES"},{"examples":["standard myfile.js"],"install":{"npm":["standard"]},"linter_banner_image_url":"https://github.com/standard/standard/raw/master/sticker.png","linter_name":"standard","linter_url":"https://github.com/standard/standard","name":"JAVASCRIPT_STANDARD"}]],"items":{"$id":"#/properties/linters/items","additionalProperties":false,"description":"Parameters defining behaviour and installation of a linter","examples":[{"cli_config_extra_args":["--no-eslintrc","--no-ignore"],"config_file_name":".eslintrc.yml","examples":["eslint myfile.js","eslint -c .eslintrc.yml --no-eslintrc --no-ignore myfile.js"],"install":{"npm":["eslint","eslint-config-airbnb","eslint-config-prettier","eslint-plugin-jest","eslint-plugin-prettier","babel-eslint"]},"linter_banner_image_url":"https://d33wubrfki0l68.cloudfront.net/3b5ac7586466159bb6f237b633bfc4f5a8d5acf8/ee0a1/assets/img/posts/eslint-collective.png","linter_name":"eslint","linter_url":"https://eslint.org","name":"JAVASCRIPT_ES"}],"properties":{"activation_rules":{"$id":"#/properties/linters/items/properties/activation_rules","default":[],"description":"List of rules to check to activate linter","examples":[[{"default_value":"standard","expected_value":"prettier","type":"variable","variable":"JAVASCRIPT_DEFAULT_STYLE"}]],"items":{"type":"object"},"title":"Activation rules","type":"array"},"active_only_if_file_found":{"$id":"#/properties/linters/items/properties/active_only_if_file_found","description":"Names of the config files to be found (at least one), else descriptor will be deactivated","examples":[[".editorconfig",".eslintrc.json"]],"items":{"type":"string"},"title":"Active if one of file names found","type":"array"},"can_output_sarif":{"$id":"#/properties/linters/items/properties/can_output_sarif","default":false,"description":"Shows if the linter is capable of output SARIF report within MegaLinter","title":"Can output SARIF","type":"boolean"},"class":{"$id":"#/properties/linters/items/properties/class","description":"If MegaLinter core is not enough, use a custom class inheriting from Linter class","examples":["CSpellLinter","DotnetFormatLinter","RakuLinter"],"title":"Linter custom python class name","type":"string"},"cli_config_arg_name":{"$id":"#/properties/linters/items/properties/cli_config_arg_name","title":"CLI configuration file argument name if different from -c","type":"string"},"cli_config_default_value":{"$id":"#/properties/linters/items/properties/cli_config_default_value","title":"Default value for config argument, in case it is not a file","type":"string"},"cli_config_extra_args":{"$id":"#/properties/linters/items/properties/cli_config_extra_args","default":[],"description":"When a configuration file is used with the linter CLI, send these additional arguments","examples":[["--no-eslintrc","--no-ignore"]],"items":{"type":"string"},"title":"Additional CLI arguments when config file is used","type":"array"},"cli_docker_args":{"$id":"#/properties/linters/items/properties/cli_docker_args","default":[],"description":"Arguments for docker run before image name","examples":[["-v","`pwd`:`pwd`","-w","`pwd`"]],"items":{"type":"string"},"title":"CLI docker run arguments","type":"array"},"cli_docker_image":{"$id":"#/properties/linters/items/properties/cli_docker_image","examples":["norionomura/swiftlint"],"title":"Name of the docker image to use for linting","type":"string"},"cli_docker_image_version":{"$id":"#/properties/linters/items/properties/cli_docker_image_version","default":"latest","description":"Version of the docker image to use for linting","examples":["0.42.0_swift-5.3.2"],"title":"Docker image version","type":"string"},"cli_executable":{"$id":"#/properties/linters/items/properties/cli_executable","description":"Override if different from linter_name","title":"CLI executable for linting request","type":"string"},"cli_executable_help":{"$id":"#/properties/linters/items/properties/cli_executable_help","description":"Override if different from cli executable used for linting","title":"CLI executable for help request","type":"string"},"cli_executable_version":{"$id":"#/properties/linters/items/properties/cli_executable_version","description":"Override if different from cli executable used for linting","title":"CLI executable for version request","type":"string"},"cli_help_arg_name":{"$id":"#/properties/linters/items/properties/cli_help_arg_name","title":"CLI Help argument name if different from -h","type":"string"},"cli_help_extra_args":{"$id":"#/properties/linters/items/properties/cli_help_extra_args","description":"When linter CLI is call for help, send these additional arguments","items":{"type":"string"},"title":"CLI help extra arguments","type":"array"},"cli_help_extra_commands":{"$id":"#/properties/linters/items/properties/cli_help_extra_commands","description":"When linter CLI is call for help, send these additional commands","items":{"type":"string"},"title":"CLI help extra commands","type":"array"},"cli_lint_errors_count":{"$id":"#/properties/linters/items/properties/cli_lint_errors_count","description":"Defines how to count errors from log file. regex_number, regex_count, regex_sum, total_lines or sarif","enum":["regex_number","regex_count","regex_sum","total_lines","sarif"],"examples":["regex_number","regex_count","regex_sum","total_lines","sarif"],"title":"Lint errors count mode","type":"string"},"cli_lint_errors_regex":{"$id":"#/properties/linters/items/properties/cli_lint_errors_regex","description":"Regex allowing to extract the number of errors from linter output logs","examples":["Issues found: (.*) in .* files"],"title":"Lint errors number regex","type":"string"},"cli_lint_extra_args":{"$id":"#/properties/linters/items/properties/cli_lint_extra_args","default":[],"description":"When linter CLI is call for linting, send these additional arguments before config args","items":{"type":"string"},"title":"CLI Lint extra arguments (before config args)","type":"array"},"cli_lint_extra_args_after":{"$id":"#/properties/linters/items/properties/cli_lint_extra_args_after","default":[],"description":"When linter CLI is call for linting, send these additional arguments after config args","items":{"type":"string"},"title":"CLI Lint extra arguments (after config args)","type":"array"},"cli_lint_fix_arg_name":{"$id":"#/properties/linters/items/properties/cli_lint_fix_arg_name","examples":["--fix","--format"],"title":"If the linter can format or fix, input here the related triggering argument","type":"string"},"cli_lint_fix_remove_args":{"$id":"#/properties/linters/items/properties/cli_lint_fix_remove_args","default":[],"description":"When linter CLI is call for fixing, remove these arguments","examples":[["--check"]],"items":{"type":"string"},"title":"CLI Lint arguments to remove if fix is activated","type":"array"},"cli_lint_ignore_arg_name":{"$id":"#/properties/linters/items/properties/cli_lint_ignore_arg_name","description":"If the linter can use an ignore file, input here the related argument","examples":["--secretlintignore","--ignore-path"],"title":"Path to ignore file argument name","type":"string"},"cli_lint_mode":{"$id":"#/properties/linters/items/properties/cli_lint_mode","default":"file","description":"Defines how the linter is called: file,  list_of_files, project","enum":["file","project","list_of_files"],"title":"Linting mode","type":"string"},"cli_lint_warnings_count":{"$id":"#/properties/linters/items/properties/cli_lint_warnings_count","description":"Defines how to count warnings from log file. regex_number, regex_count, regex_sum, total_lines or sarif","enum":["regex_number","regex_count","regex_sum","total_lines","sarif"],"examples":["regex_number","regex_count","regex_sum","total_lines","sarif"],"title":"Lint errors count mode","type":"string"},"cli_lint_warnings_regex":{"$id":"#/properties/linters/items/properties/cli_lint_warnings_regex","description":"Regex allowing to extract the number of warnings from linter output logs","examples":["Issues found: (.*) in .* files"],"title":"Lint warnings number regex","type":"string"},"cli_sarif_args":{"$id":"#/properties/linters/items/properties/cli_sarif_args","default":[],"description":"Arguments to generate SARIF output","examples":[["--format","sarif","--output","{{SARIF_OUTPUT_FILE}}"]],"items":{"type":"string"},"title":"CLI SARIF run arguments","type":"array"},"cli_version_arg_name":{"$id":"#/properties/linters/items/properties/cli_version_arg_name","title":"CLI version argument name if different from -v","type":"string"},"cli_version_extra_args":{"$id":"#/properties/linters/items/properties/cli_version_extra_args","description":"When linter CLI is call for version, send these additional arguments","items":{"type":"string"},"title":"CLI Version extra arguments","type":"array"},"config_file_name":{"$id":"#/properties/linters/items/properties/config_file_name","description":"An explanation about the purpose of this instance.","examples":[".eslintrc.yml",".markdown-lint.yml",".python-black"],"title":"Default file name for the linter configuration file","type":"string"},"deprecated":{"$id":"#/properties/linters/items/properties/deprecated","default":false,"description":"Shows if the linter is deprecated.","title":"Is the linter deprecated?","type":"boolean"},"deprecated_description":{"$id":"#/properties/linters/items/properties/deprecated_description","default":"","description":"Displays information on why it is deprecated and whether an alternative is available.","title":"Description of the deprecated linter","type":"string"},"descriptor_flavors":{"$id":"#/properties/linters/items/properties/descriptor_flavors","default":[],"description":"MegaLinter flavors matching this linter","examples":[["all_flavors","java","php"]],"items":{"$ref":"#/definitions/enum_flavors"},"title":"Flavors","type":"array"},"descriptor_flavors_exclude":{"$id":"#/properties/linters/items/properties/descriptor_flavors_exclude","default":[],"description":"MegaLinter flavors that must not contain this descriptor","examples":[["all_flavors","java","php"]],"items":{"$ref":"#/definitions/enum_flavors"},"title":"Flavors","type":"array"},"disabled":{"$id":"#/properties/linters/items/properties/disabled","default":false,"description":"Disable linter in MegaLinter next builds","title":"Disabled","type":"boolean"},"disabled_reason":{"$id":"#/properties/linters/items/properties/disabled_reason","default":false,"description":"Explanation about why the linter is disabled","title":"Disabled reason","type":"string"},"downgraded_reason":{"$id":"#/properties/linters/items/properties/downgraded_reason","default":false,"description":"Explanation about why the linter is downgraded","title":"Downgraded reason","type":"string"},"downgraded_version":{"$id":"#/properties/linters/items/properties/downgraded_version","default":false,"description":"Indicates that installation instructions does not use the latest release of the linter","title":"Downgraded version","type":"boolean"},"examples":{"$id":"#/properties/linters/items/properties/examples","description":"Please add an example with and without configuration file in the command. They will appear in documentation","examples":[["golangci-lint run myfile.go","golangci-lint run -c .golangci.yml myfile.go"],["eslint myfile.js","eslint -c .eslintrc.yml --no-eslintrc --no-ignore myfile.js"]],"items":{"type":"string"},"title":"Linter CLI commands examples","type":"array"},"file_extensions":{"$id":"#/properties/linters/items/file_extensions","default":[],"description":"File extension filters if different from the ones defined on parent descriptor","examples":[[".py",""]],"items":{"type":"string"},"title":"Allowed file extensions","type":"array"},"file_names_not_ends_with":{"$id":"#/properties/linters/items/file_names_not_ends_with","default":[],"description":"List of strings to filter the files according to their end of file name","examples":[["vault.yml","galaxy.xml"]],"items":{"type":"string"},"title":"Filter on end of file name","type":"array"},"file_names_regex":{"$id":"#/properties/linters/items/file_names_regex","default":[],"description":"Regular expression list for filtering files by their base names using regex full match. Empty list includes all files. Can be overridden at linter level","examples":[["Dockerfile(-.+)?","Jenkinsfile"]],"items":{"type":"string"},"title":"File name regex filters","type":"array"},"files_sub_directory":{"$id":"#/properties/linters/items/files_sub_directory","description":"Set when a linter only lints a sub-directory","examples":[["ansible","kubernetes"]],"title":"Files sub-directory","type":"string"},"help_command_return_code":{"$id":"#/properties/linters/items/properties/help_command_return_code","title":"CLI Help valid return code if different from 0","type":"number"},"ide":{"$id":"#/properties/linters/items/properties/ide","description":"List of IDE supporting the linter","title":"IDE Integration","type":"object"},"ignore_file_name":{"$id":"#/properties/linters/items/properties/ignore_file_name","description":"An explanation about the purpose of this instance.","examples":[".eslintignore",".secretlintignore"],"title":"Default file name for the linter ignore file","type":"string"},"ignore_for_flavor_suggestions":{"$id":"#/properties/linters/items/properties/ignore_for_flavor_suggestions","default":false,"description":"If this property is set to true, this linter will be ignored for flavor suggestions","examples":[".eslintignore",".secretlintignore"],"title":"Ignore for flavor suggestions","type":"boolean"},"install":{"$id":"#/properties/linters/items/properties/install","default":{},"description":"List of apk, dockerfile instructions, npm/pip/gem packages required to install the linter","examples":[{"dockerfile":["FROM accurics/terrascan:latest as terrascan","COPY --from=terrascan /go/bin/terrascan /usr/bin/","RUN terrascan init"]},{"npm":["eslint","eslint-config-airbnb","eslint-config-prettier","eslint-plugin-jest","eslint-plugin-prettier","babel-eslint"]}],"properties":{"apk":{"$id":"#/properties/linters/items/properties/install/properties/apk","description":"APK packages identifiers (with or without version)","examples":[["perl","perl-dev"]],"items":{"$id":"#/properties/linters/items/properties/install/properties/apk/items","type":"string"},"title":"List of APK packages (Linux)","type":"array"},"cargo":{"$id":"#/properties/linters/items/properties/install/properties/cargo","description":"Cargo packages identifiers (with or without version)","examples":[["clippy","sarif-fmt"]],"items":{"$id":"#/properties/linters/items/properties/install/properties/cargo/items","type":"string"},"title":"List of Cargo packages (Rust)","type":"array"},"dockerfile":{"$id":"#/properties/linters/items/properties/install/properties/dockerfile","description":"Will be automatically integrated in generated Dockerfile","examples":[["FROM accurics/terrascan:latest as terrascan","COPY --from=terrascan /go/bin/terrascan /usr/bin/","RUN terrascan init"]],"items":{"$id":"#/properties/linters/items/properties/install/properties/dockerfile/items","type":"string"},"title":"List of Dockerfile instructions packages","type":"array"},"gem":{"$id":"#/properties/linters/items/properties/install/properties/gem","description":"GEM packages identifiers (with or without version)","examples":[["rubocop:0.82.0","rubocop-github:0.16.0","rubocop-performance"]],"items":{"$id":"#/properties/linters/items/properties/install/properties/gem/items","type":"string"},"title":"List of GEM packages (Ruby)","type":"array"},"npm":{"$id":"#/properties/linters/items/properties/install/properties/npm","description":"NPM packages identifiers (with or without version)","examples":[["eslint","eslint-config-airbnb@3.2.1"]],"items":{"$id":"#/properties/linters/items/properties/install/properties/npm/items","type":"string"},"title":"List of NPM packages (Node.js)","type":"array"},"pip":{"$id":"#/properties/linters/items/properties/install/properties/pip","description":"PIP packages identifiers (with or without version)","examples":[["flake8"]],"items":{"$id":"#/properties/linters/items/properties/install/properties/pip/items","type":"string"},"title":"List of PIP packages (Python)","type":"array"}},"title":"Installation requirements","type":"object"},"is_formatter":{"$id":"#/properties/linters/items/properties/is_formatter","default":false,"description":"If the linter is just a formatter, set to true so errors will count as warnings","title":"Is formatter","type":"boolean"},"is_sbom":{"$id":"#/properties/linters/items/properties/is_sbom","default":false,"description":"If the linter is SBOM, set to true so extra properties will be returned","title":"Is SBOM","type":"boolean"},"lint_all_files":{"$id":"#/properties/linters/items/lint_all_files","default":false,"description":"If set to true, this linter will always lint all files, undepending their name/extensions/content","title":"Lint all files","type":"boolean"},"lint_all_other_linters_files":{"$id":"#/properties/linters/items/lint_all_other_linters_files","default":false,"description":"If set to true, this descriptor linters will lint one by one all files collected by all other linters","title":"Lint all other linters files","type":"boolean"},"linter_banner_image_url":{"$id":"#/properties/linters/items/properties/linter_banner_image_url","description":"URL of an image used to build header of linter Markdown documentation","examples":["https://github.com/stylelint/stylelint/raw/main/identity/stylelint-icon-and-text-white.png"],"format":"uri","title":"Linter banner image URL","type":"string"},"linter_help_cache":{"$id":"#/properties/linters/items/properties/linter_help_cache","description":"If the linter is unable to return help content, hardcode it here","title":"Hardcoded help content","type":"string"},"linter_icon_png_url":{"$id":"#/properties/linters/items/properties/linter_icon_png_url","description":"URL of a PNG image representing the icon of the linter","examples":["https://github.com/stylelint/stylelint/raw/main/identity/stylelint-icon-and-text-white.png"],"format":"uri","title":"Linter Icon PNG URL","type":"string"},"linter_image_url":{"$id":"#/properties/linters/items/properties/linter_image_url","description":"URL of an image used in linter Markdown documentation","examples":["https://raku.org/camelia-logo.png"],"format":"uri","title":"Linter image URL","type":"string"},"linter_megalinter_ref_url":{"$id":"#/properties/linters/items/properties/linter_megalinter_ref_url","description":"URL to linter documentation referring to MegaLinter","title":"MegaLinter reference URL","type":"string"},"linter_name":{"$id":"#/properties/linters/items/properties/linter_name","description":"Name of the linter (same as cli command if possible)","examples":["eslint"],"title":"Linter name","type":"string"},"linter_repo":{"$id":"#/properties/linters/items/properties/linter_repo","description":"URL of the linter repository home page","examples":["https://github.com/eslint/eslint"],"format":"uri","title":"Linter URL","type":"string"},"linter_rules_configuration_url":{"$id":"#/properties/linters/items/properties/linter_rules_configuration_url","description":"URL to linter documentation explaining how to configure the linter","format":"uri","title":"Linter rules configuration URL","type":"string"},"linter_rules_ignore_config_url":{"$id":"#/properties/linters/items/properties/linter_rules_ignore_config_url","description":"URL to linter documentation explaining how to ignore files","format":"uri","title":"Linter rules ignore config URL","type":"string"},"linter_rules_inline_disable_url":{"$id":"#/properties/linters/items/properties/linter_rules_inline_disable_url","description":"URL to linter documentation explaining how to disable rules directly with comments in files","format":"uri","title":"Linter rules inline disable URL","type":"string"},"linter_rules_url":{"$id":"#/properties/linters/items/properties/linter_rules_url","description":"URL to linter documentation listing all the rules that can be detected","format":"uri","title":"Linter rules URL","type":"string"},"linter_spdx_license":{"$id":"#/properties/linters/items/properties/linter_spdx_license","description":"spdx license id of the linter","title":"spdx license","type":"string"},"linter_speed":{"$id":"#/properties/linters/items/properties/linter_speed","description":"Average speed of the linter (performances indicator). For 1 (very slow) to 5 (very fast)","enum":[1,2,3,4,5],"title":"Speed indicator","type":"number"},"linter_text":{"$id":"#/properties/linters/items/properties/linter_text","title":"Additional text for MegaLinter online documentation","type":"string"},"linter_url":{"$id":"#/properties/linters/items/properties/linter_url","description":"URL of the linter home page","examples":["https://eslint.org"],"format":"uri","title":"Linter URL","type":"string"},"linter_version_cache":{"$id":"#/properties/linters/items/properties/linter_version_cache","description":"If the linter is unable to return a version number, hardcode it here","title":"Hardcoded version number","type":"string"},"name":{"$id":"#/properties/linters/items/properties/name","description":"When several linters in a descriptor, set a different name that will be used for configuration","examples":["JAVASCRIPT_ES"],"title":"Linter configuration key","type":"string"},"post_commands":{"$id":"#/properties/linters/items/properties/post_commands","default":[],"description":"Custom bash commands to run after linter","examples":[[{"command":"npm install java-caller","continue_if_failed":false,"cwd":"root"},{"command":"echo \"linter post-run command has been called\"","cwd":"workspace"}]],"items":{"$ref":"#/definitions/linter_command_info"},"title":"Linter Pre-run commands","type":"array"},"pre_commands":{"$id":"#/properties/linters/items/properties/pre_commands","default":[],"description":"Custom bash commands to run before linter","examples":[[{"command":"tflint --init","continue_if_failed":false,"cwd":"root"},{"command":"echo \"linter pre-run command has been called\"","cwd":"workspace"}]],"items":{"$ref":"#/definitions/linter_command_info"},"title":"Linter Pre-run commands","type":"array"},"sarif_default_output_file":{"$id":"#/properties/linters/items/sarif_default_output_file","description":"Path to find default SARIF output file when generated by linter","examples":[["./results.sarif"]],"title":"SARIF default output file","type":"string"},"test_folder":{"$id":"#/properties/linters/items/test_folder","description":"Test folder containing _good_ and _bad_ files, if different from parent descriptor test_folder","examples":[["bash_shfmt","terraform_terrascan"]],"title":"Test folder in .automation/","type":"string"},"test_format_fix_file_extensions":{"$id":"#/properties/test_format_fix_file_extensions","default":[],"description":"Format / Fix test file extension filters.","examples":[[".py",""]],"items":{"type":"string"},"title":"Allowed file extensions","type":"array"},"test_format_fix_regex_exclude":{"$id":"#/properties/linters/items/test_format_fix_regex_exclude","description":"Format / Fix test exclusions","examples":[["/bin/|/obj/"]],"title":"Format / Fix test exclusions","type":"string"},"test_variables":{"$id":"#/properties/linters/items/properties/test_variables","description":"List of variables to set before running tests","examples":[{"JAVASCRIPT_DEFAULT_STYLE":"prettier"}],"title":"Test variables","type":"object"},"variables":{"$id":"#/properties/linters/items/properties/variables","description":"Try to not use this property except if you really have no choice","examples":[{"default_value":"false","description":"If set to `false`, the `bash-exec` linter will report a warning if a shell script is not executable. If set to `true`, the `bash-exec` linter will report an error instead","name":"ERROR_ON_MISSING_EXEC_BIT"}],"title":"Custom extra variables for the linter","type":"array"},"version_command_return_code":{"$id":"#/properties/linters/items/properties/version_command_return_code","title":"CLI version valid return code if different from 0","type":"number"},"version_extract_regex":{"$id":"#/properties/linters/items/properties/version_extract_regex","description":"If default regex to extract version from linter -v call, override it here","examples":["(?<=npm-groovy-lint version )\\d+(\\.\\d+)+"],"title":"Regex to extract version","type":"string"}},"required":["linter_name","linter_url","examples"],"title":"Linter definition","type":"object"},"title":"List of linters ","type":"array"},"processing_order":{"$id":"#/properties/processing_order","default":0,"description":"If descriptor linters may be slow, put a negative processing order. If it is fast, put a positive one. If you don't know, do not set","examples":[[-9,0,9]],"title":"Descriptor processing order","type":"number"},"test_folder":{"$id":"#/properties/test_folder","description":"Test folder containing _good_ and _bad_ files. Default: lowercase(descriptor_id)","examples":[["bash_shfmt","terraform_terrascan"]],"title":"Test folder in .automation/","type":"string"}},"required":["descriptor_id","descriptor_type","linters"],"title":"MegaLinter descriptor","type":"object"}
</schema>

[User] Provide a JSON object that satisfies the schema "MegaLinter descriptor". Here are the required top‑level fields: descriptor_id, descriptor_type, linters. Return only the valid JSON object.

Command information

Bash command to run

If command fails, continue MegaLinter process or not

Continue if failed

Folder where to run the command

Command

all_flavors all c_cpp ci_light cupcake documentation dotnet dotnetweb formatters go java javascript php python ruby rust salesforce security swift terraform

Command information

Process command after running linters

Process command before running linters

Command

Descriptor definition for MegaLinter

Names of the config files to be found (at least one), else descriptor will be deactivated. Search in workspace, linter rules path, and files_sub_directory

Active if one of file names found

MegaLinter flavors matching this descriptor

Flavors

MegaLinter flavors that must not contain this descriptor

Flavors

Uppercase unique identifier for the language, tooling format or identifier

Descriptor unique identifier

Label for descriptor documentation, if different from Id. Ex: C++ for CPP

Descriptor label

Descriptor type: language, format or tooling format

Descriptor type

Regular expression list for filtering files by their content

File content regex filters

If file_contains_regex is set, use this property to filter extensions of the files that will be checked

File contain regex extensions filters

File extension filters. Empty list excludes all files. Can be overridden at linter level

Allowed file extensions

List of strings to filter the files according to their end of file name

Filter on end of file name

Regular expression list for filtering files by their base names using regex full match. Empty list includes all files. Can be overridden at linter level

File name regex filters

Set when a linter only lints a sub-directory

Files sub-directory

List of apk, dockerfile instructions, npm/pip/gem packages required to use the descriptor linters

APK packages identifiers (with or without version)

List of APK packages (Linux)

Cargo packages identifiers (with or without version)

List of Cargo packages (Rust)

Will be automatically integrated in generated Dockerfile

List of Dockerfile instructions packages

GEM packages identifiers (with or without version)

List of GEM packages (Ruby)

NPM packages identifiers (with or without version)

List of NPM packages (Node.js)

PIP packages identifiers (with or without version)

List of PIP packages (Python)

Installation requirements

If set to true, this descriptor linters will always lint all files, undepending their name/extensions/content

Lint all files

If set to true, this descriptor linters will lint one by one all files collected by all other linters

Lint all other linters files

List of linter definitions associated to the descriptor

eslint -c .eslintrc.yml --no-eslintrc --no-ignore myfile.js

eslint eslint-config-airbnb eslint-config-prettier eslint-plugin-jest eslint-plugin-prettier @babel/eslint-parser

Parameters defining behaviour and installation of a linter

eslint eslint-config-airbnb eslint-config-prettier eslint-plugin-jest eslint-plugin-prettier babel-eslint

List of rules to check to activate linter

Activation rules

Active if one of file names found

Shows if the linter is capable of output SARIF report within MegaLinter

Can output SARIF

If MegaLinter core is not enough, use a custom class inheriting from Linter class

Linter custom python class name

CLI configuration file argument name if different from -c

Default value for config argument, in case it is not a file

When a configuration file is used with the linter CLI, send these additional arguments

Additional CLI arguments when config file is used

Arguments for docker run before image name

CLI docker run arguments

Name of the docker image to use for linting

Version of the docker image to use for linting

Docker image version

Override if different from linter_name

CLI executable for linting request

Override if different from cli executable used for linting

CLI executable for help request

CLI executable for version request

CLI Help argument name if different from -h

When linter CLI is call for help, send these additional arguments

CLI help extra arguments

When linter CLI is call for help, send these additional commands

CLI help extra commands

Defines how to count errors from log file. regex_number, regex_count, regex_sum, total_lines or sarif

Lint errors count mode

Regex allowing to extract the number of errors from linter output logs

Lint errors number regex

When linter CLI is call for linting, send these additional arguments before config args

CLI Lint extra arguments (before config args)

When linter CLI is call for linting, send these additional arguments after config args

CLI Lint extra arguments (after config args)

If the linter can format or fix, input here the related triggering argument

When linter CLI is call for fixing, remove these arguments

CLI Lint arguments to remove if fix is activated

If the linter can use an ignore file, input here the related argument

Path to ignore file argument name

Defines how the linter is called: file,  list_of_files, project

Linting mode

Defines how to count warnings from log file. regex_number, regex_count, regex_sum, total_lines or sarif

Lint errors count mode

Regex allowing to extract the number of warnings from linter output logs

Lint warnings number regex

Arguments to generate SARIF output

--format sarif --output {{SARIF_OUTPUT_FILE}}

CLI SARIF run arguments

CLI version argument name if different from -v

When linter CLI is call for version, send these additional arguments

CLI Version extra arguments

An explanation about the purpose of this instance.

Default file name for the linter configuration file

Shows if the linter is deprecated.

Is the linter deprecated?

Displays information on why it is deprecated and whether an alternative is available.

Description of the deprecated linter

MegaLinter flavors matching this linter

Flavors

MegaLinter flavors that must not contain this descriptor

Flavors

Disable linter in MegaLinter next builds

Disabled

Explanation about why the linter is disabled

Disabled reason

Explanation about why the linter is downgraded

Downgraded reason

Indicates that installation instructions does not use the latest release of the linter

Downgraded version

Please add an example with and without configuration file in the command. They will appear in documentation

golangci-lint run -c .golangci.yml myfile.go

Linter CLI commands examples

File extension filters if different from the ones defined on parent descriptor

Allowed file extensions

Filter on end of file name

File name regex filters

Set when a linter only lints a sub-directory

Files sub-directory

CLI Help valid return code if different from 0

List of IDE supporting the linter

IDE Integration

Default file name for the linter ignore file

If this property is set to true, this linter will be ignored for flavor suggestions

Ignore for flavor suggestions

List of apk, dockerfile instructions, npm/pip/gem packages required to install the linter

FROM accurics/terrascan:latest as terrascan

COPY --from=terrascan /go/bin/terrascan /usr/bin/

APK packages identifiers (with or without version)

List of APK packages (Linux)

Cargo packages identifiers (with or without version)

List of Cargo packages (Rust)

Will be automatically integrated in generated Dockerfile

FROM accurics/terrascan:latest as terrascan

COPY --from=terrascan /go/bin/terrascan /usr/bin/

GEM packages identifiers (with or without version)

List of GEM packages (Ruby)

NPM packages identifiers (with or without version)

List of NPM packages (Node.js)

PIP packages identifiers (with or without version)

List of PIP packages (Python)

Installation requirements

If the linter is just a formatter, set to true so errors will count as warnings

Is formatter

If the linter is SBOM, set to true so extra properties will be returned

Is SBOM

If set to true, this linter will always lint all files, undepending their name/extensions/content

Lint all files

Lint all other linters files

URL of an image used to build header of linter Markdown documentation

Linter banner image URL

If the linter is unable to return help content, hardcode it here

Hardcoded help content

URL of a PNG image representing the icon of the linter

Linter Icon PNG URL

URL of an image used in linter Markdown documentation

Linter image URL

URL to linter documentation referring to MegaLinter

MegaLinter reference URL

Name of the linter (same as cli command if possible)

Linter name

URL of the linter repository home page

Linter URL

URL to linter documentation explaining how to configure the linter

Linter rules configuration URL

URL to linter documentation explaining how to ignore files

Linter rules ignore config URL

URL to linter documentation explaining how to disable rules directly with comments in files

Linter rules inline disable URL

URL to linter documentation listing all the rules that can be detected

Linter rules URL

spdx license id of the linter

spdx license

Average speed of the linter (performances indicator). For 1 (very slow) to 5 (very fast)

Speed indicator

Additional text for MegaLinter online documentation

URL of the linter home page

Linter URL

If the linter is unable to return a version number, hardcode it here

Hardcoded version number

When several linters in a descriptor, set a different name that will be used for configuration

Linter configuration key

Custom bash commands to run after linter

echo "linter post-run command has been called"

Linter Pre-run commands

Custom bash commands to run before linter

echo "linter pre-run command has been called"

Linter Pre-run commands

Path to find default SARIF output file when generated by linter

SARIF default output file

Test folder containing _good_ and _bad_ files, if different from parent descriptor test_folder

Test folder in .automation/

Format / Fix test file extension filters.

Allowed file extensions

Format / Fix test exclusions

Format / Fix test exclusions

List of variables to set before running tests

Test variables

Try to not use this property except if you really have no choice

If set to `false`, the `bash-exec` linter will report a warning if a shell script is not executable. If set to `true`, the `bash-exec` linter will report an error instead

Custom extra variables for the linter

CLI version valid return code if different from 0

If default regex to extract version from linter -v call, override it here

Regex to extract version

Linter definition

List of linters

If descriptor linters may be slow, put a negative processing order. If it is fast, put a positive one. If you don't know, do not set

Descriptor processing order

Test folder containing _good_ and _bad_ files. Default: lowercase(descriptor_id)

Test folder in .automation/

MegaLinter descriptor

Provide a JSON object that satisfies the schema "MegaLinter descriptor". Here are the required top‑level fields: descriptor_id, descriptor_type, linters. Return only the valid JSON object.


[System]
You are a helpful assistant that answers strictly in JSON. Here's the JSON schema you must adhere to:
<schema>
{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://meltano.com/meltano.schema.json","title":"JSON Schema for meltano.yml","description":"Meltano (https://meltano.com) is an open source platform for building, running & orchestrating ELT pipelines","type":"object","additionalProperties":false,"properties":{"version":{"const":1},"annotations":{"$ref":"#/$defs/annotations"},"default_environment":{"type":"string","description":"A default environment to be used when one is not present as an argument or as an environment variable."},"send_anonymous_usage_stats":{"type":"boolean","description":"Share anonymous usage data with the Meltano team to help them gauge interest and allocate development time","default":true},"project_id":{"type":"string","description":"A globally unique project identifier. Defaults to a Meltano-generated unique GUID for each project."},"database_uri":{"type":"string","description":"A database URI for the project system database. Defaults to a SQLite file stored at .meltano/meltano.db","default":"sqlite:///$MELTANO_PROJECT_ROOT/.meltano/meltano.db"},"python":{"type":"string","description":"The python version to use for plugins, specified as a path, or as the name of an executable to find within a directory in $PATH. If not specified, the python executable that was used to run Meltano will be used (within a separate virtual environment). This can be overridden on a per-plugin basis by setting the `python` property for the plugin.","examples":["/usr/bin/python3.10","python","python3.11"]},"state_backend":{"type":"object","description":"Configuration for state backend.","properties":{"uri":{"type":"string","description":"The URI pointing to the backend to use.","default":"systemdb"},"lock_timeout_seconds":{"type":"integer","description":"The number of seconds a lock on a state file is considered valid."},"lock_retry_seconds":{"type":"integer","description":"The number of seconds to wait between retrying lock acquisition."},"azure":{"type":"object","description":"Configuration for Azure Blob Storage state backend.","properties":{"connection_string":{"type":"string","description":"The azure connection string to use for connecting to Azure Blob Storage."}}},"gcs":{"type":"object","description":"Configuration for Google Cloud Storage state backend.","properties":{"application_credentials":{"type":"string","description":"Path to a Google credentials file to use for authenticating to Google Cloud Storage."}}},"s3":{"type":"object","description":"Configuration for AWS S3 state backend.","properties":{"aws_access_key_id":{"type":"string","description":"AWS access key ID to use for authenticating to AWS S3."},"aws_secret_access_key":{"type":"string","description":"AWS secret access key to use for authenticating to AWS S3."},"endpoint_url":{"type":"string","description":"S3 endpoint URL to use."}}}}},"venv":{"type":"object","description":"Configuration for plugin virtual environments.","properties":{"backend":{"type":"string","description":"The virtual environment backend to use.","default":"virtualenv","enum":["virtualenv","uv"]}}},"environments":{"type":"array","description":"An array of environments (i.e. dev, stage, prod) with override configs for plugins based on the environment its run in.","items":{"$ref":"#/$defs/environments"}},"include_paths":{"type":"array","description":"An array of paths (relative to the project directory) of other Meltano config files to include in the configuration.","items":{"type":"string"}},"plugins":{"type":"object","additionalProperties":false,"properties":{"extractors":{"type":"array","items":{"$ref":"#/$defs/plugins/extractors"}},"loaders":{"type":"array","items":{"$ref":"#/$defs/plugins/loaders"}},"mappers":{"type":"array","items":{"$ref":"#/$defs/plugins/mappers"}},"orchestrators":{"type":"array","items":{"$ref":"#/$defs/plugins/orchestrators"}},"transformers":{"type":"array","items":{"$ref":"#/$defs/plugins/transformers"}},"files":{"type":"array","items":{"$ref":"#/$defs/plugins/files"}},"utilities":{"type":"array","items":{"$ref":"#/$defs/plugins/utilities"}},"transforms":{"type":"array","items":{"$ref":"#/$defs/plugins/transforms"}}}},"schedules":{"type":"array","items":{"$ref":"#/$defs/schedules"},"description":"Scheduled ELT jobs, added using 'meltano schedule'"},"env":{"$ref":"#/$defs/env"},"jobs":{"type":"array","items":{"$ref":"#/$defs/jobs"},"description":"Jobs, added using 'meltano job'"},"database_max_retries":{"type":"integer","description":"The number of times to retry connecting to the Meltano database.","default":3,"minimum":0},"database_retry_timeout":{"type":"integer","description":"The time in seconds to wait between Meltano database connection attempts.","default":5,"minimum":0},"project_readonly":{"type":"boolean","description":"Whether the project is read-only.","default":false},"cli":{"type":"object","description":"CLI related settings.","properties":{"log_config":{"type":"string","description":"The path to the logging config, relative to the Meltano project root.","default":"logging.yaml"}}},"elt":{"type":"object","description":"ELT related settings","properties":{"buffer_size":{"type":"integer","description":"The size of the ELT buffer in bytes.","default":10485760}}},"experimental":{"type":"boolean","description":"Whether experimental features should be enabled.","default":false},"ff":{"type":"object","description":"A feature flag, which can be used to enable or disable particular Meltano features.","properties":{"strict_env_var_mode":{"type":"boolean","description":"Whether references to undefined environment variables cause Meltano to exit with an error.","default":false},"plugin_locks_required":{"type":"boolean","description":"Whether plugin locks are required to run a job.","default":false}}},"hub_api_root":{"type":["string","null"],"description":"The URL to the root of the Meltano Hub API.","default":null,"examples":["https://hub.meltano.com/meltano/api/v1"]},"hub_url":{"type":"string","description":"The URL for Meltano Hub.","default":"https://hub.meltano.com"},"hub_url_auth":{"type":["string","boolean","null"],"description":"The value of the `Authorization` header when making requests to Meltano Hub. If null, false, or unset, no `Authorization` header is used.","default":null,"examples":["Bearer $ACCESS_TOKEN"]},"snowplow":{"type":"object","description":"Snowplow related settings.","properties":{"collector_endpoints":{"type":"array","description":"Array of Snowplow collector endpoints.","items":{"type":"string","description":"A URL to which Snowplow events will be sent if telemetry is enabled."},"default":["https://sp.meltano.com"]}}},"auto_install":{"type":"boolean","description":"Whether to automatically install any required plugins on command invocation. A plugin will be auto-installed when its virtual environment does not already exist or `pip_url` is changed.","default":true}},"$defs":{"annotations":{"type":"object","description":"Arbitrary annotations keyed by tool/vendor name - not processed by the core Meltano library or CLI","propertyNames":{"type":"string"},"additionalProperties":{"type":"object"}},"plugins":{"plugin_generic":{"type":"object","required":["name"],"properties":{"annotations":{"$ref":"#/$defs/annotations"},"name":{"type":"string","description":"The name of the plugin.","examples":["target-jsonl"]},"description":{"type":"string","description":"A description of the plugin."},"plugin_type":{"type":"string","description":"The type of the plugin.","enum":["extractors","loaders","orchestrators","transformers","files","utilities","transforms","mappers"]},"repo":{"type":"string","description":"The URL of the repository containing the source code for the plugin."},"ext_repo":{"type":"string","description":"The URL of the repository containing the source code for a Meltano extension plugin that typically wraps some other tool, in which case the 'repo' property is used for the URL of the repository for that tool."},"inherit_from":{"type":"string","description":"An existing plugin to inherit from."},"pip_url":{"type":"string","description":"The pip hosted package name or URL","examples":["target-jsonl","git+https://gitlab.com/meltano/tap-facebook.git","wtforms==2.2.1 apache-airflow==1.10.2"]},"variant":{"type":"string","description":"The variant of the plugin."},"namespace":{"type":"string","description":"The namespace of this plugin","examples":["tap_csv","target_jsonl"]},"config":{"type":"object","description":"Your plugin configuration, type 'meltano config <plugin> list' for details"},"label":{"type":"string","description":"A user friendly label describing the plugin","examples":["Stripe","Facebook Ads"]},"logo_url":{"type":"string","description":"An optional logo URL for this plugin"},"python":{"type":"string","description":"The python version to use for this plugin, specified as a path, or as the name of an executable to find within a directory in $PATH. If not specified, the top-level `python` setting will be used, or if it is not set, the python executable that was used to run Meltano will be used (within a separate virtual environment).","examples":["/usr/bin/python3.10","python","python3.11"]},"executable":{"type":"string","description":"The plugin's executable name, as defined in setup.py (if a Python based plugin)","examples":["tap-stripe","tap-covid-19"]},"settings":{"type":"array","items":{"$ref":"#/$defs/base_setting"}},"docs":{"type":"string","description":"A URL to the documentation for this plugin"},"settings_group_validation":{"type":"array","items":{"type":"array","description":"A set consisting of one valid combination of required setting names","items":{"type":"string"}}},"commands":{"type":"object","description":"A mapping of command names to either a string command, or an object containing info about the command.","additionalProperties":{"oneOf":[{"type":"object","properties":{"annotations":{"$ref":"#/$defs/annotations"},"args":{"type":"string","description":"Command arguments"},"description":{"type":"string","description":"Documentation displayed when listing commands"},"executable":{"type":"string","description":"Override the plugin's executable for this command"},"container_spec":{"type":"object","required":["image"],"description":"Container specification for this command","properties":{"annotations":{"$ref":"#/$defs/annotations"},"image":{"type":"string","description":"Container image","examples":["ghcr.io/dbt-labs/dbt-postgres:latest"]},"command":{"type":"string","description":"Container command","examples":["list","test","compile"]},"entrypoint":{"type":"string","description":"Container entrypoint"},"ports":{"type":"object","description":"Mapping of host to container ports","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"examples":[{"5000":"5000"}]},"volumes":{"type":"array","description":"Array of volumes to mount during container execution","items":{"type":"string","examples":["$MELTANO_PROJECT_ROOT/transform/:/usr/app/"]}},"env":{"type":"object","description":"Mapping to environment variable to set inside the container. These take precedence over Meltano own runtime environment variables.","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"examples":[{"DBT_PROFILES_DIR":"/usr/app/profile/"}]}}}}},{"type":"string","description":"The command as a string."}]}},"requires":{"$ref":"#/$defs/requires"},"env":{"$ref":"#/$defs/env"}}},"extractor_shared":{"type":"object","properties":{"annotations":{"$ref":"#/$defs/annotations"},"catalog":{"type":"string","description":"A path to a catalog file (relative to the project directory) to be provided to the extractor when it is run in sync mode."},"load_schema":{"type":"string","description":"The name of the database schema extracted data should be loaded into."},"metadata":{"type":"object","description":"An object containing Singer stream and property metadata","default":{}},"schema":{"type":"object","description":"An object representing override rules for a Singer stream schema","default":{}},"state":{"type":"string","description":"A path to a state file (relative to the project directory) to be provided to the extractor when it is run as part of a pipeline using meltano elt."},"select":{"type":"array","default":["*.*"],"description":"An array of entity selection rules in the form '<entity|*>.<attribute|*>'","items":{"type":"string"}},"select_filter":{"type":"array","description":"An array of entity selection filter rules that are applied to the extractor's discovered or provided catalog file when the extractor is run.","items":{"type":"string"},"default":[]},"use_cached_catalog":{"type":"boolean","description":"A boolean that determines if the catalog cache should be used or ignored.","default":true}}},"extractors":{"description":"https://docs.meltano.com/concepts/plugins#extractors","type":"object","allOf":[{"$ref":"#/$defs/plugins/plugin_generic"},{"$ref":"#/$defs/plugins/extractor_shared"},{"type":"object","properties":{"capabilities":{"type":"array","items":{"type":"string","enum":["properties","catalog","discover","state","about","stream-maps","activate-version","batch","test","log-based","schema-flattening"]}}}}],"unevaluatedProperties":false},"loaders":{"description":"https://docs.meltano.com/concepts/plugins#loaders","type":"object","allOf":[{"$ref":"#/$defs/plugins/plugin_generic"},{"properties":{"capabilities":{"type":"array","items":{"type":"string","enum":["about","stream-maps","activate-version","batch","soft-delete","hard-delete","datatype-failsafe","schema-flattening"]}},"dialect":{"type":"string","description":"The name of the dialect of the target database, so that transformers in the same pipeline can determine the type of database to connect to."}}}],"unevaluatedProperties":false},"orchestrators":{"description":"https://docs.meltano.com/concepts/plugins#orchestrators","type":"object","$ref":"#/$defs/plugins/plugin_generic","unevaluatedProperties":false},"transformers":{"description":"https://docs.meltano.com/concepts/plugins#transforms","type":"object","$ref":"#/$defs/plugins/plugin_generic","unevaluatedProperties":false},"files":{"description":"https://docs.meltano.com/concepts/plugins#file-bundles","type":"object","$ref":"#/$defs/plugins/plugin_generic","unevaluatedProperties":false},"utilities":{"description":"https://docs.meltano.com/concepts/plugins#utilities","type":"object","$ref":"#/$defs/plugins/plugin_generic","unevaluatedProperties":false},"transforms":{"description":"https://docs.meltano.com/concepts/plugins#transforms","type":"object","allOf":[{"$ref":"#/$defs/plugins/plugin_generic"},{"properties":{"annotations":{"$ref":"#/$defs/annotations"},"vars":{"type":"object","description":"An object containing dbt model variables"},"package_name":{"type":"string","description":"The name of the dbt package's internal dbt project: the value of name in dbt_project.yml."}}}],"unevaluatedProperties":false},"mapper_specific":{"type":"object","properties":{"annotations":{"$ref":"#/$defs/annotations"},"mappings":{"description":"Name of the invokable mappings and their associated configs.","type":"array","items":{"type":"object","additionalProperties":false,"properties":{"annotations":{"$ref":"#/$defs/annotations"},"name":{"type":"string"},"config":{"type":"object"}}},"required":["config","name"]}}},"mappers":{"description":"https://docs.meltano.com/concepts/plugins#mappers","type":"object","allOf":[{"$ref":"#/$defs/plugins/plugin_generic"},{"$ref":"#/$defs/plugins/mapper_specific"}],"unevaluatedProperties":false}},"base_setting":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"annotations":{"$ref":"#/$defs/annotations"},"name":{"type":"string","description":"The name of the setting","examples":["account_id"]},"aliases":{"type":"array","description":"Alternative setting names that can be used in 'meltano.yml' and 'meltano config set'","examples":["accountId","account_identifier"],"items":{"type":"string"}},"label":{"type":"string","description":"A user friendly label for the setting","examples":["Account ID"]},"value":{"description":"The default value of this setting if not otherwise defined"},"placeholder":{"type":"string","description":"A placeholder value for this setting","examples":["Ex. 18161"]},"kind":{"type":"string","description":"The type of value this setting contains","oneOf":[{"enum":["oauth","date_iso8601","file","email","integer","options","object","array","boolean","string"]},{"enum":["hidden","password"],"deprecated":true}]},"description":{"type":"string","description":"A description for what this setting does","examples":["The unique account identifier for your Stripe Account"]},"tooltip":{"type":"string","description":"A phrase to provide additional information on this setting","examples":["Here is some additional info..."]},"documentation":{"type":"string","description":"A link to documentation on this setting","examples":["https://meltano.com/"]},"hidden":{"type":"boolean","description":"A hidden setting should not be user-configurable","default":false},"sensitive":{"type":"boolean","description":"A sensitive setting is redacted in command output","default":false},"env":{"type":"string","description":"An alternative environment variable name to populate with this settings value in the plugin environment.","examples":["GITLAB_API_TOKEN","FACEBOOK_ADS_ACCESS_TOKEN"]},"value_processor":{"description":"Use with `kind: object` to pre-process the keys in a particular way.","enum":["nest_object","upcase_string"]},"value_post_processor":{"oneOf":[{"const":"nest_object","description":"Convert a flat object with period-delimited keys to a nested object"},{"const":"upcase_string","description":"Convert the setting value to uppercase"},{"const":"stringify","description":"Convert the JSON object to a string"},{"const":"parse_date","description":"Parse the setting value as a date"}]},"oauth":{"type":"object","required":["provider"],"properties":{"provider":{"type":"string","description":"The name of a Meltano-supported OAuth provider","examples":["google-adwords"]}}},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","description":"A user friendly label for the option","examples":["Account ID"]},"value":{"description":"The value of this option"}},"required":["label","value"],"additionalProperties":false}}}},"schedules":{"type":"object","oneOf":[{"required":["name","job","interval"]},{"required":["name","extractor","loader","transform","interval","start_date"]}],"description":"https://docs.meltano.com/guide/orchestration","additionalProperties":false,"properties":{"annotations":{"$ref":"#/$defs/annotations"},"name":{"type":"string","description":"The schedule's unique name","examples":["gitlab-to-jsonl"]},"job":{"type":"string","description":"The name of a meltano job","examples":["some-custom-job"]},"extractor":{"type":"string","description":"The name of the extractor plugin","examples":["tap-gitlab"]},"env":{"$ref":"#/$defs/env"},"loader":{"type":"string","description":"The name of the loader plugin","examples":["target-jsonl"]},"interval":{"type":"string","description":"A UNIX cron expression to represent the frequency the scheduled job should execute","examples":["@hourly","@daily","@weekly","0 0 * * *"],"pattern":"^((@(hourly|daily|weekly|monthly|yearly|once))|((((\\d+,)+\\d+|(\\d+|\\*)(\\/|-)\\d+|\\d+|\\*) ?){5,6}))$"},"transform":{"type":"string","description":"Describes if transforms should run, be skipped, or if only transforms should execute (skip extractors and loaders)","default":"skip","enum":["run","skip","only"]},"start_date":{"type":"string","description":"The date when the schedule should first execute","examples":["2020-08-06 00:00:00"]}}},"jobs":{"type":"object","required":["name","tasks"],"description":"https://docs.meltano.com/reference/command-line-interface#job","additionalProperties":false,"properties":{"annotations":{"$ref":"#/$defs/annotations"},"name":{"type":"string","description":"This jobs unique name","examples":["gitlab-to-jsonl"]},"tasks":{"oneOf":[{"type":"string"},{"type":"array","items":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}}]}}},"environments":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"annotations":{"$ref":"#/$defs/annotations"},"name":{"type":"string","description":"The name of the environment."},"config":{"type":"object","description":"An object of environment specific configurations.","additionalProperties":false,"properties":{"plugins":{"type":"object","description":"An object of environment specific plugin configurations.","properties":{"extractors":{"type":"array","items":{"allOf":[{"$ref":"#/$defs/environments/$defs/plugins"},{"$ref":"#/$defs/plugins/extractor_shared"}],"unevaluatedProperties":false}},"loaders":{"type":"array","items":{"unevaluatedProperties":false,"$ref":"#/$defs/environments/$defs/plugins"}},"orchestrators":{"type":"array","items":{"unevaluatedProperties":false,"$ref":"#/$defs/environments/$defs/plugins"}},"transformers":{"type":"array","items":{"unevaluatedProperties":false,"$ref":"#/$defs/environments/$defs/plugins"}},"files":{"type":"array","items":{"unevaluatedProperties":false,"$ref":"#/$defs/environments/$defs/plugins"}},"utilities":{"type":"array","items":{"unevaluatedProperties":false,"$ref":"#/$defs/environments/$defs/plugins"}},"transforms":{"type":"array","items":{"unevaluatedProperties":false,"$ref":"#/$defs/environments/$defs/plugins"}}}}}},"env":{"$ref":"#/$defs/env"}},"$defs":{"plugins":{"type":"object","required":["name"],"properties":{"annotations":{"$ref":"#/$defs/annotations"},"name":{"type":"string"},"config":{"type":"object"},"env":{"$ref":"#/$defs/env"}}}}},"requires":{"type":"object","description":"A set of plugin requirements.","additionalProperties":false,"patternProperties":{"^(extractors|loaders|transforms|orchestrators|transformers|files|utilities|mappers)$":{"type":"array","items":{"$ref":"#/$defs/plugin_requirement"}}}},"plugin_requirement":{"type":"object","description":"A single plugin requirement","additionalProperties":false,"properties":{"annotations":{"$ref":"#/$defs/annotations"},"name":{"type":"string","description":"The name of the required plugin"},"variant":{"type":"string","description":"The variant of the required plugin"}}},"env":{"type":"object","description":"Mapping of environment variables for use in config.","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"examples":[{"SNOWFLAKE_ACCOUNT":"my.snowflake.account.com"}]}}}
</schema>

[User] Provide a JSON object that satisfies the schema "JSON Schema for meltano.yml". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.

JSON Schema for meltano.yml

Meltano (https://meltano.com) is an open source platform for building, running & orchestrating ELT pipelines

A default environment to be used when one is not present as an argument or as an environment variable.

Share anonymous usage data with the Meltano team to help them gauge interest and allocate development time

A globally unique project identifier. Defaults to a Meltano-generated unique GUID for each project.

A database URI for the project system database. Defaults to a SQLite file stored at .meltano/meltano.db

The python version to use for plugins, specified as a path, or as the name of an executable to find within a directory in $PATH. If not specified, the python executable that was used to run Meltano will be used (within a separate virtual environment). This can be overridden on a per-plugin basis by setting the `python` property for the plugin.

Configuration for state backend.

The URI pointing to the backend to use.

The number of seconds a lock on a state file is considered valid.

The number of seconds to wait between retrying lock acquisition.

Configuration for Azure Blob Storage state backend.

The azure connection string to use for connecting to Azure Blob Storage.

Configuration for Google Cloud Storage state backend.

Path to a Google credentials file to use for authenticating to Google Cloud Storage.

Configuration for AWS S3 state backend.

AWS access key ID to use for authenticating to AWS S3.

AWS secret access key to use for authenticating to AWS S3.

S3 endpoint URL to use.

Configuration for plugin virtual environments.

The virtual environment backend to use.

An array of environments (i.e. dev, stage, prod) with override configs for plugins based on the environment its run in.

An array of paths (relative to the project directory) of other Meltano config files to include in the configuration.

Scheduled ELT jobs, added using 'meltano schedule'

Jobs, added using 'meltano job'

The number of times to retry connecting to the Meltano database.

The time in seconds to wait between Meltano database connection attempts.

Whether the project is read-only.

CLI related settings.

The path to the logging config, relative to the Meltano project root.

ELT related settings

The size of the ELT buffer in bytes.

Whether experimental features should be enabled.

A feature flag, which can be used to enable or disable particular Meltano features.

Whether references to undefined environment variables cause Meltano to exit with an error.

Whether plugin locks are required to run a job.

The URL to the root of the Meltano Hub API.

The URL for Meltano Hub.

The value of the `Authorization` header when making requests to Meltano Hub. If null, false, or unset, no `Authorization` header is used.

Snowplow related settings.

Array of Snowplow collector endpoints.

A URL to which Snowplow events will be sent if telemetry is enabled.

Whether to automatically install any required plugins on command invocation. A plugin will be auto-installed when its virtual environment does not already exist or `pip_url` is changed.

Arbitrary annotations keyed by tool/vendor name - not processed by the core Meltano library or CLI

The name of the plugin.

A description of the plugin.

The type of the plugin.

extractors loaders orchestrators transformers files utilities transforms mappers

The URL of the repository containing the source code for the plugin.

The URL of the repository containing the source code for a Meltano extension plugin that typically wraps some other tool, in which case the 'repo' property is used for the URL of the repository for that tool.

An existing plugin to inherit from.

The pip hosted package name or URL

The variant of the plugin.

The namespace of this plugin

Your plugin configuration, type 'meltano config <plugin> list' for details

A user friendly label describing the plugin

An optional logo URL for this plugin

The python version to use for this plugin, specified as a path, or as the name of an executable to find within a directory in $PATH. If not specified, the top-level `python` setting will be used, or if it is not set, the python executable that was used to run Meltano will be used (within a separate virtual environment).

The plugin's executable name, as defined in setup.py (if a Python based plugin)

A URL to the documentation for this plugin

A set consisting of one valid combination of required setting names

A mapping of command names to either a string command, or an object containing info about the command.

Command arguments

Documentation displayed when listing commands

Override the plugin's executable for this command

Container specification for this command

Container image

Container command

Container entrypoint

Mapping of host to container ports

Array of volumes to mount during container execution

Mapping to environment variable to set inside the container. These take precedence over Meltano own runtime environment variables.

The command as a string.

A path to a catalog file (relative to the project directory) to be provided to the extractor when it is run in sync mode.

The name of the database schema extracted data should be loaded into.

An object containing Singer stream and property metadata

An object representing override rules for a Singer stream schema

A path to a state file (relative to the project directory) to be provided to the extractor when it is run as part of a pipeline using meltano elt.

An array of entity selection rules in the form '<entity|*>.<attribute|*>'

An array of entity selection filter rules that are applied to the extractor's discovered or provided catalog file when the extractor is run.

A boolean that determines if the catalog cache should be used or ignored.

properties catalog discover state about stream-maps activate-version batch test log-based schema-flattening

about stream-maps activate-version batch soft-delete hard-delete datatype-failsafe schema-flattening

The name of the dialect of the target database, so that transformers in the same pipeline can determine the type of database to connect to.

An object containing dbt model variables

The name of the dbt package's internal dbt project: the value of name in dbt_project.yml.

Name of the invokable mappings and their associated configs.

The name of the setting

Alternative setting names that can be used in 'meltano.yml' and 'meltano config set'

A user friendly label for the setting

The default value of this setting if not otherwise defined

A placeholder value for this setting

The type of value this setting contains

oauth date_iso8601 file email integer options object array boolean string

A description for what this setting does

The unique account identifier for your Stripe Account

A phrase to provide additional information on this setting

A link to documentation on this setting

A hidden setting should not be user-configurable

A sensitive setting is redacted in command output

An alternative environment variable name to populate with this settings value in the plugin environment.

Use with `kind: object` to pre-process the keys in a particular way.

Convert a flat object with period-delimited keys to a nested object

Convert the setting value to uppercase

Convert the JSON object to a string

Parse the setting value as a date

The name of a Meltano-supported OAuth provider

A user friendly label for the option

The value of this option

name extractor loader transform interval start_date

The schedule's unique name

The name of a meltano job

The name of the extractor plugin

The name of the loader plugin

A UNIX cron expression to represent the frequency the scheduled job should execute

Describes if transforms should run, be skipped, or if only transforms should execute (skip extractors and loaders)

The date when the schedule should first execute

This jobs unique name

The name of the environment.

An object of environment specific configurations.

An object of environment specific plugin configurations.

A set of plugin requirements.

A single plugin requirement

The name of the required plugin

The variant of the required plugin

Mapping of environment variables for use in config.

Provide a JSON object that satisfies the schema "JSON Schema for meltano.yml". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.