update
This commit is contained in:
@@ -1,8 +1,9 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Usage: redmine-fetch <ticket-nr>
|
# Usage: redmine-fetch <ticket-nr>
|
||||||
# stdout: Issue-JSON + Wiki-JSON (Newline-getrennt; Wiki = leer wenn nicht vorhanden)
|
# 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)
|
# stderr: Hinweis auf Bilder-Speicherort (wenn Bilder vorhanden)
|
||||||
# Side effect: Bilder von Issue + Wiki nach /tmp/redmine-{nr}/
|
# Side effect: Bilder von Issue + Wikis nach /tmp/redmine-{nr}/
|
||||||
|
|
||||||
TICKET_NR="$1"
|
TICKET_NR="$1"
|
||||||
URL="https://servicecenter.mitho-media.de"
|
URL="https://servicecenter.mitho-media.de"
|
||||||
@@ -17,8 +18,21 @@ PROJECT_IDENTIFIER=$(curl -s -H "X-Redmine-API-Key: $API_KEY" \
|
|||||||
"$URL/projects/$PROJECT_ID.json" \
|
"$URL/projects/$PROJECT_ID.json" \
|
||||||
| python3 -c "import sys,json;print(json.load(sys.stdin)['project']['identifier'])")
|
| python3 -c "import sys,json;print(json.load(sys.stdin)['project']['identifier'])")
|
||||||
|
|
||||||
WIKI_JSON=$(curl -sf -H "X-Redmine-API-Key: $API_KEY" \
|
WIKI_INDEX=$(curl -sf -H "X-Redmine-API-Key: $API_KEY" \
|
||||||
"$URL/projects/$PROJECT_IDENTIFIER/wiki/%23$TICKET_NR.json?include=attachments" || echo "")
|
"$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"
|
rm -rf "$ATTACH_DIR"
|
||||||
mkdir -p "$ATTACH_DIR"
|
mkdir -p "$ATTACH_DIR"
|
||||||
@@ -39,10 +53,21 @@ for a in container.get('attachments', []):
|
|||||||
}
|
}
|
||||||
|
|
||||||
download_images "$ISSUE_JSON"
|
download_images "$ISSUE_JSON"
|
||||||
download_images "$WIKI_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=$(find "$ATTACH_DIR" -maxdepth 1 -type f 2>/dev/null | wc -l)
|
||||||
[ "$COUNT" -gt 0 ] && echo "$COUNT Bild(er) gespeichert in $ATTACH_DIR" >&2
|
[ "$COUNT" -gt 0 ] && echo "$COUNT Bild(er) gespeichert in $ATTACH_DIR" >&2
|
||||||
|
|
||||||
echo "$ISSUE_JSON"
|
echo "$ISSUE_JSON"
|
||||||
echo "$WIKI_JSON"
|
printf '%s' "$WIKI_OUTPUT"
|
||||||
|
|||||||
@@ -7,6 +7,10 @@ if [ -d "$DOC" ]; then
|
|||||||
sudo mount --bind "$DOC" "$PROJEKT/doc"
|
sudo mount --bind "$DOC" "$PROJEKT/doc"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -s /tmp/projekt-info.txt ]; then
|
||||||
|
cp /tmp/projekt-info.txt "$PROJEKT/CLAUDE.md"
|
||||||
|
fi
|
||||||
|
|
||||||
TAB_TICKET=""
|
TAB_TICKET=""
|
||||||
if [ -n "$TICKET_NR" ]; then
|
if [ -n "$TICKET_NR" ]; then
|
||||||
TAB_TICKET="gnome-terminal --tab --working-directory='$PROJEKT' -- bash -c 'claude \"Verschaff dir kurz Projekt-Überblick (ddev, shopware 6.6). Lies dann /tmp/redmine-$TICKET_NR/data.json (enthält Redmine Issue + Briefing-Wiki) sowie ggf. Bilder unter /tmp/redmine-$TICKET_NR/. Liste die für das Ticket nötigen Features als knappe Bullet-Liste auf - vollständig, nichts weglassen, aber auch nicht aufgebläht. Simpel und kurz.\"; exec bash'"
|
TAB_TICKET="gnome-terminal --tab --working-directory='$PROJEKT' -- bash -c 'claude \"Verschaff dir kurz Projekt-Überblick (ddev, shopware 6.6). Lies dann /tmp/redmine-$TICKET_NR/data.json (enthält Redmine Issue + Briefing-Wiki) sowie ggf. Bilder unter /tmp/redmine-$TICKET_NR/. Liste die für das Ticket nötigen Features als knappe Bullet-Liste auf - vollständig, nichts weglassen, aber auch nicht aufgebläht. Simpel und kurz.\"; exec bash'"
|
||||||
|
|||||||
@@ -7,6 +7,10 @@ if [ -d "$DOC" ]; then
|
|||||||
sudo mount --bind "$DOC" "$PROJEKT/doc"
|
sudo mount --bind "$DOC" "$PROJEKT/doc"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -s /tmp/projekt-info.txt ]; then
|
||||||
|
cp /tmp/projekt-info.txt "$PROJEKT/CLAUDE.md"
|
||||||
|
fi
|
||||||
|
|
||||||
TAB_TICKET=""
|
TAB_TICKET=""
|
||||||
if [ -n "$TICKET_NR" ]; then
|
if [ -n "$TICKET_NR" ]; then
|
||||||
TAB_TICKET="gnome-terminal --tab --working-directory='$PROJEKT' -- bash -c 'claude \"Verschaff dir kurz Projekt-Überblick (ddev, shopware 6.6). Lies dann /tmp/redmine-$TICKET_NR/data.json (enthält Redmine Issue + Briefing-Wiki) sowie ggf. Bilder unter /tmp/redmine-$TICKET_NR/. Liste die für das Ticket nötigen Features als knappe Bullet-Liste auf - vollständig, nichts weglassen, aber auch nicht aufgebläht. Simpel und kurz.\"; exec bash'"
|
TAB_TICKET="gnome-terminal --tab --working-directory='$PROJEKT' -- bash -c 'claude \"Verschaff dir kurz Projekt-Überblick (ddev, shopware 6.6). Lies dann /tmp/redmine-$TICKET_NR/data.json (enthält Redmine Issue + Briefing-Wiki) sowie ggf. Bilder unter /tmp/redmine-$TICKET_NR/. Liste die für das Ticket nötigen Features als knappe Bullet-Liste auf - vollständig, nichts weglassen, aber auch nicht aufgebläht. Simpel und kurz.\"; exec bash'"
|
||||||
|
|||||||
@@ -7,6 +7,10 @@ if [ -d "$DOC" ]; then
|
|||||||
sudo mount --bind "$DOC" "$PROJEKT/doc"
|
sudo mount --bind "$DOC" "$PROJEKT/doc"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -s /tmp/projekt-info.txt ]; then
|
||||||
|
cp /tmp/projekt-info.txt "$PROJEKT/CLAUDE.md"
|
||||||
|
fi
|
||||||
|
|
||||||
TAB_TICKET=""
|
TAB_TICKET=""
|
||||||
if [ -n "$TICKET_NR" ]; then
|
if [ -n "$TICKET_NR" ]; then
|
||||||
TAB_TICKET="gnome-terminal --tab --working-directory='$PROJEKT' -- bash -c 'claude \"Verschaff dir kurz Projekt-Überblick (ddev, shopware 6.6). Lies dann /tmp/redmine-$TICKET_NR/data.json (enthält Redmine Issue + Briefing-Wiki) sowie ggf. Bilder unter /tmp/redmine-$TICKET_NR/. Liste die für das Ticket nötigen Features als knappe Bullet-Liste auf - vollständig, nichts weglassen, aber auch nicht aufgebläht. Simpel und kurz.\"; exec bash'"
|
TAB_TICKET="gnome-terminal --tab --working-directory='$PROJEKT' -- bash -c 'claude \"Verschaff dir kurz Projekt-Überblick (ddev, shopware 6.6). Lies dann /tmp/redmine-$TICKET_NR/data.json (enthält Redmine Issue + Briefing-Wiki) sowie ggf. Bilder unter /tmp/redmine-$TICKET_NR/. Liste die für das Ticket nötigen Features als knappe Bullet-Liste auf - vollständig, nichts weglassen, aber auch nicht aufgebläht. Simpel und kurz.\"; exec bash'"
|
||||||
|
|||||||
@@ -7,6 +7,10 @@ if [ -d "$DOC" ]; then
|
|||||||
sudo mount --bind "$DOC" "$PROJEKT/doc"
|
sudo mount --bind "$DOC" "$PROJEKT/doc"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -s /tmp/projekt-info.txt ]; then
|
||||||
|
cp /tmp/projekt-info.txt "$PROJEKT/CLAUDE.md"
|
||||||
|
fi
|
||||||
|
|
||||||
TAB_TICKET=""
|
TAB_TICKET=""
|
||||||
if [ -n "$TICKET_NR" ]; then
|
if [ -n "$TICKET_NR" ]; then
|
||||||
TAB_TICKET="gnome-terminal --tab --working-directory='$PROJEKT' -- bash -c 'claude \"Verschaff dir kurz Projekt-Überblick (ddev, shopware 6.6). Lies dann /tmp/redmine-$TICKET_NR/data.json (enthält Redmine Issue + Briefing-Wiki) sowie ggf. Bilder unter /tmp/redmine-$TICKET_NR/. Liste die für das Ticket nötigen Features als knappe Bullet-Liste auf - vollständig, nichts weglassen, aber auch nicht aufgebläht. Simpel und kurz.\"; exec bash'"
|
TAB_TICKET="gnome-terminal --tab --working-directory='$PROJEKT' -- bash -c 'claude \"Verschaff dir kurz Projekt-Überblick (ddev, shopware 6.6). Lies dann /tmp/redmine-$TICKET_NR/data.json (enthält Redmine Issue + Briefing-Wiki) sowie ggf. Bilder unter /tmp/redmine-$TICKET_NR/. Liste die für das Ticket nötigen Features als knappe Bullet-Liste auf - vollständig, nichts weglassen, aber auch nicht aufgebläht. Simpel und kurz.\"; exec bash'"
|
||||||
|
|||||||
@@ -6,6 +6,10 @@ if [ -d "$DOC" ]; then
|
|||||||
sudo mount --bind "$DOC" "$PROJEKT/doc"
|
sudo mount --bind "$DOC" "$PROJEKT/doc"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -s /tmp/projekt-info.txt ]; then
|
||||||
|
cp /tmp/projekt-info.txt "$PROJEKT/CLAUDE.md"
|
||||||
|
fi
|
||||||
|
|
||||||
code "$PROJEKT" &
|
code "$PROJEKT" &
|
||||||
|
|
||||||
gnome-terminal -- bash -c "$(cat <<EOF
|
gnome-terminal -- bash -c "$(cat <<EOF
|
||||||
|
|||||||
@@ -6,6 +6,10 @@ if [ -d "$DOC" ]; then
|
|||||||
sudo mount --bind "$DOC" "$PROJEKT/doc"
|
sudo mount --bind "$DOC" "$PROJEKT/doc"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -s /tmp/projekt-info.txt ]; then
|
||||||
|
cp /tmp/projekt-info.txt "$PROJEKT/CLAUDE.md"
|
||||||
|
fi
|
||||||
|
|
||||||
code "$PROJEKT" &
|
code "$PROJEKT" &
|
||||||
|
|
||||||
gnome-terminal -- bash -c "$(cat <<EOF
|
gnome-terminal -- bash -c "$(cat <<EOF
|
||||||
|
|||||||
@@ -17,33 +17,39 @@ declare -A PROJEKT_MAP
|
|||||||
COMBO_VALUES=""
|
COMBO_VALUES=""
|
||||||
for ((i=0; i<${#PROJEKTE[@]}; i+=2)); do
|
for ((i=0; i<${#PROJEKTE[@]}; i+=2)); do
|
||||||
PROJEKT_MAP["${PROJEKTE[i]}"]="${PROJEKTE[i+1]}"
|
PROJEKT_MAP["${PROJEKTE[i]}"]="${PROJEKTE[i+1]}"
|
||||||
COMBO_VALUES="${COMBO_VALUES}${PROJEKTE[i]}|"
|
COMBO_VALUES="${COMBO_VALUES}${PROJEKTE[i]}!"
|
||||||
done
|
done
|
||||||
COMBO_VALUES="${COMBO_VALUES%|}"
|
COMBO_VALUES="${COMBO_VALUES%!}"
|
||||||
|
|
||||||
RESULT=$(zenity --forms \
|
SEP=$'\x1f'
|
||||||
|
RESULT=$(yad --form \
|
||||||
--title="Projekt starten" \
|
--title="Projekt starten" \
|
||||||
--text="VS Code und alle Terminals werden geschlossen und neu gestartet." \
|
--text="VS Code und alle Terminals werden geschlossen und neu gestartet." \
|
||||||
--separator="|" \
|
--separator="$SEP" \
|
||||||
--add-combo="Projekt" --combo-values="$COMBO_VALUES" \
|
--field="Projekt:CB" "$COMBO_VALUES" \
|
||||||
--add-entry="Ticket-Nr (optional)" \
|
--field="Ticket-Nr (optional)" "" \
|
||||||
--width=400 \
|
--field="Zusatzinfo an Claude:TXT" "" \
|
||||||
--ok-label="Starten" \
|
--width=600 --height=500 \
|
||||||
--cancel-label="Abbrechen")
|
--button="Abbrechen:1" --button="Starten:0")
|
||||||
|
|
||||||
[ -z "$RESULT" ] && exit 0
|
[ -z "$RESULT" ] && exit 0
|
||||||
|
|
||||||
PROJEKT_NAME="${RESULT%%|*}"
|
IFS="$SEP" read -r PROJEKT_NAME TICKET_NR INFO_ESCAPED _ <<< "$RESULT"
|
||||||
TICKET_NR="${RESULT##*|}"
|
|
||||||
SKRIPT="${PROJEKT_MAP[$PROJEKT_NAME]}"
|
SKRIPT="${PROJEKT_MAP[$PROJEKT_NAME]}"
|
||||||
|
|
||||||
[ -z "$SKRIPT" ] && exit 0
|
[ -z "$SKRIPT" ] && exit 0
|
||||||
|
|
||||||
if [ -n "$TICKET_NR" ]; then
|
if [ -n "$TICKET_NR" ]; then
|
||||||
REDMINE_DATA=$(~/bin/redmine-fetch "$TICKET_NR")
|
REDMINE_DATA=$(/home/arbeit/projects/project-starter/redmine-fetch "$TICKET_NR")
|
||||||
echo "$REDMINE_DATA" > "/tmp/redmine-$TICKET_NR/data.json"
|
echo "$REDMINE_DATA" > "/tmp/redmine-$TICKET_NR/data.json"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
INFO_FILE="/tmp/projekt-info.txt"
|
||||||
|
rm -f "$INFO_FILE"
|
||||||
|
if [ -n "$INFO_ESCAPED" ]; then
|
||||||
|
printf '%b' "$INFO_ESCAPED" > "$INFO_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
/home/arbeit/projects/project-starter/reset-projekt
|
/home/arbeit/projects/project-starter/reset-projekt
|
||||||
|
|
||||||
exec "/home/arbeit/projects/project-starter/$SKRIPT" "$TICKET_NR"
|
exec "/home/arbeit/projects/project-starter/$SKRIPT" "$TICKET_NR"
|
||||||
|
|||||||
@@ -7,6 +7,10 @@ if [ -d "$DOC" ]; then
|
|||||||
sudo mount --bind "$DOC" "$PROJEKT/doc"
|
sudo mount --bind "$DOC" "$PROJEKT/doc"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -s /tmp/projekt-info.txt ]; then
|
||||||
|
cp /tmp/projekt-info.txt "$PROJEKT/CLAUDE.md"
|
||||||
|
fi
|
||||||
|
|
||||||
TAB_TICKET=""
|
TAB_TICKET=""
|
||||||
if [ -n "$TICKET_NR" ]; then
|
if [ -n "$TICKET_NR" ]; then
|
||||||
TAB_TICKET="gnome-terminal --tab --working-directory='$PROJEKT' -- bash -c 'claude \"Verschaff dir kurz Projekt-Überblick (ddev, shopware 6.6). Lies dann /tmp/redmine-$TICKET_NR/data.json (enthält Redmine Issue + Briefing-Wiki) sowie ggf. Bilder unter /tmp/redmine-$TICKET_NR/. Liste die für das Ticket nötigen Features als knappe Bullet-Liste auf - vollständig, nichts weglassen, aber auch nicht aufgebläht. Simpel und kurz.\"; exec bash'"
|
TAB_TICKET="gnome-terminal --tab --working-directory='$PROJEKT' -- bash -c 'claude \"Verschaff dir kurz Projekt-Überblick (ddev, shopware 6.6). Lies dann /tmp/redmine-$TICKET_NR/data.json (enthält Redmine Issue + Briefing-Wiki) sowie ggf. Bilder unter /tmp/redmine-$TICKET_NR/. Liste die für das Ticket nötigen Features als knappe Bullet-Liste auf - vollständig, nichts weglassen, aber auch nicht aufgebläht. Simpel und kurz.\"; exec bash'"
|
||||||
|
|||||||
@@ -6,6 +6,10 @@ if [ -d "$DOC" ]; then
|
|||||||
sudo mount --bind "$DOC" "$PROJEKT/doc"
|
sudo mount --bind "$DOC" "$PROJEKT/doc"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -s /tmp/projekt-info.txt ]; then
|
||||||
|
cp /tmp/projekt-info.txt "$PROJEKT/CLAUDE.md"
|
||||||
|
fi
|
||||||
|
|
||||||
code "$PROJEKT" &
|
code "$PROJEKT" &
|
||||||
|
|
||||||
gnome-terminal -- bash -c "$(cat <<EOF
|
gnome-terminal -- bash -c "$(cat <<EOF
|
||||||
|
|||||||
Reference in New Issue
Block a user