Files
project-starter/redmine-fetch
2026-05-18 05:35:51 +02:00

49 lines
1.8 KiB
Bash
Executable File

#!/bin/bash
# Usage: redmine-fetch <ticket-nr>
# stdout: Issue-JSON + Wiki-JSON (Newline-getrennt; Wiki = leer wenn nicht vorhanden)
# stderr: Hinweis auf Bilder-Speicherort (wenn Bilder vorhanden)
# Side effect: Bilder von Issue + Wiki nach /tmp/redmine-{nr}/
TICKET_NR="$1"
URL="https://servicecenter.mitho-media.de"
API_KEY=$(cat /home/arbeit/projects/project-starter/.redmine_api_key)
ATTACH_DIR="/tmp/redmine-$TICKET_NR"
ISSUE_JSON=$(curl -s -H "X-Redmine-API-Key: $API_KEY" \
"$URL/issues/$TICKET_NR.json?include=journals,attachments,relations")
PROJECT_ID=$(echo "$ISSUE_JSON" | python3 -c "import sys,json;print(json.load(sys.stdin)['issue']['project']['id'])")
PROJECT_IDENTIFIER=$(curl -s -H "X-Redmine-API-Key: $API_KEY" \
"$URL/projects/$PROJECT_ID.json" \
| python3 -c "import sys,json;print(json.load(sys.stdin)['project']['identifier'])")
WIKI_JSON=$(curl -sf -H "X-Redmine-API-Key: $API_KEY" \
"$URL/projects/$PROJECT_IDENTIFIER/wiki/%23$TICKET_NR.json?include=attachments" || echo "")
rm -rf "$ATTACH_DIR"
mkdir -p "$ATTACH_DIR"
download_images() {
local json="$1"
[ -z "$json" ] && return
echo "$json" | python3 -c "
import sys, json
d = json.load(sys.stdin)
container = d.get('issue', d.get('wiki_page', {}))
for a in container.get('attachments', []):
if a.get('content_type', '').startswith('image/'):
print(a['content_url'] + '|' + a['filename'])
" | while IFS='|' read -r url filename; do
[ -n "$url" ] && curl -sf -H "X-Redmine-API-Key: $API_KEY" -o "$ATTACH_DIR/$filename" "$url"
done
}
download_images "$ISSUE_JSON"
download_images "$WIKI_JSON"
COUNT=$(find "$ATTACH_DIR" -maxdepth 1 -type f 2>/dev/null | wc -l)
[ "$COUNT" -gt 0 ] && echo "$COUNT Bild(er) gespeichert in $ATTACH_DIR" >&2
echo "$ISSUE_JSON"
echo "$WIKI_JSON"