74 lines
2.5 KiB
Bash
Executable File
74 lines
2.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# Usage: redmine-fetch <ticket-nr>
|
|
# stdout: Issue-JSON + alle Wiki-JSONs deren Titel mit #<ticket-nr> beginnt
|
|
# (Newline-getrennt; Wikis = nichts wenn keine Treffer)
|
|
# stderr: Hinweis auf Bilder-Speicherort (wenn Bilder vorhanden)
|
|
# Side effect: Bilder von Issue + Wikis 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_INDEX=$(curl -sf -H "X-Redmine-API-Key: $API_KEY" \
|
|
"$URL/projects/$PROJECT_IDENTIFIER/wiki/index.json" || echo "")
|
|
|
|
WIKI_TITLES=$(echo "$WIKI_INDEX" | TICKET_NR="$TICKET_NR" python3 -c "
|
|
import sys, json, os
|
|
try:
|
|
pages = json.load(sys.stdin).get('wiki_pages', [])
|
|
except Exception:
|
|
sys.exit(0)
|
|
prefix = '#' + os.environ['TICKET_NR']
|
|
for p in pages:
|
|
t = p.get('title', '')
|
|
if t == prefix or t.startswith(prefix + '_'):
|
|
print(t)
|
|
")
|
|
|
|
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"
|
|
|
|
WIKI_OUTPUT=""
|
|
while IFS= read -r title; do
|
|
[ -z "$title" ] && continue
|
|
encoded=$(python3 -c "import urllib.parse,sys;print(urllib.parse.quote(sys.argv[1], safe=''))" "$title")
|
|
wiki=$(curl -sf -H "X-Redmine-API-Key: $API_KEY" \
|
|
"$URL/projects/$PROJECT_IDENTIFIER/wiki/$encoded.json?include=attachments" || echo "")
|
|
if [ -n "$wiki" ]; then
|
|
download_images "$wiki"
|
|
WIKI_OUTPUT="${WIKI_OUTPUT}${wiki}"$'\n'
|
|
fi
|
|
done <<< "$WIKI_TITLES"
|
|
|
|
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"
|
|
printf '%s' "$WIKI_OUTPUT"
|