chore: add daemon build script (#365)
* chore: add daemon build script * chore: make daemon build script windows-aware
This commit is contained in:
parent
0e1c5fe54b
commit
36ea5835e7
|
|
@ -0,0 +1,131 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
repo_root="$(cd "${script_dir}/.." && pwd)"
|
||||||
|
backend_dir="${repo_root}/backend"
|
||||||
|
build_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/aoagents/agent-orchestrator/bin"
|
||||||
|
|
||||||
|
can_write_dir() {
|
||||||
|
local dir="$1"
|
||||||
|
|
||||||
|
[[ -n "${dir}" ]] || return 1
|
||||||
|
mkdir -p "${dir}"
|
||||||
|
[[ -d "${dir}" && -w "${dir}" ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
resolve_ao() {
|
||||||
|
local resolved
|
||||||
|
|
||||||
|
resolved="$(command -v ao || true)"
|
||||||
|
if [[ -z "${resolved}" && -n "${goexe:-}" ]]; then
|
||||||
|
resolved="$(command -v "ao${goexe}" || true)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf '%s\n' "${resolved}"
|
||||||
|
}
|
||||||
|
|
||||||
|
absolute_path() {
|
||||||
|
local path="$1"
|
||||||
|
|
||||||
|
printf '%s/%s\n' "$(cd "$(dirname "${path}")" && pwd -P)" "$(basename "${path}")"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_file() {
|
||||||
|
local source_path="$1"
|
||||||
|
local target_path="$2"
|
||||||
|
|
||||||
|
if ln -sfn "${source_path}" "${target_path}" 2>/dev/null; then
|
||||||
|
printf 'Linked %s\n' "${target_path}"
|
||||||
|
else
|
||||||
|
rm -f "${target_path}"
|
||||||
|
cp "${source_path}" "${target_path}"
|
||||||
|
chmod +x "${target_path}"
|
||||||
|
printf 'Installed %s\n' "${target_path}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
select_install_dir() {
|
||||||
|
local gopath
|
||||||
|
local existing_path
|
||||||
|
local dir
|
||||||
|
local candidate
|
||||||
|
local -a path_entries
|
||||||
|
gopath="$(go env GOPATH)"
|
||||||
|
existing_path="$(resolve_ao)"
|
||||||
|
|
||||||
|
if [[ -n "${existing_path}" && "${existing_path}" = /* ]] && can_write_dir "$(dirname "${existing_path}")"; then
|
||||||
|
dirname "${existing_path}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
local candidates=(
|
||||||
|
"${gopath}/bin"
|
||||||
|
"/usr/local/bin"
|
||||||
|
"/opt/homebrew/bin"
|
||||||
|
"${HOME}/.local/bin"
|
||||||
|
)
|
||||||
|
|
||||||
|
IFS=':' read -r -a path_entries <<< "${PATH:-}"
|
||||||
|
for dir in "${path_entries[@]}"; do
|
||||||
|
for candidate in "${candidates[@]}"; do
|
||||||
|
if [[ "${dir}" == "${candidate}" ]] && can_write_dir "${dir}"; then
|
||||||
|
printf '%s\n' "${dir}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
for dir in "${path_entries[@]}"; do
|
||||||
|
if [[ "${dir}" = /* ]] && can_write_dir "${dir}"; then
|
||||||
|
printf '%s\n' "${dir}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
command -v go >/dev/null
|
||||||
|
goexe="$(go env GOEXE)"
|
||||||
|
binary_name="ao${goexe}"
|
||||||
|
binary_path="${build_dir}/${binary_name}"
|
||||||
|
|
||||||
|
mkdir -p "${build_dir}"
|
||||||
|
(cd "${backend_dir}" && go build -o "${binary_path}" ./cmd/ao)
|
||||||
|
|
||||||
|
if ! install_dir="$(select_install_dir)"; then
|
||||||
|
printf 'Could not find a writable directory on PATH for ao\n' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
install_path="${install_dir}/${binary_name}"
|
||||||
|
shim_path=""
|
||||||
|
|
||||||
|
install_file "${binary_path}" "${install_path}"
|
||||||
|
|
||||||
|
if [[ -n "${goexe}" ]]; then
|
||||||
|
shim_path="${install_dir}/ao"
|
||||||
|
printf '%s\n' \
|
||||||
|
'#!/usr/bin/env bash' \
|
||||||
|
'script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"' \
|
||||||
|
'exec "${script_dir}/ao.exe" "$@"' > "${shim_path}"
|
||||||
|
chmod +x "${shim_path}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
resolved="$(resolve_ao)"
|
||||||
|
if [[ -z "${resolved}" ]]; then
|
||||||
|
printf 'ao did not resolve on PATH after installing %s\n' "${install_path}" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
resolved_path="$(absolute_path "${resolved}")"
|
||||||
|
install_abs_path="$(absolute_path "${install_path}")"
|
||||||
|
shim_abs_path=""
|
||||||
|
if [[ -n "${shim_path}" ]]; then
|
||||||
|
shim_abs_path="$(absolute_path "${shim_path}")"
|
||||||
|
fi
|
||||||
|
if [[ "${resolved_path}" != "${install_abs_path}" && "${resolved_path}" != "${shim_abs_path}" ]]; then
|
||||||
|
printf 'ao resolves to %s, expected %s\n' "${resolved}" "${install_path}" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf 'Built %s\n' "${binary_path}"
|
||||||
Loading…
Reference in New Issue