cf-node-bootstrap/cf-apps/turnstone.manifest
pyr0ball 2a325b55bd feat: interactive CF Apps install menu with oem/collaborator/orchard profiles
Adds a manifest-driven "Install CircuitForge Apps" menu to install.sh,
alongside the existing extras-menu pattern.

- cf-apps/*.manifest: one file per product (circuitforge-core, peregrine,
  kiwi, snipe, turnstone, pagepiper, linnet - the beta/alpha menagerie
  products), declaring repo URLs, supported install types, conda env,
  .env template, and per-install-type setup hooks. Hooks prefer shelling
  out to each product's own install.sh/Makefile/docker-compose rather
  than reimplementing their setup logic.
- lib/cf-apps.functions: registry loader, provisioning-profile prompt
  (oem/collaborator/orchard), app multiselect menu, and the install
  dispatcher (clone, .env bootstrap, install-type selection, hook
  dispatch). circuitforge-core installs automatically as a dependency
  for apps that declare app_needs_core=true.

Provisioning profiles gate both which apps are offered and which remote
credentials are used:
- oem: public CircuitForgeLLC GitHub mirrors only, no Forgejo access,
  no circuitforge-orch (product install menu only)
- collaborator: private Circuit-Forge Forgejo, same product menu
- orchard: narrow flow, not the product menu - clones circuitforge-orch
  (Forgejo-only, no public mirror exists) and hands off interactively to
  its own install.sh, which gathers agent/coordinator topology itself
  (it has no --topology/--coordinator-url flags to script around).
  NOTE: circuitforge-orch has no model-sync/cache-sync mechanism today
  (checked its install.sh and README); this wrapper doesn't invent one.

Design rationale and survey of each product's real install story:
circuitforge-plans/cf-node-bootstrap/superpowers/plans/2026-07-17-cf-apps-install-menu.md
2026-07-17 20:42:21 -07:00

30 lines
1.1 KiB
Text

app_name="turnstone"
app_desc="Log diagnostics tool (beta)"
app_repo_url_github="https://github.com/CircuitForgeLLC/turnstone.git"
app_repo_url_forgejo="https://git.opensourcesolarpunk.com/Circuit-Forge/turnstone.git"
app_available_profiles=(oem collaborator)
app_install_types=(bare-metal docker)
app_conda_env="cf"
app_env_template=""
app_needs_core=true
# turnstone's own install.sh finds/installs conda and sets up the "cf" env
# + pip deps; shell out rather than reimplementing that.
app_setup_bare_metal() {
local dir="$1"
boxline "Handing off to ${app_name}'s own install.sh..."
(cd "$dir" && ./install.sh)
}
# turnstone ships docker-standalone.sh alongside docker-compose.yml for a
# single-container run; prefer that as the simpler default entry point.
app_setup_docker() {
local dir="$1"
if [ -x "${dir}/docker-standalone.sh" ]; then
boxline "Running ${app_name}'s docker-standalone.sh..."
(cd "$dir" && ./docker-standalone.sh)
else
boxline "Running docker compose up for ${app_name}..."
(cd "$dir" && docker compose -f docker-compose.yml up -d)
fi
}