installers.horus.herorunner #
Herorunner Installer
A V language installer module for building and managing the Hero Runner service. This installer handles the complete lifecycle of the Herorunner binary from the Horus workspace.
Features
- Automatic Rust Installation: Installs Rust toolchain if not present
- Git Repository Management: Clones and manages the horus repository
- Binary Building: Compiles the herorunner binary from the horus workspace
- Service Management: Start/stop/restart via zinit
- Configuration: Customizable Redis connection
Quick Start
Manual Usage
import freeflowuniverse.herolib.installers.horus.herorunner as herorunner_installer
mut herorunner := herorunner_installer.get()!
herorunner.install()!
herorunner.start()!
Configuration
!!herorunner.configure
name:'default'
binary_path:'/hero/var/bin/herorunner'
redis_addr:'127.0.0.1:6379'
log_level:'info'
repo_path:'/root/code/git.ourworld.tf/herocode/horus'
Configuration Fields
- name: Instance name (default: 'default')
- binary_path: Path where the herorunner binary will be installed (default: '/hero/var/bin/herorunner')
- redis_addr: Redis server address (default: '127.0.0.1:6379')
- log_level: Rust log level - trace, debug, info, warn, error (default: 'info')
- repo_path: Path to clone the horus repository (default: '/root/code/git.ourworld.tf/herocode/horus')
Commands
Install
Builds the herorunner binary from the horus workspace. This will:1. Install Rust if not present2. Clone the horus repository from git.ourworld.tf3. Build the herorunner binary with cargo build -p runner-hero --release
hero herorunner.install
Start
Starts the herorunner service using zinit:
hero herorunner.start
Stop
Stops the running service:
hero herorunner.stop
Restart
Restarts the service:
hero herorunner.restart
Destroy
Stops the service and removes all files:
hero herorunner.destroy
Requirements
- Dependencies:
- Rust toolchain (automatically installed)
- Git (for cloning repository)
- Redis (must be running separately)
Architecture
The installer follows the standard herolib installer pattern:
- herorunner_model.v: Configuration structure and initialization
- herorunner_actions.v: Build, install, start, stop, destroy logic
- herorunner_factory_.v: Factory pattern for instance management
Notes
- The installer builds from source rather than downloading pre-built binaries
- Redis must be running and accessible at the configured address
- The binary is built with
RUSTFLAGS="-A warnings"to suppress warnings - Service management uses zinit by default
fn delete #
fn delete(args ArgsGet) !
fn exists #
fn exists(args ArgsGet) !bool
does the config exists?
fn get #
fn get(args ArgsGet) !&Herorunner
fn heroscript_dumps #
fn heroscript_dumps(obj Herorunner) !string
///////////NORMALLY NO NEED TO TOUCH
fn heroscript_loads #
fn heroscript_loads(heroscript string) !Herorunner
fn list #
fn list(args ArgsList) ![]&Herorunner
if fromdb set: load from filesystem, and not from mem, will also reset what is in mem
fn new #
fn new(args ArgsGet) !&Herorunner
fn play #
fn play(mut plbook PlayBook) !
fn set #
fn set(o Herorunner) !
register the config for the future
fn switch #
fn switch(name string)
switch instance to be used for herorunner
struct ArgsGet #
struct ArgsGet {
pub mut:
name string = 'default'
binary_path string
redis_addr string
log_level string
fromdb bool // will load from filesystem
create bool // default will not create if not exist
}
///////FACTORY
struct ArgsList #
struct ArgsList {
pub mut:
fromdb bool // will load from filesystem
}
struct Herorunner #
struct Herorunner {
pub mut:
name string = 'default'
binary_path string = os.join_path(os.home_dir(), 'hero/bin/herorunner')
redis_addr string = '127.0.0.1:6379'
log_level string = 'info'
}
THIS THE THE SOURCE OF THE INFORMATION OF THIS FILE, HERE WE HAVE THE CONFIG OBJECT CONFIGURED AND MODELLED
fn (Herorunner) install_start #
fn (mut self Herorunner) install_start(args InstallArgs) !
fn (Herorunner) reload #
fn (mut self Herorunner) reload() !
load from disk and make sure is properly intialized
fn (Herorunner) restart #
fn (mut self Herorunner) restart(args StartArgs) !
fn (Herorunner) running #
fn (mut self Herorunner) running() !bool
fn (Herorunner) start #
fn (mut self Herorunner) start(args StartArgs) !
fn (Herorunner) stop #
fn (mut self Herorunner) stop() !
struct InstallArgs #
struct InstallArgs {
pub mut:
reset bool
}
struct StartArgs #
struct StartArgs {
pub mut:
reset bool
}