63 lines
1.9 KiB
Bash
Executable File
63 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# sync-skills.sh — mirror the canonical insforge-dev skill to the per-agent copies.
|
|
#
|
|
# .agents/skills/insforge-dev is the single source of truth. Claude Code and
|
|
# Codex each discover skills from their own directory, so we keep byte-identical
|
|
# copies in .claude/ and .codex/. Symlinks are not an option: Windows checkouts
|
|
# don't preserve them (they become plain text files), and Prettier errors on
|
|
# explicitly-passed symlinks. So we generate real copies and let CI guard drift.
|
|
#
|
|
# Edit ONLY .agents/skills/insforge-dev, then run this script and commit all
|
|
# three trees together.
|
|
#
|
|
# Usage:
|
|
# scripts/sync-skills.sh Copy canonical -> .claude and .codex
|
|
# scripts/sync-skills.sh --check Exit non-zero if any copy has drifted (CI)
|
|
#
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
|
|
CANONICAL="$REPO_ROOT/.agents/skills/insforge-dev"
|
|
COPIES=(
|
|
"$REPO_ROOT/.claude/skills/insforge-dev"
|
|
"$REPO_ROOT/.codex/skills/insforge-dev"
|
|
)
|
|
|
|
CHECK=0
|
|
case "${1:-}" in
|
|
--check) CHECK=1 ;;
|
|
-h|--help) sed -n '2,18p' "$0" | sed 's/^# \{0,1\}//'; exit 0 ;;
|
|
"") ;;
|
|
*) echo "unknown argument: $1" >&2; exit 2 ;;
|
|
esac
|
|
|
|
[[ -d "$CANONICAL" ]] || { echo "missing canonical skill dir: $CANONICAL" >&2; exit 1; }
|
|
|
|
status=0
|
|
for copy in "${COPIES[@]}"; do
|
|
if [[ "$CHECK" -eq 1 ]]; then
|
|
if ! diff -r "$CANONICAL" "$copy" >/dev/null 2>&1; then
|
|
echo "DRIFT: $copy is out of sync with the canonical $CANONICAL" >&2
|
|
diff -ru "$CANONICAL" "$copy" >&2 || true
|
|
status=1
|
|
fi
|
|
else
|
|
rm -rf "$copy"
|
|
mkdir -p "$(dirname "$copy")"
|
|
cp -R "$CANONICAL" "$copy"
|
|
echo "synced: $copy"
|
|
fi
|
|
done
|
|
|
|
if [[ "$CHECK" -eq 1 ]]; then
|
|
if [[ "$status" -eq 0 ]]; then
|
|
echo "insforge-dev skill copies are in sync with .agents/"
|
|
else
|
|
echo "Run 'scripts/sync-skills.sh' and commit the result." >&2
|
|
fi
|
|
fi
|
|
exit "$status"
|