sal/docs/rhai/index.md
Mahmoud Emad 32217b6545
Some checks failed
Rhai Tests / Run Rhai Tests (push) Waiting to run
Rhai Tests / Run Rhai Tests (pull_request) Has been cancelled
docs: Add documentation for Process module tests
- Added documentation for the new Process module tests, including
  details on test structure, execution, and individual test
  descriptions.
- Created new documentation files for Process module tests.
- Updated the main Rhai documentation index to include the new
  Process module tests.
2025-05-08 15:54:39 +03:00

2.5 KiB

Rhai Scripting in SAL

This documentation covers the Rhai scripting integration in the SAL (System Abstraction Layer) library.

Overview

SAL provides integration with the Rhai scripting language, allowing you to use SAL's functionality in scripts. This enables automation of system tasks, testing, and more complex operations without having to write Rust code.

Modules

SAL exposes the following modules to Rhai scripts:

  • OS Module: File system operations, downloads, and package management
  • Process Module: Process management and command execution
  • Git Module: Git repository operations
  • Text Module: Text processing utilities
  • Buildah Module: Container image building
  • Nerdctl Module: Container runtime operations
  • RFS Module: Remote file system operations

Running Rhai Scripts

You can run Rhai scripts using the herodo binary:

herodo --path path/to/script.rhai

Testing

SAL includes test scripts for verifying the functionality of its Rhai integration. These tests are located in the src/rhai_tests directory and are organized by module.

Examples

For examples of how to use SAL's Rhai integration, see the examples directory in the project root. These examples demonstrate various features and use cases.

Writing Your Own Scripts

When writing Rhai scripts that use SAL:

  1. Import the necessary modules (they're automatically registered)
  2. Use the functions provided by each module
  3. Handle errors appropriately
  4. Clean up resources when done

Example:

// Simple example of using the OS module
let test_dir = "my_test_dir";
mkdir(test_dir);

if exist(test_dir) {
    print(`Directory ${test_dir} created successfully`);

    // Create a file
    let test_file = test_dir + "/test.txt";
    file_write(test_file, "Hello, world!");

    // Read the file
    let content = file_read(test_file);
    print(`File content: ${content}`);

    // Clean up
    delete(test_dir);
}

API Reference

For detailed information about the functions available in each module, refer to the module-specific documentation.