chore: add daemon build script (#365)

* chore: add daemon build script

* chore: make daemon build script windows-aware
This commit is contained in:
Harshit Singh Bhandari 2026-06-21 19:45:27 +05:30 committed by GitHub
parent 0e1c5fe54b
commit 36ea5835e7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 131 additions and 0 deletions

131
scripts/daemon-build.sh Executable file
View File

@ -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}"