{"id":17113670,"url":"https://github.com/totakke/bosslint","last_synced_at":"2025-04-13T04:05:43.195Z","repository":{"id":146421732,"uuid":"238896431","full_name":"totakke/bosslint","owner":"totakke","description":"One command to run multiple linters under Git version control","archived":false,"fork":false,"pushed_at":"2025-03-09T12:00:06.000Z","size":159,"stargazers_count":5,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-13T04:05:30.079Z","etag":null,"topics":["cli","code-quality","graalvm-native-image","linter"],"latest_commit_sha":null,"homepage":"","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/totakke.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-02-07T10:25:49.000Z","updated_at":"2025-03-09T12:00:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"47f3535c-2c45-4ac8-a941-f4630bae397c","html_url":"https://github.com/totakke/bosslint","commit_stats":{"total_commits":88,"total_committers":1,"mean_commits":88.0,"dds":0.0,"last_synced_commit":"4aaf54c0afbdcdbbf64f031807b310f147b62512"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/totakke%2Fbosslint","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/totakke%2Fbosslint/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/totakke%2Fbosslint/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/totakke%2Fbosslint/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/totakke","download_url":"https://codeload.github.com/totakke/bosslint/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248661707,"owners_count":21141450,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","code-quality","graalvm-native-image","linter"],"created_at":"2024-10-14T17:11:33.590Z","updated_at":"2025-04-13T04:05:43.180Z","avatar_url":"https://github.com/totakke.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bosslint\n\n[![build](https://github.com/totakke/bosslint/actions/workflows/build.yml/badge.svg)](https://github.com/totakke/bosslint/actions/workflows/build.yml)\n\nOne command to run multiple linters under Git version control\n\n\u003e Good health is the most important thing. More than success, more than money,\n\u003e more than power.\n\u003e\n\u003e \u0026mdash; Hyman Roth / The Godfather Part II\n\n## Preview\n\nhttps://github.com/user-attachments/assets/addd6a48-93a9-4748-b932-c1b952ef90bf\n\n## Installation\n\n### Brew (MacOS and Linux)\n\n```sh\nbrew install totakke/tap/bosslint\n```\n\n### Manual install\n\nOS \u0026 arch:\n\n- `os`:\n  - Mac OS - `macos`\n  - Linux - `linux`\n- `arch`:\n  - amd64 / x86_64  - `amd64`\n  - aarch64 / arm64  - `aarch64`\n\nDownload \u0026 install:\n\n```sh\ncurl -sSL https://github.com/totakke/bosslint/releases/download/v0.7.130/bosslint_[os]_[arch] -o bosslint\nchmod +x bosslint\nmv bosslint [/your/PATH/dir/]\n```\n\n### Build\n\nTo build Bosslint yourself, you must install [Clojure CLI tools](https://clojure.org/guides/getting_started#_clojure_installer_and_cli_tools),\n[GraalVM](https://www.graalvm.org/latest/getting-started/#installing) and\nGraalVM's `native-image`. Additionally, `GRAALVM_HOME` environment variable must\nbe set.\n\n```sh\nclojure -T:build bin\nmv target/bosslint [/your/PATH/dir/]\n```\n\n## Usage\n\n### Basics\n\n`bosslint check` command checks changed files between commits, commit and\nworking tree, etc. with appropriate linters. Arguments of the ref are similar to\n[`git-diff`](https://git-scm.com/docs/git-diff) arguments.\n\n```console\n$ bosslint check HEAD master\nclj-kondo:\nlinting took 281ms, errors: 0, warnings: 0\n==\u003e Success ✅\n\ncljfmt:\nAll source files formatted correctly\n==\u003e Success ✅\n\neastwood:\n...\n== Linting done in 1887 ms ==\n== Warnings: 0 (not including reflection warnings)  Exceptions thrown: 0\n==\u003e Success ✅\n```\n\nYou can use `:all` to check all files under a Git project.\n\n```sh\nbosslint check :all\n```\n\nBosslint just dispatches each linter but does not contain any linters\nthemselves. You must install each linter preliminarily. Supported linters are\nshown by `bosslint linters` command or are found in\n[Supported linters](#supported-linters) section.\n\n### Supported linters\n\n| Linter | Bosslint linter name | Target files |\n| ------ | -------------------- | ------------ |\n| [actionlint](https://rhysd.github.io/actionlint/) | `actionlint` | `.github/workflows/*.{yaml,yml}` |\n| [ansible-lint](https://ansible.readthedocs.io/projects/lint/) | `ansible-lint` | `**/*.{yaml,yml}` |\n| [Checkstyle](https://checkstyle.org/) | `checkstyle` | `**/*.java` |\n| [clj-kondo](https://github.com/borkdude/clj-kondo) | `clj-kondo` | `**/*.{clj,cljc,cljs}` |\n| [cljfmt](https://github.com/weavejester/cljfmt) | `cljfmt` | `**/*.{clj,cljc,cljs}` |\n| [cljstyle](https://github.com/greglook/cljstyle) | `cljstyle` | `**/*.{clj,cljc,cljs}` |\n| [dartanalyzer](https://dart.dev/tools/dartanalyzer) | `dartanalyzer` | `**/*.dart` |\n| [dotenv-linter](https://dotenv-linter.github.io/) | `dotenv-linter` | `**/.env` |\n| [Eastwood](https://github.com/jonase/eastwood) | `eastwood` | `**/*.{clj,cljc}` |\n| [Flake8](https://flake8.pycqa.org/) | `flake8` | `**/*.py` |\n| [hadolint](https://github.com/hadolint/hadolint) | `hadolint` | `**/Dockerfile` |\n| [jsonlint](https://github.com/zaach/jsonlint) | `jsonlint` | `**/*.json` |\n| [kubeval](https://www.kubeval.com/) | `kubeval` | `**/*.{yaml,yml}` |\n| [markdownlint-cli](https://github.com/igorshubovych/markdownlint-cli) | `markdownlint` | `**/*.{markdown,md}` |\n| [ShellCheck](https://www.shellcheck.net/) | `shellcheck` | `**/*.sh` |\n| [sql-lint](https://github.com/joereynolds/sql-lint) | `sql-lint` | `**/*.sql` |\n| [stylelint](https://stylelint.io/) | `stylelint` | `**/*.{css,sass,scss}` |\n| [SwiftLint](https://realm.github.io/SwiftLint/) | `swiftlint` | `**/*.swift` |\n| [tflint](https://github.com/terraform-linters/tflint) | `tflint` | `**/*.tf` |\n| [yamllint](https://yamllint.readthedocs.io/) | `yamllint` | `**/*.{yaml,yml}` |\n\n### Configuration\n\nBosslint implicitly finds and loads a configuration file in the following order.\n\n1. `$XDG_CONFIG_HOME/bosslint/config.edn`\n2. `$HOME/.config/bosslint/config.edn`\n3. `$HOME/.bosslint/config.edn`\n\nAlternatively, you can specify a configuration file with `--config` option.\n\n```sh\nbosslint check --config path/to/config.edn ref1 ref2\n```\n\nThe configuration file must be written in Extensible Data Notation (EDN) format,\ne.g.,\n\n```clojure\n{:clj-kondo\n {:disabled? false}\n\n :cljfmt\n {:version \"0.13.0\"\n  :clojure {:command-options [\"--indents\" \"/path/to/indentation.edn\"]}}\n\n :eastwood\n {:disabled? true\n  :version \"1.4.3\"}}\n```\n\nThe configuration file has a single map including linter keys and config vals.\nAll linter config supports `:disabled?` option (default `false`). For specific\noptions to a linter, look at the [configuration example](example/config.edn).\n\n### Exit codes\n\nExit codes of `bosslint check` command are based on the results of all executed\nlinters.\n\n- `0`: no linters output errors and warnings\n- `1`: one or more linters output errors, or an error occurs in main Bosslint process\n- `2`: one or more linters output warnings\n\n## License\n\nCopyright © 2020 [Toshiki Takeuchi](https://totakke.net/)\n\nThis program and the accompanying materials are made available under the\nterms of the Eclipse Public License 2.0 which is available at\n\u003chttp://www.eclipse.org/legal/epl-2.0\u003e.\n\nThis Source Code may also be made available under the following Secondary\nLicenses when the conditions for such availability set forth in the Eclipse\nPublic License, v. 2.0 are satisfied: GNU General Public License as published by\nthe Free Software Foundation, either version 2 of the License, or (at your\noption) any later version, with the GNU Classpath Exception which is available\nat \u003chttps://www.gnu.org/software/classpath/license.html\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftotakke%2Fbosslint","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftotakke%2Fbosslint","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftotakke%2Fbosslint/lists"}