feat: migrate 12 personal skills + add build/install scripts
- skills/: editable sources for all 12 personal skills (caveman family, find-skills, project-bootstrap, task-status-wiki, using-context7, using-markitdown, wiki-maintainer, compress) - dist/: built .skill archives, committed (cross-machine deploy without needing zip on the target) - scripts/build.sh + build.ps1: zip skills/<name>/ into dist/<name>.skill; Windows fallback uses .NET ZipArchive (PS 5.1 Compress-Archive writes backslashes that break extraction on *nix) - scripts/install.sh: copy skills/<name>/ into ~/.claude/skills/<name>/ ($CLAUDE_SKILLS_DIR overrides target) - .wiki/source/repo-layout.md, build-notes.md: design + gotchas - .gitignore: keep dist/ tracked Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
51
scripts/build.sh
Normal file
51
scripts/build.sh
Normal file
@@ -0,0 +1,51 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build .skill archives from skills/<name>/ into dist/<name>.skill
|
||||
# Usage: build.sh [name...] (no args = all)
|
||||
#
|
||||
# Uses `zip` if available; otherwise delegates to scripts/build.ps1
|
||||
# (so the script works on Linux, macOS, and Windows-with-git-bash without
|
||||
# requiring `zip` on Windows).
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
SRC="$ROOT/skills"
|
||||
DIST="$ROOT/dist"
|
||||
|
||||
if command -v zip >/dev/null 2>&1; then
|
||||
mkdir -p "$DIST"
|
||||
if [ "$#" -eq 0 ]; then
|
||||
mapfile -t names < <(find "$SRC" -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | sort)
|
||||
else
|
||||
names=("$@")
|
||||
fi
|
||||
for name in "${names[@]}"; do
|
||||
src_dir="$SRC/$name"
|
||||
if [ ! -d "$src_dir" ]; then
|
||||
echo "skip: $name (not found in skills/)" >&2
|
||||
continue
|
||||
fi
|
||||
if [ ! -f "$src_dir/SKILL.md" ]; then
|
||||
echo "skip: $name (missing SKILL.md)" >&2
|
||||
continue
|
||||
fi
|
||||
out="$DIST/$name.skill"
|
||||
rm -f "$out"
|
||||
( cd "$SRC" && zip -qr "$out" "$name" )
|
||||
echo "built: dist/$name.skill"
|
||||
done
|
||||
elif command -v powershell.exe >/dev/null 2>&1; then
|
||||
# Windows fallback: delegate to build.ps1 (proper ZIP via .NET API).
|
||||
ps1="$SCRIPT_DIR/build.ps1"
|
||||
if [ "$#" -eq 0 ]; then
|
||||
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "$(cygpath -w "$ps1" 2>/dev/null || echo "$ps1")"
|
||||
else
|
||||
# Build a comma-separated PS argument list.
|
||||
joined=$(printf ",'%s'" "$@")
|
||||
joined="${joined:1}"
|
||||
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "$(cygpath -w "$ps1" 2>/dev/null || echo "$ps1")" -Names "$joined"
|
||||
fi
|
||||
else
|
||||
echo "error: need either 'zip' (Linux/macOS) or PowerShell (Windows) to build .skill archives" >&2
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user