Skip to content

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 #

@[params]
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 #

@[params]
struct ArgsList {
pub mut:
	fromdb bool // will load from filesystem
}

struct InstallArgs #

@[params]
struct InstallArgs {
pub mut:
	reset bool
}

struct Salrunner #

@[heap]
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 #

@[params]
struct StartArgs {
pub mut:
	reset bool
}