| Crates.io | wrkflw |
| lib.rs | wrkflw |
| version | 0.7.3 |
| created_at | 2025-03-29 07:41:21.864282+00 |
| updated_at | 2025-08-28 07:33:19.002364+00 |
| description | A GitHub Actions workflow validator and executor |
| homepage | https://github.com/bahdotsh/wrkflw |
| repository | https://github.com/bahdotsh/wrkflw |
| max_upload_size | |
| id | 1610908 |
| size | 117,303 |
This crate provides the wrkflw command-line interface and a thin library surface that ties together all WRKFLW subcrates. It lets you validate and execute GitHub Actions workflows and GitLab CI pipelines locally, with a built-in TUI for an interactive experience.
cargo install wrkflw
# Launch the TUI (auto-loads .github/workflows)
wrkflw
# Validate all workflows in the default directory
wrkflw validate
# Validate a specific file or directory
wrkflw validate .github/workflows/ci.yml
wrkflw validate path/to/workflows
# Validate multiple files and/or directories
wrkflw validate path/to/flow-1.yml path/to/flow-2.yml path/to/workflows
# Run a workflow (Docker by default)
wrkflw run .github/workflows/ci.yml
# Use Podman or emulation instead of Docker
wrkflw run --runtime podman .github/workflows/ci.yml
wrkflw run --runtime emulation .github/workflows/ci.yml
# Open the TUI explicitly
wrkflw tui
wrkflw tui --runtime podman
validate: Validate workflow/pipeline files and/or directories
.github/workflows/*.yml.gitlab-ci.yml or files ending with gitlab-ci.yml1 when any validation failure is detected--gitlab, --exit-code, --no-exit-code, --verboserun: Execute a workflow or pipeline locally
docker (default), podman, emulation--runtime, --preserve-containers-on-failure, --gitlab, --verbosetui: Interactive terminal interface
trigger: Trigger a GitHub workflow (requires GITHUB_TOKEN)
trigger-gitlab: Trigger a GitLab pipeline (requires GITLAB_TOKEN)
list: Show detected workflows and pipelines in the repo
trigger when calling GitHubtrigger-gitlab (api scope)validate: 0 if all pass; 1 if any fail (unless --no-exit-code)run: 0 on success, 1 if execution failsThis crate re-exports subcrates for convenience if you want to embed functionality:
use std::path::Path;
use wrkflw::executor::{execute_workflow, ExecutionConfig, RuntimeType};
# tokio_test::block_on(async {
let cfg = ExecutionConfig {
runtime_type: RuntimeType::Docker,
verbose: true,
preserve_containers_on_failure: false,
};
let result = execute_workflow(Path::new(".github/workflows/ci.yml"), cfg).await?;
println!("status: {:?}", result.summary_status);
# Ok::<_, Box<dyn std::error::Error>>(())
# })?;
You can also run the TUI programmatically:
use std::path::PathBuf;
use wrkflw::executor::RuntimeType;
use wrkflw::ui::run_wrkflw_tui;
# tokio_test::block_on(async {
let path = PathBuf::from(".github/workflows");
run_wrkflw_tui(Some(&path), RuntimeType::Docker, true, false).await?;
# Ok::<_, Box<dyn std::error::Error>>(())
# })?;