- Added a GitHub Actions workflow to automatically run Rhai tests on push and pull request events. - Created documentation for the CI workflow. - Improved test runner script to log output to a file and check for test failures.
2.4 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.
- OS Module Tests: Tests for file system, download, and package management operations
- Git Module Tests: Tests for Git repository management and operations
- Running Tests: Instructions for running all Rhai tests
- CI Workflow: Continuous integration workflow for Rhai tests
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:
- Import the necessary modules (they're automatically registered)
- Use the functions provided by each module
- Handle errors appropriately
- 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.