forgejo-todo-checker/README.md
Paul Campbell a7e6ca4172
All checks were successful
Test / checks (map[name:nightly]) (push) Successful in 3m58s
Test / checks (map[name:stable]) (push) Successful in 1m24s
fix: Only look for issue number within the comment
Closes kemitix/forgejo-todo-checker#7
2024-09-22 11:06:54 +01:00

87 lines
2.6 KiB
Markdown

# forgejo-todo-checker
Checks your source files for TODO and FIXME comments, failing your build where they don't have an open issue number.
- [A ForgeJo Action](https://forgejo.org/docs/next/user/actions/).
(Inspired by https://woodpecker-ci.org/plugins/TODO-Checker)
## code.forgejo.org Mirror
Main development takes place on [git.kemitix.net](https://git.kemitix.net/kemitix/forgejo-todo-checker).
There is a mirror on Codeberg.org as [kemitix/todo-checker](https://code.forgejo.org/kemitix/todo-checker).
This mirror allows you to refer to the action as simply `kemitix/todo-checker@v1.0.0`.
## Usage
```yaml
jobs:
tests:
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Check TODOs
# Original:
# uses: https://git.kemitix.net/kemitix/forgejo-todo-checker@v1.0.0
# Codeberg mirror:
uses: kemitix/todo-checker@v1.0.0
```
## Comments Format
This Action looks for comments in the following formats:
```
// TODO: (#19) This is the comment
// FIXME (#29) This is the other comment
# TODO (#19) This is the comment
# FIXME: (#29) This is the other comment
```
These are all considered valid comments. Pick the format that fits your language or file best.
Comments are found by matching them against this regular expression: `(#|//)\s*(TODO|FIXME):?`
i.e.: be a comment by starting with either '#' or '//', then the word `TODO` or `FIXME` in all caps, with or without a trailing '`:`'.
Once we have a line with such a comment we look for the Issue Number with: `\(#?(?P<ISSUE_NUMBER>\d+)\)`
i.e.: a number in '`()`', with or without a leading '`#`' (inside the braces) immediately after the '`TODO`' or '`FIXME`'.
The `ISSUE_NUMBER` must correspond to an **OPEN** Issue in the repo that the Action is running against.
If the issue has been closed or can't be found then the comment is marked as an error and the Check with fail.
## Example Output
The output will be similar to the following if there are any errors:
```
Forgejo TODO Checker!
Repo : kemitix/my-project
Regex: (#|//)\s*(TODO|FIXME):?\s*\(#?(?P<ISSUE_NUMBER>\d+)\)
- Issue number missing: src/main.rs#38:
// TODO: implement this cool feature and get rich!
>> 1 error in src/main.rs
- Closed/Invalid Issue: (19) src/model/line.rs#12:
// TODO: (#19) This is the comment
>> 1 error in src/model/line.rs
Error: Invalid or closed TODO/FIXMEs found
```
The first error is because there is no issue number associated with the TODO comment.
The second error is because the issue has already been closed.
## License
`forgejo-todo-checker` is released under the MIT License.