{"id":26539735,"url":"https://github.com/presmihaylov/todocheck","last_synced_at":"2025-05-15T18:09:37.873Z","repository":{"id":37038300,"uuid":"280693435","full_name":"presmihaylov/todocheck","owner":"presmihaylov","description":"A static code analyser for annotated TODO comments","archived":false,"fork":false,"pushed_at":"2025-03-09T09:33:42.000Z","size":535,"stargazers_count":431,"open_issues_count":12,"forks_count":44,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-05-11T04:57:36.056Z","etag":null,"topics":["go","hacktoberfest","linters","todo"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/presmihaylov.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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},"funding":{"github":"preslavmihaylov"}},"created_at":"2020-07-18T16:19:00.000Z","updated_at":"2025-04-03T05:38:39.000Z","dependencies_parsed_at":"2024-01-08T16:09:14.146Z","dependency_job_id":"b27de0f0-0f58-45c4-9288-191ea39e10b9","html_url":"https://github.com/presmihaylov/todocheck","commit_stats":null,"previous_names":["presmihaylov/todocheck"],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/presmihaylov%2Ftodocheck","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/presmihaylov%2Ftodocheck/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/presmihaylov%2Ftodocheck/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/presmihaylov%2Ftodocheck/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/presmihaylov","download_url":"https://codeload.github.com/presmihaylov/todocheck/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254394722,"owners_count":22063984,"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":["go","hacktoberfest","linters","todo"],"created_at":"2025-03-22T00:10:28.076Z","updated_at":"2025-05-15T18:09:37.833Z","avatar_url":"https://github.com/presmihaylov.png","language":"Go","funding_links":["https://github.com/sponsors/preslavmihaylov"],"categories":["Go","Code Analysis"],"sub_categories":[],"readme":"![todocheck logo](images/todocheck-logo.png)\n# todocheck\n\ntodocheck is a static code analyzer for annotated `TODO` comments.\n\nIt let's you create actionable `TODOs` by annotating them with issues from any of the [supported issue trackers](#supported-issue-trackers).  \nNo longer will you discover arcane, undocumented `TODO` comments, scattered across your code base.\n\nSee [How it works](#how-it-works) for more info.\n\n# Table of Contents\n- [How it works](#how-it-works)\n- [Installation](#installation)\n- [Quickstart](#quickstart)\n- [Supported Issue Trackers](#supported-issue-trackers)\n  * [Github](#github)\n  * [Gitlab](#gitlab)\n  * [Jira](#jira)\n  * [Pivotal Tracker](#pivotal-tracker)\n  * [Redmine](#redmine)\n  * [YouTrack](#youtrack)\n  * [Azure Boards](#azure)\n- [Supported Programming Languages](#supported-programming-languages)\n- [Ignored Files \u0026 Directories](#ignored-files--directories)\n- [Custom todos](#custom-todos)\n- [Supported Output Formats](#supported-output-formats)\n- [Authentication](#authentication)\n  * [None](#none)\n  * [API Token/Offline Token](#api-tokenoffline-token)\n  * [Authentication Tokens Cache](#authentication-tokens-cache)\n  * [Auth Token via Environment Variable](#auth-token-via-environment-variable)\n- [Configuration](#configuration)\n- [Contributing](#contributing)\n\n# How it works\nHere's an example of an annotated `TODO`:\n```\n// TODO J123: Fix this typo\nfunc fuu() {\n    ...\n}\n```\n\nIn case the linked issue `J123` is open, `todocheck` will not report any error. In case it is closed or doesn't exist, todocheck will show an error:  \n```\nERROR: Issue is closed.\nmyproject/main.go:12: // TODO J123: Fix this typo\n\nERROR: Issue doesn't exist.\nmyproject/main.go:14: // TODO J321: A non-existent issue\n```\n\nIf there is an unannotated `TODO` in your code base, todocheck will also report it as a malformed `TODO`:\n```\nERROR: Malformed todo.\nmyproject/main.go:16: // TODO - This is not a valid annotated todo\n```\n\n![todocheck demo gif](images/todocheck-demo.gif)\n\nOnly `TODO`s with valid, open issues are allowed to exist in the codebase.  \n\nBy integrating todocheck in your development workflow \u0026 CI pipeline, you can ensure that there will be no half-baked issue closed with pending `TODO`s in the codebase.  \n\n# Installation\n## Via homebrew\n```bash\nbrew install preslavmihaylov/taps/todocheck\n```\n\n## Download prebuilt binary\nDownload the binary for your OS from the [latest release](https://github.com/preslavmihaylov/todocheck/releases/latest).\n\nOptionally verify the `sha256` checksum:\n * For macos, run `shasum -a 256 \u003cbinary\u003e` \u0026 verify it's the same as `\u003cbinary\u003e.sha256`\n * For linux, run `sha256sum \u003cbinary\u003e`\n * For windows, use [a SHA256 checksum utility](https://kanguru.zendesk.com/hc/en-us/articles/235228027-SHA256-Checksum-Utilities)\n \n Afterwards, verify the shasum is the same as `\u003cbinary\u003e.sha256`.\n\nPlace the binary in a folder, shined upon by your `$PATH`.\n * For macos \u0026 linux, that's typically `/usr/local/bin/`\n\n## Using a Container\nAlternatively to installing the todocheck binary on your system you may use a prebuilt container image from the GitHub container registry, e.g.:\n\n```bash\ndocker run -it -v /path/to/project:/project -e TODOCHECK_AUTH_TOKEN=your_token ghcr.io/preslavmihaylov/todocheck --basepath /project\n```\n\nFor a complete list of container tags visit the [Packages section](https://github.com/preslavmihaylov/todocheck/pkgs/container/todocheck) on the GitHub project page.\nFor a complete list of `docker run` options visit the [Docker documentation](https://docs.docker.com/engine/reference/commandline/run/).\n\n# Quickstart\nFirst, you need to configure `todocheck`'s integration with your issue tracker.\nThis is done by creating a `.todocheck.yaml` file in the root of your project.\n\nFor public github or gitlab repositories, you don't need to specify a config file, as long as you are using git, as `todocheck` will interpret your issue tracker from the git configuration.\n\nAlternatively, the explicit configuration for a public github repository would look like this:\n```\norigin: github.com/user/repository\nissue_tracker: GITHUB\n```\n\nSee [Supported Issue Trackers](#supported-issue-trackers) for more issue tracker options.\n\nAfter the config file is in place, simply run `todocheck` from the root of your project.\n\nIn case you are running `todocheck` from a different directory, you can specify your project's path using the `--basepath` flag and the project configuration with `--config`:\n```\n$ todocheck --basepath path/to/project --config path/to/config/.todocheck.yaml\n```\n\nIf the `--config` option is not specified, the configuration in the basepath will be used.  \nIn the example above, it would look for it in `path/to/project/.todocheck.yaml`.\n\n# Supported Issue Trackers\nCurrently, todocheck supports the following issue trackers:\n\n| Issue Tracker                                   | Description                                                           |\n|-------------------------------------------------|-----------------------------------------------------------------------|\n| [Github](https://github.com)                    | Both public \u0026 private repositories are supported                      |\n| [Gitlab](https://gitlab.com/)                   | Both public \u0026 private repositories are supported                      |\n| [Jira](https://www.atlassian.com/software/jira) | Supported via offline and API tokens                                  |\n| [Pivotal Tracker](https://pivotaltracker.com/)  | Supported via an API token                                            |\n| [Redmine](https://redmine.org/)                 | Supports public access with no auth \u0026 private access via an API token |\n| [YouTrack](https://www.jetbrains.com/youtrack/) | Supported via an API token\n| [Azure Boards](https://bit.ly/2V2FLYU)          | Supports public access with no auth \u0026 private access via an API token |\n\n## [Github](https://github.com)\nTo integrate with a public github repository, there's no need to provide a `.todocheck.yaml` explicitly as it can automatically detect the issue tracker based on the git remote address.\nAnd if you want to be explicit, please specify the origin of your repo and the `GITHUB` issue tracker in your `.todocheck.yaml` configuration:\n```\norigin: github.com/user/repository\nissue_tracker: GITHUB\n```\n\nTo integrate with a private github repository, you'll also need to specify the `auth` section with the `apitoken` type:\n```\norigin: github.com/user/repository\nissue_tracker: GITHUB\nauth:\n  type: apitoken\n```\n\nThe first time you run the application, it will ask for your [personal access token](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token):\n![todocheck Github PAT Prompt](images/todocheck-github-pat-prompt.png)\n\nAfter you've specified it, it will store it in the auth tokens cache for subsequent executions. See the [Authentication](#authentication) section for more info.\n\n## [Gitlab](https://gitlab.com)\nTo integrate with a public gitlab repository, there's no need to provide a `.todocheck.yaml` explicitly as it can automatically detect the issue tracker based on the git remote address.\nAnd if you want to be explicit, please specify the origin of your repo and the `GITLAB` issue tracker in your `.todocheck.yaml` configuration:\n```\norigin: gitlab.com/user/repository\nissue_tracker: GITLAB\n```\n\nTo integrate with a private gitlab repository, you'll also need to specify the `auth` section with the `apitoken` type:\n```\norigin: gitlab.com/user/repository\nissue_tracker: GITLAB\nauth:\n  type: apitoken\n```\n\nThe first time you run the application, it will ask for your [personal access token](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html):\n\nAfter you've specified it, it will store it in the auth tokens cache for subsequent executions. See the [Authentication](#authentication) section for more info.\n\n## [Jira](https://www.atlassian.com/software/jira)\nTo integrate with your organization's Jira, you'll need to specify `JIRA` as your issue tracker, the origin of your jira server instance.\n\nAlong with that, you'll need to setup auth based on your preferred authentication method.\n\n### API Token\nTo use JIRA with an API token, you'll need to have an Atlassian user which you can use to [issue an API token](https://support.atlassian.com/atlassian-account/docs/manage-api-tokens-for-your-atlassian-account/).  \nYou'll also need to specify your Atlassian username.\n\nExample:\n```\norigin: https://myawesomeorg.atlassian.net\nissue_tracker: JIRA\nauth:\n  type: apitoken\n  options:\n    username: hello@gmail.com\n```\n\nFor more info on how authentication works, see the [Authentication](#authentication) section.\n\n### Offline Token\nFor more info, see [offline token](#api-tokenoffline-token).\n\nExample:\n```\norigin: https://myjira.awesomeorg.com\nissue_tracker: JIRA\nauth:\n  type: offline\n  offline_url: https://myjira.awesomeorg.com/offline\n```\n\nAfter you run todocheck for the first time, it will request your offline token:\n![Offline token prompt example](images/offline-token-prompt.png)\n\nExample offline token page:\n![Offline token page example](images/offline-token-page.png)\n\nAfter you've given the offline token to `todocheck`'s prompt, it will store it in the auth tokens cache for subsequent executions.  \n\nSee the [Authentication](#authentication) section for more info.\n\n## [Pivotal Tracker](https://pivotaltracker.com/)\nTo integrate with a pivotal tracker project, specify the origin of your project and the `PIVOTAL_TRACKER` issue tracker in your `.todocheck.yaml` configuration.  \nYou should also specify the `apitoken` as an auth type:\n```\norigin: pivotaltracker.com/projects/PROJECT_ID\nissue_tracker: PIVOTAL_TRACKER\nauth:\n  type: apitoken\n```\n\nThe first time you run the application, it will ask for your [API Token](https://www.pivotaltracker.com/help/articles/api_token/).\n\nAfter you've specified it, it will store it in the auth tokens cache for subsequent executions. See the [Authentication](#authentication) section for more info.\n\n## [Redmine](https://redmine.org)\nTo integrate with a redmine issue tracker project, specify the origin of your installation (without project path) and the `REDMINE` issue tracker in your `.todocheck.yaml` configuration.  \n\nYou should also specify the `apitoken` as an auth type if you have authentication enabled on your server:\n```\norigin: https://redmine.mycorp.com\nissue_tracker: REDMINE\nauth:\n  type: apitoken\n```\n\nAlternatively, if no authentication is required, don't include the `auth` section.\n\nThe first time you run the application, it will ask for your [API Token](https://www.redmine.org/projects/redmine/wiki/rest_api#Authentication).\n\nAfter you've specified it, it will store it in the auth tokens cache for subsequent executions. See the [Authentication](#authentication) section for more info.\n\nIn order to integrate todocheck with your redmine server, you'll need to enable the server's rest API and, optionally, enable authentication - [See Docs](https://www.redmine.org/projects/redmine/wiki/rest_api#Authentication).\n\n## [YouTrack](https://www.jetbrains.com/youtrack/)\nTo integrate with a youtrack project, specify the origin of your project and the `YOUTRACK` issue tracker in your `.todocheck.yaml` configuration.  \nYou should also specify the `apitoken` as an auth type. \n\nFor YouTrack [InCloud](https://www.jetbrains.com/help/youtrack/incloud/YouTrack-InCloud.html):\n```\norigin: youtrack-instance.myjetbrains.com\nissue_tracker: YOUTRACK\nauth:\n  type: apitoken\n```\n\nFor YouTrack [Standalone](https://www.jetbrains.com/help/youtrack/standalone/YouTrack-Documentation.html):\n```\norigin: youtrack-instance.com\nissue_tracker: YOUTRACK\nauth:\n  type: apitoken\n```\n\nThe first time you run the application, it will ask for your [API Token](https://www.jetbrains.com/help/youtrack/standalone/Manage-Permanent-Token.html#obtain-permanent-token).\n\nAfter you've specified it, it will store it in the auth tokens cache for subsequent executions. See the [Authentication](#authentication) section for more info.\n\n## [Azure Boards](https://bit.ly/2V2FLYU)\nTo integrate with a public Azure Boards project, you should specify the origin of your project and 'AZURE' as an issue tracker in your `.todocheck.yaml` configuration.\n```\norigin: https://dev.azure.com/your_user/your_public_project/\nissue_tracker: AZURE\n```\n\nTo integrate with a private Azure Boards project, you'll also need to specify the `auth` section with the `apitoken` type:\n```\norigin: https://dev.azure.com/your_user/your_private_project/\nissue_tracker: AZURE\nauth:\n  type: apitoken\n```\n\nThe first time you run the application, it will ask for your [API Token](https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate).\n\nAfter you've specified it, it will store it in the auth tokens cache for subsequent executions. See the [Authentication](#authentication) section for more info.\n\n# Supported Programming Languages\nCurrently, todocheck has parsers for three different types of comments:\n * Standard comments like `//` and `/* */`\n * Scripts using single-line comments `#`\n * Python with its `#` single-line and `\"\"\"` multi-line comments\n\nBased on this, here are the supported languages:\n\n| Supported Languages   | Description                                                                                                                |\n|-----------------------|----------------------------------------------------------------------------------------------------------------------------|\n| Bash/Zsh              | `*.sh/*.bash/*.zsh` extension. Supports `#` single-line comments                                                           |\n| C                     | `*.c` extension. Supports single-line `//` comments and multi-line `/* */` comments                                        |\n| C++                   | `*.cpp` extension. Supports single-line `//` comments and multi-line `/* */` comments                                      |\n| CSharp                | `*.cs` extension. Supports single-line `//` comments and multi-line `/* */` comments                                       |\n| Dart                  | `*.dart` extension. Supports single-line `//` comments and multi-line `/* */` comments                                     |\n| Golang                | `*.go` extension. Supports single-line `//` comments and multi-line `/* */` comments                                       |\n| Groovy                | `*.groovy`, `*.gvy`, `*.gy`, `*.gsh` extensions. Supports single-line `//` comments and multi-line `/* */` comments        |\n| Java                  | `*.java` extension. Supports single-line `//` comments and multi-line `/* */` comments                                     |\n| JavaScript/Typescript | `*.js/*.ts` extension. Supports single-line `//` comments and multi-line `/* */` comments                                  |\n| Kotlin                | `*.kt/*.kts/*.ktm` extension. Supports single-line `//` comments and multi-line `/* */` comments                           |\n| Nim                   | `*.{nim, nims, nimble}` extension. Supports single-line `#` comments and multi-line `#[ ]#` comments                       |\n| PHP                   | `*.php` extension. Supports single-line `#` and `//` comments and multi-line `/* */` comments                              |\n| Python                | `*.py` extension. Supports single-line `#` comments and multi-line `\"\"\"` comments                                          |\n| R                     | `*.R` extension. Supports single-line `//` comments and multi-line `/* */` comments                                        |\n| Rust                  | `*.rs` extension. Supports single-line `//` comments and multi-line `/* */` comments                                       |\n| Scala                 | `*.scala`, `*.sc` extensions. Supports single-line `//` comments and multi-line `/* */` comments                           |\n| Swift                 | `*.swift` extension. Supports single-line `//` comments and multi-line `/* */` comments                                    |\n| Twig                  | `*.twig` extension. Supports multi-line `{# #}` and HTML `\u003c!-- --\u003e` comments                                               |\n| Vue                   | `*.vue` extension. Supports single-line `//` comments, multi-line `/* */` comments and multi-line `\u003c!-- --\u003e` HTML comments |\n| Yaml                  | `*.yaml`, `*.yml` extension. Supports `#` single-line comments                                                             |\n\nIf you don't see your favorite language in this table, but it does use one of the supported comment formats, submit an issue [here](https://github.com/preslavmihaylov/todocheck/issues/new)\n\n# Ignored Files \u0026 Directories\nIf you want certain project files not to be included for todocheck processing, you can specify that in an `ignored` section in the `.todocheck.yaml` configuration:\n```\norigin: some.origin.com\nissue_tracker: JIRA\nignored:\n  - vendor-folder/\n  - scripts/*.sh\n```\n\nIgnored files/folders can be specified via standard pattern-matching.\nHidden files (dotfiles, i.e. `.git`, `.gitignore`, etc) are ignored by default.\n\n# Custom Todos\nBy default, `todocheck` looks for todos in the format `// TODO 231: ...` Most projects stick to this format.\n\nHowever, if you have some special todo format, which is different from the default one, you can specify a list of custom todo formats in your `.todocheck.yaml`  \n```\norigin: some.origin.com\nissue_tracker: JIRA\ncustom_todos:\n  - \"@fix\"\n  - ToDo\n```\n\nNote that this list adds additional formats the tool should match, but doesn't substitute the default one - `TODO`.\n\nWith the above configuration, `todocheck` will start matching todo comments in the following formats:\n```\n// @fix 234: a leftover task...\n// ToDo 15: A funky-looking todo comment\n```\n\nIn addition to that, you can specify the `match_case_insensitive` flag to match TODOs in any casing:\n```\norigin: some.origin.com\nissue_tracker: JIRA\nmatch_case_insensitive: true\n```\n\nWith this configuration, `todocheck` will match comments in similar formats:\n```\n// TODO 15: some comment\n// ToDO 14: another comment\n// tOdO 13: yet another one\n```\n\n# Supported Output Formats\nCurrently, todocheck supports two kinds of output - standard \u0026 json.  \n\nThe standard format is meant to be user-friendly \u0026 used in the normal day-to-day workflow.  \n```\nERROR: Malformed todo\ntmp/main.groovy:2: // TODO: Invalid todo\n        \u003e TODO should match pattern - TODO {task_id}:\n\nERROR: Malformed todo\ntmp/main.groovy:12: // TODO: Invalid todo\n        \u003e TODO should match pattern - TODO {task_id}:\n\nERROR: Issue doesn't exist\ntmp/main.groovy:15: // TODO 3: A non-existent issue\n```\n\nThe json output is meant to be used for integrating todocheck in third-party systems, such as an IDE plugin.  \nTo use json output, use the `--format json` flag.\n```json\n[\n   {\n      \"type\":\"Malformed todo\",\n      \"filename\":\"tmp/main.groovy\",\n      \"line\":2,\n      \"message\":\"TODO should match pattern - TODO {task_id}:\"\n   },\n   {\n      \"type\":\"Malformed todo\",\n      \"filename\":\"tmp/main.groovy\",\n      \"line\":12,\n      \"message\":\"TODO should match pattern - TODO {task_id}:\"\n   },\n   {\n      \"type\":\"Issue doesn't exist\",\n      \"filename\":\"tmp/main.groovy\",\n      \"line\":15,\n      \"message\":\"\"\n   }\n]\n```\n\n# Authentication\n## None\nFor public repositories, todocheck requires no authentication as the issues in the issue tracker are publicly available.\nIn this case, you need not specify any `auth` section in your configuration or explicitly set it as `none`:\n```\norigin: github.com/user/repository\nissue_tracker: GITHUB\nauth: \n  type: none\n```\n\n## API Token/Offline Token\nFor private repositories, todocheck requires an authentication token which the user specifies via a secure prompt.\n\nFor github \u0026 gitlab, there is a **personal access token** one can get in his user settings \u0026 todocheck can use that to read your repository's issues. \n[Github docs](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token) [Gitlab docs](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html)\n\nTo use this authentication type, configure the auth type as `apitoken`:\n```\norigin: github.com/user/repository\nissue_tracker: GITHUB\nauth: \n  type: apitoken\n```\n\nFor Jira, you'll need to specify an offline token:\n```\norigin: https://myjira.awesomeorg.com\nissue_tracker: JIRA\nauth:\n  type: offline\n  offline_url: https://myjira.awesomeorg.com/offline\n```\n\nAn offline token is one which your user can get by accessing a specific page, where your server generates an access token.  \n\nExample offline token page:\n![Offline token page example](images/offline-token-page.png)\n\nAfter you've received either an api token (github/gitlab) or an offline token, you can paste it in todocheck's secure prompt when asked.  \nExample with github PAT prompt:\n![todocheck Github PAT Prompt](images/todocheck-github-pat-prompt.png)\n\nAfterwards, todocheck will not ask for your token again as it will store it in its [tokens cache](#authentication-tokens-cache).\n\n## Authentication Tokens Cache\nWhenever a user grants todocheck an auth token, the token will be stored in a file `~/.todocheck/authtokens.yaml`.\n\nIf that file doesn't already exist, it will be created with read/write permissions for current user only (permission `0700`).\n\nThis file stores a key-value mapping of project origin to auth token.  \nWhenever todocheck runs, it first checks this file for an existing authentication token before contacting the issue tracker's server.\n\nIf you want to specify a different tokens cache, you can set the `tokens_cache` section in your `.todocheck.yaml` configuration:\n```\n# remainder omitted\nauth:\n  # remainder omitted\n  tokens_cache: path/to/tokens_cache\n```\n\n## Auth Token via Environment Variable\nIf you need to pass an authentication token via an environment variable, use the `TODOCHECK_AUTH_TOKEN` environment variable.\n\nExample usage:\n```\nTODOCHECK_AUTH_TOKEN=\u003csecret-token\u003e todocheck --basepath path/to/project\n```\n\nThis can be useful when you want to integrate todocheck in your CI pipeline.\n\n# Configuration\nIn your `.todocheck.yaml` configuration, you have the following configuration options:\n * origin - the origin of your remote repository/issue tracker (example: `github.com/golang/go`)\n * issue_tracker - the issue tracker type you're using. Possible options - `GITHUB`, `GITLAB`, `JIRA`\n * ignored - a list of directories/files todocheck should ignore. Supports pattern-macthing, e.g. `*.sh`.\n * custom_todos - a list of custom todos variables. `TODO` will always be added. (example: `\"@fix\"`)\n * auth - the authentication configuration for your issue tracker. If not present, it defaults to auth `type: none`\n   * type - the type of authentication. Possible options - `none` (default), `offline`, `apitoken`A\n   * offline_url - the url for fetching offline tokens. Only used when type is `offline`\n   * tokens_cache - the location of your auth tokens cache. Defaults to `~/.todocheck/authtokens.yaml`\n\nIn your tokens cache (default: `~/.todocheck/authtokens.yaml`), authentication tokens are stored in the following format:\n```\ntokens:\n  github.com/user1/repo1: SECRET_TOKEN_1\n  gitlab.com/user2/repo2: SECRET_TOKEN_2\n  https://jira.awesomeorg.com/offline: SECRET_TOKEN_3\n```\n\nIf you'd like to explicitly specify an access token in this file, feel free to do so. \nThis will let the user not have to manually input the token on the first todocheck execution.  \n\nThis can be used e.g. in a CI environment, in an initial laptop setup script, etc.  \nAlternatively, use an [Auth Token via Environment Variable](#auth-token-via-environment-variable)\n\n# Contributing\nIf you want to report an issue, make improvement suggestions or open a pull request, refer to the [Contributing guide](./CONTRIBUTING.md)\n\nSpecial thanks to all the project's [contributors](https://github.com/preslavmihaylov/todocheck/graphs/contributors)!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpresmihaylov%2Ftodocheck","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpresmihaylov%2Ftodocheck","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpresmihaylov%2Ftodocheck/lists"}