diff --git a/README.md b/README.md index ed6bc25..277dbb8 100644 --- a/README.md +++ b/README.md @@ -7,11 +7,7 @@ - [How to Use?](#how-to-use) - [How to Run?](#how-to-run) - [macOS/Linux using Homebrew/Linuxbrew (recommend)](#macoslinux-using-homebrewlinuxbrew-recommend) - - [Easily run the tool via Docker](#easily-run-the-tool-via-docker) - - [Non-Docker Setup](#non-docker-setup) - - [Install `go`](#install-go) - - [Install the tool (optional)](#install-the-tool-optional) - - [Run the tool](#run-the-tool) + - [Other Ways](#other-ways) - [Setting up the environment for Google Calendar Sync](#setting-up-the-environment-for-google-calendar-sync) - [Features/Issues to be worked upon](#featuresissues-to-be-worked-upon) - [Contributing towards development](#contributing-towards-development) @@ -22,6 +18,8 @@ ![release](https://img.shields.io/github/v/release/goyalmunish/reminder) ![go_version](https://img.shields.io/github/go-mod/go-version/goyalmunish/reminder) +![build](https://img.shields.io/github/actions/workflow/status/goyalmunish/reminder/ci.yml?label=build) +![release](https://img.shields.io/github/actions/workflow/status/goyalmunish/reminder/release.yml?label=release) ![license](https://img.shields.io/github/license/goyalmunish/reminder) ## Yet Another Reminder Tool/App. Why? @@ -128,107 +126,9 @@ brew upgrade goyalmunish/reminder/reminder The brew tap is maintained at [goyalmunish/homebrew-reminder](https://github.com/goyalmunish/homebrew-reminder). -### Easily run the tool via Docker +### Other Ways -_This is the easiest way to get going, if you have [Docker](https://docs.docker.com/get-docker/) installed. Just download the [`reminder` image](https://hub.docker.com/r/goyalmunish/reminder/tags) by issuing the following commands:_ - -_**Using Script:**_ - -Make sure first to clone the repo and `cd` into it. - -```sh -# pull latest reminder image, make sure ~/reminder directory exists, and run the tool -. ./scripts/run_via_docker.sh - -# run the tool (just run, without pulling image and other initialization steps) -. ./scripts/run_via_docker.sh fast -``` - -_**Using Direct Way:**_ - -```sh -# pull the image (or get the latest image) -docker pull goyalmunish/reminder - -# make sure the directory for the data file exists on the host machine -mkdir -p ~/reminder - -# spin up the container, with data file shared from the host machine -docker run -it --rm --name reminder -v ~/reminder:/root/reminder goyalmunish/reminder -``` - -_For subsequent runs, better add the below alias to `~/.bashrc` ( or `~/.zshrc`, etc), so that you can invoke the tool, just by typing `reminder` (or any other alias that you prefer):_ - -```sh -# define the alias -alias reminder='docker run -it --rm --name reminder -v ~/reminder:/root/reminder goyalmunish/reminder' -``` - -_Then, run the tool using `reminder` command._ - -### Non-Docker Setup - -Check for available installers on [**releases**](https://github.com/goyalmunish/reminder/releases) page. Otherwise, - -#### Install `go` - -On Mac, you can just install it with `brew` as: - -```sh -brew install go@1.19 -``` - -_For other platforms, check [official `go` download and install guide](https://go.dev/dl/)._ - -Check installed version: - -```sh -go version -``` - -#### Install the tool (optional) - -Clone the repo: - -```sh -git clone git@github.com:goyalmunish/reminder.git -``` - -If this results in Permission issues, such as `git@github.com: Permission denied (publickey).`, then either you [Setup Git](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup) or just use `git clone https://github.com/goyalmunish/reminder.git` instead. - -Install the tool as: - -```sh -# cd into the local copy of the repo -cd reminder - -# install the tool -go install ./cmd/reminder - -# move the binary to /usr/local/bin/ -mv ${GOPATH}/bin/reminder /usr/local/bin/reminder -``` - -#### Run the tool - -If you have installed the tool, and your `go/bin` path is alreay in `PATH`, then you can just run it as: - -```sh -reminder -``` - -Otherwise, you can just run it as (without installing, directly from clone of the repo): - -```sh -# cd into the local copy of the repo -cd reminder - -# running the tool using `make` -make run - -# or as -go run ./cmd/reminder -``` +Refer [Other Ways of Running](./readme_extension.md#other-ways-of-running). ## Setting up the environment for Google Calendar Sync diff --git a/go.mod b/go.mod index fd60cbc..93c19f1 100644 --- a/go.mod +++ b/go.mod @@ -5,23 +5,23 @@ go 1.18 require ( github.com/AlecAivazis/survey/v2 v2.3.6 github.com/google/uuid v1.3.0 - github.com/rivo/tview v0.0.0-20221221172820-02e38ea9604c + github.com/rivo/tview v0.0.0-20230104153304-892d1a2eb0da github.com/sirupsen/logrus v1.9.0 github.com/spf13/viper v1.14.0 - golang.org/x/oauth2 v0.3.0 - google.golang.org/api v0.105.0 + golang.org/x/oauth2 v0.4.0 + google.golang.org/api v0.107.0 gopkg.in/yaml.v3 v3.0.1 ) require ( - cloud.google.com/go/compute v1.13.0 // indirect - cloud.google.com/go/compute/metadata v0.2.2 // indirect + cloud.google.com/go/compute v1.14.0 // indirect + cloud.google.com/go/compute/metadata v0.2.3 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/gdamore/encoding v1.0.0 // indirect github.com/gdamore/tcell/v2 v2.5.3 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.2.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.1 // indirect github.com/googleapis/gax-go/v2 v2.7.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect @@ -46,7 +46,7 @@ require ( golang.org/x/term v0.4.0 // indirect golang.org/x/text v0.6.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20221206210731-b1a01be3a5f6 // indirect + google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef // indirect google.golang.org/grpc v1.51.0 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect diff --git a/go.sum b/go.sum index 6b1a48b..d90e30f 100644 --- a/go.sum +++ b/go.sum @@ -24,10 +24,10 @@ cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvf cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v1.13.0 h1:AYrLkB8NPdDRslNp4Jxmzrhdr03fUAIDbiGFjLWowoU= -cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= -cloud.google.com/go/compute/metadata v0.2.2 h1:aWKAjYaBaOSrpKl57+jnS/3fJRQnxL7TvR/u1VVbt6k= -cloud.google.com/go/compute/metadata v0.2.2/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= +cloud.google.com/go/compute v1.14.0 h1:hfm2+FfxVmnRlh6LpB7cg1ZNU+5edAHmW679JePztk0= +cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/longrunning v0.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs= @@ -138,8 +138,8 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4 github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.2.0 h1:y8Yozv7SZtlU//QXbezB6QkpuE6jMD2/gfzk4AftXjs= -github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.1 h1:RY7tHKZcRlk788d5WSo/e83gOyyy742E8GSs771ySpg= +github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= @@ -189,8 +189,8 @@ github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qR github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rivo/tview v0.0.0-20221221172820-02e38ea9604c h1:Y4GSXEYKYAtguH10lmQmYb7hRkJ7U+m8GvnFHKU2jrk= -github.com/rivo/tview v0.0.0-20221221172820-02e38ea9604c/go.mod h1:lBUy/T5kyMudFzWUH/C2moN+NlU5qF505vzOyINXuUQ= +github.com/rivo/tview v0.0.0-20230104153304-892d1a2eb0da h1:3Mh+tcC2KqetuHpWMurDeF+yOgyt4w4qtLIpwSQ3uqo= +github.com/rivo/tview v0.0.0-20230104153304-892d1a2eb0da/go.mod h1:lBUy/T5kyMudFzWUH/C2moN+NlU5qF505vzOyINXuUQ= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.2 h1:YwD0ulJSJytLpiaWua0sBDusfsCZohxjxzVTYjwxfV8= github.com/rivo/uniseg v0.4.2/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= @@ -317,8 +317,8 @@ golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.3.0 h1:6l90koy8/LaBLmLu8jpHeHexzMwEita0zFfYlggy2F8= -golang.org/x/oauth2 v0.3.0/go.mod h1:rQrIauxkUhJ6CuwEXwymO2/eh4xz2ZWF1nBkcxS+tGk= +golang.org/x/oauth2 v0.4.0 h1:NF0gk8LVPg1Ml7SSbGyySuoxdsXitj7TvgvuRxIMc/M= +golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -459,8 +459,8 @@ google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz513 google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.105.0 h1:t6P9Jj+6XTn4U9I2wycQai6Q/Kz7iOT+QzjJ3G2V4x8= -google.golang.org/api v0.105.0/go.mod h1:qh7eD5FJks5+BcE+cjBIm6Gz8vioK7EHvnlniqXBnqI= +google.golang.org/api v0.107.0 h1:I2SlFjD8ZWabaIFOfeEDg3pf0BHJDh6iYQ1ic3Yu/UU= +google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -505,8 +505,8 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20221206210731-b1a01be3a5f6 h1:AGXp12e/9rItf6/4QymU7WsAUwCf+ICW75cuR91nJIc= -google.golang.org/genproto v0.0.0-20221206210731-b1a01be3a5f6/go.mod h1:1dOng4TWOomJrDGhpXjfCD35wQC6jnC7HpRmOFRqEV0= +google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef h1:uQ2vjV/sHTsWSqdKeLqmwitzgvjMl7o4IdtHwUDXSJY= +google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= diff --git a/internal/model/model_test.go b/internal/model/model_test.go index 35aaa35..f1cf8e3 100644 --- a/internal/model/model_test.go +++ b/internal/model/model_test.go @@ -52,12 +52,6 @@ func (prompt *MockPromptNoteText) Run() (string, error) { return "a random note text", nil } -func skipCI(t *testing.T) { - if os.Getenv("CI") != "" { - t.Skip("Skipping testing in CI environment") - } -} - // test examples func TestDataFile(t *testing.T) { @@ -1047,7 +1041,7 @@ func TestNotesApproachingDueDate(t *testing.T) { } t.Logf("Received Texts: %v", urgentNotesText) t.Logf("Expected Texts: %v", expectNotesText) - skipCI(t) + utils.SkipCI(t) utils.AssertEqual(t, urgentNotesText, expectNotesText) // [NRP01a NRP02a NRP02b NRP03a NRP04a NRP04b NRP05a NRP05b NRP06a RAP02 RAP03 RAP04 RAP05 RAP08 RAP09 RAP10 RAP11 RAP14 RAP15 RAP16 RAP17 RMP03] // [NRP01a NRP02a NRP02b NRP03a NRP04a NRP04b NRP05a NRP05b NRP06a RAP02 RAP03 RAP04 RAP05 RAP08 RAP09 RAP10 RAP11 RAP14 RAP15 RAP16 RAP17 RMP02 RMP03]} diff --git a/pkg/utils/functions.go b/pkg/utils/functions.go index 7dd17ea..ef36c27 100644 --- a/pkg/utils/functions.go +++ b/pkg/utils/functions.go @@ -252,3 +252,10 @@ func Spinner(delay time.Duration) { } } } + +// SkipCI skips a unit test in CI environment. +func SkipCI(t *testing.T) { + if os.Getenv("CI") != "" { + t.Skip("Skipping testing in CI environment") + } +} diff --git a/pkg/utils/functions_test.go b/pkg/utils/functions_test.go index f0c8657..81b9535 100644 --- a/pkg/utils/functions_test.go +++ b/pkg/utils/functions_test.go @@ -400,6 +400,7 @@ func TestPerformWhich(t *testing.T) { utils.AssertEqual(t, err == nil, false) } func TestPerformCwdiff(t *testing.T) { + utils.SkipCI(t) // create temporary files file1, err := os.CreateTemp("./", "temp_file") defer os.Remove(file1.Name()) @@ -442,7 +443,7 @@ func TestPerformCwdiff(t *testing.T) { func TestPerformCat(t *testing.T) { // case 1 - filePath := "./functions.go" + filePath := "./utils_linker_test.go" err := utils.PerformCat(filePath) utils.AssertEqual(t, err == nil, true) // case 2 diff --git a/pkg/utils/time_test.go b/pkg/utils/time_test.go index b72782b..9ae539c 100644 --- a/pkg/utils/time_test.go +++ b/pkg/utils/time_test.go @@ -197,6 +197,7 @@ func TestTimeToStr(t *testing.T) { } } func TestGetLocalZone(t *testing.T) { + utils.SkipCI(t) var tests = []struct { name string currentTime string // RFC3339 string diff --git a/readme_extension.md b/readme_extension.md new file mode 100644 index 0000000..1e91291 --- /dev/null +++ b/readme_extension.md @@ -0,0 +1,103 @@ +## Other Ways of Running + +### Easily run the tool via Docker + +_This is the easiest way to get going, if you have [Docker](https://docs.docker.com/get-docker/) installed. Just download the [`reminder` image](https://hub.docker.com/r/goyalmunish/reminder/tags) by issuing the following commands:_ + +_**Using Script:**_ + +Make sure first to clone the repo and `cd` into it. + +```sh +# pull latest reminder image, make sure ~/reminder directory exists, and run the tool +. ./scripts/run_via_docker.sh + +# run the tool (just run, without pulling image and other initialization steps) +. ./scripts/run_via_docker.sh fast +``` + +_**Directly using `docker` command:**_ + +```sh +# pull the image (or get the latest image) +docker pull goyalmunish/reminder + +# make sure the directory for the data file exists on the host machine +mkdir -p ~/reminder + +# spin up the container, with data file shared from the host machine +docker run -it --rm --name reminder -v ~/reminder:/root/reminder goyalmunish/reminder +``` + +_For subsequent runs, better add the below alias to `~/.bashrc` ( or `~/.zshrc`, etc), so that you can invoke the tool, just by typing `reminder` (or any other alias that you prefer):_ + +```sh +# define the alias +alias reminder='docker run -it --rm --name reminder -v ~/reminder:/root/reminder goyalmunish/reminder' +``` + +_Then, run the tool using `reminder` command._ + +### Non-Docker Setup + +Check for available installers on [**releases**](https://github.com/goyalmunish/reminder/releases) page. Otherwise, + +#### Install `go` + +On Mac, you can just install it with `brew` as: + +```sh +brew install go@1.18 +``` + +_For other platforms, check [official `go` download and install guide](https://go.dev/dl/)._ + +Check installed version: + +```sh +go version +``` + +#### Install the tool (optional) + +Clone the repo: + +```sh +git clone git@github.com:goyalmunish/reminder.git +``` + +If this results in Permission issues, such as `git@github.com: Permission denied (publickey).`, then either you [Setup Git](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup) or just use `git clone https://github.com/goyalmunish/reminder.git` instead. + +Install the tool as: + +```sh +# cd into the local copy of the repo +cd reminder + +# install the tool +go install ./cmd/reminder + +# move the binary to /usr/local/bin/ +mv ${GOPATH}/bin/reminder /usr/local/bin/reminder +``` + +#### Run the tool + +If you have installed the tool, and your `go/bin` path is alreay in `PATH`, then you can just run it as: + +```sh +reminder +``` + +Otherwise, you can just run it as (without installing, directly from clone of the repo): + +```sh +# cd into the local copy of the repo +cd reminder + +# running the tool using `make` +make run + +# or as +go run ./cmd/reminder +```