Initial commit on Forgejo
All checks were successful
CI and deploy / Test (push) Successful in 4m52s
CI and deploy / Deploy production (push) Successful in 23s

Fresh repository history for elektrine/tarakan hosted at
https://git.elektrine.com/elektrine/tarakan.
This commit is contained in:
Maxfield Luke 2026-07-29 04:43:40 -04:00
commit af6077b9c3
455 changed files with 78366 additions and 0 deletions

127
priv/static/install.sh Executable file
View file

@ -0,0 +1,127 @@
#!/usr/bin/env bash
# Install tarakan (tarakan-client) the easy way.
# curl -fsSL https://raw.githubusercontent.com/atomine-elektrine/tarakan-client/main/install.sh | bash
# Or from a Tarakan host:
# curl -fsSL https://your.tarakan.host/install.sh | bash
set -euo pipefail
REPO="${TARAKAN_REPO:-atomine-elektrine/tarakan-client}"
BIN_NAME="tarakan"
INSTALL_DIR="${TARAKAN_INSTALL_DIR:-${HOME}/.local/bin}"
say() { printf '%s\n' "$*" >&2; }
die() { say "error: $*"; exit 1; }
need_cmd() {
command -v "$1" >/dev/null 2>&1 || die "need '$1' on PATH"
}
detect_os() {
case "$(uname -s)" in
Linux*) echo linux ;;
Darwin*) echo darwin ;;
MINGW*|MSYS*|CYGWIN*) echo windows ;;
*) die "unsupported OS: $(uname -s)" ;;
esac
}
detect_arch() {
case "$(uname -m)" in
x86_64|amd64) echo amd64 ;;
aarch64|arm64) echo arm64 ;;
*) die "unsupported arch: $(uname -m)" ;;
esac
}
latest_tag() {
need_cmd curl
# Prefer gh when available; otherwise unauthenticated API.
if command -v gh >/dev/null 2>&1; then
gh release view --repo "${REPO}" --json tagName -q .tagName 2>/dev/null && return
fi
curl -fsSL "https://api.github.com/repos/${REPO}/releases/latest" \
| sed -n 's/.*"tag_name":[[:space:]]*"\([^"]*\)".*/\1/p' \
| head -n1
}
install_from_release() {
local os arch tag version archive url tmp dir binary
os="$(detect_os)"
arch="$(detect_arch)"
tag="$(latest_tag)"
[[ -n "${tag}" ]] || return 1
version="${tag//\//-}"
if [[ "${os}" == "windows" ]]; then
archive="tarakan_${version}_${os}_${arch}.zip"
else
archive="tarakan_${version}_${os}_${arch}.tar.gz"
fi
url="https://github.com/${REPO}/releases/download/${tag}/${archive}"
tmp="$(mktemp -d)"
trap 'rm -rf "${tmp}"' RETURN
say "downloading ${url}"
curl -fsSL "${url}" -o "${tmp}/${archive}" || return 1
mkdir -p "${INSTALL_DIR}"
if [[ "${os}" == "windows" ]]; then
need_cmd unzip
unzip -q "${tmp}/${archive}" -d "${tmp}/out"
binary="$(find "${tmp}/out" -type f -name 'tarakan.exe' | head -n1)"
[[ -n "${binary}" ]] || return 1
install -m 755 "${binary}" "${INSTALL_DIR}/tarakan.exe"
else
need_cmd tar
tar -xzf "${tmp}/${archive}" -C "${tmp}"
binary="$(find "${tmp}" -type f -name tarakan | head -n1)"
[[ -n "${binary}" ]] || return 1
install -m 755 "${binary}" "${INSTALL_DIR}/${BIN_NAME}"
fi
say "installed ${INSTALL_DIR}/${BIN_NAME}"
return 0
}
install_with_go() {
need_cmd go
say "no release binary for this platform; using go install"
GOBIN="${INSTALL_DIR}" go install "github.com/${REPO}/cmd/tarakan@latest"
say "installed ${INSTALL_DIR}/${BIN_NAME}"
}
path_hint() {
case ":${PATH}:" in
*":${INSTALL_DIR}:"*) ;;
*)
say ""
say "add to PATH:"
say " export PATH=\"${INSTALL_DIR}:\$PATH\""
;;
esac
say ""
say "next:"
say " tarakan login"
say " tarakan worker --agent kimi"
say " tarakan --agent kimi --pickup"
}
main() {
need_cmd uname
need_cmd curl
mkdir -p "${INSTALL_DIR}"
if install_from_release; then
path_hint
exit 0
fi
if command -v go >/dev/null 2>&1; then
install_with_go
path_hint
exit 0
fi
die "could not download a release for $(detect_os)/$(detect_arch) and Go is not installed.
Publish a release tag (v*) on ${REPO}, or install Go and re-run."
}
main "$@"