You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.3 KiB
111 lines
3.3 KiB
#!/bin/bash
|
|
# Comet script locator — source this file to export paths to bundled scripts.
|
|
#
|
|
# Usage:
|
|
# . /path/to/comet/scripts/comet-env.sh
|
|
#
|
|
# This file is sourced by workflow snippets. Do not set global shell options here.
|
|
|
|
_comet_env_source="${BASH_SOURCE[0]:-$0}"
|
|
_comet_script_dir="$(cd "$(dirname "$_comet_env_source")" && pwd -P)"
|
|
_comet_env_sourced=0
|
|
(return 0 2>/dev/null) && _comet_env_sourced=1
|
|
|
|
export COMET_GUARD="${COMET_GUARD:-${_comet_script_dir}/comet-guard.sh}"
|
|
export COMET_STATE="${COMET_STATE:-${_comet_script_dir}/comet-state.sh}"
|
|
export COMET_HANDOFF="${COMET_HANDOFF:-${_comet_script_dir}/comet-handoff.sh}"
|
|
export COMET_ARCHIVE="${COMET_ARCHIVE:-${_comet_script_dir}/comet-archive.sh}"
|
|
export COMET_YAML_VALIDATE="${COMET_YAML_VALIDATE:-${_comet_script_dir}/comet-yaml-validate.sh}"
|
|
|
|
_comet_bash_is_usable() {
|
|
local _comet_bash_candidate="$1"
|
|
if [ -z "$_comet_bash_candidate" ]; then
|
|
return 1
|
|
fi
|
|
case "$_comet_bash_candidate" in
|
|
*/Windows/System32/bash.exe|*/windows/system32/bash.exe|*\\Windows\\System32\\bash.exe|*\\windows\\system32\\bash.exe)
|
|
return 1
|
|
;;
|
|
esac
|
|
"$_comet_bash_candidate" -lc 'printf comet-bash-ok' >/dev/null 2>&1
|
|
}
|
|
|
|
_comet_resolve_bash() {
|
|
local _comet_bash_candidate
|
|
|
|
if _comet_bash_is_usable "${COMET_BASH:-}"; then
|
|
printf '%s\n' "$COMET_BASH"
|
|
return 0
|
|
fi
|
|
|
|
if _comet_bash_is_usable "${BASH:-}"; then
|
|
printf '%s\n' "$BASH"
|
|
return 0
|
|
fi
|
|
|
|
_comet_bash_candidate="$(command -v sh 2>/dev/null | awk '{ sub(/\/sh(\.exe)?$/, "/bash.exe"); print }')"
|
|
if _comet_bash_is_usable "$_comet_bash_candidate"; then
|
|
printf '%s\n' "$_comet_bash_candidate"
|
|
return 0
|
|
fi
|
|
|
|
_comet_bash_candidate="$(command -v bash 2>/dev/null || true)"
|
|
if _comet_bash_is_usable "$_comet_bash_candidate"; then
|
|
printf '%s\n' "$_comet_bash_candidate"
|
|
return 0
|
|
fi
|
|
|
|
return 1
|
|
}
|
|
|
|
COMET_BASH="$(_comet_resolve_bash || true)"
|
|
export COMET_BASH
|
|
|
|
_comet_env_fail() {
|
|
echo "ERROR: Comet scripts not found. Ensure the comet skill is installed completely." >&2
|
|
echo "Expected path pattern: */comet/scripts/comet-*.sh under project or platform skill directories" >&2
|
|
}
|
|
|
|
_comet_bash_fail() {
|
|
echo "ERROR: usable bash not found. Install Git Bash or set COMET_BASH to a working bash executable." >&2
|
|
echo "Windows WSL launcher bash.exe is not supported for Comet scripts." >&2
|
|
}
|
|
|
|
_comet_env_abort() {
|
|
local _comet_env_was_sourced="$_comet_env_sourced"
|
|
unset _comet_env_source _comet_script_dir _comet_script _comet_env_missing _comet_env_sourced
|
|
unset _comet_bash_candidate
|
|
unset -f _comet_env_fail _comet_bash_fail _comet_bash_is_usable _comet_resolve_bash
|
|
if [ "$_comet_env_was_sourced" -eq 1 ]; then
|
|
unset -f _comet_env_abort
|
|
return 1
|
|
fi
|
|
exit 1
|
|
}
|
|
|
|
_comet_env_missing=0
|
|
if [ -z "$COMET_BASH" ]; then
|
|
_comet_bash_fail
|
|
_comet_env_missing=1
|
|
fi
|
|
for _comet_script in \
|
|
"$COMET_GUARD" \
|
|
"$COMET_STATE" \
|
|
"$COMET_HANDOFF" \
|
|
"$COMET_ARCHIVE" \
|
|
"$COMET_YAML_VALIDATE"; do
|
|
if [ ! -f "$_comet_script" ]; then
|
|
_comet_env_fail
|
|
_comet_env_missing=1
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ "$_comet_env_missing" -ne 0 ]; then
|
|
_comet_env_abort
|
|
else
|
|
unset _comet_env_source _comet_script_dir _comet_script _comet_env_missing _comet_env_sourced
|
|
unset _comet_bash_candidate
|
|
unset -f _comet_env_fail _comet_bash_fail _comet_bash_is_usable _comet_resolve_bash _comet_env_abort
|
|
fi
|