installers.horus.salrunner #
Salrunner Installer
A V language installer module for building and managing the Hero Runner service. This installer handles the complete lifecycle of the Salrunner 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 salrunner 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.salrunner as salrunner_installer
mut salrunner := salrunner_installer.get()!
salrunner.install()!
salrunner.start()!
Configuration
!!salrunner.configure
name:'default'
binary_path:'/hero/var/bin/salrunner'
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 salrunner binary will be installed (default: '/hero/var/bin/salrunner')
- 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 salrunner binary from the horus workspace. This will:1. Install Rust if not present2. Clone the horus repository from git.ourworld.tf3. Build the salrunner binary with cargo build -p runner-sal --release
hero salrunner.install
Start
Starts the salrunner service using zinit:
hero salrunner.start
Stop
Stops the running service:
hero salrunner.stop
Restart
Restarts the service:
hero salrunner.restart
Destroy
Stops the service and removes all files:
hero salrunner.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:
- salrunner_model.v: Configuration structure and initialization
- salrunner_actions.v: Build, install, start, stop, destroy logic
- salrunner_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) !&Salrunner
fn heroscript_dumps #
fn heroscript_dumps(obj Salrunner) !string
///////////NORMALLY NO NEED TO TOUCH
fn heroscript_loads #
fn heroscript_loads(heroscript string) !Salrunner
fn list #
fn list(args ArgsList) ![]&Salrunner
if fromdb set: load from filesystem, and not from mem, will also reset what is in mem
fn new #
fn new(args ArgsGet) !&Salrunner
fn play #
fn play(mut plbook PlayBook) !
fn set #
fn set(o Salrunner) !
register the config for the future
fn switch #
fn switch(name string)
switch instance to be used for salrunner
struct ArgsGet #
struct ArgsGet {
pub mut:
name string = 'default'
binary_path string
redis_addr string
log_level string
repo_path 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 InstallArgs #
struct InstallArgs {
pub mut:
reset bool
}
struct Salrunner #
struct Salrunner {
pub mut:
name string = 'default'
binary_path string = os.join_path(os.home_dir(), 'hero/bin/runner_sal')
redis_addr string = '127.0.0.1:6379'
log_level string = 'info'
repo_path string = '/root/code/git.ourworld.tf/herocode/horus'
}
THIS THE THE SOURCE OF THE INFORMATION OF THIS FILE, HERE WE HAVE THE CONFIG OBJECT CONFIGURED AND MODELLED
fn (Salrunner) install_start #
fn (mut self Salrunner) install_start(args InstallArgs) !
fn (Salrunner) reload #
fn (mut self Salrunner) reload() !
load from disk and make sure is properly intialized
fn (Salrunner) restart #
fn (mut self Salrunner) restart(args StartArgs) !
fn (Salrunner) running #
fn (mut self Salrunner) running() !bool
fn (Salrunner) start #
fn (mut self Salrunner) start(args StartArgs) !
fn (Salrunner) stop #
fn (mut self Salrunner) stop() !
struct StartArgs #
struct StartArgs {
pub mut:
reset bool
}