# todo-ci

Check your code TODOs (and fail your ci/cd if they're overdue) 

## Quickstart

Write your todos in the format: `@todo(YYYY-MM-DD): A description of a todo...`

```rust
fn main() {
    // @todo(2022-08-10): Print something besides "Hello World!"
    println!("Hello World!");

    print!("Hello World again!");  // @todo(2022-07-10): use `println` instead of `print`
}
```

Run `todo-ci` to check for overdue TODOs in the current directory

```bash
# Local installation
todo-ci ./

# Docker
docker run -v $(pwd):/volume -it ghcr.io/aliadnani/todo-ci:latest /volume
```


![todo-ci](docs/todo-ci.gif)

## Usecase

Integrate `todo-ci` in the ci/cd platform of choice for checking TODOs in code. If any overdue TODOs are found, a `1` exit code is emitted, hence failing ci/cd runs.

## Installation

Using `cargo`:

```bash
cargo install todo-ci
```

Using `docker`:

```bash
# Just pull the latest image
docker pull ghcr.io/aliadnani/todo-ci:latest
```

## Features

```
OPTIONS:
    -d, --display-mode <DISPLAY_MODE>
            Display mode:
             - concise: total number of valid + overdue todos
             - overdue-only: total number of valid + overdue todos + details of overdue todos
             - default: total number of valid + overdue todos + details of all todos

             [default: default] [possible values: concise, overdue-only, default]

    -e, --no-error
            For disabling returning system error code (1) if there are overdue todos

    -h, --help
            Print help information

    -n, --no-ignore
            For disabling ignored files by default (.gitignore, hidden files, etc.)

    -p, --pattern <IGNORE_PATTERN>
            Pattern to check `todos` for (i.e. `*.rs` , `main.*`, etc.) [default: *]

    -t, --timezone-offset <TIMEZONE_OFFSET>
            Timezone to use for date checking [default: +00:00]

    -V, --version
            Print version information
```


