TaskOMat: GitLab als persönliche ToDo

2020-08-09 - christian - gitlab, projects

Seit einiger Zeit nutze ich den GitLab Issue Tracker als persönliche ToDo für Haushalt und Dinge, die man mal gerne vergisst.

Neben einem kleinen Bot welcher automatisiert regelmäßig wiederkehrende Tasks anlegt und verschiedene Einstellungen sicherstellt, können auch diverse Standard­funktionen zweckentfremdet werden.

Manchmal helfen auch einfache Dinge. Zum Beispiel unterstützt auch die Projekt­beschreibung Markdown. Man kann sich dort also einfach Hyperlinks direkt zu den Issue Listen einfügem.

Links in Projektbeschreibungen

Zeiterfassung & Milestones

Innerhalb von Issues können Zeiten erfasst werden. Sprich: Wie lange man mit einer Aufgabe verbracht hat. Dazu verwendet man die Quick Actions:

/spend 5h
/close

Sendet man diesen Kommentar ab, werden fünf Stunden erfasst und die Issue geschlossen. Weist man der Issue einen Milestone zu, wird in diesem Milestone automatisch eine Summe aller erfassten Zeiten angezeigt.

Timetracking

Deadlines

Jeder Issue kann ein Fälligkeits­datum zugewiesen werden. Dieses taucht dann in der Liste auf. Die Liste kann auch nach diesem Datum sortiert werden.

Fälligkeitsdatum

Ist eine Issue nicht zur Deadline abgearbeitet, kann TaskOMat (siehe weiter unten) mit einer kleinen Errinnerung unterstützen.

Deadline abgelaufen

Prioritäten

Klickt man den Stern in der Label Liste an, wird das Label zu einem priorisiertem Label. Die Issues werden entsprechend sortiert dargestellt.

Prioritäten

TaskOMat: Wiederkehrende ToDos

Das Hauptscript meiner GitLab Bot Sammlung TaskOMat legt via Cronjob wiederkehrende Tasks als neue Issue an, und versucht dabei weitestgehend Intelligent zu sein.

Aus folgender YAML Datei…

taskomat:
  title: Zähler ablesen
  labels:
    - medium
    - Wohnung
  due: 14
  assignees: [ 2 ]
  description: |
    Zähler ablesen und Werte aufschreiben.

    | Zähler         | Nummer   | Stand | Differenz |
    |----------------|----------|-------|-----------|
    | Wasser Wohnung | 00000000 | 0     |  +0       |
    | Wasser Keller  | 00000000 | 0     |  +0       |
    | Strom          | 00000000 | 0     |  +0       |
    | Gas            | 00000000 | 0     |  +0       |

… erstellt der Cronjob ein neues Issue, sofern es kein bereits offenes Issue gibt. Ist bereits ein Issue vorhanden, wird ein Mention an den Besitzer der Issue gesendet.

TaskOMat Neue Issue

Außerdem listet der Bot alle Issues des gleichen Typs in einem Kommentar auf, sodass man sich ältere, bereits abgeschlossene Tasks noch einmal anschauen kann.

TaskOMat Related Issues

Damit der Cron bereits angelegte Objekte wieder findet, werden in automatisch angelegten Milestones und Issues Notes mit einem YAML Codeblock angelegt.

TaskOMat Config

TaskOMat: Housekeeping

Das Housekeepingscript meiner GitLab Bot Sammlung TaskOMat stellt via Cronjob diverse Regeln sicher:

  • Weise alle unzugewiesenen Issues einem bestimmten User zu
  • Weise Issues mit einem bestimmten Label und ohne Milestone einem Label-Milestone zu, um damit eine Gesamtsumme des Timetrackings zu erhalten
  • Geschlossene Issues sperren
  • Geschlossene Issues als Confidential markieren
  • Mention an den Besitzer der Issue erstellen, wenn die Deadline der Issue abgelaufen ist
  • Existierende Past-Due-Mentions löschen, wenn die Deadline verlängert wurde

TaskOMat Milestone

TaskOMat: Counters

Mit dem einem einfachen Chatbot Befehl !count 42 kann in Issues, welche das Label Counter zugewiesen haben (das ist leider aus Performancegründen notwendig), Dinge gezählt werden.

TaskOMat Counter Command

Ich nutze dieses Feature zum Beispiel um meine Fahrradkilometer zu erfassen.

Der Bot erzeugt dann in einem Note eine tabellarische Auswertung. Es wird monatlich zusammengezählt und eine Gesamtsumme gebildet.

TaskOMat Counter Summary

Ob man eine Zahleneinheit angibt (mit !countunit km) oder nicht ist einem selbst überlassen. Generell kann alles gezählt werden. Kilometer, Euro, whatever.

Definiert man ein Ziel mit !countgoal 1000 wird ein Fortschrittsbalken mit Hilfe von https://progress-bar.dev angezeigt.

Auch hier legt das Script wieder ein Note in der Issue an, wo die Metadaten als YAML Code Block gespeichert werden.

GitLab Pipelines + TaskOMat

Will man keine Cronjobs “irgendwo” anlegen, kann man dies auch direkt mit GitLab Pipelines erledigen. Eine grobe Anleitung:

  • Im ToDo Projekt Repositories und Pipelines aktivieren
  • Scripte und YAML Collections einchecken
  • TASKOMAT_TOKEN als Pipeline Variable hinterlegen
  • .gitlab-ci.yml Datei anlegen
stages:
  - cron

cron:housekeep:
  stage: cron
  script: [ "./housekeep.py --gitlab-url \"$CI_SERVER_URL\" --project \"$CI_PROJECT_PATH\" --assignee 2 --milestone-label Bürokratie --milestone-label Wohnung --delay 900 --max-updated-age 2592000" ]
  only:
    refs:
      - master
    variables:
      - $CRON_MODE == "housekeep"

cron:taskomat:
  stage: cron
  script: [ "./taskomat.py --gitlab-url \"$CI_SERVER_URL\" --project \"$CI_PROJECT_PATH\" --collection-dir ./$CRON_COLLECTION" ]
  only:
    refs:
      - master
    variables:
      - $CRON_MODE == "taskomat"
      - $CRON_COLLECTION
  • Pipeline Schedules mit entsprechenden Variablen anlegen

TaskOMat Schedule


serverless.industries BG by Carl Lender (CC BY 2.0)
733b43b5 2020-11-07 00:58