Publish training skills collection
This commit is contained in:
Executable
+79
@@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
skills_dir="${CODEX_SKILLS_DIR:-$HOME/.codex/skills}"
|
||||
dry_run=0
|
||||
|
||||
usage() {
|
||||
printf 'Usage: %s [--dry-run]\n' "$(basename "$0")"
|
||||
printf 'Create symlinks for this repo'\''s skill directories in %s.\n' "$skills_dir"
|
||||
}
|
||||
|
||||
case "${1:-}" in
|
||||
"")
|
||||
;;
|
||||
--dry-run|-n)
|
||||
dry_run=1
|
||||
;;
|
||||
--help|-h)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
usage >&2
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
|
||||
run() {
|
||||
if (( dry_run )); then
|
||||
printf 'DRY RUN:'
|
||||
printf ' %q' "$@"
|
||||
printf '\n'
|
||||
else
|
||||
"$@"
|
||||
fi
|
||||
}
|
||||
|
||||
if (( dry_run )); then
|
||||
printf 'DRY RUN: mkdir -p %q\n' "$skills_dir"
|
||||
else
|
||||
mkdir -p "$skills_dir"
|
||||
fi
|
||||
|
||||
found=0
|
||||
|
||||
while IFS= read -r -d '' skill_file; do
|
||||
found=1
|
||||
skill_path="$(dirname "$skill_file")"
|
||||
skill_name="$(basename "$skill_path")"
|
||||
link_path="$skills_dir/$skill_name"
|
||||
|
||||
if [[ -L "$link_path" ]]; then
|
||||
current_target="$(readlink "$link_path")"
|
||||
if [[ "$current_target" == "$skill_path" ]]; then
|
||||
printf 'Already linked: %s -> %s\n' "$link_path" "$skill_path"
|
||||
else
|
||||
printf 'Skipping existing symlink: %s -> %s\n' "$link_path" "$current_target"
|
||||
fi
|
||||
continue
|
||||
fi
|
||||
|
||||
if [[ -e "$link_path" ]]; then
|
||||
printf 'Skipping existing path: %s\n' "$link_path"
|
||||
continue
|
||||
fi
|
||||
|
||||
run ln -s "$skill_path" "$link_path"
|
||||
if (( dry_run )); then
|
||||
printf 'Would link: %s -> %s\n' "$link_path" "$skill_path"
|
||||
else
|
||||
printf 'Linked: %s -> %s\n' "$link_path" "$skill_path"
|
||||
fi
|
||||
done < <(find "$repo_root" -mindepth 2 -maxdepth 2 -name SKILL.md -print0 | sort -z)
|
||||
|
||||
if (( ! found )); then
|
||||
printf 'No skill directories found under %s\n' "$repo_root" >&2
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user