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 Standardfunktionen zweckentfremdet werden.
Links in Projektbeschreibung
Manchmal helfen auch einfache Dinge. Zum Beispiel unterstützt auch die Projektbeschreibung Markdown. Man kann sich dort also einfach Hyperlinks direkt zu den Issue Listen einfügem.
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.
Deadlines
Jeder Issue kann ein Fälligkeitsdatum zugewiesen werden. Dieses taucht dann in der Liste auf. Die Liste kann auch nach diesem Datum sortiert werden.
Ist eine Issue nicht zur Deadline abgearbeitet, kann TaskOMat (siehe weiter unten) mit einer kleinen Errinnerung unterstützen.
Prioritäten
Klickt man den Stern in der Label Liste an, wird das Label zu einem priorisiertem Label. Die Issues werden entsprechend sortiert dargestellt.
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.
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.
Damit der Cron bereits angelegte Objekte wieder findet, werden in automatisch angelegten Milestones und Issues Notes mit einem YAML Codeblock angelegt.
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: 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.
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.
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