As some of you know, I have a lot of irons in the fire. Some of them are the natural problem of programmers where many interesting things never take root but sometimes there are a few that do and they quickly blossom in needing more time. In other cases, it is commissions due, weekly chapters, and the normal household to do list.

I keep most of my issues in GitLab including things I have to do for sales tax, filing dates, and even per-project items. I also keep my novels and commissions there, along with associated issues to keep each moving.

So, when I get stressed out, I write things to help me. In this case, I decided to write mfgames-tasks which pulls all of those assigned issues and throws it into a single Markdown file which I keep on Dropbox across all my machines. This way, it picks up the items from each of those repositories and jams it into a file that looks like this:

# dmoonfire / mfgames-culture-js

* Errors representing some seconds and milliseconds

# dmoonfire / mfgames-locking-cil

* [simple] Add/update unit tests
* [simple] Get this packaged and uploaded to NuGet

# typewriter-press / events

* {2018-08-30} Register as an attendee
* {2018-03-30} Register as a vendor and get a table

It handles due dates (in {2018-03-30}) and labels (such as [simple]). If there are none, it skips them. On GitLab, if the issue is assigned to a milestone and doesn't have a due date of its own, it uses the milestone's due date.

Another big feature is that GitLab issues that are assigned to a milestone that hasn't started, it doesn't include them. This lets me set up quarterly or monthly milestones (e.g., taxes) and have them pop up when they are needed.


I wrote this in Typescript because I really like it as a scripting language and it has a nice ecosystem. Installation is pretty simple:

npm install --global mfgames-tasks-cli


As my preferred configuration file format, I have a mfgames-tasks.yaml file on my laptop. It looks somewhat like this:

# This is what defines the sources to scan for outstanding tasks.
    - id:       github-dmoonfire
      type:     github
      token:    TOKEN # Get from GitHub settings
    - id:       gitlab-dmoonfire
      type:     gitlab
      token:    TOKEN # Get from GitLab settings
    # You can have multiple GitLab and GitHub accounts.

# This defines how the files are written out. There is only one choice and it doesn't have formatting.
    - type:      markdown
      id:        md
      path:      /path/to/output

With the above file, I just have this added to my hourly cron:

mfgames-tasks write path/to/mfgames-tasks.yaml


Yeah, there isn't a lot of documentation here.

Now, to work on the 332 lines of items on my list.