diff --git a/README.md b/README.md index 420e109..432aa04 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,13 @@ A small PowerShell notifier for [Donetick](https://github.com/donetick/donetick) chores. +> [!IMPORTANT] +> **AI Assistance Disclosure** +> +> OpenAI Codex was used to help create this README and the Gitea pipeline files in this repository. +> +> All released application code is written by the repository owner. + The notifier checks the Donetick external API for chores, groups tasks that are overdue or due today, and sends summary notifications through an Apprise-compatible webhook. ## What it does @@ -10,9 +17,9 @@ The notifier checks the Donetick external API for chores, groups tasks that are - Authenticates to Donetick with the `secretkey` header. - Sends one Apprise notification for overdue tasks, when any exist. - Sends one Apprise notification for tasks due today, when any exist. -- Runs once and exits. +- Runs continuously and sleeps until the next configured notification hour. -Because the container runs once and exits, schedule it with cron, systemd timers, Kubernetes CronJobs, Gitea Actions, or another scheduler if you want recurring notifications. +The container is intended to stay running. Configure the notification hours with `NOTIFICATIONTIMES`; the script wakes up at those hours, checks chores, sends any needed notifications, then sleeps until the next configured hour. ## Configuration @@ -25,6 +32,8 @@ All configuration is provided through environment variables. | `DONETICKAPIKEY` | Yes | Donetick external API key. Sent as the `secretkey` header. | | `APPRISEWEBHOOKURL` | Yes | Apprise webhook URL that accepts notification posts. | | `APPRISEWEBHOOKTAG` | Yes | Apprise tag value to include with each notification. | +| `NOTIFICATIONTIMES` | No | Comma-separated list of 24-hour clock hours when notifications should be sent, such as `8,12,17`. Defaults to `8` when unset. | +| `TZ` | No | Container timezone, such as `America/Chicago`. Recommended so notification hours match your local time. | ## Docker @@ -34,17 +43,19 @@ The published image is: docker.io/blinkfink182/donetick-notifier ``` -### Run Once +### Run ```sh -docker run --rm \ +docker run -d \ --name donetick-notifier \ -e DONETICKHOST=host.docker.internal \ -e DONETICKPORT=8787 \ -e DONETICKAPIKEY=your-donetick-api-key \ -e APPRISEWEBHOOKURL=https://apprise.example.com/notify/config \ -e APPRISEWEBHOOKTAG=all \ - docker.io/blinkfink182/donetick-notifier:latest + -e NOTIFICATIONTIMES=8,12,17 \ + -e TZ=America/Chicago \ + docker.io/blinkfink182/donetick-notifier ``` ### Docker Compose @@ -53,19 +64,21 @@ docker run --rm \ services: donetick-notifier: container_name: donetick-notifier - image: docker.io/blinkfink182/donetick-notifier:latest + image: docker.io/blinkfink182/donetick-notifier environment: - DONETICKHOST: host.docker.internal - DONETICKPORT: "8787" - DONETICKAPIKEY: your-donetick-api-key - APPRISEWEBHOOKURL: https://apprise.example.com/notify/config - APPRISEWEBHOOKTAG: all + - DONETICKHOST=host.docker.internal + - DONETICKPORT=8787 + - DONETICKAPIKEY=your-donetick-api-key + - APPRISEWEBHOOKURL=https://apprise.example.com/notify/config + - APPRISEWEBHOOKTAG=all + - NOTIFICATIONTIMES=8,12,17 + - TZ=America/Chicago ``` Run it with: ```sh -docker compose run --rm donetick-notifier +docker compose up -d ``` If Donetick and Apprise are running on the same Docker network, use the service names instead of `host.docker.internal`. @@ -73,13 +86,15 @@ If Donetick and Apprise are running on the same Docker network, use the service ```yaml services: donetick-notifier: - image: docker.io/blinkfink182/donetick-notifier:latest + image: docker.io/blinkfink182/donetick-notifier environment: - DONETICKHOST: donetick - DONETICKPORT: "8787" - DONETICKAPIKEY: your-donetick-api-key - APPRISEWEBHOOKURL: http://apprise:8000/notify/config - APPRISEWEBHOOKTAG: all + - DONETICKHOST=donetick + - DONETICKPORT=8787 + - DONETICKAPIKEY=your-donetick-api-key + - APPRISEWEBHOOKURL=http://apprise:8000/notify/config + - APPRISEWEBHOOKTAG=all + - NOTIFICATIONTIMES=8,12,17 + - TZ=America/Chicago ``` ## Build Locally @@ -89,12 +104,15 @@ docker build -t donetick-notifier . ``` ```sh -docker run --rm \ +docker run -d \ + --name donetick-notifier \ -e DONETICKHOST=host.docker.internal \ -e DONETICKPORT=8787 \ -e DONETICKAPIKEY=your-donetick-api-key \ -e APPRISEWEBHOOKURL=https://apprise.example.com/notify/config \ -e APPRISEWEBHOOKTAG=all \ + -e NOTIFICATIONTIMES=8,12,17 \ + -e TZ=America/Chicago \ donetick-notifier ``` @@ -108,29 +126,28 @@ $env:DONETICKPORT = "8787" $env:DONETICKAPIKEY = "your-donetick-api-key" $env:APPRISEWEBHOOKURL = "https://apprise.example.com/notify/config" $env:APPRISEWEBHOOKTAG = "all" +$env:NOTIFICATIONTIMES = "8,12,17" pwsh ./Start-DoneTickNotifier.ps1 ``` +The script runs continuously. Stop it with `Ctrl+C` when running interactively. + ## CI/CD This repository includes Gitea workflows for: -- Building and pushing the Docker image. +- Building and pushing the Docker image on demand. - Running security checks with Gitleaks, Semgrep, and Trivy. - Creating Gitea issues for security findings when configured with a `GITEA_TOKEN`. - Sending Apprise notifications for Docker build success or failure. -The Docker build workflow tags images as: +The security workflow runs on pushes, pull requests, and manual dispatch. On pushes, it also pushes the scanned Docker image when all checks pass. + +Docker images are tagged as: | Branch or ref | Image tag | | --- | --- | | `main` | `latest` | | refs beginning with `v` | matching ref name, such as `v1.0.0` | | all other refs | `test` | - -## AI Assistance Disclosure - -OpenAI Codex was used to help create this README and the Gitea pipeline files in this repository. - -All released application code is written by the repository owner.