chore: Workflow-Aktualisierungen — Bootstrap, Skill-Defs, Gitea-Wrapper

Aktualisiert Bootstrap-Logik, Modellangaben in Workflow-Defs und Gitea-MCP-Wrapper-Robustheit. Konsistenzverbesserungen bei Skill-Dokumentation und Hook-Definitionen.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-09 14:27:27 +02:00
co-authored by Claude Opus 4.6
parent 37f1acc214
commit 7705ade6c7
5 changed files with 171 additions and 119 deletions
+128 -109
View File
@@ -5,139 +5,158 @@ REPO="/mnt/projekte/claude-workflow"
echo "=== Claude-Workflow Bootstrap ==="
# Skills (als Verzeichnis-Symlinks: ~/.claude/skills/<name> → repo/skills/<name>/)
# --- Symlinks und Berechtigungen ---
mkdir -p ~/.claude/skills
for d in "$REPO/skills/"/*/; do
name=$(basename "$d")
ln -sfn "$d" ~/.claude/skills/"$name"
done
echo " Skills verlinkt"
echo " Skills verlinkt"
# Agents
mkdir -p ~/.claude/agents
for f in "$REPO/agents/"*.md; do
ln -sf "$f" ~/.claude/agents/
done
echo " Agents verlinkt"
echo " Agents verlinkt"
# Dotfiles
ln -sf "$REPO/dotfiles/CLAUDE.md" ~/.claude/CLAUDE.md
ln -sf "$REPO/dotfiles/settings.json" ~/.claude/settings.json
ln -sf "$REPO/dotfiles/statusline-command.sh" ~/.claude/statusline-command.sh
ln -sf "$REPO/dotfiles/gitea-mcp-wrapper.sh" ~/.claude/gitea-mcp-wrapper.sh
chmod +x "$REPO/dotfiles/gitea-mcp-wrapper.sh"
echo " Dotfiles verlinkt"
echo " Dotfiles verlinkt"
# Hooks ausführbar machen
chmod +x "$REPO/hooks/"*.sh
echo " Hooks ausführbar"
echo " Hooks ausfuehrbar"
# --- Voraussetzungen pruefen ---
echo ""
echo "=== Voraussetzungen prüfen ==="
echo "=== Voraussetzungen ==="
# --- gh (GitHub CLI, wird auch für Gitea-PRs genutzt) ---
if command -v gh &>/dev/null; then
echo "✓ gh $(gh --version | head -1)"
else
echo " gh fehlt installiere via apt..."
sudo apt-get install -y gh
echo "✓ gh installiert"
fi
missing_apt=()
missing_other=()
# --- jq ---
if command -v jq &>/dev/null; then
echo "✓ jq $(jq --version)"
else
echo " jq fehlt installiere via apt..."
sudo apt-get install -y jq
echo "✓ jq installiert"
fi
# --- ruff ---
if command -v ruff &>/dev/null; then
echo "✓ ruff $(ruff --version)"
else
echo " ruff fehlt installiere via pipx..."
if ! command -v pipx &>/dev/null; then
sudo apt-get install -y pipx
pipx ensurepath
fi
pipx install ruff
echo "✓ ruff installiert"
fi
# --- shellcheck (Bash-Lint-Hook + /script) ---
if command -v shellcheck &>/dev/null; then
echo "✓ shellcheck $(shellcheck --version | awk '/^version:/ {print $2}')"
else
echo " shellcheck fehlt installiere via apt..."
sudo apt-get install -y shellcheck
echo "✓ shellcheck installiert"
fi
# --- markdownlint-cli2 (Markdown-Lint-Hook, custom rule no-hr) ---
if command -v markdownlint-cli2 &>/dev/null; then
echo "✓ markdownlint-cli2 $(markdownlint-cli2 --version 2>/dev/null | head -1)"
else
echo " markdownlint-cli2 fehlt installiere via npm..."
if ! command -v npm &>/dev/null; then
sudo apt-get install -y npm
fi
sudo npm install -g markdownlint-cli2
echo "✓ markdownlint-cli2 installiert"
fi
# --- gitea-mcp Binary ---
if [[ -x ~/go/bin/gitea-mcp ]]; then
echo "✓ gitea-mcp vorhanden"
else
echo " gitea-mcp fehlt installiere via go install..."
go install gitea.com/gitea/gitea-mcp@latest
echo "✓ gitea-mcp installiert"
fi
# --- context7 Plugin-Check ---
if claude mcp list 2>/dev/null | grep -q "context7"; then
echo "✓ context7 Plugin aktiv"
else
echo "⚠ context7 Plugin nicht aktiv prüfe enabledPlugins in settings.json"
echo " Ggf. Claude Code neu starten oder Plugin manuell aktivieren."
fi
# --- gitea-mcp in Claude Code registrieren ---
if claude mcp list 2>/dev/null | grep -q "^gitea:"; then
echo "✓ gitea MCP bereits registriert"
else
echo " Registriere gitea MCP..."
claude mcp add --scope user gitea -- bash ~/.claude/gitea-mcp-wrapper.sh
echo "✓ gitea MCP registriert"
fi
# --- secret-tool + Gitea-Token ---
if ! command -v secret-tool &>/dev/null; then
echo " secret-tool fehlt installiere libsecret-tools..."
sudo apt-get install -y libsecret-tools
echo "✓ secret-tool installiert"
else
echo "✓ secret-tool vorhanden"
fi
echo " Gitea-Token prüfen..."
if secret-tool lookup user claude-code token gitea &>/dev/null; then
echo "✓ Gitea-Token vorhanden"
else
echo ""
echo " Gitea-Token für claude-code nicht gefunden."
read -r -p " Gitea-Token eingeben (https://gitea.troeger-net.org): " GITEA_TOKEN
if [[ -n "${GITEA_TOKEN// /}" ]]; then
echo -n "$GITEA_TOKEN" | secret-tool store \
--label="Gitea claude-code token" \
user claude-code token gitea
echo "✓ Gitea-Token gespeichert"
check_cmd() {
local cmd="$1"
local version_info="$2"
if command -v "$cmd" &>/dev/null; then
echo " OK $cmd ($version_info)"
return 0
else
echo "⚠ Kein Token eingegeben übersprungen"
echo " FEHLT $cmd"
return 1
fi
}
check_cmd "gh" "$(gh --version 2>/dev/null | head -1 || true)" \
|| missing_apt+=("gh")
check_cmd "jq" "$(jq --version 2>/dev/null || true)" \
|| missing_apt+=("jq")
check_cmd "shellcheck" "$(shellcheck --version 2>/dev/null | awk '/^version:/ {print $2}' || true)" \
|| missing_apt+=("shellcheck")
if command -v pipx &>/dev/null; then
check_cmd "ruff" "$(ruff --version 2>/dev/null || true)" \
|| missing_other+=("pipx install ruff")
else
if ! command -v ruff &>/dev/null; then
echo " FEHLT ruff (pipx ebenfalls nicht vorhanden)"
missing_apt+=("pipx")
missing_other+=("pipx ensurepath" "pipx install ruff")
else
echo " OK ruff ($(ruff --version 2>/dev/null || true))"
fi
fi
if command -v npm &>/dev/null; then
check_cmd "markdownlint-cli2" "$(markdownlint-cli2 --version 2>/dev/null | head -1 || true)" \
|| missing_other+=("npm install -g markdownlint-cli2")
else
if ! command -v markdownlint-cli2 &>/dev/null; then
echo " FEHLT markdownlint-cli2 (npm nicht vorhanden)"
echo " Node.js zuerst installieren, z.B. via nvm"
missing_other+=("# Node.js installieren: https://github.com/nvm-sh/nvm" "npm install -g markdownlint-cli2")
else
echo " OK markdownlint-cli2 ($(markdownlint-cli2 --version 2>/dev/null | head -1 || true))"
fi
fi
if command -v go &>/dev/null; then
if [[ -x ~/go/bin/gitea-mcp ]]; then
echo " OK gitea-mcp"
else
echo " FEHLT gitea-mcp"
missing_other+=("go install gitea.com/gitea/gitea-mcp@latest")
fi
else
if [[ ! -x ~/go/bin/gitea-mcp ]]; then
echo " FEHLT gitea-mcp (go nicht vorhanden)"
missing_apt+=("golang-go")
missing_other+=("go install gitea.com/gitea/gitea-mcp@latest")
else
echo " OK gitea-mcp"
fi
fi
# --- Claude-Code-Integrationen ---
echo ""
echo "✓ Bootstrap abgeschlossen"
echo "=== Claude-Code-Integrationen ==="
if command -v claude &>/dev/null; then
if claude mcp list 2>/dev/null | grep -q "context7"; then
echo " OK context7 Plugin"
else
echo " FEHLT context7 Plugin -- in Claude Code aktivieren"
fi
if claude mcp list 2>/dev/null | grep -q "^gitea:"; then
echo " OK gitea MCP"
else
echo " FEHLT gitea MCP"
missing_other+=("claude mcp add --scope user gitea -- bash ~/.claude/gitea-mcp-wrapper.sh")
fi
else
echo " claude CLI nicht gefunden -- MCP-Checks uebersprungen"
fi
# --- Gitea-Token ---
GITEA_TOKEN_FILE="$HOME/.config/gitea/token"
echo ""
echo "=== Gitea-Token ==="
if [[ -f "$GITEA_TOKEN_FILE" ]]; then
echo " OK $GITEA_TOKEN_FILE"
else
echo " FEHLT $GITEA_TOKEN_FILE"
missing_other+=("mkdir -p ~/.config/gitea && chmod 700 ~/.config/gitea"
"echo 'DEIN_TOKEN' > ~/.config/gitea/token && chmod 600 ~/.config/gitea/token")
fi
# --- Zusammenfassung ---
echo ""
if [[ ${#missing_apt[@]} -eq 0 && ${#missing_other[@]} -eq 0 ]]; then
echo "Alles vorhanden. Keine weiteren Schritte noetig."
else
echo "=== Fehlende Pakete installieren ==="
echo "Folgende Befehle ausfuehren:"
echo ""
if [[ ${#missing_apt[@]} -gt 0 ]]; then
echo " sudo apt-get install -y ${missing_apt[*]}"
fi
for cmd in "${missing_other[@]}"; do
echo " $cmd"
done
echo ""
echo "Danach bootstrap.sh erneut ausfuehren zur Kontrolle."
fi