| Crates.io | job_config |
| lib.rs | job_config |
| version | 0.3.6 |
| created_at | 2025-11-10 02:08:47.885731+00 |
| updated_at | 2025-11-23 09:34:03.278434+00 |
| description | Configuration parser for Silva workflow jobs with TOML support |
| homepage | |
| repository | https://github.com/chiral-data/silva |
| max_upload_size | |
| id | 1924656 |
| size | 59,659 |
Configuration parser for Silva workflow jobs with TOML support.
job_config provides a simple and type-safe way to parse job configuration files for workflow systems. It supports Docker containers, custom scripts, GPU usage, job dependencies, and file input/output specifications.
depends_onAdd this to your Cargo.toml:
[dependencies]
job_config = "0.3.3"
use job_config::config::JobConfig;
// Load configuration from a TOML file
let config = JobConfig::load_from_file("@job.toml")?;
// Access configuration fields
match &config.container {
job_config::config::Container::DockerImage(image) => {
println!("Using Docker image: {}", image);
}
job_config::config::Container::DockerFile(path) => {
println!("Using Dockerfile: {}", path);
}
}
println!("Run script: {}", config.scripts.run);
[container]
docker_image = "ubuntu:22.04"
[container]
docker_image = "python:3.11"
[scripts]
pre = "setup.sh"
run = "train.sh"
post = "cleanup.sh"
use_gpu = true
# Job dependencies
depends_on = ["prepare_data", "download_model"]
# Input files from dependency outputs (supports glob patterns)
inputs = ["*.csv", "models/*.pt"]
# Output files to collect (supports glob patterns)
outputs = ["results/*.json", "trained_model.pt"]
Specify either a Docker image or Dockerfile:
[container]
# Option 1: Docker image
docker_image = "ubuntu:22.04"
# Option 2: Dockerfile path (mutually exclusive with docker_image)
dockerfile = "./Dockerfile"
Customize script names (defaults shown):
[scripts]
pre = "pre_run.sh" # Default: "pre_run.sh"
run = "run.sh" # Default: "run.sh"
post = "post_run.sh" # Default: "post_run.sh"
use_gpu = true # Default: false
depends_on = ["job1", "job2"]
Specify which files to copy from dependency job outputs:
# Copy specific patterns
inputs = ["*.csv", "data/*.json"]
# If omitted or empty, all output files from dependencies are copied
inputs = []
Specify which files to collect after job completion:
outputs = ["results/*.json", "*.csv", "models/"]
JobConfigMain configuration structure:
pub struct JobConfig {
pub container: Container,
pub scripts: Scripts,
pub use_gpu: bool,
pub inputs: Vec<String>,
pub outputs: Vec<String>,
pub depends_on: Vec<String>,
}
JobConfig::load_from_file(path) - Load configuration from a TOML fileResult<JobConfig, ConfigError>use job_config::config::{JobConfig, ConfigError};
match JobConfig::load_from_file("@job.toml") {
Ok(config) => {
// Use config
}
Err(ConfigError::FileNotFound(path)) => {
eprintln!("Config file not found: {}", path);
}
Err(ConfigError::ParseError(msg)) => {
eprintln!("Failed to parse config: {}", msg);
}
Err(e) => {
eprintln!("Error: {}", e);
}
}
MIT License - see LICENSE file for details.