mirror of
https://github.com/warpdotdev/common-skills.git
synced 2026-09-14 19:03:05 +08:00
cf4f4f7c6b
Recreate the resolver change from PR #12 on top of main so consuming repositories can load common-skills scripts through a shared resolver. Co-authored-by: Oz <oz-agent@warp.dev>
121 lines
2.7 KiB
Bash
Executable File
121 lines
2.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -eo pipefail
|
|
|
|
COMMON_SKILLS_REPO="warpdotdev/common-skills"
|
|
COMMON_SKILLS_REF="${WARP_COMMON_SKILLS_REF:-main}"
|
|
RAW_BASE_URL="${WARP_COMMON_SKILLS_RAW_BASE_URL:-https://raw.githubusercontent.com/${COMMON_SKILLS_REPO}/${COMMON_SKILLS_REF}/scripts}"
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
SCRIPT_NAME=""
|
|
|
|
usage() {
|
|
cat <<EOF
|
|
Usage: scripts/resolve_common_skills <script-name> [-- <script-args...>]
|
|
|
|
Execute a script from warpdotdev/common-skills/scripts.
|
|
|
|
Resolution order:
|
|
1. WARP_COMMON_SKILLS_SCRIPTS_DIR
|
|
2. The sibling scripts directory from this checkout
|
|
3. The raw script from ${COMMON_SKILLS_REPO}
|
|
|
|
Environment:
|
|
WARP_COMMON_SKILLS_SCRIPTS_DIR=/path/to/common-skills/scripts
|
|
Override where common-skills management scripts are loaded from.
|
|
WARP_COMMON_SKILLS_REF=<git-ref>
|
|
Override the remote common-skills ref used for the raw script.
|
|
WARP_COMMON_SKILLS_RAW_BASE_URL=https://...
|
|
Override the remote base URL used for raw script fallback.
|
|
EOF
|
|
}
|
|
|
|
execute_from_dir() {
|
|
local scripts_dir="$1"
|
|
local script_path="${scripts_dir%/}/${SCRIPT_NAME}"
|
|
shift
|
|
|
|
if [[ -x "${script_path}" ]]; then
|
|
exec "${script_path}" "$@"
|
|
fi
|
|
|
|
if [[ -f "${script_path}" ]]; then
|
|
exec bash "${script_path}" "$@"
|
|
fi
|
|
|
|
return 1
|
|
}
|
|
|
|
execute_from_remote() {
|
|
local raw_url="${RAW_BASE_URL%/}/${SCRIPT_NAME}"
|
|
local temp_script=""
|
|
local status=0
|
|
|
|
if ! command -v curl >/dev/null 2>&1; then
|
|
echo "error: curl is required to fetch ${raw_url}" >&2
|
|
return 1
|
|
fi
|
|
|
|
temp_script="$(mktemp "${TMPDIR:-/tmp}/common-skills-script.XXXXXX")"
|
|
if curl -fsSL "${raw_url}" -o "${temp_script}"; then
|
|
:
|
|
else
|
|
status=$?
|
|
rm -f "${temp_script}"
|
|
return "${status}"
|
|
fi
|
|
|
|
if bash "${temp_script}" "$@"; then
|
|
status=0
|
|
else
|
|
status=$?
|
|
fi
|
|
rm -f "${temp_script}"
|
|
return "${status}"
|
|
}
|
|
|
|
if [[ $# -lt 1 ]]; then
|
|
usage >&2
|
|
exit 1
|
|
fi
|
|
|
|
case "$1" in
|
|
-h|--help)
|
|
usage
|
|
exit 0
|
|
;;
|
|
*/*|.|..|"")
|
|
echo "error: invalid common-skills script name: $1" >&2
|
|
usage >&2
|
|
exit 1
|
|
;;
|
|
*)
|
|
SCRIPT_NAME="$1"
|
|
case "${SCRIPT_NAME}" in
|
|
*[!A-Za-z0-9_-]*)
|
|
echo "error: invalid common-skills script name: ${SCRIPT_NAME}" >&2
|
|
usage >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
shift
|
|
;;
|
|
esac
|
|
if [[ "${1:-}" = "--" ]]; then
|
|
shift
|
|
fi
|
|
|
|
if [[ -n "${WARP_COMMON_SKILLS_SCRIPTS_DIR:-}" ]]; then
|
|
if execute_from_dir "${WARP_COMMON_SKILLS_SCRIPTS_DIR}" "$@"; then
|
|
exit 0
|
|
fi
|
|
|
|
echo "error: could not execute ${SCRIPT_NAME} from WARP_COMMON_SKILLS_SCRIPTS_DIR=${WARP_COMMON_SKILLS_SCRIPTS_DIR}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if execute_from_dir "${SCRIPT_DIR}" "$@"; then
|
|
exit 0
|
|
fi
|
|
|
|
execute_from_remote "$@"
|