--- name: redmine description: Redmine-Projekte, -Tickets, -Versionen und -News lesen/anlegen/aktualisieren via REST-API. Use when the user mentions "Redmine", "Ticket", "Issue in Redmine", "Meilenstein/Milestone/Version", "Projektstand/News" or die Projekte "pg-wissen"/"devops". version: 0.2.0 --- # Redmine (redmine.py) Interagiert mit Redmine (https://redmine.inmedias.it) über die REST-API: Projekte, Tickets, Versionen und News auflisten, anzeigen, anlegen, aktualisieren und kommentieren - über die mitgelieferte, self-contained `redmine.py`. Namen werden auf IDs aufgelöst (Projekt, Tracker, Status, Priorität, Version). ## Ausführen `redmine.py` ist ein eigenständiges `uv run --script` (Inline-Deps: `requests`, `python-dotenv`). Aus dem Skill-Verzeichnis: ```bash ./redmine.py ... ``` `--json` (vor dem Befehl) gibt jeweils die Rohdaten aus. ### Kontext & Stammdaten ```bash ./redmine.py me # aktueller Benutzer (id, admin?, mail) ./redmine.py projects # sichtbare Projekte (id, identifier, name) ./redmine.py meta trackers # Stammdaten: trackers | statuses | priorities ``` ### Tickets auflisten / anzeigen ```bash ./redmine.py issues --project pg-wissen # offene Tickets (Default) ./redmine.py issues --project pg-wissen --status '*' # alle (open|closed|*|Status-ID) ./redmine.py issues --assigned me --sort priority:desc ./redmine.py issues --query "Wiki" --limit 20 # Volltext im Betreff (~-Suche) ./redmine.py show 290 [--notes] # Ticket (optional mit Journalen) ``` ### Anlegen / Aktualisieren / Kommentieren `--project` und `--subject` sind bei `create` Pflicht. Beschreibung inline (`--description`) oder aus Datei/stdin (`--description-file -`) übergeben - nicht als langes Shell-Argument (Sonderzeichen). Weitere Felder: `--tracker`, `--status`, `--priority`, `--assigned me`, `--parent `, `--version `, `--done <0-100>`. ```bash ./redmine.py create --project pg-wissen --subject "Titel" \ --tracker Feature --description-file - < body.md ./redmine.py update 290 --status Erledigt --done 100 --notes "erledigt" ./redmine.py comment 290 "kurzer Kommentar" ``` ### Versionen (Meilensteine) Versionen tragen die grobe Reihenfolge und speisen die Roadmap-Ansicht. ```bash ./redmine.py versions --project devops # auflisten ./redmine.py versions --project devops --name "Phase 1" \ --due 2026-10-15 --description "Was in dieser Phase zu tun ist" ./redmine.py create --project devops --subject "Schritt" --version "Phase 1" ./redmine.py update 350 --version 23 # ohne --project: ID ``` Ein Versionsname lässt sich nur mit `--project` auflösen, weil Versionen zu einem Projekt gehören. Bei `update` ist `--project` meist nicht angegeben - dort die Versions-ID verwenden. Anlegen erfordert das Recht *manage_versions*. ### News (Projektstand, Ankündigungen) ```bash ./redmine.py news --project devops # auflisten ./redmine.py news --project devops --title "Kurzer Titel" \ --summary "Eine Zeile für die Übersicht" \ --description-file text.md ./redmine.py news --id 1 --description-file korrigiert.md # ändern ``` Zwei Eigenheiten der Redmine-API: - **Der Titel darf höchstens 60 Zeichen haben**, sonst HTTP 422. `redmine.py` prüft das vorab. - Die Antwort beim Anlegen enthält **keine News-ID**; der Befehl gibt deshalb die Projekt-URL aus statt eines toten Direktlinks. Ändern per `--id` geht trotzdem (`PUT /news/{id}.json`). Format ist Markdown, wie bei Tickets. ## Zugangsdaten `redmine.py` bringt **keinen** Schlüssel mit. Jede/r hinterlegt einen eigenen API-Key als Umgebungsvariable oder in einer dotenv-Datei (Reihenfolge: `~/.config/dokumentierer/.env`, dann Datei im Arbeitsverzeichnis, dann bereits gesetzte Env-Variablen). Siehe `.env.example`: - `REDMINE_URL` — Basis-URL (z.B. `https://redmine.inmedias.it`) - `REDMINE_API_KEY` — persönlicher API-Zugriffsschlüssel unter https://redmine.inmedias.it/my/account (rechts „API-Zugriffsschlüssel"). Fehlt der Schlüssel dort, ist der REST-Webservice noch nicht aktiviert (Administration → Konfiguration → API). ## Hinweise - Schreibzugriff nur in Projekten mit „Add/Edit issues"-Recht; ein Nicht-Admin kann keine Tickets in fremden Projekten ändern. - **Ticket-Beziehungen** (`blocks`, `relates`, `precedes`) deckt `redmine.py` nicht ab - dafür `POST /issues//relations.json`. Ein Ticket kann nicht mit einem eigenen Unterticket verknüpft werden (HTTP 422). - Die Priorität eines Elterntickets leitet Redmine aus den Unteraufgaben ab; ein von Hand gesetzter Wert wird überschrieben. Abschaltbar unter Administration → Konfiguration → „Attribute übergeordneter Tickets".