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.yml
1
when any validation failure is detected--gitlab
, --exit-code
, --no-exit-code
, --verbose
run: Execute a workflow or pipeline locally
docker
(default), podman
, emulation
--runtime
, --preserve-containers-on-failure
, --gitlab
, --verbose
tui: 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>>(())
# })?;